47 case 1:
return pte & 0x1;
48 case 2:
return pte & 0x1;
49 case 3:
return (pte & 0x1) && (pte & 0x2);
50 default:
panic(
"bad level %d", level);
58 case 1:
return !(pte & 0x2);
59 case 2:
return !(pte & 0x2);
61 default:
panic(
"bad level %d", level);
68 return stage2 ?
bits(pte, 7, 6)==3 :
bits(pte, 7)==0;
76 case 1:
return mbits(pte, 39, 30);
77 case 2:
return mbits(pte, 39, 21);
78 case 3:
return mbits(pte, 39, 12);
79 default:
panic(
"bad level %d", level);
82 return mbits(pte, 39, 12);
93 case 1:
return bits(va, 26+n, 30) << 3;
break;
94 case 2:
return bits(va, 29, 21) << 3;
break;
95 case 3:
return bits(va, 20, 12) << 3;
break;
96 default:
panic(
"bad level %d", level);
104 case 1:
return ~
mask(30);
105 case 2:
return ~
mask(21);
107 default:
panic(
"bad level %d", level);
115 case 1:
return ~
mask(30);
116 case 2:
return ~
mask(21);
117 case 3:
return ~
mask(12);
118 default:
panic(
"bad level %d", level);
138 case 0:
return pte & 0x1;
139 case 1:
return pte & 0x1;
140 case 2:
return pte & 0x1;
141 case 3:
return (pte & 0x1) && (pte & 0x2);
142 default:
panic(
"bad level %d", level);
150 case 0:
return false;
151 case 1:
return !(pte & 0x2);
152 case 2:
return !(pte & 0x2);
154 default:
panic(
"bad level %d", level);
161 return stage2 ?
bits(pte, 7, 6)==3 :
bits(pte, 7)==0;
170 case 1:
return mbits(pte, 47, 30);
171 case 2:
return mbits(pte, 47, 21);
172 case 3:
return mbits(pte, 47, 12);
173 default:
panic(
"bad level %d", level);
176 return mbits(pte, 47, 12);
184 case 0:
return bits(va, 47, 39) << 3;
break;
185 case 1:
return bits(va, 38, 30) << 3;
break;
186 case 2:
return bits(va, 29, 21) << 3;
break;
187 case 3:
return bits(va, 20, 12) << 3;
break;
188 default:
panic(
"bad level %d", level);
197 case 1:
return ~
mask(30);
198 case 2:
return ~
mask(21);
200 default:
panic(
"bad level %d", level);
208 case 0:
return ~
mask(39);
209 case 1:
return ~
mask(30);
210 case 2:
return ~
mask(21);
211 case 3:
return ~
mask(12);
212 default:
panic(
"bad level %d", level);
219 if (tsz >= 16 && tsz <= 24)
return 0;
220 if (tsz >= 25 && tsz <= 33)
return 1;
221 if (tsz >= 34 && tsz <= 39)
return 2;
223 panic(
"Unsupported TnSZ: %d\n", tsz);
236 case 0:
return pte & 0x1;
237 case 1:
return pte & 0x1;
238 case 2:
return pte & 0x1;
239 case 3:
return (pte & 0x1) && (pte & 0x2);
240 default:
panic(
"bad level %d", level);
248 case 0:
return false;
249 case 1:
return false;
250 case 2:
return !(pte & 0x2);
252 default:
panic(
"bad level %d", level);
259 return stage2 ?
bits(pte, 7, 6) == 3 :
bits(pte, 7) == 0;
268 case 1:
return mbits(pte, 47, 36);
269 case 2:
return mbits(pte, 47, 25);
270 case 3:
return mbits(pte, 47, 14);
271 default:
panic(
"bad level %d", level);
274 return mbits(pte, 47, 14);
282 case 0:
return bits(va, 47, 47) << 3;
break;
283 case 1:
return bits(va, 46, 36) << 3;
break;
284 case 2:
return bits(va, 35, 25) << 3;
break;
285 case 3:
return bits(va, 24, 14) << 3;
break;
286 default:
panic(
"bad level %d", level);
295 case 1:
return ~
mask(36);
300 default:
panic(
"bad level %d", level);
308 case 0:
return ~
mask(47);
309 case 1:
return ~
mask(36);
310 case 2:
return ~
mask(25);
311 case 3:
return ~
mask(14);
312 default:
panic(
"bad level %d", level);
319 if (tsz == 16)
return 0;
320 if (tsz >= 17 && tsz <= 27)
return 1;
321 if (tsz >= 28 && tsz <= 38)
return 2;
322 if (tsz == 39)
return 3;
324 panic(
"Unsupported TnSZ: %d\n", tsz);
337 case 1:
return pte & 0x1;
338 case 2:
return pte & 0x1;
339 case 3:
return (pte & 0x1) && (pte & 0x2);
340 default:
panic(
"bad level %d", level);
348 case 1:
return false;
349 case 2:
return !(pte & 0x2);
351 default:
panic(
"bad level %d", level);
358 return stage2 ?
bits(pte, 7, 6)==3 :
bits(pte, 7)==0;
367 case 2:
return mbits(pte, 47, 29);
368 case 3:
return mbits(pte, 47, 16);
369 default:
panic(
"bad level %d", level);
372 return mbits(pte, 47, 16);
380 case 1:
return bits(va, 47, 42) << 3;
break;
381 case 2:
return bits(va, 41, 29) << 3;
break;
382 case 3:
return bits(va, 28, 16) << 3;
break;
383 default:
panic(
"bad level %d", level);
392 case 2:
return ~
mask(29);
394 default:
panic(
"bad level %d", level);
402 case 1:
return ~
mask(42);
403 case 2:
return ~
mask(29);
404 case 3:
return ~
mask(16);
405 default:
panic(
"bad level %d", level);
412 if (tsz >= 12 && tsz <= 21)
return 1;
413 if (tsz >= 22 && tsz <= 34)
return 2;
414 if (tsz >= 35 && tsz <= 39)
return 3;
416 panic(
"Unsupported TnSZ: %d\n", tsz);
#define panic(...)
This implements a cprintf based panic() function.
unsigned firstLevel(uint8_t tsz) const override
unsigned firstLevel(uint8_t tsz) const override
bool isValid(pte_t pte, unsigned level) const override
bool isWritable(pte_t pte, unsigned level, bool stage2) const override
Addr index(Addr va, unsigned level) const override
bool isValid(pte_t pte, unsigned level) const override
unsigned lastLevel() const override
bool isLeaf(pte_t pte, unsigned level) const override
bool isLeaf(pte_t pte, unsigned level) const override
bool isValid(pte_t pte, unsigned level) const override
unsigned firstLevel(uint8_t tsz) const override
Addr index(Addr va, unsigned level) const override
unsigned lastLevel() const override
unsigned lastLevel() const override
Addr walkMask(unsigned level) const override
unsigned lastLevel() const override
Addr walkMask(unsigned level) const override
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
bool isWritable(pte_t pte, unsigned level, bool stage2) const override
Addr pageMask(pte_t pte, unsigned level) const override
bool isValid(pte_t pte, unsigned level) const override
Addr walkMask(unsigned level) const override
bool isLeaf(pte_t pte, unsigned level) const override
Addr nextLevelPointer(pte_t pte, unsigned level) const override
bool isLeaf(pte_t pte, unsigned level) const override
Addr nextLevelPointer(pte_t pte, unsigned level) const override
Addr index(Addr va, unsigned level) const override
bool isWritable(pte_t pte, unsigned level, bool stage2) const override
Addr index(Addr va, unsigned level) const override
Addr nextLevelPointer(pte_t pte, unsigned level) const override
Addr pageMask(pte_t pte, unsigned level) const override
unsigned firstLevel(uint8_t tsz) const override
T mbits(T val, int first, int last)
Mask off the given bits in place like bits() but without shifting.
T bits(T val, int first, int last)
Extract the bitfield from position 'first' to 'last' (inclusive) from 'val' and right justify it...
Addr pageMask(pte_t pte, unsigned level) const override
Addr walkMask(unsigned level) const override
Addr nextLevelPointer(pte_t pte, unsigned level) const override
Addr pageMask(pte_t pte, unsigned level) const override
bool isWritable(pte_t pte, unsigned level, bool stage2) const override