diff options
author | Gabe Black <gabeblack@google.com> | 2019-10-28 19:52:23 -0700 |
---|---|---|
committer | Gabe Black <gabeblack@google.com> | 2019-10-30 08:51:02 +0000 |
commit | f5f60a5e467f74dc14b10d431795363deff33b76 (patch) | |
tree | 7eeccdf3db557b269e84eaff9e033b0230640da3 /src/dev | |
parent | bff5eba6b77243dda49ffb5ee7411ec397a7ec01 (diff) | |
download | gem5-f5f60a5e467f74dc14b10d431795363deff33b76.tar.xz |
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 <noreply+kokoro@google.com>
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Maintainer: Jason Lowe-Power <jason@lowepower.com>
Diffstat (limited to 'src/dev')
-rw-r--r-- | src/dev/storage/ide_ctrl.cc | 2 | ||||
-rw-r--r-- | src/dev/storage/ide_disk.cc | 9 | ||||
-rw-r--r-- | src/dev/storage/ide_disk.hh | 9 |
3 files changed, 12 insertions, 8 deletions
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 |