diff options
-rw-r--r-- | kernel/include/common.h | 1 | ||||
-rw-r--r-- | kernel/mm/physical_mm/physical_mm.c | 13 | ||||
-rw-r--r-- | kernel/mm/virtual_mm/virtual_mm.c | 19 |
3 files changed, 12 insertions, 21 deletions
diff --git a/kernel/include/common.h b/kernel/include/common.h index 7f7f50f..7c5270a 100644 --- a/kernel/include/common.h +++ b/kernel/include/common.h @@ -21,6 +21,7 @@ #define ALWAYS_INLINE __attribute__((always_inline)) inline #define PACKED __attribute__((packed)) +#define ALIGNED(x) __attribute__((aligned(x))) #define KiB 1024 #define MiB (KiB * KiB) diff --git a/kernel/mm/physical_mm/physical_mm.c b/kernel/mm/physical_mm/physical_mm.c index e93593d..81656ed 100644 --- a/kernel/mm/physical_mm/physical_mm.c +++ b/kernel/mm/physical_mm/physical_mm.c @@ -22,17 +22,14 @@ /* TODO: Stack based allocation? */ -#include <stdatomic.h> -#include <stdbool.h> -#include <stdint.h> - +#include <kernel/halt.h> +#include <kernel/spinlock.h> #include <libk/stdio.h> - #include <mm/memory_map.h> #include <mm/physical_mm.h> - -#include <kernel/halt.h> -#include <kernel/spinlock.h> +#include <stdatomic.h> +#include <stdbool.h> +#include <stdint.h> extern uint32_t kernel_start; extern uint32_t kernel_end; diff --git a/kernel/mm/virtual_mm/virtual_mm.c b/kernel/mm/virtual_mm/virtual_mm.c index 4bdb4ab..3043686 100644 --- a/kernel/mm/virtual_mm/virtual_mm.c +++ b/kernel/mm/virtual_mm/virtual_mm.c @@ -16,20 +16,22 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -#include <stdint.h> - #include <kernel/halt.h> - #include <libk/stdio.h> - #include <mm/physical_mm.h> #include <mm/virtual_mm.h> +#include <stdint.h> extern uint32_t kernel_start; extern uint32_t kernel_end; uint32_t *current_page_directory = 0; +/* Kernel's page directory */ +uint32_t page_directory[1024] ALIGNED(4096); +/* Page table for the first 4 MiB */ +uint32_t table[1024] ALIGNED(4096); + ALWAYS_INLINE void virtual_mm_load_page_directory(uint32_t *page_directory) { @@ -59,10 +61,6 @@ virtual_mm_enable_paging(void) void virtual_mm_initialize(void) { - uint32_t *table = physical_mm_allocate_block(); - if (!table) - ASSERT_NOT_REACHED(); - for (uint32_t i = 0; i < 1024; i++) table[i] = 0; @@ -71,11 +69,6 @@ virtual_mm_initialize(void) for (uint32_t i = 0; i < 1024; i++) table[i] = PTE_FRAME(i) | PTE_PRESENT(1) | PTE_WRITABLE(1); - uint32_t *page_directory = physical_mm_allocate_block(); - if (!page_directory) - ASSERT_NOT_REACHED(); - printk("debug", "Page directory is at: 0x%x", page_directory); - for (uint32_t i = 0; i < 1024; i++) page_directory[i] = 0; |