Fixes to IDE disk to fix serialization. Now passes simple CPU serialize

tests

dev/ide_ctrl.cc:
    Formatting
dev/ide_disk.cc:
    Remove some junk, add an assert to serialize, and add missing serialize
    for command register.

--HG--
extra : convert_revision : 8f99857e32f278dd4e6f23deffc8047c6411d5b2
This commit is contained in:
Andrew Schultz 2004-06-17 11:24:14 -04:00
parent d1256a2f2c
commit f3a7930fa6
2 changed files with 24 additions and 35 deletions

View file

@ -656,6 +656,7 @@ IdeController::unserialize(Checkpoint *cp, const std::string &section)
UNSERIALIZE_SCALAR(io_enabled);
UNSERIALIZE_SCALAR(bm_enabled);
UNSERIALIZE_ARRAY(cmd_in_progress, 4);
if (pioInterface) {
pioInterface->addAddrRange(pri_cmd_addr, pri_cmd_addr +
pri_cmd_size - 1);

View file

@ -435,29 +435,8 @@ IdeDisk::dmaReadDone()
writeDisk(curSector++, (uint8_t *)(dataBuffer + bytesWritten));
}
#if 0
// actually copy the data from memory to data buffer
Addr dmaAddr =
ctrl->tsunami->pchip->translatePciToDma(curPrd.getBaseAddr());
memcpy((void *)dataBuffer,
physmem->dma_addr(dmaAddr, curPrd.getByteCount()),
curPrd.getByteCount());
uint32_t bytesWritten = 0;
while (bytesWritten < curPrd.getByteCount()) {
if (cmdBytesLeft <= 0)
panic("DMA data is larger than # sectors specified\n");
writeDisk(curSector++, (uint8_t *)(dataBuffer + bytesWritten));
bytesWritten += SectorSize;
cmdBytesLeft -= SectorSize;
}
#endif
// check for the EOT
if (curPrd.getEOT()){
if (curPrd.getEOT()) {
assert(cmdBytesLeft == 0);
dmaState = Dma_Idle;
updateState(ACT_DMA_DONE);
@ -564,14 +543,6 @@ IdeDisk::dmaWriteDone()
bytesInPage);
}
#if 0
Addr dmaAddr = ctrl->tsunami->pchip->
translatePciToDma(curPrd.getBaseAddr());
memcpy(physmem->dma_addr(dmaAddr, curPrd.getByteCount()),
(void *)dataBuffer, curPrd.getByteCount());
#endif
// check for the EOT
if (curPrd.getEOT()) {
assert(cmdBytesLeft == 0);
@ -1067,26 +1038,41 @@ IdeDisk::serialize(ostream &os)
Tick reschedule = 0;
Events_t event = None;
int eventCount = 0;
if (dmaTransferEvent.scheduled()) {
reschedule = dmaTransferEvent.when();
event = Transfer;
} else if (dmaReadWaitEvent.scheduled()) {
eventCount++;
}
if (dmaReadWaitEvent.scheduled()) {
reschedule = dmaReadWaitEvent.when();
event = ReadWait;
} else if (dmaWriteWaitEvent.scheduled()) {
eventCount++;
}
if (dmaWriteWaitEvent.scheduled()) {
reschedule = dmaWriteWaitEvent.when();
event = WriteWait;
} else if (dmaPrdReadEvent.scheduled()) {
eventCount++;
}
if (dmaPrdReadEvent.scheduled()) {
reschedule = dmaPrdReadEvent.when();
event = PrdRead;
} else if (dmaReadEvent.scheduled()) {
eventCount++;
}
if (dmaReadEvent.scheduled()) {
reschedule = dmaReadEvent.when();
event = DmaRead;
} else if (dmaWriteEvent.scheduled()) {
eventCount++;
}
if (dmaWriteEvent.scheduled()) {
reschedule = dmaWriteEvent.when();
event = DmaWrite;
eventCount++;
}
assert(eventCount <= 1);
SERIALIZE_SCALAR(reschedule);
SERIALIZE_ENUM(event);
@ -1098,6 +1084,7 @@ IdeDisk::serialize(ostream &os)
SERIALIZE_SCALAR(cmdReg.cyl_low);
SERIALIZE_SCALAR(cmdReg.cyl_high);
SERIALIZE_SCALAR(cmdReg.drive);
SERIALIZE_SCALAR(cmdReg.command);
SERIALIZE_SCALAR(status);
SERIALIZE_SCALAR(nIENBit);
SERIALIZE_SCALAR(devID);
@ -1150,6 +1137,7 @@ IdeDisk::unserialize(Checkpoint *cp, const string &section)
UNSERIALIZE_SCALAR(cmdReg.cyl_low);
UNSERIALIZE_SCALAR(cmdReg.cyl_high);
UNSERIALIZE_SCALAR(cmdReg.drive);
UNSERIALIZE_SCALAR(cmdReg.command);
UNSERIALIZE_SCALAR(status);
UNSERIALIZE_SCALAR(nIENBit);
UNSERIALIZE_SCALAR(devID);