Contribute
Register

[Release] Hackintool v3.x.x

I'm not trying to configure non-Intel ports. But maybe I would in the future - or maybe someone else with a similarly unexpected configuration. My questions are about the intent of the USB tab in Hackintool - why it should list some host ports but not others - there could be a bug depending on the answer.

I've noticed many inconsistencies in Location IDs recently and this leads to inappropriate Hub allocation, particularly of XHC @14000000. However this does not appear to be a bug in Hackintool, the same is visible in IORegistryExplorer.

Happy to be corrected.

:)
 
Last edited:
My questions are about the intent of the USB tab in Hackintool - why it should list some host ports but not others - there could be a bug depending on the answer.
It does sound like a bug. As you can see from this thread there are many different configurations and version issues to contend with. I try my best to figure it out by viewing .ioreg files but it's easy to miss things. Perhaps you could download the source from Github and take a look at it? The two main methods in question are refreshUSBPorts and getIORegUSBPortsPropertyDictionaryArray.
 
It does sound like a bug. As you can see from this thread there are many different configurations and version issues to contend with. I try my best to figure it out by viewing .ioreg files but it's easy to miss things. Perhaps you could download the source from Github and take a look at it? The two main methods in question are refreshUSBPorts and getIORegUSBPortsPropertyDictionaryArray.

1) Need to remove the following lines to show all ports:
Code:
        if (usbConnector == nil && portType == nil)
            continue;

2) Do something when usbConnector == nil && portType == nil:
Code:
            if (portType != nil)
                comboBox.stringValue = getUSBConnectorType((UsbConnector)[portType unsignedIntValue]);
            else if (usbConnector != nil)
                comboBox.stringValue = getUSBConnectorType((UsbConnector)[usbConnector unsignedIntValue]);
            else
                comboBox.stringValue = @"";

3) Need to modify
Code:
containsUSBPort
so that it can distinguish between controllers that have the same name. Maybe adding LocationID to the comparison would be sufficient but that's probably not the same between boots, so maybe EFI or ioreg path would be best (if there is a requirement for matching between different boot times).

4) Might be able to add some other Series strings (but not necessary since the series may be included in the Name string)
Code:
08    Medfield
08    Moorestown
09    Quark SoC X1000
0f    Atom Processor Z36xxx/Z37xxx
11    Merrifield
15    Thunderbolt
19    Atom Processor C3000
1e    7/C216
1f    Atom processor C2000
22    Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx
23    DH895XCC
24    82801AA
24    82801AB
24    82801BA/BAM
24    82801CA/CAM
24    82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M)
24    82801DB/DBM (ICH4/ICH4-M)
24    82801E
24    82801EB/ER (ICH5/ICH5R)
25    6300ESB
26    631xESB/632xESB/3100
26    82801FB/FBM/FR/FW/FRW (ICH6)
27    NM10/ICH7
28    82801H (ICH8)
29    82801I (ICH9)
2e    CE Media Processor USB    
34    Ice Lake-LP
3a    82801JD/DO (ICH10)
3a    82801JI (ICH10)
3b    5/3400
50    EP80579
5a    Celeron N3350/Pentium N4200/Atom E3900
70    82371SB PIIX3 [Natoma/Triton II]
71    82371AB/EB/MB PIIX4
71    82440MX
76    82372FB PIIX5
81    US15W/US15X/US15L/UL11L SCH [Poulsbo]
88    EG20T
8a    Ice Lake Thunderbolt

5) Need the Type column to be resizable.

6) Need LocationID (at least the first two digits) in the controllers list (if more than one controller has the same Type). LocationID is shorter than EFI or ioreg path.

Hackintool 3.1.7 modified.png
 
@joevt I've implemented most of your suggestions except I just need to finish off no. 3. I've added a column to the controllers called "ID" which is the first two digits of the locationID for the controller. Can you please try this version just to make sure everything else is working ok so far? I mainly need to know if Type+ID will be enough of a unique identifier.
 
@joevt I've implemented most of your suggestions except I just need to finish off no. 3. I've added a column to the controllers called "ID" which is the first two digits of the locationID for the controller. Can you please try this version just to make sure everything else is working ok so far? I mainly need to know if Type+ID will be enough of a unique identifier.
The Type column in the USB ports list doesn't match the Type column in the Controller list. This might cause Devices connected to those controllers to not be listed? (for example, in my last screenshot, there is a "Usb Mouse" and a "USB to PCIE Bridge" connected to the XHC controllers).

Hackintool 3.1.8 Test.png
I don't know much about Xcode UI editing - but is there a divider that could be placed between the two lists which can be used to grow the first list and shrink the second list?
 
... in my last screenshot, there is a "Usb Mouse" and a "USB to PCIE Bridge" connected to the XHC controllers...

I'm trying to follow along with this, as it's important and useful, but wasn't your mouse connected to an Alpine Ridge port controller?

Your PC seems to have a mix of Intel, Intel Alpine Ridge, Intel Titan Ridge and ASMedia controllers.

How do you think macOS would normally enumerate these ports?

I worry we are trying to make macOS do something it's not designed for, rather like using a port-limit removal patch.

Happy to learn :thumbup:
 
I'm trying to follow along with this, as it's important and useful, but wasn't your mouse connected to an Alpine Ridge port controller?

Your PC seems to have a mix of Intel, Intel Alpine Ridge, Intel Titan Ridge and ASMedia controllers.

How do you think macOS would normally enumerate these ports?

I worry we are trying to make macOS do something it's not designed for, rather like using a port-limit removal patch.
macOS is enumerating the ports fine. It's Hackintool we're working on. There may be an argument that Hackintool should not list all controllers, but if you go down that road, then you need a criteria for excluding controllers which probably won't work for everyone or possibly won't work in the future. It's much easier to just include all the controllers and let the user exclude them manually.

Hackintool's Export button for USB creates three files on the desktop:
SSDT-UIAC.aml (compiled from SSDT-UIAC.dsl)
USBPorts.kext

The aml works with USBInjectAll.kext to set port number and USBConnector properties of each port (I forget - does it also remove unlisted ports?)

The kext is similar (can be used if you don't use the aml method). But the kext has a merge thingy (with AppleUSBEHCIPCI for some reason)?

Anyway, the aml and kext shouldn't be used without first checking the contents. I don't think the results are usable in my case because these other controllers aren't named like the built in controllers (that might depend on what USBInjectAll.kext will accept).

Actually, the Info button in Hackintool's USB tab explains how the USB tab is to be used (USB port discovery and "USB Port Patching"). You check which USB ports are working and delete ones that don't work or that should not be modified by the aml or kext. The info button text also mentions a SSDT-EC.aml file and a SSDT-USBX.aml file but neither of those were created for me.
 
C. Install Kext to enable SATA HotPlug on Mojave again (thanks Sascha Lamprecht)
This has been working Great for me with 10.14.6!!!

1. Does this also work for 10.15.x - or cause any issues on 10.15.x so that it should be removed prior to upgrading from 10.14.6 to 10.15.x?

2. Does the SATA HotPlug kext also work from /EFI/Clover/Kexts/Other ?

3. What is the kext's name?
 
@joevt can you please check out this one. The Type names should now match and I've added a divider between the two lists so they can be resized properly. I also updated containsUSBPort to use the controller's locationID value.
 
Last edited:
Back
Top