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]);
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);
// 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
{