55 lines
1.7 KiB
C
55 lines
1.7 KiB
C
|
|
#include "mm.h"
|
|
#include "boot/k_early_panic.h"
|
|
|
|
#define MM_MAX_MMAP_ENTRIES 64
|
|
|
|
pagedirectory_t page_directory __attribute__ ((aligned (4096)));
|
|
|
|
static mm_mem_range_t mm_mmap_entries[MM_MAX_MMAP_ENTRIES];
|
|
static int mm_mmap_num_entries = 0;
|
|
|
|
/**************************************************************************
|
|
* This function is run in segmented memory before paging is in effect. *
|
|
*************************************************************************/
|
|
void mm_record_mmap_entry(mb_mmap_t * mmap)
|
|
{
|
|
if (mm_mmap_num_entries < MM_MAX_MMAP_ENTRIES)
|
|
{
|
|
if (mmap->type == MB_MMAP_TYPE_RAM)
|
|
{
|
|
mm_mmap_entries[mm_mmap_num_entries].base = mmap->base;
|
|
mm_mmap_entries[mm_mmap_num_entries].length = mmap->length;
|
|
mm_mmap_num_entries++;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
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;
|
|
}
|
|
}
|