hc
2024-11-01 2f529f9b558ca1c1bd74be7437a84e4711743404
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/* 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