aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/eisa
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/eisa')
-rw-r--r--drivers/eisa/pci_eisa.c28
1 files changed, 25 insertions, 3 deletions
diff --git a/drivers/eisa/pci_eisa.c b/drivers/eisa/pci_eisa.c
index cdae207028a7..ef5c3ec87432 100644
--- a/drivers/eisa/pci_eisa.c
+++ b/drivers/eisa/pci_eisa.c
@@ -22,7 +22,8 @@ static struct eisa_root_device pci_eisa_root;
22static int __init pci_eisa_init(struct pci_dev *pdev, 22static int __init pci_eisa_init(struct pci_dev *pdev,
23 const struct pci_device_id *ent) 23 const struct pci_device_id *ent)
24{ 24{
25 int rc; 25 int rc, i;
26 struct resource *res, *bus_res = NULL;
26 27
27 if ((rc = pci_enable_device (pdev))) { 28 if ((rc = pci_enable_device (pdev))) {
28 printk (KERN_ERR "pci_eisa : Could not enable device %s\n", 29 printk (KERN_ERR "pci_eisa : Could not enable device %s\n",
@@ -30,9 +31,30 @@ static int __init pci_eisa_init(struct pci_dev *pdev,
30 return rc; 31 return rc;
31 } 32 }
32 33
34 /*
35 * The Intel 82375 PCI-EISA bridge is a subtractive-decode PCI
36 * device, so the resources available on EISA are the same as those
37 * available on the 82375 bus. This works the same as a PCI-PCI
38 * bridge in subtractive-decode mode (see pci_read_bridge_bases()).
39 * We assume other PCI-EISA bridges are similar.
40 *
41 * eisa_root_register() can only deal with a single io port resource,
42 * so we use the first valid io port resource.
43 */
44 pci_bus_for_each_resource(pdev->bus, res, i)
45 if (res && (res->flags & IORESOURCE_IO)) {
46 bus_res = res;
47 break;
48 }
49
50 if (!bus_res) {
51 dev_err(&pdev->dev, "No resources available\n");
52 return -1;
53 }
54
33 pci_eisa_root.dev = &pdev->dev; 55 pci_eisa_root.dev = &pdev->dev;
34 pci_eisa_root.res = pdev->bus->resource[0]; 56 pci_eisa_root.res = bus_res;
35 pci_eisa_root.bus_base_addr = pdev->bus->resource[0]->start; 57 pci_eisa_root.bus_base_addr = bus_res->start;
36 pci_eisa_root.slots = EISA_MAX_SLOTS; 58 pci_eisa_root.slots = EISA_MAX_SLOTS;
37 pci_eisa_root.dma_mask = pdev->dma_mask; 59 pci_eisa_root.dma_mask = pdev->dma_mask;
38 dev_set_drvdata(pci_eisa_root.dev, &pci_eisa_root); 60 dev_set_drvdata(pci_eisa_root.dev, &pci_eisa_root);