Intel North Mux-Agent

介绍

North Mux-Agent 是 Intel PMC 固件的一个功能,该固件在大多数具有 PMC 微控制器的 Intel 平台上均受支持。它用于配置系统上的各种 USB 多路复用器/多路分解器。允许从操作系统配置 mux-agent 的平台具有一个 ACPI 设备对象(节点),其 HID 为“INTC105C”。

North Mux-Agent(又名 Intel PMC Mux Control,或简称为 mux-agent)驱动程序使用 PMC IPC 方法 (drivers/platform/x86/intel_scu_ipc.c) 与 PMC 微控制器通信。该驱动程序向 USB Type-C Mux Class 注册,允许 USB Type-C 控制器和接口驱动程序配置电缆插头方向和模式(使用备用模式)。该驱动程序还向 USB Role Class 注册,以支持 USB 主机和设备模式。驱动程序位于此处:drivers/usb/typec/mux/intel_pmc_mux.c。

端口节点

通常

对于系统上复用代理控制下的每个 USB Type-C 连接器,PMC 复用代理设备节点下都有一个单独的子节点。这些节点并不代表实际的连接器,而是代表与连接器关联的复用代理中的“通道”:

Scope (_SB.PCI0.PMC.MUX)
{
    Device (CH0)
    {
        Name (_ADR, 0)
    }

    Device (CH1)
    {
        Name (_ADR, 1)
    }
}

_PLD(设备的物理位置)

可选的 _PLD 对象可与端口(通道)节点一起使用。如果提供了 _PLD,它应该与连接器节点 _PLD 匹配:

Scope (_SB.PCI0.PMC.MUX)
{
    Device (CH0)
    {
        Name (_ADR, 0)
        Method (_PLD, 0, NotSerialized)
        {
            /* Consider this as pseudocode. */
            Return (\_SB.USBC.CON0._PLD())
        }
    }
}

Mux-agent 特定的 _DSD 设备属性

端口号

为了配置 USB Type-C 连接器后面的多路复用器,PMC 固件需要知道与连接器关联的 USB2 端口和 USB3 端口。驱动程序通过读取名为“usb2-port-number”和“usb3-port-number”的特定 _DSD 设备属性来提取正确的端口号。这些属性具有表示端口索引的整数值。端口索引号以 1 为基础,值 0 是非法的。驱动程序在向 PMC 发送多路复用代理特定消息时按原样使用从这些设备属性中提取的数字:

Name (_DSD, Package () {
    ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
    Package() {
        Package () {"usb2-port-number", 6},
        Package () {"usb3-port-number", 3},
    },
})

目标

根据平台的不同,从多路复用代理的角度来看,来自连接器的数据和 SBU 线路可能是“固定的”,这意味着多路复用代理驱动程序不应根据电缆插头方向配置它们。例如,如果平台上的重定时器处理电缆插头方向,就会发生这种情况。驱动程序使用特定的设备属性“sbu-orientation”(SBU)和“hsl-orientation”(数据)来了解这些线路是否“固定”,以及固定到哪个方向。这些属性的值是一个字符串值,可以是针对 USB Type-C 连接器方向定义的值:“正常”或“反转”:

Name (_DSD, Package () {
    ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
    Package() {
        Package () {"sbu-orientation", "normal"},
        Package () {"hsl-orientation", "normal"},
    },
})

ASL例子

以下 ASL 是一个示例,展示了 mux-agent 节点及其控制的两个连接器:

Scope (_SB.PCI0.PMC)
{
    Device (MUX)
    {
        Name (_HID, "INTC105C")

        Device (CH0)
        {
            Name (_ADR, 0)

            Name (_DSD, Package () {
                ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
                Package() {
                    Package () {"usb2-port-number", 6},
                    Package () {"usb3-port-number", 3},
                    Package () {"sbu-orientation", "normal"},
                    Package () {"hsl-orientation", "normal"},
                },
            })
        }

        Device (CH1)
        {
            Name (_ADR, 1)

            Name (_DSD, Package () {
                ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
                Package() {
                    Package () {"usb2-port-number", 5},
                    Package () {"usb3-port-number", 2},
                    Package () {"sbu-orientation", "normal"},
                    Package () {"hsl-orientation", "normal"},
                },
            })
        }
    }
}

 

posted @ 2025-03-20 18:33  闹闹爸爸  阅读(54)  评论(0)    收藏  举报