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

Reply via email to