summaryrefslogtreecommitdiff
path: root/kc
diff options
context:
space:
mode:
authorAda Christine <adachristine18@gmail.com>2021-12-30 11:13:24 +0000
committerAda Christine <adachristine18@gmail.com>2021-12-30 11:13:24 +0000
commit5b1460d6516940d285c554d6178ab52abf04312d (patch)
tree4647b5f4c82cefe03cbc30043bf68c9911268135 /kc
parentc3c445fa6fc7d99ffbdd1ed8842bbe4a3b74e61e (diff)
pass the whole boot data struct to memory_init for my sanity
Diffstat (limited to 'kc')
-rw-r--r--kc/core/kc_main.c2
-rw-r--r--kc/core/memory.c19
-rw-r--r--kc/core/memory.h3
3 files changed, 14 insertions, 10 deletions
diff --git a/kc/core/kc_main.c b/kc/core/kc_main.c
index 814b0e0..d8ccc11 100644
--- a/kc/core/kc_main.c
+++ b/kc/core/kc_main.c
@@ -16,7 +16,7 @@ unsigned long kc_main(struct kc_boot_data *data)
cpu_init();
serial_init();
kputs("<hacker voice> i'm in 3333\r\n");
- memory_init(data->phys_memory_map.base, data->phys_memory_map.entries);
+ memory_init(data);
halt();
}
diff --git a/kc/core/memory.c b/kc/core/memory.c
index 920fc87..1e405bc 100644
--- a/kc/core/memory.c
+++ b/kc/core/memory.c
@@ -4,8 +4,6 @@
#include <stdint.h>
-#include <kernel/entry.h>
-#include <kernel/memory/paging.h>
#include <kernel/component.h>
/* kernel virtual space guarantees
@@ -92,7 +90,7 @@ static struct memory_range init_grab_pages(struct memory_range *ranges,
{
struct memory_range request = {SYSTEM_MEMORY,
0,
- align_next(size, PAGE_SIZE)};
+ align_next(size, page_size(1))};
for (int i = 0; i < count; i++)
{
@@ -349,15 +347,15 @@ static void *page_map_at(void *vaddr,
#define KERNEL_OBJECT_SPACE_EXTENT 0x1000000 // 16MiB for kernel object space?
-void memory_init(struct memory_range *ranges, size_t count)
+void memory_init(struct kc_boot_data *boot_data)
{
- init_create_page_array(ranges, count);
+ init_create_page_array(boot_data->phys_memory_map.base,
+ boot_data->phys_memory_map.entries);
core_code_space = init_system_space(&kc_text_begin, &kc_text_end);
core_static_space = init_system_space(&kc_data_begin, &kc_data_end);
- core_object_space = init_anonymous_space(&kc_data_end,
- (void *)page_align(&kc_data_end + KERNEL_OBJECT_SPACE_EXTENT,
- 2));
+ core_object_space = init_anonymous_space(boot_data->object_space.base,
+ (void *)page_align(&kc_data_end + KERNEL_OBJECT_SPACE_EXTENT, 2));
root_memory_space = &core_code_space;
@@ -367,6 +365,11 @@ void memory_init(struct memory_range *ranges, size_t count)
core_static_space.next = &core_object_space;
core_object_space.prev = &core_static_space;
core_object_space.next = NULL;
+
+ // XXX: testing testing 123
+
+ char *test = (char *)core_object_space.head - page_size(1);
+ *test = 'a';
}
void *page_map(phys_addr_t paddr, enum page_map_flags flags)
diff --git a/kc/core/memory.h b/kc/core/memory.h
index c882d6a..a4488cf 100644
--- a/kc/core/memory.h
+++ b/kc/core/memory.h
@@ -1,5 +1,6 @@
#pragma once
+#include <kernel/entry.h>
#include <kernel/memory/paging.h>
#include <kernel/memory/range.h>
@@ -20,7 +21,7 @@ enum page_map_flags
SIZE_MASK = 0xc,
};
-void memory_init(struct memory_range *ranges, size_t count);
+void memory_init(struct kc_boot_data *boot_data);
void *memcpy(void *dest, const void *src, size_t size);
void *memmove(void *dest, const void *src, size_t size);