Hintergrund: USB Ports via ACPI zu mappen war bislang schon ein bisschen ein Krampf: ACPI tables dumpen, SSDT mit den USB Potr-Deklarationen finden, die Tabelle droppen und durch einen komplett neu geschriebene SSDT ersetzen, die für jeden Port der unter macOS irgendwie anders behandelt werden soll eine OSI-Weiche benätigt (beschrieben hier: USB mittels SSDT deklarieren). Das ist übermäßig aufwendig, fehlerbehaftet und unübersichtlich.
Das ganze geht auch viel einfach und ohne die OEM SSDT zu ersetzen. Dazu deaktiviert man wenn macOS läuft einfach das originale USB Root Hub (RHUB oder HUBN) und definiert einfach ein neues Hub, das für macOS verwendet wird. Dem neuen Root Hub fügt man dann einfach die bis zu 15 Ports hinzu, die unter macOS verwendet werden sollen und speichert da ganze als SSDT-XHUB.aml oder SSDT-HUBX.aml (je nachdem wie das OEM Root Hub heisst). Die SSDT speist man dann einfach über den Bootloader der Wahl ein, ohne drop and replace der OEM-Tabelle.
Besipeildatei (Auszug):
- DefinitionBlock ("", "SSDT", 2, "OCL", "XHUB", 0x00000000)
- {
- External (_SB_.PCI0.XHC_.RHUB, DeviceObj)
- Scope (\_SB.PCI0.XHC.RHUB)
- {
- Method (_STA, 0, NotSerialized) // _STA: Status
- {
- If (_OSI ("Darwin"))
- {
- Return (Zero)
- }
- Else
- {
- Return (0x0F)
- }
- }
- }
- Device (\_SB.PCI0.XHC.XHUB)
- {
- Name (_ADR, Zero) // _ADR: Address
- Method (_STA, 0, NotSerialized) // _STA: Status
- {
- If (_OSI ("Darwin"))
- {
- Return (0x0F) // Enable custom XHUB under macOS
- }
- Else
- {
- Return (Zero) // Disable custom XHUB for other OSes
- }
- }
- Device (HS02)
- {
- Name (_ADR, 0x02) // _ADR: Address
- Method (_UPC, 0, NotSerialized) // _UPC: USB Port Capabilities
- {
- Return (Package (0x04)
- {
- 0xFF,
- 0x03,
- Zero,
- Zero
- })
- }
- Method (_PLD, 0, NotSerialized) // _PLD: Physical Location of Device
- {
- Return (Package (0x01)
- {
- Buffer (0x10)
- {
- /* 0000 */ 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
- /* 0008 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 //
- }
- })
- }
- }
- Device (HS03)
- {
- Name (_ADR, 0x03) // _ADR: Address
- Method (_UPC, 0, NotSerialized) // _UPC: USB Port Capabilities
- {
- Return (Package (0x04)
- {
- 0xFF,
- 0x03,
- Zero,
- Zero
- })
- }
- }
- }
- }
Das sieht dann in Hacckintool so aus:
Bei den USB 2 Ports könnte man noch den Typ anpassen, aber dafür hat es halt nur 5 Minuten gedauert und ich musste nicht im original Table rumfuchteln!
Den Step-by-Step guide gibt es auf meiner repo: https://github.com/5T33Z0/OC-L…rts/XHUB_Method/README.md