1/* 2 * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer; --- 54 unchanged lines hidden (view full) --- 63 m_network_ptr = network_ptr; 64 65 for(int i = 0;i < m_virtual_networks;++i) { 66 m_pending_message_count.push_back(0); 67 } 68} 69 70void |
71PerfectSwitch::addInPort(const vector<MessageBuffer*>& in) |
72{ 73 NodeID port = m_in.size(); 74 m_in.push_back(in); 75 |
76 for (int i = 0; i < in.size(); ++i) { 77 if (in[i] != nullptr) { 78 in[i]->setConsumer(this); |
79 |
80 string desc = 81 csprintf("[Queue from port %s %s %s to PerfectSwitch]", 82 to_string(m_switch_id), to_string(port), 83 to_string(i)); |
84 |
85 in[i]->setDescription(desc); 86 in[i]->setIncomingLink(port); 87 in[i]->setVnet(i); 88 } |
89 } 90} 91 92void |
93PerfectSwitch::addOutPort(const vector<MessageBuffer*>& out, 94 const NetDest& routing_table_entry) |
95{ 96 // Setup link order 97 LinkOrder l; 98 l.m_value = 0; 99 l.m_link = m_out.size(); 100 m_link_order.push_back(l); 101 102 // Add to routing table --- 27 unchanged lines hidden (view full) --- 130 incoming = 0; 131 } 132 133 // temporary vectors to store the routing results 134 vector<LinkID> output_links; 135 vector<NetDest> output_link_destinations; 136 137 // Is there a message waiting? |
138 if (m_in[incoming].size() <= vnet) { |
139 continue; |
140 } |
141 |
142 MessageBuffer *buffer = m_in[incoming][vnet]; 143 if (buffer == nullptr) { 144 continue; 145 } 146 |
147 while (buffer->isReady()) { 148 DPRINTF(RubyNetwork, "incoming: %d\n", incoming); 149 150 // Peek at message 151 msg_ptr = buffer->peekMsgPtr(); 152 net_msg_ptr = safe_cast<NetworkMessage*>(msg_ptr.get()); 153 DPRINTF(RubyNetwork, "Message: %s\n", (*net_msg_ptr)); 154 --- 174 unchanged lines hidden --- |