summaryrefslogtreecommitdiff
path: root/kc
diff options
context:
space:
mode:
authorAda Christine <adachristine18@gmail.com>2021-12-29 01:58:00 +0000
committerAda Christine <adachristine18@gmail.com>2021-12-29 01:58:00 +0000
commitf3c640714ab30ab413046b2608defc0c5dd9c91d (patch)
treef7e6fa42ba9e85effedf1d406795e73b9af55d61 /kc
parentce3114115c1553ec645c6344020ff2608b904ffa (diff)
add memory_init() again
Diffstat (limited to 'kc')
-rw-r--r--kc/core/kc_main.c3
-rw-r--r--kc/core/memory.c6
-rw-r--r--kc/core/memory.h2
3 files changed, 10 insertions, 1 deletions
diff --git a/kc/core/kc_main.c b/kc/core/kc_main.c
index 4dd6742..814b0e0 100644
--- a/kc/core/kc_main.c
+++ b/kc/core/kc_main.c
@@ -10,12 +10,13 @@
#include <stddef.h>
#include <stdint.h>
-unsigned long kc_main(void *data)
+unsigned long kc_main(struct kc_boot_data *data)
{
(void)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);
halt();
}
diff --git a/kc/core/memory.c b/kc/core/memory.c
index 0e989fd..dda1fb6 100644
--- a/kc/core/memory.c
+++ b/kc/core/memory.c
@@ -13,6 +13,7 @@
* 1. kernel virtual space is 2GiB in size on 2GiB alignment.
* 2. mappings begin at +0x7fc00000. this mapping space is sparse and its
* own mapping tables begin at +0x7fffe000.
+ * 3. There is at least 64KiB of mapped pages following the kc_image_end symbol.
*/
#define kpm1_index(v) (((uint64_t)v >> pte_index_bits(1)) & 0x7ffff)
@@ -325,6 +326,11 @@ static void *page_map_at(void *vaddr,
return (char *)vaddr + offset;
}
+void memory_init(struct memory_range *ranges, size_t count)
+{
+ init_create_page_array(ranges, count);
+}
+
void *page_map(phys_addr_t paddr, enum page_map_flags flags)
{
return page_map_at(get_virtual_page(flags), paddr, flags);
diff --git a/kc/core/memory.h b/kc/core/memory.h
index 847ac8d..c882d6a 100644
--- a/kc/core/memory.h
+++ b/kc/core/memory.h
@@ -20,6 +20,8 @@ enum page_map_flags
SIZE_MASK = 0xc,
};
+void memory_init(struct memory_range *ranges, size_t count);
+
void *memcpy(void *dest, const void *src, size_t size);
void *memmove(void *dest, const void *src, size_t size);
void *memset(void *dest, int val, size_t size);