Verwenden von ACPI zum Konfigurieren von USB-Ports auf einem Computer
Wenn das System ACPI-BIOS-Änderungen erfordert, um die USB-Portkonfiguration genau widerzuspiegeln, sollten Sie beim Konfigurieren des Ports die Möglichkeit des Benutzers berücksichtigen, ein Gerät mit dem Port zu verbinden.
Wenn Sie ACPI verwenden, um die Konfiguration eines USB-Ports anzugeben, müssen Sie die Objekte USB-Portfunktionen (_UPC) und physische Standortbeschreibung (_PLD) definieren. Obwohl die ACPI 6.0-Spezifikation die Verwendung nur des _UPC-Objekts nicht ausdrücklich verbietet, gibt die Verwendung beider Objekte genauer an, dass der Benutzer Geräte mit dem Port verbinden kann. Wenn Sie nur das _UPC -Objekt verwenden , wird die Gerätecontainergruppierung möglicherweise nicht ordnungsgemäß oder wie erwartet festgelegt.
Geräte, die an den Port angeschlossen sind, können vom Hub entfernt werden, wenn das DeviceRemovable-Bit festgelegt ist. Die folgende Tabelle zeigt, wie sich die Werte der ACPI-Objekte für einen bestimmten Port auf den Wert des USB-Hub-Deskriptors DeviceRemovable auswirken, das Windows für das Gerät meldet.
USB-Anschlussstatus | Beispiel | _UPC. PortIsConnectable byte | _PLD. UserVisible Bit (Bit 64) | Resultierender DeviceRemovable Bit-Wert |
---|---|---|---|---|
Port ist sichtbar, und der Benutzer kann Geräte frei verbinden und trennen. |
Port wird auf der Vorderseite eines Bereichs auf dem Computer verfügbar gemacht, der für den Benutzer sichtbar ist. |
Festlegen (0xFF) |
Festlegen (1) |
Set |
Der Port ist ausgeblendet oder intern, und der Benutzer kann Geräte nicht frei verbinden und trennen. |
Der Anschluss wird direkt mit einem integrierten Gerät verbunden, z. B. einer Laptop-Webcam oder einem internen USB-Hub. |
Festlegen (0xFF) |
Gelöscht |
Gelöscht |
Der Port wird vom USB-Hostcontroller physisch implementiert, aber nicht verwendet. |
Port ist ein überschüssiger Port, der nicht mit einem Anschlussterminal oder einem integrierten Gerät verbunden ist. |
Gelöscht (0x00) |
Clear |
Gelöscht |
Hinweis Es ist eine ungültige Konfiguration, um einen Port als nicht verbunden, aber für den Benutzer sichtbar zu definieren.
Die folgenden Beispiele zeigen eine korrekt formatierte ACPI-Quellsprache (ACPI Source Language, ASL), die die Verwendung der _UPC - und _PLD-Objekte zum Beschreiben eines USB-Ports veranschaulicht:
Um einen port anzugeben, der intern (nicht vom Benutzer sichtbar) ist und mit einem integrierten Gerät verbunden werden kann, _UPC. PortIsConnectable byte muss auf 0xFF und die _PLD festgelegt werden . UserVisible Bit muss auf 0 festgelegt werden.
Im folgenden Beispiel wird das Gerät mit dem Gerätecontainer des Computers gruppiert.
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})
Um einen port anzugeben, der extern ist (Benutzer sichtbar) und mit einem externen Gerät verbunden werden kann, _UPC. PortIsConnectable byte muss auf 0xFF und die _PLD festgelegt werden . UserVisible Bit muss auf 1 festgelegt werden. Der _UPC. PortConnectorType-Byte muss auf den entsprechenden USB-Anschlusstyp festgelegt werden, wie in Abschnitt 9.13 der ACPI 3.0-Spezifikation angegeben.
Im folgenden Beispiel wird dem Gerät ein neuer Gerätecontainer zugewiesen und als separates physisches Gerät angezeigt.
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})
Ein USB-Typ-C-Anschluss muss in ACPI ordnungsgemäß beschrieben werden, um den Test des USB Type-C ACPI Validation Hardware Lab Kit zu bestehen.
Beispiel _UPC für einen USB-Typ-C-Anschluss:
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
Weitere Informationen zur ACPI 6.0-Schnittstelle finden Sie unter Advanced Configuration and Power Interface Specification Revision 6.0.