XhciDxe.efi apparently requires CreateEventEx which is not available in EFI 1.x and will hang when called.
I believe the instances where it is working in OpenCore have the ForgeUefi config option, which spoofs UEFI 2.x (ported from RefindPlus which in turn ported it from your driver), active and that OC will also hang (on EFI 1.x cMP) if this option is not active when the driver is loaded.
If so, the Driver#### approach should therefore work if you provide your ForgeUefi driver to be loaded first.
BTW, the other two drivers of the trio may well be red herrings.
Weren't these drivers taken from a MacPro6,1? I thought the purpose of taking the drivers from a MacPro6,1 was because it was EFI 1.1 and compatible with MacPro5,1? Does MacPro6,1 have UEFI 2.0?
A dump from the RefindPlus debug log on a MacPro6,1 would be useful here. It will show the sizes of the Runtime Services and Boot Services tables which will tell us which functions they contain.
For example, my MacPro3,1 has this info in the RefindPlus debug log:
Code:
System Table:- 'EFI 1.10' (HeaderSize: 120)
Boot Services:- 'EFI 1.10' (HeaderSize: 368 ... Expected: 376)
Runtime Services:- 'EFI 1.10' (HeaderSize: 120 ... Expected: 136)
DXE Services:- 'Ver 0.90' (HeaderSize: 160 ... Expected: 168)
"HeaderSize" is the size of the table indicated in the header of the table. "Expected" is the size of the table defined in the edk2 headers that RefindPlus is compiled with. For 64bit EFI, Each missing 8 bytes is a pointer to a function that the MacPro3,1's EFI 1.1 does not have.
CreateEventEx is in Boot Services as the last function - the MacPro3,1 doesn't have that function.
EFI 1.1 is also missing two functions in Runtime Services (actually 3 - one of them is used in EFI 1.1 for a different purpose) and one function in DXE Services.
Thank you again for helping, just learning a lot of things while reading through your posts here 🙂
Here we go....
Still not sure why I cannot load the driver this way.
Ok, so
dh lists all the protocols for each handle. And of course
dh -d -v isn't going to show more info for all those protocols that it knows nothing about (handles 1C4 to 1CF etc.) but now we see more info for the LoadedImage protocols (1D0, 1D2, etc.) - the debug file path specifically, which shows the path of the LoadedImage's originating .dll file.
I suppose it would be cool for OpenShell to show some info for some OpenCore protocols.
And from the FixPCIeLinkRate.efi output, we can see that the path of the XHCI is like this:
Code:
+[0000]
++00:1C.4-[05-CB] # g2x4 [8086:1C18] [060400] PCI bridge (Normal decode) : Intel Corporation 6 Series/C200 Series Chipset Family PCI Express Root Port 5
|`+05:00.0-[06-CB] # g2x4 [8086:1513] [060400] PCI bridge (Normal decode) : Intel Corporation CV82524 Thunderbolt Controller [Light Ridge 4C 2010]
| ++06:04.0-[39-69] # g1x4 [8086:1513] [060400] PCI bridge (Normal decode) : Intel Corporation CV82524 Thunderbolt Controller [Light Ridge 4C 2010]
| |`+39:00.0-[3A-3E] # g1x4 [8086:156D] [060400] PCI bridge (Normal decode) : Intel Corporation DSL5520 Thunderbolt 2 Bridge [Falcon Ridge 4C 2013]
| | ++3A:00.0-[3B] # g2x1 [8086:156D] [060400] PCI bridge (Normal decode) : Intel Corporation DSL5520 Thunderbolt 2 Bridge [Falcon Ridge 4C 2013]
| | |`-3B:00.0 # g2x1 [1B73:1100] [0C0330] USB controller (XHCI) : Fresco Logic FL1100 USB 3.0 Host Controller
Which translates to this:
PciRoot(0x0)/Pci(0x1C,0x4)/Pci(0x0,0x0)/Pci(0x4,0x0)/Pci(0x0,0x0)/Pci(0x0,0x0)/Pci(0x0,0x0)
Which can be found in the
dh output. Another way to get that path is to find the bus number
Bus #.........: 3B in the
dh -d -v output.
I suppose it would be handy for the pci or FixPCIeLinkRate commands to output a handle number for each device. Then you can get info for that specific device
dh -d -v 11B