使用 ACPI 配置计算机上的 USB 端口

如果系统需要 ACPI BIOS 更改才能准确反映 USB 端口配置,则应在配置端口时考虑用户将设备连接到端口的能力。

如果使用 ACPI 指定 USB 端口的配置,则必须定义 USB 端口功能 (_UPC) 和物理位置说明 (_PLD) 对象。 尽管 ACPI 6.0 规范没有明确禁止仅使用 _UPC 对象,但更准确地说,这两个对象的使用表明用户能够将设备连接到端口。 仅使用 _UPC 对象可能无法正确或按预期设置设备容器分组。

如果设置了 DeviceRemovable 位,则连接到端口的设备可从中心进行删除。 下表显示了给定端口的 ACPI 对象的值如何影响 Windows 为该设备报告的 USB 中心描述符 DeviceRemovable 位的值。

USB 端口状态 示例 _Upc。PortIsConnectable 字节 _Pld。UserVisible 位 (位 64) 生成的 DeviceRemovable 位值

端口可见,用户可以自由连接和断开连接设备。

端口公开在计算机上对用户可见的面板的表面上。

设置 (0xFF)

设置 (1)

设置

端口是隐藏的或内部的,用户无法自由连接和断开连接设备。

端口直接硬连接到集成设备,例如笔记本电脑网络摄像头或内部 USB 集线器。

设置 (0xFF)

已清除

已清除

端口由 USB 主控制器以物理方式实现,但不使用。

端口是未连接到端口插头终端或集成设备的多余端口。

已清除 (0x00)

清除

已清除

注意 将端口定义为不可连接但对用户可见的端口是无效的配置。

以下示例演示格式正确的 ACPI 源语言 (ASL) ,该语言演示了如何使用 _UPC_PLD 对象来描述 USB 端口:

  • 若要指定内部 (用户不可见) 且可连接到集成设备的端口, _UPC。PortIsConnectable 字节必须设置为 0xFF 和 _PLD。UserVisible 位必须设置为 0。

    在以下示例中,设备与计算机的设备容器进行分组。

    Name(_UPC, Package(){
        0xFF,         // Port is connectable
        0xFF,         // Connector type (N/A for non-visible ports)
        0x00000000,   // Reserved 0, must be zero
        0x00000000})  // Reserved 1, must be zero
    
    Name(_PLD, Buffer(0x10){
        0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x30, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00})
    
  • 若要指定外部端口 (用户可见) 并且可以连接到外部设备的端口, _UPC。PortIsConnectable 字节必须设置为 0xFF 和 _PLD。UserVisible 位必须设置为 1。 _UPDPortConnectorType 字节必须设置为 ACPI 3.0 规范第 9.13 节中指定的相应 USB 连接器类型。

    在以下示例中,为设备分配了一个新的设备容器,并显示为单独的物理设备。

    Name(_UPC, Package(){
        0xFF,         // Port is connectable
        0x00,         // Connector type, Type 'A' in this case
        0x00000000,   // Reserved 0, must be zero
        0x00000000})  // Reserved 1, must be zero
    
    Name(_PLD, Buffer(0x10){
        0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x31, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00})
    

ACPI 中必须正确描述 USB Type-C 连接器才能通过 USB 类型 C ACPI 验证 硬件实验室工具包测试。

USB Type-C 连接器的示例_UPC:

      Name(_UPC, Package(4){
        0x01,                       // Port is connectable
        0x09,                       // Connector type: Type C connector - USB2 and SS with Switch
        0x00000000,                 // Reserved0 – must be zero
        0x00000000})                // Reserved1 – must be zero

有关 ACPI 6.0 接口的详细信息,请参阅 高级配置和电源接口规范修订版 6.0