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:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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 *
|
||||
|
||||
@@ -325,10 +325,12 @@ class Pl111: public AmbaDmaDevice
|
||||
virtual void serialize(std::ostream &os);
|
||||
virtual void unserialize(Checkpoint *cp, const std::string §ion);
|
||||
|
||||
/** 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
|
||||
|
||||
Reference in New Issue
Block a user