diff options
author | Benjamin Nash <benash@umich.edu> | 2005-06-09 15:01:15 -0400 |
---|---|---|
committer | Benjamin Nash <benash@umich.edu> | 2005-06-09 15:01:15 -0400 |
commit | c4fdfa3844ec0e1ae6f34660024ee33170445b8d (patch) | |
tree | 172be4e7ad9e9361efff8b745197883d0035f7fb /dev/tsunami_io.cc | |
parent | 4cc9fbf61d70668a8d80681998a1db2b2e1b4a41 (diff) | |
download | gem5-c4fdfa3844ec0e1ae6f34660024ee33170445b8d.tar.xz |
Mostly IO modifications, to increase compatibility with FreeBSD.
dev/pcidev.cc:
Allow writes to some PCI read-only registers.
Fix problem when writing to a zero offset IO location.
dev/tsunami_io.cc:
Fix calculation of IO addresses.
Add registers for keyboard and PCI DMA.
dev/tsunamireg.h:
Add registers for keyboard and PCI DMA.
python/m5/objects/System.py:
Allow generic System to be instantiated.
--HG--
extra : convert_revision : 1b985ffa2b8e15aa55246f1d14da615c32ecd3f9
Diffstat (limited to 'dev/tsunami_io.cc')
-rw-r--r-- | dev/tsunami_io.cc | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/dev/tsunami_io.cc b/dev/tsunami_io.cc index da1062237..5d5eba68e 100644 --- a/dev/tsunami_io.cc +++ b/dev/tsunami_io.cc @@ -207,12 +207,16 @@ TsunamiIO::read(MemReqPtr &req, uint8_t *data) DPRINTF(Tsunami, "io read va=%#x size=%d IOPorrt=%#x\n", req->vaddr, req->size, req->vaddr & 0xfff); - Addr daddr = (req->paddr - (addr & EV5::PAddrImplMask)); + Addr daddr = (req->paddr - (addr & EV5::PAddrImplMask)) + 0x20; switch(req->size) { case sizeof(uint8_t): switch(daddr) { + // PIC1 mask read + case TSDEV_PIC1_MASK: + *(uint8_t*)data = ~mask1; + return No_Fault; case TSDEV_PIC1_ISR: // !!! If this is modified 64bit case needs to be too // Pal code has to do a 64 bit physical read because there is @@ -267,6 +271,14 @@ TsunamiIO::read(MemReqPtr &req, uint8_t *data) panic("Unknown RTC Address\n"); } + /* Added for keyboard reads */ + case TSDEV_KBD: + *(uint8_t *)data = 0x00; + return No_Fault; + /* Added for ATA PCI DMA */ + case ATA_PCI_DMA: + *(uint8_t *)data = 0x00; + return No_Fault; default: panic("I/O Read - va%#x size %d\n", req->vaddr, req->size); } @@ -309,7 +321,7 @@ TsunamiIO::write(MemReqPtr &req, const uint8_t *data) DPRINTF(Tsunami, "io write - va=%#x size=%d IOPort=%#x Data=%#x\n", req->vaddr, req->size, req->vaddr & 0xfff, dt64); - Addr daddr = (req->paddr - (addr & EV5::PAddrImplMask)); + Addr daddr = (req->paddr - (addr & EV5::PAddrImplMask)) + 0x20; switch(req->size) { case sizeof(uint8_t): @@ -396,6 +408,8 @@ TsunamiIO::write(MemReqPtr &req, const uint8_t *data) case TSDEV_RTC_ADDR: RTCAddress = *(uint8_t*)data; return No_Fault; + case TSDEV_KBD: + return No_Fault; case TSDEV_RTC_DATA: panic("RTC Write not implmented (rtc.o won't work)\n"); default: |