AppleIntelPIIXATA.kext
From M L Vision Network Services Wiki
| Filename: | AppleIntelPIIXATA.kext |
| Extension: | IOATAFamily.kext |
| Overwrite: | Yes |
| Source: | AppleIntelPIIXATA-200.0.1 + Dune |
| Description: | |
| Reason: | Fixes muliple port detection |
Port detection
diff -Naur AppleIntelPIIXATA-200.0.1.orig/AppleIntelPIIXATAHW.h AppleIntelPIIXATA-200.0.1/AppleIntelPIIXATAHW.h
--- AppleIntelPIIXATA-200.0.1.orig/AppleIntelPIIXATAHW.h 2006-05-29 01:18:02.000000000 +1000
+++ AppleIntelPIIXATA-200.0.1/AppleIntelPIIXATAHW.h 2008-02-19 17:40:32.000000000 +1100
@@ -125,6 +125,7 @@
#define kPIIX_PCI_SEC_NATIVE_ENABLED 0x04
#define kPIIX_PCI_SEC_NATIVE_SUPPORTED 0x08
#define kPIIX_PCI_BUS_MASTER_SUPPORTED 0x80
+#define kPIIX_PCI_SATAF5_PI_VALUE 0x85 // SATAF5 PI is read only and always return 85h
#define kPIIX_PCI_PRI_NATIVE_MASK (kPIIX_PCI_PRI_NATIVE_ENABLED | \
kPIIX_PCI_PRI_NATIVE_SUPPORTED)
diff -Naur AppleIntelPIIXATA-200.0.1.orig/AppleIntelPIIXATARoot.cpp AppleIntelPIIXATA-200.0.1/AppleIntelPIIXATARoot.cpp
--- AppleIntelPIIXATA-200.0.1.orig/AppleIntelPIIXATARoot.cpp 2007-06-28 04:17:04.000000000 +1000
+++ AppleIntelPIIXATA-200.0.1/AppleIntelPIIXATARoot.cpp 2008-02-26 12:45:44.000000000 +1100
@@ -423,8 +423,15 @@
switch ( ataChannel )
{
case kPIIX_CHANNEL_PRIMARY:
- if ((pi & kPIIX_PCI_PRI_NATIVE_MASK) == kPIIX_PCI_PRI_NATIVE_MASK)
- {
+
+ // The original Apple code was too restrictive. it wanted always 11b as results.
+ // But the ICH8 or ICH9 second controller support only native mode and
+ // the bit 1 (PNC) is useless and always return 0 (see intel ICH9 datasheet). So result is 01b.
+ // Furthermore Pi interface for second controller is Read Only and is always equal to 85h.
+ // So this is how we will detect our second controller.
+
+ if (((pi & kPIIX_PCI_PRI_NATIVE_MASK) == kPIIX_PCI_PRI_NATIVE_MASK) || pi == kPIIX_PCI_SATAF5_PI_VALUE )
+ {
// Primary channel native mode supported and enabled.
cmdPort = _provider->configRead16( kIOPCIConfigBaseAddress0 );
@@ -448,7 +455,7 @@
break;
case kPIIX_CHANNEL_SECONDARY:
- if ((pi & kPIIX_PCI_SEC_NATIVE_MASK) == kPIIX_PCI_SEC_NATIVE_MASK)
+ if (((pi & kPIIX_PCI_SEC_NATIVE_MASK) == kPIIX_PCI_SEC_NATIVE_MASK) || pi == kPIIX_PCI_SATAF5_PI_VALUE)
{
cmdPort = _provider->configRead16( kIOPCIConfigBaseAddress2 );
ctrPort = _provider->configRead16( kIOPCIConfigBaseAddress3 );
Note: The following changes need to be made to the Xcode project as well as making the XNU headers available.
HEADER_SEARCH_PATHS = ( "/System/Library/Frameworks/Kernel.framework/Headers", "../xnu-1228.0.2/iokit", );