diff -urpNX ../dontdiff linux-forrh/drivers/hotplug/acpiphp_glue.c linux-hotp/drivers/hotplug/acpiphp_glue.c --- linux-forrh/drivers/hotplug/acpiphp_glue.c Sun Dec 15 09:43:55 2002 +++ linux-hotp/drivers/hotplug/acpiphp_glue.c Sun Dec 15 09:48:53 2002 @@ -750,8 +750,9 @@ find_p2p_bridge (acpi_handle handle, u32 /* find hot-pluggable slots, and then find P2P bridge */ -static int add_bridges (acpi_handle *handle) +static int add_bridge(struct acpi_device *device) { + acpi_handle *handle = device->handle; acpi_status status; unsigned long tmp; int seg, bus; @@ -805,36 +806,6 @@ static int add_bridges (acpi_handle *han } -/* 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; - acpi_device_info info; - char objname[5]; - 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; @@ -1194,6 +1165,14 @@ static void handle_hotplug_event_func (a } } +static struct acpi_driver acpi_pci_hp_driver = { + .name = "pci_hp", + .class = "", + .ids = ACPI_PCI_HOST_HID, + .ops = { + .add = add_bridge, + }, +}; /** * acpiphp_glue_init - initializes all PCI hotplug - ACPI glue data structures @@ -1201,7 +1180,7 @@ static void handle_hotplug_event_func (a */ int acpiphp_glue_init (void) { - acpi_status status; + int num; if (list_empty(&pci_root_buses)) return -1; @@ -1211,14 +1190,10 @@ int acpiphp_glue_init (void) if (!default_ops) return -1; - status = acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, - ACPI_UINT32_MAX, find_host_bridge, - NULL, NULL); + num = acpi_bus_register_driver(&acpi_pci_hp_driver); - if (ACPI_FAILURE(status)) { - err("%s: acpi_walk_namespace() failed\n", __FUNCTION__); + if (num <= 0) return -1; - } return 0; } .