/* * ELSA OS - Virtual Memory Manager Header * Temporal Epistemic Separation Kernel v0.4 * 2026-05-16 */ #ifndef ELSA_VMM_H #define ELSA_VMM_H #include #include #include /* ============================================================ * PAGE CONSTANTS * ============================================================ */ #define PAGE_SIZE 0x1000ULL /* 4KB */ #define PAGE_SIZE_2MB 0x200000ULL /* 2MB */ #define PAGE_SIZE_1GB 0x40000000ULL /* 1GB */ #define PAGE_FLAG_PRESENT 0x001ULL #define PAGE_FLAG_WRITE 0x002ULL #define PAGE_FLAG_USER 0x004ULL #define PAGE_FLAG_HUGE 0x080ULL #define PAGE_FLAG_GLOBAL 0x100ULL #define PAGE_FLAG_NX (1ULL << 63) #define PAGE_ADDR_MASK 0x000FFFFFFFFFF000ULL #define PAGE_ADDR_MASK_2MB 0x000FFFFFFFE00000ULL #define HIGHER_HALF_BASE 0xFFFF800000000000ULL #define USER_SPACE_BASE 0x0000000000000000ULL #define USER_SPACE_SIZE 0x0000800000000000ULL /* 128TB user space */ /* ============================================================ * PAGE TABLE STRUCTURES (x86_64 4-level paging) * ============================================================ */ typedef struct { uint64_t entries[512]; } kernel_pt_t; typedef struct { uint64_t entries[512]; } kernel_pd_t; typedef struct { uint64_t entries[512]; } kernel_pdp_t; typedef struct { uint64_t entries[512]; } kernel_page_table_t; /* ============================================================ * ADDRESS SPACE * ============================================================ */ typedef int pid_t; typedef struct { kernel_page_table_t *pml4; uintptr_t base_virt; size_t size; pid_t pid; int refcount; } address_space_t; /* ============================================================ * BITMAP * ============================================================ */ typedef struct { uint8_t *bits; size_t num_bits; } bitmap_t; /* ============================================================ * VMM API * ============================================================ */ /* Initialization */ int vmm_init(uintptr_t phys_mem_start, size_t phys_mem_size, uintptr_t kernel_virt_base); /* Page mapping */ int vmm_map_page(kernel_page_table_t *pml4, uintptr_t virt, uintptr_t phys, uint64_t flags); int vmm_unmap_page(kernel_page_table_t *pml4, uintptr_t virt); /* Address space management */ address_space_t *vmm_create_address_space(void); int vmm_switch_address_space(address_space_t *as); void vmm_destroy_address_space(address_space_t *as); /* Copy-on-write */ int vmm_copy_on_write(address_space_t *src, address_space_t *dst, uintptr_t virt, size_t size); /* Page fault handler */ void vmm_page_fault_handler(uintptr_t fault_addr, uint64_t error_code); /* Kernel allocator */ void *vmm_kernel_alloc(size_t size); void vmm_kernel_free(void *ptr, size_t size); #endif /* ELSA_VMM_H */