gem5 [DEVELOP-FOR-25.0]
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 bool isValid(pte_t pte, unsigned level) const = 0;
100 virtual bool isLeaf(pte_t pte, unsigned level) const = 0;
101 virtual bool isWritable(pte_t pte, unsigned level, bool stage2) const = 0;
102 virtual Addr nextLevelPointer(pte_t pte, unsigned level) const = 0;
103 virtual Addr index(Addr va, unsigned level, int tsz) const = 0;
104 virtual Addr pageMask(pte_t pte, unsigned level) const = 0;
105 virtual unsigned walkBits(unsigned level) const = 0;
106 virtual LookupLevel firstLevel(uint8_t tsz) const = 0;
107 virtual LookupLevel firstS2Level(uint8_t sl0) const = 0;
108 virtual LookupLevel lastLevel() const = 0;
109
110 Addr walkMask(unsigned level) const;
111};
112
114{
115 bool isValid(pte_t pte, unsigned level) const override;
116 bool isLeaf(pte_t pte, unsigned level) const override;
117 bool isWritable(pte_t pte, unsigned level, bool stage2) const override;
118 Addr nextLevelPointer(pte_t pte, unsigned level) const override;
119 Addr index(Addr va, unsigned level, int tsz) const override;
120 Addr pageMask(pte_t pte, unsigned level) const override;
121 unsigned walkBits(unsigned level) const override;
122 LookupLevel firstLevel(uint8_t tsz) const override;
123 LookupLevel lastLevel() const override;
124};
125
127{
128 bool isValid(pte_t pte, unsigned level) const override;
129 bool isLeaf(pte_t pte, unsigned level) const override;
130 bool isWritable(pte_t pte, unsigned level, bool stage2) const override;
131 Addr nextLevelPointer(pte_t pte, unsigned level) const override;
132 Addr index(Addr va, unsigned level, int tsz) const override;
133 Addr pageMask(pte_t pte, unsigned level) const override;
134 unsigned walkBits(unsigned level) const override;
135 LookupLevel firstLevel(uint8_t tsz) const override;
136 LookupLevel firstS2Level(uint8_t sl0) const override;
137 LookupLevel lastLevel() const override;
138};
139
141{
142 bool isValid(pte_t pte, unsigned level) const override;
143 bool isLeaf(pte_t pte, unsigned level) const override;
144 bool isWritable(pte_t pte, unsigned level, bool stage2) const override;
145 Addr nextLevelPointer(pte_t pte, unsigned level) const override;
146 Addr index(Addr va, unsigned level, int tsz) const override;
147 Addr pageMask(pte_t pte, unsigned level) const override;
148 unsigned walkBits(unsigned level) const override;
149 LookupLevel firstLevel(uint8_t tsz) const override;
150 LookupLevel firstS2Level(uint8_t sl0) const override;
151 LookupLevel lastLevel() const override;
152};
153
155{
156 bool isValid(pte_t pte, unsigned level) const override;
157 bool isLeaf(pte_t pte, unsigned level) const override;
158 bool isWritable(pte_t pte, unsigned level, bool stage2) const override;
159 Addr nextLevelPointer(pte_t pte, unsigned level) const override;
160 Addr index(Addr va, unsigned level, int tsz) const override;
161 Addr pageMask(pte_t pte, unsigned level) const override;
162 unsigned walkBits(unsigned level) const override;
163 LookupLevel firstLevel(uint8_t tsz) const override;
164 LookupLevel firstS2Level(uint8_t sl0) const override;
165 LookupLevel lastLevel() const override;
166};
167
168struct TlbEntry;
169
171{
172 public:
173 struct KeyType
174 {
175 KeyType() = default;
176 explicit KeyType(const TlbEntry &entry);
177
178 // virtual address
179 Addr va = 0;
180 // page size
182 // lookup size:
183 // * != 0 -> this is a range based lookup.
184 // end_address = va + size
185 // * == 0 -> This is a normal lookup. size should
186 // be ignored
188 // context id/address space id to use
189 uint16_t asn = 0;
190 // if on lookup asn should be ignored
191 bool ignoreAsn = false;
192 // The virtual machine ID used for stage 2 translation
194 // if the lookup is secure
196 // if the lookup should modify state
197 bool functional = false;
198 // selecting the translation regime
200 // mode to differentiate between read/writes/fetches.
202 };
203
204 using Params = TLBIndexingPolicyParams;
205};
207
209{
210 public:
213 : TLBIndexingPolicy(p, p.num_entries, 0)
214 {}
215
217 getPossibleEntries(const KeyType &key) const override
218 {
219 Addr set_number = (key.va >> key.pageSize) & setMask;
220 return sets[set_number];
221 }
222
223 Addr
225 const ReplaceableEntry *entry) const override
226 {
227 panic("Unimplemented\n");
228 }
229};
230
231// ITB/DTB table entry
233{
234 public:
235 using LookupLevel = enums::ArmLookupLevel;
238
239 enum class MemoryType : std::uint8_t
240 {
244 };
245
246 // Matching variables
248 Addr size; // Size of this entry, == Type of TLB Rec
249 Addr vpn; // Virtual Page Number
250 uint64_t attributes; // Memory attributes formatted for PAR
251
252 LookupLevel lookupLevel; // Lookup level where the descriptor was fetched
253 // from. Used to set the FSR for faults
254 // occurring while the long desc. format is in
255 // use (AArch32 w/ LPAE and AArch64)
256
257 uint16_t asid; // Address Space Identifier
258 vmid_t vmid; // Virtual machine Identifier
259 GrainSize tg; // Translation Granule Size
260 uint8_t N; // Number of bits in pagesize
261 uint8_t innerAttrs;
262 uint8_t outerAttrs;
263 uint8_t ap; // Access permissions bits
264 uint8_t hap; // Hyp access permissions bits
265 uint8_t piindex; // Indirect permission index.
266 DomainType domain; // Access Domain
267
269
270 // True if the long descriptor format is used for this entry (LPAE only)
271 bool longDescFormat; // @todo use this in the update attribute bethod
272
273 bool global;
274 bool valid;
275
276 // True if the entry targets the non-secure physical address space
277 bool ns;
278 // Security state of the translation regime
280 // IPA Space (stage2 entries only)
282 // Translation regime on insert, AARCH64 EL0&1, AARCH32 -> el=1
284 // This is used to distinguish between instruction and data entries
285 // in unified TLBs
286 TypeTLB type;
287 // True if the entry is caching a partial translation (a table walk)
289
290 // Type of memory
291 bool nonCacheable; // Can we wrap this in mtype?
292
293 // Memory Attributes
296
297 // Access permissions
298 bool xn; // Execute Never
299 bool pxn; // Privileged Execute Never (LPAE only)
300
301 bool xs; // xs attribute from FEAT_XS
302
303 //Construct an entry that maps to physical address addr for SE mode
304 TlbEntry(Addr _asn, Addr _vaddr, Addr _paddr,
305 bool uncacheable, bool read_only) :
306 pfn(_paddr >> PageShift), size(PageBytes - 1), vpn(_vaddr >> PageShift),
308 asid(_asn), vmid(0), tg(Grain4KB), N(0),
309 innerAttrs(0), outerAttrs(0), ap(read_only ? 0x3 : 0), hap(0x3),
310 piindex(0),
312 longDescFormat(false), global(false), valid(true),
313 ns(true), ss(SecurityState::NonSecure),
316 type(TypeTLB::unified), partial(false),
317 nonCacheable(uncacheable),
318 shareable(false), outerShareable(false), xn(0), pxn(0),
319 xs(true)
320 {
321 // no restrictions by default, hap = 0x3
322
323 // @todo Check the memory type
324 if (read_only)
325 warn("ARM TlbEntry does not support read-only mappings\n");
326 }
327
329 pfn(0), size(0), vpn(0), attributes(0), lookupLevel(LookupLevel::L1),
330 asid(0), vmid(0), tg(ReservedGrain), N(0),
331 innerAttrs(0), outerAttrs(0), ap(0), hap(0x3), piindex(0),
333 longDescFormat(false), global(false), valid(false),
334 ns(true), ss(SecurityState::NonSecure),
337 type(TypeTLB::unified), partial(false), nonCacheable(false),
338 shareable(false), outerShareable(false), xn(0), pxn(0),
339 xs(true)
340 {
341 // no restrictions by default, hap = 0x3
342
343 // @todo Check the memory type
344 }
345 TlbEntry(const TlbEntry &rhs) = default;
347 {
348 swap(rhs);
349 return *this;
350 }
351
352 void
354 {
355 std::swap(pfn, rhs.pfn);
356 std::swap(size, rhs.size);
357 std::swap(vpn, rhs.vpn);
358 std::swap(attributes, rhs.attributes);
359 std::swap(lookupLevel, rhs.lookupLevel);
360 std::swap(asid, rhs.asid);
361 std::swap(vmid, rhs.vmid);
362 std::swap(tg, rhs.tg);
363 std::swap(N, rhs.N);
364 std::swap(innerAttrs, rhs.innerAttrs);
365 std::swap(outerAttrs, rhs.outerAttrs);
366 std::swap(ap, rhs.ap);
367 std::swap(hap, rhs.hap);
368 std::swap(piindex, rhs.piindex);
369 std::swap(domain, rhs.domain);
370 std::swap(mtype, rhs.mtype);
371 std::swap(longDescFormat, rhs.longDescFormat);
372 std::swap(global, rhs.global);
373 std::swap(valid, rhs.valid);
374 std::swap(ns, rhs.ns);
375 std::swap(ss, rhs.ss);
376 std::swap(regime, rhs.regime);
377 std::swap(type, rhs.type);
378 std::swap(partial, rhs.partial);
379 std::swap(nonCacheable, rhs.nonCacheable);
380 std::swap(shareable, rhs.shareable);
381 std::swap(outerShareable, rhs.outerShareable);
382 std::swap(xn, rhs.xn);
383 std::swap(pxn, rhs.pxn);
384 std::swap(xs, rhs.xs);
385 }
386
388 void
390 {
391 valid = false;
392 }
393
395 void insert(const KeyType &key) {}
396
398 bool isValid() const { return valid; }
399
400 void
401 updateVaddr(Addr new_vaddr)
402 {
403 vpn = new_vaddr >> PageShift;
404 }
405
406 Addr
407 pageStart() const
408 {
409 return pfn << PageShift;
410 }
411
412 bool
413 matchAddress(const KeyType &key) const
414 {
415 Addr page_addr = vpn << N;
416 if (key.size) {
417 // This is a range based loookup
418 return key.va <= page_addr + size &&
419 key.va + key.size > page_addr;
420 } else {
421 // This is a normal lookup
422 return key.va >= page_addr && key.va <= page_addr + size;
423 }
424 }
425
426 bool
427 match(const KeyType &key) const
428 {
429 bool match = false;
430 if (valid && matchAddress(key) && key.ss == ss)
431 {
433
434 if (match && !key.ignoreAsn) {
435 match = global || (key.asn == asid);
436 }
437 if (match && useVMID(key.targetRegime)) {
438 match = key.vmid == vmid;
439 }
440 }
441 return match;
442 }
443
444 bool
445 checkRegime(TranslationRegime target_regime) const
446 {
447 return regime == target_regime;
448 }
449
450 Addr
451 pAddr(Addr va) const
452 {
453 return (pfn << N) | (va & size);
454 }
455
456 void
458 {
459 uint64_t mask;
460 uint64_t newBits;
461
462 // chec bit 11 to determine if its currently LPAE or VMSA format.
463 if ( attributes & (1 << 11) ) {
464 newBits = ((outerShareable ? 0x2 :
465 shareable ? 0x3 : 0) << 7);
466 mask = 0x180;
467 } else {
483 newBits = ((outerShareable ? 0:1) << 10) |
484 ((shareable ? 1:0) << 7) |
485 (innerAttrs << 4) |
486 (outerAttrs << 2);
487 // TODO: Supersection bit
488 mask = 0x4FC;
489 }
490 // common bits
491 newBits |= ns << 9; // NS bit
492 mask |= 1 << 9;
493 // add in the new bits
494 attributes &= ~mask;
495 attributes |= newBits;
496 }
497
498 void
500 {
501 attributes = lpae ? (1 << 11) : 0;
503 }
504
505 std::string
506 print() const override
507 {
508 return csprintf("%#x, asn %d vmn %d ppn %#x size: %#x ap:%d "
509 "ns:%d ss:%s g:%d xs: %d regime:%s", vpn << N, asid, vmid,
510 pfn << N, size, ap, ns, ss, global,
512 }
513
514 void
544 void
575
576};
577
578const PageTableOps *getPageTableOps(GrainSize trans_granule);
579
580} // namespace ArmISA
581
582template class IndexingPolicyTemplate<ArmISA::TLBTypes>;
583
584} // namespace gem5
585
586#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:217
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:224
TLBSetAssociative(const Params &p)
Definition pagetable.hh:212
TLBIndexingPolicyParams Params
Definition pagetable.hh:204
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:376
const PageTableOps * getPageTableOps(GrainSize trans_granule)
Definition pagetable.cc:477
IndexingPolicyTemplate< TLBTypes > TLBIndexingPolicy
Definition pagetable.hh:206
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 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:199
TlbEntry(Addr _asn, Addr _vaddr, Addr _paddr, bool uncacheable, bool read_only)
Definition pagetable.hh:304
enums::ArmLookupLevel LookupLevel
Definition pagetable.hh:235
TLBIndexingPolicy IndexingPolicy
Definition pagetable.hh:237
void updateVaddr(Addr new_vaddr)
Definition pagetable.hh:401
TranslationRegime regime
Definition pagetable.hh:283
LookupLevel lookupLevel
Definition pagetable.hh:252
std::string print() const override
Prints relevant information about this entry.
Definition pagetable.hh:506
bool match(const KeyType &key) const
Definition pagetable.hh:427
void insert(const KeyType &key)
Need for compliance with the AssociativeCache interface.
Definition pagetable.hh:395
void swap(TlbEntry &rhs)
Definition pagetable.hh:353
void invalidate()
Need for compliance with the AssociativeCache interface.
Definition pagetable.hh:389
TlbEntry & operator=(TlbEntry rhs)
Definition pagetable.hh:346
bool checkRegime(TranslationRegime target_regime) const
Definition pagetable.hh:445
TlbEntry(const TlbEntry &rhs)=default
void setAttributes(bool lpae)
Definition pagetable.hh:499
TLBTypes::KeyType KeyType
Definition pagetable.hh:236
void unserialize(CheckpointIn &cp) override
Unserialize an object.
Definition pagetable.hh:545
Addr pAddr(Addr va) const
Definition pagetable.hh:451
bool isValid() const
Need for compliance with the AssociativeCache interface.
Definition pagetable.hh:398
void serialize(CheckpointOut &cp) const override
Serialize an object.
Definition pagetable.hh:515
bool matchAddress(const KeyType &key) const
Definition pagetable.hh:413
Addr pageStart() const
Definition pagetable.hh:407
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 May 26 2025 09:19:05 for gem5 by doxygen 1.13.2