Voxia OS v0.0.1
Hobby Project Operating System Targeting x86-64
Loading...
Searching...
No Matches
paging.h
Go to the documentation of this file.
1#ifndef __HAL__CPU__PAGING_H__
2#define __HAL__CPU__PAGING_H__
4#include <type.h>
5
6#define PAGE_SIZE 0x1000
7
8#define GB 0x40000000UL
9#define MB 0x100000ULL // fix: MB harusnya 1MB = 0x100000, bukan 0x1000
10
11typedef volatile uintptr_t* page_t;
12
19
20typedef struct reserve_map reserve_map;
28
30
31#define VMM_PAGE paging_create_page_directory()
32
33// Semua flag pakai ULL — cegah overflow dan sign-extension
34#define PAGE_PRESENT (1ULL << 0)
35#define PAGE_WRITABLE (1ULL << 1)
36#define PAGE_USER (1ULL << 2)
37#define PAGE_WRITE_THROUGH (1ULL << 3)
38#define PAGE_CACHE_DISABLE (1ULL << 4)
39#define PAGE_ACCESSED (1ULL << 5)
40#define PAGE_DIRTY (1ULL << 6)
41#define PAGE_HUGE (1ULL << 7)
42#define PAGE_GLOBAL (1ULL << 8)
43#define PAGE_NO_EXECUTE (1ULL << 63)
44
45// Mask untuk strip flag dari physical address
46#define PAGE_PHYS_MASK 0x000FFFFFFFFFF000ULL
47// ↑ mask out bit 63 (NX) dan bit 0-11 (flags)
48// Mask untuk strip reserved bits dan cache bits dari intermediate entries
49#define PAGE_INTER_STRIP \
50 (0xFFFULL << 52 | (1ULL << 7) | (1ULL << 4) | (1ULL << 3))
51
52void vxMmap(page_t page_dir, uint64_t virt, uint64_t phys, uint64_t flags);
53void paging_reload(page_t pml4);
55void paging_unmap_page(page_t page_dir, uint64_t virt);
56void paging_unmap_fill(page_t page_dir, uint64_t virt, size_t size);
57void paging_setup(page_t pml4);
58
59void vxMultipleMmap(page_t page_dir, uint64_t virt, uint64_t phys,
63void paging_debug(page_t pml4, uint64_t virt);
64
66
67#endif // __HAL__CPU__PAGING_H__
uint16_t flags
Definition thread.h:5
typedef __attribute__
Definition msi.c:47
page_t paging_get_highest_page_map(void)
Definition paging.c:463
page_t paging_create_page_directory()
Definition paging.c:36
void paging_unmap_page(page_t page_dir, uint64_t virt)
Definition paging.c:360
void vxMmap(page_t page_dir, uint64_t virt, uint64_t phys, uint64_t flags)
Definition paging.c:223
void paging_reload(page_t pml4)
Definition paging.c:457
void paging_debug(page_t pml4, uint64_t virt)
Definition paging.c:117
void paging_unmap_fill(page_t page_dir, uint64_t virt, size_t size)
Definition paging.c:451
void paging_setup(page_t pml4)
Definition paging.c:197
volatile uintptr_t * page_t
Definition paging.h:11
void vxMultipleMmap(page_t page_dir, uint64_t virt, uint64_t phys, uint64_t size, uint64_t flags)
Definition paging.c:340
void paging_add_dma_mapping(uintptr_t phys, uintptr_t virt, uint64_t size)
uint64_t vaddr_to_paddr(page_t pml4, uint64_t vaddr)
Definition paging.c:465
uintptr_t virt
Definition paging.h:15
uintptr_t phys
Definition paging.h:14
volatile void * next
Definition paging.h:17
reserve_map * next
Definition paging.h:26
uintptr_t v_addr
Definition paging.h:23
uintptr_t p_addr
Definition paging.h:22
int flags
Definition paging.h:25
size_t count
Definition paging.h:24
unsigned long uintptr_t
Definition type.h:73
unsigned long uint64_t
Definition type.h:25
size_t size
Definition vnode.h:3