Intel North Mux-Agent¶
簡介¶
North Mux-Agent 是 Intel PMC 韌體的一個功能,在大多數基於 Intel 且具有 PMC 微控制器的平臺上都支援。它用於配置系統上各種 USB 多路複用器/解複用器。 允許從作業系統配置 mux-agent 的平臺具有 HID 為“INTC105C”的 ACPI 裝置物件(節點)來表示它。
North Mux-Agent(又名 Intel PMC Mux Control,或簡稱 mux-agent)驅動程式透過使用 PMC IPC 方法 (drivers/platform/x86/intel_scu_ipc.c) 與 PMC 微控制器通訊。 該驅動程式向 USB Type-C Mux 類註冊,這允許 USB Type-C 控制器和介面驅動程式配置電纜插頭方向和模式(使用備用模式)。 該驅動程式還向 USB Role 類註冊,以便支援 USB 主機和裝置模式。 該驅動程式位於:drivers/usb/typec/mux/intel_pmc_mux.c。
埠節點¶
通用¶
對於系統上 mux-agent 控制下的每個 USB Type-C 聯結器,PMC mux-agent 裝置節點下都有一個單獨的子節點。 這些節點不代表實際的聯結器,而是代表與聯結器關聯的 mux-agent 中的“通道”
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 是非法的。 當將 mux-agent 特定訊息傳送到 PMC 時,驅動程式會按原樣使用從這些裝置屬性中提取的數字
Name (_DSD, Package () {
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
Package() {
Package () {"usb2-port-number", 6},
Package () {"usb3-port-number", 3},
},
})
方向¶
根據平臺的不同,從聯結器傳出的資料和 SBU 線可能從 mux-agent 的角度來看是“固定的”,這意味著 mux-agent 驅動程式不應根據電纜插頭方向配置它們。 例如,如果平臺上的重定時器處理電纜插頭方向,則可能會發生這種情況。 驅動程式使用特定的裝置屬性“sbu-orientation”(SBU)和“hsl-orientation”(資料)來了解這些線路是否“固定”,以及固定到哪個方向。 這些屬性的值是一個字串值,可以是為 USB Type-C 聯結器方向定義的字串值:“normal”或“reversed”
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"},
},
})
}
}
}