1 /* 2 * wmi.h - ACPI WMI interface 3 * 4 * Copyright (c) 2015 Andrew Lutomirski 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License version 2 as 8 * published by the Free Software Foundation. 9 * 10 * This program is distributed in the hope that it will be useful, but 11 * WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * General Public License for more details. 14 */ 15 16 #ifndef _LINUX_WMI_H 17 #define _LINUX_WMI_H 18 19 #include <linux/device.h> 20 #include <linux/acpi.h> 21 #include <uapi/linux/wmi.h> 22 23 struct wmi_device { 24 struct device dev; 25 26 /* True for data blocks implementing the Set Control Method */ 27 bool setable; 28 }; 29 30 /* evaluate the ACPI method associated with this device */ 31 extern acpi_status wmidev_evaluate_method(struct wmi_device *wdev, 32 u8 instance, u32 method_id, 33 const struct acpi_buffer *in, 34 struct acpi_buffer *out); 35 36 /* Caller must kfree the result. */ 37 extern union acpi_object *wmidev_block_query(struct wmi_device *wdev, 38 u8 instance); 39 40 extern int set_required_buffer_size(struct wmi_device *wdev, u64 length); 41 42 struct wmi_device_id { 43 const char *guid_string; 44 }; 45 46 struct wmi_driver { 47 struct device_driver driver; 48 const struct wmi_device_id *id_table; 49 50 int (*probe)(struct wmi_device *wdev); 51 int (*remove)(struct wmi_device *wdev); 52 void (*notify)(struct wmi_device *device, union acpi_object *data); 53 long (*filter_callback)(struct wmi_device *wdev, unsigned int cmd, 54 struct wmi_ioctl_buffer *arg); 55 }; 56 57 extern int __must_check __wmi_driver_register(struct wmi_driver *driver, 58 struct module *owner); 59 extern void wmi_driver_unregister(struct wmi_driver *driver); 60 #define wmi_driver_register(driver) __wmi_driver_register((driver), THIS_MODULE) 61 62 #define module_wmi_driver(__wmi_driver) \ 63 module_driver(__wmi_driver, wmi_driver_register, \ 64 wmi_driver_unregister) 65 66 #endif 67