Modules/ATA - Soft reset devices during startup
[tpg/acess2.git] / KernelLand / Modules / Storage / ATA / io.c
index 28ae899..c3258bc 100644 (file)
@@ -153,8 +153,8 @@ int ATA_SetupIO(void)
                outb(base+0x03, 0xFF);
                if(inb(base+0x02) != 0x66 || inb(base+0x03) != 0xFF) {
                        Log_Error("ATA", "Unable to write to 0x%x/0x%x", base+2, base+3);
-                       LEAVE('i', 0);
-                       return 0;
+                       LEAVE('i', MODULE_ERR_MISC);
+                       return MODULE_ERR_MISC;
                }
        }
        
@@ -183,11 +183,11 @@ int ATA_SetupIO(void)
 
        LOG("gATA_PRDTs = {PBufAddr: 0x%x, PBufAddr: 0x%x}", gATA_PRDTs[0].PBufAddr, gATA_PRDTs[1].PBufAddr);
 
-       // TODO: Ensure that this is within 32-bits
        gaATA_PRDT_PAddrs[0] = MM_GetPhysAddr( &gATA_PRDTs[0] );
        gaATA_PRDT_PAddrs[1] = MM_GetPhysAddr( &gATA_PRDTs[1] );
        LOG("gaATA_PRDT_PAddrs = {0x%P, 0x%P}", gaATA_PRDT_PAddrs[0], gaATA_PRDT_PAddrs[1]);
        #if PHYS_BITS > 32
+       // Ensure that this is within 32-bits
        if( gaATA_PRDT_PAddrs[0] >> 32 || gaATA_PRDT_PAddrs[1] >> 32 ) {
                Log_Error("ATA", "Physical addresses of PRDTs are not in 32-bits (%P and %P)",
                        gaATA_PRDT_PAddrs[0], gaATA_PRDT_PAddrs[1]);
@@ -203,6 +203,14 @@ int ATA_SetupIO(void)
        outb(IDE_SEC_BASE+1, 1);
        outb(IDE_PRI_CTRL, 0);
        outb(IDE_SEC_CTRL, 0);
+
+       
+       // Soft reset all drives
+       outb(IDE_PRI_CTRL, 4);
+       outb(IDE_SEC_CTRL, 4);
+       IO_DELAY();
+       outb(IDE_PRI_CTRL, 0);
+       outb(IDE_SEC_CTRL, 0);
        
        // Make sure interrupts are ACKed
        ATA_int_BusMasterWriteByte(2, 0x4);
@@ -363,21 +371,6 @@ int ATA_DoDMA(Uint8 Disk, Uint64 Address, Uint Count, int bWrite, void *Buffer)
        // Reset IRQ Flag
        gaATA_IRQs[cont] = 0;
 
-       
-       // TODO: What the ____ does this do?
-       #if 1
-       if( cont == 0 ) {
-               outb(IDE_PRI_CTRL, 4);
-               IO_DELAY();
-               outb(IDE_PRI_CTRL, 0);
-       }
-       else {
-               outb(IDE_SEC_CTRL, 4);
-               IO_DELAY();
-               outb(IDE_SEC_CTRL, 0);
-       }
-       #endif
-
        // Set up transfer
        if( Address > 0x0FFFFFFF )      // Use LBA48
        {

UCC git Repository :: git.ucc.asn.au