diff options
author | Ron Dreslinski <rdreslin@umich.edu> | 2004-03-19 14:51:02 -0500 |
---|---|---|
committer | Ron Dreslinski <rdreslin@umich.edu> | 2004-03-19 14:51:02 -0500 |
commit | b4ff8c555fe18093f8b213c7f7ce4080e72ab63b (patch) | |
tree | 364cef738830e0aa922fe75f154df8b221fdc306 /dev | |
parent | 1eb0c9626a575dfc9f2e32243610e76614c331d2 (diff) | |
download | gem5-b4ff8c555fe18093f8b213c7f7ce4080e72ab63b.tar.xz |
Make it so that alpha_console can read the frequency from the correct
sim object(depends on which platform tsunami/tlaser is being used)
dev/alpha_console.cc:
Use dynamice casting once during build to get at the proper device to calculate the frequency.
It is either a tsunami_IO or a tlaser_clock depending on platform (tsunami/tlaser).
If the simobject is not of either of those types then panic
dev/alpha_console.hh:
Pass in a SimObject * that is to either a tlaser_clock or a tsunami_IO
sim/sim_object.cc:
Make it so that you can have a SimObjectParam of type SimObject:
example:
SimObjectParam<SimObject *> so;
--HG--
extra : convert_revision : 08239ef23762b8ea11311630b73fe885d939402e
Diffstat (limited to 'dev')
-rw-r--r-- | dev/alpha_console.cc | 17 | ||||
-rw-r--r-- | dev/alpha_console.hh | 3 |
2 files changed, 14 insertions, 6 deletions
diff --git a/dev/alpha_console.cc b/dev/alpha_console.cc index 2e9e09e93..111b23c81 100644 --- a/dev/alpha_console.cc +++ b/dev/alpha_console.cc @@ -50,11 +50,12 @@ #include "sim/builder.hh" #include "sim/system.hh" #include "dev/tsunami_io.hh" +#include "sim/sim_object.hh" using namespace std; AlphaConsole::AlphaConsole(const string &name, SimConsole *cons, SimpleDisk *d, - System *system, BaseCPU *cpu, TsunamiIO *clock, + System *system, BaseCPU *cpu, SimObject *clock, int num_cpus, MemoryController *mmu, Addr a, HierParams *hier, Bus *bus) : PioDevice(name), disk(d), console(cons), addr(a) @@ -79,8 +80,14 @@ AlphaConsole::AlphaConsole(const string &name, SimConsole *cons, SimpleDisk *d, alphaAccess->numCPUs = num_cpus; alphaAccess->mem_size = system->physmem->size(); alphaAccess->cpuClock = cpu->getFreq() / 1000000; - alphaAccess->intrClockFrequency = clock->frequency(); - + TsunamiIO *clock_linux = dynamic_cast<TsunamiIO *>(clock); + TlaserClock *clock_tru64 = dynamic_cast<TlaserClock *>(clock); + if (clock_linux) + alphaAccess->intrClockFrequency = clock_linux->frequency(); + else if (clock_tru64) + alphaAccess->intrClockFrequency = clock_tru64->frequency(); + else + panic("clock must be of type TlaserClock or TsunamiIO\n"); alphaAccess->diskUnit = 1; } @@ -267,7 +274,7 @@ BEGIN_DECLARE_SIM_OBJECT_PARAMS(AlphaConsole) Param<Addr> addr; SimObjectParam<System *> system; SimObjectParam<BaseCPU *> cpu; - SimObjectParam<TsunamiIO *> clock; + SimObjectParam<SimObject *> clock; SimObjectParam<Bus*> io_bus; SimObjectParam<HierParams *> hier; @@ -282,7 +289,7 @@ BEGIN_INIT_SIM_OBJECT_PARAMS(AlphaConsole) INIT_PARAM(addr, "Device Address"), INIT_PARAM(system, "system object"), INIT_PARAM(cpu, "Processor"), - INIT_PARAM(clock, "Turbolaser Clock"), + INIT_PARAM(clock, "Clock"), INIT_PARAM_DFLT(io_bus, "The IO Bus to attach to", NULL), INIT_PARAM_DFLT(hier, "Hierarchy global variables", &defaultHierParams) diff --git a/dev/alpha_console.hh b/dev/alpha_console.hh index be8538e50..4986d0e5f 100644 --- a/dev/alpha_console.hh +++ b/dev/alpha_console.hh @@ -38,6 +38,7 @@ #include "dev/io_device.hh" #include "sim/host.hh" #include "dev/tsunami_io.hh" +#include "sim/sim_object.hh" class BaseCPU; class SimConsole; @@ -90,7 +91,7 @@ class AlphaConsole : public PioDevice public: /** Standard Constructor */ AlphaConsole(const std::string &name, SimConsole *cons, SimpleDisk *d, - System *system, BaseCPU *cpu, TsunamiIO *clock, + System *system, BaseCPU *cpu, SimObject *clock, int num_cpus, MemoryController *mmu, Addr addr, HierParams *hier, Bus *bus); |