summaryrefslogtreecommitdiff
path: root/dev/etherlink.hh
diff options
context:
space:
mode:
authorNathan Binkert <binkertn@umich.edu>2004-03-05 05:47:05 -0500
committerNathan Binkert <binkertn@umich.edu>2004-03-05 05:47:05 -0500
commitc74cb77fa40b09089a383fb961c5fb0ec030f3c7 (patch)
tree4ece1b63bc70e6f2e9a88f03b21ca3d8355d6301 /dev/etherlink.hh
parentec6265b044b131fbd9b2b8b97788646c29293d1e (diff)
downloadgem5-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.hh31
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);