From 2faa2cc8d60f3d3dc9d75841a3dc7e739652e021 Mon Sep 17 00:00:00 2001 From: josh Date: Wed, 1 Jul 2009 17:34:52 +0000 Subject: [PATCH] added mm_bootstrap() skeleton function git-svn-id: svn://anubis/hos/trunk@31 5b3e749e-e535-0410-8002-a9bb6afbdfca --- kernel/boot/k_bootstrap.c | 7 +++++++ kernel/mm/mm.c | 24 ++++++++++++++++++++++++ kernel/mm/mm.h | 1 + 3 files changed, 32 insertions(+) diff --git a/kernel/boot/k_bootstrap.c b/kernel/boot/k_bootstrap.c index 9c7ad6c..81a55d6 100644 --- a/kernel/boot/k_bootstrap.c +++ b/kernel/boot/k_bootstrap.c @@ -40,5 +40,12 @@ u32_t k_bootstrap(mb_info_t * mb_info, u32_t mb_magic) DEBUG_LETTER(3, 'd'); + /* + * These functions could destroy the multiboot information block and + * associated structures, so we must be finished reading those structures + * before calling them. + */ + mm_bootstrap(); + return 0; } diff --git a/kernel/mm/mm.c b/kernel/mm/mm.c index 3f02ccb..2b4e339 100644 --- a/kernel/mm/mm.c +++ b/kernel/mm/mm.c @@ -28,3 +28,27 @@ void mm_record_mmap_entry(mb_mmap_t * mmap) k_early_panic("Too many mmap_entries!"); } } + +/************************************************************************** + * This function is run in segmented memory before paging is in effect. * + * It is run after the bootloader information has been read, so we can * + * overwrite that memory now. * + *************************************************************************/ +void mm_bootstrap() +{ + if (mm_mmap_num_entries < 1) + { + k_early_panic("No mmap entries read from bootloader!"); + } + + int mmap_idx, i; + for (mmap_idx = 0; mmap_idx < mm_mmap_num_entries; mmap_idx++) + { + } + + /* Clear the page directory */ + for (i = 0; i < sizeof(page_directory) / sizeof(page_directory[0]); i++) + { + page_directory[i] = 0; + } +} diff --git a/kernel/mm/mm.h b/kernel/mm/mm.h index df38d94..5d9cd9f 100644 --- a/kernel/mm/mm.h +++ b/kernel/mm/mm.h @@ -20,6 +20,7 @@ typedef struct } mm_mem_range_t; void mm_record_mmap_entry(mb_mmap_t * mmap); +void mm_bootstrap(); #endif