summaryrefslogtreecommitdiff
path: root/src/dev
diff options
context:
space:
mode:
authorAndreas Hansson <andreas.hansson@arm.com>2012-03-22 06:36:27 -0400
committerAndreas Hansson <andreas.hansson@arm.com>2012-03-22 06:36:27 -0400
commitc2d2ea99e3efe13bc50d410e2eeae9dd6757e57f (patch)
tree5836cc125091b436dee3fbc32ef26e1eeed49a6c /src/dev
parentfb395b56dd2432b862c550bad7b4bbe1f205ec59 (diff)
downloadgem5-c2d2ea99e3efe13bc50d410e2eeae9dd6757e57f.tar.xz
MEM: Split SimpleTimingPort into PacketQueue and ports
This patch decouples the queueing and the port interactions to simplify the introduction of the master and slave ports. By separating the queueing functionality from the port itself, it becomes much easier to distinguish between master and slave ports, and still retain the queueing ability for both (without code duplication). As part of the split into a PacketQueue and a port, there is now also a hierarchy of two port classes, QueuedPort and SimpleTimingPort. The QueuedPort is useful for ports that want to leave the packet transmission of outgoing packets to the queue and is used by both master and slave ports. The SimpleTimingPort inherits from the QueuedPort and adds the implemention of recvTiming and recvFunctional through recvAtomic. The PioPort and MessagePort are cleaned up as part of the changes. --HG-- rename : src/mem/tport.cc => src/mem/packet_queue.cc rename : src/mem/tport.hh => src/mem/packet_queue.hh
Diffstat (limited to 'src/dev')
-rw-r--r--src/dev/io_device.cc9
-rw-r--r--src/dev/io_device.hh2
-rw-r--r--src/dev/x86/intdev.cc2
3 files changed, 7 insertions, 6 deletions
diff --git a/src/dev/io_device.cc b/src/dev/io_device.cc
index 5d6255f5c..f7b8db09d 100644
--- a/src/dev/io_device.cc
+++ b/src/dev/io_device.cc
@@ -36,9 +36,10 @@
#include "dev/io_device.hh"
#include "sim/system.hh"
-PioPort::PioPort(PioDevice *dev, System *s, std::string pname)
- : SimpleTimingPort(dev->name() + pname, dev), device(dev)
-{ }
+PioPort::PioPort(PioDevice *dev)
+ : SimpleTimingPort(dev->name() + "-pioport", dev), device(dev)
+{
+}
Tick
@@ -55,7 +56,7 @@ PioPort::getAddrRanges()
PioDevice::PioDevice(const Params *p)
- : MemObject(p), sys(p->system), pioPort(this, sys)
+ : MemObject(p), sys(p->system), pioPort(this)
{}
PioDevice::~PioDevice()
diff --git a/src/dev/io_device.hh b/src/dev/io_device.hh
index d7ed93805..400263957 100644
--- a/src/dev/io_device.hh
+++ b/src/dev/io_device.hh
@@ -65,7 +65,7 @@ class PioPort : public SimpleTimingPort
public:
- PioPort(PioDevice *dev, System *s, std::string pname = "-pioport");
+ PioPort(PioDevice *dev);
};
diff --git a/src/dev/x86/intdev.cc b/src/dev/x86/intdev.cc
index bcfab5fe4..0d038b93d 100644
--- a/src/dev/x86/intdev.cc
+++ b/src/dev/x86/intdev.cc
@@ -50,7 +50,7 @@ X86ISA::IntDev::IntPort::sendMessage(ApicList apics, TriggerIntMessage message,
for (apicIt = apics.begin(); apicIt != apics.end(); apicIt++) {
PacketPtr pkt = buildIntRequest(*apicIt, message);
if (timing) {
- schedSendTiming(pkt, curTick() + latency);
+ queue.schedSendTiming(pkt, curTick() + latency);
// The target handles cleaning up the packet in timing mode.
} else {
// ignore the latency involved in the atomic transaction