Lines Matching refs:wblock

119 	struct wmi_block *wblock;
127 list_for_each_entry(wblock, &wmi_block_list, list) {
128 if (guid_equal(&wblock->gblock.guid, &guid_input)) {
130 *out = wblock;
149 static const void *find_guid_context(struct wmi_block *wblock,
159 if (guid_parse_and_compare(id->guid_string, &wblock->gblock.guid))
190 static acpi_status wmi_method_enable(struct wmi_block *wblock, bool enable)
197 block = &wblock->gblock;
198 handle = wblock->acpi_device->handle;
210 static inline void get_acpi_method_name(const struct wmi_block *wblock,
214 static_assert(ARRAY_SIZE(wblock->gblock.object_id) == 2);
219 buffer[2] = wblock->gblock.object_id[0];
220 buffer[3] = wblock->gblock.object_id[1];
224 static inline acpi_object_type get_param_acpi_type(const struct wmi_block *wblock)
226 if (wblock->gblock.flags & ACPI_WMI_STRING)
232 static acpi_status get_event_data(const struct wmi_block *wblock, struct acpi_buffer *out)
237 .value = wblock->gblock.notify_id,
245 return acpi_evaluate_object(wblock->acpi_device->handle, "_WED", &input, out);
263 struct wmi_block *wblock;
265 wblock = container_of(wdev, struct wmi_block, dev);
266 wblock->req_buf_size = length;
282 struct wmi_block *wblock;
285 status = find_guid(guid_string, &wblock);
293 return wmidev_instance_count(&wblock->dev);
307 struct wmi_block *wblock = container_of(wdev, struct wmi_block, dev);
309 return wblock->gblock.instance_count;
328 struct wmi_block *wblock = NULL;
331 status = find_guid(guid_string, &wblock);
335 return wmidev_evaluate_method(&wblock->dev, instance, method_id,
356 struct wmi_block *wblock;
362 wblock = container_of(wdev, struct wmi_block, dev);
363 block = &wblock->gblock;
364 handle = wblock->acpi_device->handle;
382 params[2].type = get_param_acpi_type(wblock);
387 get_acpi_method_name(wblock, 'M', method);
393 static acpi_status __query_block(struct wmi_block *wblock, u8 instance,
407 block = &wblock->gblock;
408 handle = wblock->acpi_device->handle;
422 if (instance == 0 && test_bit(WMI_READ_TAKES_NO_ARGS, &wblock->flags))
430 get_acpi_method_name(wblock, 'C', wc_method);
440 get_acpi_method_name(wblock, 'Q', method);
474 struct wmi_block *wblock;
477 status = find_guid(guid_string, &wblock);
481 return __query_block(wblock, instance, out);
497 struct wmi_block *wblock = container_of(wdev, struct wmi_block, dev);
499 if (ACPI_FAILURE(__query_block(wblock, instance, &out)))
519 struct wmi_block *wblock = NULL;
530 status = find_guid(guid_string, &wblock);
534 block = &wblock->gblock;
535 handle = wblock->acpi_device->handle;
548 params[1].type = get_param_acpi_type(wblock);
552 get_acpi_method_name(wblock, 'S', method);
722 struct wmi_block *wblock;
724 list_for_each_entry(wblock, &wmi_block_list, list) {
725 struct guid_block *gblock = &wblock->gblock;
728 return get_event_data(wblock, out);
759 struct wmi_block *wblock = NULL;
762 status = find_guid(guid_string, &wblock);
766 return acpi_device_uid(wblock->acpi_device);
784 struct wmi_block *wblock = dev_to_wblock(dev);
786 return sysfs_emit(buf, "wmi:%pUL\n", &wblock->gblock.guid);
793 struct wmi_block *wblock = dev_to_wblock(dev);
795 return sysfs_emit(buf, "%pUL\n", &wblock->gblock.guid);
802 struct wmi_block *wblock = dev_to_wblock(dev);
804 return sysfs_emit(buf, "%d\n", (int)wblock->gblock.instance_count);
811 struct wmi_block *wblock = dev_to_wblock(dev);
814 (wblock->gblock.flags & ACPI_WMI_EXPENSIVE) != 0);
830 struct wmi_block *wblock = dev_to_wblock(dev);
832 return sysfs_emit(buf, "%02X\n", (unsigned int)wblock->gblock.notify_id);
845 struct wmi_block *wblock = dev_to_wblock(dev);
847 return sysfs_emit(buf, "%c%c\n", wblock->gblock.object_id[0],
848 wblock->gblock.object_id[1]);
876 const struct wmi_block *wblock = dev_to_wblock(dev);
878 if (add_uevent_var(env, "MODALIAS=wmi:%pUL", &wblock->gblock.guid))
881 if (add_uevent_var(env, "WMI_GUID=%pUL", &wblock->gblock.guid))
889 struct wmi_block *wblock = dev_to_wblock(dev);
891 kfree(wblock);
897 struct wmi_block *wblock = dev_to_wblock(dev);
904 if (guid_parse_and_compare(id->guid_string, &wblock->gblock.guid))
918 struct wmi_block *wblock = container_of(filp->private_data, struct wmi_block, char_dev);
920 filp->private_data = wblock;
928 struct wmi_block *wblock = filp->private_data;
931 &wblock->req_buf_size,
932 sizeof(wblock->req_buf_size));
939 struct wmi_block *wblock = filp->private_data;
948 if (_IOC_NR(cmd) >= wblock->gblock.instance_count)
951 mutex_lock(&wblock->char_mutex);
952 buf = wblock->handler_data;
954 dev_dbg(&wblock->dev.dev, "Read length from user failed\n");
959 if (buf->length < wblock->req_buf_size) {
960 dev_err(&wblock->dev.dev,
962 buf->length, wblock->req_buf_size);
967 if (buf->length > wblock->req_buf_size)
968 dev_warn(&wblock->dev.dev,
970 buf->length, wblock->req_buf_size);
973 if (copy_from_user(buf, input, wblock->req_buf_size)) {
974 dev_dbg(&wblock->dev.dev, "Copy %llu from user failed\n",
975 wblock->req_buf_size);
981 wdriver = drv_to_wdrv(wblock->dev.dev.driver);
986 ret = wdriver->filter_callback(&wblock->dev, cmd, buf);
992 if (copy_to_user(input, buf, wblock->req_buf_size)) {
993 dev_dbg(&wblock->dev.dev, "Copy %llu to user failed\n",
994 wblock->req_buf_size);
999 mutex_unlock(&wblock->char_mutex);
1013 struct wmi_block *wblock = dev_to_wblock(dev);
1018 if (ACPI_FAILURE(wmi_method_enable(wblock, true)))
1023 find_guid_context(wblock, wdriver));
1031 if (!wblock->req_buf_size) {
1032 dev_err(&wblock->dev.dev,
1038 wblock->handler_data = kmalloc(wblock->req_buf_size,
1040 if (!wblock->handler_data) {
1050 wblock->char_dev.minor = MISC_DYNAMIC_MINOR;
1051 wblock->char_dev.name = buf;
1052 wblock->char_dev.fops = &wmi_fops;
1053 wblock->char_dev.mode = 0444;
1054 ret = misc_register(&wblock->char_dev);
1062 set_bit(WMI_PROBED, &wblock->flags);
1068 kfree(wblock->handler_data);
1070 if (ACPI_FAILURE(wmi_method_enable(wblock, false)))
1077 struct wmi_block *wblock = dev_to_wblock(dev);
1080 clear_bit(WMI_PROBED, &wblock->flags);
1083 misc_deregister(&wblock->char_dev);
1084 kfree(wblock->char_dev.name);
1085 kfree(wblock->handler_data);
1091 if (ACPI_FAILURE(wmi_method_enable(wblock, false)))
1132 struct wmi_block *wblock;
1135 list_for_each_entry(wblock, &wmi_block_list, list) {
1136 if (guid_equal(&wblock->gblock.guid, guid))
1144 struct wmi_block *wblock,
1152 if (wblock->gblock.flags & ACPI_WMI_EVENT) {
1153 wblock->dev.dev.type = &wmi_type_event;
1157 if (wblock->gblock.flags & ACPI_WMI_METHOD) {
1158 wblock->dev.dev.type = &wmi_type_method;
1159 mutex_init(&wblock->char_mutex);
1168 get_acpi_method_name(wblock, 'Q', method);
1178 wblock->dev.dev.type = &wmi_type_data;
1191 set_bit(WMI_READ_TAKES_NO_ARGS, &wblock->flags);
1195 get_acpi_method_name(wblock, 'S', method);
1199 wblock->dev.setable = true;
1202 wblock->dev.dev.bus = &wmi_bus_type;
1203 wblock->dev.dev.parent = wmi_bus_dev;
1205 count = guid_count(&wblock->gblock.guid);
1207 dev_set_name(&wblock->dev.dev, "%pUL-%d", &wblock->gblock.guid, count);
1209 dev_set_name(&wblock->dev.dev, "%pUL", &wblock->gblock.guid);
1211 device_initialize(&wblock->dev.dev);
1218 struct wmi_block *wblock, *next;
1221 list_for_each_entry_safe(wblock, next, &wmi_block_list, list) {
1222 if (wblock->acpi_device == device) {
1223 list_del(&wblock->list);
1224 device_unregister(&wblock->dev.dev);
1231 struct wmi_block *wblock;
1233 list_for_each_entry(wblock, &wmi_block_list, list) {
1239 if (guid_equal(&wblock->gblock.guid, guid)) {
1247 guid, dev_name(&wblock->acpi_device->dev));
1262 struct wmi_block *wblock, *next;
1296 wblock = kzalloc(sizeof(*wblock), GFP_KERNEL);
1297 if (!wblock) {
1302 wblock->acpi_device = device;
1303 wblock->gblock = gblock[i];
1305 retval = wmi_create_device(wmi_bus_dev, wblock, device);
1307 kfree(wblock);
1311 list_add_tail(&wblock->list, &wmi_block_list);
1314 wblock->handler = wmi_notify_debug;
1315 wmi_method_enable(wblock, true);
1323 list_for_each_entry_safe(wblock, next, &wmi_block_list, list) {
1324 if (wblock->acpi_device != device)
1327 retval = device_add(&wblock->dev.dev);
1330 &wblock->gblock.guid);
1332 wmi_method_enable(wblock, false);
1333 list_del(&wblock->list);
1334 put_device(&wblock->dev.dev);
1387 struct wmi_block *wblock = NULL, *iter;
1395 wblock = iter;
1400 if (!wblock)
1404 if (test_bit(WMI_PROBED, &wblock->flags) && wblock->dev.dev.driver) {
1405 struct wmi_driver *driver = drv_to_wdrv(wblock->dev.dev.driver);
1410 status = get_event_data(wblock, &evdata);
1412 dev_warn(&wblock->dev.dev, "failed to get event data\n");
1418 driver->notify(&wblock->dev, evdata.pointer);
1421 } else if (wblock->handler) {
1423 wblock->handler(event, wblock->handler_data);
1427 pr_info("DEBUG: GUID %pUL event 0x%02X\n", &wblock->gblock.guid, event);
1430 wblock->acpi_device->pnp.device_class,
1431 dev_name(&wblock->dev.dev),