Merge zizzer.eecs.umich.edu:/m5/Bitkeeper/m5
[gem5.git] / dev / tsunami_pchip.cc
index aadcf998ff3ef339327216e3a6dae44e097a6b16..b0a4c4d95eff84519adc3c9700ef3e26d956e524 100644 (file)
 
 using namespace std;
 
-TsunamiPChip::TsunamiPChip(const string &name, Tsunami *t,
-                       Addr addr, Addr mask, MemoryController *mmu)
-    : MmapDevice(name, addr, mask, mmu), tsunami(t)
+TsunamiPChip::TsunamiPChip(const string &name, Tsunami *t, Addr a,
+                           MemoryController *mmu)
+    : FunctionalMemory(name), addr(a), tsunami(t)
 {
+    mmu->add_child(this, Range<Addr>(addr, addr + size));
+
     wsba0 = 0;
     wsba1 = 0;
     wsba2 = 0;
@@ -45,12 +47,12 @@ TsunamiPChip::TsunamiPChip(const string &name, Tsunami *t,
 }
 
 Fault
-TsunamiPChip::read(MemReqPtr req, uint8_t *data)
+TsunamiPChip::read(MemReqPtr &req, uint8_t *data)
 {
     DPRINTF(Tsunami, "read  va=%#x size=%d\n",
             req->vaddr, req->size);
 
-    Addr daddr = (req->paddr & addr_mask) >> 6;
+    Addr daddr = (req->paddr - (addr & PA_IMPL_MASK)) >> 6;
 //    ExecContext *xc = req->xc;
 //    int cpuid = xc->cpu_id;
 
@@ -135,12 +137,12 @@ TsunamiPChip::read(MemReqPtr req, uint8_t *data)
 }
 
 Fault
-TsunamiPChip::write(MemReqPtr req, const uint8_t *data)
+TsunamiPChip::write(MemReqPtr &req, const uint8_t *data)
 {
     DPRINTF(Tsunami, "write - va=%#x size=%d \n",
             req->vaddr, req->size);
 
-    Addr daddr = (req->paddr & addr_mask) >> 6;
+    Addr daddr = (req->paddr - (addr & PA_IMPL_MASK)) >> 6;
 
     switch (req->size) {
 
@@ -225,13 +227,37 @@ TsunamiPChip::write(MemReqPtr req, const uint8_t *data)
 void
 TsunamiPChip::serialize(std::ostream &os)
 {
-    // code should be written
+    SERIALIZE_SCALAR(wsba0);
+    SERIALIZE_SCALAR(wsba1);
+    SERIALIZE_SCALAR(wsba2);
+    SERIALIZE_SCALAR(wsba3);
+    SERIALIZE_SCALAR(wsm0);
+    SERIALIZE_SCALAR(wsm1);
+    SERIALIZE_SCALAR(wsm2);
+    SERIALIZE_SCALAR(wsm3);
+    SERIALIZE_SCALAR(tba0);
+    SERIALIZE_SCALAR(tba1);
+    SERIALIZE_SCALAR(tba2);
+    SERIALIZE_SCALAR(tba3);
+
 }
 
 void
 TsunamiPChip::unserialize(Checkpoint *cp, const std::string &section)
 {
-    //code should be written
+    UNSERIALIZE_SCALAR(wsba0);
+    UNSERIALIZE_SCALAR(wsba1);
+    UNSERIALIZE_SCALAR(wsba2);
+    UNSERIALIZE_SCALAR(wsba3);
+    UNSERIALIZE_SCALAR(wsm0);
+    UNSERIALIZE_SCALAR(wsm1);
+    UNSERIALIZE_SCALAR(wsm2);
+    UNSERIALIZE_SCALAR(wsm3);
+    UNSERIALIZE_SCALAR(tba0);
+    UNSERIALIZE_SCALAR(tba1);
+    UNSERIALIZE_SCALAR(tba2);
+    UNSERIALIZE_SCALAR(tba3);
+
 }
 
 BEGIN_DECLARE_SIM_OBJECT_PARAMS(TsunamiPChip)
@@ -239,7 +265,6 @@ BEGIN_DECLARE_SIM_OBJECT_PARAMS(TsunamiPChip)
     SimObjectParam<Tsunami *> tsunami;
     SimObjectParam<MemoryController *> mmu;
     Param<Addr> addr;
-    Param<Addr> mask;
 
 END_DECLARE_SIM_OBJECT_PARAMS(TsunamiPChip)
 
@@ -247,14 +272,13 @@ BEGIN_INIT_SIM_OBJECT_PARAMS(TsunamiPChip)
 
     INIT_PARAM(tsunami, "Tsunami"),
     INIT_PARAM(mmu, "Memory Controller"),
-    INIT_PARAM(addr, "Device Address"),
-    INIT_PARAM(mask, "Address Mask")
+    INIT_PARAM(addr, "Device Address")
 
 END_INIT_SIM_OBJECT_PARAMS(TsunamiPChip)
 
 CREATE_SIM_OBJECT(TsunamiPChip)
 {
-    return new TsunamiPChip(getInstanceName(), tsunami, addr, mask, mmu);
+    return new TsunamiPChip(getInstanceName(), tsunami, addr, mmu);
 }
 
 REGISTER_SIM_OBJECT("TsunamiPChip", TsunamiPChip)