aboutsummaryrefslogtreecommitdiff
path: root/src/core/paging.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/paging.hpp')
-rw-r--r--src/core/paging.hpp26
1 files changed, 14 insertions, 12 deletions
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
*/