Port: Add getAddrRanges to master port (asking slave port)
authorAndreas Hansson <andreas.hansson@arm.com>
Mon, 9 Jul 2012 16:35:33 +0000 (12:35 -0400)
committerAndreas Hansson <andreas.hansson@arm.com>
Mon, 9 Jul 2012 16:35:33 +0000 (12:35 -0400)
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.

src/kern/tru64/tru64_events.cc
src/mem/bus.cc
src/mem/comm_monitor.cc
src/mem/port.cc
src/mem/port.hh

index 89f2990b9a2502f47d4a39658ada64c1d82e3dca..fd4c20bddce7f5de4a9e762eb220097633e5bc0b 100644 (file)
@@ -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;
index 648b66f4d10fe42e6305d7b9c21dd476c89714d2..5be53dbcd03cd2bfc2d1906d609dc97bbe02adc3 100644 (file)
@@ -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",
index d8d5806bb8494ca71c3b93c3ad88a57bd3e16726..8469a246996e36d1860e483505f242d36159abce 100644 (file)
@@ -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
index 6007d303ccdcbd6564c0fc28c58f2e803c1ce776..36ca6304a851bb2d7f68b961fa5baffbe0c12906 100644 (file)
@@ -103,6 +103,12 @@ MasterPort::peerBlockSize() const
     return _slavePort->deviceBlockSize();
 }
 
+AddrRangeList
+MasterPort::getAddrRanges() const
+{
+    return _slavePort->getAddrRanges();
+}
+
 Tick
 MasterPort::sendAtomic(PacketPtr pkt)
 {
index 49b0e18461b6dd7e84038857d5d8e256f4e98ca4..cfeb87571dd114afc955679c21c5163ab7d0bb29 100644 (file)
@@ -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.
      */