QUOTE (Slice @ Sep 1 2009, 08:02 AM)

There are some problems solved in my IOUSBFamily
1. Ownership. Solved by orByte. I just copy his method from version to version. I don't know if it is possible to inject.
2. Errata workaround for different deviceID. With DSDT patch seems to be possible to inject mac-native deviceID. This method used in Chameleon 2. It is not always good but sometimes works.
3. Sleep support if though chipset reports no possible. Nontheless the method works. It is not injectable.
Till now I can't make Snow version of the IOUSBFamily because I have problems to install it. Some programmer can take my diff file and apply it to Snow sources. Why not?
never mind, i found out that there is a dsdt way to have uhci and ehci as built-in for all ich9/R , and the great new is that i still have sleep with those methods, errata values are not 0x00 anymore
it's described
here and
here , by zhell and apexDE
in fact the method is very strange, it consist to inject ich10 usb ids to the ich9/R usb devices in dsdt, since ich10 is supported natively and ich10 ids are present in the vanilla iousb kext and sub-kexts, i suspect a bad device id detection in this driver, that able us to completely fool the system with dsdt
the second method was stolen to voodoousbehci, this one consist to inject "AAPL,clock-id" to the ehci devices
the merge of those methods, give me all usb port uhci et ehci as built-in, only by dsdt
for now it's reported to work only with ich9/R, but i can't test other platform since i don't have other pc
here is my dsdt usb part:
CODE
Device (UHC1)
{
Name (_ADR, 0x001D0000)
Method (_S3D, 0, NotSerialized)
{
If (LEqual (OSFL, 0x02))
{
Return (0x02)
}
Return (0x03)
}
Name (_PRW, Package (0x02)
{
0x03,
0x03
})
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x02)
{
"device-id",
Buffer (0x04)
{
0x34, 0x3A, 0x00, 0x00
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
}
Device (UHC2)
{
Name (_ADR, 0x001D0001)
Method (_S3D, 0, NotSerialized)
{
If (LEqual (OSFL, 0x02))
{
Return (0x02)
}
Return (0x03)
}
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x02)
{
"device-id",
Buffer (0x04)
{
0x35, 0x3A, 0x00, 0x00
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
Name (_PRW, Package (0x02)
{
0x04,
0x03
})
}
Device (UHC3)
{
Name (_ADR, 0x001D0002)
Method (_S3D, 0, NotSerialized)
{
If (LEqual (OSFL, 0x02))
{
Return (0x02)
}
Return (0x03)
}
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x02)
{
"device-id",
Buffer (0x04)
{
0x36, 0x3A, 0x00, 0x00
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
Name (_PRW, Package (0x02)
{
0x0C,
0x03
})
}
Device (UHC4)
{
Name (_ADR, 0x001A0000)
Method (_S3D, 0, NotSerialized)
{
If (LEqual (OSFL, 0x02))
{
Return (0x02)
}
Return (0x03)
}
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x02)
{
"device-id",
Buffer (0x04)
{
0x37, 0x3A, 0x00, 0x00
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
Name (_PRW, Package (0x02)
{
0x0E,
0x03
})
}
Device (UHC5)
{
Name (_ADR, 0x001A0001)
Method (_S3D, 0, NotSerialized)
{
If (LEqual (OSFL, 0x02))
{
Return (0x02)
}
Return (0x03)
}
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x02)
{
"device-id",
Buffer (0x04)
{
0x38, 0x3A, 0x00, 0x00
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
Name (_PRW, Package (0x02)
{
0x05,
0x03
})
}
Device (UHC6)
{
Name (_ADR, 0x001A0002)
Method (_S3D, 0, NotSerialized)
{
If (LEqual (OSFL, 0x02))
{
Return (0x02)
}
Return (0x03)
}
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x02)
{
"device-id",
Buffer (0x04)
{
0x39, 0x3A, 0x00, 0x00
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
Name (_PRW, Package (0x02)
{
0x20,
0x03
})
}
Device (EHC1)
{
Name (_ADR, 0x001D0007)
Method (_S3D, 0, NotSerialized)
{
If (LEqual (OSFL, 0x02))
{
Return (0x02)
}
Return (0x03)
}
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x06)
{
"AAPL,clock-id",
Buffer (One)
{
0x01
},
"device_type",
Buffer (0x05)
{
"EHCI"
},
"device-id",
Buffer (0x04)
{
0x3A, 0x3A, 0x00, 0x00
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
Name (_PRW, Package (0x02)
{
0x0D,
0x03
})
}
Device (EHC2)
{
Name (_ADR, 0x001A0007)
Method (_S3D, 0, NotSerialized)
{
If (LEqual (OSFL, 0x02))
{
Return (0x02)
}
Return (0x03)
}
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x06)
{
"AAPL,clock-id",
Buffer (One)
{
0x02
},
"device_type",
Buffer (0x05)
{
"EHCI"
},
"device-id",
Buffer (0x04)
{
0x3C, 0x3A, 0x00, 0x00
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
Name (_PRW, Package (0x02)
{
0x0D,
0x03
})
}
and here is my real ids:
CODE
00:1a.0 USB Controller [0c03]: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #4 [8086:2937] (rev 02)
00:1a.1 USB Controller [0c03]: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #5 [8086:2938] (rev 02)
00:1a.2 USB Controller [0c03]: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #6 [8086:2939] (rev 02)
00:1a.7 USB Controller [0c03]: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #2 [8086:293c] (rev 02)
00:1d.0 USB Controller [0c03]: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 [8086:2934] (rev 02)
00:1d.1 USB Controller [0c03]: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2 [8086:2935] (rev 02)
00:1d.2 USB Controller [0c03]: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #3 [8086:2936] (rev 02)
00:1d.7 USB Controller [0c03]: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #1 [8086:293a] (rev 02)
of course the usb ids that i can seen on my ioreg dump are the ich10 one, it's strange but it works
ps: note that the chameleon usb patches have no effect on my system
ps2: i will try to compile iousbfamily with your patch on snow leo