gem5 v24.1.0.1
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
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{
82 void serialize(CheckpointOut &cp) const
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 {
242 Device,
243 Normal
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 DomainType domain; // Access Domain
266
268
269 // True if the long descriptor format is used for this entry (LPAE only)
270 bool longDescFormat; // @todo use this in the update attribute bethod
271
272 bool global;
273 bool valid;
274
275 // True if the entry targets the non-secure physical address space
276 bool ns;
277 // Security state of the translation regime
279 // IPA Space (stage2 entries only)
281 // Translation regime on insert, AARCH64 EL0&1, AARCH32 -> el=1
283 // This is used to distinguish between instruction and data entries
284 // in unified TLBs
285 TypeTLB type;
286 // True if the entry is caching a partial translation (a table walk)
288
289 // Type of memory
290 bool nonCacheable; // Can we wrap this in mtype?
291
292 // Memory Attributes
295
296 // Access permissions
297 bool xn; // Execute Never
298 bool pxn; // Privileged Execute Never (LPAE only)
299
300 bool xs; // xs attribute from FEAT_XS
301
302 //Construct an entry that maps to physical address addr for SE mode
303 TlbEntry(Addr _asn, Addr _vaddr, Addr _paddr,
304 bool uncacheable, bool read_only) :
305 pfn(_paddr >> PageShift), size(PageBytes - 1), vpn(_vaddr >> PageShift),
307 asid(_asn), vmid(0), tg(Grain4KB), N(0),
308 innerAttrs(0), outerAttrs(0), ap(read_only ? 0x3 : 0), hap(0x3),
310 longDescFormat(false), global(false), valid(true),
311 ns(true), ss(SecurityState::NonSecure),
314 type(TypeTLB::unified), partial(false),
315 nonCacheable(uncacheable),
316 shareable(false), outerShareable(false), xn(0), pxn(0),
317 xs(true)
318 {
319 // no restrictions by default, hap = 0x3
320
321 // @todo Check the memory type
322 if (read_only)
323 warn("ARM TlbEntry does not support read-only mappings\n");
324 }
325
327 pfn(0), size(0), vpn(0), attributes(0), lookupLevel(LookupLevel::L1),
328 asid(0), vmid(0), tg(ReservedGrain), N(0),
329 innerAttrs(0), outerAttrs(0), ap(0), hap(0x3),
331 longDescFormat(false), global(false), valid(false),
332 ns(true), ss(SecurityState::NonSecure),
335 type(TypeTLB::unified), partial(false), nonCacheable(false),
336 shareable(false), outerShareable(false), xn(0), pxn(0),
337 xs(true)
338 {
339 // no restrictions by default, hap = 0x3
340
341 // @todo Check the memory type
342 }
343 TlbEntry(const TlbEntry &rhs) = default;
345 {
346 swap(rhs);
347 return *this;
348 }
349
350 void
352 {
353 std::swap(pfn, rhs.pfn);
354 std::swap(size, rhs.size);
355 std::swap(vpn, rhs.vpn);
356 std::swap(attributes, rhs.attributes);
357 std::swap(lookupLevel, rhs.lookupLevel);
358 std::swap(asid, rhs.asid);
359 std::swap(vmid, rhs.vmid);
360 std::swap(tg, rhs.tg);
361 std::swap(N, rhs.N);
362 std::swap(innerAttrs, rhs.innerAttrs);
363 std::swap(outerAttrs, rhs.outerAttrs);
364 std::swap(ap, rhs.ap);
365 std::swap(hap, rhs.hap);
366 std::swap(domain, rhs.domain);
367 std::swap(mtype, rhs.mtype);
368 std::swap(longDescFormat, rhs.longDescFormat);
369 std::swap(global, rhs.global);
370 std::swap(valid, rhs.valid);
371 std::swap(ns, rhs.ns);
372 std::swap(ss, rhs.ss);
373 std::swap(regime, rhs.regime);
374 std::swap(type, rhs.type);
375 std::swap(partial, rhs.partial);
376 std::swap(nonCacheable, rhs.nonCacheable);
377 std::swap(shareable, rhs.shareable);
378 std::swap(outerShareable, rhs.outerShareable);
379 std::swap(xn, rhs.xn);
380 std::swap(pxn, rhs.pxn);
381 std::swap(xs, rhs.xs);
382 }
383
385 void
387 {
388 valid = false;
389 }
390
392 void insert(const KeyType &key) {}
393
395 bool isValid() const { return valid; }
396
397 void
398 updateVaddr(Addr new_vaddr)
399 {
400 vpn = new_vaddr >> PageShift;
401 }
402
403 Addr
404 pageStart() const
405 {
406 return pfn << PageShift;
407 }
408
409 bool
410 matchAddress(const KeyType &key) const
411 {
412 Addr page_addr = vpn << N;
413 if (key.size) {
414 // This is a range based loookup
415 return key.va <= page_addr + size &&
416 key.va + key.size > page_addr;
417 } else {
418 // This is a normal lookup
419 return key.va >= page_addr && key.va <= page_addr + size;
420 }
421 }
422
423 bool
424 match(const KeyType &key) const
425 {
426 bool match = false;
427 if (valid && matchAddress(key) && key.ss == ss)
428 {
430
431 if (match && !key.ignoreAsn) {
432 match = global || (key.asn == asid);
433 }
434 if (match && useVMID(key.targetRegime)) {
435 match = key.vmid == vmid;
436 }
437 }
438 return match;
439 }
440
441 bool
442 checkRegime(TranslationRegime target_regime) const
443 {
444 return regime == target_regime;
445 }
446
447 Addr
448 pAddr(Addr va) const
449 {
450 return (pfn << N) | (va & size);
451 }
452
453 void
455 {
456 uint64_t mask;
457 uint64_t newBits;
458
459 // chec bit 11 to determine if its currently LPAE or VMSA format.
460 if ( attributes & (1 << 11) ) {
461 newBits = ((outerShareable ? 0x2 :
462 shareable ? 0x3 : 0) << 7);
463 mask = 0x180;
464 } else {
480 newBits = ((outerShareable ? 0:1) << 10) |
481 ((shareable ? 1:0) << 7) |
482 (innerAttrs << 4) |
483 (outerAttrs << 2);
484 // TODO: Supersection bit
485 mask = 0x4FC;
486 }
487 // common bits
488 newBits |= ns << 9; // NS bit
489 mask |= 1 << 9;
490 // add in the new bits
491 attributes &= ~mask;
492 attributes |= newBits;
493 }
494
495 void
497 {
498 attributes = lpae ? (1 << 11) : 0;
500 }
501
502 std::string
503 print() const override
504 {
505 return csprintf("%#x, asn %d vmn %d ppn %#x size: %#x ap:%d "
506 "ns:%d ss:%s g:%d xs: %d regime:%s", vpn << N, asid, vmid,
507 pfn << N, size, ap, ns, ss, global,
509 }
510
511 void
541 void
572
573};
574
575const PageTableOps *getPageTableOps(GrainSize trans_granule);
576
577} // namespace ArmISA
578
579template class IndexingPolicyTemplate<ArmISA::TLBTypes>;
580
581} // namespace gem5
582
583#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 Types::KeyType KeyType
Definition base.hh:75
typename Types::Params Params
Definition base.hh:76
std::vector< std::vector< ReplaceableEntry * > > sets
The cache sets.
Definition base.hh:101
const unsigned setMask
Mask out all bits that aren't part of the set index.
Definition base.hh:96
A replaceable entry is a basic entry in a 2d table-like structure that needs to have replacement func...
Basic support for object serialization.
Definition serialize.hh:170
STL vector class.
Definition stl.hh:37
#define panic(...)
This implements a cprintf based panic() function.
Definition logging.hh:188
#define SERIALIZE_ENUM(scalar)
Definition serialize.hh:591
#define UNSERIALIZE_ENUM(scalar)
Definition serialize.hh:598
#define warn(...)
Definition logging.hh:256
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
Bitfield< 3, 0 > mask
Definition pcstate.hh:63
Bitfield< 9 > lpae
IndexingPolicyTemplate< TLBTypes > TLBIndexingPolicy
Definition pagetable.hh:206
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:303
enums::ArmLookupLevel LookupLevel
Definition pagetable.hh:235
void updateVaddr(Addr new_vaddr)
Definition pagetable.hh:398
TranslationRegime regime
Definition pagetable.hh:282
LookupLevel lookupLevel
Definition pagetable.hh:252
std::string print() const override
Prints relevant information about this entry.
Definition pagetable.hh:503
bool match(const KeyType &key) const
Definition pagetable.hh:424
void insert(const KeyType &key)
Need for compliance with the AssociativeCache interface.
Definition pagetable.hh:392
void swap(TlbEntry &rhs)
Definition pagetable.hh:351
void invalidate()
Need for compliance with the AssociativeCache interface.
Definition pagetable.hh:386
TlbEntry & operator=(TlbEntry rhs)
Definition pagetable.hh:344
bool checkRegime(TranslationRegime target_regime) const
Definition pagetable.hh:442
TlbEntry(const TlbEntry &rhs)=default
void setAttributes(bool lpae)
Definition pagetable.hh:496
void unserialize(CheckpointIn &cp) override
Unserialize an object.
Definition pagetable.hh:542
Addr pAddr(Addr va) const
Definition pagetable.hh:448
bool isValid() const
Need for compliance with the AssociativeCache interface.
Definition pagetable.hh:395
void serialize(CheckpointOut &cp) const override
Serialize an object.
Definition pagetable.hh:512
bool matchAddress(const KeyType &key) const
Definition pagetable.hh:410
Addr pageStart() const
Definition pagetable.hh:404
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 Jan 13 2025 04:28:22 for gem5 by doxygen 1.9.8