2026-06-14 00:34:11 -05:00
|
|
|
#ifndef KMM_H
|
|
|
|
|
#define KMM_H
|
|
|
|
|
|
|
|
|
|
#include <stdint.h>
|
|
|
|
|
|
2026-07-08 19:11:39 -05:00
|
|
|
#define PAGE_PRESENT (1 << 0)
|
|
|
|
|
#define PAGE_WRITABLE (1 << 1)
|
|
|
|
|
#define PAGE_USER (1 << 2)
|
|
|
|
|
#define PAGE_COW (1 << 9)
|
2026-07-16 23:19:54 -05:00
|
|
|
#define PAGE_MMIO (1 << 10)
|
2026-07-08 19:11:39 -05:00
|
|
|
|
|
|
|
|
#define TEMP_KERNPD_VADDR 0xDFF90000
|
|
|
|
|
#define TEMP_TASKPD_VADDR 0xDFFA0000
|
|
|
|
|
#define TEMP_PT_SRC 0xDFFB0000
|
|
|
|
|
#define TEMP_PT_DST 0xDFFC0000
|
2026-06-16 18:44:31 -05:00
|
|
|
|
2026-06-24 16:47:22 -05:00
|
|
|
#define PAGE_SIZE 4096
|
|
|
|
|
|
2026-07-08 19:11:39 -05:00
|
|
|
#define MAX_RAM 0xFFFFFFFF // 4GB
|
|
|
|
|
#define BITMAP_SIZE ((MAX_RAM / PAGE_SIZE) / 8)
|
|
|
|
|
|
|
|
|
|
#define CUR_PAGE_DIRECTORY 0xFFFFF000
|
|
|
|
|
#define CUR_PAGE_TABLES 0xFFC00000
|
|
|
|
|
|
2026-06-14 00:34:11 -05:00
|
|
|
typedef struct __attribute__((packed)) {
|
|
|
|
|
uint32_t addr;
|
|
|
|
|
} mem_page_t;
|
|
|
|
|
|
2026-06-15 18:09:04 -04:00
|
|
|
void init_pmm(void* mmap_base, uint32_t mmap_limit);
|
|
|
|
|
void init_page_tables();
|
2026-06-16 18:44:31 -05:00
|
|
|
|
|
|
|
|
void* p_alloc_frame();
|
2026-06-15 23:35:01 -05:00
|
|
|
|
|
|
|
|
uint32_t total_free_memory();
|
2026-06-14 18:53:54 -05:00
|
|
|
|
2026-07-08 19:11:39 -05:00
|
|
|
void* create_new_pd();
|
|
|
|
|
void* clone_current_pd();
|
2026-07-08 21:15:30 -05:00
|
|
|
void clear_current_pd();
|
2026-07-08 19:11:39 -05:00
|
|
|
|
|
|
|
|
int is_cow(uint32_t vaddr);
|
2026-06-16 10:04:49 -04:00
|
|
|
|
2026-06-16 18:44:31 -05:00
|
|
|
void map_page(uint32_t vaddr, uint32_t paddr, uint32_t flags);
|
2026-07-08 19:11:39 -05:00
|
|
|
void unmap_page(uint32_t vaddr);
|
2026-06-16 18:44:31 -05:00
|
|
|
|
2026-06-30 19:26:31 -05:00
|
|
|
void load_pd(void* paddr);
|
|
|
|
|
|
|
|
|
|
void flush_tlb();
|
|
|
|
|
void disable_pae();
|
|
|
|
|
|
2026-06-14 18:53:54 -05:00
|
|
|
#endif
|