aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/include/boot/gdt.h2
-rw-r--r--kernel/include/drivers/serial.h4
-rw-r--r--kernel/include/drivers/vga_text_buffer.h4
-rw-r--r--kernel/include/kernel/io.h4
-rw-r--r--kernel/include/libk/stdio.h2
-rw-r--r--kernel/include/libk/string.h3
-rw-r--r--kernel/include/mm/memory_map.h2
-rw-r--r--kernel/include/mm/virtual_mm.h52
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