diff options
author | Nathan Binkert <binkertn@umich.edu> | 2004-03-05 05:47:05 -0500 |
---|---|---|
committer | Nathan Binkert <binkertn@umich.edu> | 2004-03-05 05:47:05 -0500 |
commit | c74cb77fa40b09089a383fb961c5fb0ec030f3c7 (patch) | |
tree | 4ece1b63bc70e6f2e9a88f03b21ca3d8355d6301 /dev/etherlink.hh | |
parent | ec6265b044b131fbd9b2b8b97788646c29293d1e (diff) | |
download | gem5-c74cb77fa40b09089a383fb961c5fb0ec030f3c7.tar.xz |
Add support for a propagation delay on the link. The electrical
delay is more or less folded into the packet time, but an additional
delay is possible representing crossing a long haul link, or some
switches, etc.
--HG--
extra : convert_revision : 8fd689c2a7e3051e77f47a4cd5f51c6999d92c8f
Diffstat (limited to 'dev/etherlink.hh')
-rw-r--r-- | dev/etherlink.hh | 31 |
1 files changed, 12 insertions, 19 deletions
diff --git a/dev/etherlink.hh b/dev/etherlink.hh index 8505570a6..3b1dd21bc 100644 --- a/dev/etherlink.hh +++ b/dev/etherlink.hh @@ -49,6 +49,7 @@ class EtherLink : public SimObject protected: class Interface; + friend class LinkDelayEvent; /* * Model for a single uni-directional link */ @@ -59,34 +60,26 @@ class EtherLink : public SimObject Interface *txint; Interface *rxint; - double ticks_per_byte; + double ticksPerByte; + Tick linkDelay; EtherDump *dump; protected: /* * Transfer is complete */ - class DoneEvent : public Event - { - protected: - Link *link; - - public: - DoneEvent(EventQueue *q, Link *l) - : Event(q), link(l) {} - virtual void process() { link->txDone(); } - virtual const char *description() - { return "ethernet link completion"; } - }; - - friend class DoneEvent; - DoneEvent event; PacketPtr packet; - void txDone(); + typedef EventWrapper<Link, &Link::txDone> DoneEvent; + friend class DoneEvent; + DoneEvent doneEvent; + + friend class LinkDelayEvent; + void txComplete(PacketPtr &packet); public: - Link(const std::string &name, double rate, EtherDump *dump); + Link(const std::string &name, double rate, Tick delay, + EtherDump *dump); ~Link() {} virtual const std::string name() const { return objName; } @@ -123,7 +116,7 @@ class EtherLink : public SimObject public: EtherLink(const std::string &name, EtherInt *i1, EtherInt *i2, - Tick speed, EtherDump *dump); + Tick speed, Tick delay, EtherDump *dump); virtual ~EtherLink(); virtual void serialize(std::ostream &os); |