From 830391cad9764b923edd8f761e9fe5d11fd9d837 Mon Sep 17 00:00:00 2001 From: Andreas Hansson Date: Mon, 9 Jul 2012 12:35:33 -0400 Subject: [PATCH] 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. --- src/kern/tru64/tru64_events.cc | 3 ++- src/mem/bus.cc | 6 ++++-- src/mem/comm_monitor.cc | 3 ++- src/mem/port.cc | 6 ++++++ src/mem/port.hh | 5 +++++ 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. */ -- 2.30.2