|  | /* SPDX-License-Identifier: GPL-2.0-only */ | 
|  | /* | 
|  | * wmi.h - ACPI WMI interface | 
|  | * | 
|  | * Copyright (c) 2015 Andrew Lutomirski | 
|  | */ | 
|  |  | 
|  | #ifndef _LINUX_WMI_H | 
|  | #define _LINUX_WMI_H | 
|  |  | 
|  | #include <linux/device.h> | 
|  | #include <linux/acpi.h> | 
|  | #include <linux/mod_devicetable.h> | 
|  | #include <uapi/linux/wmi.h> | 
|  |  | 
|  | struct wmi_device { | 
|  | struct device dev; | 
|  |  | 
|  | /* True for data blocks implementing the Set Control Method */ | 
|  | bool setable; | 
|  | }; | 
|  |  | 
|  | /* evaluate the ACPI method associated with this device */ | 
|  | extern acpi_status wmidev_evaluate_method(struct wmi_device *wdev, | 
|  | u8 instance, u32 method_id, | 
|  | const struct acpi_buffer *in, | 
|  | struct acpi_buffer *out); | 
|  |  | 
|  | /* Caller must kfree the result. */ | 
|  | extern union acpi_object *wmidev_block_query(struct wmi_device *wdev, | 
|  | u8 instance); | 
|  |  | 
|  | extern int set_required_buffer_size(struct wmi_device *wdev, u64 length); | 
|  |  | 
|  | struct wmi_driver { | 
|  | struct device_driver driver; | 
|  | const struct wmi_device_id *id_table; | 
|  |  | 
|  | int (*probe)(struct wmi_device *wdev, const void *context); | 
|  | int (*remove)(struct wmi_device *wdev); | 
|  | void (*notify)(struct wmi_device *device, union acpi_object *data); | 
|  | long (*filter_callback)(struct wmi_device *wdev, unsigned int cmd, | 
|  | struct wmi_ioctl_buffer *arg); | 
|  | }; | 
|  |  | 
|  | extern int __must_check __wmi_driver_register(struct wmi_driver *driver, | 
|  | struct module *owner); | 
|  | extern void wmi_driver_unregister(struct wmi_driver *driver); | 
|  | #define wmi_driver_register(driver) __wmi_driver_register((driver), THIS_MODULE) | 
|  |  | 
|  | #define module_wmi_driver(__wmi_driver) \ | 
|  | module_driver(__wmi_driver, wmi_driver_register, \ | 
|  | wmi_driver_unregister) | 
|  |  | 
|  | #endif |