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。