dev: Refactor UART->Terminal interface
[gem5.git] / src / dev / alpha / backdoor.cc
index 66f682e66cea9952897babf71da486f61d4fb41d..5187e5bae16a7048899af0f385435d264fdbb9ab 100644 (file)
@@ -35,6 +35,8 @@
  * Alpha Console Backdoor Definition
  */
 
+#include "dev/alpha/backdoor.hh"
+
 #include <cstddef>
 #include <string>
 
 #include "base/trace.hh"
 #include "cpu/base.hh"
 #include "cpu/thread_context.hh"
-#include "dev/alpha/backdoor.hh"
+#include "debug/AlphaBackdoor.hh"
+#include "dev/alpha/tsunami.hh"
+#include "dev/alpha/tsunami_cchip.hh"
+#include "dev/alpha/tsunami_io.hh"
 #include "dev/platform.hh"
-#include "dev/simple_disk.hh"
+#include "dev/storage/simple_disk.hh"
 #include "dev/terminal.hh"
 #include "mem/packet.hh"
 #include "mem/packet_access.hh"
@@ -58,12 +63,10 @@ using namespace std;
 using namespace AlphaISA;
 
 AlphaBackdoor::AlphaBackdoor(const Params *p)
-    : BasicPioDevice(p), disk(p->disk), terminal(p->terminal),
+    : BasicPioDevice(p, sizeof(struct AlphaAccess)),
+      disk(p->disk), terminal(p->terminal),
       system(p->system), cpu(p->cpu)
 {
-
-    pioSize = sizeof(struct AlphaAccess);
-
     alphaAccess = new Access();
     alphaAccess->last_offset = pioSize - 1;
 
@@ -88,9 +91,12 @@ AlphaBackdoor::startup()
     alphaAccess->kernStart = system->getKernelStart();
     alphaAccess->kernEnd = system->getKernelEnd();
     alphaAccess->entryPoint = system->getKernelEntry();
-    alphaAccess->mem_size = system->physmem->size();
+    alphaAccess->mem_size = system->memSize();
     alphaAccess->cpuClock = cpu->frequency() / 1000000; // In MHz
-    alphaAccess->intrClockFrequency = params()->platform->intrFrequency();
+    Tsunami *tsunami = dynamic_cast<Tsunami *>(params()->platform);
+    if (!tsunami)
+        fatal("Platform is not Tsunami.\n");
+    alphaAccess->intrClockFrequency = tsunami->io->frequency();
 }
 
 Tick
@@ -106,7 +112,6 @@ AlphaBackdoor::read(PacketPtr pkt)
 
     Addr daddr = pkt->getAddr() - pioAddr;
 
-    pkt->allocate();
     pkt->makeAtomicResponse();
 
     switch (pkt->getSize())
@@ -228,13 +233,13 @@ AlphaBackdoor::write(PacketPtr pkt)
         break;
 
       case offsetof(AlphaAccess, outputChar):
-        terminal->out((char)(val & 0xff));
+        terminal->writeData((char)(val & 0xff));
         break;
 
       default:
         int cpunum = (daddr - offsetof(AlphaAccess, cpuStack)) /
                      sizeof(alphaAccess->cpuStack[0]);
-        warn("%d: Trying to launch CPU number %d!", curTick, cpunum);
+        inform("Launching CPU %d @ %d", cpunum, curTick());
         assert(val > 0 && "Must not access primary cpu");
         if (cpunum >= 0 && cpunum < 64)
             alphaAccess->cpuStack[cpunum] = val;
@@ -248,7 +253,7 @@ AlphaBackdoor::write(PacketPtr pkt)
 }
 
 void
-AlphaBackdoor::Access::serialize(ostream &os)
+AlphaBackdoor::Access::serialize(CheckpointOut &cp) const
 {
     SERIALIZE_SCALAR(last_offset);
     SERIALIZE_SCALAR(version);
@@ -270,7 +275,7 @@ AlphaBackdoor::Access::serialize(ostream &os)
 }
 
 void
-AlphaBackdoor::Access::unserialize(Checkpoint *cp, const std::string &section)
+AlphaBackdoor::Access::unserialize(CheckpointIn &cp)
 {
     UNSERIALIZE_SCALAR(last_offset);
     UNSERIALIZE_SCALAR(version);
@@ -292,15 +297,15 @@ AlphaBackdoor::Access::unserialize(Checkpoint *cp, const std::string &section)
 }
 
 void
-AlphaBackdoor::serialize(ostream &os)
+AlphaBackdoor::serialize(CheckpointOut &cp) const
 {
-    alphaAccess->serialize(os);
+    alphaAccess->serialize(cp);
 }
 
 void
-AlphaBackdoor::unserialize(Checkpoint *cp, const std::string &section)
+AlphaBackdoor::unserialize(CheckpointIn &cp)
 {
-    alphaAccess->unserialize(cp, section);
+    alphaAccess->unserialize(cp);
 }
 
 AlphaBackdoor *