|
gem5 v25.0.0.1
|
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? | |
| bool | contiguousHint () const |
| Contiguous hint bit. | |
| bool | global (WalkerState *currState) const override |
| Is the translation global (no asid used)? | |
| bool | fnxs () const |
| FNXS for FEAT_XS only. | |
| 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 | |
| uint8_t | piindex () const |
| Stage 1 Indirect permissions. | |
| bool | rw () const |
| Read/write access protection flag. | |
| bool | user () const |
| User/privileged level access protection flag. | |
| 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 |
| bool | isStage2 |
| 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.
References _dirty, aarch64, data, gem5::ArmISA::Grain4KB, grainSize, isStage2, and physAddrRange.
|
inline |
Returns true if the access flag (AF) is set.
Definition at line 699 of file table_walker.hh.
References gem5::bits(), Block, data, Page, and type().
|
inlineoverridevirtual |
2-bit access protection flags
Implements gem5::ArmISA::TableWalker::DescriptorBase.
Definition at line 715 of file table_walker.hh.
References gem5::bits(), Block, data, Page, and type().
Referenced by 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 753 of file table_walker.hh.
|
inline |
Two bit access protection flags for subsequent levels of lookup.
Definition at line 807 of file table_walker.hh.
References gem5::bits(), data, Table, and type().
|
inline |
Attribute index.
Definition at line 767 of file table_walker.hh.
References gem5::bits(), Block, data, Page, and type().
Referenced by gem5::ArmISA::TableWalker::memAttrsAArch64(), and gem5::ArmISA::TableWalker::memAttrsLPAE().
|
inline |
Contiguous hint bit.
Definition at line 661 of file table_walker.hh.
References gem5::bits(), Block, data, Page, and type().
|
inlineoverridevirtual |
Implements gem5::ArmISA::TableWalker::DescriptorBase.
Definition at line 472 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 792 of file table_walker.hh.
References _dirty.
|
inlineoverridevirtual |
Implements gem5::ArmISA::TableWalker::DescriptorBase.
Definition at line 759 of file table_walker.hh.
References gem5::ArmISA::Client.
Referenced by gem5::ArmISA::TableWalker::insertPartialTableEntry().
|
inline |
FNXS for FEAT_XS only.
Definition at line 691 of file table_walker.hh.
References gem5::bits(), Block, data, Page, and type().
Referenced by gem5::ArmISA::TableWalker::memAttrsAArch64().
|
inlineoverridevirtual |
Implements gem5::ArmISA::TableWalker::DescriptorBase.
Definition at line 466 of file table_walker.hh.
References data.
Referenced by gem5::ArmISA::TableWalker::insertPartialTableEntry().
|
inlineoverridevirtual |
Implements gem5::ArmISA::TableWalker::DescriptorBase.
Definition at line 460 of file table_walker.hh.
References data.
|
inlineoverridevirtual |
Is the translation global (no asid used)?
Implements gem5::ArmISA::TableWalker::DescriptorBase.
Definition at line 669 of file table_walker.hh.
References gem5::bits(), Block, gem5::ArmISA::TableWalker::currState, data, gem5::ArmISA::MMU::hasUnprivRegime(), Page, gem5::ArmISA::Secure, and type().
|
inline |
Memory attributes, only used by stage 2 translations.
Definition at line 775 of file table_walker.hh.
References gem5::bits(), Block, 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 625 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.
|
inline |
Return the address of the next page table.
Definition at line 607 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 551 of file table_walker.hh.
References Block, 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 591 of file table_walker.hh.
References aarch64, gem5::X86ISA::addr, gem5::bits(), data, gem5::ArmISA::Grain64KB, grainSize, gem5::mbits(), offsetBits(), and physAddrRange.
Referenced by pfn().
|
inlineoverridevirtual |
Return the physical frame, bits shifted right.
Implements gem5::ArmISA::TableWalker::DescriptorBase.
Definition at line 584 of file table_walker.hh.
References offsetBits(), and paddr().
|
inline |
Stage 1 Indirect permissions.
Definition at line 724 of file table_walker.hh.
References gem5::bits(), Block, data, Page, and type().
Referenced by gem5::ArmISA::TableWalker::insertTableEntry().
|
inline |
Is privileged execution allowed on this mapping?
(LPAE only)
Definition at line 653 of file table_walker.hh.
References gem5::bits(), Block, data, Page, and type().
Referenced by gem5::ArmISA::TableWalker::insertTableEntry().
|
inline |
Is privileged execution allowed on subsequent lookup levels?
Definition at line 840 of file table_walker.hh.
References gem5::bits(), data, Table, and type().
|
inline |
Read/write access protection flag.
Definition at line 735 of file table_walker.hh.
References gem5::bits(), Block, data, Page, and type().
Referenced by ap().
|
inline |
R/W protection flag for subsequent levels of lookup.
Definition at line 815 of file table_walker.hh.
References gem5::bits(), data, Table, and type().
|
inlineoverridevirtual |
Returns true if this entry targets the secure physical address map.
Implements gem5::ArmISA::TableWalker::DescriptorBase.
Definition at line 493 of file table_walker.hh.
References gem5::bits(), Block, gem5::ArmISA::TableWalker::currState, data, isStage2, Page, and type().
Referenced by gem5::ArmISA::TableWalker::insertPartialTableEntry().
|
inline |
Whether the subsequent levels of lookup are secure.
Definition at line 799 of file table_walker.hh.
References gem5::bits(), data, Table, and type().
|
inline |
Set access flag that this entry has been touched.
Mark the entry as requiring a writeback, in the future.
Definition at line 784 of file table_walker.hh.
|
inline |
2-bit shareability field
Definition at line 707 of file table_walker.hh.
References gem5::bits(), Block, data, Page, and type().
Referenced by gem5::ArmISA::TableWalker::memAttrsAArch64(), and gem5::ArmISA::TableWalker::memAttrsLPAE().
|
inline |
Return the descriptor type.
Definition at line 510 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(), fnxs(), global(), memAttr(), nextDescAddr(), nextTableAddr(), offsetBits(), piindex(), pxn(), pxnTable(), rw(), rwTable(), secure(), secureTable(), sh(), user(), userTable(), xn(), and xnTable().
|
inline |
User/privileged level access protection flag.
Definition at line 743 of file table_walker.hh.
References gem5::bits(), Block, data, Page, and type().
Referenced by ap().
|
inline |
User/privileged mode protection flag for subsequent levels of lookup.
Definition at line 824 of file table_walker.hh.
References gem5::bits(), data, Table, and type().
|
inlineoverridevirtual |
Is execution allowed on this mapping?
Implements gem5::ArmISA::TableWalker::DescriptorBase.
Definition at line 645 of file table_walker.hh.
References gem5::bits(), Block, data, Page, and type().
|
inline |
Is execution allowed on subsequent lookup levels?
Definition at line 832 of file table_walker.hh.
References gem5::bits(), data, Table, and type().
| 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.
Referenced by dirty(), LongDescriptor(), and setAf().
| 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 LongDescriptor(), nextDescAddr(), nextTableAddr(), and paddr().
| 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(), fnxs(), getRawData(), getRawPtr(), global(), LongDescriptor(), memAttr(), nextTableAddr(), paddr(), piindex(), 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(), LongDescriptor(), nextDescAddr(), nextTableAddr(), offsetBits(), paddr(), and type().
| bool gem5::ArmISA::TableWalker::LongDescriptor::isStage2 |
Definition at line 457 of file table_walker.hh.
Referenced by LongDescriptor(), and secure().
| uint8_t gem5::ArmISA::TableWalker::LongDescriptor::physAddrRange |
Definition at line 455 of file table_walker.hh.
Referenced by LongDescriptor(), nextTableAddr(), paddr(), and type().