Jump to content

Generic USB2.0 (EHCI) Driver


orByte
 Share

474 posts in this topic

Recommended Posts

Well for what its worth:

2.5.6a (for 8.4.1) working great for me on a Jas 10.4.9 system (patched from Jas 10.4.8) running the latest NetKas 8.9.1 kernel...

 

Just manually upgraded to 10.4.10.. it does replace the USB family of kexts. On my 975X I lost EHCI again so I will restore pcGenUSBEHCI and report my findings..

Link to comment
Share on other sites

Okay, using the 8.4.1 2.6.4a installer on 10.4.10 did not work for me.. installed okay but after a reboot I was still missing my high speed hub. Reminder: This install did work for me on 10.4.9 so I expect the new IOUSBFamily.kext to be the culprit.. To get EHCI working again I've rolled only the IOUSBFamily.kext back to the 10.4.9 version and have the following (which I expect to be a mix of 10.4.9 and 10.4.10 kexts):

joshuas-computer:~ Joshua$ kextstat | grep PCG

40 0 0x3c465000 0x12000 0x11000 com.orByte.driver.PCGenUSBEHCI (2.6.1) <32 16 5 4 3>

joshuas-computer:~ Joshua$ kextstat | grep USB

32 13 0x3bdb2000 0x1a000 0x19000 com.apple.iokit.IOUSBFamily (2.6.1) <6 5 4 3>

33 0 0x3be09000 0xe000 0xd000 com.apple.driver.AppleUSBUHCI (2.6.0) <32 16 5 4 3>

40 0 0x3c465000 0x12000 0x11000 com.orByte.driver.PCGenUSBEHCI (2.6.1) <32 16 5 4 3>

51 0 0x3cadf000 0x9000 0x8000 com.apple.driver.AppleUSBHub (2.6.0) <32 11>

54 0 0x3ce49000 0x5000 0x4000 com.apple.driver.AppleUSBBluetoothHCIController (1.9f8) <53 32 11>

55 0 0x482a3000 0x3000 0x2000 com.apple.driver.AppleUSBComposite (2.6.1) <32 11>

56 0 0x483ac000 0xa000 0x9000 com.apple.iokit.IOUSBMassStorageClass (1.4.9) <43 32 29 11>

63 0 0x48a41000 0x9000 0x8000 com.apple.iokit.IOUSBUserClient (2.6.0) <32 11>

64 0 0x48a4a000 0x4000 0x3000 com.parallels.kext.ConnectUSB (3.0.0) <32 11 6 5 4 3>

91 1 0x6b4e7000 0x5000 0x4000 com.apple.iokit.IOUSBHIDDriver (2.6.0) <32 21 11>

94 1 0x48b14000 0x2000 0x1000 com.apple.driver.AppleUSBMergeNub (2.6.0) <32 11>

 

Here's what I get trying to manual load 2.6.4a on a 10.4.10 system:

joshuas-computer:/System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns Joshua$ sudo kextload -t /System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/PCGenUSBEHCI.kext/

kextload: extension /System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/PCGenUSBEHCI.kext/ appears to be valid

kld(): Undefined symbols:

__ZN24IOBufferMemoryDescriptor17getVirtualSegmentEmPm

kextload: kld_load_from_memory() failed for module /System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/PCGenUSBEHCI.kext/Contents/MacOS/PCGenUSBEHCI

kextload: a link/load error occured for kernel extension /System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/PCGenUSBEHCI.kext/

load failed for extension /System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/PCGenUSBEHCI.kext/

joshuas-computer:~ Joshua$

Link to comment
Share on other sites

Well for what its worth:

2.5.6a (for 8.4.1) working great for me on a Jas 10.4.9 system (patched from Jas 10.4.8) running the latest NetKas 8.9.1 kernel...

 

Just manually upgraded to 10.4.10.. it does replace the USB family of kexts. On my 975X I lost EHCI again so I will restore pcGenUSBEHCI and report my findings..

 

Odd.. When I tried to use the PCGen driver on 10.4.9, it freaked out and couldn't load the USB kext. What did you have to do to get it to load on 10.4.9?

Link to comment
Share on other sites

:) Good News!! :(

 

I have added the 10.4.9/8.9.1 version here.

 

Best.

 

Wootness! Thanky, thanky!

 

I'd compile if I had more experience with OSX... but although I managed to compile my printer drivers, this is a little bit beyond my scope. Thanks much for the new update. (now 10.4.10, hehe.. no hurry on that since there's not even an update out yet)...

 

When you're compiling for newer kernels, is it mostly just a recompile, or are you having to change much code?

Link to comment
Share on other sites

I get the IOUSBFamily-270.4.1 installer from Apple, but it only has v2.6.5 of the IOUSBFamily.kext with it. Trying to use this with 10.4.9/8.9.1, and the only changes are a couple of extra errors on bootup.

Link to comment
Share on other sites

Wootness! Thanky, thanky!

 

When you're compiling for newer kernels, is it mostly just a recompile, or are you having to change much code?

 

You have to change a number of things, without which the code will not compile. Here they are:

 

(1) Time handling macros. You would either need to retrieve these and create a new header file, or expand the macros in source. Also, you would need to cast time variables. If you diff my code against Apple's you ll see expanded macros and the casts.

 

The last version that had the Macro's somewhere I think it was the 10.3.9 sdk/Sys/Lib/Frm/K.F/V/A/H/kern/clock.h.

 

(2) Updated Kernel.Framework/IOKIT/usb header files. Generally speaking the updated header files are included in the project. But you would need to apply them to the System headers, or specify a local path.

 

(3) Function call/privacy scope changes. Usually these will also be in the included System headers. Spotlight, as well Apple's developer site are very helpful in tracking down what needs to be done.

 

EDIT: (4) If starting with Apple's code, you would also need to upgrade the whole project to Native & switch USBProber (Upgraded Target)>Build > GCC from 3.3 to 4.

 

Best

 

I get the IOUSBFamily-270.4.1 installer from Apple, but it only has v2.6.5 of the IOUSBFamily.kext with it. Trying to use this with 10.4.9/8.9.1, and the only changes are a couple of extra errors on bootup.

 

Yes, not everything in 270.4.1 is v.270. Some items are 2.6.5. That's fine.

 

$ kextstat | grep -i USB
  30	8 0x2cb9e000 0x1a000	0x19000	com.apple.iokit.IOUSBFamily (2.6.5) <6 5 4 3>
  31	0 0x2cbe5000 0xe000	 0xd000	 com.apple.driver.AppleUSBUHCI (2.7.0) <30 16 5 4 3>
  32	0 0x2cf61000 0x12000	0x11000	com.orByte.driver.PCGenUSBEHCI (2.7.0) <30 16 5 4 3>
  37	0 0x2d1cc000 0x9000	 0x8000	 com.apple.driver.AppleUSBHub (2.6.5) <30 11>
  47	0 0x2d51f000 0x3000	 0x2000	 com.apple.driver.AppleUSBComposite (2.6.5) <30 11>
  48	0 0x2d5d2000 0xa000	 0x9000	 com.apple.iokit.IOUSBMassStorageClass (1.4.7) <38 35 30 11>
  50	0 0x2d733000 0x5000	 0x4000	 com.apple.iokit.IOUSBHIDDriver (2.6.5) <30 20 11>
  56	0 0x2d7c7000 0x9000	 0x8000	 com.apple.iokit.IOUSBUserClient (2.7.0) <30 11>

 

Best

 

EDIT:

PS.

Almost forgot... Anybody who wants to compile, should re-download the package. Sorry bout that. I had accidentally uploaded an unfinished source version, which does not include all of the mods.

Link to comment
Share on other sites

New version worked great until I applied latest Apple software update (QT7.1.6 and Security 2007-06). Now I got an error msg says PCGenUSBEHCI is not properly installed.

 

Fixed!

 

I checked the version of IOUSBFamily.kext and it's the old version 2.6.5. So I download and install the latest kext from Apple, remove the AppleUSBEHCI.kext, no more error after reboot. However when I check the version, it's still 2.6.5?

 

Update

 

When I inserted a 4gb SD (not SDHC) card into USB reader, LED light on reader went out, nothing was mounted and system couldn't shut down normally. After reset I got that error msg again, and reader recognized as USB device (not high speed USB) but it can read the 4gb card. To get USB2 back I removed kext cache and restart.

 

My 512MB SD card doesn't cause such problem (losing USB2) though.

Link to comment
Share on other sites

Thanks for your effort orByte!

 

When using the combination of versions for the kexts you mentioned I get the usb mass storage device to show up as /dev/disk2 and in system log it writes "disk2: I/O error.". I get the same as a poster above when connecting the device and entering Systeminformation, when I click USB it just waites and loads.

 

Im running the 8.10.1 kernel so perhaps thats the problem?

 

I have a K8T800 Pro chipset if thats helpful in anyway.

 

Perhaps it could be of help if people write down their hardware besides reporting what works and what not.

 

Edit: Didnt work with 8.9.1 kernel.

Link to comment
Share on other sites

my comp is acer aspire 9503 series with intel chipset...

(my knowledge with driver compiling is 0 :P)

 

i did everything that is said in install still cant get it work, USBF: the bla bla bla memory message -- not working...

 

i was just wondering, if there is any way/any place to match vendor&device ids? like the ones for detecting some undetected hardwares normaly done for audio & lan & wifi drivers etc...

 

bcoz i think this acpi system & usb2 controllers issues somehow quite painfull as they re closed boxes

 

i have 2 laptops at home and one has no problem at all with acpi or usb2 (toshiba qosmio) and other has serious issues starting even from dvd for install ;) (acer aspire 9500 series) i after so much painfull process of all manual install this install that upgrade this upgrade that process managed to install the 10.4.9 (uphuck 1.3) - to speak to date i couldnt get the usb2 work at none of the installations with all pcgenusb s... 10.4.6->10.4.9 (no success)

 

can we do the same trick here? would it be possible to retrieve the controller by matching its ven&dev ids? just a noob idea if it is too stupid one :)

i ask this bcoz from windows if i check vendor id and dev ids for usb controllers... there are many and all different...

 

thanx for the great work as well...

Link to comment
Share on other sites

my comp is acer aspire 9503 series with intel chipset...

(my knowledge with driver compiling is 0 :whistle:)

 

i did everything that is said in install still cant get it work, USBF: the bla bla bla memory message -- not working...

 

i was just wondering, if there is any way/any place to match vendor&device ids? like the ones for detecting some undetected hardwares normaly done for audio & lan & wifi drivers etc...

 

bcoz i think this acpi system & usb2 controllers issues somehow quite painfull as they re closed boxes

 

i have 2 laptops at home and one has no problem at all with acpi or usb2 (toshiba qosmio) and other has serious issues starting even from dvd for install :boxing: (acer aspire 9500 series) i after so much painfull process of all manual install this install that upgrade this upgrade that process managed to install the 10.4.9 (uphuck 1.3) - to speak to date i couldnt get the usb2 work at none of the installations with all pcgenusb s... 10.4.6->10.4.9 (no success)

 

can we do the same trick here? would it be possible to retrieve the controller by matching its ven&dev ids? just a noob idea if it is too stupid one :D

i ask this bcoz from windows if i check vendor id and dev ids for usb controllers... there are many and all different...

 

thanx for the great work as well...

Memory error message - if it is the one I think it is, this means the driver will not work period. It is not a matching issue. See my earlier post about the 'kiss of death'

 

Best.

Link to comment
Share on other sites

Thanx for the reply m8, i m trying to find and read your post about this kiss of death issue,

 

by the way the actual message says something like unable to get device memory and next line giving error (0xe00002be) or stg like that :huh:

 

i guess it is the same memory message u r talking about...

 

 

=======

I found ur post about the issue m8, i know what you mean by period but just trying to figure out how can we get it to work? bcoz b4 someone came up with an idea we were not able to use audios, and got fixed, same as vgas and mobos and patas and satas and all others... dont get me wrong m8 just trying to create some ideas to help find a solution instead of death end :huh:

 

 

It is giving the error messages and details about addresses of the issue? cant we do anytg about it with that info?

 

Second question is the way drivers work (i m not an expert about compiling a driver but!), i believe the hardwares are sending their ven&dev ids somewhow (dunno the technical way of saying it) and that our OS tries to find right match for it from its database of drivers, eg, while our graphic card doesnt work as it is, wen we add specific ven&dev ids it suddenlys gets recognized same as some audio and lan nics and wifi nics and all other etc...

 

so why is it not possible to use the same trick here with usb issue as well bcoz it has its own ven&dev ids as with all other hardwares...

 

cheers and thanx all for their efforts...

Link to comment
Share on other sites

It is giving the error messages and details about addresses of the issue? cant we do anytg about it with that info?

 

so why is it not possible to use the same trick here with usb issue as well bcoz it has its own ven&dev ids as with all other hardwares...

 

cheers and thanx all for their efforts...

 

The device/vendor is being recognized, the error occurs when the driver loads. If I remember correctly, it occurs early in the driver initialization cycle. In terms of fixing it, you could download the PCGen source code, do a search for the error message, and then debug to sort it out. Very likely you would need to write a patch that allows device memory to be recognized. The issue could be related to PCI bus specifications or something else.

 

AppleUSBEHCI.cpp

		if (!(_deviceBase = provider->mapDeviceMemoryWithIndex(0)))
	{
		USBError(1, "AppleUSBEHCI[%p]::UIMInitialize - unable to get device memory",  this);
		err = kIOReturnNoResources;
		break;
	}

 

This is what needs to be sorted, and it would take someone like yourself who has the error to debug and test it.

 

Best

Link to comment
Share on other sites

Oh... I can not access the link that OrByte gives (sendspace.com). .. ;).... Would anybody tell me where I can get the PCGenUSBEHCI.270.zip in other place ? Or send the file to dean.apple@gmail.com Much Thanks.

Link to comment
Share on other sites

this might be a noob question, is there any way to convert windows (eg XP) drivers to OS X drivers?

 

would it be possible? or not?

 

if yes, how?

if not, why?

thanx...

 

This is a very difficult road. If the driver hardware specs are open, then it would be best to write the driver from scratch. If the driver hardware specs are closed, or not accessible to you, you would need to reverse engineer the windows driver using a decompiler. The decompiler will likely produce low level C/assembly mix code. This approach is known as 'dirty room' reverse engineering. There is also 'clean room' reverse engineering in which people observe the known behaviour of the driver, and from that create functional specifications for the target OS. Typically the clean and dirty rooms work independently of each other but are supervised by the project manager, who coordinates their efforts. From there, you would be looking to gather all information on hardware registers, control constants, and hardware specific interaction functions - and use these to build up your own specification document. Then, from that document you go ahead and write the driver (pretty much from scratch). You might ask why? Each OS has its own logic and approach to dealing with hardware. Therefore once you have the hardware specs, one needs to use the specific call style and grammar of the target OS.

 

Best.

Link to comment
Share on other sites

This is a very difficult road. If the driver hardware specs are open, then it would be best to write the driver from scratch. If the driver hardware specs are closed, or not accessible to you, you would need to reverse engineer the windows driver using a decompiler. The decompiler will likely produce low level C/assembly mix code. This approach is known as 'dirty room' reverse engineering. There is also 'clean room' reverse engineering in which people observe the known behaviour of the driver, and from that create functional specifications for the target OS. Typically the clean and dirty rooms work independently of each other but are supervised by the project manager, who coordinates their efforts. From there, you would be looking to gather all information on hardware registers, control constants, and hardware specific interaction functions - and use these to build up your own specification document. Then, from that document you go ahead and write the driver (pretty much from scratch). You might ask why? Each OS has its own logic and approach to dealing with hardware. Therefore once you have the hardware specs, one needs to use the specific call style and grammar of the target OS.

 

Best.

 

thanx mate, it appears that people with {censored} laptop bios will have to wait long time in order for ehci driver to read whatever memory it is looking for.. in order to work properly... otherwise it will be impossible to write our own with average joe knowledge...

 

good information but to average joe it means nice lemonade :rolleyes:

 

cheers...

Link to comment
Share on other sites

 Share

×
×
  • Create New...