aboutsummaryrefslogtreecommitdiff
path: root/src/core/paging.hpp
diff options
context:
space:
mode:
authorLoic Guegan <manzerbredes@mailbox.org>2021-04-29 15:01:54 +0200
committerLoic Guegan <manzerbredes@mailbox.org>2021-04-29 15:01:54 +0200
commitf37f5d86b74870e878f69bd41a3c70a59c4ce1c1 (patch)
tree65620f0504fea111ba870457f32bc072dc27fe7a /src/core/paging.hpp
parentfde8a1ab65d5e33d90123a3aaa9b5c15e249689f (diff)
Debug memory
Diffstat (limited to 'src/core/paging.hpp')
-rw-r--r--src/core/paging.hpp51
1 files changed, 22 insertions, 29 deletions
diff --git a/src/core/paging.hpp b/src/core/paging.hpp
index a3c2fec..1aae24a 100644
--- a/src/core/paging.hpp
+++ b/src/core/paging.hpp
@@ -2,34 +2,40 @@
#include "core/types.hpp"
-#define MAX_TABLES 280
-#define PAGING_MAX_PAGE (20*512)
/**
* Current number of page (from the beginning of the ram) used by the kernel that
* should not be used by the paging allocation mechanism and should not be granted
* for allocation
*/
-#define PAGING_KERNEL_USED_PAGE (2*512)
/// @brief New number of page reachable at the end of the paging_enable() call
-#define PAGING_KERNEL_SPACE_MAX_PAGE (20*512)
-#define PAGING_ALLOCATE() paging_allocate_contiguous(1)
+#define MAX_TABLES 280
+#define PAGING_MAX_PAGE (20*512)
+#define PAGE_ALLOCATE() paging_allocate_contiguous(1)
+
+/// @brief Options
#define PAGING_OPT_P 1
#define PAGING_OPT_RW (1<<1)
#define PAGING_OPT_PCD (1<<3)
/// @brief Get page address that contain addr
#define PAGE(addr) (addr&(~(0xFFF)))
-#define PAGING_MAP(addr) paging_allocate_addr(kpages[0],(u64)(addr),(u64)(addr),PAGING_OPT_P|PAGING_OPT_RW,kvar_kernel_vma)
-#define PAGING_MAP_RANGE(addr, n) { \
- for(u64 i=0;i<(n);i++){ \
- paging_allocate_addr(kpages[0],((u64)(addr))+i,((u64)(addr))+i,PAGING_OPT_P|PAGING_OPT_RW,kvar_kernel_vma); \
-}}
+#define VIRT(addr) (addr+kvar_kernel_vma)
-
-#define PAGING_MAP2(addr,phy) paging_allocate_addr(kpages[0],(u64)(addr),(u64)(phy),PAGING_OPT_P|PAGING_OPT_RW,kvar_kernel_vma)
-#define PAGING_MAP2_RANGE(addr, phy, n) { \
- for(u64 i=0;i<(n);i++){ \
- paging_allocate_addr(kpages[0],((u64)(addr))+i,((u64)(phy))+i,PAGING_OPT_P|PAGING_OPT_RW,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)
+#define PAGE_ID_RMAP(addr, 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); \
+}}
+#define PAGE_MAP(addr) paging_allocate_addr(kpages[0],(u64)((addr)+kvar_kernel_vma),(u64)(addr),PAGING_OPT_P|PAGING_OPT_RW)
+#define PAGE_RMAP(addr, 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); \
+}}
+#define PAGE_MAP_PHY(addr,phy) paging_allocate_addr(kpages[0],(u64)((addr)+kvar_kernel_vma),(u64)(phy),PAGING_OPT_P|PAGING_OPT_RW)
+#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); \
}}
/// @brief All PAE table structures are allocated here
@@ -71,20 +77,7 @@ void paging_deallocate_pml4(u64* pml4);
void paging_deallocate_table(u64* table);
/**
- * Allocate table structure (pml4, pdp etc..)
- */
-u64* paging_allocate_table_local();
-
-/**
* Map virtual page associated to virt
* to the physical page associated with phy
- * Offset can be used to convert pml4_table address
- * content to virtual addresses (since physical addresses from the pml4_table are not
- * available after the trampoline into High-Half memory)
- */
-void paging_allocate_addr(u64* pml4_table,u64 virt, u64 phy, u16 options, u64 offset);
-
-/**
- * Get associated physical address
*/
-u64 paging_as_phy(u64* pml4_table, u64 virt); \ No newline at end of file
+void paging_allocate_addr(u64* pml4_table,u64 virt, u64 phy, u16 options);