diff options
| author | Linus Torvalds <torvalds@penguin.transmeta.com> | 2003-01-14 01:03:39 -0800 |
|---|---|---|
| committer | Linus Torvalds <torvalds@penguin.transmeta.com> | 2003-01-14 01:03:39 -0800 |
| commit | 244aebef668defeb01719e3e225d183df502f994 (patch) | |
| tree | e49569e661fa3577689ca5cf8f21d8999c41c3e8 | |
| parent | b41499dad760ca75b11bbda10010d4f9edff73f7 (diff) | |
| parent | 7745fcdd860603832922f19a97ba79c5314ee77b (diff) | |
Merge bk://linuxusb.bkbits.net/pci_hp-2.5
into penguin.transmeta.com:/home/penguin/torvalds/repositories/kernel/linux
| -rw-r--r-- | drivers/hotplug/acpiphp_glue.c | 45 |
1 files changed, 11 insertions, 34 deletions
diff --git a/drivers/hotplug/acpiphp_glue.c b/drivers/hotplug/acpiphp_glue.c index 6c16481c4102..7350c4071228 100644 --- a/drivers/hotplug/acpiphp_glue.c +++ b/drivers/hotplug/acpiphp_glue.c @@ -712,8 +712,9 @@ find_p2p_bridge (acpi_handle handle, u32 lvl, void *context, void **rv) /* find hot-pluggable slots, and then find P2P bridge */ -static int add_bridges (acpi_handle *handle) +static int add_bridges(struct acpi_device *device) { + acpi_handle *handle = device->handle; acpi_status status; unsigned long tmp; int seg, bus; @@ -767,36 +768,6 @@ static int add_bridges (acpi_handle *handle) } -/* callback routine to enumerate all the bridges in ACPI namespace */ -static acpi_status -find_host_bridge (acpi_handle handle, u32 lvl, void *context, void **rv) -{ - acpi_status status; - struct acpi_device_info info; - char objname[5]; - struct acpi_buffer buffer = { .length = sizeof(objname), - .pointer = objname }; - - status = acpi_get_object_info(handle, &info); - if (ACPI_FAILURE(status)) { - dbg("%s: failed to get bridge information\n", __FUNCTION__); - return AE_OK; /* continue */ - } - - info.hardware_id[sizeof(info.hardware_id)-1] = '\0'; - - /* TBD use acpi_get_devices() API */ - if (info.current_status && - (info.valid & ACPI_VALID_HID) && - strcmp(info.hardware_id, ACPI_PCI_HOST_HID) == 0) { - acpi_get_name(handle, ACPI_SINGLE_NAME, &buffer); - dbg("checking PCI-hotplug capable bridges under [%s]\n", objname); - add_bridges(handle); - } - return AE_OK; -} - - static int power_on_slot (struct acpiphp_slot *slot) { acpi_status status; @@ -1157,6 +1128,14 @@ static void handle_hotplug_event_func (acpi_handle handle, u32 type, void *conte } } +static struct acpi_driver acpi_pci_hp_driver = { + .name = "pci_hp", + .class = "", + .ids = ACPI_PCI_HOST_HID, + .ops = { + .add = add_bridges, + } +}; /** * acpiphp_glue_init - initializes all PCI hotplug - ACPI glue data structures @@ -1169,9 +1148,7 @@ int acpiphp_glue_init (void) if (list_empty(&pci_root_buses)) return -1; - status = acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, - ACPI_UINT32_MAX, find_host_bridge, - NULL, NULL); + status = acpi_bus_register_driver(&acpi_pci_hp_driver); if (ACPI_FAILURE(status)) { err("%s: acpi_walk_namespace() failed\n", __FUNCTION__); |
