Contribute
Register

[GUIDE] Replace non-working Intel I225 with 82574L PCIe NIC (Monterey + OpenCore)

jaymonkey

Moderator
Joined
Aug 27, 2011
Messages
3,984
Motherboard
GB Z490 Vision G
CPU
i9 10850K OC @ 5.2 GHz
Graphics
Vega 64 LC + HD 630
Mac
  1. MacBook Air
  2. MacBook Pro
  3. Mac Pro
Mobile Phone
  1. iOS
Note: As of April 2022 there is now a community fix for the non-working Intel I225 V Ethernet controller on Gigabyte motherboards when running macOS Monterey. The fix is very easy to apply and simply involves flashing the I225 V ethernet controller with updated/modified firmware using the Intel firmware flashing utility. I've applied the fix myself to my Gigabyte Z490 Vision G system and can confirm that it works.

More details on the fix along with a link to the necessary files can be found here :-




Background

With the release of MacOS Monterey, many of us with motherboards that have an on-board Intel I225 NIC have found that it is no longer functional, despite the fact it was working well in MacOS BigSur.

There have been many attempts to resolve the issue using different approaches but so far there is no clear answer. It is speculated that the problem could be something to do with the hardware revision and/or firmware version of the I225 chip, however this is still un-proven and the recommended solution in 95% of cases is to disable the on-board I225 NIC and replace it with an alternative.

Many users have had success using a cheap USB->Ethernet adapter, however almost all USB->Ethernet adapters use software running on the CPU to process the LAN packets rather than processing them on the bare metal NIC. As a result these adapters only provide basic connectivity and are not capable of running in promiscuous mode and most lack support for more advanced features such as Wake on LAN.

There are number of PCIe NiC's that can be made to work on MacOS Monterey using 3rd party kexts that have been developed by the Hackintosh community such as Intel cards supported by the IntelMausi kext which is now maintained by Acidanthera and RealTek based cards using the kext's maintained by Mieze.

Another approach is to inject older kext's to support Ethernet NIC's that Apple long dropped support for, however this approach is not something I would personally recommend as SIP needs to be disabled and Apple could depreciate the old API's that these kexts rely on at any time

I was not really interested in any of the above approaches and wanted to see if it was possible to use a current and natively supported PCIe NIC in Monterey, one that uses Apple supplied and maintained kexts rather than one relying on a 3rd party or depreciated kext.

It should be noted that Apple have removed official support for many 3rd party NIC's in MacOS Monterey that where once supported in BigSur and earlier versions of MacOS so the options are now somewhat limited and official documentation on what PCIe NIC's are supported is hard to find.

So the first thing I did was to take a peek in IONetworkingFamily.kext/Contents/Plugins which is located in the /System/Library/Extensions folder, here we can see the following natively supported kext drivers for Ethernet NIC's.

Monterey Native NIC's.png
From the above list I was able to research the capabilities of each supported NIC's, my home network is 1 Gigabit Ethernet so I decided to go with an Intel 82574L based solution as these cards are cheep and wildly available and only require a PCIe x1 expansion slot. After a quick search on my preferred hardware suppliers web store I found the following PCIe card :-

Intel Gigabit Pro 1000CT PCI Express Gigabit Network Card OEM
Intel 82574L OEM.jpg
1 Port Intel Gigabit PRO EXPI9301CTBLK 1000CT Gigabit PCI-e Network Adapter - OEM

As MacOS Monterey has a kext driver specifically for the Intel 82574L NIC I was somewhat hopefully that VID & PID would match the ones defined in Apples kext and it would esentially be plug and play, however this proved not to be the case.

After some experimentation I found the solution was to modify the device properties of the NIC, make a small patch for the kext and then force MacOS to load the kext during boot-up.

Rather than just give you the code to cut and paste i'll try to explain what each part of the fix does and why it is needed, that said if your not familiar with OpenCore I highly recommend reading the official documentation and referencing the sample config.plist, both can be found in the Docs folder that is included with each release of OpenCore.

The following method should work for any motherboard and will most likely work for any of the Ethernet kext drivers in IONetworkingFamily.kext/Contents/Plugins with modification to the file paths, identifiers and PID's/VID's.

For reference I'm booting MacOS Monterey 12.3.1 via OpenCore 0.8.0 on a Gigabyte Z490 Vision G.

Prerequisites

First, backup your existing EFI folder, so that you have working EFI that you can fall back to if things go wrong.

Next you should remove any existing kexts, device properties and boot args from your OpenCore EFI and config.plist that you may have been using for the Intel I225, once you have made and saved the changes, shutdown the system and install the new PCIe card in a empty PCIe slot. As the Intel 82574L PCIe card only has a PCIe x1 interface I recommend installing it in one of the PCIe x1 slots that is routed through the PCH, since the built in Intel I225 NIC was also routed through the PCH it should not put any extra load on the PCH data bus.

Note that installing a Ethernet PCIe card in one of the expansion slots that is directly connected the CPU will reduce the number of PCIe lanes available for a dGPU (if you have one installed).

Once you have installed the new PCIe Ethernet card, boot up the PC and enter the BIOS to disable the on-board Intel I225 Ethernet NIC.

I225-disable-BIOS.jpg


Save the changes, and boot into MacOS Monterey normally.

Step-1 - Identify the Intel 82574L NIC's Device Path.

Run HackinTool and click on the PCI icon and find the new Intel 82574L NIC in the device list, right click on the entry for the Intel 82574L NIC and select "Copy Device Path"

Intel 82574L Before.png

In my case the Device Path for the Intel 82574L NIC is PciRoot(0x0)/Pci(0x1B,0x2)/Pci(0x0,0x0) but this will be different depending on the make/type of motherboard you have and PCIe slot you put the card in.

Step-2 - Create Custom Device Properties for the Intel 82574L NIC

Mount your EFI partition and open your OpenCore config.plist in the editor of your choice, I always work with the raw code using BBEdit, but you can use whatever code or plist editor you want.

Using the Device Path you copied from Hackintool, create a new <key> in the DeviceProperties->Add section of your config.plist.

Code:
    <key>DeviceProperties</key>
    <dict>
        <key>Add</key>
        <dict>
            <key>PciRoot(0x0)/Pci(0x1B,0x2)/Pci(0x0,0x0)</key>

Now copy and paste the following device properties after the <key> you just created.

Code:
            <dict>
                <key>AAPL,slot-name</key>
                <string>PCIEX4</string>
                <key>built-in</key>
                <data>AA==</data>
                <key>device-id</key>
                <data>9hAAAA==</data>
                <key>device_type</key>
                <string>Ethernet Controller</string>
                <key>subsystem-id</key>
                <data>AAAAAA==</data>
                <key>subsystem-vendor-id</key>
                <data>AAAAAA==</data>
                <key>vendor-id</key>
                <data>hoAAAA==</data>
            </dict>

Change the string value for AAPL,slot-name to match the slot you have installed the Intel 82574L NIC in, in most cases you will likely have other existing entires but for this example I will keep it simple so the Device Properties section it should now look something like this :-

Code:
    <key>DeviceProperties</key>
    <dict>
        <key>Add</key>
        <dict>
            <key>PciRoot(0x0)/Pci(0x1B,0x2)/Pci(0x0,0x0)</key>
            <dict>
                <key>AAPL,slot-name</key>
                <string>PCIEX4</string>
                <key>built-in</key>
                <data>AQ==</data>
                <key>device-id</key>
                <data>9hAAAA==</data>
                <key>device_type</key>
                <string>Ethernet Controller</string>
                <key>subsystem-id</key>
                <data>AAAAAA==</data>
                <key>subsystem-vendor-id</key>
                <data>AAAAAA==</data>
                <key>vendor-id</key>
                <data>hoAAAA==</data>
            </dict>
        </dict>
        <key>Delete</key>
        <dict/>
    </dict>

Explanation of the Device Properties

Code:
                <key>built-in</key>
                <data>AQ==</data>

Sets the "built-in" flag to 0x01 so that MacOS thinks it's a built-in device.

Code:
                <key>device-id</key>
                <data>9hAAAA==</data>

This changes the Intel 82574L device-id (Primary PID) to 0x10F60000 which is required for the primary PID match in Apples native 82574L kext driver, if you open the info.plist for the Intel82574L.kext you can see where we get this value from :-

Primary PCI Match.png

Code:
                <key>device_type</key>
                <string>Ethernet Controller</string>

This is pretty self explanatory.

Code:
                <key>subsystem-id</key>
                <data>AAAAAA==</data>
                <key>subsystem-vendor-id</key>
                <data>AAAAAA==</data>
                <key>vendor-id</key>
                <data>hoAAAA==</data>

Sets the sub-system PID & VID to 0x00000000 and vendor-id (Primary VID) to 0x80860000 (Intel).

Step-3 - Patch the Intel82574L kext to ignore the Secondary PID & VID Match

Despite injecting the correct PID and VID values for both the primary and secondary PCI matches the native Apple kext still refused to bind it's self to the newly installed NIC. In order to fix this add the following to the Kernel->Patch section of your config.plist

Code:
            <dict>
                <key>Arch</key>
                <string>Any</string>
                <key>Base</key>
                <string></string>
                <key>Comment</key>
                <string>Intel 82574L Ethernet</string>
                <key>Count</key>
                <integer>0</integer>
                <key>Enabled</key>
                <true/>
                <key>Find</key>
                <data>SU9QQ0lTZWNvbmRhcnlNYXRjaA==</data>
                <key>Identifier</key>
                <string>com.apple.driver.Intel82574LEthernet</string>
                <key>Limit</key>
                <integer>0</integer>
                <key>Mask</key>
                <data></data>
                <key>MaxKernel</key>
                <string></string>
                <key>MinKernel</key>
                <string></string>
                <key>Replace</key>
                <data>RFVNTVlTZWNvbmRhcnlNYXRjaA==</data>
                <key>ReplaceMask</key>
                <data></data>
                <key>Skip</key>
                <integer>0</integer>
            </dict>
        </array>

This patch changes the <key> name IOPCISecondaryMatch in info.plist of the Intel82574L.kext to DUMMYSecondaryMatch thus effectually disabling secondary PID and VID matching.

Step-4 - Force MacOS to load the Intel82574L kext.

Create the following entry in the Kernel/Force section of your config.plist

Code:
        <key>Force</key>
        <array>
            <dict>
                <key>Arch</key>
                <string>x86_64</string>
                <key>BundlePath</key>
                <string>System\Library\Extensions\IONetworkingFamily.kext\Contents\PlugIns\Intel82574L.kext</string>
                <key>Comment</key>
                <string>For Intel 82574L NIC</string>
                <key>Enabled</key>
                <true/>
                <key>ExecutablePath</key>
                <string>Contents/MacOS/Intel82574L</string>
                <key>Identifier</key>
                <string>com.apple.driver.Intel82574LEthernet</string>
                <key>MaxKernel</key>
                <string></string>
                <key>MinKernel</key>
                <string></string>
                <key>PlistPath</key>
                <string>Contents/Info.plist</string>
            </dict>
        </array>

This entry forces MacOS to load the Intel82574L kext regardless of the Mac model / SMBIOS you are using.

Step-5 - Final checks and Testing

After you have made the above changes and saved the updated config.plist, i recommend using OCValidate to check that there are no syntax or formatting errors, if the file passes validation then you can reboot and load MacOS again.

Run Hackintool again and check the entry for the Intel 82574L NIC, if everything has worked you should see that the devices Primary PID is now 0x10F6 and if you click on the magnifying glass icon for that entry you should see that the device is now attached to the Intel82574L.kext.

At this point you should find that the 82574L NIC is working.

Working-82574L.png

I've been running my system with the Intel 82574L NIC for about two weeks now and it's been 100% stable with no issues with sleep and wake, since we are using a native Apple kext driver it's highly likely that "Wake on LAN" should also work although this is something that I haven't tested myself.

Cheers
Jay
 
Last edited:

Edhawk

Moderator
Joined
Aug 2, 2013
Messages
3,737
Motherboard
MSI Z370-A Pro
CPU
i5-8500
Graphics
Sapphire Pulse RX 580
Mac
  1. iMac
  2. MacBook Air
  3. MacBook Pro
Mobile Phone
  1. iOS
This patch changes the <key> name IOPCISecondaryMatch to DUMMYSecondaryMatch in the info.plist of the Intel82574L kext thus effectually disabling secondary PID and VID matching

Can you explain why you need to do this?
 
Joined
Apr 2, 2013
Messages
43
Motherboard
Gigabyte Z490 Aorus Pro AX
CPU
i9-10850K
Graphics
rog strix rx 5700 xt
Mac
  1. MacBook Pro
Hello

I got almost the same NIC, but on a z490 aorus pro ax, and the i225-V work, with 2 things.
Under device property section:


<key>PciRoot(0x0)/Pci(0x1C,0x4)/Pci(0x0,0x0)</key>
<dict>
<key>AAPL,slot-name</key>
<string>Internal@0,28,4/0,0</string>
<key>device-id</key>
<data>8hUAAA==</data>
<key>device_type</key>
<string>Ethernet Controller</string>
<key>model</key>
<string>Intel(R) Ethernet Controller I225-LM</string>
<key>built-in</key>
<data>AQ==</data>
</dict>


And I add a boot-args, under NVRAM :

dk.e1000=0


If it do not work for you, maybe you have to update the NIC firmeware.
 

Attachments

  • Capture d’écran 2022-02-23 à 12.56.00.png
    Capture d’écran 2022-02-23 à 12.56.00.png
    26.2 KB · Views: 72

jaymonkey

Moderator
Joined
Aug 27, 2011
Messages
3,984
Motherboard
GB Z490 Vision G
CPU
i9 10850K OC @ 5.2 GHz
Graphics
Vega 64 LC + HD 630
Mac
  1. MacBook Air
  2. MacBook Pro
  3. Mac Pro
Mobile Phone
  1. iOS
Can you explain why you need to do this?

@Edhawk,

As explained in the guide, initially I thought I could just inject the correct primary and secondary PID/VID device properties so that they would match the ones in Apples kext, however despite the new properties taking (as confirmed in Hackintool's PCI list) the device would still not bind to the kext. :crazy: :crazy: :crazy:

After some experimentation I found that if i disabled the secondary sub-system match requirements in the kext's info.plist it worked. :)

Cheers
Jay
 
Last edited:

Edhawk

Moderator
Joined
Aug 2, 2013
Messages
3,737
Motherboard
MSI Z370-A Pro
CPU
i5-8500
Graphics
Sapphire Pulse RX 580
Mac
  1. iMac
  2. MacBook Air
  3. MacBook Pro
Mobile Phone
  1. iOS
@jaymonkey thanks for the explanation on why the secondary match needed to be disabled.

After reading your post I went through my box of PCI & PCIe NIC cards and dug out a pair of PCIe HP Server Intel NIC's - These were the only PCIe NICs I had, all the rest were old PCI format cards.
  1. NC110T a single port x1 card, based on the Intel 82572GI controller, and
  2. NC365T four port x4 card, based on the Intel 82571EB chipset controller.
I don't have a Z490 motherboard system or 2.5Gb Ethernet port but just wanted to see what would happen if I installed either of these two secondary Ethernet cards in a Monterey 12.x system. I didn't disable the existing built-in Ethernet port.

I decided to install the NC110T as I found that AppleIntelE1000e.kext would work with the Intel 82572GI controller.
  • I installed the HP PCIe NIC in a spare x8 slot (all that was available)
  • Booted in to Monterey using OpenCore 0.7.5.
  • The new NIC wasn't discovered by macOS, not surprising.
  • I then downloaded AppleIntelE1000e.kext, from the Downloads section on this site.
  • Mounted the EFI partition on my macOS SSD
  • Copied the AppleIntelE1000e.kext to the /EFI/OC/Kexts folder
  • Added an entry to the config.plist for the kext, using ProperTree's OC Clean Snapshot feature.
  • Saved the config.plist and rebooted the system.
After the system rebooted.
  • Navigated to System Preferences > Network pane, to see that the NIC was not added automatically.
  • So I clicked the '+' sign at the base of the list of Network devices and added a 2nd Ethernet device, which appears in the list of available devices.
  • Selected the 'Apply' button to confirm the creation of the new Ethernet2 device.
  • The Ethernet card was immediately provided with an IP address and set as en2. The original Ethernet was set with en0 and my WiFi is set with en1.
  • Navigated to 'About this Mac' > System Information > Ethernet report, to see what if anything had changed.
  • The new NIC was showing with the name 'Ethernet', with the AppleIntelE1000.kext loaded.
  • I could browse the Internet and my local network using the port.
Hackintool application & Built-In setting.
  • The new Ethernet port now showed up in the Hackintool > System > Peripherals, but the device was not showing as 'Built-In', like the WiFi and other Ethernet port.
  • I navigated to the Hackintool > PCIe tab and Updated the PCIID's (looks like download icon) in the PCIe device list.
  • I then used the Export function icon, to export the PCIe data from Hackintool.
    • The Export function creates 4 files on the desktop.
      • pcidevices.dsl
      • pcidevices.json
      • pcidevices.plist, and
      • pcidevices.txt
  • I opened the pcidevices.plist file with ProperTree and found the 82572EI Gigabit Ethernet Controller (Copper) device section.
  • The Device Path for new Ethernet was PciRoot(0x0)/Pci(0x1.0x1)/Pci(0x0,0x0)
  • Mounted the EFI partition on my macOS drive.
  • Opened my OC config.plist with ProperTree and navigated to the DeviceProperties > Add section.
  • I copied the 82572EI Gigabit Ethernet Controller (Copper) device section in the pcidevices.plist to the DeviceProperties > Add section in my config.plist.
  • Added a new child under the PciRoot(0x0)/Pci(0x1.0x1)/Pci(0x0,0x0) section.
  • Named the new child 'built-in' > Data > <01>.
  • Changed the AAPL,slot-name entry from 'Internal@0,20,0' to something I would understand, 'PCIE x8 slot-3'
  • Screenshot 2022-02-23 at 14.53.45.png
  • Saved the changes to the config, closed ProperTree and rebooted the system.
Finished article.
New Ethernet port shows as Built-in in Hackintool > System > Peripherals.

Screenshot 2022-02-23 at 14.36.25.png Hackintool> System > Peripherals

I have attached a few other screenshots showing the setup upon completion.

I thought this would be less of a process, using a kext that is widely available and slightly easier for users to follow.

Having written this up, I'm not so sure. It still feels like we need to jump through a lot of hoops to get the desired result - a working Ethernet port!

Availability:
These HP Server NIC's are available on eBay for between £8-£20. As they are an old component I have not seen any New/Unused cards.

There are other Intel Gigabite Ethernet cards available, using similar chipsets, most if not all can work in macOS, with the correct kext.
 

Attachments

  • Screenshot 2022-02-23 at 14.38.36.png
    Screenshot 2022-02-23 at 14.38.36.png
    73.1 KB · Views: 72
  • Screenshot 2022-02-23 at 14.38.02.png
    Screenshot 2022-02-23 at 14.38.02.png
    295.5 KB · Views: 54
  • Screenshot 2022-02-23 at 14.37.15.png
    Screenshot 2022-02-23 at 14.37.15.png
    20.4 KB · Views: 55
  • Screenshot 2022-02-23 at 14.36.43.png
    Screenshot 2022-02-23 at 14.36.43.png
    108.6 KB · Views: 52

Edhawk

Moderator
Joined
Aug 2, 2013
Messages
3,737
Motherboard
MSI Z370-A Pro
CPU
i5-8500
Graphics
Sapphire Pulse RX 580
Mac
  1. iMac
  2. MacBook Air
  3. MacBook Pro
Mobile Phone
  1. iOS
Other Intel Kexts and chipsets:
Below are three old ethernet kext with details of the controllers supported in each kext:
  • AppleIntelE1000.kext
    • Supported chipsets 82540, 82541, 82542, 82543, 82544, 82545, 82546, 82547
  • AppleIntelE1000e.kext
    • Supported chipsets 82571, 82572, 82573, 82574, 82578, 82579, 82583, ICH8, ICH9, ICH10, 80003ES2, and others.
  • AppleIGP.kext
    • Supported chipsets 82575, 82576, 82580, i350, dh89xxcc
There are a number of forks of hnak's AppleIntelE1000 and AppleE1000e kexts by different people (Rehabman & Chris1111 for example).

Some forks drop support for older chipsets, some have been written to work better in newer versions of macOS. So you may need to try a few kexts of the same name, but different versions/revisions before you find a kext that works with any given Intel Ethernet chipset and Monterey.

Plus there is IntelMausiEthernet.kext and IntelMausi.kext, which support a few old but mostly the newer Intel Ethernet chipsets.

IIRC, Rehabman's IntelMausiEthernet.kext was a fork of hnak's AppleIntelE1000e.kext.
 
Joined
Jan 29, 2011
Messages
55
Motherboard
Gigabyte Z490 VISION D
CPU
i7 10850K
Graphics
RX580
Mac
  1. iMac
I bought 2 pcie cards with an i225LM. chipset (yesss LM not V) and for the life of mine a cannot make them work on mac os monterey the chipset is supposed to be supported natively but it just crashes my z490 vision-d
i tried on a old 1156 motherboard and it works just fine no kext needed i just gave up
anyone tried a pcie card with an i225LM ????

this quote is from the Opencore guide


# AppleIntelI210Ethernet.kext
pci8086,1533 = Intel I210
pci8086,15f2 = Intel I225LM (Added in macOS 10.15)

and this card i bought actually matches the vendor and pci id
maybe it does not like my board any ways i gave up on that
ill stick with the onboard i219
 
Joined
Feb 8, 2011
Messages
146
Motherboard
ASUS P8Z77-V Pro
CPU
i7 3770k @ 4.8GHz
Graphics
GTX 650Ti
Mac
  1. MacBook Air
  2. Mac Pro
Background

With the release of MacOS Monterey, many of us with motherboards that have an on-board Intel I225 NIC have found that it is no longer functional, despite the fact it was working well in MacOS BigSur.

There have been many attempts to resolve the issue using different approaches but so far there is no clear answer. It is speculated that the problem could be something to do with the hardware revision and/or firmware version of the I225 chip, however this is still un-proven and the recommended solution in 95% of cases is to disable the on-board I225 NIC and replace it with an alternative.

Many users have had success using a cheap USB->Ethernet adapter, however almost all USB->Ethernet adapters use software running on the CPU to process the LAN packets rather than processing them on the bare metal NIC. As a result these adapters only provide basic connectivity and are not capable of running in promiscuous mode and most lack support for more advanced features such as Wake on LAN.

There are number of PCIe NiC's that can be made to work on MacOS Monterey using 3rd party kexts that have been developed by the Hackintosh community such as Intel cards supported by the IntelMausi kext which is now maintained by Acidanthera and RealTek based cards using the kext's maintained by Mieze.

Another approach is to inject older kext's to support Ethernet NIC's that Apple long dropped support for, however this approach is not something I would personally recommend as Apple could depreciate the API's that these kexts rely on at any time.

I was not really interested in any of the above approaches and wanted to see if it was possible to use a current and natively supported PCIe NIC in Monterey, one that uses Apple supplied and maintained kexts rather than one relying on a 3rd party or depreciated kext.

It should be noted that Apple have removed official support for many 3rd party NIC's in MacOS Monterey that where once supported in BigSur and earlier versions of MacOS so the options are now somewhat limited and official documentation on what PCIe NIC's are supported is hard to find.

So the first thing I did was to take a peek in IONetworkingFamily.kext/Contents/Plugins which is located in the /System/Library/Extensions folder, here we can see the following natively supported kext drivers for Ethernet NIC's.

View attachment 542457
From the above list I was able to research the capabilities of each supported NIC's and as my local LAN is 1 Gigabit Ethernet I decided to go with an Intel 82574L based solution as these cards are cheep and wildly available and only require a PCIe x1 expansion slot. After a quick search on my preferred hardware suppliers web store I found the following PCIe card :-

Intel Gigabit Pro 1000CT PCI Express Gigabit Network Card OEM
View attachment 542462
1 Port Intel Gigabit PRO EXPI9301CTBLK 1000CT Gigabit PCI-e Network Adapter - OEM

As MacOS Monterey has a kext driver specifically for the Intel 82574L NIC I was somewhat hopefully that VID & PID would match the ones defined in Apples kext and it would esentially be plug and play, however this proved not to be the case.

After some experimentation I found the solution was to modify the device properties of the NIC, make a small patch for the kext and then force MacOS to load the kext during boot-up.

Rather than just give you the code to cut and paste i'll try to explain what each part of the fix does and why it is needed, that said if your not familiar with OpenCore I highly recommend reading the official documentation and referencing the sample config.plist, both can be found in the Docs folder that is included with each release of OpenCore.

The following method should work for any motherboard and will most likely work for any of the Ethernet kext drivers in IONetworkingFamily.kext/Contents/Plugins with modification to the file paths, identifiers and PID's/VID's.

For reference I'm booting MacOS Monterey 12.2.1 via OpenCore 0.7.8 on a Gigabyte Z490 Vision G.

Prerequisites

First, backup your existing EFI folder, so that you have working EFI that you can fall back to if things go wrong.

Next you should remove any existing kexts, device properties and boot args from your OpenCore EFI and config.plist that you may have been using for the Intel I225, once you have made and saved the changes, shutdown the system and install the new PCIe card in a empty PCIe slot. As the Intel 82574L PCIe card only has a PCIe x1 interface I recommend installing it in one of the PCIe x1 slots that is routed through the PCH, since the built in Intel I225 NIC was also routed through the PCH it should not put any extra load on the PCH data bus.

Note that installing a Ethernet PCIe card in one of the expansion slots that is directly connected the CPU will reduce the number of PCIe lanes available for a dGPU (if you have one installed).

Once you have installed the new PCIe Ethernet card, boot up the PC and enter the BIOS to disable the on-board Intel I225 Ethernet NIC.

View attachment 542601

Save the changes, and boot into MacOS Monterey normally.

Step-1 - Identify the Intel 82574L NIC's Device Path.

Run HackinTool and click on the PCI icon and find the new Intel 82574L NIC in the device list, right click on the entry for the Intel 82574L NIC and select "Copy Device Path"

View attachment 542463

In my case the Device Path for the Intel 82574L NIC is PciRoot(0x0)/Pci(0x1B,0x2)/Pci(0x0,0x0) but this will be different depending on the make/type of motherboard you have and PCIe slot you put the card in.

Step-2 - Create Custom Device Properties for the Intel 82574L NIC

Mount your EFI partition and open your OpenCore config.plist in the editor of your choice, I always work with the raw code using BBEdit, but you can use whatever code or plist editor you want.

Using the Device Path you copied from Hackintool, create a new <key> in the DeviceProperties->Add section of your config.plist.

Code:
    <key>DeviceProperties</key>
    <dict>
        <key>Add</key>
        <dict>
            <key>PciRoot(0x0)/Pci(0x1B,0x2)/Pci(0x0,0x0)</key>

Now copy and paste the following device properties after the <key> you just created.

Code:
            <dict>
                <key>AAPL,slot-name</key>
                <string>PCIEX4</string>
                <key>built-in</key>
                <data>AA==</data>
                <key>device-id</key>
                <data>9hAAAA==</data>
                <key>device_type</key>
                <string>Ethernet Controller</string>
                <key>subsystem-id</key>
                <data>AAAAAA==</data>
                <key>subsystem-vendor-id</key>
                <data>AAAAAA==</data>
                <key>vendor-id</key>
                <data>hoAAAA==</data>
            </dict>

Change the string value for AAPL,slot-name to match the slot you have installed the Intel 82574L NIC in, in most cases you will likely have other existing entires but for this example I will keep it simple so the Device Properties section it should now look something like this :-

Code:
    <key>DeviceProperties</key>
    <dict>
        <key>Add</key>
        <dict>
            <key>PciRoot(0x0)/Pci(0x1B,0x2)/Pci(0x0,0x0)</key>
            <dict>
                <key>AAPL,slot-name</key>
                <string>PCIEX4</string>
                <key>built-in</key>
                <data>AQ==</data>
                <key>device-id</key>
                <data>9hAAAA==</data>
                <key>device_type</key>
                <string>Ethernet Controller</string>
                <key>subsystem-id</key>
                <data>AAAAAA==</data>
                <key>subsystem-vendor-id</key>
                <data>AAAAAA==</data>
                <key>vendor-id</key>
                <data>hoAAAA==</data>
            </dict>
        </dict>
        <key>Delete</key>
        <dict/>
    </dict>

Explanation of the Device Properties

Code:
                <key>built-in</key>
                <data>AQ==</data>

Sets the "built-in" flag to 0x01 so that MacOS thinks it's a built-in device.

Code:
                <key>device-id</key>
                <data>9hAAAA==</data>

This changes the Intel 82574L device-id (Primary PID) to 0x10F60000 which is required for the primary PID match in Apples native 82574L kext driver, if you open the info.plist for the Intel82574L.kext you can see where we get this value from :-

View attachment 542465

Code:
                <key>device_type</key>
                <string>Ethernet Controller</string>

This is pretty self explanatory.

Code:
                <key>subsystem-id</key>
                <data>AAAAAA==</data>
                <key>subsystem-vendor-id</key>
                <data>AAAAAA==</data>
                <key>vendor-id</key>
                <data>hoAAAA==</data>

Sets the sub-system PID & VID to 0x00000000 and vendor-id (Primary VID) to 0x80860000 (Intel).

Step-3 - Patch the Intel82574L kext to ignore the Secondary PID & VID Match

Despite injecting the correct PID and VID values for both the primary and secondary PCI matches the native Apple kext still refused to bind it's self to the newly installed NIC. In order to fix this add the following to the Kernel->Patch section of your config.plist

Code:
            <dict>
                <key>Arch</key>
                <string>Any</string>
                <key>Base</key>
                <string></string>
                <key>Comment</key>
                <string>Intel 82574L Ethernet</string>
                <key>Count</key>
                <integer>0</integer>
                <key>Enabled</key>
                <true/>
                <key>Find</key>
                <data>SU9QQ0lTZWNvbmRhcnlNYXRjaA==</data>
                <key>Identifier</key>
                <string>com.apple.driver.Intel82574LEthernet</string>
                <key>Limit</key>
                <integer>0</integer>
                <key>Mask</key>
                <data></data>
                <key>MaxKernel</key>
                <string></string>
                <key>MinKernel</key>
                <string></string>
                <key>Replace</key>
                <data>RFVNTVlTZWNvbmRhcnlNYXRjaA==</data>
                <key>ReplaceMask</key>
                <data></data>
                <key>Skip</key>
                <integer>0</integer>
            </dict>
        </array>

This patch changes the <key> name IOPCISecondaryMatch in info.plist of the Intel82574L.kext to DUMMYSecondaryMatch thus effectually disabling secondary PID and VID matching.

Step-4 - Force MacOS to load the Intel82574L kext.

Create the following entry in the Kernel/Force section of your config.plist

Code:
        <key>Force</key>
        <array>
            <dict>
                <key>Arch</key>
                <string>x86_64</string>
                <key>BundlePath</key>
                <string>System\Library\Extensions\IONetworkingFamily.kext\Contents\PlugIns\Intel82574L.kext</string>
                <key>Comment</key>
                <string>For Intel 82574L NIC</string>
                <key>Enabled</key>
                <true/>
                <key>ExecutablePath</key>
                <string>Contents/MacOS/Intel82574L</string>
                <key>Identifier</key>
                <string>com.apple.driver.Intel82574LEthernet</string>
                <key>MaxKernel</key>
                <string></string>
                <key>MinKernel</key>
                <string></string>
                <key>PlistPath</key>
                <string>Contents/Info.plist</string>
            </dict>
        </array>

This entry forces MacOS to load the Intel82574L kext regardless of the Mac model / SMBIOS you are using.

Step-5 - Final checks and Testing

After you have made the above changes and saved the updated config.plist, i recommend using OCValidate to check that there are no syntax or formatting errors, if the file passes validation then you can reboot and load MacOS again.

Run Hackintool again and check the entry for the Intel 82574L NIC, if everything has worked you should see that the devices Primary PID is now 0x10F6 and if you click on the magnifying glass icon for that entry you should see that the device is now attached to the Intel82574L.kext.

At this point you should find that the 82574L NIC is working.

View attachment 542466

I've been running my system with the Intel 82574L NIC for about two weeks now and it's been 100% stable with no issues with sleep and wake, since we are using a native Apple kext driver it's highly likely that "Wake on LAN" should also work although this is something that I haven't tested myself.

Cheers
Jay
Hi @jaymonkey, I tried to do the same for my onboard i211 to emulate the i210. It loads the _com.apple.DriverKit-AppleEthernetE1000_
What am I missing check my config file below.
 

Attachments

  • config.plist
    30.8 KB · Views: 39
Top