@@ -484,7 +484,7 @@ Return Value:
484484 DebugPrint ((1 ,
485485 "IssueIdentify: DRQ never asserted (%x). Error reg (%x)\n" ,
486486 statusByte ,
487- ScsiPortReadPortUchar ((PUCHAR )baseIoAddress1 + 1 )));
487+ ScsiPortReadPortUchar ((PUCHAR )baseIoAddress1 + ATAPI_ERROR )));
488488
489489 AtapiSoftReset (baseIoAddress1 ,DeviceNumber );
490490
@@ -613,7 +613,7 @@ Return Value:
613613 // Suck out any remaining bytes and throw away.
614614 //
615615
616- ScsiPortReadPortUshort (& baseIoAddress1 -> Data );
616+ ScsiPortReadPortUshort (( PUSHORT ) & baseIoAddress1 -> Data );
617617
618618 } else {
619619
@@ -701,7 +701,7 @@ Return Value:
701701 GetStatus (baseIoAddress2 , statusByte );
702702
703703 if (statusByte & IDE_STATUS_ERROR ) {
704- errorByte = ScsiPortReadPortUchar ((PUCHAR )baseIoAddress1 + 1 );
704+ errorByte = ScsiPortReadPortUchar ((PUCHAR )baseIoAddress1 + ATAPI_ERROR );
705705 DebugPrint ((1 ,
706706 "SetDriveParameters: Error bit set. Status %x, error %x\n" ,
707707 errorByte ,
@@ -937,7 +937,7 @@ Return Value:
937937 // Read the error register.
938938 //
939939
940- errorByte = ScsiPortReadPortUchar ((PUCHAR )baseIoAddress1 + 1 );
940+ errorByte = ScsiPortReadPortUchar ((PUCHAR )baseIoAddress1 + ATAPI_ERROR );
941941 DebugPrint ((1 ,
942942 "MapError: Error register is %x\n" ,
943943 errorByte ));
@@ -1247,7 +1247,7 @@ Return Value:
12471247 // Read the error register.
12481248 //
12491249
1250- errorByte = ScsiPortReadPortUchar ((PUCHAR )baseIoAddress1 + 1 );
1250+ errorByte = ScsiPortReadPortUchar ((PUCHAR )baseIoAddress1 + ATAPI_ERROR );
12511251
12521252 DebugPrint ((1 ,
12531253 "AtapiHwInitialize: Error setting multiple mode. Status %x, error byte %x\n" ,
@@ -1361,7 +1361,7 @@ Return Value:
13611361 // Read the error register.
13621362 //
13631363
1364- errorByte = ScsiPortReadPortUchar ((PUCHAR )baseIoAddress + 1 );
1364+ errorByte = ScsiPortReadPortUchar ((PUCHAR )baseIoAddress + ATAPI_ERROR );
13651365
13661366 DebugPrint ((1 ,
13671367 "AtapiHwInitialize: Error setting multiple mode. Status %x, error byte %x\n" ,
@@ -2134,6 +2134,126 @@ Return Value:
21342134--*/
21352135
21362136{
2137+ #if defined(SARCH_PC98 )
2138+ PHW_DEVICE_EXTENSION deviceExtension = HwDeviceExtension ;
2139+ PIDE_REGISTERS_1 BaseIoAddress1 ;
2140+ PIDE_REGISTERS_2 BaseIoAddress2 ;
2141+ UCHAR i , j ;
2142+ UCHAR Status ;
2143+ UCHAR SL , SH , SC , SN ;
2144+
2145+ BaseIoAddress1 = ScsiPortGetDeviceBase (HwDeviceExtension ,
2146+ ConfigInfo -> AdapterInterfaceType ,
2147+ ConfigInfo -> SystemIoBusNumber ,
2148+ ScsiPortConvertUlongToPhysicalAddress (0x640 ),
2149+ 16 ,
2150+ TRUE);
2151+
2152+ BaseIoAddress2 = ScsiPortGetDeviceBase (HwDeviceExtension ,
2153+ ConfigInfo -> AdapterInterfaceType ,
2154+ ConfigInfo -> SystemIoBusNumber ,
2155+ ScsiPortConvertUlongToPhysicalAddress (0x74C ),
2156+ 4 ,
2157+ TRUE);
2158+
2159+ deviceExtension -> BaseIoAddress1 [0 ] =
2160+ deviceExtension -> BaseIoAddress1 [1 ] = BaseIoAddress1 ;
2161+ deviceExtension -> BaseIoAddress2 [0 ] =
2162+ deviceExtension -> BaseIoAddress2 [1 ] = BaseIoAddress2 ;
2163+
2164+ // We expect initialization to be done by bootloader
2165+ // ScsiPortWritePortUchar((PUCHAR)0x432, 0x00);
2166+
2167+ for (i = 0 ; i < 2 ; i ++ )
2168+ {
2169+ DebugPrint ((0 , "AtapiFindController: Device %d\t" , i ));
2170+
2171+ ScsiPortWritePortUchar ((PUCHAR )0x64C , (i == 0 ) ? 0xA0 : 0xB0 );
2172+ ScsiPortStallExecution (5 );
2173+ ScsiPortWritePortUchar ((PUCHAR )0x648 , 0x55 );
2174+ ScsiPortWritePortUchar ((PUCHAR )0x648 , 0x55 );
2175+ ScsiPortStallExecution (5 );
2176+ if (ScsiPortReadPortUchar ((PUCHAR )0x648 ) != 0x55 )
2177+ continue ;
2178+
2179+ deviceExtension -> DeviceFlags [i ] |= DFLAGS_DEVICE_PRESENT ;
2180+
2181+ ScsiPortWritePortUchar ((PUCHAR )0x74C , 0x04 );
2182+ ScsiPortStallExecution (100000 );
2183+ ScsiPortWritePortUchar ((PUCHAR )0x74C , 0x00 );
2184+ ScsiPortStallExecution (5 );
2185+ for (j = 0 ; i < 30000 ; j ++ )
2186+ {
2187+ Status = ScsiPortReadPortUchar ((PUCHAR )0x64E );
2188+ if (Status & IDE_STATUS_BUSY )
2189+ {
2190+ ScsiPortStallExecution (100 );
2191+ }
2192+ else
2193+ {
2194+ break ;
2195+ }
2196+ }
2197+ if (Status & IDE_STATUS_BUSY )
2198+ {
2199+ deviceExtension -> DeviceFlags [i ] &= ~DFLAGS_DEVICE_PRESENT ;
2200+ continue ;
2201+ }
2202+
2203+ ScsiPortWritePortUchar ((PUCHAR )0x64C , (i == 0 ) ? 0xA0 : 0xB0 );
2204+ ScsiPortStallExecution (1000 );
2205+ if (ScsiPortReadPortUchar ((PUCHAR )0x64E ) & IDE_STATUS_BUSY )
2206+ {
2207+ deviceExtension -> DeviceFlags [i ] &= ~DFLAGS_DEVICE_PRESENT ;
2208+ continue ;
2209+ }
2210+
2211+ SC = ScsiPortReadPortUchar ((PUCHAR )0x644 );
2212+ SN = ScsiPortReadPortUchar ((PUCHAR )0x646 );
2213+ SL = ScsiPortReadPortUchar ((PUCHAR )0x648 );
2214+ SH = ScsiPortReadPortUchar ((PUCHAR )0x64A );
2215+ if ((SC == 0x01 ) &&
2216+ (SN == 0x01 ) &&
2217+ (SL == 0x00 ) &&
2218+ (SH == 0x00 ))
2219+ {
2220+ DebugPrint ((0 , "IDE HDD\n" ));
2221+ }
2222+ else if ((SL == 0x14 ) &&
2223+ (SH == 0xEB ))
2224+ {
2225+ deviceExtension -> DeviceFlags [i ] |= DFLAGS_ATAPI_DEVICE ;
2226+ DebugPrint ((0 , "ATAPI\n" ));
2227+ IssueIdentify (HwDeviceExtension , i , 0 , IDE_COMMAND_ATAPI_IDENTIFY );
2228+ }
2229+ else
2230+ {
2231+ deviceExtension -> DeviceFlags [i ] &= ~DFLAGS_DEVICE_PRESENT ;
2232+ DebugPrint ((0 , "---- (%X %X %X %X)\n" , SC , SN , SL , SH ));
2233+ }
2234+ }
2235+
2236+ if (!(deviceExtension -> DeviceFlags [0 ] & DFLAGS_DEVICE_PRESENT ) &&
2237+ !(deviceExtension -> DeviceFlags [1 ] & DFLAGS_DEVICE_PRESENT ))
2238+ {
2239+ ScsiPortFreeDeviceBase (HwDeviceExtension , BaseIoAddress1 );
2240+ ScsiPortFreeDeviceBase (HwDeviceExtension , BaseIoAddress2 );
2241+
2242+ return SP_RETURN_NOT_FOUND ;
2243+ }
2244+
2245+ ScsiPortWritePortUchar ((PUCHAR )0x74C , 0x00 );
2246+
2247+ ConfigInfo -> NumberOfBuses = 1 ;
2248+ ConfigInfo -> MaximumNumberOfTargets = 2 ;
2249+ ConfigInfo -> BusInterruptLevel = 9 ;
2250+ ConfigInfo -> InterruptMode = Latched ;
2251+ ConfigInfo -> AtdiskPrimaryClaimed = TRUE;
2252+
2253+ * Again = FALSE;
2254+
2255+ return SP_RETURN_FOUND ;
2256+ #else
21372257 PHW_DEVICE_EXTENSION deviceExtension = HwDeviceExtension ;
21382258 PULONG adapterCount = (PULONG )Context ;
21392259 PUCHAR ioSpace = NULL ;
@@ -2563,6 +2683,7 @@ Return Value:
25632683 * (adapterCount ) = 0 ;
25642684
25652685 return (SP_RETURN_NOT_FOUND );
2686+ #endif
25662687
25672688} // end AtapiFindController()
25682689
@@ -4252,7 +4373,7 @@ Return Value:
42524373 UCHAR error = 0 ;
42534374
42544375 if (status != SRB_STATUS_SUCCESS ) {
4255- error = ScsiPortReadPortUchar ((PUCHAR )baseIoAddress1 + 1 );
4376+ error = ScsiPortReadPortUchar ((PUCHAR )baseIoAddress1 + ATAPI_ERROR );
42564377 }
42574378
42584379 //
@@ -4424,7 +4545,7 @@ Return Value:
44244545 deviceExtension -> ExpectingInterrupt = TRUE;
44254546
44264547 ScsiPortWritePortUchar (& baseIoAddress1 -> DriveSelect ,(UCHAR )(((targetId & 0x1 ) << 4 ) | 0xA0 ));
4427- ScsiPortWritePortUchar ((PUCHAR )baseIoAddress1 + 1 ,regs -> bFeaturesReg );
4548+ ScsiPortWritePortUchar ((PUCHAR )baseIoAddress1 + ATAPI_ERROR ,regs -> bFeaturesReg );
44284549 ScsiPortWritePortUchar (& baseIoAddress1 -> BlockCount ,regs -> bSectorCountReg );
44294550 ScsiPortWritePortUchar (& baseIoAddress1 -> BlockNumber ,regs -> bSectorNumberReg );
44304551 ScsiPortWritePortUchar (& baseIoAddress1 -> CylinderLow ,regs -> bCylLowReg );
@@ -4474,7 +4595,7 @@ Return Value:
44744595 deviceExtension -> ExpectingInterrupt = TRUE;
44754596
44764597 ScsiPortWritePortUchar (& baseIoAddress1 -> DriveSelect ,(UCHAR )(((targetId & 0x1 ) << 4 ) | 0xA0 ));
4477- ScsiPortWritePortUchar ((PUCHAR )baseIoAddress1 + 1 ,regs -> bFeaturesReg );
4598+ ScsiPortWritePortUchar ((PUCHAR )baseIoAddress1 + ATAPI_ERROR ,regs -> bFeaturesReg );
44784599 ScsiPortWritePortUchar (& baseIoAddress1 -> BlockCount ,regs -> bSectorCountReg );
44794600 ScsiPortWritePortUchar (& baseIoAddress1 -> BlockNumber ,regs -> bSectorNumberReg );
44804601 ScsiPortWritePortUchar (& baseIoAddress1 -> CylinderLow ,regs -> bCylLowReg );
@@ -5155,7 +5276,7 @@ Return Value:
51555276
51565277 if (statusByte & IDE_STATUS_DRQ ) {
51575278
5158- ScsiPortReadPortUshort (& baseIoAddress1 -> Data );
5279+ ScsiPortReadPortUshort (( PUSHORT ) & baseIoAddress1 -> Data );
51595280
51605281 } else {
51615282
@@ -5258,7 +5379,7 @@ Return Value:
52585379 ScsiPortWritePortUchar (& baseIoAddress1 -> ByteCountLow ,byteCountLow );
52595380 ScsiPortWritePortUchar (& baseIoAddress1 -> ByteCountHigh , byteCountHigh );
52605381
5261- ScsiPortWritePortUchar ((PUCHAR )baseIoAddress1 + 1 ,0 );
5382+ ScsiPortWritePortUchar ((PUCHAR )baseIoAddress1 + ATAPI_ERROR ,0 );
52625383
52635384
52645385 if (flags & DFLAGS_INT_DRQ ) {
@@ -5490,7 +5611,7 @@ Return Value:
54905611 // error occured, handle it locally, clear interrupt
54915612 //
54925613
5493- errorByte = ScsiPortReadPortUchar ((PUCHAR )baseIoAddress1 + 1 );
5614+ errorByte = ScsiPortReadPortUchar ((PUCHAR )baseIoAddress1 + ATAPI_ERROR );
54945615
54955616 GetBaseStatus (baseIoAddress1 , statusByte );
54965617 deviceExtension -> ExpectingInterrupt = FALSE;
@@ -5535,7 +5656,7 @@ Return Value:
55355656 deviceExtension -> ExpectingInterrupt = FALSE;
55365657 status = SRB_STATUS_SUCCESS ;
55375658 } else {
5538- errorByte = ScsiPortReadPortUchar ((PUCHAR )baseIoAddress1 + 1 );
5659+ errorByte = ScsiPortReadPortUchar ((PUCHAR )baseIoAddress1 + ATAPI_ERROR );
55395660 if (errorByte == IDE_ERROR_DATA_ERROR ){
55405661
55415662 //
@@ -5686,7 +5807,7 @@ HwDeviceExtension - ATAPI driver storage.
56865807 //
56875808 // enable
56885809 //
5689- ScsiPortWritePortUchar ((PUCHAR )baseIoAddress + 1 ,(UCHAR ) (0x95 ));
5810+ ScsiPortWritePortUchar ((PUCHAR )baseIoAddress + ATAPI_ERROR ,(UCHAR ) (0x95 ));
56905811 ScsiPortWritePortUchar (& baseIoAddress -> Command ,
56915812 IDE_COMMAND_ENABLE_MEDIA_STATUS );
56925813
@@ -5696,7 +5817,7 @@ HwDeviceExtension - ATAPI driver storage.
56965817 //
56975818 // Read the error register.
56985819 //
5699- errorByte = ScsiPortReadPortUchar ((PUCHAR )baseIoAddress + 1 );
5820+ errorByte = ScsiPortReadPortUchar ((PUCHAR )baseIoAddress + ATAPI_ERROR );
57005821
57015822 DebugPrint ((1 ,
57025823 "IdeMediaStatus: Error enabling media status. Status %x, error byte %x\n" ,
@@ -5717,7 +5838,7 @@ HwDeviceExtension - ATAPI driver storage.
57175838 //
57185839 if ((deviceExtension -> DeviceFlags [Channel ] & DFLAGS_MEDIA_STATUS_ENABLED )) {
57195840
5720- ScsiPortWritePortUchar ((PUCHAR )baseIoAddress + 1 ,(UCHAR ) (0x31 ));
5841+ ScsiPortWritePortUchar ((PUCHAR )baseIoAddress + ATAPI_ERROR ,(UCHAR ) (0x31 ));
57215842 ScsiPortWritePortUchar (& baseIoAddress -> Command ,
57225843 IDE_COMMAND_ENABLE_MEDIA_STATUS );
57235844
@@ -6198,7 +6319,9 @@ Return Value:
61986319{
61996320 HW_INITIALIZATION_DATA hwInitializationData ;
62006321 ULONG adapterCount ;
6322+ #if !defined(SARCH_PC98 )
62016323 ULONG i ;
6324+ #endif
62026325 ULONG statusToReturn , newStatus ;
62036326
62046327 DebugPrint ((1 ,"\n\nATAPI IDE MiniPort Driver\n" ));
@@ -6243,6 +6366,7 @@ Return Value:
62436366 //
62446367 // Native Mode Devices
62456368 //
6369+ #if !defined(SARCH_PC98 )
62466370 for (i = 0 ; i < NUM_NATIVE_MODE_ADAPTERS ; i ++ ) {
62476371 hwInitializationData .HwFindAdapter = AtapiFindNativeModeController ;
62486372 hwInitializationData .NumberOfAccessRanges = 4 ;
@@ -6260,6 +6384,7 @@ Return Value:
62606384 if (newStatus < statusToReturn )
62616385 statusToReturn = newStatus ;
62626386 }
6387+ #endif
62636388
62646389 hwInitializationData .VendorId = 0 ;
62656390 hwInitializationData .VendorIdLength = 0 ;
@@ -6273,6 +6398,7 @@ Return Value:
62736398
62746399 adapterCount = 0 ;
62756400
6401+ #if !defined(SARCH_PC98 )
62766402 hwInitializationData .HwFindAdapter = AtapiFindPCIController ;
62776403 hwInitializationData .NumberOfAccessRanges = 4 ;
62786404 hwInitializationData .AdapterInterfaceType = Isa ;
@@ -6283,6 +6409,7 @@ Return Value:
62836409 & adapterCount );
62846410 if (newStatus < statusToReturn )
62856411 statusToReturn = newStatus ;
6412+ #endif
62866413
62876414 //
62886415 // Indicate 2 access ranges and reset FindAdapter.
0 commit comments