Поделиться через


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

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

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

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

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

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

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

Set (0xFF)

Набор (1)

Присвойте параметру

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

Порт напрямую подключен к встроенному устройству, например веб-камере ноутбука или внутреннему USB-концентратору.

Set (0xFF)

Очищено

Очищено

Порт физически реализуется контроллером узла USB, но не используется.

Порт — это избыточный порт, который не подключен к терминалу разъема порта или встроенному устройству.

Очистка (0x00)

Clear

Очищено

Примечание Недопустимая конфигурация определяет порт как недоступный для подключения, но видимый для пользователя.

В следующих примерах показан правильно сформированный исходный язык 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. _КОД.Для байта 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, чтобы пройти тест комплекта лаборатории проверки ACPI USB Type-C .

Пример _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 см. в разделе Advanced Configuration and Power Interface Specification Revision 6.0.