Surface ACPI 通知¶
Surface ACPI 通知 (SAN) 设备提供了 ACPI 和 SAM 控制器之间的桥梁。具体来说,ACPI 代码可以通过此接口执行请求并处理电池和散热事件。除此之外,与 Surface Book 2 的独立 GPU (dGPU) 相关的事件可以从 ACPI 代码发送(注意:Surface Book 3 使用不同的方法)。目前已知通过此接口发送的唯一事件是 dGPU 上电通知。虽然此驱动程序在内部处理前者,但它仅通过其公共 API 将 dGPU 事件中继到任何其他感兴趣的驱动程序,并且不处理它们。
此驱动程序的公共接口分为两部分:客户端注册和通知程序块注册。
SAN 接口的客户端可以通过 san_client_link()
作为消费者链接到 SAN 设备。这可用于确保接收 dGPU 事件的客户端不会因 SAN 接口未设置而错过任何事件,因为这会强制客户端驱动程序在 SAN 驱动程序取消绑定后取消绑定。
只要模块已加载,任何设备都可以注册通知程序块,无论是否作为客户端链接。注册通过 san_dgpu_notifier_register()
完成。如果不再需要通知程序,则应通过 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 接口,并且只要客户端设备的驱动程序已绑定,就会设置 SAN 接口。这保证了在此期间,任何注册的通知程序都将收到所有 dGPU 事件。
一旦客户端设备的驱动程序取消绑定,该链接将自动删除。
返回
成功时返回零,如果尚未设置 SAN 接口,则返回 -ENXIO
,如果设备链接创建失败,则返回 -ENOMEM
。
-
int san_dgpu_notifier_register(struct notifier_block *nb)¶
注册 SAN dGPU 通知程序。
参数
struct notifier_block *nb
要注册的通知程序块。
描述
注册 SAN dGPU 通知程序,接收从 ACPI 发送的任何新的 SAN dGPU 事件。注册的通知程序将使用 struct san_dgpu_event
作为通知程序数据和该事件的命令 ID 作为通知程序操作进行调用。
-
int san_dgpu_notifier_unregister(struct notifier_block *nb)¶
取消注册 SAN dGPU 通知程序。
参数
struct notifier_block *nb
要取消注册的通知程序块。