Jump to content

Marvell Yukon 8001 - the driver


m.musashi
 Share

409 posts in this topic

Recommended Posts

m.musashi:

In an attempt to make installation easier I created a package installer from the "skge.kext.02d.zip" archive.

 

Tested installation (since in my actual case I didn't need to edit the plist for it to work) and then started examining the plist file and am now wondering why you didn't add additional profiles to cover the other vendor ID's?

 

You do realize you can do something like the following: (probably better example exists in the Extension dir)

	<key>IOKitPersonalities</key>
<dict>
	<key>skge1/key>
	<dict>
		<key>CFBundleIdentifier</key>
		<string>com.musashi.skge1/string>
		<key>DescriptorPoolTimer</key>
		<integer>250</integer>
		<key>EnableLowPwr</key>
		<integer>0</integer>
		<key>IOClass</key>
		<string>skgeosx</string>
		<key>IOKitDebug</key>
		<integer>65535</integer>
		<key>IOMatchCategory</key>
		<string>skge1/string>
		<key>IOPCIPrimaryMatch</key>
		<string>0x432011AB</string>
		<key>IOProviderClass</key>
		<string>IOPCIDevice</string>
		<key>IOResourceMatch</key>
		<string>IOKit</string>
		<key>Model</key>
		<string>Yukon-88E8001</string>
		<key>RxRingSize</key>
		<integer>256</integer>
		<key>TxRingSize</key>
		<integer>256</integer>
		<key>Vendor</key>
		<string>Marvell</string>
		<key>WaitForLinkUp</key>
		<integer>6000</integer>
		<key>WaitToCheckDelay</key>
		<integer>10000</integer>
	</dict>
	<key>skge2/key>
	<dict>
		<key>CFBundleIdentifier</key>
		<string>com.musashi.skge2/string>
		<key>DescriptorPoolTimer</key>
		<integer>250</integer>
		<key>EnableLowPwr</key>
		<integer>0</integer>
		<key>IOClass</key>
		<string>skgeosx</string>
		<key>IOKitDebug</key>
		<integer>65535</integer>
		<key>IOMatchCategory</key>
		<string>skge2/string>
		<key>IOPCIPrimaryMatch</key>
		<string>0x432011AB</string>
		<key>IOProviderClass</key>
		<string>IOPCIDevice</string>
		<key>IOResourceMatch</key>
		<string>IOKit</string>
		<key>Model</key>
		<string>Yukon-88E8001</string>
		<key>RxRingSize</key>
		<integer>256</integer>
		<key>TxRingSize</key>
		<integer>256</integer>
		<key>Vendor</key>
		<string>Marvell</string>
		<key>WaitForLinkUp</key>
		<integer>6000</integer>
		<key>WaitToCheckDelay</key>
		<integer>10000</integer>
	</dict>
	<key>skge3</key>
	<dict>
		<key>CFBundleIdentifier</key>
		<string>com.musashi.skge3</string>
		<key>DescriptorPoolTimer</key>
		<integer>250</integer>
		<key>EnableLowPwr</key>
		<integer>0</integer>
		<key>IOClass</key>
		<string>skge3osx</string>
		<key>IOKitDebug</key>
		<integer>65535</integer>
		<key>IOMatchCategory</key>
		<string>skge3</string>
		<key>IOPCIPrimaryMatch</key>
		<string>0x432011AB</string>
		<key>IOProviderClass</key>
		<string>IOPCIDevice</string>
		<key>IOResourceMatch</key>
		<string>IOKit</string>
		<key>Model</key>
		<string>Yukon-88E8001</string>
		<key>RxRingSize</key>
		<integer>256</integer>
		<key>TxRingSize</key>
		<integer>256</integer>
		<key>Vendor</key>
		<string>Marvell</string>
		<key>WaitForLinkUp</key>
		<integer>6000</integer>
		<key>WaitToCheckDelay</key>
		<integer>10000</integer>
	</dict>
</dict>

All vendor ID's are the same because I didn't have the info to add it but you get the idea.

 

Here's the package Marvell.Gigabit.pkg.zip

Link to comment
Share on other sites

  • 2 weeks later...

Please guys help me...

 

I'm a noob in Mac OS and I need to make the ethernet card to work.

 

 

I got the skge.kext and used it, but still no good

 

my motherboard is an asus p4p800 with 3com gigabit lom (3c940) network board

 

i changed the info.plist vendor id to 0x170010B7 , the model to 3c940 and the vendor to 3com but it didn't work

 

i got no skeg lines in dmesg.... the only thing i could find was a line with

 

ethernet: family specific matching fails

 

What did I do wrong??? please help me!!

Link to comment
Share on other sites

source code attached for those brave enough to plunge into the depth of IOKit :)

 

some notes to clear a couple of points:

- I have not changed the plist to include all ven/devids as I believe this is still a hackers environment. If you don't know how to modify a plist and load a kext manually then you shouldn't be using Mac OSX on x86. That's IMHO.

- For better version management and for the best interest of users (i.e. avoid confusion), I believe it would be a good thing to keep future versions of the driver in this thread. As stated in the first msg, email the source to me and I'll attach it in the first page with your name and all. Assuming it works of course.

 

bye

Link to comment
Share on other sites

Guest BuildSmart
Here's the driver I've put together to support the Marvell Yukon 88E8001.

Hopefully you have the time now to adjust the source cause when I did have a machine with the card and the time, the source wasn't available.

 

I believe you can set this up easily as done in the AppleGMACEthernet driver with something like

// in skge.h (public:)
bool		fBuiltin;			// UniN builtin = 1; PCI card = 0
bool		fYukon;

// in your start(), also see: UniNEnet::wakeUp() in AppleGMACEthernet.
// you could use the names you list in skge_chips() as match names.
fBuiltin	= matchEntry->isEqualTo( "yukonosx" ) || matchEntry->isEqualTo( "Yukon");
fYukon	= matchEntry->isEqualTo( "Yukon-LP") || matchEntry->isEqualTo( "Yukon-Lite"); // alternate PHY ID's

of course you'll have to adjust your detection to match names on hardware and PCI and don't forget to mark the controller as enabled (and disabled).

	netifEnabled = true;	/* Mark the controller as enabled by the interface.	*/

	netifEnabled = false;	/* Mark the controller as disabled by the interface.	*/

as you start (and stop) the interface.

 

Of course this is incomplete but it does provide a generalized concept to work from.

Link to comment
Share on other sites

Guest BuildSmart

I am unable to confirm any more at this time other than using ARD to see the issue however it warrants looking into further to determine if it is a conflict of some kind with dual cards installed or that the MTU size cannot be changed.

 

I was not permitted enough access to change any settings on en0 so I have no idea if the problem exists there as well.

 

As reported and viewed (due to a customization requirement of the second ethernet MTU of 700), the issue has to do with manually setting the MTU size in the Network preferences and despite the setting change, the size remains at 1500 and the application notes the 1500 and complains with an alert that it has not been set to 700 and clicking OK quits the applications and opens the Network preference to have the user set it.

 

Since the settings don't seem to be taking effect, it's an endless loop I thought I'd take a quick look and see if anything jumped out at me but other than some unrelated warnings nothing really looked out of place.

 

I also had build issues within the ADE (Apple Developer Environment) due to the Kernel framework (reworked this to the IOKit framework) and ended up repackaging the project with a package maker phase.

 

I've tested it in the x86 OS using the standard XCode and it seems to build OK there and I also noticed some warning that needed attention so I adjusted those as well.

 

I was curious about your struct implemntation with skge_chips but figured you knew more about your intened purpose so I left it alone.

 

Here's a quick diff on some of the source changes/corrections:

--- /skge_02d/skge.cpp 2006-08-23 01:54:00.000000000 -0400
+++ /SKGE/skge.cpp  2006-08-23 14:03:38.000000000 -0400
@@ -204,7 +204,7 @@

	super::free(); 
	if(d_rx_mbuf!=0 || d_tx_mbuf!=0) {
-			   IOLog("%s ERR: leaking rx_mbuf:%d tx_mbuf:%d\n",getName()),d_rx_mbuf,d_tx_mbuf;
+			   IOLog("%s ERR: leaking rx_mbuf:%d tx_mbuf:%d\n",getName(),d_rx_mbuf,d_tx_mbuf);
	}
//	 IOLog("free() <===\n"); 

@@ -315,7 +315,7 @@
	}
	while ( false );

-	   IOLog("%s : checking rx_mbuf:%d tx_mbuf:%d\n",getName()),d_rx_mbuf,d_tx_mbuf;
+	   IOLog("%s : checking rx_mbuf:%d tx_mbuf:%d\n",getName(),d_rx_mbuf,d_tx_mbuf);
	IOLog("%s: Disabled!\n", getName());
//	 IOLog("disable() <===\n"); 
	return ( ret ? kIOReturnSuccess : kIOReturnIOError );
@@ -380,7 +380,7 @@

			if ( txActiveCount > TRANSMIT_QUEUE_LENGTH )
			{
-					   IOLog( "%s ERR: ouputPacket() stall %d:%d:%d\n", getName(), txActiveCount, txHead, txTail );
+					   IOLog( "%s ERR: ouputPacket() stall %d:%d:%d\n", getName(), (int) txActiveCount, (int) txHead, (int) txTail );
					netStats->outputErrors++;
					return kIOReturnOutputStall;
			}
@@ -757,7 +757,7 @@
	bytes = (DEFAULT_RX_RING_SIZE + 1)* sizeof(struct skge_rx_desc);
	rx_md = IOBufferMemoryDescriptor::withOptions(kIOMemoryPhysicallyContiguous, bytes, PAGE_SIZE );
	if ( rx_md ==0 || rx_md->prepare() != kIOReturnSuccess ) {
-			   IOLog("%s ERR: RX can't allocate %d contiguous bytes\n", getName(), bytes);
+			   IOLog("%s ERR: RX can't allocate %d contiguous bytes\n", getName(), (int) bytes);
			return false;
	}
	rx_desc_ring = (skge_rx_desc *) rx_md->getBytesNoCopy();		//Returns a reference to the OSData object's internal data buffer
@@ -769,7 +769,7 @@
	bytes = (DEFAULT_TX_RING_SIZE + 1)* sizeof(struct skge_tx_desc);
	tx_md = IOBufferMemoryDescriptor::withOptions(kIOMemoryPhysicallyContiguous,bytes,PAGE_SIZE );
	if ( tx_md ==0 || tx_md->prepare() != kIOReturnSuccess ) {
-			   IOLog("%s ERR: TX can't allocate %d contiguous bytes\n", getName(), bytes);
+			   IOLog("%s ERR: TX can't allocate %d contiguous bytes\n", getName(), (int) bytes);
			return false;
	}
	tx_desc_ring = (skge_tx_desc *) tx_md->getBytesNoCopy();		//Returns a reference to the OSData object's internal data buffer
@@ -941,9 +941,6 @@
					}
			}

-irq_done:
-			   skge_write32(B0_IMSK, intr_mask);
-//			 IOLog("interruptOccurred() <===\n"); 
	}
}

@@ -984,7 +981,7 @@
//					 myerr = +1;
			if (rx_desc_ring[ i ].status & GMR_FS_RX_OK == 0)	   //bad_phy_status(status) for CHIP MARVELL only 
					myerr = +1;
-			   if ((rx_desc_ring[ i ].status >> GMR_FS_LEN_SHIFT) != len)	  //phy_length(status) for CHIP MARVELL only 
+			   if ((rx_desc_ring[ i ].status & GMR_FS_LEN_SHIFT) != (unsigned int) len)		//phy_length(status) for CHIP MARVELL only 
					myerr = +1;
			//reject bad packets
			if (myerr){

 

I've attached the new package and when you tell me you've grabbed it I'll edit the post and remove it after you let me know you have it (I don't need any credit).

 

The Info.plist has been removed and is generated (editable from within the package TARGETS->SKGE).

 

PLEAE NOTE:

THIS SOURCE PACKAGE IS NOT INTENDED FOR USE BY ANYONE OTHER THAN THE ORIGINAL AUTHOR.

IT WILL MORE THAN LIKELY BE MODIFIED EVEN MORE SO PLEASE DO NOT DOWNLOAD.

NO SUPPORT FOR THIS CODE OR IT'S GENERATED BINARY WILL BE PROVIDED BY MYSELF OR THE AUTHOR!!!

SKGE.zip

Link to comment
Share on other sites

Firstly, thanks to musashi and all involved in the development of the skge extension. I'd like to report some strange behaviour after I installed skge.ext 0.2d.

 

M/B: Asrock ConroeXfire-eSata2 with a Core 2 Duo E6600

GBLan: Dlink DGE-530T(88E8003-LKJ) PCI card

OSX: Fresh install from the recently available JaS 10.4.7 DVD

SKGE: skge.kext 0.2d

HD: WD 250GB SATA2

 

My IDE bios setting is set to Native/AHCI. OSX installs fine and runs fine. I install skge.kext 0.2d(after editing Info.plist, deleted Extensions.kextcache & Extensions.mkext) and reboot.

 

The result is "Waiting for root device".

 

I have to change my IDE bios setting to Native/IDE to overcome this. Now OSX will boot up OK and 100mbit network works fine via DHCP or manual IP setting. I also noticed some strange errors in dmesg output regarding failed pcimatches. Despite this OSX seems to be working fine.

 

If I "rm -R /System/Library/Extensions/skge.kext", things return to what it was before I installed skge. So clearly skge.kext is having an effect on OSX.

 

ethernet: family specific matching fails

SBRG: family specific matching fails

IDE0: family specific matching fails

IDE1: family specific matching fails

EUSB: family specific matching fails

P0P4: family specific matching fails

P0P8: family specific matching fails

P0P9: family specific matching fails

ethernet: family specific matching fails

USB0: family specific matching fails

USB1: family specific matching fails

USB2: family specific matching fails

USB3: family specific matching fails

pci8086,27da: family specific matching fails

pci8086,27d8: family specific matching fails

pci8086,2770: family specific matching fails

Matching service count = 1

skgeosx::probe(ethernet)

skgeosx::start(ethernet) <1>

skgeosx: SKGE for OSx86 v0.2d ---- M.Musashi ©2006

skgeosx: VendorID:1186 DeviceID:4c00 Rev:11

skgeosx: board is Yukon

I have attached both dmesg output before & after skge installation.

dmesg_before_skge_install.txtdmesg_after_skge_install.txt

Thanks,

 

mir...

Link to comment
Share on other sites

Firstly, thanks to musashi and all involved in the development of the skge extension. I'd like to report some strange behaviour after I installed skge.ext 0.2d.

 

M/B: Asrock ConroeXfire-eSata2 with a Core 2 Duo E6600

GBLan: Dlink DGE-530T(88E8003-LKJ) PCI card

OSX: Fresh install from the recently available JaS 10.4.7 DVD

SKGE: skge.kext 0.2d

HD: WD 250GB SATA2

 

My IDE bios setting is set to Native/AHCI. OSX installs fine and runs fine. I install skge.kext 0.2d(after editing Info.plist, deleted Extensions.kextcache & Extensions.mkext) and reboot.

 

The result is "Waiting for root device".

 

I have to change my IDE bios setting to Native/IDE to overcome this. Now OSX will boot up OK and 100mbit network works fine via DHCP or manual IP setting. I also noticed some strange errors in dmesg output regarding failed pcimatches. Despite this OSX seems to be working fine.

 

If I "rm -R /System/Library/Extensions/skge.kext", things return to what it was before I installed skge. So clearly skge.kext is having an effect on OSX.

 

ethernet: family specific matching fails

SBRG: family specific matching fails

IDE0: family specific matching fails

IDE1: family specific matching fails

EUSB: family specific matching fails

P0P4: family specific matching fails

P0P8: family specific matching fails

P0P9: family specific matching fails

ethernet: family specific matching fails

USB0: family specific matching fails

USB1: family specific matching fails

USB2: family specific matching fails

USB3: family specific matching fails

pci8086,27da: family specific matching fails

pci8086,27d8: family specific matching fails

pci8086,2770: family specific matching fails

Matching service count = 1

skgeosx::probe(ethernet)

skgeosx::start(ethernet) <1>

skgeosx: SKGE for OSx86 v0.2d ---- M.Musashi ©2006

skgeosx: VendorID:1186 DeviceID:4c00 Rev:11

skgeosx: board is Yukon

I have attached both dmesg output before & after skge installation.

dmesg_before_skge_install.txtdmesg_after_skge_install.txt

Thanks,

 

mir...

 

I just got up and running with the Yukon driver. Thank you very much. It must have taken a lot of time, hopefully we can repay you somehow (paypal?).

 

Attached you will find my dmesg log, which is showing the same behavior as the quoted post above from miramar.

 

M/B: ASUS A8V Deluxe with an AMD64 3000 / 939

GBLan: Marvell Yukon 88E8001 built-in

OSX: Fresh install 10.4.5 from the myzar DVD

skgeosx: SKGE for OSx86 v0.2d ---- M.Musashi ©2006

skgeosx: VendorID:11ab DeviceID:4320 Rev:13

skgeosx: board is Yukon-Lite

 

Also, if the permissions on the SKGE kext file is not set to User: "System", Group: "Wheel", i couldn't get it to load or see it in the Network panel.

Saved_Terminal_Output.txt

Link to comment
Share on other sites

These work brilliantly. Well done gentlemen and thank you so much. All of my other OSX installs and configurations have been a lot easier than on this machine for my brother and you have supplied the missing link. Thanks again. Respect. :):D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D

Link to comment
Share on other sites

buildsmart: thanks for the debug. I've downloaded the zip file

 

Guys, at the moment I'm too busy with my real life job and don't have any time to devote to this project or to Osx86 in general. The driver works and that's fine at the moment.

 

As soon as I'll have a couple of spare hours I'll integrate Buildsmart comments (debug and built-in detection routine) and will release a new version of the driver.

 

In the meantime, have fun!

 

bye

 

 

 

hopefully we can repay you somehow (paypal?).

 

No need, but thanks anyway :compress:

 

Attached you will find my dmesg log, which is showing the same behavior as the quoted post above from miramar.

behaviour is normal with this "debug" release of the driver; it's not an indication the driver is not working, quite the opposite

 

Also, if the permissions on the SKGE kext file is not set to User: "System", Group: "Wheel", i couldn't get it to load or see it in the Network panel.

this also is perfectly normal: it happens with all kexts

Link to comment
Share on other sites

This driver has been working great for me over the last month or so. I was tweaking my network though, and noticed that jumbo frames (MTU 9000) isn't available in the advanced network settings.

I dont mean to be demanding at all, cause i'm greatful for the time donated to this project, but is it possible to enable that feature? From what i understand this will increase network efficiency on big file transfers.

Cheers,

IAN

Link to comment
Share on other sites

  • 3 weeks later...
 Share

×
×
  • Create New...