/** @file */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define UACPI_MEMORY_BUFFER_MAX 4096 /** @cond DOXYGEN_IGNORE */ ALIGNED (16) static uint8_t uacpi_memory_buffer[UACPI_MEMORY_BUFFER_MAX]; /** @endcond */ /** * @brief The kernel starts booting here. This is the entry point after * Limine hands control. We set up all the necessary platform-dependent * subsystems/drivers and jump into the init app. */ void bootmain (void) { struct cpu* bsp_cpu = cpu_make (); cpu_assign (bsp_cpu->id); amd64_init (bsp_cpu, false); amd64_debug_init (); pmm_init (); mm_init (); rd_init (); uacpi_setup_early_table_access ((void*)uacpi_memory_buffer, sizeof (uacpi_memory_buffer)); amd64_ioapic_init (); amd64_hpet_init (); smp_init (); /* busy wait for cpus to come online */ for (volatile int i = 0; i < INT_MAX; i++) ; mm_init2 (); __asm__ volatile ("sti"); proc_init (); for (;;) ; }