Properly detect memory using atags and add it to the memory-management subsystem
This commit is contained in:
@ -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();
|
||||
|
||||
|
Reference in New Issue
Block a user