gem5
v20.1.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 () | |
virtual uint64_t | getRawData () const |
virtual std::string | dbgHeader () const |
bool | secure (bool have_security, WalkerState *currState) const |
Returns true if this entry targets the secure physical address map. More... | |
EntryType | type () const |
Return the descriptor type. More... | |
uint8_t | offsetBits () const |
Return the bit width of the page/block offset. More... | |
Addr | pfn () const |
Return the physical frame, bits shifted right. More... | |
Addr | paddr (Addr va) const |
Return the complete physical address given a VA. More... | |
Addr | paddr () const |
Return the physical address of the entry. More... | |
Addr | nextTableAddr () const |
Return the address of the next page table. More... | |
Addr | nextDescAddr (Addr va) const |
Return the address of the next descriptor. More... | |
bool | xn () const |
Is execution allowed on this mapping? More... | |
bool | pxn () const |
Is privileged execution allowed on this mapping? (LPAE only) More... | |
bool | contiguousHint () const |
Contiguous hint bit. More... | |
bool | global (WalkerState *currState) const |
Is the translation global (no asid used)? More... | |
bool | af () const |
Returns true if the access flag (AF) is set. More... | |
uint8_t | sh () const |
2-bit shareability field More... | |
uint8_t | ap () const |
2-bit access protection flags More... | |
bool | rw () const |
Read/write access protection flag. More... | |
bool | user () const |
User/privileged level access protection flag. More... | |
TlbEntry::DomainType | domain () const |
uint8_t | attrIndx () const |
Attribute index. More... | |
uint8_t | memAttr () const |
Memory attributes, only used by stage 2 translations. More... | |
void | setAf () |
Set access flag that this entry has been touched. More... | |
bool | dirty () const |
This entry needs to be written back to memory. More... | |
bool | secureTable () const |
Whether the subsequent levels of lookup are secure. More... | |
uint8_t | apTable () const |
Two bit access protection flags for subsequent levels of lookup. More... | |
uint8_t | rwTable () const |
R/W protection flag for subsequent levels of lookup. More... | |
uint8_t | userTable () const |
User/privileged mode protection flag for subsequent levels of lookup. More... | |
bool | xnTable () const |
Is execution allowed on subsequent lookup levels? More... | |
bool | pxnTable () const |
Is privileged execution allowed on subsequent lookup levels? More... | |
Public Member Functions inherited from 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. More... | |
Public Attributes | |
uint64_t | data |
The raw bits of the entry. More... | |
bool | _dirty |
This entry has been modified (access flag set) and needs to be written back to memory. More... | |
bool | aarch64 |
True if the current lookup is performed in AArch64 state. More... | |
GrainSize | grainSize |
Width of the granule size in bits. More... | |
Public Attributes inherited from ArmISA::TableWalker::DescriptorBase | |
LookupLevel | lookupLevel |
Current lookup level for this descriptor. More... | |
Long-descriptor format (LPAE)
Definition at line 375 of file table_walker.hh.
|
inline |
Definition at line 385 of file table_walker.hh.
|
inline |
Returns true if the access flag (AF) is set.
Definition at line 566 of file table_walker.hh.
References bits(), data, Page, and type().
Referenced by ArmISA::TableWalker::doLongDescriptor().
|
inlinevirtual |
2-bit access protection flags
Implements ArmISA::TableWalker::DescriptorBase.
Definition at line 580 of file table_walker.hh.
References bits(), data, Page, and type().
Referenced by ArmISA::TableWalker::doLongDescriptor(), and 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 604 of file table_walker.hh.
|
inline |
|
inline |
Attribute index.
Definition at line 617 of file table_walker.hh.
References bits(), data, Page, and type().
Referenced by ArmISA::TableWalker::memAttrsAArch64(), and ArmISA::TableWalker::memAttrsLPAE().
|
inline |
|
inlinevirtual |
Implements ArmISA::TableWalker::DescriptorBase.
Definition at line 399 of file table_walker.hh.
References ArmISA::L3, ArmISA::TableWalker::DescriptorBase::lookupLevel, Page, and type().
|
inline |
This entry needs to be written back to memory.
Definition at line 639 of file table_walker.hh.
References _dirty.
|
inlinevirtual |
Implements ArmISA::TableWalker::DescriptorBase.
Definition at line 609 of file table_walker.hh.
References ArmISA::TlbEntry::Client, Page, and type().
|
inlinevirtual |
Implements ArmISA::TableWalker::DescriptorBase.
Definition at line 394 of file table_walker.hh.
References data.
|
inlinevirtual |
Is the translation global (no asid used)?
Implements ArmISA::TableWalker::DescriptorBase.
Definition at line 548 of file table_walker.hh.
References ArmISA::TableWalker::WalkerState::aarch64, bits(), ArmISA::TableWalker::currState, data, ArmISA::TableWalker::WalkerState::el, ArmISA::EL2, ArmISA::EL3, ArmISA::TableWalker::WalkerState::isSecure, Page, ArmISA::TableWalker::WalkerState::secureLookup, and type().
|
inline |
Memory attributes, only used by stage 2 translations.
Definition at line 624 of file table_walker.hh.
References bits(), data, Page, and type().
Referenced by ArmISA::TableWalker::memAttrsAArch64(), and ArmISA::TableWalker::memAttrsLPAE().
Return the address of the next descriptor.
Definition at line 508 of file table_walker.hh.
References aarch64, bits(), grainSize, ArmISA::L1, ArmISA::TableWalker::DescriptorBase::lookupLevel, nextTableAddr(), ArmISA::pa, ArmISA::stride, Table, type(), and ArmISA::va.
Referenced by ArmISA::TableWalker::doLongDescriptor().
|
inline |
Return the address of the next page table.
Definition at line 498 of file table_walker.hh.
References aarch64, data, grainSize, mbits(), Table, and type().
Referenced by nextDescAddr().
|
inlinevirtual |
Return the bit width of the page/block offset.
Implements ArmISA::TableWalker::DescriptorBase.
Definition at line 444 of file table_walker.hh.
References ArmISA::TableWalker::Grain16KB, ArmISA::TableWalker::Grain4KB, ArmISA::TableWalker::Grain64KB, grainSize, ArmISA::L1, ArmISA::TableWalker::DescriptorBase::lookupLevel, Page, panic, and type().
Referenced by ArmISA::TableWalker::doLongDescriptor(), paddr(), and pfn().
|
inline |
Return the physical address of the entry.
Definition at line 490 of file table_walker.hh.
References aarch64, data, mbits(), and offsetBits().
Return the complete physical address given a VA.
Definition at line 481 of file table_walker.hh.
References aarch64, data, mbits(), ArmISA::n, offsetBits(), and ArmISA::va.
|
inlinevirtual |
Return the physical frame, bits shifted right.
Implements ArmISA::TableWalker::DescriptorBase.
Definition at line 473 of file table_walker.hh.
References aarch64, bits(), data, and offsetBits().
|
inline |
Is privileged execution allowed on this mapping? (LPAE only)
Definition at line 534 of file table_walker.hh.
References bits(), data, Page, and type().
Referenced by ArmISA::TableWalker::doLongDescriptor(), and ArmISA::TableWalker::insertTableEntry().
|
inline |
Is privileged execution allowed on subsequent lookup levels?
Definition at line 681 of file table_walker.hh.
References bits(), data, Table, and type().
Referenced by ArmISA::TableWalker::doLongDescriptor().
|
inline |
|
inline |
R/W protection flag for subsequent levels of lookup.
Definition at line 659 of file table_walker.hh.
References bits(), data, Table, and type().
Referenced by ArmISA::TableWalker::doLongDescriptor().
|
inlinevirtual |
Returns true if this entry targets the secure physical address map.
Implements ArmISA::TableWalker::DescriptorBase.
Definition at line 414 of file table_walker.hh.
References bits(), ArmISA::TableWalker::currState, data, Page, ArmISA::TableWalker::WalkerState::secureLookup, and type().
|
inline |
Whether the subsequent levels of lookup are secure.
Definition at line 645 of file table_walker.hh.
References bits(), data, Table, and type().
Referenced by 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 632 of file table_walker.hh.
|
inline |
2-bit shareability field
Definition at line 573 of file table_walker.hh.
References bits(), data, Page, and type().
Referenced by ArmISA::TableWalker::memAttrsAArch64(), and ArmISA::TableWalker::memAttrsLPAE().
|
inline |
Return the descriptor type.
Definition at line 427 of file table_walker.hh.
References bits(), Block, data, ArmISA::TableWalker::Grain4KB, grainSize, Invalid, ArmISA::L0, ArmISA::L2, ArmISA::L3, ArmISA::TableWalker::DescriptorBase::lookupLevel, Page, and Table.
Referenced by af(), ap(), apTable(), attrIndx(), contiguousHint(), dbgHeader(), ArmISA::TableWalker::doLongDescriptor(), domain(), global(), memAttr(), nextDescAddr(), nextTableAddr(), offsetBits(), pxn(), pxnTable(), rw(), rwTable(), secure(), secureTable(), sh(), user(), userTable(), xn(), and xnTable().
|
inline |
|
inline |
User/privileged mode protection flag for subsequent levels of lookup.
Definition at line 667 of file table_walker.hh.
References bits(), data, Table, and type().
Referenced by ArmISA::TableWalker::doLongDescriptor().
|
inlinevirtual |
Is execution allowed on this mapping?
Implements ArmISA::TableWalker::DescriptorBase.
Definition at line 527 of file table_walker.hh.
References bits(), data, Page, and type().
Referenced by ArmISA::TableWalker::doLongDescriptor().
|
inline |
Is execution allowed on subsequent lookup levels?
Definition at line 674 of file table_walker.hh.
References bits(), data, Table, and type().
Referenced by ArmISA::TableWalker::doLongDescriptor().
bool ArmISA::TableWalker::LongDescriptor::_dirty |
This entry has been modified (access flag set) and needs to be written back to memory.
Definition at line 392 of file table_walker.hh.
bool ArmISA::TableWalker::LongDescriptor::aarch64 |
True if the current lookup is performed in AArch64 state.
Definition at line 421 of file table_walker.hh.
Referenced by nextDescAddr(), nextTableAddr(), paddr(), pfn(), and ArmISA::TableWalker::processWalkLPAE().
uint64_t ArmISA::TableWalker::LongDescriptor::data |
The raw bits of the entry.
Definition at line 388 of file table_walker.hh.
Referenced by af(), ap(), apTable(), attrIndx(), contiguousHint(), ArmISA::TableWalker::doLongDescriptor(), getRawData(), global(), memAttr(), nextTableAddr(), paddr(), pfn(), ArmISA::TableWalker::processWalkLPAE(), pxn(), pxnTable(), rw(), rwTable(), secure(), secureTable(), setAf(), sh(), type(), user(), userTable(), xn(), and xnTable().
GrainSize ArmISA::TableWalker::LongDescriptor::grainSize |
Width of the granule size in bits.
Definition at line 424 of file table_walker.hh.
Referenced by nextDescAddr(), nextTableAddr(), offsetBits(), ArmISA::TableWalker::processWalkLPAE(), and type().