From 4f08ba2b1d0ad7ea90d4d97a483b56b891b9c902 Mon Sep 17 00:00:00 2001 From: Loic Guegan Date: Sat, 1 May 2021 11:37:52 +0200 Subject: Creating scheduler, debug paging --- src/core/paging.hpp | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) (limited to 'src/core/paging.hpp') diff --git a/src/core/paging.hpp b/src/core/paging.hpp index caaaf9e..c9b9442 100644 --- a/src/core/paging.hpp +++ b/src/core/paging.hpp @@ -16,31 +16,31 @@ /// @brief Options #define PAGING_OPT_P 1 #define PAGING_OPT_RW (1<<1) +#define PAGING_OPT_US 4 #define PAGING_OPT_PCD (1<<3) +#define PAGING_OPT_DEFAULTS (PAGING_OPT_P|PAGING_OPT_RW) /// @brief Get page address that contain addr #define PAGE(addr) (addr&(~(0xFFF))) #define VIRT(addr) ((u64*)(((u64)addr)+kvar_kernel_vma)) +#define PHY(addr) ((u64*)(((u64)addr)-kvar_kernel_vma)) -/// @brief Mapping facilities -#define PAGE_ID_MAP(addr) paging_allocate_addr(kpages[0],(u64)(addr),(u64)(addr),PAGING_OPT_P|PAGING_OPT_RW,1) -#define PAGE_ID_RMAP(addr, n) { \ +/// @brief Mapping facilities +#define PAGE_MAP(virt,phy,opt) paging_allocate_addr(kpages[0],(u64)(virt),(u64)(phy),(opt),1) +#define PAGE_RMAP(virt,phy,opt,n) { \ for(u64 i=0;i<(n);i+=4096){ \ - paging_allocate_addr(kpages[0],((u64)(addr))+i,((u64)(addr))+i,PAGING_OPT_P|PAGING_OPT_RW,1); \ + paging_allocate_addr(kpages[0],((u64)(virt))+i,((u64)(phy))+i,(opt),1); \ }} -#define PAGE_MAP(addr) paging_allocate_addr(kpages[0],(u64)((addr)+kvar_kernel_vma),(u64)(addr),PAGING_OPT_P|PAGING_OPT_RW,1) -#define PAGE_RMAP(addr, n) { \ +#define PAGE_VIRT_MAP(phy,opt) paging_allocate_addr(kpages[0],(u64)(phy)+kvar_kernel_vma,(u64)(phy),(opt),1) +#define PAGE_VIRT_RMAP(phy,opt,n) { \ for(u64 i=0;i<(n);i+=4096){ \ - paging_allocate_addr(kpages[0],(((u64)(addr))+kvar_kernel_vma)+i,((u64)(addr))+i,PAGING_OPT_P|PAGING_OPT_RW,1); \ -}} -#define PAGE_MAP_PHY(addr,phy) paging_allocate_addr(kpages[0],(u64)((addr)+kvar_kernel_vma),(u64)(phy),PAGING_OPT_P|PAGING_OPT_RW,1) -#define PAGE_RMAP_PHY(addr,phy, n) { \ - for(u64 i=0;i<(n);i+=4096){ \ - paging_allocate_addr(kpages[0],(((u64)(addr))+kvar_kernel_vma)+i,((u64)(phy))+i,PAGING_OPT_P|PAGING_OPT_RW,1); \ + paging_allocate_addr(kpages[0],(((u64)(phy))+kvar_kernel_vma)+i,((u64)(phy))+i,(opt),1); \ }} + /// @brief All PAE table structures are allocated here extern u64 kpages[MAX_TABLES][512]; +extern u64 *kpml4; /// CF boucane.hpp extern u64 kvar_kernel_vma,kvar_stack_pma,kvar_userspace_pma; @@ -57,6 +57,8 @@ void paging_enable(); */ u64* paging_allocate_contiguous(int npages); +u64* paging_allocate_utable(); + /** * Deallocate a page located at addr */ -- cgit v1.2.3