From: Gabe Black Date: Tue, 29 Oct 2019 02:52:23 +0000 (-0700) Subject: dev: Get PageBytes from the system in the ide_disk model. X-Git-Tag: v19.0.0.0~369 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f5f60a5e467f74dc14b10d431795363deff33b76;p=gem5.git dev: Get PageBytes from the system in the ide_disk model. This avoids having to use TheISA::. Change-Id: I020860ab343f9b6fafbcb0e23479d0b64f094512 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/22268 Tested-by: kokoro Reviewed-by: Jason Lowe-Power Maintainer: Jason Lowe-Power --- diff --git a/src/dev/storage/ide_ctrl.cc b/src/dev/storage/ide_ctrl.cc index 91f27bea3..3851c8329 100644 --- a/src/dev/storage/ide_ctrl.cc +++ b/src/dev/storage/ide_ctrl.cc @@ -124,7 +124,7 @@ IdeController::IdeController(Params *p) panic("IDE controllers support a maximum " "of 4 devices attached!\n"); } - params()->disks[i]->setController(this); + params()->disks[i]->setController(this, sys->getPageBytes()); } primary.select(false); diff --git a/src/dev/storage/ide_disk.cc b/src/dev/storage/ide_disk.cc index c31c0928f..f2cea5e5e 100644 --- a/src/dev/storage/ide_disk.cc +++ b/src/dev/storage/ide_disk.cc @@ -56,7 +56,6 @@ #include "base/chunk_generator.hh" #include "base/cprintf.hh" // csprintf #include "base/trace.hh" -#include "config/the_isa.hh" #include "debug/IdeDisk.hh" #include "dev/storage/disk_image.hh" #include "dev/storage/ide_ctrl.hh" @@ -440,7 +439,7 @@ IdeDisk::doDmaRead() // clear out the data buffer memset(dataBuffer, 0, MAX_DMA_SIZE); dmaReadCG = new ChunkGenerator(curPrd.getBaseAddr(), - curPrd.getByteCount(), TheISA::PageBytes); + curPrd.getByteCount(), pageBytes); } if (ctrl->dmaPending() || ctrl->drainState() != DrainState::Running) { @@ -452,7 +451,7 @@ IdeDisk::doDmaRead() &dmaReadWaitEvent, dataBuffer + dmaReadCG->complete()); dmaReadBytes += dmaReadCG->size(); dmaReadTxs++; - if (dmaReadCG->size() == TheISA::PageBytes) + if (dmaReadCG->size() == pageBytes) dmaReadFullPages++; dmaReadCG->next(); } else { @@ -523,7 +522,7 @@ IdeDisk::doDmaWrite() if (!dmaWriteCG) { // clear out the data buffer dmaWriteCG = new ChunkGenerator(curPrd.getBaseAddr(), - curPrd.getByteCount(), TheISA::PageBytes); + curPrd.getByteCount(), pageBytes); } if (ctrl->dmaPending() || ctrl->drainState() != DrainState::Running) { schedule(dmaWriteWaitEvent, curTick() + DMA_BACKOFF_PERIOD); @@ -537,7 +536,7 @@ IdeDisk::doDmaWrite() curPrd.getByteCount(), curPrd.getEOT()); dmaWriteBytes += dmaWriteCG->size(); dmaWriteTxs++; - if (dmaWriteCG->size() == TheISA::PageBytes) + if (dmaWriteCG->size() == pageBytes) dmaWriteFullPages++; dmaWriteCG->next(); } else { diff --git a/src/dev/storage/ide_disk.hh b/src/dev/storage/ide_disk.hh index fa5bb760d..37aa9eed1 100644 --- a/src/dev/storage/ide_disk.hh +++ b/src/dev/storage/ide_disk.hh @@ -241,6 +241,8 @@ class IdeDisk : public SimObject DmaState_t dmaState; /** Dma transaction is a read */ bool dmaRead; + /** Size of OS pages. */ + Addr pageBytes; /** PRD table base address */ uint32_t curPrdAddr; /** PRD entry */ @@ -282,9 +284,12 @@ class IdeDisk : public SimObject * Set the controller for this device * @param c The IDE controller */ - void setController(IdeController *c) { - if (ctrl) panic("Cannot change the controller once set!\n"); + void + setController(IdeController *c, Addr page_bytes) + { + panic_if(ctrl, "Cannot change the controller once set!\n"); ctrl = c; + pageBytes = page_bytes; } // Device register read/write