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 &section)
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