Usando ACPI para configurar portas USB em um computador
Se o sistema exigir alterações de BIOS de ACPI para refletir com precisão a configuração da porta USB, você deverá considerar a capacidade do usuário de conectar um dispositivo à porta ao configurar a porta.
Se você usar ACPI para especificar a configuração de uma porta USB, deverá definir os recursos de porta USB (_UPC) e os objetos de descrição de localização física (_PLD). Embora a especificação do ACPI 6.0 não proíba especificamente o uso apenas do objeto _UPC , o uso de ambos os objetos indica com mais precisão a capacidade do usuário de conectar dispositivos à porta. Usar apenas o objeto _UPC pode não definir o agrupamento de contêineres do dispositivo corretamente ou conforme o esperado.
Os dispositivos anexados à porta serão removíveis do hub se o bit DeviceRemovable estiver definido. A tabela a seguir mostra como os valores dos objetos ACPI de uma determinada porta afetam o valor do bit DeviceRemovable do descritor do hub USB que o Windows relata para o dispositivo.
Status da porta USB | Exemplo | _UPC. Byte PortIsConnectable | _PLD. Bit UserVisible (bit 64) | Valor de bit DeviceRemovable resultante |
---|---|---|---|---|
A porta está visível e o usuário pode se conectar e desconectar dispositivos livremente. |
A porta é exposta na face de um painel no computador que está visível para o usuário. |
Definir (0xFF) |
Set (1) |
Definir |
A porta está oculta ou interna e o usuário não pode se conectar e desconectar dispositivos livremente. |
A porta é diretamente conectada a um dispositivo integrado, como uma webcam de laptop ou um hub USB interno. |
Definir (0xFF) |
Desmarcada |
Desmarcada |
A porta é fisicamente implementada pelo controlador de host USB, mas não é usada. |
A porta é uma porta em excesso que não está conectada a um terminal de plug-in de porta ou a um dispositivo integrado. |
Desmarcado (0x00) |
Limpar |
Desmarcada |
Nota É uma configuração inválida para definir uma porta como não conectável, mas visível para o usuário.
Os exemplos a seguir mostram ASL (Linguagem de Origem) acpi corretamente formada que demonstra o uso dos objetos _UPC e _PLD para descrever uma porta USB:
Para especificar uma porta interna (não visível pelo usuário) e que possa ser conectada a um dispositivo integrado, o _UPC. O byte PortIsConnectable deve ser definido como 0xFF e o _PLD. O bit UserVisible deve ser definido como 0.
No exemplo a seguir, o dispositivo é agrupado com o contêiner do dispositivo do computador.
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})
Para especificar uma porta externa (visível pelo usuário) e que possa ser conectada a um dispositivo externo, o _UPC. O byte PortIsConnectable deve ser definido como 0xFF e o _PLD. O bit UserVisible deve ser definido como 1. O _UPC. O byte PortConnectorType deve ser definido como o tipo de conector USB apropriado, conforme especificado na Seção 9.13 da especificação ACPI 3.0.
No exemplo a seguir, o dispositivo recebe um novo contêiner de dispositivo e é exibido como um dispositivo físico separado.
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})
Um conector USB Type-C deve ser descrito corretamente no ACPI para passar no teste do Kit de Laboratório de Hardware de Validação de ACPI do TIPO C USB .
Exemplo _UPC para um conector USB Tipo 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
Para obter mais informações sobre a interface ACPI 6.0, confira Configuração Avançada e Revisão de Especificação do Power Interface 6.0.