SimpleLink.cc revision 6700
11758SN/A/* 21762SN/A * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood 31758SN/A * All rights reserved. 41758SN/A * 51758SN/A * Redistribution and use in source and binary forms, with or without 61758SN/A * modification, are permitted provided that the following conditions are 71758SN/A * met: redistributions of source code must retain the above copyright 81758SN/A * notice, this list of conditions and the following disclaimer; 91758SN/A * redistributions in binary form must reproduce the above copyright 101758SN/A * notice, this list of conditions and the following disclaimer in the 111758SN/A * documentation and/or other materials provided with the distribution; 121758SN/A * neither the name of the copyright holders nor the names of its 131758SN/A * contributors may be used to endorse or promote products derived from 141758SN/A * this software without specific prior written permission. 151758SN/A * 161758SN/A * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 171758SN/A * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 181758SN/A * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 191758SN/A * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 201758SN/A * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 211758SN/A * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 221758SN/A * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 231758SN/A * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 241758SN/A * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 251758SN/A * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 261758SN/A * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 272665Ssaidi@eecs.umich.edu */ 282665Ssaidi@eecs.umich.edu 292665Ssaidi@eecs.umich.edu#include "mem/protocol/MachineType.hh" 301758SN/A#include "mem/ruby/network/Network.hh" 312SN/A 322984Sgblack@eecs.umich.eduNetwork::Network(const string & name) 33732SN/A : m_name(name) 34732SN/A{ 352984Sgblack@eecs.umich.edu m_virtual_networks = 0; 36732SN/A m_topology_ptr = NULL; 37732SN/A} 38732SN/A 391858SN/Avoid Network::init(const vector<string> & argv) 401717SN/A{ 412683Sktlim@umich.edu m_nodes = MachineType_base_number(MachineType_NUM); // Total nodes in network 422680Sktlim@umich.edu 431070SN/A for (size_t i=0; i<argv.size(); i+=2) { 44676SN/A if (argv[i] == "number_of_virtual_networks") 452710Sstever@eecs.umich.edu m_virtual_networks = atoi(argv[i+1].c_str()); 462SN/A else if (argv[i] == "topology") 471858SN/A m_topology_ptr = RubySystem::getTopology(argv[i+1]); 482SN/A else if (argv[i] == "buffer_size") 491147SN/A m_buffer_size = atoi(argv[i+1].c_str()); 501147SN/A else if (argv[i] == "endpoint_bandwidth") 512SN/A m_endpoint_bandwidth = atoi(argv[i+1].c_str()); 522SN/A else if (argv[i] == "adaptive_routing") 532SN/A m_adaptive_routing = (argv[i+1]=="true"); 542SN/A else if (argv[i] == "link_latency") 552SN/A m_link_latency = atoi(argv[i+1].c_str()); 562680Sktlim@umich.edu else if (argv[i] == "control_msg_size") 572SN/A m_control_msg_size = atoi(argv[i+1].c_str()); 582680Sktlim@umich.edu } 59190SN/A 602680Sktlim@umich.edu m_data_msg_size = RubySystem::getBlockSizeBytes() + m_control_msg_size; 612680Sktlim@umich.edu 622114SN/A assert(m_virtual_networks != 0); 633468Sgblack@eecs.umich.edu assert(m_topology_ptr != NULL); 642700Sktlim@umich.edu} 653459Sgblack@eecs.umich.edu 662680Sktlim@umich.eduint Network::MessageSizeType_to_int(MessageSizeType size_type) 672700Sktlim@umich.edu{ 682700Sktlim@umich.edu switch(size_type) { 692SN/A case MessageSizeType_Undefined: 702SN/A ERROR_MSG("Can't convert Undefined MessageSizeType to integer"); 712SN/A break; 722SN/A case MessageSizeType_Control: 732SN/A case MessageSizeType_Request_Control: 742SN/A case MessageSizeType_Reissue_Control: 752SN/A case MessageSizeType_Response_Control: 762680Sktlim@umich.edu case MessageSizeType_Writeback_Control: 772SN/A case MessageSizeType_Forwarded_Control: 782190SN/A case MessageSizeType_Invalidate_Control: 792680Sktlim@umich.edu case MessageSizeType_Unblock_Control: 802190SN/A case MessageSizeType_Persistent_Control: 812SN/A case MessageSizeType_Completion_Control: 823459Sgblack@eecs.umich.edu return m_control_msg_size; 833459Sgblack@eecs.umich.edu break; 843459Sgblack@eecs.umich.edu case MessageSizeType_Data: 852SN/A case MessageSizeType_Response_Data: 862SN/A case MessageSizeType_ResponseLocal_Data: 872SN/A case MessageSizeType_ResponseL2hit_Data: 881133SN/A case MessageSizeType_Writeback_Data: 89716SN/A return m_data_msg_size; 901133SN/A break; 91716SN/A default: 92716SN/A ERROR_MSG("Invalid range for type MessageSizeType"); 93716SN/A break; 94716SN/A } 95716SN/A return 0; 96716SN/A} 971133SN/A