Contribute
Register

Intel Network adapters on OS X: Small Tree drivers

Greetings:



I am using a Asus X99-E-10G WS that has 2 Intel X550-AT2 10 Gigabit LAN



Installed in S/L/E (from https://bitbucket.org/RehabMan/os-x-fake-pci-id/downloads/, *2017-0527 version) FakePCIID.kext, FakePCIID_Intel_GbX.kext (edited Info.plist - IOPCIPrimaryMatch to include 0x15638086) and SmallTreeIntel8259x.kext attached to the beginning of this thread (edited Info.plist - IOPCIPrimaryMatch to include 0x15638086)



dpcimanager recognizes the two NIC as Vendor 8086, Device 1563, Sub Vendor 8086, Sub Dev 0000, when “clicked to find”, it points to FakePCIID in S/L/E



Attached is the .ioreg



About this Mac, System Report, Hardware, Ethernet Cards (no card installed), PCI (there was an error while gathering PCI device information)



sudo cat /var/log/system.log does not have any entry on FakePCI* or Small*



kextstat revealed one entry on FakePCIID

You need to be very careful when compile a kext. Hope you've used Xcode? Can destroy a kext and its permissions if you don't know what your doing. FYI Kexts go in L/E 10.11+.
 
You need to be very careful when compile a kext. Hope you've used Xcode? Can destroy a kext and its permissions if you don't know what your doing. FYI Kexts go in L/E 10.11+.

Hello:

I did not (re)compile the kext using xcode, I just edit the info.plist of the two kexts: FakePCIID_Intel_GbX.kext (edited Info.plist - IOPCIPrimaryMatch to include 0x15638086) and SmallTreeIntel8259x.kext attached to the beginning of this thread (edited Info.plist - IOPCIPrimaryMatch to include 0x15638086) using PlistEdit Pro.

Put all the kext into L/E (macOS 10.12 16A323) but the NIC is still not recognized.

dpcimanager recognizes two as 8086 1563 8086 0000 from Intel Corporation (Network controller, Ethernet controller) but blank Device Name
 
I used this a guide to mod my X540-T2 EEPROM in my MacPro5,1 (mid 2010)
shows up as:
Code:
Vendor ID: 0x8086
Device ID:    0x1528
Subsystem Vendor ID: 0x8086
Subsystem ID: 0x000a
SmallTree-kext is loaded, card shows up fine in "System Info" and "SysPrefs/Network", 10GBaseT FD link...also on the switch I get 10G PHY... but only seem to get top-gigabit speeds.
Checked cables
My "Macintosh SSD" does 700MB/s write, 1200MB/s read (so that's not the bottleneck)
Moved MP next to 10G-Switch, with short Cat6a... all the same.
Any ideas what could have gone wrong? Any advice/guidelines in further troubleshooting?

Don't have any other 10G NICs to test with in the MP (only have X710-DA2's, Mellanox ConnectX-2's and Tehuti3040)

EDIT: UPDATE: those speeds seem only low when using "smb://", when I use "cifs://" I get double the speed...
When I use "afp://" though, I get the full potential of my storage (through 4 switches :) write:733MB/s; read: 1039,5MB/s)

Hi guys,

thanks to Squuiid I got my x520-DA2 working by altering the subsys ID via Linux.
I get speeds of

write: ~270mb/s
read: ~300mb/s

to an SSD in the NAS.

Any ideas on how to better the performance?

Cheers,
shinokubo
Disable SMB signing in macOS to experience full 10GbE speeds when using SMB in High Sierra 10.12.1 and above.
(SMB prior to macOS 10.12.1 was still pretty slow over 10GbE despite using the fix below.)
https://support.apple.com/en-gb/HT205926
 
Last edited:
Hi,
I have sierra (hackintosh) and I could not find a way to load fakepciid & fake intel before smalltree
If I reload smalltree after a boot evr is working fine (they all loaded, network card is working, so im good, excetp its manual and after mac renamed all the network card since no valid driver is found during the boot)

after a boot

2017-12-08 17:34:52.899946+0200 0xd9 Default 0x0 0 kernel: (FakePCIID) FakePCIID: Version 1.3.10 starting on OS X Darwin 16.7.

2017-12-08 17:34:52.906836+0200 0xe5 Default 0x0 0 kernel: (FakePCIID) FakePCIID: Version 1.3.10 starting on OS X Darwin 16.7.

2017-12-08 17:34:52.875022+0200 0xd9 Default 0x0 0 kernel: (SmallTreeIntel8259x) SmallTreeIntel8259x probe b1d0f0: Unsupported Card 0x000c

2017-12-08 17:34:52.880573+0200 0xe5 Default 0x0 0 kernel: (SmallTreeIntel8259x) SmallTreeIntel8259x probe b1d0f1: Unsupported Card 0x000c




sudo kextunload /Library/Extensions/SmallTreeIntel8259x.kext
sudo kextload /System/Library/Extensions/SmallTreeIntel8259x.ket

sudo log show | grep -i smallt
2017-12-08 17:41:07.981256+0200 0x1ad4 Default 0x0 0 kernel: (SmallTreeIntel8259x) SmallTreeIntel8259x getNVM b1d0f1: Mac address: 33:44:55:66:22:a9

2017-12-08 17:41:07.986870+0200 0x1ad3 Default 0x0 0 kernel: (SmallTreeIntel8259x) SmallTreeIntel8259x getNVM b1d0f0: Mac address: 33:44:55:66:22:a8

2017-12-08 17:41:09.606659+0200 0x1ad4 Default 0x0 0 kernel: (SmallTreeIntel8259x) Initializing SmallTreeIntel8259x: Version 3.3.11 Built Nov 28 2016 11:56:32 Build: 2486:2507M

2017-12-08 17:41:09.611692+0200 0x1ad3 Default 0x0 0 kernel: (SmallTreeIntel8259x) Initializing SmallTreeIntel8259x: Version 3.3.11 Built Nov 28 2016 11:56:32 Build: 2486:2507M

2017-12-08 17:41:09.650872+0200 0x1ad3 Default 0x0 0 kernel: (SmallTreeIntel8259x) SmallTreeIntel8259x checkLinkStatus b1d0f0: Link is UP

2017-12-08 17:41:09.734038+0200 0x1ad4 Default 0x0 0 kernel: (SmallTreeIntel8259x) SmallTreeIntel8259x checkLinkStatus b1d0f1: Link is DOWN



So, as far as I understand - its a kext load order. is there a way to change it
Have tried:
do cache rebuild after I booted with -f and reload smalltree
put fakepci into /efi/clover/kext/others
dont wont to change card nvram (the second method)

Sierra, x520-sr (sfp+), lastes st, lasts fakepci

where is the best point for digging ?

P.S. have tried
boot with -f, reload smalltree (it started working), rebuild cache, fix permissions,
 
Hello,
Did any of you with a i350-T2 succeeded in using the SmallTree drivers?
I managed to set the correct subsystem ID using ethtool, but the drivers don't recognize the card with the error:
kernel[0]: SmallTreeIntel82576 b4d0f0: Invalid EEPROM 0x000a 0x1521 0xffff 0xffff
kernel[0]: SmallTreeIntel82576 b4d0f1: Invalid EEPROM 0x000a 0x1521 0xffff 0xffff

My guess is that those extra 0xffff could refer to the OEM specific words available in the i350 eeprom (words 0x06, 0x07).
Thanks

Edit:
The kext evaluates two word values for each network port (located in some "reserved" areas of the eeprom).
If anyone needs them, please PM me. I did some reverse engineering of the kext code and came up with a program that calculates these values.

Hey guys! I got tired of this driver refusing to work and I came up with a third (fourth?) solution to the problem anyone with an 82576 dual port chip is having.

I was expecting it to work, but then I got an error that some other two bytes are invalid... of course, without an offset. Must have been these ones.

I don't have time for a calculator, and I didn't feel like writing this guy a PM about a post from 4 months ago. I can see why he wouldn't want to share the exact algorithm - there are probably way more stupid inconsequential places they could hide a code in the ROM image, and they seem to not like other people's dirty Ethernet cards tainting their scared drive written under divine right. That game of cat and mouse would end badly for us.

So, instead, I just got down and dirty with objdump and figured out how patch the executable.
Replace 0x664139c1488b75b87526 with 0x664139c1488b75b86690 in
/Library/Extensions/SmallTreeIntel82576.kext/Contents/MacOS/SmallTreeIntel82576
This only gets you past the EEPROM check. You could probably do the same for the PCI Subsystem ID check but why bother when FakePCIID and ethtool are already there and are so easy to use?

As to actually doing the patch, I tried Clover and it didn't... do... anything. Probably because it doesn't get probed by the bootloader, but the kernel, and it's obviously patching code in memory because it's done at every boot. Plus, if that DID work and it ever got unloaded, your only option would to be reboot. (Reboots take forever on my system because it has IPMI.) So I realized that xxd and sed are available even on the stock system without developer tools or anything installed.

So open the Terminal and try running:

xxd /Library/Extensions/SmallTreeIntel82576.kext/Contents/MacOS/SmallTreeIntel82576 /tmp/SmallTreeIntel82576.xxd
sed -i -e 's/66 4139 c148 8b75 26/66 4139 c148 8b66 90/' /tmp/SmallTreeIntel82576.xxd
xxd -r /tmp/SmallTreeIntel82576.xxd /tmp/SmallTreeIntel82576
sudo chown root:wheel /tmp/SmallTreeIntel82576
sudo chmod 755 /tmp/SmallTreeIntel82576
sudo mv /tmp/SmallTreeIntel82576 /Contents/MacOS/Library/Extensions/SmallTreeIntel82576.kext

Then try loading the kext again:
sudo kextload /Library/Extensions/SmallTreeIntel82576.kext
Remember that you still have to fake the Subsystem ID with either an EEPROM edit with ethtool under Linux or using FakePCIID.
 
Last edited:
Hey guys! I got tired of this driver refusing to work and I came up with a third (fourth?) solution to the problem anyone with an 82576 dual port chip is having.

I was expecting it to work, but then I got an error that some other two bytes are invalid... of course, without an offset. Must have been these ones.

I don't have time for a calculator, and I didn't feel like writing this guy a PM about a post from 4 months ago. I can see why he wouldn't want to share the exact algorithm - there are probably way more stupid inconsequential places they could hide a code in the ROM image, and they seem to not like other people's dirty Ethernet cards tainting their scared drive written under divine right. That game of cat and mouse would end badly for us.

So, instead, I just got down and dirty with objdump and figured out how patch the executable.
Replace 0x664139c1488b75b87526 with 0x664139c1488b75b86690 in
/Library/Extensions/SmallTreeIntel82576.kext/Contents/MacOS/SmallTreeIntel82576
This only gets you past the EEPROM check. You could probably do the same for the PCI Subsystem ID check but why bother when FakePCIID and ethtool are already there and are so easy to use?

As to actually doing the patch, I tried Clover and it didn't... do... anything. Probably because it doesn't get probed by the bootloader, but the kernel, and it's obviously patching code in memory because it's done at every boot. Plus, if that DID work and it ever got unloaded, your only option would to be reboot. (Reboots take forever on my system because it has IPMI.) So I realized that xxd and sed are available even on the stock system without developer tools or anything installed.

So open the Terminal and try running:

xxd /Library/Extensions/SmallTreeIntel82576.kext/Contents/MacOS/SmallTreeIntel82576 /tmp/SmallTreeIntel82576.xxd
sed -i -e 's/66 4139 c148 8b75 26/66 4139 c148 8b66 90/' /tmp/SmallTreeIntel82576.xxd
xxd -r /tmp/SmallTreeIntel82576.xxd /tmp/SmallTreeIntel82576
sudo chown root:wheel /tmp/SmallTreeIntel82576
sudo chmod 755 /tmp/SmallTreeIntel82576
sudo mv /tmp/SmallTreeIntel82576 /Contents/MacOS/Library/Extensions/SmallTreeIntel82576.kext

Then try loading the kext again:
sudo kextload /Library/Extensions/SmallTreeIntel82576.kext
Remember that you still have to fake the Subsystem ID with either an EEPROM edit with ethtool under Linux or using FakePCIID.
Hi, Could you share your smalltree kext? for some reason your solution doesn't work for me. (Intel I350)
 
someone can help me with this issue?
the FakePCIID_Intel_GbX.kext can not load...
 

Attachments

  • 屏幕快照 2018-04-01 17.52.00.png
    屏幕快照 2018-04-01 17.52.00.png
    121.2 KB · Views: 273
someone can help me with this issue?
the FakePCIID_Intel_GbX.kext can not load...

The ioreg image you show proves FakePCIID kexts are loading as expected.
 
The ioreg image you show proves FakePCIID kexts are loading as expected.
Thank you, RehabMan.
I read the disscusion before carefully, I install the smallstree before FakePCIID.
Now, it works perfectly.
Thanks angin.
 

Attachments

  • 屏幕快照 2018-04-01 20.54.15.png
    屏幕快照 2018-04-01 20.54.15.png
    239.4 KB · Views: 410
  • 屏幕快照 2018-04-01 20.54.47.png
    屏幕快照 2018-04-01 20.54.47.png
    694.3 KB · Views: 379
Greetings:



I am using a Asus X99-E-10G WS that has 2 Intel X550-AT2 10 Gigabit LAN



Installed in S/L/E (from https://bitbucket.org/RehabMan/os-x-fake-pci-id/downloads/, *2017-0527 version) FakePCIID.kext, FakePCIID_Intel_GbX.kext (edited Info.plist - IOPCIPrimaryMatch to include 0x15638086) and SmallTreeIntel8259x.kext attached to the beginning of this thread (edited Info.plist - IOPCIPrimaryMatch to include 0x15638086)



dpcimanager recognizes the two NIC as Vendor 8086, Device 1563, Sub Vendor 8086, Sub Dev 0000, when “clicked to find”, it points to FakePCIID in S/L/E



Attached is the .ioreg



About this Mac, System Report, Hardware, Ethernet Cards (no card installed), PCI (there was an error while gathering PCI device information)



sudo cat /var/log/system.log does not have any entry on FakePCI* or Small*



kextstat revealed one entry on FakePCIID

Me too,Is the problem solved?
 
Back
Top