Windows 图形显示驱动开发-WDDM 3.2-自动显示切换(十)

电源转换序列

以下示例描述了 ADS 系统的休眠电源转换。

  1. 系统配置为连接 dGPU 的多路复用器。
  2. 系统进入休眠状态。
  3. iGPU 和 dGPU 都切换到了 D3 电源状态。
  4. 系统关闭电源。
  5. 用户开启系统电源。
  6. 固件配置 iGPU 的多路复用器和 iGPU 在内部面板上的显示启动序列。
  7. Dxgkrnl 读取最后的多路复用器配置(本例中为 dGPU),并将其与使用 ACPI 的当前多路复用器位置(本例中为 iGPU)进行比较。 Dxgkrnl 然后调用 ACPI 将多路复用器切换到 dGPU。
  8. Dxgkrnl 将 iGPU 转换为 D0,然后调用 iGPU 的DxgkDdiDisplayMuxUpdateState,以通知驱动程序该多路复用器未连接到它。
  9. Dxgkrnl 将 dGPU 转换为 D0,然后调用 dGPU 的DxgkDdiDisplayMuxUpdateState,以通知驱动程序该多路复用器已连接到它。
  10. Dxgkrnl 在 dGPU 上设置模式。
一体机系统(AIO)

任何想要支持 ADS 的 AIO 系统都必须在两个 GPU 上将内部面板作为内部目标类型进行公开。

多路复用器 ACPI 设备

OEM 负责在 ACPI 命名空间中添加多路复用器设备,并提供操作多路复用器所需的方法。

GPU 驱动程序不应调用多路复用器的 ACPI 方法,因为多路复用器设备可能位于 ACPI 树中的任何位置。 建议将多路复用器置于两个 GPU 最接近的共享上级之下。

当前复用器设备仅支持两个输入,我们预计未来的复用器不会支持超过两个输入,因此设计可以假设每个复用器有两个输入和一个输出。

在系统运行时,绝对不能停止多路复用器设备。 这是一个隐藏的系统设备。

多路复用器设备 ACPI 方法

只有 ACPI 设备的驱动程序堆栈才能进行调用,以便评估设备上的 ACPI 方法。 因此,要调用多路复用器设备方法来切换多路复用器,OS 需要为多路复用器设备加载驱动程序。 因此,OS 现在提供了一个显示多路复用器驱动程序,作为所有显示切换多路复用器的驱动程序。

多路复用器设备必须具备以下方法:

  • _HID 通过硬件 ID 来识别多路复用器设备。 我们为 ACPI 显示多路复用器保留了“MSFT0005”。
  • DMQU(显示多路复用器查询)返回多路复用器的当前状态。
  • DMCF(显示多路复用器配置)配置多路复用器。
方法 _HID(硬件 ID)

参数:

返回:

包含硬件 ID 的 ASCII 字符串,即“MSFT0005”。

方法 DMQU(显示多路复用器查询)

在将来的版本中,我们预计将向查询添加更多信息。 为在将来启用其他查询,将使用 Arg0 表示查询类型。 如果 DMQU 方法不理解查询类型,则应将该方法视为不支持。

参数:

Arg0:指定查询类型的整数。 下表列出了查询类型值及其含义。

查询类型值 含义
1 查询当前切换状态
2 查询多路复用器 ADS 支持级别
3 查询多路复用器连接的第一个 GPU 子级
4 查询多路复用器连接的第二个 GPU 子级

返回:

如果此方法能理解指定的查询类型,则应返回下表中列出的相应数据。 如果此方法不理解指定的查询类型,则应返回空字符串。

查询类型值 返回数据
1 ASCII 字符串,包含多路复用器当前切换到的 GPU 子设备的 ACPI 名称。
2 表示 ADS 支持级别的整数。 详见下表。
3 ASCII 字符串,包含多路复用器所连接的第一个 GPU 子设备的 ACPI 名称。
4 ASCII 字符串,包含多路复用器所连接的第二个 GPU 子设备的 ACPI 名称。

下表列出了查询类型为 2 时的 ADS 支持级别值及其含义。

返回的数据 含义
0 不支持
1 开发支持。 系统可以在不通过任何 HLK 测试的情况下使用此设置交付,因为 ADS 在客户系统中默认为禁用。
2 实验性支持。 系统可以在不通过任何 HLK 测试的情况下使用此设置交付,因为 ADS 在客户系统中默认为禁用。
3 全面支持。 如果该系统与完全支持的图形驱动程序配对,则默认情况下将启用 ADS。 系统需要通过 ADS HLK 测试才能交付。
方法 DMCF(显示多路复用器配置)

参数:

Arg0多路复用器应切换到的 ACPI GPU 子设备的 ASCII 名称。

返回:

整数 0 表示成功;非 0 表示失败。 OEM 可以定义非 0 值,以便更好地进行诊断。

你可能感兴趣的:(驱动开发,windows)