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.
This commit is contained in:
Andreas Hansson 2012-07-09 12:35:33 -04:00
parent 49407d76aa
commit 830391cad9
5 changed files with 19 additions and 4 deletions

View 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;

View 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",

View 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

View file

@ -103,6 +103,12 @@ MasterPort::peerBlockSize() const
return _slavePort->deviceBlockSize();
}
AddrRangeList
MasterPort::getAddrRanges() const
{
return _slavePort->getAddrRanges();
}
Tick
MasterPort::sendAtomic(PacketPtr pkt)
{

View 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.
*/