summaryrefslogtreecommitdiff
path: root/src/mem
diff options
context:
space:
mode:
authorNilay Vaish <nilay@cs.wisc.edu>2013-08-07 14:51:18 -0500
committerNilay Vaish <nilay@cs.wisc.edu>2013-08-07 14:51:18 -0500
commitf1b17bf1576bbc7c5786194cb9a02e3e52dbd1e6 (patch)
treed9ebf15d8fc8ce92efc88d7387749fbb538917e5 /src/mem
parente0387415988a11f30b5aac66cd5cc32f7387e08e (diff)
downloadgem5-f1b17bf1576bbc7c5786194cb9a02e3e52dbd1e6.tar.xz
ruby: slicc: move some code to AbstractController
Some of the code in StateMachine.py file is added to all the controllers and is independent of the controller definition. This code is being moved to the AbstractController class which is the parent class of all controllers.
Diffstat (limited to 'src/mem')
-rw-r--r--src/mem/ruby/slicc_interface/AbstractController.cc16
-rw-r--r--src/mem/ruby/slicc_interface/AbstractController.hh13
-rw-r--r--src/mem/slicc/symbols/StateMachine.py33
3 files changed, 24 insertions, 38 deletions
diff --git a/src/mem/ruby/slicc_interface/AbstractController.cc b/src/mem/ruby/slicc_interface/AbstractController.cc
index 930f3a70f..2e4109c01 100644
--- a/src/mem/ruby/slicc_interface/AbstractController.cc
+++ b/src/mem/ruby/slicc_interface/AbstractController.cc
@@ -182,3 +182,19 @@ AbstractController::wakeUpAllBuffers()
m_waiting_buffers.clear();
}
}
+
+void
+AbstractController::blockOnQueue(Address addr, MessageBuffer* port)
+{
+ m_is_blocking = true;
+ m_block_map[addr] = port;
+}
+
+void
+AbstractController::unblock(Address addr)
+{
+ m_block_map.erase(addr);
+ if (m_block_map.size() == 0) {
+ m_is_blocking = false;
+ }
+}
diff --git a/src/mem/ruby/slicc_interface/AbstractController.hh b/src/mem/ruby/slicc_interface/AbstractController.hh
index 079979bdf..88b82854c 100644
--- a/src/mem/ruby/slicc_interface/AbstractController.hh
+++ b/src/mem/ruby/slicc_interface/AbstractController.hh
@@ -56,14 +56,17 @@ class AbstractController : public ClockedObject, public Consumer
void init();
const Params *params() const { return (const Params *)_params; }
+ const int & getVersion() const { return m_version; }
+ void initNetworkPtr(Network* net_ptr) { m_net_ptr = net_ptr; }
+
+ // return instance name
+ const std::string getName() const { return m_name; }
+ void blockOnQueue(Address, MessageBuffer*);
+ void unblock(Address);
+
virtual MessageBuffer* getMandatoryQueue() const = 0;
- virtual const int & getVersion() const = 0;
virtual const std::string toString() const = 0; // returns text version of
// controller type
- virtual const std::string getName() const = 0; // return instance name
- virtual void blockOnQueue(Address, MessageBuffer*) = 0;
- virtual void unblock(Address) = 0;
- virtual void initNetworkPtr(Network* net_ptr) = 0;
virtual AccessPermission getAccessPermission(const Address& addr) = 0;
virtual DataBlock& getDataBlock(const Address& addr) = 0;
diff --git a/src/mem/slicc/symbols/StateMachine.py b/src/mem/slicc/symbols/StateMachine.py
index 1eb72972f..6d67f27ba 100644
--- a/src/mem/slicc/symbols/StateMachine.py
+++ b/src/mem/slicc/symbols/StateMachine.py
@@ -253,10 +253,7 @@ class $c_ident : public AbstractController
static int getNumControllers();
void init();
MessageBuffer* getMandatoryQueue() const;
- const int & getVersion() const;
const std::string toString() const;
- const std::string getName() const;
- void initNetworkPtr(Network* net_ptr) { m_net_ptr = net_ptr; }
void print(std::ostream& out) const;
void wakeup();
@@ -265,8 +262,6 @@ class $c_ident : public AbstractController
void regStats();
void collateStats();
- void blockOnQueue(Address addr, MessageBuffer* port);
- void unblock(Address addr);
void recordCacheTrace(int cntrl, CacheRecorder* tr);
Sequencer* getSequencer() const;
@@ -840,40 +835,12 @@ $c_ident::getSequencer() const
return $seq_ident;
}
-const int &
-$c_ident::getVersion() const
-{
- return m_version;
-}
-
const string
$c_ident::toString() const
{
return "$c_ident";
}
-const string
-$c_ident::getName() const
-{
- return m_name;
-}
-
-void
-$c_ident::blockOnQueue(Address addr, MessageBuffer* port)
-{
- m_is_blocking = true;
- m_block_map[addr] = port;
-}
-
-void
-$c_ident::unblock(Address addr)
-{
- m_block_map.erase(addr);
- if (m_block_map.size() == 0) {
- m_is_blocking = false;
- }
-}
-
void
$c_ident::print(ostream& out) const
{