printing memory map, used pages, and free pages on boot
git-svn-id: svn://anubis/hos/trunk@58 5b3e749e-e535-0410-8002-a9bb6afbdfca
This commit is contained in:
parent
fd02ee26e1
commit
c21caccb1f
@ -1,15 +1,12 @@
|
|||||||
|
|
||||||
#include "lang/kio.h"
|
#include "lang/kio.h"
|
||||||
|
#include "mm/mm.h"
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
||||||
void k_main()
|
void k_main()
|
||||||
{
|
{
|
||||||
kprintf("Hi from k_main()!\n");
|
mm_print_memory_map();
|
||||||
kprintf("padded 8 hex: 0x%08x|\n", 0x42);
|
|
||||||
kprintf("padded -4 hex: 0x%-4x|\n", 0x42);
|
|
||||||
kprintf("padded 20 str: %20s|\n", "hi there");
|
|
||||||
kprintf("padded -20 str: %-20s|\n", "hi there");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
#include "stack.h"
|
#include "stack.h"
|
||||||
#include "boot/k_early_panic.h"
|
#include "boot/k_early_panic.h"
|
||||||
#include "lang/string.h"
|
#include "lang/string.h"
|
||||||
|
#include "lang/kio.h"
|
||||||
|
|
||||||
#define MM_MAX_MMAP_ENTRIES 64
|
#define MM_MAX_MMAP_ENTRIES 64
|
||||||
|
|
||||||
@ -14,6 +15,7 @@ static pagedirectory_entry_t * page_directory;
|
|||||||
static mm_mem_range_t mm_mmap_entries[MM_MAX_MMAP_ENTRIES];
|
static mm_mem_range_t mm_mmap_entries[MM_MAX_MMAP_ENTRIES];
|
||||||
static int mm_mmap_num_entries = 0;
|
static int mm_mmap_num_entries = 0;
|
||||||
static int mm_num_free_pages = 0;
|
static int mm_num_free_pages = 0;
|
||||||
|
static int mm_num_used_pages = 0;
|
||||||
static u32_t * mm_free_page_ptr = NULL;
|
static u32_t * mm_free_page_ptr = NULL;
|
||||||
gdtr_t mm_gdtr;
|
gdtr_t mm_gdtr;
|
||||||
static u64_t * mm_gdt;
|
static u64_t * mm_gdt;
|
||||||
@ -224,5 +226,23 @@ u32_t mm_page_alloc()
|
|||||||
u32_t page_address = (u32_t) mm_free_page_ptr;
|
u32_t page_address = (u32_t) mm_free_page_ptr;
|
||||||
mm_free_page_ptr = (u32_t *) *page_ptr;
|
mm_free_page_ptr = (u32_t *) *page_ptr;
|
||||||
mm_num_free_pages--;
|
mm_num_free_pages--;
|
||||||
|
mm_num_used_pages++;
|
||||||
return page_address;
|
return page_address;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void mm_print_memory_map()
|
||||||
|
{
|
||||||
|
kprintf("Bootloader provided memory map:\n");
|
||||||
|
kprintf(" Base Address Length\n");
|
||||||
|
for (int i = 0; i < mm_mmap_num_entries; i++)
|
||||||
|
{
|
||||||
|
kprintf(" 0x%016X 0x%016X (%l bytes / %l KB / %l MB)\n",
|
||||||
|
mm_mmap_entries[i].base,
|
||||||
|
mm_mmap_entries[i].length,
|
||||||
|
mm_mmap_entries[i].length,
|
||||||
|
mm_mmap_entries[i].length >> 10,
|
||||||
|
mm_mmap_entries[i].length >> 20);
|
||||||
|
}
|
||||||
|
kprintf("Used pages: %d\n", mm_num_used_pages);
|
||||||
|
kprintf("Free pages: %d\n", mm_num_free_pages);
|
||||||
|
}
|
||||||
|
@ -53,5 +53,7 @@ typedef struct
|
|||||||
| ( (((u64_t) base) & 0x00FFFFFFull) << 16) /* base 23:00 */ \
|
| ( (((u64_t) base) & 0x00FFFFFFull) << 16) /* base 23:00 */ \
|
||||||
| ( (((u64_t) limit) & 0x0000FFFFull) ) ) /* limit 15:00 */
|
| ( (((u64_t) limit) & 0x0000FFFFull) ) ) /* limit 15:00 */
|
||||||
|
|
||||||
|
void mm_print_memory_map();
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user