diff options
author | Benjamin Nash <benash@umich.edu> | 2005-06-27 18:08:42 -0400 |
---|---|---|
committer | Benjamin Nash <benash@umich.edu> | 2005-06-27 18:08:42 -0400 |
commit | 8b042182626b94ed6380f0ba6b99c0e862aa710f (patch) | |
tree | f77e69fddaa5146c6be9467054e890a4661fc149 /dev/ide_ctrl.cc | |
parent | 0460a78829c000f033d703bb814ca39a835014a0 (diff) | |
download | gem5-8b042182626b94ed6380f0ba6b99c0e862aa710f.tar.xz |
Change IDE disk and ethernet device to work better with FreeBSD.
dev/ide_ctrl.cc:
dev/ide_disk.cc:
dev/ide_disk.hh:
Add support for 32-bit accesses.
dev/ns_gige.cc:
Change default configuration register value to work with FreeBSD driver.
--HG--
extra : convert_revision : c9dd125338a97ffa8cd95293e6b7877068652387
Diffstat (limited to 'dev/ide_ctrl.cc')
-rw-r--r-- | dev/ide_ctrl.cc | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/dev/ide_ctrl.cc b/dev/ide_ctrl.cc index 0037e06e0..964bd01c2 100644 --- a/dev/ide_ctrl.cc +++ b/dev/ide_ctrl.cc @@ -412,14 +412,10 @@ IdeController::read(MemReqPtr &req, uint8_t *data) { Addr offset; bool primary; - bool byte; - bool cmdBlk; RegType_t type; int disk; parseAddr(req->paddr, offset, primary, type); - byte = (req->size == sizeof(uint8_t)) ? true : false; - cmdBlk = (type == COMMAND_BLOCK) ? true : false; if (!io_enabled) return No_Fault; @@ -430,11 +426,19 @@ IdeController::read(MemReqPtr &req, uint8_t *data) panic("IDE controller read of invalid size: %#x\n", req->size); if (type != BMI_BLOCK) { - assert(req->size != sizeof(uint32_t)); disk = getDisk(primary); if (disks[disk]) - disks[disk]->read(offset, byte, cmdBlk, data); + if (req->size == sizeof(uint32_t) && offset == DATA_OFFSET) { + *((uint16_t*)data) = disks[disk]->read(offset, type); + *((uint16_t*)data + 1) = disks[disk]->read(offset, type); + } + else if (req->size == sizeof(uint8_t) && offset == DATA_OFFSET) { + panic("IDE read of data reg invalid size: %#x\n", req->size); + } + else { + *data = disks[disk]->read(offset, type); + } } else { memcpy((void *)data, &bmi_regs[offset], req->size); } |