1
0

Properly detect memory using atags and add it to the memory-management subsystem

This commit is contained in:
2012-09-25 22:44:19 -04:00
parent d6e3899fc1
commit afba079256
8 changed files with 171 additions and 24 deletions

View File

@ -1,3 +1,4 @@
#include <atags.h>
#include <mmu.h>
#include <mm.h>
#include <print.h>
@ -52,7 +53,8 @@ void test_memory() {
}
int main(void) {
char *lower;
char *lower, *upper;
struct atag *atags;
//setup MMU
mmu_reinit();
@ -61,12 +63,17 @@ int main(void) {
//setup memory
mm_init();
mm_add_free_region((void*)0x60000000, (void*)0x7FFFFFFF);
mm_add_free_region((void*)0x80000000, (void*)0x800FFFFF);
lower = (char*) &kernel_end_virt;
if ((unsigned int)lower % MM_PAGE_SIZE != 0)
lower += (MM_PAGE_SIZE - ((unsigned int)lower % MM_PAGE_SIZE));
mm_add_free_region((void*)lower, (void*)0x9FFFFFFF); //subtract the memory used by the kernel
if (atags_first_mem_region(&atags)) {
print("Error: atags must contain at least one memory region\n");
return -1;
}
do {
lower = (char *)atags->data.mem.start;
upper = lower + atags->data.mem.size - 1;
declare_memory_region(lower, upper);
} while (!atags_next_mem_region(&atags));
test_memory();