Network.cc (11793:ef606668d247) | Network.cc (12065:e3e51756dfef) |
---|---|
1/* | 1/* |
2 * Copyright (c) 2017 ARM Limited 3 * All rights reserved. 4 * 5 * The license below extends only to copyright in the software and shall 6 * not be construed as granting a license to any other intellectual 7 * property including but not limited to intellectual property relating 8 * to a hardware implementation of the functionality of the software 9 * licensed hereunder. You may use the software subject to the license 10 * terms below provided that you ensure that this notice is replicated 11 * unmodified and in its entirety in all distributions of the software, 12 * modified or unmodified, in source code or in binary form. 13 * |
|
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; 9 * redistributions in binary form must reproduce the above copyright --- 14 unchanged lines hidden (view full) --- 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29#include "mem/ruby/network/Network.hh" 30 31#include "base/misc.hh" | 14 * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood 15 * All rights reserved. 16 * 17 * Redistribution and use in source and binary forms, with or without 18 * modification, are permitted provided that the following conditions are 19 * met: redistributions of source code must retain the above copyright 20 * notice, this list of conditions and the following disclaimer; 21 * redistributions in binary form must reproduce the above copyright --- 14 unchanged lines hidden (view full) --- 36 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 37 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 38 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 39 */ 40 41#include "mem/ruby/network/Network.hh" 42 43#include "base/misc.hh" |
44#include "mem/ruby/common/MachineID.hh" |
|
32#include "mem/ruby/network/BasicLink.hh" 33#include "mem/ruby/system/RubySystem.hh" 34 35uint32_t Network::m_virtual_networks; 36uint32_t Network::m_control_msg_size; 37uint32_t Network::m_data_msg_size; 38 39Network::Network(const Params *p) --- 28 unchanged lines hidden (view full) --- 68 params()->ruby_system->registerNetwork(this); 69 70 // Initialize the controller's network pointers 71 for (std::vector<BasicExtLink*>::const_iterator i = p->ext_links.begin(); 72 i != p->ext_links.end(); ++i) { 73 BasicExtLink *ext_link = (*i); 74 AbstractController *abs_cntrl = ext_link->params()->ext_node; 75 abs_cntrl->initNetworkPtr(this); | 45#include "mem/ruby/network/BasicLink.hh" 46#include "mem/ruby/system/RubySystem.hh" 47 48uint32_t Network::m_virtual_networks; 49uint32_t Network::m_control_msg_size; 50uint32_t Network::m_data_msg_size; 51 52Network::Network(const Params *p) --- 28 unchanged lines hidden (view full) --- 81 params()->ruby_system->registerNetwork(this); 82 83 // Initialize the controller's network pointers 84 for (std::vector<BasicExtLink*>::const_iterator i = p->ext_links.begin(); 85 i != p->ext_links.end(); ++i) { 86 BasicExtLink *ext_link = (*i); 87 AbstractController *abs_cntrl = ext_link->params()->ext_node; 88 abs_cntrl->initNetworkPtr(this); |
89 const AddrRangeList &ranges = abs_cntrl->getAddrRanges(); 90 if (!ranges.empty()) { 91 MachineID mid = abs_cntrl->getMachineID(); 92 AddrMapNode addr_map_node = { 93 .id = mid.getNum(), 94 .ranges = ranges 95 }; 96 addrMap.emplace(mid.getType(), addr_map_node); 97 } |
|
76 } 77 78 // Register a callback function for combining the statistics 79 Stats::registerDumpCallback(new StatsCallback(this)); 80 81 for (auto &it : dynamic_cast<Network *>(this)->params()->ext_links) { 82 it->params()->ext_node->initNetQueues(); 83 } --- 83 unchanged lines hidden (view full) --- 167 std::string vnet_type, MessageBuffer *b) 168{ 169 checkNetworkAllocation(id, ordered, network_num, vnet_type); 170 while (m_fromNetQueues[id].size() <= network_num) { 171 m_fromNetQueues[id].push_back(nullptr); 172 } 173 m_fromNetQueues[id][network_num] = b; 174} | 98 } 99 100 // Register a callback function for combining the statistics 101 Stats::registerDumpCallback(new StatsCallback(this)); 102 103 for (auto &it : dynamic_cast<Network *>(this)->params()->ext_links) { 104 it->params()->ext_node->initNetQueues(); 105 } --- 83 unchanged lines hidden (view full) --- 189 std::string vnet_type, MessageBuffer *b) 190{ 191 checkNetworkAllocation(id, ordered, network_num, vnet_type); 192 while (m_fromNetQueues[id].size() <= network_num) { 193 m_fromNetQueues[id].push_back(nullptr); 194 } 195 m_fromNetQueues[id][network_num] = b; 196} |
197 198NodeID 199Network::addressToNodeID(Addr addr, MachineType mtype) 200{ 201 // Look through the address maps for entries with matching machine 202 // type to get the responsible node for this address. 203 const auto &matching_ranges = addrMap.equal_range(mtype); 204 for (auto it = matching_ranges.first; it != matching_ranges.second; it++) { 205 AddrMapNode &node = it->second; 206 auto &ranges = node.ranges; 207 for (AddrRange &range: ranges) { 208 if (range.contains(addr)) { 209 return node.id; 210 } 211 } 212 } 213 return MachineType_base_count(mtype); 214} |
|