gem5
v21.1.0.2
|
These methods relate to the AddrRange and AddrRangeMap interfaces. More...
Typedefs | |
typedef std::list< AddrRange > | gem5::AddrRangeList |
Convenience typedef for a collection of address ranges. More... | |
These methods relate to the AddrRange and AddrRangeMap interfaces.
typedef std::list<AddrRange> gem5::AddrRangeList |
Convenience typedef for a collection of address ranges.
Definition at line 641 of file addr_range.hh.
typedef RangeMap::const_iterator gem5::AddrRangeMap< V, max_cache_size >::const_iterator |
Definition at line 73 of file addr_range_map.hh.
typedef RangeMap::iterator gem5::AddrRangeMap< V, max_cache_size >::iterator |
Definition at line 72 of file addr_range_map.hh.
This method adds the interleaving bits removed by removeIntlvBits.
Definition at line 521 of file addr_range.hh.
References gem5::ArmISA::a, gem5::bits(), gem5::ctz64(), gem5::ArmISA::i, gem5::insertBits(), gem5::AddrRange::interleaved(), gem5::AddrRange::intlvMatch, gem5::AddrRange::masks, and gem5::popCount().
Referenced by gem5::ChannelAddr::getPA().
|
inline |
Definition at line 97 of file addr_range.hh.
|
inline |
Construct an address range.
If the user provides a non empty vector of masks then the address range is interleaved. Each mask determines a set of bits that are xored to determine one bit of the sel value, starting from the least significant bit (i.e., masks[0] determines the least significant bit of sel, ...). If sel matches the provided _intlv_match then the address a is in the range.
For example if the input mask is _masks = { 1 << 8 | 1 << 11 | 1 << 13, 1 << 15 | 1 << 17 | 1 << 19}
Then a belongs to the address range if _start <= a < _end and sel == _intlv_match where sel[0] = a[8] ^ a[11] ^ a[13] sel[1] = a[15] ^ a[17] ^ a[19]
_start | The start address of this range |
_end | The end address of this range (not included in the range) |
_masks | The input vector of masks |
intlv_match | The matching value of the xor operations |
Definition at line 131 of file addr_range.hh.
References fatal_if, and gem5::AddrRange::masks.
|
inline |
Legacy constructor of AddrRange.
If the user provides a non-zero value in _intlv_high_bit the address range is interleaved.
An address a belongs to the address range if _start <= a < _end and sel == _intlv_match where sel = sel1 ^ sel2 sel1 = a[_intlv_low_bit:_intlv_high_bit] sel2 = a[_xor_low_bit:_xor_high_bit] _intlv_low_bit = _intlv_high_bit - intv_bits _xor_low_bit = _xor_high_bit - intv_bits
_start | The start address of this range |
_end | The end address of this range (not included in the range) |
_intlv_high_bit | The MSB of the intlv bits (disabled if 0) |
_xor_high_bit | The MSB of the xor bit (disabled if 0) |
_intlv_bits | the size, in bits, of the intlv and xor bits |
intlv_match | The matching value of the xor operations |
Definition at line 168 of file addr_range.hh.
References fatal, fatal_if, gem5::ArmISA::i, gem5::mask(), and gem5::AddrRange::masks.
|
inline |
Create an address range by merging a collection of interleaved ranges.
ranges | Interleaved ranges to be merged |
Definition at line 218 of file addr_range.hh.
References gem5::AddrRange::_end, gem5::AddrRange::_start, fatal, gem5::AddrRange::intlvMatch, gem5::AddrRange::masks, gem5::AddrRange::mergesWith(), gem5::MipsISA::r, and gem5::AddrRange::to_string().
|
inline |
Definition at line 208 of file addr_range_map.hh.
|
inline |
Definition at line 199 of file addr_range_map.hh.
Referenced by gem5::AddrRangeMap< gem5::MemBackdoor, 1 >::find().
|
inline |
Definition at line 189 of file addr_range_map.hh.
|
inline |
Definition at line 120 of file addr_range_map.hh.
|
inline |
Find entry that contains the given address.
Searches through the ranges in the address map and returns an iterator to the entry which range is a superset of the input address. Returns end() if none found.
r | An input address |
Definition at line 115 of file addr_range_map.hh.
|
inline |
Determine if the range contains an address.
a | Address to compare with |
Definition at line 438 of file addr_range.hh.
References gem5::AddrRange::_end, gem5::AddrRange::_start, gem5::ArmISA::a, gem5::ArmISA::i, gem5::AddrRange::intlvMatch, gem5::AddrRange::masks, gem5::popCount(), and gem5::ArmISA::sel.
Referenced by gem5::memory::MemCtrl::accessAndRespond(), gem5::VMA::contains(), gem5::X86ISA::TLB::finalizePhysical(), gem5::ArmISA::TLB::finalizePhysical(), gem5::Gicv3::getRedistributorByAddr(), gem5::memory::AbstractMemory::initState(), gem5::AddrRange::intersects(), gem5::AMDGPUDevice::isROM(), gem5::PMP::pmpCheck(), gem5::GenericWatchdog::read(), gem5::Gicv3::read(), gem5::Gicv3Its::read(), gem5::Gicv3Redistributor::read(), gem5::Gicv3Distributor::read(), gem5::GenericTimerFrame::read(), gem5::GicV2::read(), gem5::GenericTimerMem::read(), gem5::GicV2::readDistributor(), gem5::Trace::TarmacParserRecord::readMemNoEffect(), gem5::SMMUControlPort::recvAtomic(), gem5::memory::MemCtrl::recvAtomic(), gem5::memory::MemCtrl::recvFunctional(), gem5::memory::MemCtrl::recvTimingReq(), TEST(), gem5::GenericWatchdog::write(), gem5::Gicv3::write(), gem5::Gicv3Its::write(), gem5::Gicv3Redistributor::write(), gem5::Gicv3Distributor::write(), gem5::GenericTimerFrame::write(), gem5::GicV2::write(), gem5::GenericTimerMem::write(), and gem5::GicV2::writeDistributor().
|
inline |
Definition at line 95 of file addr_range_map.hh.
|
inline |
Find entry that contains the given address range.
Searches through the ranges in the address map and returns an iterator to the entry which range is a superset of the input address range. Returns end() if none found.
r | An input address range |
Definition at line 90 of file addr_range_map.hh.
Referenced by gem5::AddrRangeMap< gem5::MemBackdoor, 1 >::contains(), and gem5::ruby::AbstractController::mapAddressToDownstreamMachine().
|
inline |
Definition at line 244 of file addr_range_map.hh.
|
inline |
Definition at line 226 of file addr_range_map.hh.
|
inline |
|
inline |
Get the end address of the range.
Definition at line 324 of file addr_range.hh.
References gem5::AddrRange::_end.
Referenced by gem5::MemPool::allocate(), gem5::GPUComputeDriver::allocateGpuVma(), gem5::VMA::end(), sc_gem5::TlmToGem5Bridge< BITWIDTH >::get_direct_mem_ptr(), gem5::init_range(), sc_gem5::TlmToGem5Bridge< BITWIDTH >::invalidateDmi(), gem5::VMA::isStrictSuperset(), gem5::VMA::remap(), gem5::VMA::sanityCheck(), gem5::GPUComputeDriver::setMtype(), gem5::VMA::sliceRegionLeft(), and gem5::VMA::sliceRegionRight().
|
inline |
Definition at line 167 of file addr_range_map.hh.
|
inline |
Definition at line 177 of file addr_range_map.hh.
Determine the offset of an address within the range.
This function returns the offset of the given address from the starting address discarding any bits that are used for interleaving. This way we can convert the input address to a new unique address in a continuous range that starts from 0.
the | input address |
Definition at line 575 of file addr_range.hh.
References gem5::AddrRange::_end, gem5::AddrRange::_start, gem5::ArmISA::a, gem5::AddrRange::interleaved(), gem5::MaxAddr, and gem5::AddrRange::removeIntlvBits().
Referenced by gem5::memory::MemInterface::getCtrlAddr().
|
inline |
Determing the interleaving granularity of the range.
Definition at line 269 of file addr_range.hh.
References gem5::ctz64(), gem5::AddrRange::interleaved(), gem5::mask(), gem5::AddrRange::masks, and gem5::AddrRange::size().
Referenced by gem5::memory::DRAMInterface::init(), and gem5::init_range().
|
inline |
Definition at line 155 of file addr_range_map.hh.
Referenced by gem5::ruby::AbstractController::init().
|
inline |
Determine if the range is interleaved or not.
Definition at line 260 of file addr_range.hh.
References gem5::AddrRange::masks.
Referenced by gem5::AddrRange::addIntlvBits(), gem5::ChannelAddrRange::ChannelAddrRange(), gem5::memory::PhysicalMemory::createBackingStore(), gem5::KvmVM::delayedStartup(), gem5::AddrRange::getOffset(), gem5::AddrRange::granularity(), gem5::memory::DRAMInterface::init(), gem5::init_range(), gem5::AddrRange::intersects(), gem5::AddrRange::isSubset(), gem5::AddrRange::operator<(), gem5::AddrRange::removeIntlvBits(), gem5::memory::AbstractMemory::setBackingStore(), and gem5::AddrRange::to_string().
|
inline |
Definition at line 145 of file addr_range_map.hh.
|
inline |
Find entry that intersects with the given address range.
Searches through the ranges in the address map and returns an iterator to the first entry which range intersects with the input address.
r | An input address |
Definition at line 140 of file addr_range_map.hh.
Referenced by gem5::ruby::AbstractController::init(), and gem5::AddrRangeMap< gem5::MemBackdoor, 1 >::insert().
|
inline |
Determine if another range intersects this one, i.e.
if there is an address that is both in this range and the other range. No check is made to ensure either range is valid.
r | Range to intersect with |
Definition at line 379 of file addr_range.hh.
References gem5::AddrRange::_end, gem5::AddrRange::_start, gem5::AddrRange::contains(), gem5::AddrRange::interleaved(), gem5::AddrRange::intlvMatch, gem5::AddrRange::mergesWith(), panic, gem5::MipsISA::r, and gem5::AddrRange::to_string().
Referenced by gem5::init_range(), gem5::VMA::intersects(), and TEST().
|
inline |
Determine if this range is a subset of another range, i.e.
if every address in this range is also in the other range. No check is made to ensure either range is valid.
r | Range to compare with |
Definition at line 413 of file addr_range.hh.
References gem5::AddrRange::_end, gem5::AddrRange::_start, gem5::AddrRange::interleaved(), panic, gem5::MipsISA::r, gem5::AddrRange::size(), and gem5::AddrRange::to_string().
Referenced by gem5::memory::AbstractMemory::access(), gem5::BaseXBar::findPort(), gem5::memory::AbstractMemory::functionalAccess(), gem5::System::getDeviceMemory(), gem5::init_range(), gem5::memory::AbstractMemory::initState(), gem5::VMA::isSubset(), gem5::PMAChecker::isUncacheable(), gem5::BaseXBar::recvRangeChange(), and TEST().
|
inline |
Determine if another range merges with the current one, i.e.
if they are part of the same contigous range and have the same interleaving bits.
r | Range to evaluate merging with |
Definition at line 363 of file addr_range.hh.
References gem5::AddrRange::_end, gem5::AddrRange::_start, gem5::AddrRange::masks, and gem5::MipsISA::r.
Referenced by gem5::AddrRange::AddrRange(), gem5::init_range(), gem5::AddrRange::intersects(), gem5::VMA::mergesWith(), and TEST().
|
inline |
Definition at line 630 of file addr_range.hh.
References gem5::MipsISA::r.
|
inline |
Less-than operator used to turn an STL map into a binary search tree of non-overlapping address ranges.
r | Range to compare with |
Definition at line 597 of file addr_range.hh.
References gem5::AddrRange::_start, gem5::AddrRange::interleaved(), gem5::AddrRange::intlvMatch, and gem5::MipsISA::r.
|
inline |
Definition at line 617 of file addr_range.hh.
References gem5::AddrRange::_end, gem5::AddrRange::_start, gem5::AddrRange::intlvMatch, gem5::AddrRange::masks, and gem5::MipsISA::r.
Definition at line 647 of file addr_range.hh.
Referenced by gem5::X86ISA::Interrupts::getIntAddrRange(), gem5::init_range(), and TEST().
Definition at line 654 of file addr_range.hh.
Referenced by gem5::init_range(), and TEST().
Definition at line 661 of file addr_range.hh.
Referenced by gem5::AMDGPUDevice::AMDGPUDevice(), gem5::AddrRangeMap< gem5::MemBackdoor, 1 >::contains(), gem5::Packet::getAddrRange(), gem5::TesterDma::getAddrRanges(), gem5::NoMaliGpu::getAddrRanges(), gem5::Gicv2m::getAddrRanges(), gem5::X86ISA::I8042::getAddrRanges(), gem5::Iob::getAddrRanges(), gem5::MHU::getAddrRanges(), gem5::Gicv3Its::getAddrRanges(), gem5::BasicPioDevice::getAddrRanges(), gem5::VGic::getAddrRanges(), gem5::Uart8250::getAddrRanges(), gem5::X86ISA::Interrupts::getAddrRanges(), gem5::GenericPciHost::getAddrRanges(), gem5::HSAPacketProcessor::getAddrRanges(), gem5::Pl111::getAddrRanges(), gem5::UFSHostDevice::getAddrRanges(), gem5::HDLcd::HDLcd(), gem5::Gicv3::init(), gem5::init_range(), gem5::GPUComputeDriver::setMtype(), and TEST().
Remove the interleaving bits from an input address.
This function returns a new address in a continous range [ start, start + size / intlv_bits). We can achieve this by discarding the LSB in each mask.
where x0 is the LSB set in masks[0] and x1 is the LSB set in masks[1]
a | the input address |
Definition at line 483 of file addr_range.hh.
References gem5::ArmISA::a, gem5::ctz64(), gem5::ArmISA::i, gem5::insertBits(), gem5::AddrRange::interleaved(), and gem5::AddrRange::masks.
Referenced by gem5::AddrRange::getOffset().
|
inline |
Definition at line 235 of file addr_range_map.hh.
|
inline |
Get the size of the address range.
For a case where interleaving is used we make the simplifying assumption that the size is a divisible by the size of the interleaving slice.
Definition at line 300 of file addr_range.hh.
References gem5::AddrRange::_end, gem5::AddrRange::_start, and gem5::AddrRange::masks.
Referenced by gem5::memory::AbstractMemory::AbstractMemory(), gem5::KvmVM::coalesceMMIO(), gem5::memory::PhysicalMemory::createBackingStore(), gem5::KvmVM::delayedStartup(), gem5::AddrRange::granularity(), gem5::init_range(), gem5::AddrRange::isSubset(), gem5::VMA::remap(), gem5::GPUDynInst::resolveFlatSegment(), gem5::memory::PhysicalMemory::serializeStore(), gem5::VMA::size(), gem5::memory::AbstractMemory::size(), and gem5::memory::PhysicalMemory::unserializeStore().
|
inline |
Get the start address of the range.
Definition at line 317 of file addr_range.hh.
References gem5::AddrRange::_start.
Referenced by gem5::MemPool::allocate(), gem5::GPUComputeDriver::allocateGpuVma(), gem5::KvmVM::coalesceMMIO(), gem5::MuxingKvmGic::copyGicState(), gem5::KvmVM::delayedStartup(), gem5::VMA::fillMemPages(), gem5::X86ISA::TLB::finalizePhysical(), gem5::ArmISA::TLB::finalizePhysical(), sc_gem5::TlmToGem5Bridge< BITWIDTH >::get_direct_mem_ptr(), gem5::Gicv3::getRedistributorByAddr(), gem5::init_range(), gem5::memory::AbstractMemory::initState(), sc_gem5::TlmToGem5Bridge< BITWIDTH >::invalidateDmi(), gem5::VMA::isStrictSuperset(), gem5::Gicv3::read(), gem5::Gicv3Its::read(), gem5::Gicv3Redistributor::read(), gem5::Gicv3Distributor::read(), gem5::GenericTimerFrame::read(), gem5::GenericTimerMem::read(), gem5::GenericWatchdog::readControl(), gem5::SMMUv3::readControl(), gem5::GicV2::readCpu(), gem5::GicV2::readDistributor(), gem5::scmi::AgentChannel::readLength(), gem5::scmi::AgentChannel::readMessage(), gem5::GenericWatchdog::readRefresh(), gem5::scmi::AgentChannel::readStatus(), gem5::VMA::remap(), gem5::VMA::sanityCheck(), gem5::GPUComputeDriver::setMtype(), gem5::VMA::sliceRegionLeft(), gem5::VMA::sliceRegionRight(), gem5::VMA::start(), gem5::memory::AbstractMemory::start(), gem5::memory::AbstractMemory::toHostAddr(), gem5::GenericTimerMem::validateFrameRange(), gem5::Gicv3::write(), gem5::Gicv3Its::write(), gem5::Gicv3Redistributor::write(), gem5::Gicv3Distributor::write(), gem5::GenericTimerFrame::write(), gem5::GenericTimerMem::write(), gem5::scmi::PlatformChannel::writeBackMessage(), gem5::GenericWatchdog::writeControl(), gem5::SMMUv3::writeControl(), gem5::GicV2::writeCpu(), gem5::GicV2::writeDistributor(), and gem5::GenericWatchdog::writeRefresh().
|
inline |
Determine the number of interleaved address stripes this range is part of.
Definition at line 291 of file addr_range.hh.
References gem5::AddrRange::masks.
Referenced by gem5::init_range().
|
inline |
Get a string representation of the range.
This could alternatively be implemented as a operator<<, but at the moment that seems like overkill.
Definition at line 333 of file addr_range.hh.
References gem5::AddrRange::_end, gem5::AddrRange::_start, gem5::bits(), gem5::csprintf(), gem5::ctz64(), gem5::ArmISA::i, gem5::AddrRange::interleaved(), gem5::AddrRange::intlvMatch, gem5::mask(), and gem5::AddrRange::masks.
Referenced by gem5::memory::AbstractMemory::AbstractMemory(), gem5::AddrRange::AddrRange(), gem5::memory::PhysicalMemory::createBackingStore(), gem5::BaseXBar::findPort(), gem5::init_range(), gem5::memory::AbstractMemory::initState(), gem5::AddrRange::intersects(), gem5::AddrRange::isSubset(), and gem5::BaseXBar::recvRangeChange().
|
inline |
Determine if the range is valid.
Definition at line 310 of file addr_range.hh.
References gem5::AddrRange::_end, and gem5::AddrRange::_start.
Referenced by gem5::memory::AbstractMemory::AbstractMemory(), gem5::MemPool::allocate(), gem5::ChannelAddrRange::ChannelAddrRange(), gem5::GenericTimerFrame::hasEl0View(), and gem5::init_range().