Fassl, Turbo and I are proud to present our new baby : NVEnabler.
The purpose of this kext is to replace all other methods to provide an accurate and universal support for nVidia cards.
This kext allows nVidia driver load by directly reading your VGA ROM to build and inject the required settings, according to your hardware.
It also does on-the-fly ROM patching to give a stabler output configuration.
IT'S NOT YET ANOTHER GENERIC INJECTER.
ROM patching is an important part of the process and can't be achieved by "passive" injection. Copy/pasting strings from other cards has shown to be an inaccurate method even if the boards look identical. Many strings need to be created on measure for the card and display(s).
This is an alpha version and it's not finished. We hope to add more features, but for that, we need your feedback.
If it doesn't work, please post here an ioreg, with description of the problem, infos about your card, and how you are using the outputs.
You can try to manually inject setting, for that check the plist, it works as any injecter (more infos
here)
If you find something that helps, please keep us updated.
We consider by convention that ports close to the motherboard are VGA0/DVI0.
To get an ioreg, in terminal type : ioreg -lw0 > NVEnabler_ioreg_dump_$USER.txt
This must be done when NVEnabler is loaded, otherwise it's useless. If you can't boot with NVE, launch the system with -s, load NVE with kextload and run the IOReg command.
What it does :- Gets required settings from ROM, removing the need of tweaking configuration for each card
- Automatic NVCAP creation
- Automatic VRAM size detection (Kabyl)
- Corrects the ROM (without flashing) to make output definition comply with mac standards.
- Fixes TV output
- Supports for video BIOS overriding : it can load any BIOS as replacement of the integrated one, without flashing. Useful for testing or to bypass ROM size limits. It can be used on mac pro to drive a PC card.
Not supported :- Graphic controllers integrated to chipset don't work (except 9400)
- Some NVS 140 & 570 (might be fixed later)
- VAIO internal screen
Install :Remove any injecter / GFX device property string / DSDT edit for GFX
Put the kext in /System/Library/Extensions/ or /Extra
Fix permissions in terminal and type : touch /System/Library/Extensions (do it again if you modify the plist).
You still need to put your device ID in NVDAResman.kext and NVDANVX0hal.kext (depending on the GPU generation).
Reboot.
IMPORTANT NOTE : That kext defines fixed channels for your connectors. All cards have 2 channels and a various number of connectors.
In any case, you can't plug more than 1 display on the same channel. In other words you must use a different channel for each display.
- For single DVI cards : DVI/VGA port is on channel 1 (so VGA port on #2)
- For dual DVI cards : DVI0/VGA0 is on channel 1
- For laptops : internal screen is on channel 1
TV and other ports are put on the 2nd channel. (so use one of those at time). However some cards have uncommon layouts, if it doesn't work, just try an other port.
eg : plugging TV & VGA0 won't work on single DVI cards because both are fixed on channel 2. so if you need VGA and TV at same time use a DVI>VGA adapter, then each connector will have its own channel and it will be OK.
How to load an alternate VGA BIOS :Open NVE plist with a plist editor. Add a child inside the section "addProperties". Set its name to "vbios" (has to be in lower case), its type to data, and past the BIOS in
hex in the value field.
Also remove the entry "skipvbios_disabled".
Known issues :
- Primary display may go black on second detection.
- Hotplug detection is missing
- display-cfg is hardcoded
- Many mysterious strings to reverse and inject
- Multiple cards are not (automatically) supported yet, but you can manually tweak the plist to fix it yourself, search about usual injection methods to do it.
We are currently getting trouble with the display-cfg string. We don't know how it works at all so far. If you're having problems with NVEnabler, it's most probably because of that string (blue or black screen at boot, screen going off, wrong one on...).
We then suggest you to try different values in the plist, taken from real macs. That's all what we can do for the moment.
EDIT : its working is now partly figured, however we didn't add feature to NVenabler yet, so you still have to mess with it.
There's one string for each screen (@0,display-cfg & @1,display-cfg)
macbook pro 8600GT : 03010000 - ffff0001
macbook pro unibody 9400 : 03010300 - ffff0801
macbook pro white 9400 : 03010300 - ffff0201
mac pro 8800GT : 03010000 - ffff0001
imac 24" 7600GT : 03035000 - ffff3601
Apple TV 7300Go : 01ff0000
mac pro 7300GT : ffff3600 - 00ff3e01
powermac 6800GT : 00ff3600 - 00ff3e01
Note about "Unknown card" : Many people think their card is not supported because it appears as "Unknown card". This doesn't mean a thing. The card name is just an hardcoded string that is injected. A card can work fine even if it's shown as unknown. On the opposite you can have the name correctly displayed for an unsupported card. If you really care about it, you can inject the card name yourself editing the plist to add "model" key + name as string value.
Thanks to iNDi, Roisoft and Kytzu for testing
Edit by Krazubu :
New 0.1b version Snow Leopard 64bit ready (and still 32bit too) :
NVEnabler_64.kext.zip ( 27.44K )
Number of downloads: 10010 (no other modification).
I've seen at many places that people install both 32 and 64bit ones, this doesn't make sense.
Get the kext here :
NVEnabler_0.1.kext.zip ( 19.77K )
Number of downloads: 9583Edit by fassl:
Same kext without display-cfg properties (
won't support dual screen):
NVEnabler_no_display_cfg_0.1.kext.zip ( 19.54K )
Number of downloads: 2329Good luck

Please don't upload it on other servers and don't repack it, thank you
QUOTE (Krazubu @ Jun 2 2009, 11:18 PM)

there's one string for each screen (@0,Display-cfg & @1,Display-cfg)
macbook pro 8600GT : 03010000 - ffff0001
macbook pro unibody 9400 : 03010300 - ffff0801
macbook pro white 9400 : 03010300 - ffff0201
mac pro 7300GT : ffff3600 - 00ff3e01
mac pro 8800GT : 03010000 - ffff0001
imac 24" 7600GT : 03035000 - ffff3601
Apple TV 7300Go : 01ff0000
The nvidia drivers usually use big endian, so a pattern might be easier to find by considering that
CODE
8600GT: 00 00 01 03 - 01 00 FF FF
9400 : 00 03 01 03 - 01 08 FF FF
9400 : 00 03 01 03 - 01 02 FF FF
7300GT: 00 36 FF FF - 01 3E FF 00
8800GT: 00 00 01 03 - 01 00 FF FF
7600GT: 00 50 03 03 - 01 36 FF FF
7300GO: 00 00 FF 01
This post has been edited by Krazubu: Jun 9 2009, 10:49 PM
This looks very interesting

I will try it soon and report back.
You say you don't know how it works with display-cfg strings... Can you tell me what it's for in the first place? I'm having trouble with Backlight on my laptop and nothing seems to help, neither editing dsdt, nor patched IOGraphicsFamily... Is there any possibility at all that this one might help? up to now i inject my GF9600M GT through DSDT
nope, Samsung R560, see Signature
Salut krazubu
Same prob as The King, internal screen stays black. However, it works after display detection.
I've noticed that mirror mode is working well, no mouse/screen shift.
Haven't tested tv-out.
after display detection:
NVEnabler_ioreg_dump_moi.txt.zip ( 159.36K )
Number of downloads: 284before display detection:
NVEnabler_ioreg_dump_moi_sans.txt.zip ( 157.84K )
Number of downloads: 145EDIT: Dell Insipron 9400 - laptop - nvidia go 7900gs
Outputs:
- DVI: works
- VGA: works
- TVOUT: not tested
This post has been edited by sonotone: Jun 15 2009, 10:00 PM
Sonotone, can you precise what is your hardware and also the available outputs ? It seems to be quite uncommon.
By the way, you might try other display-cfg values, it's probably the reason of the problem.
Sweet, it works perfectly.
What's more, I've got TV-out, as never before!
Mirroring, resolution switching, hardware acceleration, overscan, everything works.
Main display on DVI0 (closest to motherboard) and TV-Out via component cable, using the adapter that came with the card.
Leadtek Winfast 9800 GTX+ - 10.5.7 vanilla NV* kexts.
Device ID: 0x0612
Revision ID: 0x00a2
Recognized in System Profiler as 9800 GTX - which is no big deal I guess.
The biggest win for me though is that it makes S3 sleep work.
(EDIT - added more info for other users)
In my BIOS, I can set S3, S1 or auto. If I leave it at auto (which is the BIOS default) and put my hackintosh to sleep, the video card fan spins up to maximum speed (that was *LOUD*, never heard that before) my monitor enters standby and it can't wake again, the reset button doesn't respond and I have to do a hard shut down.
I have to set it to S3 - then it works. EDIT - almost - actually it still does almost the same as before from time to time so it's not 100% reliable. What happens now is that the video card fan will spin up as before, but only for a short time, and then it reboots by itself. I haven't been able to determine yet if there's a pattern to when it will work and when it won't.
When set to auto or S1 sleep won't work at all though so it's still an improvement.
I've been using both DSDT injection by Roisoft and the 9800 GTX EFI device property string that's in OSX86Tools but sleep has never worked for me at all with this video card.
Let me know if you still want the IOREG output - I'm getting a "False ROM signature" and "probe fails" message for each display during boot.
EDIT - IOReg and the ROM from my 9800GTX+ attached.
---
At first I installed the enabler in /Extra/Extensions on my EFI partition, but then I could not boot, even in safe mode.
Luckily I could boot with my Chameleon Boot CD and delete it.
I've installed it in S/L/E with no problems.
Is there anything I can do to get it running from /Extra/Extensions?
I haven't tried sticking it in /Extra/Extensions.mkext.
NVEnabler_ioreg_Gringo_Vermelho.txt.zip ( 173.07K )
Number of downloads: 209
WF10DE0612.ROM.zip ( 40K )
Number of downloads: 115 This post has been edited by Gringo Vermelho: Jun 21 2009, 06:07 PM
Glad to read so good report Gringo Vermelho

We're aware of the kext not loading when put in /Extra, we'll have a look at it for future version.
intel dg31pr
nvidia 9400gt. Installed kext, and worked like a charm.
ioreg:
http://www.box.net/shared/yzryyu2spkDidnt try the two connections yet as I dont have 2 monitors, but I will. Currently using the vga connection.
The only thing that I had found extrange is that when I boot with -v (chamaleon2 rc1) I just get somthing like this:
http://localhostr.com/files/31701f/boot.jpgAfter that I added the ids to the proper kexts / but same happens.
I believe that has to do with the display-cfg string. However I couldnt understand, sorry, how to change it.
http://pastie.org/515090the line:
AwEAAA==
Its a base64 encoded line right?
Sorry if i'm being goofy.
For the hell of it I just tried Netkas' new injector, ATY_init.kext.
It works fine so far, S3 sleep seems to work (when it wants, with the same random fan-noise-followed-by-a-reboot issue noted above) as well, but I lost TV-out of course.
This post has been edited by Gringo Vermelho: Jul 4 2009, 04:37 AM
I've been doing a short test with NVEnabler kext and a sparkle calibe 7600GT. This card has two DVI ports and one TVout connector
Just one monitor plugged through a DVI to VGA adapter:
-When plugged on port 1 (the one closer to the MB) it wont recognize the monitor at all. I've also tryed replacing the Display-cfg values to the 7600GT (imac) posted here. No 'Detect Displays' button aviable
-When plugged on the port 2 it works as it should
-When hot-plug-unplug the monitor the computer freezes
TVout not tested
I attach my ioreg here (one using NVenabler and one using DSDT injection). I hope it helps:
P5K_calibre7600GT_pci_e.zip ( 257.79K )
Number of downloads: 100EDIT:
OK, solved partially using the cfg values from the 7300GT; Computer still freezes when hot-unplug-plug the monitor
BTW, I got the CFG values from a PPC G4 with a 6800GT. The card is a PC card flashed with a reduced mac rom from 'the mac elite wiki' (DVI Enabled, 1.3V Vcore, specific settings for Point of View 6800 GT).
Again I have only one monitor connected through a DVI to VGA adapter, so I had to reboot in between to get both values:
Display A: 013eff00
Display B: 0036ff00
(they are backwards)
These values work on my 7600GT as well.
When theres no monitor connected the port gets 'ffffffff' value
IOREG:
G4_6800GT_PPC.zip ( 99.9K )
Number of downloads: 58 This post has been edited by blackCH: Jun 30 2009, 01:14 PM
Thank you for the display-cfg BlackCH, I updated the 1st post with it. Be careful, on PPC macs, the value is byteswapped, so if we "intelize" them, it should be 00ff3e01 - 00ff3600, ie almost identical to the 7300GT one.
So if you get it working currently with those values injected in reverse, it's more likely thanks to random luck.