WMI 驱动程序 API

WMI 驱动程序核心支持用于与 WMI 设备交互的更现代的基于总线的接口,以及更旧的基于 GUID 的接口。后一种接口被认为是已弃用的,因此新的 WMI 驱动程序通常应避免使用它,因为它在多个 WMI 设备共享同一 GUID 时存在一些问题。现代的基于总线的接口将每个 WMI 设备映射到一个 struct wmi_device,因此它支持共享同一 GUID 的 WMI 设备。然后,驱动程序可以注册一个 struct wmi_driver,该驱动程序将由驱动程序核心绑定到兼容的 WMI 设备。

struct wmi_device

WMI 设备结构

定义:

struct wmi_device {
    struct device dev;
    bool setable;
    const char *driver_override;
};

成员

dev

与此 WMI 设备关联的设备

setable

对于实现“设置控制方法”的设备为 True

driver_override

强制匹配的驱动程序名称;不要直接设置,因为核心会释放它;使用 driver_set_override() 设置或清除它。

描述

这表示由 WMI 驱动程序核心发现的 WMI 设备。

to_wmi_device

to_wmi_device (device)

将设备强制转换为 wmi_device 的辅助宏

参数

device

设备结构

描述

struct device 强制转换为 struct wmi_device

struct wmi_driver

WMI 驱动程序结构

定义:

struct wmi_driver {
    struct device_driver driver;
    const struct wmi_device_id *id_table;
    bool no_notify_data;
    bool no_singleton;
    int (*probe)(struct wmi_device *wdev, const void *context);
    void (*remove)(struct wmi_device *wdev);
    void (*shutdown)(struct wmi_device *wdev);
    void (*notify)(struct wmi_device *device, union acpi_object *data);
};

成员

driver

驱动程序模型结构

id_table

此驱动程序支持的 WMI GUID 列表

no_notify_data

驱动程序支持不提供事件数据的 WMI 事件

no_singleton

驱动程序可以多次实例化

probe

用于设备绑定的回调

remove

用于设备取消绑定的回调

shutdown

用于设备关机的回调

notify

用于接收 WMI 事件的回调

描述

这表示处理 WMI 设备的 WMI 驱动程序。

to_wmi_driver

to_wmi_driver (drv)

将驱动程序强制转换为 wmi_driver 的辅助宏

参数

drv

驱动程序结构

描述

struct device_driver 强制转换为 struct wmi_driver

wmi_driver_register

wmi_driver_register (driver)

注册 WMI 驱动程序的辅助宏

参数

driver

wmi_driver 结构

描述

用于注册 WMI 驱动程序的辅助宏。它会自动将 THIS_MODULE 传递给底层函数。

module_wmi_driver

module_wmi_driver (__wmi_driver)

用于注册/取消注册 WMI 驱动程序的辅助宏

参数

__wmi_driver

wmi_driver 结构

描述

适用于在模块 init/exit 中不做任何特殊处理的 WMI 驱动程序的辅助宏。这消除了大量样板代码。每个模块只能使用此宏一次,调用它会替换 module_init()module_exit()

int wmi_instance_count(const char *guid_string)

获取 WMI 对象实例数

参数

const char *guid_string

36 个字符的字符串,格式为 fa50ff2b-f2e8-45de-83fa-65417f2f49ba

描述

获取 WMI 对象实例数。

返回

WMI 对象实例数或负错误代码。

u8 wmidev_instance_count(struct wmi_device *wdev)

获取 WMI 对象实例数

参数

struct wmi_device *wdev

来自驱动程序的 WMI 总线设备

描述

获取 WMI 对象实例数。

返回

WMI 对象实例数。

acpi_status wmi_evaluate_method(const char *guid_string, u8 instance, u32 method_id, const struct acpi_buffer *in, struct acpi_buffer *out)

评估 WMI 方法(已弃用)

参数

const char *guid_string

36 个字符的字符串,格式为 fa50ff2b-f2e8-45de-83fa-65417f2f49ba

u8 instance

实例索引

u32 method_id

要调用的方法 ID

const struct acpi_buffer *in

包含方法调用输入的必要缓冲区

struct acpi_buffer *out

用于返回方法结果的空缓冲区

描述

调用 ACPI-WMI 方法,调用者必须释放 out

返回

表示成功或错误的 acpi_status。

acpi_status wmidev_evaluate_method(struct wmi_device *wdev, u8 instance, u32 method_id, const struct acpi_buffer *in, struct acpi_buffer *out)

评估 WMI 方法

参数

struct wmi_device *wdev

来自驱动程序的 WMI 总线设备

u8 instance

实例索引

u32 method_id

要调用的方法 ID

const struct acpi_buffer *in

包含方法调用输入的必要缓冲区

struct acpi_buffer *out

用于返回方法结果的空缓冲区

描述

调用 ACPI-WMI 方法,调用者必须释放 out

返回

表示成功或错误的 acpi_status。

acpi_status wmi_query_block(const char *guid_string, u8 instance, struct acpi_buffer *out)

返回 WMI 块的内容(已弃用)

参数

const char *guid_string

36 个字符的字符串,格式为 fa50ff2b-f2e8-45de-83fa-65417f2f49ba

u8 instance

实例索引

struct acpi_buffer *out

用于返回数据块内容的空缓冲区

描述

查询 ACPI-WMI 块,调用者必须释放 out

返回

包含 WMI 块内容的 ACPI 对象。

union acpi_object *wmidev_block_query(struct wmi_device *wdev, u8 instance)

返回 WMI 块的内容

参数

struct wmi_device *wdev

来自驱动程序的 WMI 总线设备

u8 instance

实例索引

描述

查询 ACPI-WMI 块,调用者必须释放结果。

返回

包含 WMI 块内容的 ACPI 对象。

acpi_status wmi_set_block(const char *guid_string, u8 instance, const struct acpi_buffer *in)

写入 WMI 块(已弃用)

参数

const char *guid_string

36 个字符的字符串,格式为 fa50ff2b-f2e8-45de-83fa-65417f2f49ba

u8 instance

实例索引

const struct acpi_buffer *in

包含数据块新值的缓冲区

描述

将输入缓冲区的内容写入 ACPI-WMI 数据块。

返回

表示成功或错误的 acpi_status。

acpi_status wmidev_block_set(struct wmi_device *wdev, u8 instance, const struct acpi_buffer *in)

写入 WMI 块

参数

struct wmi_device *wdev

来自驱动程序的 WMI 总线设备

u8 instance

实例索引

const struct acpi_buffer *in

包含数据块新值的缓冲区

描述

将输入缓冲区的内容写入 ACPI-WMI 数据块。

返回

表示成功或错误的 acpi_status。

acpi_status wmi_install_notify_handler(const char *guid, wmi_notify_handler handler, void *data)

注册 WMI 事件的处理程序(已弃用)

参数

const char *guid

36 个字符的字符串,格式为 fa50ff2b-f2e8-45de-83fa-65417f2f49ba

wmi_notify_handler handler

用于处理通知的函数

void *data

事件触发时返回给处理程序的数据

描述

为发送到 ACPI-WMI 映射器设备的事件注册处理程序。

返回

表示成功或错误的 acpi_status。

acpi_status wmi_remove_notify_handler(const char *guid)

取消注册 WMI 事件的处理程序(已弃用)

参数

const char *guid

36 个字符的字符串,格式为 fa50ff2b-f2e8-45de-83fa-65417f2f49ba

描述

取消注册发送到 ACPI-WMI 映射器设备的事件的处理程序。

返回

表示成功或错误的 acpi_status。

bool wmi_has_guid(const char *guid_string)

检查 GUID 是否可用

参数

const char *guid_string

36 个字符的字符串,格式为 fa50ff2b-f2e8-45de-83fa-65417f2f49ba

描述

检查给定的 GUID 是否由 _WDG 定义。

返回

如果 GUID 可用,则为 True,否则为 False。

char *wmi_get_acpi_device_uid(const char *guid_string)

获取定义 GUID 的 ACPI 设备的 _UID 名称(已弃用)

参数

const char *guid_string

36 个字符的字符串,格式为 fa50ff2b-f2e8-45de-83fa-65417f2f49ba

描述

查找与此 WMI GUID 关联的 ACPI 设备的 _UID。

返回

ACPI _UID 字段值;如果未找到 WMI GUID,则为 NULL。

void wmi_driver_unregister(struct wmi_driver *driver)

取消注册 WMI 驱动程序

参数

struct wmi_driver *driver

要取消注册的 WMI 驱动程序

描述

从 WMI 总线取消注册 WMI 驱动程序。