|
gem5 v23.0.0.1
|
#include <table_walker.hh>
Public Member Functions | |
| void | doL1Descriptor () |
| void | doL2Descriptor () |
| void | doLongDescriptor () |
| WalkerState () | |
| std::string | name () const |
Public Attributes | ||
| ThreadContext * | tc | |
| Thread context that we're doing the walk for. | ||
| bool | aarch64 | |
| If the access is performed in AArch64 state. | ||
| ExceptionLevel | el | |
| Current exception level. | ||
| int | physAddrRange | |
| Current physical address range in bits. | ||
| RequestPtr | req | |
| Request that is currently being serviced. | ||
| TlbEntry | walkEntry | |
| Initial walk entry allowing to skip lookup levels. | ||
| uint16_t | asid | |
| ASID that we're servicing the request under. | ||
| vmid_t | vmid | |
| bool | isHyp | |
| BaseMMU::Translation * | transState | |
| Translation state for delayed requests. | ||
| Fault | fault | |
| The fault that we are going to return. | ||
| Addr | vaddr | |
| The virtual address that is being translated with tagging removed. | ||
| Addr | vaddr_tainted | |
| The virtual address that is being translated. | ||
| SCTLR | sctlr | |
| Cached copy of the sctlr as it existed when translation began. | ||
| SCR | scr | |
| Cached copy of the scr as it existed when translation began. | ||
| CPSR | cpsr | |
| Cached copy of the cpsr as it existed when translation began. | ||
| union { | ||
| TTBCR ttbcr | ||
| TCR tcr | ||
| }; | ||
| Cached copy of ttbcr/tcr as it existed when translation began. | ||
| HTCR | htcr | |
| Cached copy of the htcr as it existed when translation began. | ||
| HCR | hcr | |
| Cached copy of the htcr as it existed when translation began. | ||
| VTCR_t | vtcr | |
| Cached copy of the vtcr as it existed when translation began. | ||
| bool | isWrite | |
| If the access is a write. | ||
| bool | isFetch | |
| If the access is a fetch (for execution, and no-exec) must be checked? | ||
| bool | isSecure | |
| If the access comes from the secure state. | ||
| bool | isUncacheable | |
| True if table walks are uncacheable (for table descriptors) | ||
| bool | secureLookup | |
| Helper variables used to implement hierarchical access permissions when the long-desc. | ||
| bool | rwTable | |
| bool | userTable | |
| bool | xnTable | |
| bool | pxnTable | |
| bool | hpd | |
| Hierarchical access permission disable. | ||
| bool | stage2Req | |
| Flag indicating if a second stage of lookup is required. | ||
| BaseMMU::Translation * | stage2Tran | |
| A pointer to the stage 2 translation that's in progress. | ||
| bool | timing | |
| If the mode is timing or atomic. | ||
| bool | functional | |
| If the atomic mode should be functional. | ||
| BaseMMU::Mode | mode | |
| Save mode for use in delayed response. | ||
| MMU::ArmTranslationType | tranType | |
| The translation type that has been requested. | ||
| L1Descriptor | l1Desc | |
| Short-format descriptors. | ||
| L2Descriptor | l2Desc | |
| LongDescriptor | longDesc | |
| Long-format descriptor (LPAE and AArch64) | ||
| bool | delayed | |
| Whether the response is delayed in timing mode due to additional lookups. | ||
| TableWalker * | tableWalker | |
| Tick | startTime | |
| Timestamp for calculating elapsed time in service (for stats) | ||
| unsigned | levels | |
| Page entries walked during service (for stats) | ||
Definition at line 801 of file table_walker.hh.
| gem5::TableWalker::WalkerState::WalkerState | ( | ) |
Definition at line 125 of file table_walker.cc.
| void gem5::ArmISA::TableWalker::WalkerState::doL1Descriptor | ( | ) |
| void gem5::ArmISA::TableWalker::WalkerState::doL2Descriptor | ( | ) |
| void gem5::ArmISA::TableWalker::WalkerState::doLongDescriptor | ( | ) |
|
inline |
Definition at line 931 of file table_walker.hh.
References gem5::Named::name(), and tableWalker.
| union { ... } gem5::ArmISA::TableWalker::WalkerState |
Cached copy of ttbcr/tcr as it existed when translation began.
| bool gem5::ArmISA::TableWalker::WalkerState::aarch64 |
If the access is performed in AArch64 state.
Definition at line 808 of file table_walker.hh.
Referenced by gem5::ArmISA::TableWalker::doLongDescriptor(), gem5::ArmISA::TableWalker::LongDescriptor::global(), gem5::ArmISA::TableWalker::insertPartialTableEntry(), gem5::ArmISA::TableWalker::insertTableEntry(), gem5::ArmISA::TableWalker::processWalkAArch64(), gem5::ArmISA::TableWalker::processWalkWrapper(), and gem5::ArmISA::TableWalker::walk().
| uint16_t gem5::ArmISA::TableWalker::WalkerState::asid |
ASID that we're servicing the request under.
Definition at line 823 of file table_walker.hh.
Referenced by gem5::ArmISA::TableWalker::insertPartialTableEntry(), gem5::ArmISA::TableWalker::insertTableEntry(), gem5::ArmISA::TableWalker::processWalkWrapper(), and gem5::ArmISA::TableWalker::walk().
| CPSR gem5::ArmISA::TableWalker::WalkerState::cpsr |
Cached copy of the cpsr as it existed when translation began.
Definition at line 846 of file table_walker.hh.
| bool gem5::ArmISA::TableWalker::WalkerState::delayed |
Whether the response is delayed in timing mode due to additional lookups.
Definition at line 914 of file table_walker.hh.
Referenced by gem5::ArmISA::TableWalker::doL1Descriptor(), gem5::ArmISA::TableWalker::doL1DescriptorWrapper(), gem5::ArmISA::TableWalker::doL2DescriptorWrapper(), gem5::ArmISA::TableWalker::doLongDescriptor(), and gem5::ArmISA::TableWalker::doLongDescriptorWrapper().
| ExceptionLevel gem5::ArmISA::TableWalker::WalkerState::el |
Current exception level.
Definition at line 811 of file table_walker.hh.
Referenced by gem5::ArmISA::TableWalker::LongDescriptor::global(), gem5::ArmISA::TableWalker::insertPartialTableEntry(), gem5::ArmISA::TableWalker::insertTableEntry(), gem5::ArmISA::TableWalker::memAttrsAArch64(), gem5::ArmISA::TableWalker::processWalkAArch64(), gem5::ArmISA::TableWalker::processWalkWrapper(), and gem5::ArmISA::TableWalker::walk().
| Fault gem5::ArmISA::TableWalker::WalkerState::fault |
The fault that we are going to return.
Definition at line 831 of file table_walker.hh.
Referenced by gem5::ArmISA::TableWalker::doL1Descriptor(), gem5::ArmISA::TableWalker::doL1DescriptorWrapper(), gem5::ArmISA::TableWalker::doL2Descriptor(), gem5::ArmISA::TableWalker::doL2DescriptorWrapper(), gem5::ArmISA::TableWalker::doLongDescriptor(), gem5::ArmISA::TableWalker::doLongDescriptorWrapper(), gem5::ArmISA::TableWalker::fetchDescriptor(), gem5::ArmISA::TableWalker::processWalk(), gem5::ArmISA::TableWalker::processWalkAArch64(), gem5::ArmISA::TableWalker::processWalkLPAE(), and gem5::ArmISA::TableWalker::walk().
| bool gem5::ArmISA::TableWalker::WalkerState::functional |
If the atomic mode should be functional.
Definition at line 897 of file table_walker.hh.
Referenced by gem5::ArmISA::TableWalker::fetchDescriptor(), and gem5::ArmISA::TableWalker::walk().
| HCR gem5::ArmISA::TableWalker::WalkerState::hcr |
Cached copy of the htcr as it existed when translation began.
Definition at line 859 of file table_walker.hh.
Referenced by gem5::ArmISA::TableWalker::LongDescriptor::global(), gem5::ArmISA::TableWalker::insertPartialTableEntry(), gem5::ArmISA::TableWalker::processWalkAArch64(), and gem5::ArmISA::TableWalker::walk().
| bool gem5::ArmISA::TableWalker::WalkerState::hpd |
Hierarchical access permission disable.
Definition at line 885 of file table_walker.hh.
Referenced by gem5::ArmISA::TableWalker::doLongDescriptor(), and gem5::ArmISA::TableWalker::processWalkAArch64().
| HTCR gem5::ArmISA::TableWalker::WalkerState::htcr |
Cached copy of the htcr as it existed when translation began.
Definition at line 856 of file table_walker.hh.
Referenced by gem5::ArmISA::TableWalker::processWalkLPAE(), and gem5::ArmISA::TableWalker::walk().
| bool gem5::ArmISA::TableWalker::WalkerState::isFetch |
If the access is a fetch (for execution, and no-exec) must be checked?
Definition at line 868 of file table_walker.hh.
Referenced by gem5::ArmISA::TableWalker::doL1Descriptor(), gem5::ArmISA::TableWalker::doL2Descriptor(), gem5::ArmISA::TableWalker::generateLongDescFault(), gem5::ArmISA::TableWalker::insertTableEntry(), gem5::ArmISA::TableWalker::processWalk(), gem5::ArmISA::TableWalker::processWalkAArch64(), gem5::ArmISA::TableWalker::processWalkLPAE(), and gem5::ArmISA::TableWalker::walk().
| bool gem5::ArmISA::TableWalker::WalkerState::isHyp |
| bool gem5::ArmISA::TableWalker::WalkerState::isSecure |
If the access comes from the secure state.
Definition at line 871 of file table_walker.hh.
Referenced by gem5::ArmISA::TableWalker::doL1Descriptor(), gem5::ArmISA::TableWalker::LongDescriptor::global(), gem5::ArmISA::TableWalker::insertPartialTableEntry(), gem5::ArmISA::TableWalker::insertTableEntry(), gem5::ArmISA::TableWalker::memAttrs(), gem5::ArmISA::TableWalker::memAttrsLPAE(), gem5::ArmISA::TableWalker::processWalk(), gem5::ArmISA::TableWalker::processWalkAArch64(), gem5::ArmISA::TableWalker::processWalkLPAE(), gem5::ArmISA::TableWalker::processWalkWrapper(), gem5::ArmISA::TableWalker::testWalk(), and gem5::ArmISA::TableWalker::walk().
| bool gem5::ArmISA::TableWalker::WalkerState::isUncacheable |
True if table walks are uncacheable (for table descriptors)
Definition at line 874 of file table_walker.hh.
Referenced by gem5::ArmISA::TableWalker::doL1Descriptor(), gem5::ArmISA::TableWalker::doLongDescriptor(), gem5::ArmISA::TableWalker::processWalk(), gem5::ArmISA::TableWalker::processWalkAArch64(), and gem5::ArmISA::TableWalker::processWalkLPAE().
| bool gem5::ArmISA::TableWalker::WalkerState::isWrite |
If the access is a write.
Definition at line 865 of file table_walker.hh.
Referenced by gem5::ArmISA::TableWalker::doL1Descriptor(), gem5::ArmISA::TableWalker::doL2Descriptor(), gem5::ArmISA::TableWalker::generateLongDescFault(), gem5::ArmISA::TableWalker::processWalk(), gem5::ArmISA::TableWalker::processWalkAArch64(), gem5::ArmISA::TableWalker::processWalkLPAE(), and gem5::ArmISA::TableWalker::walk().
| L1Descriptor gem5::ArmISA::TableWalker::WalkerState::l1Desc |
Short-format descriptors.
Definition at line 906 of file table_walker.hh.
Referenced by gem5::ArmISA::TableWalker::doL1Descriptor(), gem5::ArmISA::TableWalker::doL1DescriptorWrapper(), gem5::ArmISA::TableWalker::doL2Descriptor(), and gem5::ArmISA::TableWalker::processWalk().
| L2Descriptor gem5::ArmISA::TableWalker::WalkerState::l2Desc |
Definition at line 907 of file table_walker.hh.
Referenced by gem5::ArmISA::TableWalker::doL1Descriptor(), and gem5::ArmISA::TableWalker::doL2Descriptor().
| unsigned gem5::ArmISA::TableWalker::WalkerState::levels |
Page entries walked during service (for stats)
Definition at line 922 of file table_walker.hh.
| LongDescriptor gem5::ArmISA::TableWalker::WalkerState::longDesc |
Long-format descriptor (LPAE and AArch64)
Definition at line 910 of file table_walker.hh.
Referenced by gem5::ArmISA::TableWalker::doLongDescriptor(), gem5::ArmISA::TableWalker::doLongDescriptorWrapper(), gem5::ArmISA::TableWalker::generateLongDescFault(), gem5::ArmISA::TableWalker::processWalkAArch64(), and gem5::ArmISA::TableWalker::processWalkLPAE().
| BaseMMU::Mode gem5::ArmISA::TableWalker::WalkerState::mode |
Save mode for use in delayed response.
Definition at line 900 of file table_walker.hh.
Referenced by gem5::ArmISA::TableWalker::doL1DescriptorWrapper(), gem5::ArmISA::TableWalker::doL2DescriptorWrapper(), gem5::ArmISA::TableWalker::doLongDescriptorWrapper(), gem5::ArmISA::TableWalker::fetchDescriptor(), gem5::ArmISA::TableWalker::insertTableEntry(), gem5::ArmISA::TableWalker::processWalkAArch64(), gem5::ArmISA::TableWalker::processWalkWrapper(), gem5::ArmISA::TableWalker::testWalk(), and gem5::ArmISA::TableWalker::walk().
| int gem5::ArmISA::TableWalker::WalkerState::physAddrRange |
Current physical address range in bits.
Definition at line 814 of file table_walker.hh.
Referenced by gem5::ArmISA::TableWalker::doLongDescriptor(), gem5::ArmISA::TableWalker::processWalkAArch64(), and gem5::ArmISA::TableWalker::walk().
| bool gem5::ArmISA::TableWalker::WalkerState::pxnTable |
| RequestPtr gem5::ArmISA::TableWalker::WalkerState::req |
Request that is currently being serviced.
Definition at line 817 of file table_walker.hh.
Referenced by gem5::ArmISA::TableWalker::doL1Descriptor(), gem5::ArmISA::TableWalker::doL1DescriptorWrapper(), gem5::ArmISA::TableWalker::doL2Descriptor(), gem5::ArmISA::TableWalker::doL2DescriptorWrapper(), gem5::ArmISA::TableWalker::doLongDescriptor(), gem5::ArmISA::TableWalker::doLongDescriptorWrapper(), gem5::ArmISA::TableWalker::generateLongDescFault(), gem5::ArmISA::TableWalker::insertTableEntry(), gem5::ArmISA::TableWalker::processWalk(), gem5::ArmISA::TableWalker::processWalkAArch64(), gem5::ArmISA::TableWalker::processWalkLPAE(), gem5::ArmISA::TableWalker::processWalkWrapper(), and gem5::ArmISA::TableWalker::walk().
| bool gem5::ArmISA::TableWalker::WalkerState::rwTable |
| SCR gem5::ArmISA::TableWalker::WalkerState::scr |
Cached copy of the scr as it existed when translation began.
Definition at line 843 of file table_walker.hh.
| SCTLR gem5::ArmISA::TableWalker::WalkerState::sctlr |
Cached copy of the sctlr as it existed when translation began.
Definition at line 840 of file table_walker.hh.
Referenced by gem5::ArmISA::TableWalker::doL1Descriptor(), gem5::ArmISA::TableWalker::doL2Descriptor(), gem5::ArmISA::TableWalker::doLongDescriptor(), gem5::ArmISA::TableWalker::insertTableEntry(), gem5::ArmISA::TableWalker::processWalk(), gem5::ArmISA::TableWalker::processWalkAArch64(), gem5::ArmISA::TableWalker::processWalkLPAE(), and gem5::ArmISA::TableWalker::walk().
| bool gem5::ArmISA::TableWalker::WalkerState::secureLookup |
Helper variables used to implement hierarchical access permissions when the long-desc.
format is used (LPAE only)
Definition at line 878 of file table_walker.hh.
Referenced by gem5::ArmISA::TableWalker::doLongDescriptor(), gem5::ArmISA::TableWalker::LongDescriptor::global(), gem5::ArmISA::TableWalker::processWalkAArch64(), gem5::ArmISA::TableWalker::L1Descriptor::secure(), gem5::ArmISA::TableWalker::LongDescriptor::secure(), and gem5::ArmISA::TableWalker::walk().
| bool gem5::ArmISA::TableWalker::WalkerState::stage2Req |
Flag indicating if a second stage of lookup is required.
Definition at line 888 of file table_walker.hh.
Referenced by gem5::ArmISA::TableWalker::fetchDescriptor(), and gem5::ArmISA::TableWalker::walk().
| BaseMMU::Translation* gem5::ArmISA::TableWalker::WalkerState::stage2Tran |
A pointer to the stage 2 translation that's in progress.
Definition at line 891 of file table_walker.hh.
Referenced by gem5::ArmISA::TableWalker::doL1DescriptorWrapper(), gem5::ArmISA::TableWalker::doL2DescriptorWrapper(), gem5::ArmISA::TableWalker::doLongDescriptorWrapper(), and gem5::ArmISA::TableWalker::fetchDescriptor().
| Tick gem5::ArmISA::TableWalker::WalkerState::startTime |
Timestamp for calculating elapsed time in service (for stats)
Definition at line 919 of file table_walker.hh.
Referenced by gem5::ArmISA::TableWalker::doL1DescriptorWrapper(), gem5::ArmISA::TableWalker::doL2DescriptorWrapper(), gem5::ArmISA::TableWalker::doLongDescriptorWrapper(), gem5::ArmISA::TableWalker::processWalk(), gem5::ArmISA::TableWalker::processWalkAArch64(), gem5::ArmISA::TableWalker::processWalkLPAE(), gem5::ArmISA::TableWalker::processWalkWrapper(), and gem5::ArmISA::TableWalker::walk().
| TableWalker* gem5::ArmISA::TableWalker::WalkerState::tableWalker |
Definition at line 916 of file table_walker.hh.
Referenced by name(), and gem5::ArmISA::TableWalker::walk().
| ThreadContext* gem5::ArmISA::TableWalker::WalkerState::tc |
Thread context that we're doing the walk for.
Definition at line 805 of file table_walker.hh.
Referenced by gem5::ArmISA::TableWalker::checkVAddrSizeFaultAArch64(), gem5::ArmISA::TableWalker::doL1Descriptor(), gem5::ArmISA::TableWalker::doL1DescriptorWrapper(), gem5::ArmISA::TableWalker::doL2Descriptor(), gem5::ArmISA::TableWalker::doL2DescriptorWrapper(), gem5::ArmISA::TableWalker::doLongDescriptor(), gem5::ArmISA::TableWalker::doLongDescriptorWrapper(), gem5::ArmISA::TableWalker::fetchDescriptor(), gem5::ArmISA::TableWalker::insertTableEntry(), gem5::ArmISA::TableWalker::memAttrs(), gem5::ArmISA::TableWalker::memAttrsLPAE(), gem5::ArmISA::TableWalker::processWalk(), gem5::ArmISA::TableWalker::processWalkAArch64(), gem5::ArmISA::TableWalker::processWalkLPAE(), gem5::ArmISA::TableWalker::processWalkWrapper(), and gem5::ArmISA::TableWalker::walk().
| TCR gem5::ArmISA::TableWalker::WalkerState::tcr |
Definition at line 852 of file table_walker.hh.
Referenced by gem5::ArmISA::TableWalker::processWalkAArch64(), and gem5::ArmISA::TableWalker::walk().
| bool gem5::ArmISA::TableWalker::WalkerState::timing |
If the mode is timing or atomic.
Definition at line 894 of file table_walker.hh.
Referenced by gem5::ArmISA::TableWalker::doL1Descriptor(), gem5::ArmISA::TableWalker::doL2Descriptor(), gem5::ArmISA::TableWalker::doLongDescriptor(), gem5::ArmISA::TableWalker::fetchDescriptor(), gem5::ArmISA::TableWalker::insertTableEntry(), gem5::ArmISA::TableWalker::processWalk(), gem5::ArmISA::TableWalker::processWalkAArch64(), gem5::ArmISA::TableWalker::processWalkLPAE(), and gem5::ArmISA::TableWalker::walk().
| BaseMMU::Translation* gem5::ArmISA::TableWalker::WalkerState::transState |
Translation state for delayed requests.
Definition at line 828 of file table_walker.hh.
Referenced by gem5::ArmISA::TableWalker::doL1DescriptorWrapper(), gem5::ArmISA::TableWalker::doL2DescriptorWrapper(), gem5::ArmISA::TableWalker::doLongDescriptorWrapper(), gem5::ArmISA::TableWalker::processWalkWrapper(), and gem5::ArmISA::TableWalker::walk().
| MMU::ArmTranslationType gem5::ArmISA::TableWalker::WalkerState::tranType |
The translation type that has been requested.
Definition at line 903 of file table_walker.hh.
Referenced by gem5::ArmISA::TableWalker::doL1DescriptorWrapper(), gem5::ArmISA::TableWalker::doL2DescriptorWrapper(), gem5::ArmISA::TableWalker::doLongDescriptorWrapper(), gem5::ArmISA::TableWalker::fetchDescriptor(), gem5::ArmISA::TableWalker::processWalkWrapper(), and gem5::ArmISA::TableWalker::walk().
| TTBCR gem5::ArmISA::TableWalker::WalkerState::ttbcr |
Definition at line 851 of file table_walker.hh.
Referenced by gem5::ArmISA::TableWalker::processWalk(), gem5::ArmISA::TableWalker::processWalkLPAE(), and gem5::ArmISA::TableWalker::walk().
| bool gem5::ArmISA::TableWalker::WalkerState::userTable |
| Addr gem5::ArmISA::TableWalker::WalkerState::vaddr |
The virtual address that is being translated with tagging removed.
Definition at line 834 of file table_walker.hh.
Referenced by gem5::ArmISA::TableWalker::checkVAddrSizeFaultAArch64(), gem5::ArmISA::TableWalker::doL1Descriptor(), gem5::ArmISA::TableWalker::doLongDescriptor(), gem5::ArmISA::TableWalker::fetchDescriptor(), gem5::ArmISA::TableWalker::insertPartialTableEntry(), gem5::ArmISA::TableWalker::insertTableEntry(), gem5::ArmISA::TableWalker::processWalk(), gem5::ArmISA::TableWalker::processWalkAArch64(), gem5::ArmISA::TableWalker::processWalkLPAE(), gem5::ArmISA::TableWalker::processWalkWrapper(), gem5::ArmISA::TableWalker::testWalk(), gem5::ArmISA::TableWalker::walk(), and gem5::ArmISA::TableWalker::walkAddresses().
| Addr gem5::ArmISA::TableWalker::WalkerState::vaddr_tainted |
The virtual address that is being translated.
Definition at line 837 of file table_walker.hh.
Referenced by gem5::ArmISA::TableWalker::doL1Descriptor(), gem5::ArmISA::TableWalker::doL1DescriptorWrapper(), gem5::ArmISA::TableWalker::doL2Descriptor(), gem5::ArmISA::TableWalker::doL2DescriptorWrapper(), gem5::ArmISA::TableWalker::doLongDescriptor(), gem5::ArmISA::TableWalker::doLongDescriptorWrapper(), gem5::ArmISA::TableWalker::generateLongDescFault(), gem5::ArmISA::TableWalker::processWalk(), gem5::ArmISA::TableWalker::processWalkAArch64(), gem5::ArmISA::TableWalker::processWalkLPAE(), gem5::ArmISA::TableWalker::processWalkWrapper(), and gem5::ArmISA::TableWalker::walk().
| vmid_t gem5::ArmISA::TableWalker::WalkerState::vmid |
Definition at line 824 of file table_walker.hh.
Referenced by gem5::ArmISA::TableWalker::insertPartialTableEntry(), gem5::ArmISA::TableWalker::insertTableEntry(), gem5::ArmISA::TableWalker::processWalkWrapper(), and gem5::ArmISA::TableWalker::walk().
| VTCR_t gem5::ArmISA::TableWalker::WalkerState::vtcr |
Cached copy of the vtcr as it existed when translation began.
Definition at line 862 of file table_walker.hh.
Referenced by gem5::ArmISA::TableWalker::processWalkAArch64(), gem5::ArmISA::TableWalker::processWalkLPAE(), gem5::ArmISA::TableWalker::walk(), and gem5::ArmISA::TableWalker::walkAddresses().
| TlbEntry gem5::ArmISA::TableWalker::WalkerState::walkEntry |
Initial walk entry allowing to skip lookup levels.
Definition at line 820 of file table_walker.hh.
Referenced by gem5::ArmISA::TableWalker::processWalkWrapper(), gem5::ArmISA::TableWalker::walk(), and gem5::ArmISA::TableWalker::walkAddresses().
| bool gem5::ArmISA::TableWalker::WalkerState::xnTable |