Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

platform/x86: wmi: add context pointer field to struct wmi_device_id

When using wmi_install_notify_handler() to initialize a WMI handler a
data pointer can be supplied which will be passed on to the notification
handler. No similar feature exist when handling WMI events via struct
wmi_driver.

Add a context field pointer to struct wmi_device_id and add a function
find_guid_context() to retrieve that context pointer.

Signed-off-by: Mattias Jacobsson <2pi@mok.nu>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

authored by

Mattias Jacobsson and committed by
Andy Shevchenko
a48e2338 3e58167a

+23
+22
drivers/platform/x86/wmi.c
··· 146 146 return false; 147 147 } 148 148 149 + static const void *find_guid_context(struct wmi_block *wblock, 150 + struct wmi_driver *wdriver) 151 + { 152 + const struct wmi_device_id *id; 153 + uuid_le guid_input; 154 + 155 + if (wblock == NULL || wdriver == NULL) 156 + return NULL; 157 + if (wdriver->id_table == NULL) 158 + return NULL; 159 + 160 + id = wdriver->id_table; 161 + while (*id->guid_string) { 162 + if (uuid_le_to_bin(id->guid_string, &guid_input)) 163 + continue; 164 + if (!memcmp(wblock->gblock.guid, &guid_input, 16)) 165 + return id->context; 166 + id++; 167 + } 168 + return NULL; 169 + } 170 + 149 171 static int get_subobj_info(acpi_handle handle, const char *pathname, 150 172 struct acpi_device_info **info) 151 173 {
+1
include/linux/mod_devicetable.h
··· 798 798 */ 799 799 struct wmi_device_id { 800 800 const char guid_string[UUID_STRING_LEN+1]; 801 + const void *context; 801 802 }; 802 803 803 804 #endif /* LINUX_MOD_DEVICETABLE_H */