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指向事件的有效負載資料的指標。
引數
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。