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。