From bc600ecc3bdf0f189861dfb840f70c2339a7a853 Mon Sep 17 00:00:00 2001 From: Kimplul Date: Fri, 24 May 2024 13:24:27 +0300 Subject: 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 --- src/main.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 src/main.c (limited to 'src/main.c') 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/** + * 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); +} -- cgit v1.3