summaryrefslogtreecommitdiff
path: root/include/acpi
diff options
context:
space:
mode:
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>2013-03-03 23:05:29 +0100
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2013-03-04 14:25:32 +0100
commita33ec399e9fc266ba20f9b71d693aa63658bf2aa (patch)
tree404418949973ac053cfe02df039124d7189db1ed /include/acpi
parentc56980744ed99994799850903627c4bbb5fed006 (diff)
downloadlinux-next-a33ec399e9fc266ba20f9b71d693aa63658bf2aa.tar.gz
ACPI / scan: Introduce common code for ACPI-based device hotplug
Multiple drivers handling hotplug-capable ACPI device nodes install notify handlers covering the same types of events in a very similar way. Moreover, those handlers are installed in separate namespace walks, although that really should be done during namespace scans carried out by acpi_bus_scan(). This leads to substantial code duplication, unnecessary overhead and behavior that is hard to follow. For this reason, introduce common code in drivers/acpi/scan.c for handling hotplug-related notification and carrying out device insertion and eject operations in a generic fashion, such that it may be used by all of the relevant drivers in the future. To cover the existing differences between those drivers introduce struct acpi_hotplug_profile for representing collections of hotplug settings associated with different ACPI scan handlers that can be used by the drivers to make the common code reflect their current behavior. Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Acked-by: Toshi Kani <toshi.kani@hp.com> Tested-by: Toshi Kani <toshi.kani@hp.com>
Diffstat (limited to 'include/acpi')
-rw-r--r--include/acpi/acpi_bus.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h
index e65278f560c4..f2c1d08a4798 100644
--- a/include/acpi/acpi_bus.h
+++ b/include/acpi/acpi_bus.h
@@ -88,11 +88,23 @@ struct acpi_device;
* -----------------
*/
+enum acpi_hotplug_mode {
+ AHM_GENERIC = 0,
+ AHM_CONTAINER,
+ AHM_COUNT
+};
+
+struct acpi_hotplug_profile {
+ bool enabled:1;
+ enum acpi_hotplug_mode mode;
+};
+
struct acpi_scan_handler {
const struct acpi_device_id *ids;
struct list_head list_node;
int (*attach)(struct acpi_device *dev, const struct acpi_device_id *id);
void (*detach)(struct acpi_device *dev);
+ struct acpi_hotplug_profile hotplug;
};
/*