2018-11-11 23:04:23 +01:00
|
|
|
#pragma once
|
|
|
|
#include "types.h"
|
|
|
|
|
2021-10-28 00:58:24 +02:00
|
|
|
/** Frontier between kernel and user space virtual addresses */
|
|
|
|
#define PAGING_BASE_USER_ADDRESS (0x40000000) /* 1GB (must be 4MB-aligned) */
|
|
|
|
#define PAGING_TOP_USER_ADDRESS (0xFFFFFFFF) /* 4GB - 1B */
|
|
|
|
#define PAGING_USER_SPACE_SIZE (0xc0000000) /* 3GB */
|
|
|
|
|
|
|
|
/** Length of the space reserved for the mirroring in the kernel
|
|
|
|
virtual space */
|
|
|
|
#define PAGING_MIRROR_SIZE (PAGE_SIZE << 10) /* 1 PD = 1024 Page Tables = 4MB */
|
|
|
|
|
|
|
|
/** Virtual address where the mirroring takes place */
|
|
|
|
#define PAGING_MIRROR_VADDR \
|
|
|
|
(PAGING_BASE_USER_ADDRESS - PAGING_MIRROR_SIZE)
|
|
|
|
|
2021-10-26 22:29:51 +02:00
|
|
|
#define PAGING_MEM_USER (1U << 0)
|
2019-04-11 22:34:20 +02:00
|
|
|
#define PAGING_MEM_READ (1U << 1)
|
|
|
|
#define PAGING_MEM_WRITE (1U << 2)
|
2018-11-12 23:01:55 +01:00
|
|
|
|
2021-04-10 00:24:02 +02:00
|
|
|
int pagingSetup(paddr_t lowerKernelAddr, paddr_t upperKernelAddr);
|
2018-11-12 21:32:04 +01:00
|
|
|
|
|
|
|
int pageMap(vaddr_t vaddr, paddr_t paddr, int flags);
|
2018-11-12 23:07:59 +01:00
|
|
|
int pageUnmap(vaddr_t vaddr);
|
2018-11-14 14:28:06 +01:00
|
|
|
unsigned long getNbMappedPage(void);
|
2021-10-26 22:52:24 +02:00
|
|
|
|
2021-10-28 00:41:02 +02:00
|
|
|
int pagingSetCurrentPDPaddr(paddr_t paddrPD);
|
2021-10-26 22:52:24 +02:00
|
|
|
paddr_t pagingGetPaddr(vaddr_t vaddr);
|
|
|
|
paddr_t pagingGetCurrentPDPaddr();
|