|
gem5
v22.0.0.2
|
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 662 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 678 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 705 of file table_walker.hh.
|
inline |
Two bit access protection flags for subsequent levels of lookup.
Definition at line 759 of file table_walker.hh.
References gem5::bits(), data, Table, and type().
|
inline |
Attribute index.
Definition at line 719 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::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 744 of file table_walker.hh.
References _dirty.
|
inlineoverridevirtual |
Implements gem5::ArmISA::TableWalker::DescriptorBase.
Definition at line 711 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::EL2, gem5::ArmISA::EL3, 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 727 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::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::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 792 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 687 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 767 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 751 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 736 of file table_walker.hh.
|
inline |
2-bit shareability field
Definition at line 670 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::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 695 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 776 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 784 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().