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}