Использование ACPI для настройки USB-портов на компьютере

Если системе требуется изменение BIOS ACPI для точного отражения конфигурации USB-порта, при настройке порта следует учитывать возможность пользователя подключать устройство к порту.

Если вы используете ACPI для указания конфигурации USB-порта, необходимо определить возможности USB-порта (_UPC) и физические объекты расположения (_PLD). Хотя спецификация ACPI 6.0 специально не запрещает использование только объекта _UPC, использование обоих объектов более точно указывает на возможность пользователя подключать устройства к порту. Использование только объекта _UPC может не задать группирование контейнеров устройства правильно или как ожидалось.

Устройства, подключенные к порту, могут быть удалены из концентратора, если установлен бит DeviceRemovable. В следующей таблице показано, как значения объектов ACPI для заданного порта влияют на значение описателя USB-концентратора DeviceRemovable бит, о котором Windows сообщает для устройства.

Состояние USB-порта Пример _UPC.PortIsConnectable байт _PLD.UserVisible bit (бит 64) Результирующее значение бита съемного устройства

Порт виден, и пользователь может свободно подключать и отключать устройства.

Порт находится на лицевой стороне панели компьютера и виден пользователю.

Установить (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. _UPC.байт PortConnectorType должен быть установлен в соответствующий тип USB-соединителя, как это определено в разделе 9.13 спецификации ACPI 3.0.

    В следующем примере устройство назначается новый контейнер устройств и отображается как отдельное физическое устройство.

    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})
    

Соединитель USB-Type-C должен быть правильно описан в ACPI, чтобы пройти тест проверки USB-Type-C в комплексе проверки оборудования по тестированию ACPI.

Пример _UPC для соединителя USB-Type-C:

      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.