gem5
v22.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 () | |
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. More... | |
EntryType | type () const |
Return the descriptor type. More... | |
uint8_t | offsetBits () const override |
Return the bit width of the page/block offset. More... | |
Addr | pfn () const override |
Return the physical frame, bits shifted right. 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 override |
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 override |
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 override |
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 override |
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 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. 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... | |
uint8_t | physAddrRange |
Public Attributes inherited from gem5::ArmISA::TableWalker::DescriptorBase | |
LookupLevel | lookupLevel |
Current lookup level for this descriptor. More... | |
Long-descriptor format (LPAE)
Definition at line 412 of file table_walker.hh.
|
inline |
Definition at line 424 of file table_walker.hh.
|
inline |
Returns true if the access flag (AF) is set.
Definition at line 664 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 680 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 707 of file table_walker.hh.
|
inline |
Two bit access protection flags for subsequent levels of lookup.
Definition at line 761 of file table_walker.hh.
References gem5::bits(), data, Table, and type().
|
inline |
Attribute index.
Definition at line 721 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 635 of file table_walker.hh.
References gem5::bits(), data, Page, and type().
|
inlineoverridevirtual |
Implements gem5::ArmISA::TableWalker::DescriptorBase.
Definition at line 451 of file table_walker.hh.
References Block, gem5::SparcISA::int_reg::L3, 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 746 of file table_walker.hh.
References _dirty.
|
inlineoverridevirtual |
Implements gem5::ArmISA::TableWalker::DescriptorBase.
Definition at line 713 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 445 of file table_walker.hh.
References data.
Referenced by gem5::ArmISA::TableWalker::insertPartialTableEntry().
|
inlineoverridevirtual |
Is the translation global (no asid used)?
Implements gem5::ArmISA::TableWalker::DescriptorBase.
Definition at line 643 of file table_walker.hh.
References gem5::ArmISA::TableWalker::WalkerState::aarch64, gem5::bits(), gem5::ArmISA::TableWalker::currState, data, gem5::ArmISA::TableWalker::WalkerState::el, gem5::ArmISA::MMU::hasUnprivRegime(), gem5::ArmISA::TableWalker::WalkerState::hcr, gem5::ArmISA::TableWalker::WalkerState::isSecure, Page, gem5::ArmISA::TableWalker::WalkerState::secureLookup, and type().
|
inline |
Memory attributes, only used by stage 2 translations.
Definition at line 729 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 599 of file table_walker.hh.
References aarch64, gem5::bits(), grainSize, gem5::SparcISA::int_reg::L1, 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 581 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 525 of file table_walker.hh.
References gem5::ArmISA::getPageTableOps(), gem5::ArmISA::Grain16KB, gem5::ArmISA::Grain4KB, gem5::ArmISA::Grain64KB, grainSize, gem5::SparcISA::int_reg::L1, 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 565 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 558 of file table_walker.hh.
References offsetBits(), and paddr().
|
inline |
Is privileged execution allowed on this mapping? (LPAE only)
Definition at line 627 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 794 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 689 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 769 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 472 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 753 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 738 of file table_walker.hh.
|
inline |
2-bit shareability field
Definition at line 672 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 484 of file table_walker.hh.
References gem5::bits(), Block, data, gem5::ArmISA::Grain16KB, gem5::ArmISA::Grain4KB, gem5::ArmISA::Grain64KB, grainSize, Invalid, gem5::SparcISA::int_reg::L0, gem5::SparcISA::int_reg::L1, gem5::SparcISA::int_reg::L2, gem5::SparcISA::int_reg::L3, 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 697 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 778 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 619 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 786 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 434 of file table_walker.hh.
bool gem5::ArmISA::TableWalker::LongDescriptor::aarch64 |
True if the current lookup is performed in AArch64 state.
Definition at line 437 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 430 of file table_walker.hh.
Referenced by af(), ap(), apTable(), attrIndx(), contiguousHint(), gem5::ArmISA::TableWalker::doLongDescriptor(), getRawData(), global(), memAttr(), nextTableAddr(), paddr(), gem5::ArmISA::TableWalker::processWalkAArch64(), gem5::ArmISA::TableWalker::processWalkLPAE(), 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 440 of file table_walker.hh.
Referenced by nextDescAddr(), nextTableAddr(), offsetBits(), paddr(), gem5::ArmISA::TableWalker::processWalkAArch64(), gem5::ArmISA::TableWalker::processWalkLPAE(), and type().
uint8_t gem5::ArmISA::TableWalker::LongDescriptor::physAddrRange |
Definition at line 442 of file table_walker.hh.
Referenced by nextTableAddr(), paddr(), gem5::ArmISA::TableWalker::processWalkAArch64(), and type().