Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/drivers/eisa/pci_eisa.c
15112 views
1
/*
2
* Minimalist driver for a generic PCI-to-EISA bridge.
3
*
4
* (C) 2003 Marc Zyngier <[email protected]>
5
*
6
* This code is released under the GPL version 2.
7
*
8
* Ivan Kokshaysky <[email protected]> :
9
* Generalisation from i82375 to PCI_CLASS_BRIDGE_EISA.
10
*/
11
12
#include <linux/kernel.h>
13
#include <linux/device.h>
14
#include <linux/eisa.h>
15
#include <linux/pci.h>
16
#include <linux/module.h>
17
#include <linux/init.h>
18
19
/* There is only *one* pci_eisa device per machine, right ? */
20
static struct eisa_root_device pci_eisa_root;
21
22
static int __init pci_eisa_init(struct pci_dev *pdev,
23
const struct pci_device_id *ent)
24
{
25
int rc;
26
27
if ((rc = pci_enable_device (pdev))) {
28
printk (KERN_ERR "pci_eisa : Could not enable device %s\n",
29
pci_name(pdev));
30
return rc;
31
}
32
33
pci_eisa_root.dev = &pdev->dev;
34
pci_eisa_root.res = pdev->bus->resource[0];
35
pci_eisa_root.bus_base_addr = pdev->bus->resource[0]->start;
36
pci_eisa_root.slots = EISA_MAX_SLOTS;
37
pci_eisa_root.dma_mask = pdev->dma_mask;
38
dev_set_drvdata(pci_eisa_root.dev, &pci_eisa_root);
39
40
if (eisa_root_register (&pci_eisa_root)) {
41
printk (KERN_ERR "pci_eisa : Could not register EISA root\n");
42
return -1;
43
}
44
45
return 0;
46
}
47
48
static struct pci_device_id pci_eisa_pci_tbl[] = {
49
{ PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
50
PCI_CLASS_BRIDGE_EISA << 8, 0xffff00, 0 },
51
{ 0, }
52
};
53
54
static struct pci_driver pci_eisa_driver = {
55
.name = "pci_eisa",
56
.id_table = pci_eisa_pci_tbl,
57
.probe = pci_eisa_init,
58
};
59
60
static int __init pci_eisa_init_module (void)
61
{
62
return pci_register_driver (&pci_eisa_driver);
63
}
64
65
device_initcall(pci_eisa_init_module);
66
MODULE_DEVICE_TABLE(pci, pci_eisa_pci_tbl);
67
68