sâmbătă, 14 august 2010

NVEnabler By Krazubu

Title: NVEnabler By Krazubu
Version: 0.1b
Compatible with:
10.5.x No
10.6.x (64-bit) Yes
Description/instructions: 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.
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).

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 7300GT : ffff3600 - 00ff3e01
mac pro 8800GT : 03010000 - ffff0001
imac 24" 7600GT : 03035000 - ffff3601
Apple TV 7300Go : 01ff0000
powermac 6800GT : 00ff3e01 - 00ff3600

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) : Attached File ( 27.44K ) Number of downloads: 4155
(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 : Attached File ( 19.77K ) Number of downloads: 6081

1 comentarii:

Anonim spunea...

it's just a shame this piece of shit NVEnabler doesn't work to begin with! So your "BABY" is as worthless as you are!