Switch.hh (9230:33eb3c8a98b9) Switch.hh (9274:ba635023d4bb)
1/*
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;

--- 28 unchanged lines hidden (view full) ---

37 */
38
39#ifndef __MEM_RUBY_NETWORK_SIMPLE_SWITCH_HH__
40#define __MEM_RUBY_NETWORK_SIMPLE_SWITCH_HH__
41
42#include <iostream>
43#include <vector>
44
1/*
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;

--- 28 unchanged lines hidden (view full) ---

37 */
38
39#ifndef __MEM_RUBY_NETWORK_SIMPLE_SWITCH_HH__
40#define __MEM_RUBY_NETWORK_SIMPLE_SWITCH_HH__
41
42#include <iostream>
43#include <vector>
44
45#include "mem/ruby/network/BasicRouter.hh"
46#include "params/Switch.hh"
47
45class MessageBuffer;
46class PerfectSwitch;
47class NetDest;
48class SimpleNetwork;
49class Throttle;
50
48class MessageBuffer;
49class PerfectSwitch;
50class NetDest;
51class SimpleNetwork;
52class Throttle;
53
51class Switch
54class Switch : public BasicRouter
52{
53 public:
55{
56 public:
54 Switch(SwitchID sid, SimpleNetwork* network_ptr);
57 typedef SwitchParams Params;
58 Switch(const Params *p);
55 ~Switch();
56
59 ~Switch();
60
61 void init();
57 void addInPort(const std::vector<MessageBuffer*>& in);
58 void addOutPort(const std::vector<MessageBuffer*>& out,
59 const NetDest& routing_table_entry, int link_latency,
60 int bw_multiplier);
61 const Throttle* getThrottle(LinkID link_number) const;
62 const std::vector<Throttle*>* getThrottles() const;
63 void clearRoutingTables();
64 void clearBuffers();
65 void reconfigureOutPort(const NetDest& routing_table_entry);
66
67 void printStats(std::ostream& out) const;
68 void clearStats();
69 void print(std::ostream& out) const;
62 void addInPort(const std::vector<MessageBuffer*>& in);
63 void addOutPort(const std::vector<MessageBuffer*>& out,
64 const NetDest& routing_table_entry, int link_latency,
65 int bw_multiplier);
66 const Throttle* getThrottle(LinkID link_number) const;
67 const std::vector<Throttle*>* getThrottles() const;
68 void clearRoutingTables();
69 void clearBuffers();
70 void reconfigureOutPort(const NetDest& routing_table_entry);
71
72 void printStats(std::ostream& out) const;
73 void clearStats();
74 void print(std::ostream& out) const;
75 void init_net_ptr(SimpleNetwork* net_ptr) { m_network_ptr = net_ptr; }
70
71 private:
72 // Private copy constructor and assignment operator
73 Switch(const Switch& obj);
74 Switch& operator=(const Switch& obj);
75
76 PerfectSwitch* m_perfect_switch_ptr;
77 SimpleNetwork* m_network_ptr;
78 std::vector<Throttle*> m_throttles;
79 std::vector<MessageBuffer*> m_buffers_to_free;
76
77 private:
78 // Private copy constructor and assignment operator
79 Switch(const Switch& obj);
80 Switch& operator=(const Switch& obj);
81
82 PerfectSwitch* m_perfect_switch_ptr;
83 SimpleNetwork* m_network_ptr;
84 std::vector<Throttle*> m_throttles;
85 std::vector<MessageBuffer*> m_buffers_to_free;
80 SwitchID m_switch_id;
81};
82
83inline std::ostream&
84operator<<(std::ostream& out, const Switch& obj)
85{
86 obj.print(out);
87 out << std::flush;
88 return out;
89}
90
91#endif // __MEM_RUBY_NETWORK_SIMPLE_SWITCH_HH__
86};
87
88inline std::ostream&
89operator<<(std::ostream& out, const Switch& obj)
90{
91 obj.print(out);
92 out << std::flush;
93 return out;
94}
95
96#endif // __MEM_RUBY_NETWORK_SIMPLE_SWITCH_HH__