49 case 1:
return pte & 0x1;
50 case 2:
return pte & 0x1;
51 case 3:
return (pte & 0x1) && (pte & 0x2);
52 default:
panic(
"bad level %d", level);
60 case 1:
return !(pte & 0x2);
61 case 2:
return !(pte & 0x2);
63 default:
panic(
"bad level %d", level);
70 return stage2 ?
bits(pte, 7, 6)==3 :
bits(pte, 7)==0;
78 case 1:
return mbits(pte, 39, 30);
79 case 2:
return mbits(pte, 39, 21);
80 case 3:
return mbits(pte, 39, 12);
81 default:
panic(
"bad level %d", level);
84 return mbits(pte, 39, 12);
95 case 1:
return bits(va, 26+n, 30) << 3;
break;
96 case 2:
return bits(va, 29, 21) << 3;
break;
97 case 3:
return bits(va, 20, 12) << 3;
break;
98 default:
panic(
"bad level %d", level);
106 case 1:
return ~
mask(30);
107 case 2:
return ~
mask(21);
109 default:
panic(
"bad level %d", level);
117 case 1:
return ~
mask(30);
118 case 2:
return ~
mask(21);
119 case 3:
return ~
mask(12);
120 default:
panic(
"bad level %d", level);
140 case 0:
return pte & 0x1;
141 case 1:
return pte & 0x1;
142 case 2:
return pte & 0x1;
143 case 3:
return (pte & 0x1) && (pte & 0x2);
144 default:
panic(
"bad level %d", level);
152 case 0:
return false;
153 case 1:
return !(pte & 0x2);
154 case 2:
return !(pte & 0x2);
156 default:
panic(
"bad level %d", level);
163 return stage2 ?
bits(pte, 7, 6)==3 :
bits(pte, 7)==0;
172 case 1:
return mbits(pte, 47, 30);
173 case 2:
return mbits(pte, 47, 21);
174 case 3:
return mbits(pte, 47, 12);
175 default:
panic(
"bad level %d", level);
178 return mbits(pte, 47, 12);
186 case 0:
return bits(va, 47, 39) << 3;
break;
187 case 1:
return bits(va, 38, 30) << 3;
break;
188 case 2:
return bits(va, 29, 21) << 3;
break;
189 case 3:
return bits(va, 20, 12) << 3;
break;
190 default:
panic(
"bad level %d", level);
199 case 1:
return ~
mask(30);
200 case 2:
return ~
mask(21);
202 default:
panic(
"bad level %d", level);
210 case 0:
return ~
mask(39);
211 case 1:
return ~
mask(30);
212 case 2:
return ~
mask(21);
213 case 3:
return ~
mask(12);
214 default:
panic(
"bad level %d", level);
221 if (tsz >= 16 && tsz <= 24)
return 0;
222 if (tsz >= 25 && tsz <= 33)
return 1;
223 if (tsz >= 34 && tsz <= 39)
return 2;
225 panic(
"Unsupported TnSZ: %d\n", tsz);
238 case 0:
return pte & 0x1;
239 case 1:
return pte & 0x1;
240 case 2:
return pte & 0x1;
241 case 3:
return (pte & 0x1) && (pte & 0x2);
242 default:
panic(
"bad level %d", level);
250 case 0:
return false;
251 case 1:
return false;
252 case 2:
return !(pte & 0x2);
254 default:
panic(
"bad level %d", level);
261 return stage2 ?
bits(pte, 7, 6) == 3 :
bits(pte, 7) == 0;
270 case 1:
return mbits(pte, 47, 36);
271 case 2:
return mbits(pte, 47, 25);
272 case 3:
return mbits(pte, 47, 14);
273 default:
panic(
"bad level %d", level);
276 return mbits(pte, 47, 14);
284 case 0:
return bits(va, 47, 47) << 3;
break;
285 case 1:
return bits(va, 46, 36) << 3;
break;
286 case 2:
return bits(va, 35, 25) << 3;
break;
287 case 3:
return bits(va, 24, 14) << 3;
break;
288 default:
panic(
"bad level %d", level);
297 case 1:
return ~
mask(36);
302 default:
panic(
"bad level %d", level);
310 case 0:
return ~
mask(47);
311 case 1:
return ~
mask(36);
312 case 2:
return ~
mask(25);
313 case 3:
return ~
mask(14);
314 default:
panic(
"bad level %d", level);
321 if (tsz == 16)
return 0;
322 if (tsz >= 17 && tsz <= 27)
return 1;
323 if (tsz >= 28 && tsz <= 38)
return 2;
324 if (tsz == 39)
return 3;
326 panic(
"Unsupported TnSZ: %d\n", tsz);
339 case 1:
return pte & 0x1;
340 case 2:
return pte & 0x1;
341 case 3:
return (pte & 0x1) && (pte & 0x2);
342 default:
panic(
"bad level %d", level);
350 case 1:
return false;
351 case 2:
return !(pte & 0x2);
353 default:
panic(
"bad level %d", level);
360 return stage2 ?
bits(pte, 7, 6)==3 :
bits(pte, 7)==0;
369 case 2:
return mbits(pte, 47, 29);
370 case 3:
return mbits(pte, 47, 16);
371 default:
panic(
"bad level %d", level);
374 return mbits(pte, 47, 16);
382 case 1:
return bits(va, 47, 42) << 3;
break;
383 case 2:
return bits(va, 41, 29) << 3;
break;
384 case 3:
return bits(va, 28, 16) << 3;
break;
385 default:
panic(
"bad level %d", level);
394 case 2:
return ~
mask(29);
396 default:
panic(
"bad level %d", level);
404 case 1:
return ~
mask(42);
405 case 2:
return ~
mask(29);
406 case 3:
return ~
mask(16);
407 default:
panic(
"bad level %d", level);
414 if (tsz >= 12 && tsz <= 21)
return 1;
415 if (tsz >= 22 && tsz <= 34)
return 2;
416 if (tsz >= 35 && tsz <= 39)
return 3;
418 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