Pass the location of the m5 console backdoor to the console

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
This commit is contained in:
Nathan Binkert 2005-06-28 01:09:13 -04:00
parent 769234f69e
commit d172447a7a
4 changed files with 34 additions and 15 deletions

View file

@ -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 &section);
#endif
};
#endif // __ALPHA_ACCESS_H__

View file

@ -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 &section)
AlphaConsole::Access::unserialize(Checkpoint *cp, const std::string &section)
{
UNSERIALIZE_SCALAR(last_offset);
UNSERIALIZE_SCALAR(version);

View file

@ -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 &section);
};
union {
AlphaAccess *alphaAccess;
Access *alphaAccess;
uint8_t *consoleData;
};

View file

@ -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"
@ -143,6 +144,21 @@ System::System(Params *p)
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.