AbstractController.hh revision 6876:a658c315512c
113481Sgiacomo.travaglini@arm.com
213481Sgiacomo.travaglini@arm.com#ifndef ABSTRACTCONTROLLER_H
313481Sgiacomo.travaglini@arm.com#define ABSTRACTCONTROLLER_H
413481Sgiacomo.travaglini@arm.com
513481Sgiacomo.travaglini@arm.com#include "sim/sim_object.hh"
613481Sgiacomo.travaglini@arm.com#include "params/RubyController.hh"
713481Sgiacomo.travaglini@arm.com
813481Sgiacomo.travaglini@arm.com#include "mem/ruby/common/Consumer.hh"
913481Sgiacomo.travaglini@arm.com#include "mem/protocol/MachineType.hh"
1013481Sgiacomo.travaglini@arm.com#include "mem/ruby/common/Address.hh"
1113481Sgiacomo.travaglini@arm.com
1213481Sgiacomo.travaglini@arm.comclass MessageBuffer;
1313481Sgiacomo.travaglini@arm.comclass Network;
1413481Sgiacomo.travaglini@arm.com
1513481Sgiacomo.travaglini@arm.comclass AbstractController : public SimObject, public Consumer {
1613481Sgiacomo.travaglini@arm.compublic:
1713481Sgiacomo.travaglini@arm.com    typedef RubyControllerParams Params;
1813481Sgiacomo.travaglini@arm.com    AbstractController(const Params *p) : SimObject(p) {}
1913481Sgiacomo.travaglini@arm.com  virtual void init(Network* net_ptr, const vector<string> & argv) = 0;
2013481Sgiacomo.travaglini@arm.com
2113481Sgiacomo.travaglini@arm.com  // returns the number of controllers created of the specific subtype
2213481Sgiacomo.travaglini@arm.com  //  virtual int getNumberOfControllers() const = 0;
2313481Sgiacomo.travaglini@arm.com  virtual MessageBuffer* getMandatoryQueue() const = 0;
2413481Sgiacomo.travaglini@arm.com  virtual const int & getVersion() const = 0;
2513481Sgiacomo.travaglini@arm.com  virtual const string toString() const = 0;  // returns text version of controller type
2613481Sgiacomo.travaglini@arm.com  virtual const string getName() const = 0;   // return instance name
2713481Sgiacomo.travaglini@arm.com  virtual const MachineType getMachineType() const = 0;
2813481Sgiacomo.travaglini@arm.com  virtual void blockOnQueue(Address, MessageBuffer*) = 0;
2913481Sgiacomo.travaglini@arm.com  virtual void unblock(Address) = 0;
3013481Sgiacomo.travaglini@arm.com
3113481Sgiacomo.travaglini@arm.com  virtual void print(ostream & out) const = 0;
3213481Sgiacomo.travaglini@arm.com  virtual void printStats(ostream & out) const = 0;
3313481Sgiacomo.travaglini@arm.com  virtual void printConfig(ostream & out) const = 0;
3413481Sgiacomo.travaglini@arm.com  virtual void wakeup() = 0;
3513481Sgiacomo.travaglini@arm.com  //  virtual void dumpStats(ostream & out) = 0;
3613481Sgiacomo.travaglini@arm.com  virtual void clearStats() = 0;
3713481Sgiacomo.travaglini@arm.com
3813481Sgiacomo.travaglini@arm.com};
3913481Sgiacomo.travaglini@arm.com
4013481Sgiacomo.travaglini@arm.com#endif
41