BasicLink.hh revision 8257:7226aebb77b4
110810Sbr@bsdpad.com/* 210810Sbr@bsdpad.com * Copyright (c) 2011 Advanced Micro Devices, Inc. 310810Sbr@bsdpad.com * All rights reserved. 410810Sbr@bsdpad.com * 510810Sbr@bsdpad.com * Redistribution and use in source and binary forms, with or without 610810Sbr@bsdpad.com * modification, are permitted provided that the following conditions are 710810Sbr@bsdpad.com * met: redistributions of source code must retain the above copyright 810810Sbr@bsdpad.com * notice, this list of conditions and the following disclaimer; 910810Sbr@bsdpad.com * redistributions in binary form must reproduce the above copyright 1010810Sbr@bsdpad.com * notice, this list of conditions and the following disclaimer in the 1110810Sbr@bsdpad.com * documentation and/or other materials provided with the distribution; 1210810Sbr@bsdpad.com * neither the name of the copyright holders nor the names of its 1310810Sbr@bsdpad.com * contributors may be used to endorse or promote products derived from 1410810Sbr@bsdpad.com * this software without specific prior written permission. 1510810Sbr@bsdpad.com * 1610810Sbr@bsdpad.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1710810Sbr@bsdpad.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1810810Sbr@bsdpad.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1910810Sbr@bsdpad.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2010810Sbr@bsdpad.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2110810Sbr@bsdpad.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2210810Sbr@bsdpad.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2310810Sbr@bsdpad.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2410810Sbr@bsdpad.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2510810Sbr@bsdpad.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2610810Sbr@bsdpad.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2710810Sbr@bsdpad.com */ 2810810Sbr@bsdpad.com 2910810Sbr@bsdpad.com#ifndef __MEM_RUBY_NETWORK_BASIC_LINK_HH__ 3010810Sbr@bsdpad.com#define __MEM_RUBY_NETWORK_BASIC_LINK_HH__ 3110810Sbr@bsdpad.com 3210810Sbr@bsdpad.com#include <iostream> 3310810Sbr@bsdpad.com#include <string> 3410810Sbr@bsdpad.com#include <vector> 3510810Sbr@bsdpad.com 3610810Sbr@bsdpad.com#include "params/BasicExtLink.hh" 3710810Sbr@bsdpad.com#include "params/BasicIntLink.hh" 3810810Sbr@bsdpad.com#include "params/BasicLink.hh" 3910810Sbr@bsdpad.com#include "mem/ruby/network/BasicRouter.hh" 4010810Sbr@bsdpad.com#include "mem/ruby/network/Topology.hh" 4110810Sbr@bsdpad.com#include "mem/ruby/slicc_interface/AbstractController.hh" 4210810Sbr@bsdpad.com#include "sim/sim_object.hh" 4310810Sbr@bsdpad.com 4410810Sbr@bsdpad.comclass BasicLink : public SimObject 4510810Sbr@bsdpad.com{ 4610810Sbr@bsdpad.com public: 4710810Sbr@bsdpad.com typedef BasicLinkParams Params; 4810810Sbr@bsdpad.com BasicLink(const Params *p); 4910810Sbr@bsdpad.com const Params *params() const { return (const Params *)_params; } 5010810Sbr@bsdpad.com 5110810Sbr@bsdpad.com void init(); 5210810Sbr@bsdpad.com 5310810Sbr@bsdpad.com void print(std::ostream& out) const; 5410810Sbr@bsdpad.com 5510810Sbr@bsdpad.com int m_latency; 5610810Sbr@bsdpad.com int m_bw_multiplier; 5710810Sbr@bsdpad.com int m_weight; 5810810Sbr@bsdpad.com}; 5910810Sbr@bsdpad.com 6010810Sbr@bsdpad.cominline std::ostream& 6110810Sbr@bsdpad.comoperator<<(std::ostream& out, const BasicLink& obj) 6210810Sbr@bsdpad.com{ 6310810Sbr@bsdpad.com obj.print(out); 6410810Sbr@bsdpad.com out << std::flush; 6510810Sbr@bsdpad.com return out; 6610810Sbr@bsdpad.com} 6710810Sbr@bsdpad.com 6810810Sbr@bsdpad.comclass BasicExtLink : public BasicLink 6910810Sbr@bsdpad.com{ 7010810Sbr@bsdpad.com public: 7110810Sbr@bsdpad.com typedef BasicExtLinkParams Params; 72 BasicExtLink(const Params *p); 73 const Params *params() const { return (const Params *)_params; } 74 75 friend class Topology; 76 77 protected: 78 BasicRouter* m_int_node; 79 AbstractController* m_ext_node; 80}; 81 82class BasicIntLink : public BasicLink 83{ 84 public: 85 typedef BasicIntLinkParams Params; 86 BasicIntLink(const Params *p); 87 const Params *params() const { return (const Params *)_params; } 88 89 friend class Topology; 90 91 protected: 92 BasicRouter* m_node_a; 93 BasicRouter* m_node_b; 94}; 95 96#endif // __MEM_RUBY_NETWORK_BASIC_LINK_HH__ 97