Lines Matching refs:wblock

119 	struct wmi_block *wblock;  in find_guid()  local
127 list_for_each_entry(wblock, &wmi_block_list, list) { in find_guid()
128 if (guid_equal(&wblock->gblock.guid, &guid_input)) { in find_guid()
130 *out = wblock; in find_guid()
149 static const void *find_guid_context(struct wmi_block *wblock, in find_guid_context() argument
159 if (guid_parse_and_compare(id->guid_string, &wblock->gblock.guid)) in find_guid_context()
190 static acpi_status wmi_method_enable(struct wmi_block *wblock, bool enable) in wmi_method_enable() argument
197 block = &wblock->gblock; in wmi_method_enable()
198 handle = wblock->acpi_device->handle; in wmi_method_enable()
210 static inline void get_acpi_method_name(const struct wmi_block *wblock, in get_acpi_method_name() argument
214 static_assert(ARRAY_SIZE(wblock->gblock.object_id) == 2); in get_acpi_method_name()
219 buffer[2] = wblock->gblock.object_id[0]; in get_acpi_method_name()
220 buffer[3] = wblock->gblock.object_id[1]; in get_acpi_method_name()
224 static inline acpi_object_type get_param_acpi_type(const struct wmi_block *wblock) in get_param_acpi_type() argument
226 if (wblock->gblock.flags & ACPI_WMI_STRING) in get_param_acpi_type()
232 static acpi_status get_event_data(const struct wmi_block *wblock, struct acpi_buffer *out) in get_event_data() argument
237 .value = wblock->gblock.notify_id, in get_event_data()
245 return acpi_evaluate_object(wblock->acpi_device->handle, "_WED", &input, out); in get_event_data()
263 struct wmi_block *wblock; in set_required_buffer_size() local
265 wblock = container_of(wdev, struct wmi_block, dev); in set_required_buffer_size()
266 wblock->req_buf_size = length; in set_required_buffer_size()
282 struct wmi_block *wblock; in wmi_instance_count() local
285 status = find_guid(guid_string, &wblock); in wmi_instance_count()
293 return wmidev_instance_count(&wblock->dev); in wmi_instance_count()
307 struct wmi_block *wblock = container_of(wdev, struct wmi_block, dev); in wmidev_instance_count() local
309 return wblock->gblock.instance_count; in wmidev_instance_count()
328 struct wmi_block *wblock = NULL; in wmi_evaluate_method() local
331 status = find_guid(guid_string, &wblock); in wmi_evaluate_method()
335 return wmidev_evaluate_method(&wblock->dev, instance, method_id, in wmi_evaluate_method()
356 struct wmi_block *wblock; in wmidev_evaluate_method() local
362 wblock = container_of(wdev, struct wmi_block, dev); in wmidev_evaluate_method()
363 block = &wblock->gblock; in wmidev_evaluate_method()
364 handle = wblock->acpi_device->handle; in wmidev_evaluate_method()
382 params[2].type = get_param_acpi_type(wblock); in wmidev_evaluate_method()
387 get_acpi_method_name(wblock, 'M', method); in wmidev_evaluate_method()
393 static acpi_status __query_block(struct wmi_block *wblock, u8 instance, in __query_block() argument
407 block = &wblock->gblock; in __query_block()
408 handle = wblock->acpi_device->handle; in __query_block()
422 if (instance == 0 && test_bit(WMI_READ_TAKES_NO_ARGS, &wblock->flags)) in __query_block()
430 get_acpi_method_name(wblock, 'C', wc_method); in __query_block()
440 get_acpi_method_name(wblock, 'Q', method); in __query_block()
474 struct wmi_block *wblock; in wmi_query_block() local
477 status = find_guid(guid_string, &wblock); in wmi_query_block()
481 return __query_block(wblock, instance, out); in wmi_query_block()
497 struct wmi_block *wblock = container_of(wdev, struct wmi_block, dev); in wmidev_block_query() local
499 if (ACPI_FAILURE(__query_block(wblock, instance, &out))) in wmidev_block_query()
519 struct wmi_block *wblock = NULL; in wmi_set_block() local
530 status = find_guid(guid_string, &wblock); in wmi_set_block()
534 block = &wblock->gblock; in wmi_set_block()
535 handle = wblock->acpi_device->handle; in wmi_set_block()
548 params[1].type = get_param_acpi_type(wblock); in wmi_set_block()
552 get_acpi_method_name(wblock, 'S', method); in wmi_set_block()
722 struct wmi_block *wblock; in wmi_get_event_data() local
724 list_for_each_entry(wblock, &wmi_block_list, list) { in wmi_get_event_data()
725 struct guid_block *gblock = &wblock->gblock; in wmi_get_event_data()
728 return get_event_data(wblock, out); in wmi_get_event_data()
759 struct wmi_block *wblock = NULL; in wmi_get_acpi_device_uid() local
762 status = find_guid(guid_string, &wblock); in wmi_get_acpi_device_uid()
766 return acpi_device_uid(wblock->acpi_device); in wmi_get_acpi_device_uid()
784 struct wmi_block *wblock = dev_to_wblock(dev); in modalias_show() local
786 return sysfs_emit(buf, "wmi:%pUL\n", &wblock->gblock.guid); in modalias_show()
793 struct wmi_block *wblock = dev_to_wblock(dev); in guid_show() local
795 return sysfs_emit(buf, "%pUL\n", &wblock->gblock.guid); in guid_show()
802 struct wmi_block *wblock = dev_to_wblock(dev); in instance_count_show() local
804 return sysfs_emit(buf, "%d\n", (int)wblock->gblock.instance_count); in instance_count_show()
811 struct wmi_block *wblock = dev_to_wblock(dev); in expensive_show() local
814 (wblock->gblock.flags & ACPI_WMI_EXPENSIVE) != 0); in expensive_show()
830 struct wmi_block *wblock = dev_to_wblock(dev); in notify_id_show() local
832 return sysfs_emit(buf, "%02X\n", (unsigned int)wblock->gblock.notify_id); in notify_id_show()
845 struct wmi_block *wblock = dev_to_wblock(dev); in object_id_show() local
847 return sysfs_emit(buf, "%c%c\n", wblock->gblock.object_id[0], in object_id_show()
848 wblock->gblock.object_id[1]); in object_id_show()
876 const struct wmi_block *wblock = dev_to_wblock(dev); in wmi_dev_uevent() local
878 if (add_uevent_var(env, "MODALIAS=wmi:%pUL", &wblock->gblock.guid)) in wmi_dev_uevent()
881 if (add_uevent_var(env, "WMI_GUID=%pUL", &wblock->gblock.guid)) in wmi_dev_uevent()
889 struct wmi_block *wblock = dev_to_wblock(dev); in wmi_dev_release() local
891 kfree(wblock); in wmi_dev_release()
897 struct wmi_block *wblock = dev_to_wblock(dev); in wmi_dev_match() local
904 if (guid_parse_and_compare(id->guid_string, &wblock->gblock.guid)) in wmi_dev_match()
915 struct wmi_block *wblock; in wmi_char_open() local
918 list_for_each_entry_safe(wblock, next, &wmi_block_list, list) { in wmi_char_open()
919 if (!wblock->dev.dev.driver) in wmi_char_open()
921 if (strcmp(driver_name, wblock->dev.dev.driver->name) == 0) { in wmi_char_open()
922 filp->private_data = wblock; in wmi_char_open()
936 struct wmi_block *wblock = filp->private_data; in wmi_char_read() local
939 &wblock->req_buf_size, in wmi_char_read()
940 sizeof(wblock->req_buf_size)); in wmi_char_read()
947 struct wmi_block *wblock = filp->private_data; in wmi_ioctl() local
956 if (_IOC_NR(cmd) >= wblock->gblock.instance_count) in wmi_ioctl()
959 mutex_lock(&wblock->char_mutex); in wmi_ioctl()
960 buf = wblock->handler_data; in wmi_ioctl()
962 dev_dbg(&wblock->dev.dev, "Read length from user failed\n"); in wmi_ioctl()
967 if (buf->length < wblock->req_buf_size) { in wmi_ioctl()
968 dev_err(&wblock->dev.dev, in wmi_ioctl()
970 buf->length, wblock->req_buf_size); in wmi_ioctl()
975 if (buf->length > wblock->req_buf_size) in wmi_ioctl()
976 dev_warn(&wblock->dev.dev, in wmi_ioctl()
978 buf->length, wblock->req_buf_size); in wmi_ioctl()
981 if (copy_from_user(buf, input, wblock->req_buf_size)) { in wmi_ioctl()
982 dev_dbg(&wblock->dev.dev, "Copy %llu from user failed\n", in wmi_ioctl()
983 wblock->req_buf_size); in wmi_ioctl()
989 wdriver = drv_to_wdrv(wblock->dev.dev.driver); in wmi_ioctl()
994 ret = wdriver->filter_callback(&wblock->dev, cmd, buf); in wmi_ioctl()
1000 if (copy_to_user(input, buf, wblock->req_buf_size)) { in wmi_ioctl()
1001 dev_dbg(&wblock->dev.dev, "Copy %llu to user failed\n", in wmi_ioctl()
1002 wblock->req_buf_size); in wmi_ioctl()
1007 mutex_unlock(&wblock->char_mutex); in wmi_ioctl()
1021 struct wmi_block *wblock = dev_to_wblock(dev); in wmi_dev_probe() local
1026 if (ACPI_FAILURE(wmi_method_enable(wblock, true))) in wmi_dev_probe()
1031 find_guid_context(wblock, wdriver)); in wmi_dev_probe()
1039 if (!wblock->req_buf_size) { in wmi_dev_probe()
1040 dev_err(&wblock->dev.dev, in wmi_dev_probe()
1046 wblock->handler_data = kmalloc(wblock->req_buf_size, in wmi_dev_probe()
1048 if (!wblock->handler_data) { in wmi_dev_probe()
1058 wblock->char_dev.minor = MISC_DYNAMIC_MINOR; in wmi_dev_probe()
1059 wblock->char_dev.name = buf; in wmi_dev_probe()
1060 wblock->char_dev.fops = &wmi_fops; in wmi_dev_probe()
1061 wblock->char_dev.mode = 0444; in wmi_dev_probe()
1062 ret = misc_register(&wblock->char_dev); in wmi_dev_probe()
1070 set_bit(WMI_PROBED, &wblock->flags); in wmi_dev_probe()
1076 kfree(wblock->handler_data); in wmi_dev_probe()
1078 if (ACPI_FAILURE(wmi_method_enable(wblock, false))) in wmi_dev_probe()
1085 struct wmi_block *wblock = dev_to_wblock(dev); in wmi_dev_remove() local
1088 clear_bit(WMI_PROBED, &wblock->flags); in wmi_dev_remove()
1091 misc_deregister(&wblock->char_dev); in wmi_dev_remove()
1092 kfree(wblock->char_dev.name); in wmi_dev_remove()
1093 kfree(wblock->handler_data); in wmi_dev_remove()
1099 if (ACPI_FAILURE(wmi_method_enable(wblock, false))) in wmi_dev_remove()
1140 struct wmi_block *wblock; in guid_count() local
1143 list_for_each_entry(wblock, &wmi_block_list, list) { in guid_count()
1144 if (guid_equal(&wblock->gblock.guid, guid)) in guid_count()
1152 struct wmi_block *wblock, in wmi_create_device() argument
1160 if (wblock->gblock.flags & ACPI_WMI_EVENT) { in wmi_create_device()
1161 wblock->dev.dev.type = &wmi_type_event; in wmi_create_device()
1165 if (wblock->gblock.flags & ACPI_WMI_METHOD) { in wmi_create_device()
1166 wblock->dev.dev.type = &wmi_type_method; in wmi_create_device()
1167 mutex_init(&wblock->char_mutex); in wmi_create_device()
1176 get_acpi_method_name(wblock, 'Q', method); in wmi_create_device()
1186 wblock->dev.dev.type = &wmi_type_data; in wmi_create_device()
1199 set_bit(WMI_READ_TAKES_NO_ARGS, &wblock->flags); in wmi_create_device()
1203 get_acpi_method_name(wblock, 'S', method); in wmi_create_device()
1207 wblock->dev.setable = true; in wmi_create_device()
1210 wblock->dev.dev.bus = &wmi_bus_type; in wmi_create_device()
1211 wblock->dev.dev.parent = wmi_bus_dev; in wmi_create_device()
1213 count = guid_count(&wblock->gblock.guid); in wmi_create_device()
1215 dev_set_name(&wblock->dev.dev, "%pUL-%d", &wblock->gblock.guid, count); in wmi_create_device()
1217 dev_set_name(&wblock->dev.dev, "%pUL", &wblock->gblock.guid); in wmi_create_device()
1219 device_initialize(&wblock->dev.dev); in wmi_create_device()
1226 struct wmi_block *wblock, *next; in wmi_free_devices() local
1229 list_for_each_entry_safe(wblock, next, &wmi_block_list, list) { in wmi_free_devices()
1230 if (wblock->acpi_device == device) { in wmi_free_devices()
1231 list_del(&wblock->list); in wmi_free_devices()
1232 device_unregister(&wblock->dev.dev); in wmi_free_devices()
1239 struct wmi_block *wblock; in guid_already_parsed_for_legacy() local
1241 list_for_each_entry(wblock, &wmi_block_list, list) { in guid_already_parsed_for_legacy()
1247 if (guid_equal(&wblock->gblock.guid, guid)) { in guid_already_parsed_for_legacy()
1255 guid, dev_name(&wblock->acpi_device->dev)); in guid_already_parsed_for_legacy()
1270 struct wmi_block *wblock, *next; in parse_wdg() local
1299 wblock = kzalloc(sizeof(*wblock), GFP_KERNEL); in parse_wdg()
1300 if (!wblock) { in parse_wdg()
1305 wblock->acpi_device = device; in parse_wdg()
1306 wblock->gblock = gblock[i]; in parse_wdg()
1308 retval = wmi_create_device(wmi_bus_dev, wblock, device); in parse_wdg()
1310 kfree(wblock); in parse_wdg()
1314 list_add_tail(&wblock->list, &wmi_block_list); in parse_wdg()
1317 wblock->handler = wmi_notify_debug; in parse_wdg()
1318 wmi_method_enable(wblock, true); in parse_wdg()
1326 list_for_each_entry_safe(wblock, next, &wmi_block_list, list) { in parse_wdg()
1327 if (wblock->acpi_device != device) in parse_wdg()
1330 retval = device_add(&wblock->dev.dev); in parse_wdg()
1333 &wblock->gblock.guid); in parse_wdg()
1335 wmi_method_enable(wblock, false); in parse_wdg()
1336 list_del(&wblock->list); in parse_wdg()
1337 put_device(&wblock->dev.dev); in parse_wdg()
1390 struct wmi_block *wblock = NULL, *iter; in acpi_wmi_notify_handler() local
1398 wblock = iter; in acpi_wmi_notify_handler()
1403 if (!wblock) in acpi_wmi_notify_handler()
1407 if (test_bit(WMI_PROBED, &wblock->flags) && wblock->dev.dev.driver) { in acpi_wmi_notify_handler()
1408 struct wmi_driver *driver = drv_to_wdrv(wblock->dev.dev.driver); in acpi_wmi_notify_handler()
1413 status = get_event_data(wblock, &evdata); in acpi_wmi_notify_handler()
1415 dev_warn(&wblock->dev.dev, "failed to get event data\n"); in acpi_wmi_notify_handler()
1421 driver->notify(&wblock->dev, evdata.pointer); in acpi_wmi_notify_handler()
1424 } else if (wblock->handler) { in acpi_wmi_notify_handler()
1426 wblock->handler(event, wblock->handler_data); in acpi_wmi_notify_handler()
1430 pr_info("DEBUG: GUID %pUL event 0x%02X\n", &wblock->gblock.guid, event); in acpi_wmi_notify_handler()
1433 wblock->acpi_device->pnp.device_class, in acpi_wmi_notify_handler()
1434 dev_name(&wblock->dev.dev), in acpi_wmi_notify_handler()