Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 178641
b: refs/heads/master
c: ea840aa
h: refs/heads/master
i:
  178639: 2495902
v: v3
  • Loading branch information
Len Brown committed Dec 30, 2009
1 parent 2c17ecb commit 69ddd43
Show file tree
Hide file tree
Showing 6 changed files with 61 additions and 17 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 6e5b08ee941af38cfc6456158e7e04c1bc49306f
refs/heads/master: ea840aa2d01cf107b331d04ddea46efaee583a83
4 changes: 2 additions & 2 deletions trunk/drivers/char/ipmi/ipmi_si_intf.c
Original file line number Diff line number Diff line change
Expand Up @@ -3204,7 +3204,7 @@ static __devinit int init_ipmi_si(void)
#ifdef CONFIG_ACPI
spmi_find_bmc();
#endif
#ifdef CONFIG_PNP
#ifdef CONFIG_ACPI
pnp_register_driver(&ipmi_pnp_driver);
#endif

Expand Down Expand Up @@ -3330,7 +3330,7 @@ static __exit void cleanup_ipmi_si(void)
#ifdef CONFIG_PCI
pci_unregister_driver(&ipmi_pci_driver);
#endif
#ifdef CONFIG_PNP
#ifdef CONFIG_ACPI
pnp_unregister_driver(&ipmi_pnp_driver);
#endif

Expand Down
18 changes: 12 additions & 6 deletions trunk/drivers/platform/x86/dell-wmi.c
Original file line number Diff line number Diff line change
Expand Up @@ -202,8 +202,13 @@ static void dell_wmi_notify(u32 value, void *context)
struct acpi_buffer response = { ACPI_ALLOCATE_BUFFER, NULL };
static struct key_entry *key;
union acpi_object *obj;
acpi_status status;

wmi_get_event_data(value, &response);
status = wmi_get_event_data(value, &response);
if (status != AE_OK) {
printk(KERN_INFO "dell-wmi: bad event status 0x%x\n", status);
return;
}

obj = (union acpi_object *)response.pointer;

Expand Down Expand Up @@ -323,8 +328,9 @@ static int __init dell_wmi_input_setup(void)
static int __init dell_wmi_init(void)
{
int err;
acpi_status status;

if (wmi_has_guid(DELL_EVENT_GUID)) {
if (!wmi_has_guid(DELL_EVENT_GUID)) {
printk(KERN_WARNING "dell-wmi: No known WMI GUID found\n");
return -ENODEV;
}
Expand All @@ -336,14 +342,14 @@ static int __init dell_wmi_init(void)
if (err)
return err;

err = wmi_install_notify_handler(DELL_EVENT_GUID,
status = wmi_install_notify_handler(DELL_EVENT_GUID,
dell_wmi_notify, NULL);
if (err) {
if (ACPI_FAILURE(status)) {
input_unregister_device(dell_wmi_input_dev);
printk(KERN_ERR
"dell-wmi: Unable to register notify handler - %d\n",
err);
return err;
status);
return -ENODEV;
}

return 0;
Expand Down
9 changes: 7 additions & 2 deletions trunk/drivers/platform/x86/hp-wmi.c
Original file line number Diff line number Diff line change
Expand Up @@ -338,8 +338,13 @@ static void hp_wmi_notify(u32 value, void *context)
static struct key_entry *key;
union acpi_object *obj;
int eventcode;
acpi_status status;

wmi_get_event_data(value, &response);
status = wmi_get_event_data(value, &response);
if (status != AE_OK) {
printk(KERN_INFO "hp-wmi: bad event status 0x%x\n", status);
return;
}

obj = (union acpi_object *)response.pointer;

Expand Down Expand Up @@ -581,7 +586,7 @@ static int __init hp_wmi_init(void)
if (wmi_has_guid(HPWMI_EVENT_GUID)) {
err = wmi_install_notify_handler(HPWMI_EVENT_GUID,
hp_wmi_notify, NULL);
if (!err)
if (ACPI_SUCCESS(err))
hp_wmi_input_setup();
}

Expand Down
9 changes: 7 additions & 2 deletions trunk/drivers/platform/x86/msi-wmi.c
Original file line number Diff line number Diff line change
Expand Up @@ -149,8 +149,13 @@ static void msi_wmi_notify(u32 value, void *context)
static struct key_entry *key;
union acpi_object *obj;
ktime_t cur;
acpi_status status;

wmi_get_event_data(value, &response);
status = wmi_get_event_data(value, &response);
if (status != AE_OK) {
printk(KERN_INFO DRV_PFX "bad event status 0x%x\n", status);
return;
}

obj = (union acpi_object *)response.pointer;

Expand Down Expand Up @@ -236,7 +241,7 @@ static int __init msi_wmi_init(void)
}
err = wmi_install_notify_handler(MSIWMI_EVENT_GUID,
msi_wmi_notify, NULL);
if (err)
if (ACPI_FAILURE(err))
return -EINVAL;

err = msi_wmi_input_setup();
Expand Down
36 changes: 32 additions & 4 deletions trunk/drivers/platform/x86/wmi.c
Original file line number Diff line number Diff line change
Expand Up @@ -492,8 +492,7 @@ wmi_notify_handler handler, void *data)
if (!guid || !handler)
return AE_BAD_PARAMETER;

find_guid(guid, &block);
if (!block)
if (!find_guid(guid, &block))
return AE_NOT_EXIST;

if (block->handler)
Expand Down Expand Up @@ -521,8 +520,7 @@ acpi_status wmi_remove_notify_handler(const char *guid)
if (!guid)
return AE_BAD_PARAMETER;

find_guid(guid, &block);
if (!block)
if (!find_guid(guid, &block))
return AE_NOT_EXIST;

if (!block->handler)
Expand Down Expand Up @@ -716,6 +714,22 @@ static int wmi_class_init(void)
return ret;
}

static bool guid_already_parsed(const char *guid_string)
{
struct guid_block *gblock;
struct wmi_block *wblock;
struct list_head *p;

list_for_each(p, &wmi_blocks.list) {
wblock = list_entry(p, struct wmi_block, list);
gblock = &wblock->gblock;

if (strncmp(gblock->guid, guid_string, 16) == 0)
return true;
}
return false;
}

/*
* Parse the _WDG method for the GUID data blocks
*/
Expand All @@ -725,6 +739,7 @@ static __init acpi_status parse_wdg(acpi_handle handle)
union acpi_object *obj;
struct guid_block *gblock;
struct wmi_block *wblock;
char guid_string[37];
acpi_status status;
u32 i, total;

Expand All @@ -747,6 +762,19 @@ static __init acpi_status parse_wdg(acpi_handle handle)
memcpy(gblock, obj->buffer.pointer, obj->buffer.length);

for (i = 0; i < total; i++) {
/*
Some WMI devices, like those for nVidia hooks, have a
duplicate GUID. It's not clear what we should do in this
case yet, so for now, we'll just ignore the duplicate.
Anyone who wants to add support for that device can come
up with a better workaround for the mess then.
*/
if (guid_already_parsed(gblock[i].guid) == true) {
wmi_gtoa(gblock[i].guid, guid_string);
printk(KERN_INFO PREFIX "Skipping duplicate GUID %s\n",
guid_string);
continue;
}
wblock = kzalloc(sizeof(struct wmi_block), GFP_KERNEL);
if (!wblock)
return AE_NO_MEMORY;
Expand Down

0 comments on commit 69ddd43

Please sign in to comment.