AppleIntelPIIXATA.kext

From M L Vision Network Services Wiki

Jump to: navigation, search


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",
);
Personal tools