summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndreas Hansson <andreas.hansson@arm.com>2012-07-09 12:35:33 -0400
committerAndreas Hansson <andreas.hansson@arm.com>2012-07-09 12:35:33 -0400
commit830391cad9764b923edd8f761e9fe5d11fd9d837 (patch)
treee73161e27f2913afd86ef7cf8a0a7513cf68dc8d /src
parent49407d76aaba6f347c4d7e6be45eccc43b4c05fc (diff)
downloadgem5-830391cad9764b923edd8f761e9fe5d11fd9d837.tar.xz
Port: Add getAddrRanges to master port (asking slave port)
This patch adds getAddrRanges to the master port, and thus avoids going through getSlavePort to be able to ask the slave. Similar to the previous patch that added isSnooping to the SlavePort, this patch aims to introduce an additional level of hierarchy in the ports (base port being protocol-agnostic) and getSlave/MasterPort will return port pointers to these base classes. The function is named getAddrRanges also on the master port, but does nothing besides asking the connected slave port. The slave port, as before, has to provide an implementation and actually produce a list of address ranges. The initial design used the name getSlaveAddrRanges for the new function, but the more verbose name was later changed.
Diffstat (limited to 'src')
-rw-r--r--src/kern/tru64/tru64_events.cc3
-rw-r--r--src/mem/bus.cc6
-rw-r--r--src/mem/comm_monitor.cc3
-rw-r--r--src/mem/port.cc6
-rw-r--r--src/mem/port.hh5
5 files changed, 19 insertions, 4 deletions
diff --git a/src/kern/tru64/tru64_events.cc b/src/kern/tru64/tru64_events.cc
index 89f2990b9..fd4c20bdd 100644
--- a/src/kern/tru64/tru64_events.cc
+++ b/src/kern/tru64/tru64_events.cc
@@ -62,7 +62,8 @@ BadAddrEvent::process(ThreadContext *tc)
MasterPort &dataPort = tc->getCpuPtr()->getDataPort();
- AddrRangeList resp = dataPort.getSlavePort().getAddrRanges();
+ // get the address ranges of the connected slave port
+ AddrRangeList resp = dataPort.getAddrRanges();
for (iter = resp.begin(); iter != resp.end(); iter++) {
if (*iter == (K0Seg2Phys(a0) & PAddrImplMask))
found = true;
diff --git a/src/mem/bus.cc b/src/mem/bus.cc
index 648b66f4d..5be53dbcd 100644
--- a/src/mem/bus.cc
+++ b/src/mem/bus.cc
@@ -317,8 +317,9 @@ BaseBus::recvRangeChange(PortID master_port_id)
defaultRange.clear();
// Only try to update these ranges if the user set a default responder.
if (useDefaultRange) {
+ // get the address ranges of the connected slave port
AddrRangeList ranges =
- masterPorts[master_port_id]->getSlavePort().getAddrRanges();
+ masterPorts[master_port_id]->getAddrRanges();
for(iter = ranges.begin(); iter != ranges.end(); iter++) {
defaultRange.push_back(*iter);
DPRINTF(BusAddrRanges, "Adding range %#llx - %#llx for default range\n",
@@ -339,7 +340,8 @@ BaseBus::recvRangeChange(PortID master_port_id)
portIter++;
}
- ranges = port->getSlavePort().getAddrRanges();
+ // get the address ranges of the connected slave port
+ ranges = port->getAddrRanges();
for (iter = ranges.begin(); iter != ranges.end(); iter++) {
DPRINTF(BusAddrRanges, "Adding range %#llx - %#llx for id %d\n",
diff --git a/src/mem/comm_monitor.cc b/src/mem/comm_monitor.cc
index d8d5806bb..8469a2469 100644
--- a/src/mem/comm_monitor.cc
+++ b/src/mem/comm_monitor.cc
@@ -347,7 +347,8 @@ CommMonitor::deviceBlockSizeSlave()
AddrRangeList
CommMonitor::getAddrRanges()
{
- return masterPort.getSlavePort().getAddrRanges();
+ // get the address ranges of the connected slave port
+ return masterPort.getAddrRanges();
}
void
diff --git a/src/mem/port.cc b/src/mem/port.cc
index 6007d303c..36ca6304a 100644
--- a/src/mem/port.cc
+++ b/src/mem/port.cc
@@ -103,6 +103,12 @@ MasterPort::peerBlockSize() const
return _slavePort->deviceBlockSize();
}
+AddrRangeList
+MasterPort::getAddrRanges() const
+{
+ return _slavePort->getAddrRanges();
+}
+
Tick
MasterPort::sendAtomic(PacketPtr pkt)
{
diff --git a/src/mem/port.hh b/src/mem/port.hh
index 49b0e1846..cfeb87571 100644
--- a/src/mem/port.hh
+++ b/src/mem/port.hh
@@ -215,6 +215,11 @@ class MasterPort : public Port
*/
unsigned peerBlockSize() const;
+ /**
+ * Get the address ranges of the connected slave port.
+ */
+ AddrRangeList getAddrRanges() const;
+
/** Inject a PrintReq for the given address to print the state of
* that address throughout the memory system. For debugging.
*/