gem5  v20.1.0.0
Typedefs | Functions
The AddrRange API.

These methods relate to the AddrRange and AddrRangeMap interfaces. More...

Typedefs

typedef std::list< AddrRangeAddrRangeList
 Convenience typedef for a collection of address ranges. More...
 

Functions

 AddrRange::AddrRange ()
 
 AddrRange::AddrRange (Addr _start, Addr _end, const std::vector< Addr > &_masks, uint8_t _intlv_match)
 Construct an address range. More...
 
 AddrRange::AddrRange (Addr _start, Addr _end, uint8_t _intlv_high_bit, uint8_t _xor_high_bit, uint8_t _intlv_bits, uint8_t _intlv_match)
 Legacy constructor of AddrRange. More...
 
 AddrRange::AddrRange (const std::vector< AddrRange > &ranges)
 Create an address range by merging a collection of interleaved ranges. More...
 
bool AddrRange::interleaved () const
 Determine if the range is interleaved or not. More...
 
uint64_t AddrRange::granularity () const
 Determing the interleaving granularity of the range. More...
 
uint32_t AddrRange::stripes () const
 Determine the number of interleaved address stripes this range is part of. More...
 
Addr AddrRange::size () const
 Get the size of the address range. More...
 
bool AddrRange::valid () const
 Determine if the range is valid. More...
 
Addr AddrRange::start () const
 Get the start address of the range. More...
 
Addr AddrRange::end () const
 Get the end address of the range. More...
 
std::string AddrRange::to_string () const
 Get a string representation of the range. More...
 
bool AddrRange::mergesWith (const AddrRange &r) const
 Determine if another range merges with the current one, i.e. More...
 
bool AddrRange::intersects (const AddrRange &r) const
 Determine if another range intersects this one, i.e. More...
 
bool AddrRange::isSubset (const AddrRange &r) const
 Determine if this range is a subset of another range, i.e. More...
 
bool AddrRange::contains (const Addr &a) const
 Determine if the range contains an address. More...
 
Addr AddrRange::removeIntlvBits (Addr a) const
 Remove the interleaving bits from an input address. More...
 
Addr AddrRange::addIntlvBits (Addr a) const
 This method adds the interleaving bits removed by removeIntlvBits. More...
 
Addr AddrRange::getOffset (const Addr &a) const
 Determine the offset of an address within the range. More...
 
bool AddrRange::operator< (const AddrRange &r) const
 Less-than operator used to turn an STL map into a binary search tree of non-overlapping address ranges. More...
 
bool AddrRange::operator== (const AddrRange &r) const
 
bool AddrRange::operator!= (const AddrRange &r) const
 
AddrRange RangeEx (Addr start, Addr end)
 
AddrRange RangeIn (Addr start, Addr end)
 
AddrRange RangeSize (Addr start, Addr size)
 
iterator AddrRangeMap< V, max_cache_size >::insert (const AddrRange &r, const V &d)
 
void AddrRangeMap< V, max_cache_size >::erase (iterator p)
 
void AddrRangeMap< V, max_cache_size >::erase (iterator p, iterator q)
 
void AddrRangeMap< V, max_cache_size >::clear ()
 
const_iterator AddrRangeMap< V, max_cache_size >::begin () const
 
iterator AddrRangeMap< V, max_cache_size >::begin ()
 
const_iterator AddrRangeMap< V, max_cache_size >::end () const
 
iterator AddrRangeMap< V, max_cache_size >::end ()
 
std::size_t AddrRangeMap< V, max_cache_size >::size () const
 
bool AddrRangeMap< V, max_cache_size >::empty () const
 
typedef RangeMap::iterator AddrRangeMap< V, max_cache_size >::iterator
 
typedef RangeMap::const_iterator AddrRangeMap< V, max_cache_size >::const_iterator
 
const_iterator AddrRangeMap< V, max_cache_size >::contains (const AddrRange &r) const
 Find entry that contains the given address range. More...
 
iterator AddrRangeMap< V, max_cache_size >::contains (const AddrRange &r)
 
const_iterator AddrRangeMap< V, max_cache_size >::contains (Addr r) const
 Find entry that contains the given address. More...
 
iterator AddrRangeMap< V, max_cache_size >::contains (Addr r)
 
const_iterator AddrRangeMap< V, max_cache_size >::intersects (const AddrRange &r) const
 Find entry that intersects with the given address range. More...
 
iterator AddrRangeMap< V, max_cache_size >::intersects (const AddrRange &r)
 

Detailed Description

These methods relate to the AddrRange and AddrRangeMap interfaces.

Typedef Documentation

◆ AddrRangeList

Convenience typedef for a collection of address ranges.

Definition at line 618 of file addr_range.hh.

◆ const_iterator

template<typename V , int max_cache_size = 0>
typedef RangeMap::const_iterator AddrRangeMap< V, max_cache_size >::const_iterator

Definition at line 70 of file addr_range_map.hh.

◆ iterator

template<typename V , int max_cache_size = 0>
typedef RangeMap::iterator AddrRangeMap< V, max_cache_size >::iterator

Definition at line 69 of file addr_range_map.hh.

Function Documentation

◆ addIntlvBits()

Addr AddrRange::addIntlvBits ( Addr  a) const
inline

This method adds the interleaving bits removed by removeIntlvBits.

Definition at line 512 of file addr_range.hh.

References ArmISA::a, bits(), ctz64(), ArmISA::i, insertBits(), AddrRange::intlvMatch, AddrRange::masks, and popCount().

Referenced by ChannelAddr::getPA().

◆ AddrRange() [1/4]

AddrRange::AddrRange ( )
inline

Definition at line 94 of file addr_range.hh.

◆ AddrRange() [2/4]

AddrRange::AddrRange ( Addr  _start,
Addr  _end,
const std::vector< Addr > &  _masks,
uint8_t  _intlv_match 
)
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]

Parameters
_startThe start address of this range
_endThe end address of this range (not included in the range)
_masksThe input vector of masks
intlv_matchThe matching value of the xor operations

Definition at line 128 of file addr_range.hh.

References fatal_if, AddrRange::masks, and ULL.

◆ AddrRange() [3/4]

AddrRange::AddrRange ( Addr  _start,
Addr  _end,
uint8_t  _intlv_high_bit,
uint8_t  _xor_high_bit,
uint8_t  _intlv_bits,
uint8_t  _intlv_match 
)
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

Parameters
_startThe start address of this range
_endThe end address of this range (not included in the range)
_intlv_high_bitThe MSB of the intlv bits (disabled if 0)
_xor_high_bitThe MSB of the xor bit (disabled if 0)
_intlv_bitsthe size, in bits, of the intlv and xor bits
intlv_matchThe matching value of the xor operations

Definition at line 165 of file addr_range.hh.

References fatal, fatal_if, ArmISA::i, ArmISA::mask, AddrRange::masks, and ULL.

◆ AddrRange() [4/4]

AddrRange::AddrRange ( const std::vector< AddrRange > &  ranges)
inline

Create an address range by merging a collection of interleaved ranges.

Parameters
rangesInterleaved ranges to be merged

Definition at line 215 of file addr_range.hh.

References AddrRange::_end, AddrRange::_start, fatal, AddrRange::intlvMatch, AddrRange::masks, AddrRange::mergesWith(), MipsISA::r, AddrRange::to_string(), and ULL.

◆ begin() [1/2]

template<typename V , int max_cache_size = 0>
iterator AddrRangeMap< V, max_cache_size >::begin ( )
inline

Definition at line 205 of file addr_range_map.hh.

◆ begin() [2/2]

template<typename V , int max_cache_size = 0>
const_iterator AddrRangeMap< V, max_cache_size >::begin ( ) const
inline

◆ clear()

template<typename V , int max_cache_size = 0>
void AddrRangeMap< V, max_cache_size >::clear ( )
inline

Definition at line 186 of file addr_range_map.hh.

◆ contains() [1/5]

template<typename V , int max_cache_size = 0>
iterator AddrRangeMap< V, max_cache_size >::contains ( Addr  r)
inline

Definition at line 117 of file addr_range_map.hh.

◆ contains() [2/5]

template<typename V , int max_cache_size = 0>
const_iterator AddrRangeMap< V, max_cache_size >::contains ( Addr  r) const
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.

Parameters
rAn input address
Returns
An iterator that contains the input address

Definition at line 112 of file addr_range_map.hh.

◆ contains() [3/5]

bool AddrRange::contains ( const Addr a) const
inline

◆ contains() [4/5]

template<typename V , int max_cache_size = 0>
iterator AddrRangeMap< V, max_cache_size >::contains ( const AddrRange r)
inline

Definition at line 92 of file addr_range_map.hh.

◆ contains() [5/5]

template<typename V , int max_cache_size = 0>
const_iterator AddrRangeMap< V, max_cache_size >::contains ( const AddrRange r) const
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.

Parameters
rAn input address range
Returns
An iterator that contains the input address range

Definition at line 87 of file addr_range_map.hh.

Referenced by PhysicalMemory::access(), AddrRangeMap< AbstractMemory *, 1 >::contains(), BaseXBar::findPort(), PhysicalMemory::functionalAccess(), PhysicalMemory::isMemAddr(), and PhysicalMemory::unserialize().

◆ empty()

template<typename V , int max_cache_size = 0>
bool AddrRangeMap< V, max_cache_size >::empty ( ) const
inline

Definition at line 241 of file addr_range_map.hh.

◆ end() [1/3]

template<typename V , int max_cache_size = 0>
iterator AddrRangeMap< V, max_cache_size >::end ( )
inline

Definition at line 223 of file addr_range_map.hh.

◆ end() [2/3]

template<typename V , int max_cache_size = 0>
const_iterator AddrRangeMap< V, max_cache_size >::end ( ) const
inline

◆ end() [3/3]

Addr AddrRange::end ( ) const
inline

◆ erase() [1/2]

template<typename V , int max_cache_size = 0>
void AddrRangeMap< V, max_cache_size >::erase ( iterator  p)
inline

Definition at line 164 of file addr_range_map.hh.

Referenced by BaseXBar::recvRangeChange().

◆ erase() [2/2]

template<typename V , int max_cache_size = 0>
void AddrRangeMap< V, max_cache_size >::erase ( iterator  p,
iterator  q 
)
inline

Definition at line 174 of file addr_range_map.hh.

◆ getOffset()

Addr AddrRange::getOffset ( const Addr a) const
inline

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.

Parameters
theinput address
Returns
the flat offset in the address range

Definition at line 559 of file addr_range.hh.

References AddrRange::_end, AddrRange::_start, ArmISA::a, AddrRange::interleaved(), MaxAddr, and AddrRange::removeIntlvBits().

Referenced by MemInterface::getCtrlAddr().

◆ granularity()

uint64_t AddrRange::granularity ( ) const
inline

Determing the interleaving granularity of the range.

Returns
The size of the regions created by the interleaving bits

Definition at line 266 of file addr_range.hh.

References ctz64(), AddrRange::interleaved(), ArmISA::mask, AddrRange::masks, AddrRange::size(), and ULL.

Referenced by DRAMInterface::init(), and init_range().

◆ insert()

template<typename V , int max_cache_size = 0>
iterator AddrRangeMap< V, max_cache_size >::insert ( const AddrRange r,
const V &  d 
)
inline

Definition at line 152 of file addr_range_map.hh.

Referenced by BaseXBar::recvRangeChange().

◆ interleaved()

bool AddrRange::interleaved ( ) const
inline

◆ intersects() [1/3]

template<typename V , int max_cache_size = 0>
iterator AddrRangeMap< V, max_cache_size >::intersects ( const AddrRange r)
inline

Definition at line 142 of file addr_range_map.hh.

◆ intersects() [2/3]

template<typename V , int max_cache_size = 0>
const_iterator AddrRangeMap< V, max_cache_size >::intersects ( const AddrRange r) const
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.

Parameters
rAn input address
Returns
An iterator that intersects with the input address range

Definition at line 137 of file addr_range_map.hh.

Referenced by AddrRangeMap< AbstractMemory *, 1 >::insert(), and BaseXBar::recvRangeChange().

◆ intersects() [3/3]

bool AddrRange::intersects ( const AddrRange r) const
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.

Parameters
rRange to intersect with
Returns
true if the intersection of the two ranges is not empty

Definition at line 376 of file addr_range.hh.

References AddrRange::_end, AddrRange::_start, AddrRange::contains(), AddrRange::interleaved(), AddrRange::intlvMatch, AddrRange::mergesWith(), panic, MipsISA::r, and AddrRange::to_string().

Referenced by init_range(), VMA::intersects(), and TEST().

◆ isSubset()

bool AddrRange::isSubset ( const AddrRange r) const
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.

Parameters
rRange to compare with
Returns
true if the this range is a subset of the other one

Definition at line 410 of file addr_range.hh.

References AddrRange::_end, AddrRange::_start, AddrRange::interleaved(), panic, MipsISA::r, AddrRange::size(), and AddrRange::to_string().

Referenced by AbstractMemory::access(), BaseXBar::findPort(), AbstractMemory::functionalAccess(), init_range(), AbstractMemory::initState(), VMA::isSubset(), BaseXBar::recvRangeChange(), and TEST().

◆ mergesWith()

bool AddrRange::mergesWith ( const AddrRange r) const
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.

Parameters
rRange to evaluate merging with
Returns
true if the two ranges would merge

Definition at line 360 of file addr_range.hh.

References AddrRange::_end, AddrRange::_start, AddrRange::masks, and MipsISA::r.

Referenced by AddrRange::AddrRange(), init_range(), AddrRange::intersects(), VMA::mergesWith(), and TEST().

◆ operator!=()

bool AddrRange::operator!= ( const AddrRange r) const
inline

Definition at line 607 of file addr_range.hh.

References MipsISA::r.

◆ operator<()

bool AddrRange::operator< ( const AddrRange r) const
inline

Less-than operator used to turn an STL map into a binary search tree of non-overlapping address ranges.

Parameters
rRange to compare with
Returns
true if the start address is less than that of the other range

Definition at line 581 of file addr_range.hh.

References AddrRange::_start, AddrRange::intlvMatch, and MipsISA::r.

◆ operator==()

bool AddrRange::operator== ( const AddrRange r) const
inline

◆ RangeEx()

AddrRange RangeEx ( Addr  start,
Addr  end 
)
inline

Definition at line 624 of file addr_range.hh.

Referenced by X86ISA::Interrupts::getIntAddrRange(), init_range(), and TEST().

◆ RangeIn()

AddrRange RangeIn ( Addr  start,
Addr  end 
)
inline

Definition at line 631 of file addr_range.hh.

Referenced by init_range(), and TEST().

◆ RangeSize()

AddrRange RangeSize ( Addr  start,
Addr  size 
)
inline

◆ removeIntlvBits()

Addr AddrRange::removeIntlvBits ( Addr  a) const
inline

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.

e.g., if the input address is of the form:

| a_high | x1 | a_mid | x0 | a_low |

where x0 is the LSB set in masks[0] and x1 is the LSB set in masks[1]

this function will return:

| 0 | a_high | a_mid | a_low |

Parameters
athe input address
Returns
the new address

Definition at line 480 of file addr_range.hh.

References ArmISA::a, ctz64(), ArmISA::i, insertBits(), and AddrRange::masks.

Referenced by AddrRange::getOffset().

◆ size() [1/2]

template<typename V , int max_cache_size = 0>
std::size_t AddrRangeMap< V, max_cache_size >::size ( ) const
inline

Definition at line 232 of file addr_range_map.hh.

◆ size() [2/2]

Addr AddrRange::size ( ) const
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 297 of file addr_range.hh.

References AddrRange::_end, AddrRange::_start, and AddrRange::masks.

Referenced by AbstractMemory::AbstractMemory(), KvmVM::coalesceMMIO(), PhysicalMemory::createBackingStore(), KvmVM::delayedStartup(), AddrRange::granularity(), init_range(), AddrRange::isSubset(), VMA::remap(), PhysicalMemory::serializeStore(), VMA::size(), AbstractMemory::size(), and PhysicalMemory::unserializeStore().

◆ start()

Addr AddrRange::start ( ) const
inline

◆ stripes()

uint32_t AddrRange::stripes ( ) const
inline

Determine the number of interleaved address stripes this range is part of.

Returns
The number of stripes spanned by the interleaving bits

Definition at line 288 of file addr_range.hh.

References AddrRange::masks, and ULL.

Referenced by init_range().

◆ to_string()

std::string AddrRange::to_string ( ) const
inline

◆ valid()

bool AddrRange::valid ( ) const
inline

Determine if the range is valid.

Definition at line 307 of file addr_range.hh.

References AddrRange::_end, and AddrRange::_start.

Referenced by AbstractMemory::AbstractMemory(), ChannelAddrRange::ChannelAddrRange(), GenericTimerFrame::hasEl0View(), and init_range().


Generated on Wed Sep 30 2020 14:02:20 for gem5 by doxygen 1.8.17