Surface ACPI Notify

Surface ACPI Notify (SAN) 裝置提供 ACPI 和 SAM 控制器之間的橋樑。具體來說,ACPI 程式碼可以透過此介面執行請求並處理電池和散熱事件。除此之外,與 Surface Book 2 的獨立 GPU (dGPU) 相關的事件可以從 ACPI 程式碼傳送(注意:Surface Book 3 使用不同的方法)。目前唯一已知的透過此介面傳送的事件是 dGPU 開機通知。雖然此驅動程式在內部處理前者,但它僅透過其公共 API 將 dGPU 事件中繼到任何其他感興趣的驅動程式,而不處理它們。

此驅動程式的公共介面分為兩部分:客戶端註冊和 notifier-block 註冊。

SAN 介面的客戶端可以透過 san_client_link() 作為消費者連結到 SAN 裝置。這可用於確保接收 dGPU 事件的客戶端不會因 SAN 介面未設定而錯過任何事件,因為這會強制客戶端驅動程式在 SAN 驅動程式未繫結時解除繫結。

無論是否作為客戶端連結,notifier-block 都可以由任何設備註冊,只要模組已載入即可。註冊透過 san_dgpu_notifier_register() 完成。如果不再需要 notifier,則應透過 san_dgpu_notifier_unregister() 登出。

有關更多詳細資訊,請參閱下面的 API 文件。

API 文件

struct san_dgpu_event

離散 GPU ACPI 事件。

定義:

struct san_dgpu_event {
    u8 category;
    u8 target;
    u8 command;
    u8 instance;
    u16 length;
    u8 *payload;
};

成員

category

事件的類別。

target

事件源的目標 ID。

command

事件的命令 ID。

instance

事件源的例項 ID。

length

事件的有效負載資料的長度(以位元組為單位)。

payload

指向事件的有效負載資料的指標。

將客戶端作為消費者連結到 SAN 裝置。

引數

struct device *client

要連結的客戶端。

描述

在提供的客戶端裝置作為消費者和 SAN 裝置作為提供者之間建立裝置連結。此函式可用於確保已設定 SAN 介面,並且只要客戶端裝置的驅動程式已繫結,就會進行設定。這保證了在此期間,任何已註冊的 notifier 都會收到所有 dGPU 事件。

一旦客戶端裝置的驅動程式未繫結,該連結將自動刪除。

返回

成功時返回零,如果尚未設定 SAN 介面,則返回 -ENXIO,如果裝置連結建立失敗,則返回 -ENOMEM

int san_dgpu_notifier_register(struct notifier_block *nb)

註冊 SAN dGPU notifier。

引數

struct notifier_block *nb

要註冊的 notifier-block。

描述

註冊 SAN dGPU notifier,接收從 ACPI 傳送的任何新 SAN dGPU 事件。將使用 struct san_dgpu_event 作為 notifier 資料以及該事件的命令 ID 作為 notifier 操作來呼叫已註冊的 notifier。

int san_dgpu_notifier_unregister(struct notifier_block *nb)

登出 SAN dGPU notifier。

引數

struct notifier_block *nb

要登出的 notifier-block。