diff -ruN --exclude='*.cmd' --exclude='*.o' --exclude='*.ko' linux.old/drivers/acpi/scan.c linux-2.6.9/drivers/acpi/scan.c --- linux.old/drivers/acpi/scan.c 2004-09-04 14:16:37.000000000 +0200 +++ linux-2.6.9/drivers/acpi/scan.c 2004-09-04 14:39:47.000000000 +0200 @@ -8,6 +8,7 @@ #include #include /* for acpi_ex_eisa_id_to_string() */ +#include #define _COMPONENT ACPI_BUS_COMPONENT ACPI_MODULE_NAME ("scan") @@ -1070,4 +1071,22 @@ return_VALUE(result); } +int acpi_driver_scan(void (* handler)(struct acpi_device * dev)) +{ + struct list_head * node, * next; + if (!handler) + return_VALUE(-EINVAL); + + spin_lock(&acpi_device_lock); + list_for_each_safe(node, next, &acpi_device_list) { + struct acpi_device * dev = container_of(node, struct acpi_device, g_list); + spin_unlock(&acpi_device_lock); + handler(dev); + spin_lock(&acpi_device_lock); + } + spin_unlock(&acpi_device_lock); + return_VALUE(0); +} + subsys_initcall(acpi_scan_init); +EXPORT_SYMBOL(acpi_driver_scan);