summaryrefslogtreecommitdiff
path: root/src/mem
diff options
context:
space:
mode:
authorNilay Vaish <nilay@cs.wisc.edu>2015-07-04 10:43:46 -0500
committerNilay Vaish <nilay@cs.wisc.edu>2015-07-04 10:43:46 -0500
commit16ac48e6a419b75e6a9e86fab9cd2fd62ef9a574 (patch)
tree3b4753b480fb2b6cb8ff35680d72990831a4be44 /src/mem
parentbaa3eb0de3b2b0f4a7edf35c5d165b11d1d95872 (diff)
downloadgem5-16ac48e6a419b75e6a9e86fab9cd2fd62ef9a574.tar.xz
ruby: drop NetworkMessage class
This patch drops the NetworkMessage class. The relevant data members and functions have been moved to the Message class, which was the parent of NetworkMessage.
Diffstat (limited to 'src/mem')
-rw-r--r--src/mem/protocol/MESI_Two_Level-msg.sm4
-rw-r--r--src/mem/protocol/MI_example-msg.sm8
-rw-r--r--src/mem/protocol/MOESI_CMP_directory-msg.sm4
-rw-r--r--src/mem/protocol/MOESI_CMP_token-msg.sm10
-rw-r--r--src/mem/protocol/MOESI_hammer-msg.sm8
-rw-r--r--src/mem/protocol/Network_test-msg.sm2
-rw-r--r--src/mem/protocol/RubySlicc_Exports.sm1
-rw-r--r--src/mem/ruby/SConscript1
-rw-r--r--src/mem/ruby/common/NetDest.hh2
-rw-r--r--src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.cc13
-rw-r--r--src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.hh1
-rw-r--r--src/mem/ruby/network/garnet/fixed-pipeline/RoutingUnit_d.cc6
-rw-r--r--src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.cc15
-rw-r--r--src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.hh1
-rw-r--r--src/mem/ruby/network/garnet/flexible-pipeline/Router.cc7
-rw-r--r--src/mem/ruby/network/simple/PerfectSwitch.cc12
-rw-r--r--src/mem/ruby/network/simple/Throttle.cc9
-rw-r--r--src/mem/ruby/slicc_interface/Message.hh24
-rw-r--r--src/mem/ruby/slicc_interface/NetworkMessage.hh102
-rw-r--r--src/mem/ruby/structures/RubyMemoryControl.cc2
-rw-r--r--src/mem/slicc/ast/AssignStatementAST.py9
-rw-r--r--src/mem/slicc/symbols/Type.py8
22 files changed, 78 insertions, 171 deletions
diff --git a/src/mem/protocol/MESI_Two_Level-msg.sm b/src/mem/protocol/MESI_Two_Level-msg.sm
index 85a54c1f2..d7b8b3118 100644
--- a/src/mem/protocol/MESI_Two_Level-msg.sm
+++ b/src/mem/protocol/MESI_Two_Level-msg.sm
@@ -57,7 +57,7 @@ enumeration(CoherenceResponseType, desc="...") {
}
// RequestMsg
-structure(RequestMsg, desc="...", interface="NetworkMessage") {
+structure(RequestMsg, desc="...", interface="Message") {
Address Addr, desc="Physical address for this request";
CoherenceRequestType Type, desc="Type of request (GetS, GetX, PutX, etc)";
RubyAccessMode AccessMode, desc="user/supervisor access type";
@@ -86,7 +86,7 @@ structure(RequestMsg, desc="...", interface="NetworkMessage") {
}
// ResponseMsg
-structure(ResponseMsg, desc="...", interface="NetworkMessage") {
+structure(ResponseMsg, desc="...", interface="Message") {
Address Addr, desc="Physical address for this request";
CoherenceResponseType Type, desc="Type of response (Ack, Data, etc)";
MachineID Sender, desc="What component sent the data";
diff --git a/src/mem/protocol/MI_example-msg.sm b/src/mem/protocol/MI_example-msg.sm
index 568b79786..f7721c6e0 100644
--- a/src/mem/protocol/MI_example-msg.sm
+++ b/src/mem/protocol/MI_example-msg.sm
@@ -50,7 +50,7 @@ enumeration(CoherenceResponseType, desc="...") {
}
// RequestMsg (and also forwarded requests)
-structure(RequestMsg, desc="...", interface="NetworkMessage") {
+structure(RequestMsg, desc="...", interface="Message") {
Address Addr, desc="Physical address for this request";
CoherenceRequestType Type, desc="Type of request (GetS, GetX, PutX, etc)";
MachineID Requestor, desc="Node who initiated the request";
@@ -74,7 +74,7 @@ structure(RequestMsg, desc="...", interface="NetworkMessage") {
}
// ResponseMsg (and also unblock requests)
-structure(ResponseMsg, desc="...", interface="NetworkMessage") {
+structure(ResponseMsg, desc="...", interface="Message") {
Address Addr, desc="Physical address for this request";
CoherenceResponseType Type, desc="Type of response (Ack, Data, etc)";
MachineID Sender, desc="Node who sent the data";
@@ -108,7 +108,7 @@ enumeration(DMAResponseType, desc="...", default="DMAResponseType_NULL") {
NULL, desc="Invalid";
}
-structure(DMARequestMsg, desc="...", interface="NetworkMessage") {
+structure(DMARequestMsg, desc="...", interface="Message") {
DMARequestType Type, desc="Request type (read/write)";
Address PhysicalAddress, desc="Physical address for this request";
Address LineAddress, desc="Line address for this request";
@@ -127,7 +127,7 @@ structure(DMARequestMsg, desc="...", interface="NetworkMessage") {
}
}
-structure(DMAResponseMsg, desc="...", interface="NetworkMessage") {
+structure(DMAResponseMsg, desc="...", interface="Message") {
DMAResponseType Type, desc="Response type (DATA/ACK)";
Address PhysicalAddress, desc="Physical address for this request";
Address LineAddress, desc="Line address for this request";
diff --git a/src/mem/protocol/MOESI_CMP_directory-msg.sm b/src/mem/protocol/MOESI_CMP_directory-msg.sm
index 6452aa9f9..eaef28f77 100644
--- a/src/mem/protocol/MOESI_CMP_directory-msg.sm
+++ b/src/mem/protocol/MOESI_CMP_directory-msg.sm
@@ -84,7 +84,7 @@ structure(TriggerMsg, desc="...", interface="Message") {
}
// RequestMsg (and also forwarded requests)
-structure(RequestMsg, desc="...", interface="NetworkMessage") {
+structure(RequestMsg, desc="...", interface="Message") {
Address Addr, desc="Physical address for this request";
int Len, desc="Length of Request";
CoherenceRequestType Type, desc="Type of request (GetS, GetX, PutX, etc)";
@@ -113,7 +113,7 @@ structure(RequestMsg, desc="...", interface="NetworkMessage") {
}
// ResponseMsg (and also unblock requests)
-structure(ResponseMsg, desc="...", interface="NetworkMessage") {
+structure(ResponseMsg, desc="...", interface="Message") {
Address Addr, desc="Physical address for this request";
CoherenceResponseType Type, desc="Type of response (Ack, Data, etc)";
MachineID Sender, desc="Node who sent the data";
diff --git a/src/mem/protocol/MOESI_CMP_token-msg.sm b/src/mem/protocol/MOESI_CMP_token-msg.sm
index 6df417e00..91e8c1dc8 100644
--- a/src/mem/protocol/MOESI_CMP_token-msg.sm
+++ b/src/mem/protocol/MOESI_CMP_token-msg.sm
@@ -57,7 +57,7 @@ enumeration(CoherenceResponseType, desc="...") {
}
// PersistentMsg
-structure(PersistentMsg, desc="...", interface="NetworkMessage") {
+structure(PersistentMsg, desc="...", interface="Message") {
Address Addr, desc="Physical address for this request";
PersistentRequestType Type, desc="Type of starvation request";
MachineID Requestor, desc="Node who initiated the request";
@@ -78,7 +78,7 @@ structure(PersistentMsg, desc="...", interface="NetworkMessage") {
}
// RequestMsg
-structure(RequestMsg, desc="...", interface="NetworkMessage") {
+structure(RequestMsg, desc="...", interface="Message") {
Address Addr, desc="Physical address for this request";
CoherenceRequestType Type, desc="Type of request (GetS, GetX, PutX, etc)";
MachineID Requestor, desc="Node who initiated the request";
@@ -101,7 +101,7 @@ structure(RequestMsg, desc="...", interface="NetworkMessage") {
}
// ResponseMsg
-structure(ResponseMsg, desc="...", interface="NetworkMessage") {
+structure(ResponseMsg, desc="...", interface="Message") {
Address Addr, desc="Physical address for this request";
CoherenceResponseType Type, desc="Type of response (Ack, Data, etc)";
MachineID Sender, desc="Node who sent the data";
@@ -134,7 +134,7 @@ enumeration(DMAResponseType, desc="...", default="DMAResponseType_NULL") {
NULL, desc="Invalid";
}
-structure(DMARequestMsg, desc="...", interface="NetworkMessage") {
+structure(DMARequestMsg, desc="...", interface="Message") {
DMARequestType Type, desc="Request type (read/write)";
Address PhysicalAddress, desc="Physical address for this request";
Address LineAddress, desc="Line address for this request";
@@ -153,7 +153,7 @@ structure(DMARequestMsg, desc="...", interface="NetworkMessage") {
}
}
-structure(DMAResponseMsg, desc="...", interface="NetworkMessage") {
+structure(DMAResponseMsg, desc="...", interface="Message") {
DMAResponseType Type, desc="Response type (DATA/ACK)";
Address PhysicalAddress, desc="Physical address for this request";
Address LineAddress, desc="Line address for this request";
diff --git a/src/mem/protocol/MOESI_hammer-msg.sm b/src/mem/protocol/MOESI_hammer-msg.sm
index 240b27ed7..12472ad98 100644
--- a/src/mem/protocol/MOESI_hammer-msg.sm
+++ b/src/mem/protocol/MOESI_hammer-msg.sm
@@ -86,7 +86,7 @@ structure(TriggerMsg, desc="...", interface="Message") {
}
// RequestMsg (and also forwarded requests)
-structure(RequestMsg, desc="...", interface="NetworkMessage") {
+structure(RequestMsg, desc="...", interface="Message") {
Address Addr, desc="Physical address for this request";
CoherenceRequestType Type, desc="Type of request (GetS, GetX, PutX, etc)";
MachineID Requestor, desc="Node who initiated the request";
@@ -113,7 +113,7 @@ structure(RequestMsg, desc="...", interface="NetworkMessage") {
}
// ResponseMsg (and also unblock requests)
-structure(ResponseMsg, desc="...", interface="NetworkMessage") {
+structure(ResponseMsg, desc="...", interface="Message") {
Address Addr, desc="Physical address for this request";
CoherenceResponseType Type, desc="Type of response (Ack, Data, etc)";
MachineID Sender, desc="Node who sent the data";
@@ -164,7 +164,7 @@ enumeration(DMAResponseType, desc="...", default="DMAResponseType_NULL") {
NULL, desc="Invalid";
}
-structure(DMARequestMsg, desc="...", interface="NetworkMessage") {
+structure(DMARequestMsg, desc="...", interface="Message") {
DMARequestType Type, desc="Request type (read/write)";
Address PhysicalAddress, desc="Physical address for this request";
Address LineAddress, desc="Line address for this request";
@@ -183,7 +183,7 @@ structure(DMARequestMsg, desc="...", interface="NetworkMessage") {
}
}
-structure(DMAResponseMsg, desc="...", interface="NetworkMessage") {
+structure(DMAResponseMsg, desc="...", interface="Message") {
DMAResponseType Type, desc="Response type (DATA/ACK)";
Address PhysicalAddress, desc="Physical address for this request";
Address LineAddress, desc="Line address for this request";
diff --git a/src/mem/protocol/Network_test-msg.sm b/src/mem/protocol/Network_test-msg.sm
index d40e74f5f..b4d788823 100644
--- a/src/mem/protocol/Network_test-msg.sm
+++ b/src/mem/protocol/Network_test-msg.sm
@@ -33,7 +33,7 @@ enumeration(CoherenceRequestType, desc="...") {
}
// RequestMsg (and also forwarded requests)
-structure(RequestMsg, desc="...", interface="NetworkMessage") {
+structure(RequestMsg, desc="...", interface="Message") {
Address Addr, desc="Physical address for this request";
CoherenceRequestType Type, desc="Type of request (GetS, GetX, PutX, etc)";
MachineID Requestor, desc="Node who initiated the request";
diff --git a/src/mem/protocol/RubySlicc_Exports.sm b/src/mem/protocol/RubySlicc_Exports.sm
index 4162800c5..b2a8bcb00 100644
--- a/src/mem/protocol/RubySlicc_Exports.sm
+++ b/src/mem/protocol/RubySlicc_Exports.sm
@@ -219,6 +219,7 @@ structure(SequencerMsg, desc="...", interface="Message") {
DataBlock DataBlk, desc="Data";
int Len, desc="size in bytes of access";
PrefetchBit Prefetch, desc="Is this a prefetch request";
+ MessageSizeType MessageSize;
bool functionalRead(Packet *pkt) {
return testAndRead(PhysicalAddress, DataBlk, pkt);
diff --git a/src/mem/ruby/SConscript b/src/mem/ruby/SConscript
index 8133820b9..091f55060 100644
--- a/src/mem/ruby/SConscript
+++ b/src/mem/ruby/SConscript
@@ -111,7 +111,6 @@ def MakeInclude(source):
MakeInclude('slicc_interface/AbstractEntry.hh')
MakeInclude('slicc_interface/AbstractCacheEntry.hh')
MakeInclude('slicc_interface/Message.hh')
-MakeInclude('slicc_interface/NetworkMessage.hh')
MakeInclude('slicc_interface/RubyRequest.hh')
# External types
diff --git a/src/mem/ruby/common/NetDest.hh b/src/mem/ruby/common/NetDest.hh
index 9914ca218..e09be0c2c 100644
--- a/src/mem/ruby/common/NetDest.hh
+++ b/src/mem/ruby/common/NetDest.hh
@@ -26,7 +26,7 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-// NetDest specifies the network destination of a NetworkMessage
+// NetDest specifies the network destination of a Message
// This is backward compatible with the Set class that was previously
// used to specify network destinations.
// NetDest supports both node networks and component networks
diff --git a/src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.cc b/src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.cc
index 47ded231c..c7bd6178a 100644
--- a/src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.cc
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.cc
@@ -37,7 +37,7 @@
#include "mem/ruby/network/MessageBuffer.hh"
#include "mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.hh"
#include "mem/ruby/network/garnet/fixed-pipeline/flitBuffer_d.hh"
-#include "mem/ruby/slicc_interface/NetworkMessage.hh"
+#include "mem/ruby/slicc_interface/Message.hh"
using namespace std;
using m5::stl_helpers::deletePointers;
@@ -129,8 +129,8 @@ NetworkInterface_d::addNode(vector<MessageBuffer *>& in,
bool
NetworkInterface_d::flitisizeMessage(MsgPtr msg_ptr, int vnet)
{
- NetworkMessage *net_msg_ptr = safe_cast<NetworkMessage *>(msg_ptr.get());
- NetDest net_msg_dest = net_msg_ptr->getInternalDestination();
+ Message *net_msg_ptr = msg_ptr.get();
+ NetDest net_msg_dest = net_msg_ptr->getDestination();
// gets all the destinations associated with this message.
vector<NodeID> dest_nodes = net_msg_dest.getAllDest();
@@ -152,8 +152,7 @@ NetworkInterface_d::flitisizeMessage(MsgPtr msg_ptr, int vnet)
MsgPtr new_msg_ptr = msg_ptr->clone();
NodeID destID = dest_nodes[ctr];
- NetworkMessage *new_net_msg_ptr =
- safe_cast<NetworkMessage *>(new_msg_ptr.get());
+ Message *new_net_msg_ptr = new_msg_ptr.get();
if (dest_nodes.size() > 1) {
NetDest personal_dest;
for (int m = 0; m < (int) MachineType_NUM; m++) {
@@ -163,7 +162,7 @@ NetworkInterface_d::flitisizeMessage(MsgPtr msg_ptr, int vnet)
personal_dest.clear();
personal_dest.add((MachineID) {(MachineType) m, (destID -
MachineType_base_number((MachineType) m))});
- new_net_msg_ptr->getInternalDestination() = personal_dest;
+ new_net_msg_ptr->getDestination() = personal_dest;
break;
}
}
@@ -171,7 +170,7 @@ NetworkInterface_d::flitisizeMessage(MsgPtr msg_ptr, int vnet)
// removing the destination from the original message to reflect
// that a message with this particular destination has been
// flitisized and an output vc is acquired
- net_msg_ptr->getInternalDestination().removeNetDest(personal_dest);
+ net_msg_ptr->getDestination().removeNetDest(personal_dest);
}
for (int i = 0; i < num_flits; i++) {
diff --git a/src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.hh b/src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.hh
index 0cb928d82..812e8b7fb 100644
--- a/src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.hh
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.hh
@@ -43,7 +43,6 @@
#include "mem/ruby/slicc_interface/Message.hh"
#include "params/GarnetNetworkInterface_d.hh"
-class NetworkMessage;
class MessageBuffer;
class flitBuffer_d;
diff --git a/src/mem/ruby/network/garnet/fixed-pipeline/RoutingUnit_d.cc b/src/mem/ruby/network/garnet/fixed-pipeline/RoutingUnit_d.cc
index e68c08613..8d8378738 100644
--- a/src/mem/ruby/network/garnet/fixed-pipeline/RoutingUnit_d.cc
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/RoutingUnit_d.cc
@@ -32,7 +32,7 @@
#include "mem/ruby/network/garnet/fixed-pipeline/InputUnit_d.hh"
#include "mem/ruby/network/garnet/fixed-pipeline/Router_d.hh"
#include "mem/ruby/network/garnet/fixed-pipeline/RoutingUnit_d.hh"
-#include "mem/ruby/slicc_interface/NetworkMessage.hh"
+#include "mem/ruby/slicc_interface/Message.hh"
RoutingUnit_d::RoutingUnit_d(Router_d *router)
{
@@ -66,8 +66,8 @@ int
RoutingUnit_d::routeCompute(flit_d *t_flit)
{
MsgPtr msg_ptr = t_flit->get_msg_ptr();
- NetworkMessage* net_msg_ptr = safe_cast<NetworkMessage *>(msg_ptr.get());
- NetDest msg_destination = net_msg_ptr->getInternalDestination();
+ Message *net_msg_ptr = msg_ptr.get();
+ NetDest msg_destination = net_msg_ptr->getDestination();
int output_link = -1;
int min_weight = INFINITE_;
diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.cc b/src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.cc
index 32066f0e1..d834ea1a3 100644
--- a/src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.cc
+++ b/src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.cc
@@ -37,7 +37,7 @@
#include "mem/ruby/network/MessageBuffer.hh"
#include "mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.hh"
#include "mem/ruby/network/garnet/flexible-pipeline/flitBuffer.hh"
-#include "mem/ruby/slicc_interface/NetworkMessage.hh"
+#include "mem/ruby/slicc_interface/Message.hh"
using namespace std;
using m5::stl_helpers::deletePointers;
@@ -120,8 +120,8 @@ NetworkInterface::request_vc(int in_vc, int in_port, NetDest destination,
bool
NetworkInterface::flitisizeMessage(MsgPtr msg_ptr, int vnet)
{
- NetworkMessage *net_msg_ptr = safe_cast<NetworkMessage *>(msg_ptr.get());
- NetDest net_msg_dest = net_msg_ptr->getInternalDestination();
+ Message *net_msg_ptr = msg_ptr.get();
+ NetDest net_msg_dest = net_msg_ptr->getDestination();
// get all the destinations associated with this message.
vector<NodeID> dest_nodes = net_msg_dest.getAllDest();
@@ -143,8 +143,7 @@ NetworkInterface::flitisizeMessage(MsgPtr msg_ptr, int vnet)
MsgPtr new_msg_ptr = msg_ptr->clone();
NodeID destID = dest_nodes[ctr];
- NetworkMessage *new_net_msg_ptr =
- safe_cast<NetworkMessage *>(new_msg_ptr.get());
+ Message *new_net_msg_ptr = new_msg_ptr.get();
if (dest_nodes.size() > 1) {
NetDest personal_dest;
for (int m = 0; m < (int) MachineType_NUM; m++) {
@@ -154,7 +153,7 @@ NetworkInterface::flitisizeMessage(MsgPtr msg_ptr, int vnet)
personal_dest.clear();
personal_dest.add((MachineID) {(MachineType) m, (destID -
MachineType_base_number((MachineType) m))});
- new_net_msg_ptr->getInternalDestination() = personal_dest;
+ new_net_msg_ptr->getDestination() = personal_dest;
break;
}
}
@@ -163,7 +162,7 @@ NetworkInterface::flitisizeMessage(MsgPtr msg_ptr, int vnet)
// removing the destination from the original message to reflect
// that a message with this particular destination has been
// flitisized and an output vc is acquired
- net_msg_ptr->getInternalDestination().removeNetDest(personal_dest);
+ net_msg_ptr->getDestination().removeNetDest(personal_dest);
}
for (int i = 0; i < num_flits; i++) {
m_net_ptr->increment_injected_flits(vnet);
@@ -179,7 +178,7 @@ NetworkInterface::flitisizeMessage(MsgPtr msg_ptr, int vnet)
// This flit will be ready to traverse the link and into the next hop
// only when an output vc is acquired at the next hop
outNetLink->request_vc_link(
- vc, new_net_msg_ptr->getInternalDestination(), curCycle());
+ vc, new_net_msg_ptr->getDestination(), curCycle());
}
return true ;
diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.hh b/src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.hh
index 03cdf3dc6..9207c353a 100644
--- a/src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.hh
+++ b/src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.hh
@@ -42,7 +42,6 @@
#include "mem/ruby/slicc_interface/Message.hh"
#include "params/GarnetNetworkInterface.hh"
-class NetworkMessage;
class MessageBuffer;
class flitBuffer;
diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/Router.cc b/src/mem/ruby/network/garnet/flexible-pipeline/Router.cc
index 0fc2c6be3..ef985058e 100644
--- a/src/mem/ruby/network/garnet/flexible-pipeline/Router.cc
+++ b/src/mem/ruby/network/garnet/flexible-pipeline/Router.cc
@@ -35,7 +35,7 @@
#include "mem/ruby/network/garnet/flexible-pipeline/OutVcState.hh"
#include "mem/ruby/network/garnet/flexible-pipeline/Router.hh"
#include "mem/ruby/network/garnet/flexible-pipeline/VCarbiter.hh"
-#include "mem/ruby/slicc_interface/NetworkMessage.hh"
+#include "mem/ruby/slicc_interface/Message.hh"
using namespace std;
using m5::stl_helpers::deletePointers;
@@ -277,9 +277,8 @@ Router::routeCompute(flit *m_flit, int inport)
scheduleEvent(Cycles(m_net_ptr->getNumPipeStages() - 1));
if ((m_flit->get_type() == HEAD_) || (m_flit->get_type() == HEAD_TAIL_)) {
- NetworkMessage *nm =
- safe_cast<NetworkMessage*>(m_flit->get_msg_ptr().get());
- NetDest destination = nm->getInternalDestination();
+ Message *nm = m_flit->get_msg_ptr().get();
+ NetDest destination = nm->getDestination();
if (m_net_ptr->getNumPipeStages() > 1) {
m_out_vc_state[outport][outvc]->setState(VC_AB_, curCycle() +
diff --git a/src/mem/ruby/network/simple/PerfectSwitch.cc b/src/mem/ruby/network/simple/PerfectSwitch.cc
index 86cafbe15..06072724e 100644
--- a/src/mem/ruby/network/simple/PerfectSwitch.cc
+++ b/src/mem/ruby/network/simple/PerfectSwitch.cc
@@ -35,7 +35,7 @@
#include "mem/ruby/network/simple/PerfectSwitch.hh"
#include "mem/ruby/network/simple/SimpleNetwork.hh"
#include "mem/ruby/network/simple/Switch.hh"
-#include "mem/ruby/slicc_interface/NetworkMessage.hh"
+#include "mem/ruby/slicc_interface/Message.hh"
using namespace std;
@@ -112,7 +112,7 @@ void
PerfectSwitch::operateVnet(int vnet)
{
MsgPtr msg_ptr;
- NetworkMessage* net_msg_ptr = NULL;
+ Message *net_msg_ptr = NULL;
// This is for round-robin scheduling
int incoming = m_round_robin_start;
@@ -149,12 +149,12 @@ PerfectSwitch::operateVnet(int vnet)
// Peek at message
msg_ptr = buffer->peekMsgPtr();
- net_msg_ptr = safe_cast<NetworkMessage*>(msg_ptr.get());
+ net_msg_ptr = msg_ptr.get();
DPRINTF(RubyNetwork, "Message: %s\n", (*net_msg_ptr));
output_links.clear();
output_link_destinations.clear();
- NetDest msg_dsts = net_msg_ptr->getInternalDestination();
+ NetDest msg_dsts = net_msg_ptr->getDestination();
// Unfortunately, the token-protocol sends some
// zero-destination messages, so this assert isn't valid
@@ -264,8 +264,8 @@ PerfectSwitch::operateVnet(int vnet)
// Change the internal destination set of the message so it
// knows which destinations this link is responsible for.
- net_msg_ptr = safe_cast<NetworkMessage*>(msg_ptr.get());
- net_msg_ptr->getInternalDestination() =
+ net_msg_ptr = msg_ptr.get();
+ net_msg_ptr->getDestination() =
output_link_destinations[i];
// Enqeue msg
diff --git a/src/mem/ruby/network/simple/Throttle.cc b/src/mem/ruby/network/simple/Throttle.cc
index 2da810edb..d722c91ea 100644
--- a/src/mem/ruby/network/simple/Throttle.cc
+++ b/src/mem/ruby/network/simple/Throttle.cc
@@ -34,7 +34,7 @@
#include "mem/ruby/network/simple/Throttle.hh"
#include "mem/ruby/network/MessageBuffer.hh"
#include "mem/ruby/network/Network.hh"
-#include "mem/ruby/slicc_interface/NetworkMessage.hh"
+#include "mem/ruby/slicc_interface/Message.hh"
#include "mem/ruby/system/System.hh"
using namespace std;
@@ -44,7 +44,7 @@ const int MESSAGE_SIZE_MULTIPLIER = 1000;
const int BROADCAST_SCALING = 1;
const int PRIORITY_SWITCH_LIMIT = 128;
-static int network_message_to_size(NetworkMessage* net_msg_ptr);
+static int network_message_to_size(Message* net_msg_ptr);
Throttle::Throttle(int sID, NodeID node, Cycles link_latency,
int link_bandwidth_multiplier, int endpoint_bandwidth,
@@ -121,8 +121,7 @@ Throttle::operateVnet(int vnet, int &bw_remaining, bool &schedule_wakeup,
if (m_units_remaining[vnet] == 0 && in->isReady()) {
// Find the size of the message we are moving
MsgPtr msg_ptr = in->peekMsgPtr();
- NetworkMessage* net_msg_ptr =
- safe_cast<NetworkMessage*>(msg_ptr.get());
+ Message *net_msg_ptr = msg_ptr.get();
m_units_remaining[vnet] +=
network_message_to_size(net_msg_ptr);
@@ -257,7 +256,7 @@ Throttle::print(ostream& out) const
}
int
-network_message_to_size(NetworkMessage* net_msg_ptr)
+network_message_to_size(Message *net_msg_ptr)
{
assert(net_msg_ptr != NULL);
diff --git a/src/mem/ruby/slicc_interface/Message.hh b/src/mem/ruby/slicc_interface/Message.hh
index ea33c1340..5d8ed9711 100644
--- a/src/mem/ruby/slicc_interface/Message.hh
+++ b/src/mem/ruby/slicc_interface/Message.hh
@@ -34,6 +34,8 @@
#include <stack>
#include "mem/packet.hh"
+#include "mem/protocol/MessageSizeType.hh"
+#include "mem/ruby/common/NetDest.hh"
class Message;
typedef std::shared_ptr<Message> MsgPtr;
@@ -58,8 +60,11 @@ class Message
virtual MsgPtr clone() const = 0;
virtual void print(std::ostream& out) const = 0;
- virtual void setIncomingLink(int) {}
- virtual void setVnet(int) {}
+
+ virtual const MessageSizeType& getMessageSize() const
+ { panic("MessageSizeType() called on wrong message!"); }
+ virtual MessageSizeType& getMessageSize()
+ { panic("MessageSizeType() called on wrong message!"); }
/**
* The two functions below are used for reading / writing the message
@@ -87,11 +92,26 @@ class Message
void setMsgCounter(uint64_t c) { m_msg_counter = c; }
uint64_t getMsgCounter() const { return m_msg_counter; }
+ // Functions related to network traversal
+ virtual const NetDest& getDestination() const
+ { panic("getDestination() called on wrong message!"); }
+ virtual NetDest& getDestination()
+ { panic("getDestination() called on wrong message!"); }
+
+ int getIncomingLink() const { return incoming_link; }
+ void setIncomingLink(int link) { incoming_link = link; }
+ int getVnet() const { return vnet; }
+ void setVnet(int net) { vnet = net; }
+
private:
const Tick m_time;
Tick m_LastEnqueueTime; // my last enqueue time
Tick m_DelayedTicks; // my delayed cycles
uint64_t m_msg_counter; // FIXME, should this be a 64-bit value?
+
+ // Variables for required network traversal
+ int incoming_link;
+ int vnet;
};
inline bool
diff --git a/src/mem/ruby/slicc_interface/NetworkMessage.hh b/src/mem/ruby/slicc_interface/NetworkMessage.hh
deleted file mode 100644
index 1b5edcfcd..000000000
--- a/src/mem/ruby/slicc_interface/NetworkMessage.hh
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met: redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer;
- * redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution;
- * neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef __MEM_RUBY_SLICC_INTERFACE_NETWORKMESSAGE_HH__
-#define __MEM_RUBY_SLICC_INTERFACE_NETWORKMESSAGE_HH__
-
-#include <iostream>
-#include <memory>
-
-#include "mem/protocol/MessageSizeType.hh"
-#include "mem/ruby/common/NetDest.hh"
-#include "mem/ruby/slicc_interface/Message.hh"
-
-class NetworkMessage;
-typedef std::shared_ptr<NetworkMessage> NetMsgPtr;
-
-class NetworkMessage : public Message
-{
- public:
- NetworkMessage(Tick curTime)
- : Message(curTime), m_internal_dest_valid(false)
- { }
-
- NetworkMessage(const NetworkMessage &other)
- : Message(other), m_internal_dest(other.m_internal_dest),
- m_internal_dest_valid(other.m_internal_dest_valid)
- { }
-
- virtual ~NetworkMessage() { }
-
- virtual const NetDest& getDestination() const = 0;
- virtual NetDest& getDestination() = 0;
- virtual const MessageSizeType& getMessageSize() const = 0;
- virtual MessageSizeType& getMessageSize() = 0;
-
- const NetDest&
- getInternalDestination() const
- {
- if (!m_internal_dest_valid)
- return getDestination();
-
- return m_internal_dest;
- }
-
- NetDest&
- getInternalDestination()
- {
- if (!m_internal_dest_valid) {
- m_internal_dest = getDestination();
- m_internal_dest_valid = true;
- }
- return m_internal_dest;
- }
-
- virtual void print(std::ostream& out) const = 0;
-
- int getIncomingLink() const { return incoming_link; }
- void setIncomingLink(int link) { incoming_link = link; }
- int getVnet() const { return vnet; }
- void setVnet(int net) { vnet = net; }
-
- private:
- NetDest m_internal_dest;
- bool m_internal_dest_valid;
- int incoming_link;
- int vnet;
-};
-
-inline std::ostream&
-operator<<(std::ostream& out, const NetworkMessage& obj)
-{
- obj.print(out);
- out << std::flush;
- return out;
-}
-
-#endif // __MEM_RUBY_SLICC_INTERFACE_NETWORKMESSAGE_HH__
diff --git a/src/mem/ruby/structures/RubyMemoryControl.cc b/src/mem/ruby/structures/RubyMemoryControl.cc
index adf3dcc53..7e07a82bc 100644
--- a/src/mem/ruby/structures/RubyMemoryControl.cc
+++ b/src/mem/ruby/structures/RubyMemoryControl.cc
@@ -112,7 +112,7 @@
#include "mem/ruby/common/Address.hh"
#include "mem/ruby/common/Global.hh"
#include "mem/ruby/profiler/Profiler.hh"
-#include "mem/ruby/slicc_interface/NetworkMessage.hh"
+#include "mem/ruby/slicc_interface/Message.hh"
#include "mem/ruby/slicc_interface/RubySlicc_ComponentMapping.hh"
#include "mem/ruby/structures/RubyMemoryControl.hh"
#include "mem/ruby/system/System.hh"
diff --git a/src/mem/slicc/ast/AssignStatementAST.py b/src/mem/slicc/ast/AssignStatementAST.py
index 042204925..b95979354 100644
--- a/src/mem/slicc/ast/AssignStatementAST.py
+++ b/src/mem/slicc/ast/AssignStatementAST.py
@@ -47,11 +47,10 @@ class AssignStatementAST(StatementAST):
if not (ltype == rtype or (ltype.isInterface and ltype['interface'] == rtype.ident)):
# FIXME - beckmann
- # the following if statement is a hack to allow NetDest
- # objects to be assigned to Sets this allows for the
- # previous NetworkMessage Destiantion 'Set class' to
- # migrate to the new NetworkMessage Destiantion 'NetDest
- # class'
+ # the following if statement is a hack to allow NetDest objects to
+ # be assigned to Sets this allows for the previous Message
+ # Destination 'Set class' to migrate to the new Message Destination
+ # 'NetDest class'
if str(ltype) != "NetDest" and str(rtype) != "Set":
self.error("Assignment type mismatch '%s' and '%s'",
ltype, rtype)
diff --git a/src/mem/slicc/symbols/Type.py b/src/mem/slicc/symbols/Type.py
index 2afd9958c..e6e704000 100644
--- a/src/mem/slicc/symbols/Type.py
+++ b/src/mem/slicc/symbols/Type.py
@@ -61,10 +61,8 @@ class Type(Symbol):
# check for interface that this Type implements
if "interface" in self:
interface = self["interface"]
- if interface in ("Message", "NetworkMessage"):
+ if interface in ("Message"):
self["message"] = "yes"
- if interface == "NetworkMessage":
- self["networkmessage"] = "yes"
# FIXME - all of the following id comparisons are fragile hacks
if self.ident in ("CacheMemory"):
@@ -97,9 +95,7 @@ class Type(Symbol):
@property
def isPrimitive(self):
return "primitive" in self
- @property
- def isNetworkMessage(self):
- return "networkmessage" in self
+
@property
def isMessage(self):
return "message" in self