5#include <machine/amd64.h>
32#define MEM_USERSPACE_BASE 0x0000000000000000ULL
33#define MEM_USERSPACE_LEN 0x0000800000000000ULL
34#define MEM_USERSPACE_TOP (MEM_USERSPACE_BASE + MEM_USERSPACE_LEN)
36#define MEM_USERSPACE_STKBASE 0x0000000070000000ULL
37#define MEM_USERSPACE_STKLEN 0x0000000000010000ULL
38#define MEM_USERSPACE_STKTOP (MEM_USERSPACE_STKBASE + MEM_USERSPACE_STKLEN)
40#define MEM_DIRECTMAP_BASE 0xFFFF800000000000ULL
41#define MEM_DIRECTMAP_LEN 0x0000010000000000ULL
42#define MEM_XMAP_BASE 0xFFFF810000000000ULL
43#define MEM_XMAP_LEN 0x0000002000000000ULL
45#define PPN2DMVA(ppn) (((ppn) << PGSIZE) + MEM_DIRECTMAP_BASE)
46#define DMVA2PPN(dmva) (((dmva) - MEM_DIRECTMAP_BASE) >> PGSIZE)
47#define DMVA2PA(dmva) ((dmva) - MEM_DIRECTMAP_BASE)
48#define DMPA2VA(pa) ((pa) + MEM_DIRECTMAP_BASE)
49#define VA2PA(va) PMap_Translate(PMap_CurrentAS(), va)
bool PMap_SystemLMap(uint64_t phys, uint64_t virt, uint64_t lpages, uint64_t flags)
bool PMap_SystemMap(uint64_t phys, uint64_t virt, uint64_t pages, uint64_t flags)
bool PMap_Map(AS *as, uint64_t phys, uint64_t virt, uint64_t pages, uint64_t flags)
void PMap_LoadAS(AS *space)
uintptr_t PMap_Translate(AS *space, uintptr_t va)
bool PMap_SystemUnmap(uint64_t virt, uint64_t pages)
void PMap_Dump(AS *space)
bool PMap_Unmap(AS *as, uint64_t virt, uint64_t pages)
bool PMap_AllocMap(AS *as, uint64_t virt, uint64_t len, uint64_t flags)
void PMap_DestroyAS(AS *space)
void PMap_SystemLookup(uint64_t va, PageEntry **entry, int size)