44 uint64_t *return_paddr,
int flags)
63 *return_paddr = vaddr & 0x000003ffffffffffULL;
73 if (!userMode && base == 0) {
74 *return_paddr = vaddr & 0x000003ffffffffffULL;
75 if (vaddr == 0xfffffffd80000000ULL) {
76 fatal(
"Alpha kernel virtual memory seems to want to be used. Not yet implemented.\n");
80 if ((vaddr & ~0x7fff) == 0x0000000010000000ULL)
83 if ((vaddr & ~0xffffff) == 0xfffffe0000000000ULL)
84 *return_paddr = 0x7efa000 + (vaddr & 0xffffff);
87 if ((vaddr & ~0x1fff) == 0x0000000020000000ULL)
94 if (vaddr == 0xfffffffd80000000ULL)
fatal(
"AYONA3\n");
96 uint64_t
addr, pte1, pte2, pte3;
98 unsigned char *pt_entry_ptr;
99 const int pageSizeShift = 13;
101 const int bitsPerLevel = 10;
102 const int maskPerLevel = (1 << bitsPerLevel) - 1;
104 i1 = (vaddr >> (pageSizeShift + 2 * bitsPerLevel)) & maskPerLevel;
105 i2 = (vaddr >> (pageSizeShift + 1 * bitsPerLevel)) & maskPerLevel;
106 i3 = (vaddr >> (pageSizeShift + 0 * bitsPerLevel)) & maskPerLevel;
110 addr = base + i1 *
sizeof(uint64_t);
113 if (pt_entry_ptr == NULL)
116 pte1 = *(uint64_t *)(pt_entry_ptr);
134 if (pt_entry_ptr == NULL)
137 pte2 = *(uint64_t *)(pt_entry_ptr);
141 if (!(pte2 & ALPHA_PTE_VALID)) {
148 fatal(
"TODO: pte2 not valid.\n");
155 if (pt_entry_ptr == NULL)
158 pte3 = *(uint64_t *)(pt_entry_ptr);
163 if (!(pte3 & ALPHA_PTE_VALID)) {
164 fatal(
"TODO: pte3 not valid.\n");
175 fatal(
"[ alpha_translate_v2p: 0x%016" PRIx64
" wasn't found ]\n", vaddr);
void fatal(const char *fmt,...)
int alpha_translate_v2p(struct cpu *cpu, uint64_t vaddr, uint64_t *return_paddr, int flags)
#define PROM_ARGSPACE_PADDR
#define ALPHA_PTE_TO_PFN(pte)
#define ALPHA_PSL_USERMODE
unsigned char * memory_paddr_to_hostaddr(struct memory *mem, uint64_t paddr, int writeflag)