diff options
| author | Loic Guegan <manzerbredes@mailbox.org> | 2021-04-29 15:01:54 +0200 |
|---|---|---|
| committer | Loic Guegan <manzerbredes@mailbox.org> | 2021-04-29 15:01:54 +0200 |
| commit | f37f5d86b74870e878f69bd41a3c70a59c4ce1c1 (patch) | |
| tree | 65620f0504fea111ba870457f32bc072dc27fe7a /src/core/paging.hpp | |
| parent | fde8a1ab65d5e33d90123a3aaa9b5c15e249689f (diff) | |
Debug memory
Diffstat (limited to 'src/core/paging.hpp')
| -rw-r--r-- | src/core/paging.hpp | 51 |
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); |
