gem5 v24.0.0.0
|
Long-descriptor format (LPAE) More...
#include <table_walker.hh>
Public Types | |
enum | EntryType { Invalid , Table , Block , Page } |
Descriptor type. More... | |
Public Member Functions | |
LongDescriptor () | |
uint8_t * | getRawPtr () override |
uint64_t | getRawData () const override |
std::string | dbgHeader () const override |
bool | secure (bool have_security, WalkerState *currState) const override |
Returns true if this entry targets the secure physical address map. | |
EntryType | type () const |
Return the descriptor type. | |
uint8_t | offsetBits () const override |
Return the bit width of the page/block offset. | |
Addr | pfn () const override |
Return the physical frame, bits shifted right. | |
Addr | paddr () const |
Return the physical address of the entry. | |
Addr | nextTableAddr () const |
Return the address of the next page table. | |
Addr | nextDescAddr (Addr va) const |
Return the address of the next descriptor. | |
bool | xn () const override |
Is execution allowed on this mapping? | |
bool | pxn () const |
Is privileged execution allowed on this mapping? (LPAE only) | |
bool | contiguousHint () const |
Contiguous hint bit. | |
bool | global (WalkerState *currState) const override |
Is the translation global (no asid used)? | |
bool | af () const |
Returns true if the access flag (AF) is set. | |
uint8_t | sh () const |
2-bit shareability field | |
uint8_t | ap () const override |
2-bit access protection flags | |
bool | rw () const |
Read/write access protection flag. | |
bool | user () const |
User/privileged level access protection flag. | |
TlbEntry::DomainType | domain () const override |
uint8_t | attrIndx () const |
Attribute index. | |
uint8_t | memAttr () const |
Memory attributes, only used by stage 2 translations. | |
void | setAf () |
Set access flag that this entry has been touched. | |
bool | dirty () const |
This entry needs to be written back to memory. | |
bool | secureTable () const |
Whether the subsequent levels of lookup are secure. | |
uint8_t | apTable () const |
Two bit access protection flags for subsequent levels of lookup. | |
uint8_t | rwTable () const |
R/W protection flag for subsequent levels of lookup. | |
uint8_t | userTable () const |
User/privileged mode protection flag for subsequent levels of lookup. | |
bool | xnTable () const |
Is execution allowed on subsequent lookup levels? | |
bool | pxnTable () const |
Is privileged execution allowed on subsequent lookup levels? | |
Public Member Functions inherited from gem5::ArmISA::TableWalker::DescriptorBase | |
DescriptorBase () | |
virtual uint8_t | texcb () const |
virtual bool | shareable () const |
Static Public Member Functions | |
static uint8_t | ap (bool rw, bool user) |
Return the AP bits as compatible with the AP[2:0] format. | |
Public Attributes | |
uint64_t | data |
The raw bits of the entry. | |
bool | _dirty |
This entry has been modified (access flag set) and needs to be written back to memory. | |
bool | aarch64 |
True if the current lookup is performed in AArch64 state. | |
GrainSize | grainSize |
Width of the granule size in bits. | |
uint8_t | physAddrRange |
Public Attributes inherited from gem5::ArmISA::TableWalker::DescriptorBase | |
LookupLevel | lookupLevel |
Current lookup level for this descriptor. | |
Long-descriptor format (LPAE)
Definition at line 425 of file table_walker.hh.
|
inline |
Definition at line 437 of file table_walker.hh.
|
inline |
Returns true if the access flag (AF) is set.
Definition at line 683 of file table_walker.hh.
References gem5::bits(), data, Page, and type().
Referenced by gem5::ArmISA::TableWalker::doLongDescriptor().
|
inlineoverridevirtual |
2-bit access protection flags
Implements gem5::ArmISA::TableWalker::DescriptorBase.
Definition at line 699 of file table_walker.hh.
References gem5::bits(), data, Page, and type().
Referenced by gem5::ArmISA::TableWalker::doLongDescriptor(), and gem5::ArmISA::TableWalker::insertTableEntry().
|
inlinestatic |
Return the AP bits as compatible with the AP[2:0] format.
Utility function used to simplify the code in the TLB for performing permission checks.
Definition at line 726 of file table_walker.hh.
|
inline |
Two bit access protection flags for subsequent levels of lookup.
Definition at line 780 of file table_walker.hh.
References gem5::bits(), data, Table, and type().
|
inline |
Attribute index.
Definition at line 740 of file table_walker.hh.
References gem5::bits(), data, Page, and type().
Referenced by gem5::ArmISA::TableWalker::memAttrsAArch64(), and gem5::ArmISA::TableWalker::memAttrsLPAE().
|
inline |
Contiguous hint bit.
Definition at line 654 of file table_walker.hh.
References gem5::bits(), data, Page, and type().
|
inlineoverridevirtual |
Implements gem5::ArmISA::TableWalker::DescriptorBase.
Definition at line 470 of file table_walker.hh.
References Block, gem5::ArmISA::TableWalker::DescriptorBase::lookupLevel, Page, panic, Table, and type().
Referenced by gem5::ArmISA::TableWalker::insertPartialTableEntry().
|
inline |
This entry needs to be written back to memory.
Definition at line 765 of file table_walker.hh.
References _dirty.
|
inlineoverridevirtual |
Implements gem5::ArmISA::TableWalker::DescriptorBase.
Definition at line 732 of file table_walker.hh.
References gem5::ArmISA::TlbEntry::Client.
Referenced by gem5::ArmISA::TableWalker::insertPartialTableEntry().
|
inlineoverridevirtual |
Implements gem5::ArmISA::TableWalker::DescriptorBase.
Definition at line 464 of file table_walker.hh.
References data.
Referenced by gem5::ArmISA::TableWalker::insertPartialTableEntry().
|
inlineoverridevirtual |
Implements gem5::ArmISA::TableWalker::DescriptorBase.
Definition at line 458 of file table_walker.hh.
References data.
|
inlineoverridevirtual |
Is the translation global (no asid used)?
Implements gem5::ArmISA::TableWalker::DescriptorBase.
Definition at line 662 of file table_walker.hh.
References gem5::ArmISA::TableWalker::WalkerState::aarch64, gem5::bits(), gem5::ArmISA::TableWalker::currState, data, gem5::ArmISA::MMU::hasUnprivRegime(), gem5::ArmISA::TableWalker::WalkerState::isSecure, Page, gem5::ArmISA::TableWalker::WalkerState::regime, gem5::ArmISA::TableWalker::WalkerState::secureLookup, and type().
|
inline |
Memory attributes, only used by stage 2 translations.
Definition at line 748 of file table_walker.hh.
References gem5::bits(), data, Page, and type().
Referenced by gem5::ArmISA::TableWalker::memAttrsAArch64(), and gem5::ArmISA::TableWalker::memAttrsLPAE().
Return the address of the next descriptor.
Definition at line 618 of file table_walker.hh.
References aarch64, gem5::bits(), grainSize, gem5::ArmISA::TableWalker::DescriptorBase::lookupLevel, nextTableAddr(), gem5::ArmISA::pa, gem5::ArmISA::stride, Table, type(), and gem5::ArmISA::va.
Referenced by gem5::ArmISA::TableWalker::doLongDescriptor().
|
inline |
Return the address of the next page table.
Definition at line 600 of file table_walker.hh.
References aarch64, gem5::bits(), data, gem5::ArmISA::Grain64KB, grainSize, gem5::mbits(), physAddrRange, Table, and type().
Referenced by gem5::ArmISA::TableWalker::insertPartialTableEntry(), and nextDescAddr().
|
inlineoverridevirtual |
Return the bit width of the page/block offset.
Implements gem5::ArmISA::TableWalker::DescriptorBase.
Definition at line 544 of file table_walker.hh.
References gem5::ArmISA::getPageTableOps(), gem5::ArmISA::Grain16KB, gem5::ArmISA::Grain4KB, gem5::ArmISA::Grain64KB, grainSize, gem5::ArmISA::TableWalker::DescriptorBase::lookupLevel, Page, panic, Table, and type().
Referenced by gem5::ArmISA::TableWalker::insertPartialTableEntry(), paddr(), and pfn().
|
inline |
Return the physical address of the entry.
Definition at line 584 of file table_walker.hh.
References aarch64, gem5::X86ISA::addr, gem5::bits(), data, gem5::ArmISA::Grain64KB, grainSize, gem5::mbits(), offsetBits(), and physAddrRange.
Referenced by gem5::ArmISA::TableWalker::doLongDescriptor(), and pfn().
|
inlineoverridevirtual |
Return the physical frame, bits shifted right.
Implements gem5::ArmISA::TableWalker::DescriptorBase.
Definition at line 577 of file table_walker.hh.
References offsetBits(), and paddr().
|
inline |
Is privileged execution allowed on this mapping? (LPAE only)
Definition at line 646 of file table_walker.hh.
References gem5::bits(), data, Page, and type().
Referenced by gem5::ArmISA::TableWalker::doLongDescriptor(), and gem5::ArmISA::TableWalker::insertTableEntry().
|
inline |
Is privileged execution allowed on subsequent lookup levels?
Definition at line 813 of file table_walker.hh.
References gem5::bits(), data, Table, and type().
Referenced by gem5::ArmISA::TableWalker::doLongDescriptor().
|
inline |
Read/write access protection flag.
Definition at line 708 of file table_walker.hh.
References gem5::bits(), data, Page, and type().
Referenced by ap().
|
inline |
R/W protection flag for subsequent levels of lookup.
Definition at line 788 of file table_walker.hh.
References gem5::bits(), data, Table, and type().
Referenced by gem5::ArmISA::TableWalker::doLongDescriptor().
|
inlineoverridevirtual |
Returns true if this entry targets the secure physical address map.
Implements gem5::ArmISA::TableWalker::DescriptorBase.
Definition at line 491 of file table_walker.hh.
References gem5::bits(), gem5::ArmISA::TableWalker::currState, data, Page, gem5::ArmISA::TableWalker::WalkerState::secureLookup, and type().
Referenced by gem5::ArmISA::TableWalker::insertPartialTableEntry().
|
inline |
Whether the subsequent levels of lookup are secure.
Definition at line 772 of file table_walker.hh.
References gem5::bits(), data, Table, and type().
Referenced by gem5::ArmISA::TableWalker::doLongDescriptor().
|
inline |
Set access flag that this entry has been touched.
Mark the entry as requiring a writeback, in the future.
Definition at line 757 of file table_walker.hh.
|
inline |
2-bit shareability field
Definition at line 691 of file table_walker.hh.
References gem5::bits(), data, Page, and type().
Referenced by gem5::ArmISA::TableWalker::memAttrsAArch64(), and gem5::ArmISA::TableWalker::memAttrsLPAE().
|
inline |
Return the descriptor type.
Definition at line 503 of file table_walker.hh.
References gem5::bits(), Block, data, gem5::ArmISA::Grain16KB, gem5::ArmISA::Grain4KB, gem5::ArmISA::Grain64KB, grainSize, Invalid, gem5::ArmISA::TableWalker::DescriptorBase::lookupLevel, Page, physAddrRange, and Table.
Referenced by af(), ap(), apTable(), attrIndx(), contiguousHint(), dbgHeader(), gem5::ArmISA::TableWalker::doLongDescriptor(), global(), memAttr(), nextDescAddr(), nextTableAddr(), offsetBits(), pxn(), pxnTable(), rw(), rwTable(), secure(), secureTable(), sh(), user(), userTable(), xn(), and xnTable().
|
inline |
User/privileged level access protection flag.
Definition at line 716 of file table_walker.hh.
References gem5::bits(), data, Page, and type().
Referenced by ap().
|
inline |
User/privileged mode protection flag for subsequent levels of lookup.
Definition at line 797 of file table_walker.hh.
References gem5::bits(), data, Table, and type().
Referenced by gem5::ArmISA::TableWalker::doLongDescriptor().
|
inlineoverridevirtual |
Is execution allowed on this mapping?
Implements gem5::ArmISA::TableWalker::DescriptorBase.
Definition at line 638 of file table_walker.hh.
References gem5::bits(), data, Page, and type().
Referenced by gem5::ArmISA::TableWalker::doLongDescriptor().
|
inline |
Is execution allowed on subsequent lookup levels?
Definition at line 805 of file table_walker.hh.
References gem5::bits(), data, Table, and type().
Referenced by gem5::ArmISA::TableWalker::doLongDescriptor().
bool gem5::ArmISA::TableWalker::LongDescriptor::_dirty |
This entry has been modified (access flag set) and needs to be written back to memory.
Definition at line 447 of file table_walker.hh.
bool gem5::ArmISA::TableWalker::LongDescriptor::aarch64 |
True if the current lookup is performed in AArch64 state.
Definition at line 450 of file table_walker.hh.
Referenced by nextDescAddr(), nextTableAddr(), paddr(), gem5::ArmISA::TableWalker::processWalkAArch64(), and gem5::ArmISA::TableWalker::processWalkLPAE().
uint64_t gem5::ArmISA::TableWalker::LongDescriptor::data |
The raw bits of the entry.
Definition at line 443 of file table_walker.hh.
Referenced by af(), ap(), apTable(), attrIndx(), contiguousHint(), gem5::ArmISA::TableWalker::doLongDescriptor(), getRawData(), getRawPtr(), global(), memAttr(), nextTableAddr(), paddr(), pxn(), pxnTable(), rw(), rwTable(), secure(), secureTable(), setAf(), sh(), type(), user(), userTable(), xn(), and xnTable().
GrainSize gem5::ArmISA::TableWalker::LongDescriptor::grainSize |
Width of the granule size in bits.
Definition at line 453 of file table_walker.hh.
Referenced by gem5::ArmISA::TableWalker::insertPartialTableEntry(), gem5::ArmISA::TableWalker::insertTableEntry(), nextDescAddr(), nextTableAddr(), offsetBits(), paddr(), gem5::ArmISA::TableWalker::processWalkAArch64(), gem5::ArmISA::TableWalker::processWalkLPAE(), and type().
uint8_t gem5::ArmISA::TableWalker::LongDescriptor::physAddrRange |
Definition at line 455 of file table_walker.hh.
Referenced by nextTableAddr(), paddr(), gem5::ArmISA::TableWalker::processWalkAArch64(), and type().