- LOG("Status byte = 0x%02x", val);
-
- LOG("gATA_PRDTs[%i].Bytes = %i", cont, gATA_PRDTs[cont].Bytes);
- LOG("Transfer Completed & Acknowledged");
-
- // Copy to destination buffer
- memcpy( Buffer, gATA_Buffers[cont], Count*SECTOR_SIZE );
-
- // Release controller lock
- RELEASE( &giaATA_ControllerLock[ cont ] );
+ LOG("Status byte = 0x%02x, Controller Status = 0x%02x",
+ val, ATA_int_BusMasterReadByte(cont * 8 + 2));
+
+ if( gaATA_IRQs[cont] == 0 ) {
+
+ #if 1
+ Debug_HexDump("ATA", Buffer, 512);
+ #endif
+
+ // Release controller lock
+ Mutex_Release( &glaATA_ControllerLock[ cont ] );
+ Log_Warning("ATA",
+ "Read timeout on disk %i (Reading sector 0x%llx)",
+ Disk, Address);
+ // Return error
+ LEAVE('i', 1);
+ return 1;
+ }
+ else {
+ LOG("Transfer Completed & Acknowledged");
+ // Copy to destination buffer
+ memcpy( Buffer, gATA_Buffers[cont], Count*SECTOR_SIZE );
+ // Release controller lock
+ Mutex_Release( &glaATA_ControllerLock[ cont ] );