Skip to content
 
 

Latest commit

 

History

102 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

USBInjectAll.kext

A port-injection kext for macOS 10.11+ that temporarily enables all USB ports on Intel controllers, so you can identify which ports are physically present on your machine before creating a final, minimal port injector.

Why This Kext

Starting with 10.11, Apple's USB drivers rely on ACPI to determine active ports — and that information is often incorrect. Before you can build a proper port injector (or SSDT), you need to know which ports actually exist. This kext injects every possible port so you can test and map them.

Note: This kext is only for 10.11 and later. It has no use with earlier versions. Currently, only Intel controllers are supported.

Supported Controllers & Ports

Controller Chipset ID USB2 Ports USB3 Ports Notes
EH01 8 (PR11–PR18)
EH02 8 (PR21–PR28)
EH01 Hub 8 (HP11–HP18) Hub on EH01.PRT1 only
EH02 Hub 8 (HP21–HP28) Hub on EH02.PRT1 only
XHC 7-series 8086:1e31 4 (HS01–HS04) 4 (SS01–SS04)
XHC 8/9-series 8086:9xxx 9 (HS01–HS09) 6 (SS01–SS06)
XHC 8/9-series 8086:8xxx 14 (HS01–HS14) 6 (SS01–SS06)
XHC 8/9-series 8086:9cb1 11 (HS01–HS11) 4 (SS01–SS04)
XHC 100-series 8086:a12f 14 (HS01–HS14) 10 (SS01–SS10) + USR1/USR2
XHC 100-series 8086:9dxx 10 (HS01–HS10) 6 (SS01–SS06) + USR1/USR2
XHC 200-series 8086:a2af 14 (HS01–HS14) 10 (SS01–SS10) + USR1/USR2
XHC 300-series 8086:a36d 14 (HS01–HS14) 10 (SS01–SS10) + USR1/USR2
XHC 400-series 8086:a3af, 8086:06ed 14 (HS01–HS14) 10 (SS01–SS10) + USR1/USR2
XHC 500-series 8086:43ed, 8086:a0ed 14 (HS01–HS14) 10 (SS01–SS10) + USR1/USR2
XHC 600-series 8086:7ae0, 8086:51ed 14 (HS01–HS14) 10 (SS01–SS10) + USR1/USR2
XHC 700-series 8086:7a60 14 (HS01–HS14) 10 (SS01–SS10) + USR1/USR2
XHC 800-series 8086:7ec0, 8086:7e7d, 8086:7f6e 14 (HS01–HS14) 10 (SS01–SS10) + USR1/USR2
Comet Lake PCH-LP 8086:02ed 10 (HS01–HS10) 4 (SS01–SS04) + USR1/USR2
Ice Lake-LP 8086:34ed 12 (HS01–HS12) 4 (SS01–SS04) + USR1/USR2

Installation

Clover

Place the kext in:

EFI/Clover/kexts/Other/

OpenCore

Place the kext in:

EFI/OC/Kexts/

Then add a USBInjectAll.kext entry under config.plist → Kernel → Add, just like any other kext.

After installation, reboot.

Important Notes

  1. EHC1/EHC2 Renaming — This kext assumes you have already renamed EHC1EH01 and EHC2EH02 in your DSDT. It also assumes your XHCI controller is named XHC or XHCI (not XHC1). See config_patches.plist for the required DSDT patches.

  2. Not for Long-term Use — Without customization, this kext is intended only as a diagnostic tool. Create a custom injector with only your active ports, or use an SSDT to override the injections (see below).

  3. Installation Scenarios — This kext may help during macOS installation when broken USB prevents booting from an installer stick. Install it to EFI/Clover/kexts.

  4. XHCI-unsupported.kext — Certain Intel xHCI controllers lack native support and require XHCI-unsupported.kext from this project. Typical controllers needing it:

    • X99-series: 8086:8d31
    • 200-series: 8086:a2af
    • 300-series: 8086:a36d, 8086:9ded
    • 400-series: 8086:a3af
    • 500-series: 8086:43ed, 8086:a0ed
    • 600-series: 8086:7ae0, 8086:51ed
    • 700-series: 8086:7a60
    • 800-series: 8086:7ec0, 8086:7e7d, 8086:7f6e

    Check native support in:

    /System/Library/Extensions/IOUSBHostFamily.kext/Contents/Plugins/AppleUSBXHCIPCI.kext/Contents/Info.plist
    

    XHCI-unsupported.kext uses a lower IOProbeScore than the native Info.plist, so there is no harm in installing it even if native support exists.

  5. XHCI-9-series.kext — For 9-series chipset XHC controllers (8086:8cb1), this injector was previously required. As of 10.11.1, direct support was added and it is no longer needed. Historical version: RehabMan fork.

Port Limit Patches

Some chipsets exceed the 10.11 default of 15 ports on XHC. Controllers with device-IDs starting with 8 will need a patch to bypass this limit. The patch was created by arix98 and published on insanelymac.com (post #179).

Do not plan to use these patches long-term. Consider routing USB2 ports off XHC via FakePCIID_XHCIMux instead.

10.11.x — Limit to 20 ports

Comment: change 15 port limit to 20 in AppleUSBXHCIPCI
Name: AppleUSBXHCIPCI
Find: <83bd8cfe ffff10>
Replace: <83bd8cfe ffff15>

10.11.x — Limit to 26 ports (100-series boards)

Comment: change 15 port limit to 26 in AppleUSBXHCIPCI
Name: AppleUSBXHCIPCI
Find: <83bd8cfe ffff10>
Replace: <83bd8cfe ffff1b>

You can also copy patches directly from the config_patches.plist file included in this repository, which contains patches for all supported macOS versions plus the DSDT rename patches.

Port Exclusion via Boot Flags

Use kernel flags to exclude specific ports without creating a custom SSDT:

Flag Description
uia_exclude=<ports> Exclude specific ports (comma-delimited), e.g. uia_exclude=HS01,HS06
-uia_exclude_hs Exclude all HSxx (USB2) ports
-uia_exclude_ss Exclude all SSxx (USB3) ports
-uia_exclude_xhc Disable injection on XHC entirely
uia_include=<ports> Include ports that would otherwise be excluded, e.g. -uia_exclude_hs uia_include=HS01

Each port identifier injected by the kext is unique, so you can easily identify which device is connected to which port.

SSDT Customization

For full control, override the injected configuration via ACPI. Example — enable only SS01 on XHC for 8086_8xxx chipsets:

DefinitionBlock ("", "SSDT", 1, "hack", "UIAC", 0)
{
    Device(UIAC)
    {
        Name(_HID, "UIA00000")

        Name(RMCF, Package()
        {
            "8086_8xxx", Package()
            {
                "port-count", Buffer() { 0xa, 0, 0, 0 },
                "ports", Package()
                {
                    "SS01", Package()
                    {
                        "UsbConnector", 3,
                        "port", Buffer() { 0xa, 0, 0, 0 },
                    }
                }
            }
        })
    }
}

A complete example is provided in SSDT-UIAC.dsl. The file SSDT-UIAC-ALL.dsl contains all data from the Info.plist (net zero change when used as-is) — use it as a starting template. Delete ports you don't need, or adjust UsbConnector/portType to match your hardware.

To find your XHC device-id, check the vendor-id and device-id under the XHC node in IORegistryExplorer.

Downloads

Item Link
Kext releases Releases
Full repository (ZIP) Download

Feedback

For details and feedback, please visit: tonymacx86.com — Guide: 10.11 USB Changes & Solutions

About

Kext to inject all USB ports for the installed Intel EHCI/XHCI chipset automatically.

Resources

Stars

114 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages