ACPI / dock: Add .uevent() callback to struct acpi_hotplug_context
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Fri, 21 Feb 2014 00:10:27 +0000 (01:10 +0100)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Fri, 21 Feb 2014 00:10:27 +0000 (01:10 +0100)
In order to avoid the need to register special ACPI dock
operations for SATA devices add a .uevent() callback pointer to
struct acpi_hotplug_context and make dock_hotplug_event() use that
callback if available.  Also rename the existing .event() callback
in struct acpi_hotplug_context to .notify() to avoid possible
confusion in the future.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/dock.c
drivers/acpi/scan.c
drivers/pci/hotplug/acpiphp_glue.c
include/acpi/acpi_bus.h

index 78c4ee7..a88fad9 100644 (file)
@@ -203,10 +203,19 @@ static void dock_hotplug_event(struct dock_dependent_device *dd, u32 event,
                        fixup(adev);
                        return;
                }
+       } else if (cb_type == DOCK_CALL_UEVENT) {
+               void (*uevent)(struct acpi_device *, u32);
+
+               uevent = adev->hp->uevent;
+               if (uevent) {
+                       acpi_unlock_hp_context();
+                       uevent(adev, event);
+                       return;
+               }
        } else {
                int (*notify)(struct acpi_device *, u32);
 
-               notify = adev->hp->event;
+               notify = adev->hp->notify;
                if (notify) {
                        acpi_unlock_hp_context();
                        notify(adev, event);
index 518aae4..e7d9510 100644 (file)
@@ -496,17 +496,17 @@ void acpi_device_hotplug(void *data, u32 src)
                        goto err_out;
                }
        } else {
-               int (*event)(struct acpi_device *, u32);
+               int (*notify)(struct acpi_device *, u32);
 
                acpi_lock_hp_context();
-               event = adev->hp ? adev->hp->event : NULL;
+               notify = adev->hp ? adev->hp->notify : NULL;
                acpi_unlock_hp_context();
                /*
                 * There may be additional notify handlers for device objects
                 * without the .event() callback, so ignore them here.
                 */
-               if (event)
-                       error = event(adev, src);
+               if (notify)
+                       error = notify(adev, src);
                else
                        goto out;
        }
index 15865ae..a92b8b0 100644 (file)
@@ -59,7 +59,7 @@
 static LIST_HEAD(bridge_list);
 static DEFINE_MUTEX(bridge_mutex);
 
-static int acpiphp_hotplug_event(struct acpi_device *adev, u32 type);
+static int acpiphp_hotplug_notify(struct acpi_device *adev, u32 type);
 static void acpiphp_post_dock_fixup(struct acpi_device *adev);
 static void acpiphp_sanitize_bus(struct pci_bus *bus);
 static void acpiphp_set_hpp_values(struct pci_bus *bus);
@@ -81,7 +81,7 @@ static struct acpiphp_context *acpiphp_init_context(struct acpi_device *adev)
                return NULL;
 
        context->refcount = 1;
-       acpi_set_hp_context(adev, &context->hp, acpiphp_hotplug_event,
+       acpi_set_hp_context(adev, &context->hp, acpiphp_hotplug_notify, NULL,
                            acpiphp_post_dock_fixup);
        return context;
 }
@@ -400,7 +400,7 @@ static void cleanup_bridge(struct acpiphp_bridge *bridge)
                        struct acpi_device *adev = func_to_acpi_device(func);
 
                        acpi_lock_hp_context();
-                       adev->hp->event = NULL;
+                       adev->hp->notify = NULL;
                        adev->hp->fixup = NULL;
                        acpi_unlock_hp_context();
                }
@@ -833,7 +833,7 @@ static void hotplug_event(u32 type, struct acpiphp_context *context)
                put_bridge(bridge);
 }
 
-static int acpiphp_hotplug_event(struct acpi_device *adev, u32 type)
+static int acpiphp_hotplug_notify(struct acpi_device *adev, u32 type)
 {
        struct acpiphp_context *context;
 
index 007fe99..7382786 100644 (file)
@@ -143,7 +143,8 @@ struct acpi_scan_handler {
 
 struct acpi_hotplug_context {
        struct acpi_device *self;
-       int (*event)(struct acpi_device *, u32);
+       int (*notify)(struct acpi_device *, u32);
+       void (*uevent)(struct acpi_device *, u32);
        void (*fixup)(struct acpi_device *);
 };
 
@@ -367,11 +368,13 @@ static inline void acpi_set_device_status(struct acpi_device *adev, u32 sta)
 
 static inline void acpi_set_hp_context(struct acpi_device *adev,
                                       struct acpi_hotplug_context *hp,
-                                      int (*event)(struct acpi_device *, u32),
+                                      int (*notify)(struct acpi_device *, u32),
+                                      void (*uevent)(struct acpi_device *, u32),
                                       void (*fixup)(struct acpi_device *))
 {
        hp->self = adev;
-       hp->event = event;
+       hp->notify = notify;
+       hp->uevent = uevent;
        hp->fixup = fixup;
        adev->hp = hp;
 }