#pragma once #include #include struct Registers; namespace CPU { Result identify(); StringView platform_string(); void platform_init(); void platform_finish_init(); [[noreturn]] void efficient_halt(); [[noreturn]] void idle_loop(); void switch_kernel_stack(u64 top); void enable_interrupts(); void disable_interrupts(); void wait_for_interrupt(); bool save_interrupts(); void restore_interrupts(bool saved); void get_stack_trace(void (*callback)(u64, void*), void* arg); void print_stack_trace(); void get_stack_trace_at(Registers* regs, void (*callback)(u64, void*), void* arg); void print_stack_trace_at(Registers* regs); u16 get_processor_id(); bool register_interrupt(u8 interrupt, void (*handler)(Registers*, void*), void* context); void sync_interrupts(); #ifdef MOON_ENABLE_TESTING_FEATURES void magic_exit(int status); #endif void pause(); }