From 773cb77656174b221c1e51b92a8af7d8e268b733 Mon Sep 17 00:00:00 2001 From: Ali Saidi Date: Thu, 16 Aug 2007 16:49:02 -0400 Subject: Devices: Make EtherInts connect in the same way memory ports currently do. --HG-- extra : convert_revision : 765b096785a77df9adc4791c9101b90696bd7be2 --- src/dev/etherlink.cc | 40 +++++++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 13 deletions(-) (limited to 'src/dev/etherlink.cc') diff --git a/src/dev/etherlink.cc b/src/dev/etherlink.cc index 8c54da678..baa4fb741 100644 --- a/src/dev/etherlink.cc +++ b/src/dev/etherlink.cc @@ -51,22 +51,19 @@ using namespace std; -EtherLink::EtherLink(const string &name, EtherInt *peer0, EtherInt *peer1, - double rate, Tick delay, Tick delayVar, EtherDump *dump) - : SimObject(name) +EtherLink::EtherLink(const Params *p) + : EtherObject(p) { - link[0] = new Link(name + ".link0", this, 0, rate, delay, delayVar, dump); - link[1] = new Link(name + ".link1", this, 1, rate, delay, delayVar, dump); + link[0] = new Link(name() + ".link0", this, 0, params()->speed, + params()->delay, params()->delay_var, params()->dump); + link[1] = new Link(name() + ".link1", this, 1, params()->speed, + params()->delay, params()->delay_var, params()->dump); - interface[0] = new Interface(name + ".int0", link[0], link[1]); - interface[1] = new Interface(name + ".int1", link[1], link[0]); - - interface[0]->setPeer(peer0); - peer0->setPeer(interface[0]); - interface[1]->setPeer(peer1); - peer1->setPeer(interface[1]); + interface[0] = new Interface(name() + ".int0", link[0], link[1]); + interface[1] = new Interface(name() + ".int1", link[1], link[0]); } + EtherLink::~EtherLink() { delete link[0]; @@ -76,6 +73,23 @@ EtherLink::~EtherLink() delete interface[1]; } +EtherInt* +EtherLink::getEthPort(const std::string &if_name, int idx) +{ + Interface *i; + if (if_name == "int0") + i = interface[0]; + else if (if_name == "int1") + i = interface[1]; + else + return NULL; + if (i->getPeer()) + panic("interface already connected to\n"); + + return i; +} + + EtherLink::Interface::Interface(const string &name, Link *tx, Link *rx) : EtherInt(name), txlink(tx) { @@ -275,5 +289,5 @@ REGISTER_SERIALIZEABLE("LinkDelayEvent", LinkDelayEvent) EtherLink * EtherLinkParams::create() { - return new EtherLink(name, int1, int2, speed, delay, delay_var, dump); + return new EtherLink(this); } -- cgit v1.2.3