linux/include/linux/wmi.h
<<
>>
Prefs
   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
  23struct 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 */
  31extern 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. */
  37extern union acpi_object *wmidev_block_query(struct wmi_device *wdev,
  38                                             u8 instance);
  39
  40extern int set_required_buffer_size(struct wmi_device *wdev, u64 length);
  41
  42struct wmi_device_id {
  43        const char *guid_string;
  44};
  45
  46struct 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
  57extern int __must_check __wmi_driver_register(struct wmi_driver *driver,
  58                                              struct module *owner);
  59extern 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