summaryrefslogtreecommitdiff
path: root/src/mem/ruby/system
diff options
context:
space:
mode:
authorAndreas Hansson <andreas.hansson@arm.com>2012-08-22 11:39:56 -0400
committerAndreas Hansson <andreas.hansson@arm.com>2012-08-22 11:39:56 -0400
commite317d8b9ff611f16e116946054ac9a90cb453300 (patch)
treea4c98536b209cedbacfe5d3e8f9f5d3b46d49885 /src/mem/ruby/system
parent70e99e0b915fa7ed9ac682af6f68f077799ddea7 (diff)
downloadgem5-e317d8b9ff611f16e116946054ac9a90cb453300.tar.xz
Port: Extend the QueuedPort interface and use where appropriate
This patch extends the queued port interfaces with methods for scheduling the transmission of a timing request/response. The methods are named similar to the corresponding sendTiming(Snoop)Req/Resp, replacing the "send" with "sched". As the queues are currently unbounded, the methods always succeed and hence do not return a value. This functionality was previously provided in the subclasses by calling PacketQueue::schedSendTiming with the appropriate parameters. With this change, there is no need to introduce these extra methods in the subclasses, and the use of the queued interface is more uniform and explicit.
Diffstat (limited to 'src/mem/ruby/system')
-rw-r--r--src/mem/ruby/system/RubyPort.cc25
-rw-r--r--src/mem/ruby/system/RubyPort.hh2
2 files changed, 6 insertions, 21 deletions
diff --git a/src/mem/ruby/system/RubyPort.cc b/src/mem/ruby/system/RubyPort.cc
index c829bf66e..c8580bb5c 100644
--- a/src/mem/ruby/system/RubyPort.cc
+++ b/src/mem/ruby/system/RubyPort.cc
@@ -196,7 +196,10 @@ RubyPort::M5Port::recvTimingReq(PacketPtr pkt)
"Request for address 0x%#x is assumed to be a pio request\n",
pkt->getAddr());
- return ruby_port->pio_port.sendNextCycle(pkt);
+ // send next cycle
+ ruby_port->pio_port.schedTimingReq(pkt, curTick() +
+ g_eventQueue_ptr->getClock());
+ return true;
}
assert(Address(pkt->getAddr()).getOffset() + pkt->getSize() <=
@@ -647,30 +650,14 @@ RubyPort::M5Port::hitCallback(PacketPtr pkt)
// turn packet around to go back to requester if response expected
if (needsResponse) {
DPRINTF(RubyPort, "Sending packet back over port\n");
- sendNextCycle(pkt);
+ // send next cycle
+ schedTimingResp(pkt, curTick() + g_eventQueue_ptr->getClock());
} else {
delete pkt;
}
DPRINTF(RubyPort, "Hit callback done!\n");
}
-bool
-RubyPort::M5Port::sendNextCycle(PacketPtr pkt, bool send_as_snoop)
-{
- //minimum latency, must be > 0
- queue.schedSendTiming(pkt, curTick() + (1 * g_eventQueue_ptr->getClock()),
- send_as_snoop);
- return true;
-}
-
-bool
-RubyPort::PioPort::sendNextCycle(PacketPtr pkt)
-{
- //minimum latency, must be > 0
- queue.schedSendTiming(pkt, curTick() + (1 * g_eventQueue_ptr->getClock()));
- return true;
-}
-
AddrRangeList
RubyPort::M5Port::getAddrRanges() const
{
diff --git a/src/mem/ruby/system/RubyPort.hh b/src/mem/ruby/system/RubyPort.hh
index 3b19632e2..e57522b5b 100644
--- a/src/mem/ruby/system/RubyPort.hh
+++ b/src/mem/ruby/system/RubyPort.hh
@@ -71,7 +71,6 @@ class RubyPort : public MemObject
public:
M5Port(const std::string &_name, RubyPort *_port,
RubySystem*_system, bool _access_phys_mem);
- bool sendNextCycle(PacketPtr pkt, bool send_as_snoop = false);
void hitCallback(PacketPtr pkt);
void evictionCallback(const Address& address);
unsigned deviceBlockSize() const;
@@ -106,7 +105,6 @@ class RubyPort : public MemObject
public:
PioPort(const std::string &_name, RubyPort *_port);
- bool sendNextCycle(PacketPtr pkt);
protected:
virtual bool recvTimingResp(PacketPtr pkt);