Commit be27b3dc authored by Rafael J. Wysocki's avatar Rafael J. Wysocki

ACPI / dock: Add .uevent() callback to struct acpi_hotplug_context

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: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent edf5bf34
...@@ -203,10 +203,19 @@ static void dock_hotplug_event(struct dock_dependent_device *dd, u32 event, ...@@ -203,10 +203,19 @@ static void dock_hotplug_event(struct dock_dependent_device *dd, u32 event,
fixup(adev); fixup(adev);
return; 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 { } else {
int (*notify)(struct acpi_device *, u32); int (*notify)(struct acpi_device *, u32);
notify = adev->hp->event; notify = adev->hp->notify;
if (notify) { if (notify) {
acpi_unlock_hp_context(); acpi_unlock_hp_context();
notify(adev, event); notify(adev, event);
......
...@@ -496,17 +496,17 @@ void acpi_device_hotplug(void *data, u32 src) ...@@ -496,17 +496,17 @@ void acpi_device_hotplug(void *data, u32 src)
goto err_out; goto err_out;
} }
} else { } else {
int (*event)(struct acpi_device *, u32); int (*notify)(struct acpi_device *, u32);
acpi_lock_hp_context(); acpi_lock_hp_context();
event = adev->hp ? adev->hp->event : NULL; notify = adev->hp ? adev->hp->notify : NULL;
acpi_unlock_hp_context(); acpi_unlock_hp_context();
/* /*
* There may be additional notify handlers for device objects * There may be additional notify handlers for device objects
* without the .event() callback, so ignore them here. * without the .event() callback, so ignore them here.
*/ */
if (event) if (notify)
error = event(adev, src); error = notify(adev, src);
else else
goto out; goto out;
} }
......
...@@ -59,7 +59,7 @@ ...@@ -59,7 +59,7 @@
static LIST_HEAD(bridge_list); static LIST_HEAD(bridge_list);
static DEFINE_MUTEX(bridge_mutex); 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_post_dock_fixup(struct acpi_device *adev);
static void acpiphp_sanitize_bus(struct pci_bus *bus); static void acpiphp_sanitize_bus(struct pci_bus *bus);
static void acpiphp_set_hpp_values(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) ...@@ -81,7 +81,7 @@ static struct acpiphp_context *acpiphp_init_context(struct acpi_device *adev)
return NULL; return NULL;
context->refcount = 1; 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); acpiphp_post_dock_fixup);
return context; return context;
} }
...@@ -400,7 +400,7 @@ static void cleanup_bridge(struct acpiphp_bridge *bridge) ...@@ -400,7 +400,7 @@ static void cleanup_bridge(struct acpiphp_bridge *bridge)
struct acpi_device *adev = func_to_acpi_device(func); struct acpi_device *adev = func_to_acpi_device(func);
acpi_lock_hp_context(); acpi_lock_hp_context();
adev->hp->event = NULL; adev->hp->notify = NULL;
adev->hp->fixup = NULL; adev->hp->fixup = NULL;
acpi_unlock_hp_context(); acpi_unlock_hp_context();
} }
...@@ -833,7 +833,7 @@ static void hotplug_event(u32 type, struct acpiphp_context *context) ...@@ -833,7 +833,7 @@ static void hotplug_event(u32 type, struct acpiphp_context *context)
put_bridge(bridge); 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; struct acpiphp_context *context;
......
...@@ -143,7 +143,8 @@ struct acpi_scan_handler { ...@@ -143,7 +143,8 @@ struct acpi_scan_handler {
struct acpi_hotplug_context { struct acpi_hotplug_context {
struct acpi_device *self; 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 *); void (*fixup)(struct acpi_device *);
}; };
...@@ -367,11 +368,13 @@ static inline void acpi_set_device_status(struct acpi_device *adev, u32 sta) ...@@ -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, static inline void acpi_set_hp_context(struct acpi_device *adev,
struct acpi_hotplug_context *hp, 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 *)) void (*fixup)(struct acpi_device *))
{ {
hp->self = adev; hp->self = adev;
hp->event = event; hp->notify = notify;
hp->uevent = uevent;
hp->fixup = fixup; hp->fixup = fixup;
adev->hp = hp; adev->hp = hp;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment