Contribute
Register

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

Status
Not open for further replies.
Sry if this already has been asked on one of the 80+ pages.

Is there an alternative way to find out the ACPI path?

I mean it seems like an overkill to me the need to install a whole new operating system to find out a small string. Furthermore I really don't want to install Windows on my Hackintosh, which wasn't build to run Windows in first place. :D

This is not meant as critics, I'm just curious, because I'd want to go the safest route.
 
Hi @RehabMan
I have a Samsung 960 Pro SSD on GA Z87X-UD3H via a two slot M.2 adapter card(B&M Key). Follow your guide to fix external icon problem but without success.

Is there anything wrong? I'm newbie for ASL code patching. Thank's for reply.

SSDT code:
Code:
DefinitionBlock ("", "SSDT", 2, "hack", "NVMe-Pcc", 0x00000000)
{
    External (_SB_.PCI0.P0PA, DeviceObj)    // (from opcode)

    Device (_SB.PCI0.P0PA.H000)
    {
        Name (_ADR, Zero)  // _ADR: Address
    }

    Method (_SB.PCI0.P0PA.H000._DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
    {
        If (LNot (Arg2))
        {
            Return (Buffer (One)
            {
                 0x03                                         
            })
        }

        Return (Package (0x04)
        {
            "class-code",
            Buffer (0x04)
            {
                 0xFF, 0x08, 0x01, 0x00                       
            },

            "built-in",
            Buffer (One)
            {
                 0x00                                         
            }
        })
    }
}


IORegistryExplorer_snapshot.png
 
Last edited:
Hi @RehabMan
I have a Samsung 960 Pro SSD on GA Z87X-UD3H via a two slot M.2 adapter card(B&M Key). Follow your guide to fix external icon problem but without success.

Is there anything wrong? I'm newbie for ASL code patching. Thank's for reply.

SSDT code:
Code:
DefinitionBlock ("", "SSDT", 2, "hack", "NVMe-Pcc", 0x00000000)
{
    External (_SB_.PCI0.P0PA, DeviceObj)    // (from opcode)

    Device (_SB.PCI0.P0PA.H000)
    {
        Name (_ADR, Zero)  // _ADR: Address
    }

    Method (_SB.PCI0.PEG1.P0PA._DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
    {
        If (LNot (Arg2))
        {
            Return (Buffer (One)
            {
                 0x03                                        
            })
        }

        Return (Package (0x04)
        {
            "class-code",
            Buffer (0x04)
            {
                 0xFF, 0x08, 0x01, 0x00                      
            },

            "built-in",
            Buffer (One)
            {
                 0x00                                        
            }
        })
    }
}


View attachment 268144

According to your ioreg shot, your SSD has no ACPI identity (POPA is not the correct node... it is the parent identity).
Read post #1 regarding incomplete ACPI identities.

Also, if you need help...

Read FAQ, "Problem Reporting"
https://www.tonymacx86.com/threads/faq-read-first-laptop-frequent-questions.164990/
 
Hi @RehabMan
According to your ioreg shot, your SSD has no ACPI identity (POPA is not the correct node... it is the parent identity).
Read post #1 regarding incomplete ACPI identities.

Also, if you need help...

Read FAQ, "Problem Reporting"
https://www.tonymacx86.com/threads/faq-read-first-laptop-frequent-questions.164990/

Thanks for your reply. I find that I didn't understand your guide before I solve it.
Here it works!
Code:
DefinitionBlock ("", "SSDT", 2, "hack", "NVMe-Pcc", 0x00000000)
{
    External (_SB_.PCI0.P0PA, DeviceObj)    // (from opcode)

    Device (_SB.PCI0.P0PA.H000)
    {
        Name (_ADR, Zero)  // _ADR: Address
    }

    Method (_SB.PCI0.P0PA.H000._DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
    {
        If (LNot (Arg2))
        {
            Return (Buffer (One)
            {
                 0x03                                        
            })
        }

        Return (Package (0x04)
        {
            "class-code",
            Buffer (0x04)
            {
                 0x02, 0x08, 0x01, 0x00                      
            },

            "built-in",
            Buffer (One)
            {
                 0x00                                        
            }
        })
    }
}
 
I updated from 10.12.5 to 10.12.6 and ran into some issues, fixed it by reading the comments but did some things differently, so here are some tips:

- Save your .aml file into your backup USB's EFI so you can boot into it in the future in case your run into some problems.
- If you are not code-savvy like RehabMan, use KextBeast after you create your kext and install in both places/options.

Hope you guys find this helpful!
 
I followed the instructions and it seems to work, but I don't see if trim is working. There is no option to see it? In system report there is nothing mentioned. Thanks for your help.
 
I followed the instructions and it seems to work, but I don't see if trim is working. There is no option to see it? In system report there is nothing mentioned. Thanks for your help.
System Report - NVMExpress - and it's right under capacity, if it says TRIM support: Yes, your'e good to go.
 
System Report - NVMExpress - and it's right under capacity, if it says TRIM support: Yes, your'e good to go.

Absolutly right. Thanks. Was looking and looking, but overlooked it.
 
IMG_1027.JPG I have screwed up my desktop.

Attempted to upgrade from my 12_4 HackrNVMeFamily.kext.

Ran the script on 12.6. Created new patch. MD5 matched.

Installed new 10_12_6 kext to L/E using KextBeast. Rebuilt caches using sudo kextcache -I /.

Deleted old 12_4 kext. Then I found the GenericUSBXHCI.kext and remembered I read something about how it was obsolete on 11.6+. I decided to remove that too. Didn't think it would cause a prohibited sign at boot.

But here I am. I get an extremely slow boot. The last thing verbose spits out is something about USB drivers...No KP. Then nothing happens for 10 seconds. Then Waiting for root device and Prohibited sign.

So I entered EFI/CLOVER/kexts/10.12/ through UEFI Shell 64 in Clover. Put the old 12_4 kext in there, and the GenericUSBXHCI just to roll back as much as I could. Changed Inject Kexts to YES from Detect in config.plist.

Same prohibited sign. Have tried Safe Mode -x. Same issue.

Tried entering L/E through UEFI Shell 64 but it won't let me delete the 12_6 kext. Tried blocking it through Clover boot screen. Doesn't help.


Any suggestions?

Edit: The problem might have been that I applied the wrong command line when I created the patch. I put ./patch_nvme.sh 10_12_6 --spoof and not ./patch_nvme.sh --spoof 10_12_6. When RehabMan thought he had it all fool proof, which indeed it is, here I come and prove it's still possible to do it the wrong way..

I really need that kext gone from L/E. Is there any way? I tried putting a correctly created 12.6 patch in clover/kexts, hoping it would block out the bad one, but no luck. I also tried using the NVMeGeneric.kext but still no go.

Edit2: I have also tried putting all Pike R patches in KextToPatch for IONVMeFamily.kext for Sierra in my config.plist, and cleaned out the Hackr.kext in Clover/kexts/10.12, but it still won't boot. Not using No Caches and Safe Boot either. Same verbose and Prohibited Sign. Going mad now
 
Last edited:
Status
Not open for further replies.
Back
Top