Wheeljack Posted October 19, 2015 Share Posted October 19, 2015 Good evening everyone! I originally started this as a guide to getting USB working correctly on El Capitan, but ran across various issues. This then ended up being a request for help as I seemed to be struggling. Turns out, my system was actually fine, and I hadn't needed to do a lot of the changes I had to have it working properly. I believe that a lot of the fixes I had attempted were probably for different chipsets, and had caused myself problems trying to use them. The problems being complete loss of USB2 ports most of the time. I think I have narrowed it down to 2 DSDT patches/changes that I had done (not at the same time, but over my testing period) that caused the issue. I believe this because as soon as I reverted all changes, USB2 started working again. The first concerned an XOSI patch done on the fly through Clover and that works with an SSDT-XOSI.aml file in the Clover ACPI directory. The second was a change to the DSDT to include "If (LOr (_OSI ("Darwin"), _OSI ("Windows 2013")))". I f either of these is present I run into issues. Now when I had applied those, I had taken out the one that is built into PJALMs all in one DSDT patch for my motherboard which simply adds an _OSI entry for Darwin. Those two patches removed, and the original Darwin entry back in, and I had USB2 back. As I had also reverted all other changes I had made (the _UPC changes, and the injector kext), and Clover config, this meant my system was now actually running with minimal changes. So I am updating this post to reflect that, but I will leave in the parts for port mapping as it may help others who need that to help them create an injector kext. (EDIT: I may be wrong on this as well. I had disabled USB injection and ownership, then later had just re-enabled USB injection. If I don't have USB Ownership on as well on my system, USB2 doesn't work. Check these on your own system if USB2 plays up). So, my system. As you can see from my signature I have a P8Z77-V Pro from Asus. I have 2 sticks of Corsair Vengeance ram, 3 SSDs each of which have a standalone OS on them (Mac OS, Windows 10, Korora Linux), and the processor is an i7-3770K. This is a series 7 Intel motherboard, Ivybridge. It has an additional ASMedia SATA and USB3 controller. The Asmedia USB3 controller I have disabled as not supported on MacOS El Capitan yet and I don’t use it. Last but not least the Geforce 760 graphics card. I’ve ran MacOS on this since Mountain Lion, using Clover as a boot loader. I use Clover to boot the other operating systems also. I have a few DSDT edits and a couple of kexts that are needed to get things running smoothly (more on that in a minute). I have a wireless mini pci card that does wireless ac and has bluetooth - the bluetooth uses an internal usb header, for data and power. I always buy hardware that I know will work in all of the operating systems I have. My previous wifi card was great - instantly available on all three operating systems with no drivers necessary. Loved it - just wasn’t fast enough. I then obtained an iPhone and wanted to try handoff etc. so had to change the card. This one is fine, works natively in MacOS but needs drivers for windows and firmware for linux to work. Other than that works well. Now when El Capitan was released, I decided that I would nuke the MacOS drive and it give it a complete clean install. So I created an installer USB stick with Clover as its boot loader and the minimal items needed for the installer to boot. Once I was happy that was booting fine, I nuked my drive and installed El Capitan, using the USB boot loader to launch for the first time and get things setup. I won't go into how that is done, as plenty of other guides available that show how to create a USB installer for OS X. Some general information below regarding how I have Clover configured, the DSDT patches done, and the installation options for Clover I used when installing to my main drive: CLOVER CONFIGURATION I use Clover Configurator now rather than editing by hand. Rough settings outlined below: CLOVER CONFIG: ============== ACPI Nothing in here other than the name of the DSDT file. BOOT Nothing except Default Boot Volume. CPU Nothing. DEVICES USB inject enabled. DISABLE DRIVERS Nothing. GUI Nothing of interest other than the themes selection for the boot loader. GRAPHICS Nothing. KERNEL & KEXT PATCHES I have to use the ALC892 Patch by Toleda, the Clover version, so that script has put in a couple of entries for audio to work. I have my own patch for IOAHCIBlockStorage (TRIM enabler) and AppleAHCIPort (External icons patch). RTVARIABLES BooterConfig and CsrActiveConfig variables for El Capitan boot. SMBIOS Board Serial, Serial Number and SMUUID. My own generated details, and I did have to ring Apple once to get iMessage working. They didn’t balk and iMessage got fixed. SYSTEM PARAMS Inject Kexts - Yes. Can also use Detect. Also Inject System ID. CLOVER EFI FOLDERS: =================== UEFI DRIVERS Removed the VBOX_HFS driver replacing with HFS_X64.EFI, EXT4_X64.EFI, ISO9660_X64.EFI. Other than that, default Clover stuff. KEXTS Third Party E-Sata, IntelE1000, FakeSMC & RealtecALC (Toledo’s patch puts this here). ACPI/PATCHED My custom DSDT file. DSDT SETUP I used Linux to extract a fresh, clean DSDT. Then used MacIASL and PJALMS patch repository to apply the all in one patch for my motherboard. However, I changed it before applying as a couple of patches aren’t applicable apparently. Once that patch was done, I then did the discrete graphics patch for Nvidia-AMD. Then renamed the following devices - XHC1 to XH01, EHC1 to EH01, and finally EHC2 to EH02. Patches applied: ================ Add DTGP External/Error fixes Intel 7 Series fixes _OSI Choice patch. Various method fixes (_DOD, OL1X, RRIO, UXDV, AMW0) Add missing MCHC device Fix LPC device Fix SMBus Fix HDEF (I used audio layout 2 rather than one) Fix built in status for ethernet Change ID of SATA Device for Intel 7 Series Fix Asmedia AHCI Patches dropped: ================ Atheros fix Patch Intel USB3 power USBMux patch. Asmedia USB3 Patch CLOVER SETUP Once Clover was installed, DSDT patching done, and the RealtecALC Toleda patch applied I rebooted and the system now was standing on it's own two feet. Nothing further needed doing on my system, as all appears now to be working fine. PORT MAPPING This bit is for those that need it. So if you have an intel Series 8/9 board, or some other system that is going to require a kext injector, it should help you get there. For anyone with a similar system to me, it isn't needed. You will need to boot into Windows to start mapping ports, but first you should get the device node names for your USB connections. You should already have renamed your DSDT devices to EH01, EH02 and XH01 respectively. Then open your DSDT in MacIASL and search for those devices and look closely at each one. Check out the screenshots below for how mine look. EH01 - Under HUBN, I have PR01. Under that are the nodes we are looking for - PR11 to PR18. EH02 - Under HUBN, I have PR01 again. This time only PR11 to PR16. XH01 - Under RHUB, I have HSP1-4, and SSP1-4. Yours may appear slightly differently, depending on how many ports you have. So written down I had: EHC1 HUBN PR01 PR11 PR12 PR13 PR14 PR15 PR16 PR17 PR18 EHC2 HUBN PR01 PR11 PR12 PR13 PR14 PR15 PR16 XHC1 RHUB HSP1 HSP2 HSP3 HSP4 SSP1 SSP2 SSP3 SSP4 Under the HX01 device, for mine, you can see I have 8 nodes. However I only have 4 Intel USB3 ports, 2 on the front of my case attached to a motherboard USB3 header and 2 on the back faceplate (disregarding the Asmedia ports). This is because one USB3 port has 2 nodes - one for USB2 devices and the other for USB3. HSP means Hi-SPeed, SSP means SuperSPeed. This obviously means 4 ports turn into 8. For me. this is below the 15 limit that El Capitan has and why I have no issues with USB3 on my machine. Once you have your node names noted down, you have some further research to do. You stilI need to know exactly what ports you have in your system and where they are located - so it's advisable that you download your motherboard manual. This tells you the port count and locations. My motherboard manual states I have 10 USB2 ports (8 on usb headers on the motherboard, so 4 headers each having 2 ports and 2 rear connections on the backplate) and 4 USB3 ports (1 header on motherboard and 2 rear connections again on the backplate). Looking at the list I made for my machine, I seem to have 4 extraneous USB 2 ports. So another reason to map is to see which ports actually get used and which don't. USB3 count is correct on my system, other than it also shows the extra USB2 ports that link with each USB3. (Remember one USB3 port is also a USB2 port - two in one). Below is my motherboard diagram showing the USB2 and USB3 port headers, and a backplate showing the connections. The 2 USB3 ports below the PS2 connector on my system are for the Asmedia therefore not used as I have disabled the device. Now you need to boot into Windows. I would advise to remove all extraneous USB devices keeping only things like USB keyboard and mouse plugged in. Have a USB2 thumb drive or external drive to hand as well as a USB3 drive or device so we can test the USB3 ports properly. On mine I had my USB keyboard and mouse in the 2 USB2 ports at the back (keyboard in right port if you were looking at the back face on, mouse on the left). I also put a USB3 thumb drive in the left USB3 port on the front, and internally I have the front USB2 and USB3 connected to their respective headers, along with the bluetooth controller card also attached to a header. (The motherboard diagram above shows what headers I have connected). Why take everything else out you ask? Because some USB devices create another hub, and more nodes to look through and its best for clarity. You should have an idea now of what you have USB device wise plugged in right now so that they will be easy to spot. On most systems there will be two EHCI controllers and you will need to find out which is which (so it corresponds with EH01 and EH02). Use Windows device manager to look at your USB2 controllers and get information so you can see which one is EH01 and which is EH02 etc. Make sure that in Device manager, in the View menu, you have 'View devices by connection'. Then filter down the ACPI tree until you find the USB controllers, then right click on each in turn and click 'Properties'. Then on the Details tab for the device, pick 'BIOS Device name'. Screenshots of the View menu choice, a shot of the device manager tree with BIOS names added, and the details for the EHC1 controller on my system: You now the names for the controllers, so you can start to match the device nodes to each as you plug devices in and map to relevant ports. The next screens show the properties for the keyboard, mouse and bluetooth controller that I have: From this, on my system, you can see that the 2 USB2 ports on the back (from left to right) are connected to PR15 and PR16 on the EH02 controller. The bluetooth controller, attached to the USB910 header, is on PR17 on the EH01 controller. The bluetooth controller connector is only using half the header (one port) so its safe to guess that PR18 would be the other port off that header (again on EH01 controller). Next up for me on my system is the USB3 thumb drive in the left USB3 port on the case (these 2 USB3 ports attach to the USB3_34 header on the motherboard). Once the port for that was mapped I removed it, and plugged the USB2 keyboard into the same port to see what port that would connect to. Shots below: As you can see, for me the left hand USB3 port uses SSP1 when a USB3 device is used in it, otherwise it uses HSP1. Like I did, you now need to plug devices in and out of your different ports so that t he remaining ones can be mapped for your system. If like me you have internal headers and one of those is attached to usb ports on your case, move that connection to different headers so you can map out what ports those headers connect to. Although Windows Device Manager is great in the sense it shows you the BIOS name, there is another tool you can use for this. Its called USBViewer. The great thing about this tool is you can see all your ports listed at once, whereas device manager only shows ports with something plugged in. You can use this to tally it up with what you find in your DSDT. The following shots are of USB Viewer in action - first one with the EHC1 device selected and giving you an idea of the interface. The other 2 showing the details for my keyboard and mouse: The next three are USB Viewer again showing details for my bluetooth controller, USB3 thumb drive and keyboard when plugged into the USB3 port. And some diagrams to show the mappings found: Now you can boot back to OS X, as you should have a complete mapping. Now it's time to delve back into your DSDT and have a more closer look at the different nodes there on each controller. Every single one has two items which you need to note down: the _ADR, and the _UPC. THE ACPI specification states that the _ADR is an address object, and the _UPC (USB Port Capabilities) is for allowing the OS to see certain operational characteristics about each port. _UPC has four values, the last two are reserved and can be ignored (should always be zero). The first one, if the value is anything but 0, means it's connectable. A value of zero means its not connectable. The second value, describes the connection type. 0x00 means a standard USB Type A connector, 0x03 means a USB3 type connector and 0xFF means proprietary (usually used for the hub devices). There are more connection types listed in the ACPI specification. Below are the values for EHC1->PR11: So we can see that on my system, PR11 is a connectable device, but is marked as a proprietary connection. (0xFF,0xFF,Zero,Zero). The _ADR value is there also. As you will need this information for each node, it may be worth creating a table so you can see what you have at a glance and use later on without jumping in and out of the DSDT. With this information to hand, you can now create an injector kext relevant to your system. A table showing the values for my system: Now you can go ahead and create your injector kext. As I mentioned previously, I did not need to do one for my system, but I have attached one that I made as an example as it would apply to my system. If you use it as a base for your system, remember to change the relevant information (the SMBIOS used, port-count, USBConnector and port) as necessary for your system. Please check on the reference links for other changes you may need to make, and remember this is just a guide to help you get the information needed. Hope it was somewhat helpful! Reference links: Installation of El Capitan with Chameleon or Clover: http://osxarena.com/2015/06/install-10-11-mac-osx-on-hackintosh-pc-vanilla-installation-method-clover-chameleon-bootloader/ USB Fix El Capitan 10.11 http://www.insanelymac.com/forum/topic/306777-guide-usb-fix-el-capitan-1011/ Series 8/9 Full Speed USB http://www.insanelymac.com/forum/topic/308325-guide-1011-full-speed-usb-series-89-keeping-vanilla-sle/ Rehabmans Guide - USB Changes/Solutions http://www.tonymacx86.com/el-capitan-laptop-support/173616-guide-10-11-usb-changes-solutions.html PJALMS DSDT Patch Repository http://www.pjalm.com/forums/ Toleda CloverALC https://github.com/toleda/audio_CloverALC ACPI Specification 5.1 http://www.uefi.org/sites/default/files/resources/ACPI_5_1release.pdf Useful software: IOJones http://sourceforge.net/projects/iojones/ Clover Bootloader http://sourceforge.net/projects/cloverefiboot/ Clover Configurator http://mackie100projects.altervista.org/download/ MacIASL http://sourceforge.net/projects/maciasl/ USBView (Windows) http://www.softpedia.com/get/System/System-Info/USBView.shtml USB_Injector.kext.zip 3 Link to comment Share on other sites More sharing options...
iTTT Posted August 15, 2016 Share Posted August 15, 2016 wow, this topic is very useful i am use the same motherboard as you and bios v2104. can you share you kext files and dsdt? also how to input your USB_Injector.kext.zip into DSDT? is it possible? thanks. Link to comment Share on other sites More sharing options...
Recommended Posts