/* * @author xamidev * @brief Kernel global macros * @license GPL-3.0-only */ #ifndef KERNEL_H #define KERNEL_H enum ErrorCodes { ENOMEM, EIO }; #define CLEAR_INTERRUPTS __asm__ volatile("cli") #define SET_INTERRUPTS __asm__ volatile("sti") #include #include #include #include extern volatile uint64_t ticks; #define DEBUG(log, ...) kprintf("[%8u] debug: <%s>: " log "\r\n", ticks, __func__, ##__VA_ARGS__) /* #define DEBUG(log, ...) \ printf("debug: [%s]: " log "\r\n", __FILE__, ##__VA_ARGS__); \ fctprintf((void*)&skputc, 0, "debug: [%s]: " log "\r\n", __FILE__, ##__VA_ARGS__) */ #define DIE_DEBUG(str) printf(str) #define CHECK_BIT(var,pos) ((var) & (1<<(pos))) // printf("debug: [%s]: " log "\n", __FILE__, ##__VA_ARGS__); void panic(struct cpu_status_t* ctx, const char* str); void hcf(void); void idle(void); void pedicel_main(void* arg); /* debug */ void debug_stack_trace(unsigned int max_frames); const char* debug_find_symbol(uintptr_t rip, uintptr_t* offset); void boot_mem_display(void); #define assert(check) do { if(!(check)) hcf(); } while(0) struct boot_context { struct limine_framebuffer* fb; struct limine_memmap_response* mmap; struct limine_hhdm_response* hhdm; struct limine_kernel_address_response* kaddr; }; // Are these modules initialized yet? struct init_status { bool terminal; bool serial; bool keyboard; bool timer; bool all; }; #endif