instead of compiling it into the console version
dev/alpha_access.h:
move serialization stuff to alpha_console.hh
define the ALPHA_ACCESS_BASE in m5 instead of in console.c and
have m5 pass the value to the console
dev/alpha_console.cc:
dev/alpha_console.hh:
Move serialization stuff into a derived class of AlphaAccess
sim/system.cc:
pass the value of ALPHA_ACCESS_BASE to the console code via
the m5AlphaAccess console variable.
--HG--
extra : convert_revision :
0ea4ba239f03d6dad51a6efae0385aa543064117
* System Console Memory Mapped Register Definition
*/
-#define ALPHA_ACCESS_VERSION (1302)
+#define ALPHA_ACCESS_VERSION (1303)
-#ifndef CONSOLE
-#include <iosfwd>
-#include <string>
-class Checkpoint;
-#else
+#ifdef CONSOLE
typedef unsigned uint32_t;
typedef unsigned long uint64_t;
+#else
+#ifdef ALPHA_TLASER
+#define ALPHA_ACCESS_BASE ULL(0xfffffc8000a00000)
+#else
+#define ALPHA_ACCESS_BASE ULL(0xfffffd0200000000)
+#endif
#endif
// This structure hacked up from simos
uint64_t bootStrapImpure; // 70:
uint32_t bootStrapCPU; // 78:
uint32_t align2; // 7C: Dummy placeholder for alignment
-
-#ifndef CONSOLE
- void serialize(std::ostream &os);
- void unserialize(Checkpoint *cp, const std::string §ion);
-#endif
};
#endif // __ALPHA_ACCESS_H__
pioInterface->addAddrRange(RangeSize(addr, size));
}
- alphaAccess = new AlphaAccess;
+ alphaAccess = new Access;
alphaAccess->last_offset = size - 1;
alphaAccess->version = ALPHA_ACCESS_VERSION;
}
void
-AlphaAccess::serialize(ostream &os)
+AlphaConsole::Access::serialize(ostream &os)
{
SERIALIZE_SCALAR(last_offset);
SERIALIZE_SCALAR(version);
}
void
-AlphaAccess::unserialize(Checkpoint *cp, const std::string §ion)
+AlphaConsole::Access::unserialize(Checkpoint *cp, const std::string §ion)
{
UNSERIALIZE_SCALAR(last_offset);
UNSERIALIZE_SCALAR(version);
class AlphaConsole : public PioDevice
{
protected:
+ struct Access : public AlphaAccess
+ {
+ void serialize(std::ostream &os);
+ void unserialize(Checkpoint *cp, const std::string §ion);
+ };
+
union {
- AlphaAccess *alphaAccess;
+ Access *alphaAccess;
uint8_t *consoleData;
};
#include "base/loader/symtab.hh"
#include "base/remote_gdb.hh"
#include "cpu/exec_context.hh"
+#include "dev/alpha_access.h"
#include "kern/kernel_stats.hh"
#include "mem/functional/memory_control.hh"
#include "mem/functional/physical.hh"
strcpy(osflags, params->boot_osflags.c_str());
}
+ /**
+ * Set the m5AlphaAccess pointer in the console
+ */
+ if (consoleSymtab->findAddress("m5AlphaAccess", addr)) {
+ Addr paddr = vtophys(physmem, addr);
+ uint64_t *m5AlphaAccess =
+ (uint64_t *)physmem->dma_addr(paddr, sizeof(uint64_t));
+
+ if (!m5AlphaAccess)
+ panic("could not translate m5AlphaAccess addr\n");
+
+ *m5AlphaAccess = htoa(ALPHA_ACCESS_BASE);
+ } else
+ panic("could not find m5AlphaAccess\n");
+
/**
* Set the hardware reset parameter block system type and revision
* information to Tsunami.