Jump to content

Natit Kext for Dual Displays


bofors
 Share

60 posts in this topic

Recommended Posts

Attached is a version of Natit.kext which should work to drive dual displays in extended desktop mode (mirror mode does not appear to work yet).

 

This is almost exactly the same as Dm_webd's 2nd version except one key, "NVCAP", has been added to the kext's Info.plist "entiresToAdd" dictionary.

 

"NVCAP = <04000100 00000300 0c000000 0000000a 00000000 >

 

Please test and post results here.

 

EDIT: This worked for me with a 3D Fusion 7600GS (VGA / DVI) with the two VGA Samsung 712n's using one DVI->VGA adapter.

 

EDIT2: Attached is Natit dual display version 0.02. This adds the "@0,NVMT" key and value.

 

"@0,NVMT = <0a037f20 4c2d1c02 78051a04 4807d005 60060000 41041d04 21040000 f0c14107 00000100 000000ff 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ffff0000 00000000 00000000 01000000 00000000 >

 

EDIT3: This appears to solve the problem with dual DVI cards, it works with my XFX 7600GS.

 

And don't forget to go through all the normal kext installation steps (chown, chmod, rm .mkext, rm .kextcache) when installing this new version.

 

Just follow Omni's instructions (which I have slightly modified):

 

Note: This might only work on 10.4.8: 

Instructions 
- Put Natit kext (remove Titan is necessary) in your /System/Library/Extensions/ folder 
- Correct the file premissions: sudo chown -R root:wheel Natit.kext; sudo chmod -R 755 Natit.kext 
- Remove the cached and packed extensions: sudo rm -f /System/Library/Extensions.mkext /System/Library/Extensions.kextcache 
- reboot.

 

http://omni.starchaser.org/titan/

Natit_Dual_v0.02.zip

Link to comment
Share on other sites

Bofors,

 

Test Results :

 

I have a Syncmaster 225BW Samsung

and 1 Apple Cinema Display 20"

 

Both DVI connected to XFX GeForce 7600 GT

 

With Titan, the Syncmaster worked and the Apple screen was black

 

Now with your modified kext, the apple screen is on, but syncmaster is off.

 

Recognized both screens, but Samsung is not functioning.

 

Also, tried detecting displays on System Pref, unsuccessful.

 

Let me know if there's anything else you need me to test.

 

Synthology

 

GeForce 7600 GT:

 

Chipset Model: GeForce 7600 GT

Type: Display

Bus: PCIe

VRAM (Total): 256 MB

Vendor: NVIDIA (0x10de)

Device ID: 0x0391

Revision ID: 0x00a1

Displays:

Cinema Display:

Display Type: LCD

Resolution: 1680 x 1050

Depth: 32-bit Color

Core Image: Supported

Main Display: Yes

Mirror: Off

Online: Yes

Quartz Extreme: Supported

SyncMaster:

Resolution: 1680 x 1050 @ 60 Hz

Depth: 32-bit Color

Core Image: Supported

Mirror: Off

Online: Yes

Quartz Extreme: Supported

Link to comment
Share on other sites

Test Results :

 

I have a Syncmaster 225BW Samsung

and 1 Apple Cinema Display 20"

 

Both DVI connected to XFX GeForce 7600 GT

Now with your modified kext, the apple screen is on, but syncmaster is off.

 

Thanks for the report, my XFX 7600GS (Dual DVI) should be here tomorrow and I have two DVI Samsung 204BW's to test with as well.

 

So, I should be able to reproduce your results and isolate the problem.

 

I will be back at this tomorrow.

Link to comment
Share on other sites

Let me know if there's anything else you need me to test.

 

Ok, I posted a new version above: Natit dual display version 0.02.

 

I think it might work for you (but have yet to test it on a dual DVI card myself because XFX 7600GS is not here yet).

Link to comment
Share on other sites

Ok, I posted a new version above: Natit dual display version 0.02.

 

I think it might work for you (but have yet to test it on a dual DVI card myself because XFX 7600GS is not here yet).

I can confirm NVMT key is needed too for my dual dvi output 7600GT (although both are analog monitors with DVI->VGA).

Link to comment
Share on other sites

Ok, I posted a new version above: Natit dual display version 0.02.

 

I think it might work for you (but have yet to test it on a dual DVI card myself because XFX 7600GS is not here yet).

 

At boot, it takes about 15 seconds longer to get to the desktop than with single display, however, it does indeed work for both screens.

 

One problem: when you click on detect displays, the syncmaster (my left screen - connected to DVI port closest to the motherboard) goes black and never comes up. My mouse gets very slow and I can't get the syncmaster back again until I pressed my reset button.

 

Also, the syncmaster automatically became my dock and finder display. Which is fine, I figured it should default that way considering its connected to the inner most DVI port.

 

As for detect displays, make sure to test that once you get your XFX card in your box.

 

So far so fantastic. I see this as revolutionary as a new kernel to me. I'm amazed there are not too many people jumping all over this like jack rabbits. Anyway, I shall await further testing instruction.

 

Synthology

Link to comment
Share on other sites

My XFX 7600GS just showed up and I can also confirm that the Natit dual v0.02 works for me too. I am running full dual DVI (no VGA convertors) to two Samsung 204BW at 1680 x 1050.

 

GeForce 7600 GS:

 Chipset Model:	GeForce 7600 GS
 Type:	Display
 Bus:	PCIe
 VRAM (Total):	256 MB
 Vendor:	NVIDIA (0x10de)
 Device ID:	0x0392
 Revision ID:	0x00a1
 Displays:
SyncMaster:
 Resolution:	1680 x 1050 @ 60 Hz
 Depth:	32-bit Color
 Core Image:	Supported
 Main Display:	Yes
 Mirror:	Off
 Online:	Yes
 Quartz Extreme:	Supported
SyncMaster:
 Resolution:	1680 x 1050 @ 60 Hz
 Depth:	32-bit Color
 Core Image:	Supported
 Mirror:	Off
 Online:	Yes
 Quartz Extreme:	Supported

 

However, selecting "Detect Displays" disables a panel. I will be adding the VGA adapters next.

 

EDIT: Ok, this also works using VGA adapters to a VGA displays (Samsung 712n's here).

Link to comment
Share on other sites

What are the exact installation steps...

 

Note: This might only work on 10.4.8:

 

Just follow Omni's instructions (which I have slightly modified):

 

Instructions 
- Put Natit kext (remove Titan is necessary) in your /System/Library/Extensions/ folder 
- Correct the file premissions: sudo chown -R root:wheel Titan.kext; sudo chmod -R 755 Titan.kext 
- Remove the cached and packed extensions: sudo rm -f /System/Library/Extensions.mkext /System/Library/Extensions.kextcache 
- reboot.

 

http://omni.starchaser.org/titan/

 

No luck with a PNY 7900GS running dual DVI to 2 Dell LCDs. The system stays up (I can ping it), but there's no display. Is there any info I can get you to possibly get this config working?

 

Does your 7900 work with Titan or Natit otherwise?

Link to comment
Share on other sites

I don't expect this to work because you have a dual DVI card, but you can try the attached version of Natit which has the "@0,NVMT" key-value pair removed from the Info.plist. You can also try a version which leaves the "@0,NVMT" key-value pair in but removes the "NVCAP" key-value pair instead, but I do not expect that to work either.

 

I think the problem is that either the "@0,NVMT" value or "NVCAP" value (or both) is wrong for the 7900 (somebody with a VGA / DVI could isolated the "@0,NVMT" question by using the attached kext). I do not know what the correct value(s) is either.

 

However, it might be possible to get this value(s) somehow from Windows or Linux driver analysis through something like an IOReg dump. It also might be useful to look an IOReg dump of a Mac Pro with an Nvidia Quadro card to see what the values are there. Finally, you should post (via a text attachment) a IOReg dump from your system both from single-user mode, and after a normal with and without the version of Natit which works for you.

Natit_Dual_v0.01.zip

Link to comment
Share on other sites

np_ would probably be the best way to go about finding out how to auto-EDID. I'm going to try shortly - also check out the read-edid website source >

 

http://john.fremlin.de/programs/linux/read-edid/

 

Code that short has to be easy to port. Only difficulty would be IOKit's integration.

 

Guys - moninfo does NOT report the same EDID that SwitchResX reports. Just thought you should know.

Link to comment
Share on other sites

np_ would probably be the best way to go about finding out how to auto-EDID. I'm going to try shortly - also check out the read-edid website source >

 

http://john.fremlin.de/programs/linux/read-edid/

 

Code that short has to be easy to port. Only difficulty would be IOKit's integration.

I have checked that code and the calls to VBE done there is easy, as real-mode calls are available. I'm not sure about real-mode calls are available in the Mac OS kernel(I doubt it). So my approach will be to try using the VBE/Core 3.0 protected mode interface. But that requires adding entries to the GDT and I haven't written code before to do that.

I have just finished making the headers with the structures needed for the GDT pointer and entries, and I have an idea for the asm code to add the entries. I don't know if it'll work, or crash the system. This code needs to run at ring0 (I would believe the code in a kext is run at this level, but I'm not sure as kernel programming is not something I've done too much of - especially regarding the mac kernel).

I'm off to work now, but as soon as I get home I'll try to make some code to access the GDT, then add entries and hope that it won't crash.

If anyone has more insight into the workings of the GDT and the mac os kernel, I would be very interested in hearing your thoughts about my approach.

Link to comment
Share on other sites

 Share

×
×
  • Create New...