diff options
| author | Ada Christine <adachristine18@gmail.com> | 2021-12-29 01:58:00 +0000 |
|---|---|---|
| committer | Ada Christine <adachristine18@gmail.com> | 2021-12-29 01:58:00 +0000 |
| commit | f3c640714ab30ab413046b2608defc0c5dd9c91d (patch) | |
| tree | f7e6fa42ba9e85effedf1d406795e73b9af55d61 /kc | |
| parent | ce3114115c1553ec645c6344020ff2608b904ffa (diff) | |
add memory_init() again
Diffstat (limited to 'kc')
| -rw-r--r-- | kc/core/kc_main.c | 3 | ||||
| -rw-r--r-- | kc/core/memory.c | 6 | ||||
| -rw-r--r-- | kc/core/memory.h | 2 |
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); |
