matos/arch/x86/paging.h

33 lines
1.2 KiB
C
Raw Normal View History

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)
2023-11-10 09:01:55 +01:00
#define PAGING_MEM_EXEC (1U << 3)
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);
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();
int pagingCopyKernelSpace(vaddr_t destVaddrPD, paddr_t destPaddrPD, vaddr_t srcVaddrPD);
2021-10-30 00:28:31 +02:00
int pagingClearUserContext(vaddr_t vaddr_PD);