mirror of
https://github.com/FEX-Emu/linux.git
synced 2025-01-31 16:13:22 +00:00
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: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
edf5bf34d4
commit
be27b3dcb0
@ -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)
|
|||||||
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 @@
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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 {
|
|||||||
|
|
||||||
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)
|
|||||||
|
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user