On Thu, 2007-08-16 at 18:03 +0400, Alexey Starikovskiy wrote:
> From: Alexey Starikovskiy <[EMAIL PROTECTED]>
>
> acpi_bus_generate_event() takes two strings out of passed device object.
> SBS needs to supply these strings directly.
>
This doesn't make sense.
acpi_dev->dev.bus_id is the name we are using for ACPI device in sysfs.
That's why acpi_dev->dev.bus_id is exported via netlink message rather
than the acpi_dev.pnp.bus_id.
BTW: what's wrong with the old acpi_sbs_generate_event thing?
Thanks,
Rui
> Signed-off-by: Alexey Starikovskiy <[EMAIL PROTECTED]>
> ---
>
> drivers/acpi/bus.c | 25 ++++++++++++++++---------
> drivers/acpi/event.c | 7 ++++---
> drivers/acpi/sbs.c | 39 ++++++++-------------------------------
> include/acpi/acpi_bus.h | 6 ++++--
> 4 files changed, 32 insertions(+), 45 deletions(-)
>
> diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
> index 6b2658c..992bb30 100644
> --- a/drivers/acpi/bus.c
> +++ b/drivers/acpi/bus.c
> @@ -283,16 +283,12 @@ DECLARE_WAIT_QUEUE_HEAD(acpi_bus_event_queue);
>
> extern int event_is_open;
>
> -int acpi_bus_generate_event(struct acpi_device *device, u8 type, int data)
> +int acpi_bus_generate_event4(const char *device_class, const char *bus_id,
> u8 type, int data)
> {
> - struct acpi_bus_event *event = NULL;
> + struct acpi_bus_event *event;
> unsigned long flags = 0;
>
> -
> - if (!device)
> - return -EINVAL;
> -
> - if (acpi_bus_generate_genetlink_event(device, type, data))
> + if (acpi_bus_generate_genetlink_event(device_class, bus_id, type, data))
> printk(KERN_WARNING PREFIX
> "Failed to generate an ACPI event via genetlink!\n");
>
> @@ -304,8 +300,8 @@ int acpi_bus_generate_event(struct acpi_device *device,
> u8 type, int data)
> if (!event)
> return -ENOMEM;
>
> - strcpy(event->device_class, device->pnp.device_class);
> - strcpy(event->bus_id, device->pnp.bus_id);
> + strcpy(event->device_class, device_class);
> + strcpy(event->bus_id, bus_id);
> event->type = type;
> event->data = data;
>
> @@ -316,6 +312,17 @@ int acpi_bus_generate_event(struct acpi_device *device,
> u8 type, int data)
> wake_up_interruptible(&acpi_bus_event_queue);
>
> return 0;
> +
> +}
> +
> +EXPORT_SYMBOL_GPL(acpi_bus_generate_event4);
> +
> +int acpi_bus_generate_event(struct acpi_device *device, u8 type, int data)
> +{
> + if (!device)
> + return -EINVAL;
> + return acpi_bus_generate_event4(device->pnp.device_class,
> + device->pnp.bus_id, type, data);
> }
>
> EXPORT_SYMBOL(acpi_bus_generate_event);
> diff --git a/drivers/acpi/event.c b/drivers/acpi/event.c
> index 95637a4..6529280 100644
> --- a/drivers/acpi/event.c
> +++ b/drivers/acpi/event.c
> @@ -147,7 +147,8 @@ static struct genl_multicast_group acpi_event_mcgrp = {
> .name = ACPI_GENL_MCAST_GROUP_NAME,
> };
>
> -int acpi_bus_generate_genetlink_event(struct acpi_device *device,
> +int acpi_bus_generate_genetlink_event(const char *device_class,
> + const char *bus_id,
> u8 type, int data)
> {
> struct sk_buff *skb;
> @@ -191,8 +192,8 @@ int acpi_bus_generate_genetlink_event(struct acpi_device
> *device,
>
> memset(event, 0, sizeof(struct acpi_genl_event));
>
> - strcpy(event->device_class, device->pnp.device_class);
> - strcpy(event->bus_id, device->dev.bus_id);
> + strcpy(event->device_class, device_class);
> + strcpy(event->bus_id, bus_id);
> event->type = type;
> event->data = data;
>
> diff --git a/drivers/acpi/sbs.c b/drivers/acpi/sbs.c
> index 82c3a55..88af657 100644
> --- a/drivers/acpi/sbs.c
> +++ b/drivers/acpi/sbs.c
> @@ -427,27 +427,6 @@ static int acpi_check_update_proc(struct acpi_sbs *sbs)
> return 0;
> }
>
> -static int acpi_sbs_generate_event(struct acpi_device *device,
> - int event, int state, char *bid, char *class)
> -{
> - char bid_saved[5];
> - char class_saved[20];
> - int result = 0;
> -
> - strcpy(bid_saved, acpi_device_bid(device));
> - strcpy(class_saved, acpi_device_class(device));
> -
> - strcpy(acpi_device_bid(device), bid);
> - strcpy(acpi_device_class(device), class);
> -
> - result = acpi_bus_generate_event(device, event, state);
> -
> - strcpy(acpi_device_bid(device), bid_saved);
> - strcpy(acpi_device_class(device), class_saved);
> -
> - return result;
> -}
> -
> static int acpi_battery_get_present(struct acpi_battery *battery)
> {
> s16 state;
> @@ -1451,14 +1430,13 @@ static int acpi_sbs_update_run(struct acpi_sbs *sbs,
> int id, int data_type)
> }
>
> if (do_ac_init) {
> - result = acpi_sbs_generate_event(sbs->device,
> - ACPI_SBS_AC_NOTIFY_STATUS,
> - new_ac_present,
> + result = acpi_bus_generate_event4(ACPI_AC_CLASS,
> ACPI_AC_DIR_NAME,
> - ACPI_AC_CLASS);
> + ACPI_SBS_AC_NOTIFY_STATUS,
> + new_ac_present);
> if (result) {
> ACPI_EXCEPTION((AE_INFO, AE_ERROR,
> - "acpi_sbs_generate_event() failed"));
> + "acpi_bus_generate_event4() failed"));
> }
> }
>
> @@ -1567,14 +1545,13 @@ static int acpi_sbs_update_run(struct acpi_sbs *sbs,
> int id, int data_type)
> old_remaining_capacity !=
> battery->state.remaining_capacity) {
> sprintf(dir_name, ACPI_BATTERY_DIR_NAME, id);
> - result = acpi_sbs_generate_event(sbs->device,
> -
> ACPI_SBS_BATTERY_NOTIFY_STATUS,
> - new_battery_present,
> + result = acpi_bus_generate_event4(ACPI_BATTERY_CLASS,
> dir_name,
> - ACPI_BATTERY_CLASS);
> +
> ACPI_SBS_BATTERY_NOTIFY_STATUS,
> + new_battery_present);
> if (result) {
> ACPI_EXCEPTION((AE_INFO, AE_ERROR,
> - "acpi_sbs_generate_event() "
> + "acpi_bus_generate_event4() "
> "failed"));
> }
> }
> diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h
> index 3d0fea2..0878928 100644
> --- a/include/acpi/acpi_bus.h
> +++ b/include/acpi/acpi_bus.h
> @@ -321,8 +321,9 @@ struct acpi_bus_event {
> };
>
> extern struct kset acpi_subsys;
> -extern int acpi_bus_generate_genetlink_event(struct acpi_device *device,
> - u8 type, int data);
> +extern int acpi_bus_generate_genetlink_event(const char *device_class,
> + const char *bus_id,
> + u8 type, int data);
> /*
> * External Functions
> */
> @@ -333,6 +334,7 @@ int acpi_bus_get_status(struct acpi_device *device);
> int acpi_bus_get_power(acpi_handle handle, int *state);
> int acpi_bus_set_power(acpi_handle handle, int state);
> int acpi_bus_generate_event(struct acpi_device *device, u8 type, int data);
> +int acpi_bus_generate_event4(const char *class, const char *bid, u8 type,
> int data);
> int acpi_bus_receive_event(struct acpi_bus_event *event);
> int acpi_bus_register_driver(struct acpi_driver *driver);
> void acpi_bus_unregister_driver(struct acpi_driver *driver);
>
> -
> To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
> the body of a message to [EMAIL PROTECTED]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
-
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html