Использование 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.