gem5 [DEVELOP-FOR-25.1]
Loading...
Searching...
No Matches
pagetable.hh
Go to the documentation of this file.
1/*
2 * Copyright (c) 2010, 2012-2013, 2021, 2023-2024 Arm Limited
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software
9 * licensed hereunder. You may use the software subject to the license
10 * terms below provided that you ensure that this notice is replicated
11 * unmodified and in its entirety in all distributions of the software,
12 * modified or unmodified, in source code or in binary form.
13 *
14 * Copyright (c) 2002-2005 The Regents of The University of Michigan
15 * All rights reserved.
16 *
17 * Redistribution and use in source and binary forms, with or without
18 * modification, are permitted provided that the following conditions are
19 * met: redistributions of source code must retain the above copyright
20 * notice, this list of conditions and the following disclaimer;
21 * redistributions in binary form must reproduce the above copyright
22 * notice, this list of conditions and the following disclaimer in the
23 * documentation and/or other materials provided with the distribution;
24 * neither the name of the copyright holders nor the names of its
25 * contributors may be used to endorse or promote products derived from
26 * this software without specific prior written permission.
27 *
28 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
29 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
30 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
31 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
32 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
33 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
34 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
35 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
36 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
37 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
38 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39 */
40
41#ifndef __ARCH_ARM_PAGETABLE_H__
42#define __ARCH_ARM_PAGETABLE_H__
43
44#include <cstdint>
45
46#include "arch/arm/page_size.hh"
47#include "arch/arm/types.hh"
48#include "arch/arm/utility.hh"
49#include "arch/generic/mmu.hh"
50#include "enums/TypeTLB.hh"
51#include "enums/ArmLookupLevel.hh"
54#include "params/TLBIndexingPolicy.hh"
55#include "params/TLBSetAssociative.hh"
56#include "sim/serialize.hh"
57
58namespace gem5
59{
60
61namespace ArmISA
62{
63
64// Granule sizes
72
73extern const GrainSize GrainMap_tg0[];
74extern const GrainSize GrainMap_tg1[];
75
76// Max. physical address range in bits supported by the architecture
77const unsigned MaxPhysAddrRange = 52;
78
79// ITB/DTB page table entry
80struct PTE
81{
83 {
84 panic("Need to implement PTE serialization\n");
85 }
86
88 {
89 panic("Need to implement PTE serialization\n");
90 }
91
92};
93
95{
96 typedef enums::ArmLookupLevel LookupLevel;
97 typedef int64_t pte_t;
98
99 virtual ~PageTableOps() = default;
100
101 virtual bool isValid(pte_t pte, unsigned level) const = 0;
102 virtual bool isLeaf(pte_t pte, unsigned level) const = 0;
103 virtual bool isWritable(pte_t pte, unsigned level, bool stage2) const = 0;
104 virtual Addr nextLevelPointer(pte_t pte, unsigned level) const = 0;
105 virtual Addr index(Addr va, unsigned level, int tsz) const = 0;
106 virtual Addr pageMask(pte_t pte, unsigned level) const = 0;
107 virtual unsigned walkBits(unsigned level) const = 0;
108 virtual LookupLevel firstLevel(uint8_t tsz) const = 0;
109 virtual LookupLevel firstS2Level(uint8_t sl0) const = 0;
110 virtual LookupLevel lastLevel() const = 0;
111
112 Addr walkMask(unsigned level) const;
113};
114
116{
117 bool isValid(pte_t pte, unsigned level) const override;
118 bool isLeaf(pte_t pte, unsigned level) const override;
119 bool isWritable(pte_t pte, unsigned level, bool stage2) const override;
120 Addr nextLevelPointer(pte_t pte, unsigned level) const override;
121 Addr index(Addr va, unsigned level, int tsz) const override;
122 Addr pageMask(pte_t pte, unsigned level) const override;
123 unsigned walkBits(unsigned level) const override;
124 LookupLevel firstLevel(uint8_t tsz) const override;
125 LookupLevel lastLevel() const override;
126};
127
129{
130 bool isValid(pte_t pte, unsigned level) const override;
131 bool isLeaf(pte_t pte, unsigned level) const override;
132 bool isWritable(pte_t pte, unsigned level, bool stage2) const override;
133 Addr nextLevelPointer(pte_t pte, unsigned level) const override;
134 Addr index(Addr va, unsigned level, int tsz) const override;
135 Addr pageMask(pte_t pte, unsigned level) const override;
136 unsigned walkBits(unsigned level) const override;
137 LookupLevel firstLevel(uint8_t tsz) const override;
138 LookupLevel firstS2Level(uint8_t sl0) const override;
139 LookupLevel lastLevel() const override;
140};
141
143{
144 bool isValid(pte_t pte, unsigned level) const override;
145 bool isLeaf(pte_t pte, unsigned level) const override;
146 bool isWritable(pte_t pte, unsigned level, bool stage2) const override;
147 Addr nextLevelPointer(pte_t pte, unsigned level) const override;
148 Addr index(Addr va, unsigned level, int tsz) const override;
149 Addr pageMask(pte_t pte, unsigned level) const override;
150 unsigned walkBits(unsigned level) const override;
151 LookupLevel firstLevel(uint8_t tsz) const override;
152 LookupLevel firstS2Level(uint8_t sl0) const override;
153 LookupLevel lastLevel() const override;
154};
155
157{
158 bool isValid(pte_t pte, unsigned level) const override;
159 bool isLeaf(pte_t pte, unsigned level) const override;
160 bool isWritable(pte_t pte, unsigned level, bool stage2) const override;
161 Addr nextLevelPointer(pte_t pte, unsigned level) const override;
162 Addr index(Addr va, unsigned level, int tsz) const override;
163 Addr pageMask(pte_t pte, unsigned level) const override;
164 unsigned walkBits(unsigned level) const override;
165 LookupLevel firstLevel(uint8_t tsz) const override;
166 LookupLevel firstS2Level(uint8_t sl0) const override;
167 LookupLevel lastLevel() const override;
168};
169
170struct TlbEntry;
171
173{
174 public:
175 struct KeyType
176 {
177 KeyType() = default;
178 explicit KeyType(const TlbEntry &entry);
179
180 // virtual address
181 Addr va = 0;
182 // page size
184 // lookup size:
185 // * != 0 -> this is a range based lookup.
186 // end_address = va + size
187 // * == 0 -> This is a normal lookup. size should
188 // be ignored
190 // context id/address space id to use
191 uint16_t asn = 0;
192 // if on lookup asn should be ignored
193 bool ignoreAsn = false;
194 // The virtual machine ID used for stage 2 translation
196 // if the lookup is secure
198 // if the lookup should modify state
199 bool functional = false;
200 // selecting the translation regime
202 // mode to differentiate between read/writes/fetches.
204 };
205
206 using Params = TLBIndexingPolicyParams;
207};
209
211{
212 public:
215 : TLBIndexingPolicy(p, p.num_entries, 0)
216 {}
217
219 getPossibleEntries(const KeyType &key) const override
220 {
221 Addr set_number = (key.va >> key.pageSize) & setMask;
222 return sets[set_number];
223 }
224
225 Addr
227 const ReplaceableEntry *entry) const override
228 {
229 panic("Unimplemented\n");
230 }
231};
232
233// ITB/DTB table entry
235{
236 public:
237 using LookupLevel = enums::ArmLookupLevel;
240
241 enum class MemoryType : std::uint8_t
242 {
246 };
247
248 // Matching variables
250 Addr size; // Size of this entry, == Type of TLB Rec
251 Addr vpn; // Virtual Page Number
252 uint64_t attributes; // Memory attributes formatted for PAR
253
254 LookupLevel lookupLevel; // Lookup level where the descriptor was fetched
255 // from. Used to set the FSR for faults
256 // occurring while the long desc. format is in
257 // use (AArch32 w/ LPAE and AArch64)
258
259 uint16_t asid; // Address Space Identifier
260 vmid_t vmid; // Virtual machine Identifier
261 GrainSize tg; // Translation Granule Size
262 uint8_t N; // Number of bits in pagesize
263 uint8_t innerAttrs;
264 uint8_t outerAttrs;
265 uint8_t ap; // Access permissions bits
266 uint8_t hap; // Hyp access permissions bits
267 uint8_t piindex; // Indirect permission index.
268 DomainType domain; // Access Domain
269
271
272 // True if the long descriptor format is used for this entry (LPAE only)
273 bool longDescFormat; // @todo use this in the update attribute bethod
274
275 bool global;
276 bool valid;
277
278 // True if the entry targets the non-secure physical address space
279 bool ns;
280 // Security state of the translation regime
282 // IPA Space (stage2 entries only)
284 // Translation regime on insert, AARCH64 EL0&1, AARCH32 -> el=1
286 // This is used to distinguish between instruction and data entries
287 // in unified TLBs
288 TypeTLB type;
289 // True if the entry is caching a partial translation (a table walk)
291
292 // Type of memory
293 bool nonCacheable; // Can we wrap this in mtype?
294
295 // Memory Attributes
298
299 // Access permissions
300 bool xn; // Execute Never
301 bool pxn; // Privileged Execute Never (LPAE only)
302
303 bool xs; // xs attribute from FEAT_XS
304
305 //Construct an entry that maps to physical address addr for SE mode
306 TlbEntry(Addr _asn, Addr _vaddr, Addr _paddr,
307 bool uncacheable, bool read_only) :
308 pfn(_paddr >> PageShift), size(PageBytes - 1), vpn(_vaddr >> PageShift),
310 asid(_asn), vmid(0), tg(Grain4KB), N(0),
311 innerAttrs(0), outerAttrs(0), ap(read_only ? 0x3 : 0), hap(0x3),
312 piindex(0),
314 longDescFormat(false), global(false), valid(true),
315 ns(true), ss(SecurityState::NonSecure),
318 type(TypeTLB::unified), partial(false),
319 nonCacheable(uncacheable),
320 shareable(false), outerShareable(false), xn(0), pxn(0),
321 xs(true)
322 {
323 // no restrictions by default, hap = 0x3
324
325 // @todo Check the memory type
326 if (read_only)
327 warn("ARM TlbEntry does not support read-only mappings\n");
328 }
329
331 pfn(0), size(0), vpn(0), attributes(0), lookupLevel(LookupLevel::L1),
332 asid(0), vmid(0), tg(ReservedGrain), N(0),
333 innerAttrs(0), outerAttrs(0), ap(0), hap(0x3), piindex(0),
335 longDescFormat(false), global(false), valid(false),
336 ns(true), ss(SecurityState::NonSecure),
339 type(TypeTLB::unified), partial(false), nonCacheable(false),
340 shareable(false), outerShareable(false), xn(0), pxn(0),
341 xs(true)
342 {
343 // no restrictions by default, hap = 0x3
344
345 // @todo Check the memory type
346 }
347 TlbEntry(const TlbEntry &rhs) = default;
349 {
350 swap(rhs);
351 return *this;
352 }
353
354 void
356 {
357 std::swap(pfn, rhs.pfn);
358 std::swap(size, rhs.size);
359 std::swap(vpn, rhs.vpn);
360 std::swap(attributes, rhs.attributes);
361 std::swap(lookupLevel, rhs.lookupLevel);
362 std::swap(asid, rhs.asid);
363 std::swap(vmid, rhs.vmid);
364 std::swap(tg, rhs.tg);
365 std::swap(N, rhs.N);
366 std::swap(innerAttrs, rhs.innerAttrs);
367 std::swap(outerAttrs, rhs.outerAttrs);
368 std::swap(ap, rhs.ap);
369 std::swap(hap, rhs.hap);
370 std::swap(piindex, rhs.piindex);
371 std::swap(domain, rhs.domain);
372 std::swap(mtype, rhs.mtype);
373 std::swap(longDescFormat, rhs.longDescFormat);
374 std::swap(global, rhs.global);
375 std::swap(valid, rhs.valid);
376 std::swap(ns, rhs.ns);
377 std::swap(ss, rhs.ss);
378 std::swap(regime, rhs.regime);
379 std::swap(type, rhs.type);
380 std::swap(partial, rhs.partial);
381 std::swap(nonCacheable, rhs.nonCacheable);
382 std::swap(shareable, rhs.shareable);
383 std::swap(outerShareable, rhs.outerShareable);
384 std::swap(xn, rhs.xn);
385 std::swap(pxn, rhs.pxn);
386 std::swap(xs, rhs.xs);
387 }
388
390 void
392 {
393 valid = false;
394 }
395
397 void insert(const KeyType &key) {}
398
400 bool isValid() const { return valid; }
401
402 void
403 updateVaddr(Addr new_vaddr)
404 {
405 vpn = new_vaddr >> PageShift;
406 }
407
408 Addr
409 pageStart() const
410 {
411 return pfn << PageShift;
412 }
413
414 bool
415 matchAddress(const KeyType &key) const
416 {
417 Addr page_addr = vpn << N;
418 if (key.size) {
419 // This is a range based loookup
420 return key.va <= page_addr + size &&
421 key.va + key.size > page_addr;
422 } else {
423 // This is a normal lookup
424 return key.va >= page_addr && key.va <= page_addr + size;
425 }
426 }
427
428 bool
429 match(const KeyType &key) const
430 {
431 bool match = false;
432 if (valid && matchAddress(key) && key.ss == ss)
433 {
435
436 if (match && !key.ignoreAsn) {
437 match = global || (key.asn == asid);
438 }
439 if (match && useVMID(key.targetRegime)) {
440 match = key.vmid == vmid;
441 }
442 }
443 return match;
444 }
445
446 bool
447 checkRegime(TranslationRegime target_regime) const
448 {
449 return regime == target_regime;
450 }
451
452 Addr
453 pAddr(Addr va) const
454 {
455 return (pfn << N) | (va & size);
456 }
457
458 void
460 {
461 uint64_t mask;
462 uint64_t newBits;
463
464 // chec bit 11 to determine if its currently LPAE or VMSA format.
465 if ( attributes & (1 << 11) ) {
466 newBits = ((outerShareable ? 0x2 :
467 shareable ? 0x3 : 0) << 7);
468 mask = 0x180;
469 } else {
485 newBits = ((outerShareable ? 0:1) << 10) |
486 ((shareable ? 1:0) << 7) |
487 (innerAttrs << 4) |
488 (outerAttrs << 2);
489 // TODO: Supersection bit
490 mask = 0x4FC;
491 }
492 // common bits
493 newBits |= ns << 9; // NS bit
494 mask |= 1 << 9;
495 // add in the new bits
496 attributes &= ~mask;
497 attributes |= newBits;
498 }
499
500 void
502 {
503 attributes = lpae ? (1 << 11) : 0;
505 }
506
507 std::string
508 print() const override
509 {
510 return csprintf("%#x, asn %d vmn %d ppn %#x size: %#x ap:%d "
511 "ns:%d ss:%s g:%d xs: %d regime:%s", vpn << N, asid, vmid,
512 pfn << N, size, ap, ns, ss, global,
514 }
515
516 void
546 void
577
578};
579
580const PageTableOps *getPageTableOps(GrainSize trans_granule);
581
582} // namespace ArmISA
583
584template class IndexingPolicyTemplate<ArmISA::TLBTypes>;
585
586} // namespace gem5
587
588#endif // __ARCH_ARM_PAGETABLE_H__
std::vector< ReplaceableEntry * > getPossibleEntries(const KeyType &key) const override
Find all possible entries for insertion and replacement of an address.
Definition pagetable.hh:219
Addr regenerateAddr(const KeyType &key, const ReplaceableEntry *entry) const override
Regenerate an entry's address from its tag and assigned indexing bits.
Definition pagetable.hh:226
TLBSetAssociative(const Params &p)
Definition pagetable.hh:214
TLBIndexingPolicyParams Params
Definition pagetable.hh:206
A common base class for indexing table locations.
Definition base.hh:73
typename TLBTypes::KeyType KeyType
Definition base.hh:75
typename TLBTypes::Params Params
Definition base.hh:76
std::vector< std::vector< ReplaceableEntry * > > sets
Definition base.hh:101
A replaceable entry is a basic entry in a 2d table-like structure that needs to have replacement func...
STL vector class.
Definition stl.hh:37
#define panic(...)
This implements a cprintf based panic() function.
Definition logging.hh:220
#define SERIALIZE_ENUM(scalar)
Definition serialize.hh:591
#define UNSERIALIZE_ENUM(scalar)
Definition serialize.hh:598
#define warn(...)
Definition logging.hh:288
Declaration of a common framework for indexing policies.
static bool useVMID(TranslationRegime regime)
Definition utility.hh:378
const PageTableOps * getPageTableOps(GrainSize trans_granule)
Definition pagetable.cc:477
IndexingPolicyTemplate< TLBTypes > TLBIndexingPolicy
Definition pagetable.hh:208
Bitfield< 3, 0 > mask
Definition pcstate.hh:63
Bitfield< 9 > lpae
static const char * regimeToStr(TranslationRegime regime)
Definition types.hh:503
const GrainSize GrainMap_tg1[]
Definition pagetable.cc:51
const unsigned MaxPhysAddrRange
Definition pagetable.hh:77
const Addr PageShift
Definition page_size.hh:52
SecurityState
Security State.
Definition types.hh:273
uint16_t vmid_t
Definition types.hh:57
const Addr PageBytes
Definition page_size.hh:53
const GrainSize GrainMap_tg0[]
Definition pagetable.cc:49
PASpace
Physical Address Space.
Definition types.hh:280
Bitfield< 8 > va
Bitfield< 7, 6 > sl0
Bitfield< 30, 0 > index
Bitfield< 0 > p
Bitfield< 20 > level
Definition intmessage.hh:51
Copyright (c) 2024 Arm Limited All rights reserved.
Definition binary32.hh:36
std::ostream CheckpointOut
Definition serialize.hh:66
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition types.hh:147
void paramOut(CheckpointOut &cp, const std::string &name, ExtMachInst const &machInst)
Definition types.cc:40
void paramIn(CheckpointIn &cp, const std::string &name, ExtMachInst &machInst)
Definition types.cc:72
std::string csprintf(const char *format, const Args &...args)
Definition cprintf.hh:161
#define UNSERIALIZE_SCALAR(scalar)
Definition serialize.hh:575
#define SERIALIZE_SCALAR(scalar)
Definition serialize.hh:568
void serialize(CheckpointOut &cp) const
Definition pagetable.hh:82
void unserialize(CheckpointIn &cp)
Definition pagetable.hh:87
virtual bool isWritable(pte_t pte, unsigned level, bool stage2) const =0
enums::ArmLookupLevel LookupLevel
Definition pagetable.hh:96
Addr walkMask(unsigned level) const
Definition pagetable.cc:55
virtual LookupLevel firstS2Level(uint8_t sl0) const =0
virtual LookupLevel lastLevel() const =0
virtual Addr nextLevelPointer(pte_t pte, unsigned level) const =0
virtual unsigned walkBits(unsigned level) const =0
virtual bool isValid(pte_t pte, unsigned level) const =0
virtual LookupLevel firstLevel(uint8_t tsz) const =0
virtual Addr pageMask(pte_t pte, unsigned level) const =0
virtual ~PageTableOps()=default
virtual Addr index(Addr va, unsigned level, int tsz) const =0
virtual bool isLeaf(pte_t pte, unsigned level) const =0
TranslationRegime targetRegime
Definition pagetable.hh:201
TlbEntry(Addr _asn, Addr _vaddr, Addr _paddr, bool uncacheable, bool read_only)
Definition pagetable.hh:306
enums::ArmLookupLevel LookupLevel
Definition pagetable.hh:237
TLBIndexingPolicy IndexingPolicy
Definition pagetable.hh:239
void updateVaddr(Addr new_vaddr)
Definition pagetable.hh:403
TranslationRegime regime
Definition pagetable.hh:285
LookupLevel lookupLevel
Definition pagetable.hh:254
std::string print() const override
Prints relevant information about this entry.
Definition pagetable.hh:508
bool match(const KeyType &key) const
Definition pagetable.hh:429
void insert(const KeyType &key)
Need for compliance with the AssociativeCache interface.
Definition pagetable.hh:397
void swap(TlbEntry &rhs)
Definition pagetable.hh:355
void invalidate()
Need for compliance with the AssociativeCache interface.
Definition pagetable.hh:391
TlbEntry & operator=(TlbEntry rhs)
Definition pagetable.hh:348
bool checkRegime(TranslationRegime target_regime) const
Definition pagetable.hh:447
TlbEntry(const TlbEntry &rhs)=default
void setAttributes(bool lpae)
Definition pagetable.hh:501
TLBTypes::KeyType KeyType
Definition pagetable.hh:238
void unserialize(CheckpointIn &cp) override
Unserialize an object.
Definition pagetable.hh:547
Addr pAddr(Addr va) const
Definition pagetable.hh:453
bool isValid() const
Need for compliance with the AssociativeCache interface.
Definition pagetable.hh:400
void serialize(CheckpointOut &cp) const override
Serialize an object.
Definition pagetable.hh:517
bool matchAddress(const KeyType &key) const
Definition pagetable.hh:415
Addr pageStart() const
Definition pagetable.hh:409
Addr pageMask(pte_t pte, unsigned level) const override
Definition pagetable.cc:118
bool isValid(pte_t pte, unsigned level) const override
Definition pagetable.cc:61
bool isLeaf(pte_t pte, unsigned level) const override
Definition pagetable.cc:72
bool isWritable(pte_t pte, unsigned level, bool stage2) const override
Definition pagetable.cc:83
Addr nextLevelPointer(pte_t pte, unsigned level) const override
Definition pagetable.cc:89
unsigned walkBits(unsigned level) const override
Definition pagetable.cc:129
LookupLevel firstLevel(uint8_t tsz) const override
Definition pagetable.cc:140
LookupLevel lastLevel() const override
Definition pagetable.cc:146
LookupLevel firstS2Level(uint8_t sl0) const override
Definition pagetable.cc:357
unsigned walkBits(unsigned level) const override
Definition pagetable.cc:334
Addr pageMask(pte_t pte, unsigned level) const override
Definition pagetable.cc:320
bool isLeaf(pte_t pte, unsigned level) const override
Definition pagetable.cc:274
LookupLevel firstLevel(uint8_t tsz) const override
Definition pagetable.cc:346
bool isValid(pte_t pte, unsigned level) const override
Definition pagetable.cc:262
LookupLevel lastLevel() const override
Definition pagetable.cc:368
Addr nextLevelPointer(pte_t pte, unsigned level) const override
Definition pagetable.cc:292
bool isWritable(pte_t pte, unsigned level, bool stage2) const override
Definition pagetable.cc:286
unsigned walkBits(unsigned level) const override
Definition pagetable.cc:222
Addr pageMask(pte_t pte, unsigned level) const override
Definition pagetable.cc:210
LookupLevel firstS2Level(uint8_t sl0) const override
Definition pagetable.cc:244
bool isWritable(pte_t pte, unsigned level, bool stage2) const override
Definition pagetable.cc:176
Addr nextLevelPointer(pte_t pte, unsigned level) const override
Definition pagetable.cc:182
LookupLevel lastLevel() const override
Definition pagetable.cc:256
bool isValid(pte_t pte, unsigned level) const override
Definition pagetable.cc:152
bool isLeaf(pte_t pte, unsigned level) const override
Definition pagetable.cc:164
LookupLevel firstLevel(uint8_t tsz) const override
Definition pagetable.cc:234
Addr nextLevelPointer(pte_t pte, unsigned level) const override
Definition pagetable.cc:402
LookupLevel lastLevel() const override
Definition pagetable.cc:471
bool isValid(pte_t pte, unsigned level) const override
Definition pagetable.cc:374
unsigned walkBits(unsigned level) const override
Definition pagetable.cc:439
LookupLevel firstLevel(uint8_t tsz) const override
Definition pagetable.cc:450
Addr pageMask(pte_t pte, unsigned level) const override
Definition pagetable.cc:428
bool isWritable(pte_t pte, unsigned level, bool stage2) const override
Definition pagetable.cc:396
LookupLevel firstS2Level(uint8_t sl0) const override
Definition pagetable.cc:460
bool isLeaf(pte_t pte, unsigned level) const override
Definition pagetable.cc:385

Generated on Mon Oct 27 2025 04:12:58 for gem5 by doxygen 1.14.0