diff options
| author | Kimplul <kimi.h.kuparinen@gmail.com> | 2024-05-24 13:24:27 +0300 |
|---|---|---|
| committer | Kimplul <kimi.h.kuparinen@gmail.com> | 2024-05-24 18:13:43 +0300 |
| commit | bc600ecc3bdf0f189861dfb840f70c2339a7a853 (patch) | |
| tree | d9840b1dc1b865442a028c03ad7109ac67894f6e /src/main.c | |
| parent | 6a7073e5f262db9a4578ff00b5b28e34335564ce (diff) | |
| download | kmi-bc600ecc3bdf0f189861dfb840f70c2339a7a853.tar.gz kmi-bc600ecc3bdf0f189861dfb840f70c2339a7a853.zip | |
rename common to src
+ I keep starting to type src and wondering why autocomplete won't work,
I guess src is just uncounciously a better name
Diffstat (limited to 'src/main.c')
| -rw-r--r-- | src/main.c | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..4647fed --- /dev/null +++ b/src/main.c @@ -0,0 +1,63 @@ +/* SPDX-License-Identifier: copyleft-next-0.3.1 */ +/* Copyright 2021 - 2022, Kim Kuparinen < kimi.h.kuparinen@gmail.com > */ + +/** + * @file main.c + * Entry point for actual kernel setup. + */ + +#include <kmi/mem_nodes.h> +#include <kmi/initrd.h> +#include <kmi/timer.h> +#include <kmi/attrs.h> +#include <kmi/proc.h> +#include <kmi/debug.h> +#include <kmi/vmem.h> +#include <kmi/irq.h> +#include <arch/arch.h> +#include <arch/proc.h> +#include <arch/smp.h> +#include <libfdt.h> + +/** + * Boot entry of kernel actual. + * + * Sets up all kernel subsystems and jumps into \c init program, does not + * return. + * + * @param fdt Global FDT pointer in physical memory. + * @param ram_base RAM base. + * @return Should not. + */ +void __main main(void *fdt, uintptr_t ram_base) +{ + set_ram_base(ram_base); + + /* convert physical address to virtual address */ + fdt = __va(fdt); + + /* dbg uses direct mapping at this point */ + init_dbg(fdt); + setup_dmap_dbg(); + dbg_fdt(fdt); + + setup_arch(fdt); + + init_pmem(fdt); + /* setup temporary virtual memory */ + struct vmem *b = init_vmem(fdt); + + /* start up debugging in kernel IO */ + setup_io_dbg(b); + + init_irq(fdt); + init_timer(fdt); + init_proc(fdt); + + /* try to bring up other cores on system */ + smp_bringup(b, fdt); + + /* start running init program */ + void *initrd = (void *)get_initrdbase(fdt); + run_init(cur_tcb(), fdt, initrd); +} |
