X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fsim%2Fsim_object.cc;h=9ac0b7fffb7e45e444c590597676134090b420f9;hb=0ed3c84c7b05d7d3c9d5f0e3f1c05c20afef93b9;hp=a35c7a88d8c09be20068fa6795484166e9892ce5;hpb=b1cfe01b5730af7d9f215466ebe108fc96dc0a27;p=gem5.git diff --git a/src/sim/sim_object.cc b/src/sim/sim_object.cc index a35c7a88d..9ac0b7fff 100644 --- a/src/sim/sim_object.cc +++ b/src/sim/sim_object.cc @@ -1,5 +1,6 @@ /* * Copyright (c) 2001-2005 The Regents of The University of Michigan + * Copyright (c) 2010 Advanced Micro Devices, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -29,19 +30,17 @@ * Nathan Binkert */ -#include +#include #include "base/callback.hh" #include "base/inifile.hh" #include "base/match.hh" #include "base/misc.hh" #include "base/trace.hh" -#include "base/stats/events.hh" -#include "base/serializer.hh" -#include "sim/host.hh" +#include "base/types.hh" +#include "debug/Checkpoint.hh" #include "sim/sim_object.hh" #include "sim/stats.hh" -#include "sim/param.hh" using namespace std; @@ -57,42 +56,18 @@ using namespace std; // SimObject::SimObjectList SimObject::simObjectList; -namespace Stats { - extern ObjectMatch event_ignore; -} - // // SimObject constructor: used to maintain static simObjectList // -SimObject::SimObject(Params *p) - : _params(p) +SimObject::SimObject(const Params *p) + : EventManager(p->eventq), _params(p) { #ifdef DEBUG doDebugBreak = false; #endif - doRecordEvent = !Stats::event_ignore.match(name()); simObjectList.push_back(this); -} - -// -// SimObject constructor: used to maintain static simObjectList -// -SimObject::SimObject(const string &_name) - : _params(new Params) -{ - _params->name = _name; -#ifdef DEBUG - doDebugBreak = false; -#endif - - doRecordEvent = !Stats::event_ignore.match(name()); - simObjectList.push_back(this); -} - -void -SimObject::connect() -{ + state = Running; } void @@ -100,107 +75,43 @@ SimObject::init() { } -// -// no default statistics, so nothing to do in base implementation -// -void -SimObject::regStats() -{ -} - void -SimObject::regFormulas() +SimObject::loadState(Checkpoint *cp) { + if (cp->sectionExists(name())) { + DPRINTF(Checkpoint, "unserializing\n"); + unserialize(cp, name()); + } else { + DPRINTF(Checkpoint, "no checkpoint section found\n"); + } } void -SimObject::resetStats() +SimObject::initState() { } -// -// static function: -// call regStats() on all SimObjects and then regFormulas() on all -// SimObjects. -// -struct SimObjectResetCB : public Callback -{ - virtual void process() { SimObject::resetAllStats(); } -}; - -namespace { - static SimObjectResetCB StatResetCB; -} - void -SimObject::regAllStats() +SimObject::startup() { - SimObjectList::iterator i; - SimObjectList::iterator end = simObjectList.end(); - - /** - * @todo change cprintfs to DPRINTFs - */ - for (i = simObjectList.begin(); i != end; ++i) { -#ifdef STAT_DEBUG - cprintf("registering stats for %s\n", (*i)->name()); -#endif - (*i)->regStats(); - } - - for (i = simObjectList.begin(); i != end; ++i) { -#ifdef STAT_DEBUG - cprintf("registering formulas for %s\n", (*i)->name()); -#endif - (*i)->regFormulas(); - } - - Stats::registerResetCallback(&StatResetCB); } // -// static function: call connect() on all SimObjects. +// no default statistics, so nothing to do in base implementation // void -SimObject::connectAll() +SimObject::regStats() { - SimObjectList::iterator i = simObjectList.begin(); - SimObjectList::iterator end = simObjectList.end(); - - for (; i != end; ++i) { - SimObject *obj = *i; - obj->connect(); - } } -// -// static function: call init() on all SimObjects. -// void -SimObject::initAll() +SimObject::regFormulas() { - SimObjectList::iterator i = simObjectList.begin(); - SimObjectList::iterator end = simObjectList.end(); - - for (; i != end; ++i) { - SimObject *obj = *i; - obj->init(); - } } -// -// static function: call resetStats() on all SimObjects. -// void -SimObject::resetAllStats() +SimObject::resetStats() { - SimObjectList::iterator i = simObjectList.begin(); - SimObjectList::iterator end = simObjectList.end(); - - for (; i != end; ++i) { - SimObject *obj = *i; - obj->resetStats(); - } } // @@ -219,6 +130,7 @@ SimObject::serializeAll(ostream &os) } } + #ifdef DEBUG // // static function: flag which objects should have the debugger break @@ -243,17 +155,49 @@ debugObjectBreak(const char *objs) } #endif +unsigned int +SimObject::drain(Event *drain_event) +{ + state = Drained; + return 0; +} + +void +SimObject::resume() +{ + state = Running; +} + +void +SimObject::setMemoryMode(State new_mode) +{ + panic("setMemoryMode() should only be called on systems"); +} + void -SimObject::recordEvent(const std::string &stat) +SimObject::switchOut() { - if (doRecordEvent) - Stats::recordEvent(stat); + panic("Unimplemented!"); } void -SimObject::drain(Serializer *serializer) +SimObject::takeOverFrom(BaseCPU *cpu) { - serializer->signalDrained(); + panic("Unimplemented!"); } -DEFINE_SIM_OBJECT_CLASS_NAME("SimObject", SimObject) + +SimObject * +SimObject::find(const char *name) +{ + SimObjectList::const_iterator i = simObjectList.begin(); + SimObjectList::const_iterator end = simObjectList.end(); + + for (; i != end; ++i) { + SimObject *obj = *i; + if (obj->name() == name) + return obj; + } + + return NULL; +}