| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | /* | 
|  | 2 | * Minimalist driver for a generic PCI-to-EISA bridge. | 
|  | 3 | * | 
|  | 4 | * (C) 2003 Marc Zyngier <maz@wild-wind.fr.eu.org> | 
|  | 5 | * | 
|  | 6 | * This code is released under the GPL version 2. | 
|  | 7 | * | 
|  | 8 | * Ivan Kokshaysky <ink@jurassic.park.msu.ru> : | 
|  | 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 |  | 
| Adrian Bunk | 74b9a29 | 2007-03-26 21:32:27 -0800 | [diff] [blame] | 22 | static int __init pci_eisa_init(struct pci_dev *pdev, | 
|  | 23 | const struct pci_device_id *ent) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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; | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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; | 
| Greg Kroah-Hartman | 4b9d0d3 | 2009-04-30 14:43:31 -0700 | [diff] [blame] | 38 | dev_set_drvdata(pci_eisa_root.dev, &pci_eisa_root); | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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); |