Files
KatauOS/include/paging.h
T

53 lines
1.5 KiB
C

#ifndef PAGING_H
#define PAGING_H
#include "../include/stdio.h"
#include "../include/multiboot.h"
#include <stdint.h>
#define PAGE_OFFSET 0xC0000000
#define PAGE_SIZE 4096
#define PAGE_SHIFT 0x0C
#define PAGE_MASK ~(PAGE_SIZE - 1) /* 0xFFFFF000 */
#define PAGE_ALIGN(addr) (((addr) + (PAGE_SIZE - 1)) & PAGE_MASK)
#define PAGE_PRESENT 0x1
#define PAGE_RW 0x002 /* Read/Write */
#define PAGE_USER 0x004 /* User */
#define PAGE_NOALLOC 0x200 /* No Page Allocated (OS managed) */
#define GDT_BASE (0xFFFFFFFF - (PAGE_OFFSET - 1))
#define GET_PGDIR(address) ((uint32_t)((address) >> 22) & 0x3FF)
#define GET_PGTBL(address) ((uint32_t)((address) >> 12) & 0x3FF)
extern uint32_t kernel_page_directory[1024] __attribute__((aligned(4096)));
extern uint32_t kernel_page_table[1024] __attribute__((aligned(4096)));
extern uint32_t user_page_table[1024] __attribute__((aligned(4096)));
//paging.c
void grub_memory_map(unsigned int magic, struct multiboot_info* mbi);
void enablePaging();
void loadPageDirectory(uint32_t* page_directory);
void paging_init();
void test_paging();
//page_alloc.c
void init_allocator();
void* alloc_page();
void free_page(void* physaddr);
//page_tables.c
void *get_physaddr(void *virtualaddr);
void map_page(void* physaddr, void* virtualaddr, unsigned int flags);
void map_kernel_page(void* virtualaddr, unsigned int flags);
void* setup_user_process(void* user_code_phys, uint32_t* user_stack_top);
//heap.c
void heap_init();
void* heap_alloc(uint32_t size);
void heap_free(void* ptr);
#endif