WMI 驅動程式 API

WMI 驅動程式核心支援一個更現代的、基於匯流排的介面,用於與 WMI 裝置互動,以及一個較舊的、基於 GUID 的介面。 後者介面被認為是已棄用的,因此新的 WMI 驅動程式通常應避免使用它,因為它存在多個 WMI 裝置共享同一 GUID 的問題。 現代的基於匯流排的介面將每個 WMI 裝置對映到一個 struct wmi_device,因此它支援 WMI 裝置共享同一個 GUID。 然後,驅動程式可以註冊一個 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 結構

描述

對於在模組初始化/退出中不做任何特殊處理的 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 驅動程式。