tsunami_io.cc revision 769
110458Sandreas.hansson@arm.com/* $Id$ */ 210458Sandreas.hansson@arm.com 310458Sandreas.hansson@arm.com/* @file 410458Sandreas.hansson@arm.com * Tsunami DMA fake 510458Sandreas.hansson@arm.com */ 610458Sandreas.hansson@arm.com 710458Sandreas.hansson@arm.com#include <deque> 810458Sandreas.hansson@arm.com#include <string> 910458Sandreas.hansson@arm.com#include <vector> 1010458Sandreas.hansson@arm.com 1110458Sandreas.hansson@arm.com#include "base/trace.hh" 1210458Sandreas.hansson@arm.com#include "cpu/exec_context.hh" 1310458Sandreas.hansson@arm.com#include "dev/console.hh" 1410458Sandreas.hansson@arm.com#include "dev/etherdev.hh" 1510458Sandreas.hansson@arm.com#include "dev/scsi_ctrl.hh" 1610458Sandreas.hansson@arm.com#include "dev/tlaser_clock.hh" 1710458Sandreas.hansson@arm.com#include "dev/tsunami_dma.hh" 1810458Sandreas.hansson@arm.com#include "dev/tsunamireg.h" 1910458Sandreas.hansson@arm.com#include "dev/tsunami.hh" 2010458Sandreas.hansson@arm.com#include "mem/functional_mem/memory_control.hh" 2110458Sandreas.hansson@arm.com#include "sim/builder.hh" 2210458Sandreas.hansson@arm.com#include "sim/system.hh" 2310458Sandreas.hansson@arm.com 2410458Sandreas.hansson@arm.comusing namespace std; 2510458Sandreas.hansson@arm.com 2610458Sandreas.hansson@arm.comTsunamiDMA::TsunamiDMA(const string &name, /*Tsunami *t,*/ 2710458Sandreas.hansson@arm.com Addr addr, Addr mask, MemoryController *mmu) 2810458Sandreas.hansson@arm.com : MmapDevice(name, addr, mask, mmu)/*, tsunami(t) */ 2910458Sandreas.hansson@arm.com{ 3010458Sandreas.hansson@arm.com 3110458Sandreas.hansson@arm.com} 3210458Sandreas.hansson@arm.com 3310458Sandreas.hansson@arm.comFault 3410458Sandreas.hansson@arm.comTsunamiDMA::read(MemReqPtr req, uint8_t *data) 3510458Sandreas.hansson@arm.com{ 3610458Sandreas.hansson@arm.com DPRINTF(Tsunami, "dma read va=%#x size=%d IOPorrt=%#x\n", 3710458Sandreas.hansson@arm.com req->vaddr, req->size, req->vaddr & 0xfff); 3810458Sandreas.hansson@arm.com 3910458Sandreas.hansson@arm.com // Addr daddr = (req->paddr & addr_mask) >> 6; 4010458Sandreas.hansson@arm.com// ExecContext *xc = req->xc; 4110458Sandreas.hansson@arm.com// int cpuid = xc->cpu_id; 4210458Sandreas.hansson@arm.com panic("I/O Read - va%#x size %d\n", req->vaddr, req->size); 4310458Sandreas.hansson@arm.com // *(uint64_t*)data = 0x00; 4410458Sandreas.hansson@arm.com 4510458Sandreas.hansson@arm.com return No_Fault; 4610458Sandreas.hansson@arm.com} 4710458Sandreas.hansson@arm.com 4810458Sandreas.hansson@arm.comFault 4910458Sandreas.hansson@arm.comTsunamiDMA::write(MemReqPtr req, const uint8_t *data) 5010458Sandreas.hansson@arm.com{ 5110458Sandreas.hansson@arm.com DPRINTF(Tsunami, "dma write - va=%#x size=%d IOPort=%#x\n", 5210458Sandreas.hansson@arm.com req->vaddr, req->size, req->vaddr & 0xfff); 5310458Sandreas.hansson@arm.com 5410458Sandreas.hansson@arm.com Addr daddr = (req->paddr & addr_mask); 5510458Sandreas.hansson@arm.com 5610458Sandreas.hansson@arm.com switch(req->size) { 5710458Sandreas.hansson@arm.com case sizeof(uint8_t): 5810458Sandreas.hansson@arm.com switch(daddr) { 5910458Sandreas.hansson@arm.com case TSDEV_PIC1_MASK: 6010458Sandreas.hansson@arm.com mask1 = *(uint8_t*)data; 6110458Sandreas.hansson@arm.com return No_Fault; 6210458Sandreas.hansson@arm.com case TSDEV_PIC2_MASK: 6310458Sandreas.hansson@arm.com mask2 = *(uint8_t*)data; 6410458Sandreas.hansson@arm.com return No_Fault; 6510458Sandreas.hansson@arm.com case TSDEV_DMA1_RESET: 66 return No_Fault; 67 case TSDEV_DMA2_RESET: 68 return No_Fault; 69 case TSDEV_DMA1_MODE: 70 mode1 = *(uint8_t*)data; 71 return No_Fault; 72 case TSDEV_DMA2_MODE: 73 mode2 = *(uint8_t*)data; 74 return No_Fault; 75 case TSDEV_DMA1_MASK: 76 case TSDEV_DMA2_MASK: 77 return No_Fault; 78 default: 79 panic("I/O Write - va%#x size %d\n", req->vaddr, req->size); 80 } 81 case sizeof(uint16_t): 82 case sizeof(uint32_t): 83 case sizeof(uint64_t): 84 default: 85 panic("I/O Write - invalid size - va %#x size %d\n", req->vaddr, req->size); 86 } 87 88 89 return No_Fault; 90} 91 92void 93TsunamiDMA::serialize(std::ostream &os) 94{ 95 // code should be written 96} 97 98void 99TsunamiDMA::unserialize(Checkpoint *cp, const std::string §ion) 100{ 101 //code should be written 102} 103 104BEGIN_DECLARE_SIM_OBJECT_PARAMS(TsunamiDMA) 105 106 // SimObjectParam<Tsunami *> tsunami; 107 SimObjectParam<MemoryController *> mmu; 108 Param<Addr> addr; 109 Param<Addr> mask; 110 111END_DECLARE_SIM_OBJECT_PARAMS(TsunamiDMA) 112 113BEGIN_INIT_SIM_OBJECT_PARAMS(TsunamiDMA) 114 115// INIT_PARAM(tsunami, "Tsunami"), 116 INIT_PARAM(mmu, "Memory Controller"), 117 INIT_PARAM(addr, "Device Address"), 118 INIT_PARAM(mask, "Address Mask") 119 120END_INIT_SIM_OBJECT_PARAMS(TsunamiDMA) 121 122CREATE_SIM_OBJECT(TsunamiDMA) 123{ 124 return new TsunamiDMA(getInstanceName(), /*tsunami,*/ addr, mask, mmu); 125} 126 127REGISTER_SIM_OBJECT("TsunamiDMA", TsunamiDMA) 128