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