diff options
-rw-r--r-- | dev/alpha_access.h | 19 | ||||
-rw-r--r-- | dev/alpha_console.cc | 6 | ||||
-rw-r--r-- | dev/alpha_console.hh | 8 | ||||
-rw-r--r-- | sim/system.cc | 16 |
4 files changed, 34 insertions, 15 deletions
diff --git a/dev/alpha_access.h b/dev/alpha_access.h index 07350d622..b62966ea0 100644 --- a/dev/alpha_access.h +++ b/dev/alpha_access.h @@ -33,15 +33,17 @@ * 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 @@ -74,11 +76,6 @@ struct AlphaAccess 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__ diff --git a/dev/alpha_console.cc b/dev/alpha_console.cc index 2cbe60f47..3c009d4bd 100644 --- a/dev/alpha_console.cc +++ b/dev/alpha_console.cc @@ -69,7 +69,7 @@ AlphaConsole::AlphaConsole(const string &name, SimConsole *cons, SimpleDisk *d, pioInterface->addAddrRange(RangeSize(addr, size)); } - alphaAccess = new AlphaAccess; + alphaAccess = new Access; alphaAccess->last_offset = size - 1; alphaAccess->version = ALPHA_ACCESS_VERSION; @@ -268,7 +268,7 @@ AlphaConsole::cacheAccess(MemReqPtr &req) } void -AlphaAccess::serialize(ostream &os) +AlphaConsole::Access::serialize(ostream &os) { SERIALIZE_SCALAR(last_offset); SERIALIZE_SCALAR(version); @@ -291,7 +291,7 @@ AlphaAccess::serialize(ostream &os) } 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); diff --git a/dev/alpha_console.hh b/dev/alpha_console.hh index 63e0d3ae4..eb59626f5 100644 --- a/dev/alpha_console.hh +++ b/dev/alpha_console.hh @@ -72,8 +72,14 @@ class SimpleDisk; 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; }; diff --git a/sim/system.cc b/sim/system.cc index 3ac0fdce1..c1a4c2a87 100644 --- a/sim/system.cc +++ b/sim/system.cc @@ -30,6 +30,7 @@ #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" @@ -144,6 +145,21 @@ System::System(Params *p) } /** + * 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. */ |