MEM: Separate queries for snooping and address ranges

This patch simplifies the address-range determination mechanism and
also unifies the naming across ports and devices. It further splits
the queries for determining if a port is snooping and what address
ranges it responds to (aiming towards a separation of
cache-maintenance ports and pure memory-mapped ports). Default
behaviours are such that most ports do not have to define isSnooping,
and master ports need not implement getAddrRanges.
This commit is contained in:
Andreas Hansson
2012-01-17 12:55:09 -06:00
parent 142380a373
commit 07cf9d914b
54 changed files with 345 additions and 416 deletions

View File

@@ -703,12 +703,13 @@ Gic::postInt(uint32_t cpu, Tick when)
eventq->schedule(postIntEvent[cpu], when);
}
void
Gic::addressRanges(AddrRangeList &range_list)
AddrRangeList
Gic::getAddrRanges()
{
range_list.clear();
range_list.push_back(RangeSize(distAddr, DIST_SIZE));
range_list.push_back(RangeSize(cpuAddr, CPU_SIZE));
AddrRangeList ranges;
ranges.push_back(RangeSize(distAddr, DIST_SIZE));
ranges.push_back(RangeSize(cpuAddr, CPU_SIZE));
return ranges;
}

View File

@@ -259,7 +259,7 @@ class Gic : public PioDevice
/** Return the address ranges used by the Gic
* This is the distributor address + all cpu addresses
*/
virtual void addressRanges(AddrRangeList &range_list);
virtual AddrRangeList getAddrRanges();
/** A PIO read to the device, immediately split up into
* readDistributor() or readCpu()

View File

@@ -735,11 +735,12 @@ Pl111::generateInterrupt()
}
}
void
Pl111::addressRanges(AddrRangeList& range_list)
AddrRangeList
Pl111::getAddrRanges()
{
range_list.clear();
range_list.push_back(RangeSize(pioAddr, pioSize));
AddrRangeList ranges;
ranges.push_back(RangeSize(pioAddr, pioSize));
return ranges;
}
Pl111 *

View File

@@ -325,10 +325,12 @@ class Pl111: public AmbaDmaDevice
virtual void serialize(std::ostream &os);
virtual void unserialize(Checkpoint *cp, const std::string &section);
/** return the address ranges that this device responds to.
* @param range_list range list to populate with ranges
/**
* Determine the address ranges that this device responds to.
*
* @return a list of non-overlapping address ranges
*/
void addressRanges(AddrRangeList &range_list);
AddrRangeList getAddrRanges();
};
#endif