Uso di ACPI per configurare porte USB in un computer
Se il sistema richiede modifiche del BIOS ACPI per riflettere in modo accurato la configurazione della porta USB, è consigliabile considerare la possibilità dell'utente di connettere un dispositivo alla porta quando si configura la porta.
Se si usa ACPI per specificare la configurazione di una porta USB, è necessario definire le funzionalità di porta USB (_UPC) e la descrizione della posizione fisica (_PLD). Anche se la specifica ACPI 6.0 non impedisce specificamente l'uso solo dell'oggetto _UPC , l'uso di entrambi gli oggetti indica in modo più preciso la capacità dell'utente di connettere i dispositivi alla porta. L'uso solo dell'oggetto _UPC potrebbe non impostare correttamente il raggruppamento del contenitore del dispositivo o come previsto.
I dispositivi collegati alla porta sono rimovibili dall'hub se il bit DeviceRemovable è impostato. Nella tabella seguente viene illustrato come i valori degli oggetti ACPI per una determinata porta influiscono sul valore del descrittore dell'hub USB DeviceRemovable bit che Windows segnala per il dispositivo.
Stato porta USB | Esempio | _UPC. Byte PortIsConnectable | _PLD. Bit UserVisible (bit 64) | Valore di bit rimovibile risultante |
---|---|---|---|---|
La porta è visibile e l'utente può connettersi liberamente e disconnettere i dispositivi. |
La porta viene esposta sulla faccia di un pannello nel computer visibile all'utente. |
Set (0xFF) |
Set (1) |
Set |
La porta è nascosta o interna e l'utente non può connettersi liberamente e disconnettere i dispositivi. |
La porta è direttamente hard cablata in un dispositivo integrato, ad esempio una webcam portatile o un hub USB interno. |
Set (0xFF) |
Cancellato |
Cancellato |
La porta viene implementata fisicamente dal controller host USB, ma non viene usata. |
La porta è una porta in eccesso che non è connessa a un terminale della porta o a un dispositivo integrato. |
Cancellata (0x00) |
Cancella |
Cancellato |
Nota È una configurazione non valida per definire una porta non connettibile ma visibile all'utente.
Gli esempi seguenti mostrano il formato corretto del linguaggio di origine ACPI (ASL) che illustra l'uso degli oggetti_UPC e _PLD per descrivere una porta USB:
Per specificare una porta interna (non visibile dall'utente) e può essere connessa a un dispositivo integrato, la _UPC. Il byte PortIsConnectable deve essere impostato su 0xFF e sul _PLD. UserVisible bit deve essere impostato su 0.
Nell'esempio seguente il dispositivo viene raggruppato con il contenitore del dispositivo del computer.
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})
Per specificare una porta esterna (visibile dall'utente) e può essere connessa a un dispositivo esterno, la _UPC. Il byte PortIsConnectable deve essere impostato su 0xFF e sul _PLD. UserVisible bit deve essere impostato su 1. _UPC. Il byte PortConnectorType deve essere impostato sul tipo di connettore USB appropriato, come specificato nella sezione 9.13 della specifica ACPI 3.0.
Nell'esempio seguente il dispositivo viene assegnato un nuovo contenitore di dispositivi e viene visualizzato come dispositivo fisico separato.
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})
Un connettore USB Type-C deve essere descritto correttamente in ACPI per superare il test di USB Type-C ACPI Validation Hardware Lab Kit.
Esempio di _UPC per un connettore 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
Per altre informazioni sull'interfaccia ACPI 6.0, vedere Advanced Configuration and Power Interface Specification Revision 6.0.