aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/acpi')
-rw-r--r--drivers/acpi/pci_root.c25
1 files changed, 9 insertions, 16 deletions
diff --git a/drivers/acpi/pci_root.c b/drivers/acpi/pci_root.c
index 4fb747205418..e95b5ac2e609 100644
--- a/drivers/acpi/pci_root.c
+++ b/drivers/acpi/pci_root.c
@@ -63,9 +63,10 @@ static struct acpi_driver acpi_pci_root_driver = {
63 63
64struct acpi_pci_root { 64struct acpi_pci_root {
65 struct list_head node; 65 struct list_head node;
66 struct acpi_device * device; 66 struct acpi_device *device;
67 struct acpi_pci_id id;
68 struct pci_bus *bus; 67 struct pci_bus *bus;
68 u16 segment;
69 u8 bus_nr;
69 70
70 u32 osc_support_set; /* _OSC state of support bits */ 71 u32 osc_support_set; /* _OSC state of support bits */
71 u32 osc_control_set; /* _OSC state of control bits */ 72 u32 osc_control_set; /* _OSC state of control bits */
@@ -129,7 +130,7 @@ acpi_handle acpi_get_pci_rootbridge_handle(unsigned int seg, unsigned int bus)
129 struct acpi_pci_root *root; 130 struct acpi_pci_root *root;
130 131
131 list_for_each_entry(root, &acpi_pci_roots, node) 132 list_for_each_entry(root, &acpi_pci_roots, node)
132 if ((root->id.segment == (u16) seg) && (root->id.bus == (u16) bus)) 133 if ((root->segment == (u16) seg) && (root->bus_nr == (u16) bus))
133 return root->device->handle; 134 return root->device->handle;
134 return NULL; 135 return NULL;
135} 136}
@@ -395,6 +396,8 @@ static int __devinit acpi_pci_root_add(struct acpi_device *device)
395 396
396 INIT_LIST_HEAD(&root->node); 397 INIT_LIST_HEAD(&root->node);
397 root->device = device; 398 root->device = device;
399 root->segment = segment & 0xFFFF;
400 root->bus_nr = bus & 0xFF;
398 strcpy(acpi_device_name(device), ACPI_PCI_ROOT_DEVICE_NAME); 401 strcpy(acpi_device_name(device), ACPI_PCI_ROOT_DEVICE_NAME);
399 strcpy(acpi_device_class(device), ACPI_PCI_ROOT_CLASS); 402 strcpy(acpi_device_class(device), ACPI_PCI_ROOT_CLASS);
400 device->driver_data = root; 403 device->driver_data = root;
@@ -409,16 +412,6 @@ static int __devinit acpi_pci_root_add(struct acpi_device *device)
409 acpi_pci_osc_support(root, flags); 412 acpi_pci_osc_support(root, flags);
410 413
411 /* 414 /*
412 * Device & Function
413 * -----------------
414 * Obtained from _ADR (which has already been evaluated for us).
415 */
416 root->id.segment = segment & 0xFFFF;
417 root->id.bus = bus & 0xFF;
418 root->id.device = device->pnp.bus_address >> 16;
419 root->id.function = device->pnp.bus_address & 0xFFFF;
420
421 /*
422 * TBD: Need PCI interface for enumeration/configuration of roots. 415 * TBD: Need PCI interface for enumeration/configuration of roots.
423 */ 416 */
424 417
@@ -427,7 +420,7 @@ static int __devinit acpi_pci_root_add(struct acpi_device *device)
427 420
428 printk(KERN_INFO PREFIX "%s [%s] (%04x:%02x)\n", 421 printk(KERN_INFO PREFIX "%s [%s] (%04x:%02x)\n",
429 acpi_device_name(device), acpi_device_bid(device), 422 acpi_device_name(device), acpi_device_bid(device),
430 root->id.segment, root->id.bus); 423 root->segment, root->bus_nr);
431 424
432 /* 425 /*
433 * Scan the Root Bridge 426 * Scan the Root Bridge
@@ -436,11 +429,11 @@ static int __devinit acpi_pci_root_add(struct acpi_device *device)
436 * PCI namespace does not get created until this call is made (and 429 * PCI namespace does not get created until this call is made (and
437 * thus the root bridge's pci_dev does not exist). 430 * thus the root bridge's pci_dev does not exist).
438 */ 431 */
439 root->bus = pci_acpi_scan_root(device, root->id.segment, root->id.bus); 432 root->bus = pci_acpi_scan_root(device, segment, bus);
440 if (!root->bus) { 433 if (!root->bus) {
441 printk(KERN_ERR PREFIX 434 printk(KERN_ERR PREFIX
442 "Bus %04x:%02x not present in PCI namespace\n", 435 "Bus %04x:%02x not present in PCI namespace\n",
443 root->id.segment, root->id.bus); 436 root->segment, root->bus_nr);
444 result = -ENODEV; 437 result = -ENODEV;
445 goto end; 438 goto end;
446 } 439 }