diff options
-rw-r--r-- | kernel/include/boot/gdt.h | 2 | ||||
-rw-r--r-- | kernel/include/drivers/serial.h | 4 | ||||
-rw-r--r-- | kernel/include/drivers/vga_text_buffer.h | 4 | ||||
-rw-r--r-- | kernel/include/kernel/io.h | 4 | ||||
-rw-r--r-- | kernel/include/libk/stdio.h | 2 | ||||
-rw-r--r-- | kernel/include/libk/string.h | 3 | ||||
-rw-r--r-- | kernel/include/mm/memory_map.h | 2 | ||||
-rw-r--r-- | kernel/include/mm/virtual_mm.h | 52 |
8 files changed, 49 insertions, 24 deletions
diff --git a/kernel/include/boot/gdt.h b/kernel/include/boot/gdt.h index 08710f2..e79ca48 100644 --- a/kernel/include/boot/gdt.h +++ b/kernel/include/boot/gdt.h @@ -102,7 +102,7 @@ typedef struct { GDT_entry_t *ptr; /* Address of GDT */ } PACKED GDT_descriptor_t; -extern void _GDT_flush(GDT_descriptor_t *); +extern void _GDT_flush(GDT_descriptor_t *GDT_descriptor); void GDT_load(void); #endif diff --git a/kernel/include/drivers/serial.h b/kernel/include/drivers/serial.h index 57f7aa2..48ed75c 100644 --- a/kernel/include/drivers/serial.h +++ b/kernel/include/drivers/serial.h @@ -24,7 +24,7 @@ #define PORT 0x3f8 // COM1 bool serial_initialize(void); -void serial_write_char(const char); -void serial_write_string(const char *); +void serial_write_char(const char chr); +void serial_write_string(const char *string); #endif diff --git a/kernel/include/drivers/vga_text_buffer.h b/kernel/include/drivers/vga_text_buffer.h index 74b77b9..4b0da93 100644 --- a/kernel/include/drivers/vga_text_buffer.h +++ b/kernel/include/drivers/vga_text_buffer.h @@ -67,7 +67,7 @@ bool vga_text_buffer_is_initialized(void); void vga_text_buffer_initialize(void); void vga_text_buffer_write_char(const char); -void vga_text_buffer_write_string(const char *); -void vga_text_buffer_printf(const char *, ...); +void vga_text_buffer_write_string(const char *string); +void vga_text_buffer_printf(const char *string, ...); #endif diff --git a/kernel/include/kernel/io.h b/kernel/include/kernel/io.h index 952784d..f58bd2d 100644 --- a/kernel/include/kernel/io.h +++ b/kernel/include/kernel/io.h @@ -21,7 +21,7 @@ #include <stdint.h> -uint8_t inb(uint16_t); -void outb(uint16_t, uint8_t); +uint8_t inb(uint16_t port); +void outb(uint16_t port, uint8_t val); #endif diff --git a/kernel/include/libk/stdio.h b/kernel/include/libk/stdio.h index 8caebed..2f33980 100644 --- a/kernel/include/libk/stdio.h +++ b/kernel/include/libk/stdio.h @@ -36,6 +36,6 @@ int snprintf(char *str, size_t len, const char *fmt, ...); int vsprintf(char *str, const char *fmt, va_list ap); int vsnprintf(char *str, size_t len, const char *fmt, va_list ap); -void printk(const char *, const char *, ...); +void printk(const char *from, const char *msg, ...); #endif diff --git a/kernel/include/libk/string.h b/kernel/include/libk/string.h index 65de99e..edb4a06 100644 --- a/kernel/include/libk/string.h +++ b/kernel/include/libk/string.h @@ -21,7 +21,6 @@ #include <stddef.h> -size_t strlen(const char *); -char *strcat(char *, const char *); +size_t strlen(const char *str); #endif diff --git a/kernel/include/mm/memory_map.h b/kernel/include/mm/memory_map.h index 90528c4..428c99f 100644 --- a/kernel/include/mm/memory_map.h +++ b/kernel/include/mm/memory_map.h @@ -31,7 +31,7 @@ typedef struct { multiboot_memory_map_t *region_list[MAX_FREE_REGIONS]; } free_memory_regions_t; -void memory_map_load(multiboot_info_t *); +void memory_map_load(multiboot_info_t *mmap); free_memory_regions_t *memory_map_get_free_regions(void); #endif diff --git a/kernel/include/mm/virtual_mm.h b/kernel/include/mm/virtual_mm.h index fce10bc..fa7f505 100644 --- a/kernel/include/mm/virtual_mm.h +++ b/kernel/include/mm/virtual_mm.h @@ -26,6 +26,9 @@ #define PAGE_DIRECTORY_SIZE 1024 #define PAGE_TABLE_SIZE 1024 +#define PAGE_DIRECTORY_INDEX(virtual_address) ((virtual_address >> 22) & 0x3ff) +#define PAGE_TABLE_INDEX(virtual_address) ((virtual_address >> 12) & 0x3ff) + #define PDE_PRESENT 1 #define PDE_WRITABLE (1 << 1) #define PDE_USER (1 << 2) @@ -41,24 +44,47 @@ /* Page table address */ #define PDE_FRAME(x) (x << 11) -#define PTE_PRESENT 1 -#define PTE_WRITABLE (1 << 1) -#define PTE_USER (1 << 2) -#define PTE_WRITETHROUGH (1 << 3) -#define PTE_CACHE_DISABLE (1 << 4) -#define PTE_ACCESSED (1 << 5) -#define PTE_DIRTY (1 << 6) -#define PTE_PAT (1 << 7) -#define PTE_GLOBAL (1 << 8) +#define SET_PTE_PRESENT(x) x +#define SET_PTE_WRITABLE(x) (x << 1) +#define SET_PTE_USER(x) (x << 2) +#define SET_PTE_WRITETHROUGH(x) (x << 3) +#define SET_PTE_CACHE_DISABLE(x) (x << 4) +#define SET_PTE_ACCESSED(x) (x << 5) +#define SET_PTE_DIRTY(x) (x << 6) +#define SET_PTE_PAT(x) (x << 7) +#define SET_PTE_GLOBAL(x) (x << 8) /* NOTE: Unused by the CPU, free to be used by us! */ -#define PTE_UNUSED(x) (x << 9) +#define SET_PTE_UNUSED(x) (x << 9) /* MAX: 0xFFFFF000 */ -#define PTE_FRAME(x) (x << 11) +#define SET_PTE_FRAME(x) (x << 11) + +#define GET_PTE_FRAME(x) (*x >> 11) #define ADD_ATTRIB(entry, attribute) (*entry |= (attribute)) -#define SET_FRAME(entry, frame) \ - (ADD_ATTRIB(entry, PTE_FRAME((uint32_t) frame))) +/* + * Given a page table entry, it sets the frame to a newly allocated address, + * and sets the present bit to false. + */ bool virtual_mm_allocate_page(uint32_t *pt_entry); +/* + * Given a page table entry, it sets the entry to 0 (therefore zero-ing the + * frame and present bit). + */ +bool virtual_mm_free_page(uint32_t *pt_entry); + +/* + * Given a page table and virtual address, it returns a pointer to the page + * table entry referenced by the virtual address. + */ +uint32_t *virtual_mm_lookup_table(uint32_t *page_table, uint32_t virtual_addr); + +/* + * Given a page directory and virtual address, it returns a pointer to the page + * directory entry referenced by the virtual address. + */ +uint32_t *virtual_mm_lookup_directory(uint32_t *page_directory, + uint32_t virtual_addr); + #endif |