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;
}
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;
}
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) {
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 §ion)
{
- //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)
SimObjectParam<Tsunami *> tsunami;
SimObjectParam<MemoryController *> mmu;
Param<Addr> addr;
- Param<Addr> mask;
END_DECLARE_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)