Contribute
Register

[Guide] HackrNVMeFamily co-existence with IONVMeFamily using class-code spoof

Status
Not open for further replies.
Hello, does this guide work for plextor nvme? I have used this, but my speeds seems same 800-1000 write 1400-2000 read, and system not load without patches in plist, which i found somewhere
What am i doing wrong?
Code:
<dict>
                <key>Comment</key>
                <string>IONVMeFamily change 0x10 -&gt; 0x01 for LiteOn CX2 (c) Pike R. Alpha implemented by syscl</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>9sEQD4UcAQAA</data>
                <key>Name</key>
                <string>IONVMeFamily</string>
                <key>Replace</key>
                <data>9sEBD4UcAQAA</data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>IONVMeFamily Pike R. Alpha Patch#1</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>ibP4AgAAweAMBQAQAACJgw==</data>
                <key>Name</key>
                <string>IONVMeFamily</string>
                <key>Replace</key>
                <data>ibP4AgAAweAJBQAQAACJgw==</data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>IONVMeFamily Pike R. Alpha Patch#2</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>D7aMiIIAAACD+QwPhTIBAA==</data>
                <key>Name</key>
                <string>IONVMeFamily</string>
                <key>Replace</key>
                <data>D7aMiIIAAACD+QkPhTIBAA==</data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>IONVMeFamily Pike R. Alpha Patch#3</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>AMeDpAAAAAAQAABIi0gISA==</data>
                <key>Name</key>
                <string>IONVMeFamily</string>
                <key>Replace</key>
                <data>AMeDpAAAAAACAABIi0gISA==</data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>IONVMeFamily Pike R. Alpha Patch#4</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>SYnGTYX2dGFBwecMSWP/vg==</data>
                <key>Name</key>
                <string>IONVMeFamily</string>
                <key>Replace</key>
                <data>SYnGTYX2dGFBwecJSWP/vg==</data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>IONVMeFamily Pike R. Alpha Patch#5</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>hv8PAABIwegMD7cPgeH/Dw==</data>
                <key>Name</key>
                <string>IONVMeFamily</string>
                <key>Replace</key>
                <data>hv8PAABIwegJD7cPgeH/Dw==</data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>IONVMeFamily Pike R. Alpha Patch#6_7</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>icGB4f8PAABIAdFIgfn/DwAAdzs=</data>
                <key>Name</key>
                <string>IONVMeFamily</string>
                <key>Replace</key>
                <data>icGB4f8BAABIAdFIgfn/AQAAdzs=</data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>IONVMeFamily Pike R. Alpha Patch#8</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>SYHF/w8AAEnB7QxJiwQkSA==</data>
                <key>Name</key>
                <string>IONVMeFamily</string>
                <key>Replace</key>
                <data>SYHF/w8AAEnB7QlJiwQkSA==</data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>IONVMeFamily Pike R. Alpha Patch#9_10</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>BgIAAEyNuAAQAABMiflIgeEA8P//SYmGGgEAAEmJjiIBAABBvAAQAABJKfQ=</data>
                <key>Name</key>
                <string>IONVMeFamily</string>
                <key>Replace</key>
                <data>BgIAAEyNuAACAABMiflIgeEA8P//SYmGGgEAAEmJjiIBAABBvAACAABJKfQ=</data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>IONVMeFamily Pike R. Alpha Patch#11</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>AABJiY4iAQAAugAQAABIKQ==</data>
                <key>Name</key>
                <string>IONVMeFamily</string>
                <key>Replace</key>
                <data>AABJiY4iAQAAugACAABIKQ==</data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>IONVMeFamily Pike R. Alpha Patch#12</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>yAAAAEkp17gAEAAATYskJA==</data>
                <key>Name</key>
                <string>IONVMeFamily</string>
                <key>Replace</key>
                <data>yAAAAEkp17gAAgAATYskJA==</data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>IONVMeFamily Pike R. Alpha Patch#13</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>4b+AQBUGTYnWugAQAABFMQ==</data>
                <key>Name</key>
                <string>IONVMeFamily</string>
                <key>Replace</key>
                <data>4b+AQBUGTYnWugACAABFMQ==</data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>IONVMeFamily Pike R. Alpha Patch#14</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>iWTY+EmBxAAQAABJgccA8A==</data>
                <key>Name</key>
                <string>IONVMeFamily</string>
                <key>Replace</key>
                <data>iWTY+EmBxAACAABJgccA8A==</data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>IONVMeFamily Pike R. Alpha Patch#15</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>Bf8PAABIwegMZvfB/w8PlQ==</data>
                <key>Name</key>
                <string>IONVMeFamily</string>
                <key>Replace</key>
                <data>Bf8PAABIwegJZvfB/w8PlQ==</data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>IONVMeFamily Pike R. Alpha Patch#16</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>weIIQQ+2wcHgDEQJ0EQJwA==</data>
                <key>Name</key>
                <string>IONVMeFamily</string>
                <key>Replace</key>
                <data>weIIQQ+2wcHgCUQJ0EQJwA==</data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>IONVMeFamily Pike R. Alpha Patch#17</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>RYTJD5XAD7bAweAMRAnYRA==</data>
                <key>Name</key>
                <string>IONVMeFamily</string>
                <key>Replace</key>
                <data>RYTJD5XAD7bAweAJRAnYRA==</data>
            </dict>
 

Attachments

  • config.plist
    11.3 KB · Views: 195
  • SSDT-NVMe-Pcc.aml
    130 bytes · Views: 97
Hello, does this guide work for plextor nvme? I have used this, but my speeds seems same 800-1000 write 1400-2000 read, and system not load without patches in plist, which i found somewhere
What am i doing wrong?
Code:
<dict>
                <key>Comment</key>
                <string>IONVMeFamily change 0x10 -&gt; 0x01 for LiteOn CX2 (c) Pike R. Alpha implemented by syscl</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>9sEQD4UcAQAA</data>
                <key>Name</key>
                <string>IONVMeFamily</string>
                <key>Replace</key>
                <data>9sEBD4UcAQAA</data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>IONVMeFamily Pike R. Alpha Patch#1</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>ibP4AgAAweAMBQAQAACJgw==</data>
                <key>Name</key>
                <string>IONVMeFamily</string>
                <key>Replace</key>
                <data>ibP4AgAAweAJBQAQAACJgw==</data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>IONVMeFamily Pike R. Alpha Patch#2</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>D7aMiIIAAACD+QwPhTIBAA==</data>
                <key>Name</key>
                <string>IONVMeFamily</string>
                <key>Replace</key>
                <data>D7aMiIIAAACD+QkPhTIBAA==</data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>IONVMeFamily Pike R. Alpha Patch#3</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>AMeDpAAAAAAQAABIi0gISA==</data>
                <key>Name</key>
                <string>IONVMeFamily</string>
                <key>Replace</key>
                <data>AMeDpAAAAAACAABIi0gISA==</data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>IONVMeFamily Pike R. Alpha Patch#4</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>SYnGTYX2dGFBwecMSWP/vg==</data>
                <key>Name</key>
                <string>IONVMeFamily</string>
                <key>Replace</key>
                <data>SYnGTYX2dGFBwecJSWP/vg==</data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>IONVMeFamily Pike R. Alpha Patch#5</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>hv8PAABIwegMD7cPgeH/Dw==</data>
                <key>Name</key>
                <string>IONVMeFamily</string>
                <key>Replace</key>
                <data>hv8PAABIwegJD7cPgeH/Dw==</data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>IONVMeFamily Pike R. Alpha Patch#6_7</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>icGB4f8PAABIAdFIgfn/DwAAdzs=</data>
                <key>Name</key>
                <string>IONVMeFamily</string>
                <key>Replace</key>
                <data>icGB4f8BAABIAdFIgfn/AQAAdzs=</data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>IONVMeFamily Pike R. Alpha Patch#8</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>SYHF/w8AAEnB7QxJiwQkSA==</data>
                <key>Name</key>
                <string>IONVMeFamily</string>
                <key>Replace</key>
                <data>SYHF/w8AAEnB7QlJiwQkSA==</data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>IONVMeFamily Pike R. Alpha Patch#9_10</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>BgIAAEyNuAAQAABMiflIgeEA8P//SYmGGgEAAEmJjiIBAABBvAAQAABJKfQ=</data>
                <key>Name</key>
                <string>IONVMeFamily</string>
                <key>Replace</key>
                <data>BgIAAEyNuAACAABMiflIgeEA8P//SYmGGgEAAEmJjiIBAABBvAACAABJKfQ=</data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>IONVMeFamily Pike R. Alpha Patch#11</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>AABJiY4iAQAAugAQAABIKQ==</data>
                <key>Name</key>
                <string>IONVMeFamily</string>
                <key>Replace</key>
                <data>AABJiY4iAQAAugACAABIKQ==</data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>IONVMeFamily Pike R. Alpha Patch#12</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>yAAAAEkp17gAEAAATYskJA==</data>
                <key>Name</key>
                <string>IONVMeFamily</string>
                <key>Replace</key>
                <data>yAAAAEkp17gAAgAATYskJA==</data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>IONVMeFamily Pike R. Alpha Patch#13</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>4b+AQBUGTYnWugAQAABFMQ==</data>
                <key>Name</key>
                <string>IONVMeFamily</string>
                <key>Replace</key>
                <data>4b+AQBUGTYnWugACAABFMQ==</data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>IONVMeFamily Pike R. Alpha Patch#14</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>iWTY+EmBxAAQAABJgccA8A==</data>
                <key>Name</key>
                <string>IONVMeFamily</string>
                <key>Replace</key>
                <data>iWTY+EmBxAACAABJgccA8A==</data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>IONVMeFamily Pike R. Alpha Patch#15</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>Bf8PAABIwegMZvfB/w8PlQ==</data>
                <key>Name</key>
                <string>IONVMeFamily</string>
                <key>Replace</key>
                <data>Bf8PAABIwegJZvfB/w8PlQ==</data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>IONVMeFamily Pike R. Alpha Patch#16</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>weIIQQ+2wcHgDEQJ0EQJwA==</data>
                <key>Name</key>
                <string>IONVMeFamily</string>
                <key>Replace</key>
                <data>weIIQQ+2wcHgCUQJ0EQJwA==</data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>IONVMeFamily Pike R. Alpha Patch#17</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>RYTJD5XAD7bAweAMRAnYRA==</data>
                <key>Name</key>
                <string>IONVMeFamily</string>
                <key>Replace</key>
                <data>RYTJD5XAD7bAweAJRAnYRA==</data>
            </dict>

No need to apply any extra patches. You can patch for block size by following the instructions in post #1 as written. Then if you need an additional patch (such as the Plextor/Lite-on/Hynix patches linked by the README), you can use KextsToPatch for that one patch (change name from IONVMeFamily to HackrNVMeFamily).

But you should see if you can change the block size on your drive. See README for links/info.
 
No need to apply any extra patches. You can patch for block size by following the instructions in post #1 as written. Then if you need an additional patch (such as the Plextor/Lite-on/Hynix patches linked by the README), you can use KextsToPatch for that one patch (change name from IONVMeFamily to HackrNVMeFamily).

But you should see if you can change the block size on your drive. See README for links/info.

Sorry, still can't manage this to work. Should i remove IONVMeFamily.kext at all? I just can't see what i missing, every step in instruction is done
If i trying to load with HackrNVMeFamily in KextsToPatch in my plist system stuck on crossed out circle.
 
Sorry, still can't manage this to work. Should i remove IONVMeFamily.kext at all? I just can't see what i missing, every step in instruction is done
If i trying to load with HackrNVMeFamily in KextsToPatch in my plist system stuck on crossed out circle.

Read post #1, "Problem Reporting".
 

Attachments

  • Снимок.PNG
    Снимок.PNG
    11 KB · Views: 125
  • CLOVER.zip
    3 MB · Views: 75
  • 1.PNG
    1.PNG
    17.2 KB · Views: 117
SSD is Plextor M8PE PX-512M8PeG

You should remove all of the patches for IONVMeFamily in config.plist...
They are not needed with the class-code spoof and HackrNVMeFamily!
A patch for IONVMeFamily has no effect when using HackrNVMeFamily.

And you should keep the original name generated by patch_nvme.sh for the HackrNVMeFamily (so you know the version).
If you need a specific patch, such as the one for Lite-on (that have in your config.plist), you will need to change Name=HackrNVMeFamily as IONVMeFamily is not used/not loaded when using the class-code spoof and HackrNVMeFamily.

But before you even pursue the class-code hack, you should look if it is possible to change the block size of your NVMe SSD such that it matches what IONVMeFamily expects. If you can change it to 4k, you can use native IONVMeFamily. Read at the related IM link provided in the patch_nvme README.
 
RehabMan,
I have a system in which I'm using the Samsung 950 Pro NVMe M.2 SSD on a PCIe card. In IOJones, the acpi-path is IOACPIPlane:/_SB/PCI0@0/PEG2@10002. For the SSDT, I can get the parameter down to _SB.PCI0.PEG2.???? but I'm not sure about the last ????. (Note, I'm currently using the non spoof kext having removed the Apple HackrNVMeFamily.kext.)
Thunderball IOJones.png

I've attached is my IOJones file, too.
 

Attachments

  • Thunderball.iojones
    1.2 MB · Views: 128
Last edited:
RehabMan,
I have a system in which I'm using the Samsung 950 Pro NVMe M.2 SSD on a PCIe card. In IOJones, the acpi-path is IOACPIPlane:/_SB/PCI0@0/PEG2@10002. For the SSDT, I can get the parameter down to _SB.PCI0.PEG2.???? but I'm not sure about the last ????. (Note, I'm currently using the non spoof kext having removed the Apple HackrNVMeFamily.kext.)
View attachment 246248
I've attached is my IOJones file, too.

According to your ioreg image (I don't have IOJones on my system, I use only IORegistryExplorer v2.1)...

_SB.PCI0.PEG2 is the parent path.
The SSD is at a subnode without an ACPI identity (which is why you see the generic name pci144d,a802).

Read post #1 for how to add the missing ACPI identity under _SB.PCI0.PEG2.
 
RehabMan, thank you for the info. I'll look at Post#1...and use ORegistryExplorer v2.1 to valid what I found out with IOJones. :thumbup: Unfortunately, I don't have Windows on my system - I don't have it period. So, it will be a little harder to find the correct info.
 
Last edited:
RehabMan, thank you for the info. I'll look at Post#1...and use ORegistryExplorer v2.1 to valid what I found out with IOJones. :thumbup: Unfortunately, I don't have Windows on my system - I don't have it period. So, it will be a little harder to find the correct info.

You already have the correct info... Your case is the very simplest of cases where only the leaf node (the actual SSD node) is missing an ACPI identity. Reading post #1, you will find it is only a single line of code to add that identity...

Hint:
Code:
// Inject bogus class-code for NVMe SSD to prevent IONVMeFamily.kext from loading
DefinitionBlock("", "SSDT", 2, "hack", "NVMe-Pcc", 0)
{
    External(_SB.PCI0.PEG2, DeviceObj)
    // Add PXSX device under PEG2
    Device(_SB.PCI0.PEG2.PXSX) { Name(_ADR, 0) }
    /// Now we can inject the method at RP13.PXSX
    Method(_SB.PCI0.PEG2.PXSX._DSM, 4)
    {
        If (!Arg2) { Return (Buffer() { 0x03 } ) }
        Return(Package()
        {
            "class-code", Buffer() { 0xff, 0x08, 0x01, 0x00 },
            "built-in", Buffer() { 0 },
        })
    }
}
//EOF
 
Status
Not open for further replies.
Back
Top