summaryrefslogtreecommitdiff
path: root/arch/x86/machine/boot.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/machine/boot.c')
-rw-r--r--arch/x86/machine/boot.c112
1 files changed, 66 insertions, 46 deletions
diff --git a/arch/x86/machine/boot.c b/arch/x86/machine/boot.c
index 571b04f6..25e92ff6 100644
--- a/arch/x86/machine/boot.c
+++ b/arch/x86/machine/boot.c
@@ -43,27 +43,19 @@
*/
#include <stdalign.h>
-#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <string.h>
#include <kern/arg.h>
-#include <kern/console.h>
#include <kern/init.h>
-#include <kern/intr.h>
#include <kern/kmem.h>
#include <kern/kernel.h>
#include <kern/log.h>
#include <kern/macros.h>
#include <kern/panic.h>
-#include <kern/percpu.h>
-#include <kern/shutdown.h>
-#include <kern/sleepq.h>
-#include <kern/sref.h>
-#include <kern/syscnt.h>
#include <kern/thread.h>
-#include <kern/turnstile.h>
+#include <machine/acpi.h>
#include <machine/atcons.h>
#include <machine/biosmem.h>
#include <machine/boot.h>
@@ -74,10 +66,8 @@
#include <machine/page.h>
#include <machine/pmap.h>
#include <machine/strace.h>
-#include <machine/trap.h>
#include <machine/uart.h>
#include <vm/vm_kmem.h>
-#include <vm/vm_setup.h>
alignas(CPU_DATA_ALIGN) char boot_stack[BOOT_STACK_SIZE] __bootdata;
alignas(CPU_DATA_ALIGN) char boot_ap_stack[BOOT_STACK_SIZE] __bootdata;
@@ -358,8 +348,8 @@ boot_setup_paging(struct multiboot_raw_info *mbi, unsigned long eax)
return pmap_setup_paging();
}
-static void __init
-boot_log_version(void)
+void __init
+boot_log_info(void)
{
log_info(KERNEL_NAME "/" QUOTE(X15_X86_MACHINE) " " KERNEL_VERSION
#ifdef X15_X86_PAE
@@ -480,46 +470,24 @@ boot_save_mods(void)
* the boot loader. Once the boot data are managed as kernel buffers, their
* backing pages can be freed.
*/
-static void __init
+static int __init
boot_save_data(void)
{
boot_mbi.flags = boot_raw_mbi.flags;
boot_save_mods();
- strace_setup(&boot_raw_mbi);
+ return 0;
}
+INIT_OP_DEFINE(boot_save_data,
+ INIT_OP_DEP(kmem_setup, true),
+ INIT_OP_DEP(panic_setup, true),
+ INIT_OP_DEP(vm_kmem_setup, true));
+
void __init
boot_main(void)
{
- log_setup();
- arg_setup(boot_tmp_cmdline);
- sleepq_bootstrap();
- turnstile_bootstrap();
- syscnt_setup();
- percpu_bootstrap();
- trap_setup();
- cpu_setup();
- thread_bootstrap();
- boot_log_version();
- arg_log_info();
- console_setup();
- atcons_bootstrap();
- uart_bootstrap();
- printf_setup();
- uart_info();
- pmap_bootstrap();
- sref_bootstrap();
- cpu_check(cpu_current());
- cpu_info(cpu_current());
- biosmem_setup();
- vm_setup();
- boot_save_data();
- biosmem_free_usable();
- shutdown_setup();
- intr_setup();
- cpu_mp_probe();
- atcons_setup();
- uart_setup();
+ arg_set_cmdline(boot_tmp_cmdline);
+ strace_set_mbi(&boot_raw_mbi);
kernel_main();
/* Never reached */
@@ -529,9 +497,61 @@ void __init
boot_ap_main(void)
{
cpu_ap_setup();
- thread_ap_bootstrap();
- pmap_ap_bootstrap();
+ thread_ap_setup();
+ pmap_ap_setup();
kernel_ap_main();
/* Never reached */
}
+
+/*
+ * Init operation aliases.
+ */
+
+static int __init
+boot_bootstrap_console(void)
+{
+ return 0;
+}
+
+INIT_OP_DEFINE(boot_bootstrap_console,
+ INIT_OP_DEP(atcons_bootstrap, true),
+ INIT_OP_DEP(uart_bootstrap, true));
+
+static int __init
+boot_setup_console(void)
+{
+ return 0;
+}
+
+INIT_OP_DEFINE(boot_setup_console,
+ INIT_OP_DEP(atcons_setup, true),
+ INIT_OP_DEP(uart_setup, true));
+
+static int __init
+boot_load_vm_page_zones(void)
+{
+ return 0;
+}
+
+INIT_OP_DEFINE(boot_load_vm_page_zones,
+ INIT_OP_DEP(biosmem_setup, true));
+
+static int __init
+boot_setup_intr(void)
+{
+ return 0;
+}
+
+INIT_OP_DEFINE(boot_setup_intr,
+ INIT_OP_DEP(acpi_setup, true));
+
+static int __init
+boot_setup_shutdown(void)
+{
+ return 0;
+}
+
+INIT_OP_DEFINE(boot_setup_shutdown,
+ INIT_OP_DEP(acpi_setup, true),
+ INIT_OP_DEP(cpu_setup_shutdown, true));