summaryrefslogtreecommitdiff
path: root/src/mem/ruby/slicc_interface
diff options
context:
space:
mode:
Diffstat (limited to 'src/mem/ruby/slicc_interface')
-rw-r--r--src/mem/ruby/slicc_interface/AbstractController.cc16
-rw-r--r--src/mem/ruby/slicc_interface/AbstractController.hh13
2 files changed, 24 insertions, 5 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;