In preparation for adding WMI support to MODULE_DEVICE_TABLE() move the definition of struct wmi_device_id to mod_devicetable.h and inline guid_string in the struct. Changing guid_string to an inline char array changes the loop conditions when looping over an array of struct wmi_device_id. Therefore update wmi_dev_match()'s loop to check for an empty guid_string instead of a NULL pointer.
Unified · Split
| @@ -771,7 +771,7 @@ static int wmi_dev_match(struct device *dev, struct device_driver *driver) · 770 unmodified lines | ||
| 771 | 771 | if (id == NULL) |
| 772 | 772 | return 0; |
| 773 | 773 | |
| 774 | − while (id->guid_string) { | |
| 774 | + while (*id->guid_string) { | |
| 775 | 775 | uuid_le driver_guid; |
| 776 | 776 | |
| 777 | 777 | if (WARN_ON(uuid_le_to_bin(id->guid_string, &driver_guid))) |
| @@ -779,4 +779,16 @@ struct typec_device_id { · 778 unmodified lines | ||
| 779 | 779 | kernel_ulong_t driver_data; |
| 780 | 780 | }; |
| 781 | 781 | |
| 782 | +/* WMI */ | |
| 783 | + | |
| 784 | +#define WMI_MODULE_PREFIX "wmi:" | |
| 785 | + | |
| 786 | +/** | |
| 787 | + * struct wmi_device_id - WMI device identifier | |
| 788 | + * @guid_string: 36 char string of the form fa50ff2b-f2e8-45de-83fa-65417f2f49ba | |
| 789 | + */ | |
| 790 | +struct wmi_device_id { | |
| 791 | + const char guid_string[UUID_STRING_LEN+1]; | |
| 792 | +}; | |
| 793 | + | |
| 782 | 794 | #endif /* LINUX_MOD_DEVICETABLE_H */ |
| @@ -18,6 +18,7 @@ · 17 unmodified lines | ||
| 18 | 18 | |
| 19 | 19 | #include <linux/device.h> |
| 20 | 20 | #include <linux/acpi.h> |
| 21 | +#include <linux/mod_devicetable.h> | |
| 21 | 22 | #include <uapi/linux/wmi.h> |
| 22 | 23 | |
| 23 | 24 | struct wmi_device { |
| @@ -39,10 +40,6 @@ extern union acpi_object *wmidev_block_query(struct wmi_device *wdev, · 15 unmodified lines | ||
| 39 | 40 | |
| 40 | 41 | extern int set_required_buffer_size(struct wmi_device *wdev, u64 length); |
| 41 | 42 | |
| 42 | −struct wmi_device_id { | |
| 43 | − const char *guid_string; | |
| 44 | −}; | |
| 45 | − | |
| 46 | 43 | struct wmi_driver { |
| 47 | 44 | struct device_driver driver; |
| 48 | 45 | const struct wmi_device_id *id_table; |
| @@ -37,6 +37,7 @@ typedef unsigned char __u8; · 36 unmodified lines | ||
| 37 | 37 | typedef struct { |
| 38 | 38 | __u8 b[16]; |
| 39 | 39 | } uuid_le; |
| 40 | +#define UUID_STRING_LEN 36 | |
| 40 | 41 | |
| 41 | 42 | /* Big exception to the "don't include kernel headers into userspace, which |
| 42 | 43 | * even potentially has different endianness and word sizes, since |