#ifndef _KERNEL_AMD64_SMP_H #define _KERNEL_AMD64_SMP_H #include #include #include #include #define CPUS_MAX 32 struct cpu { uint64_t lapic_ticks; uint32_t id; struct { uint64_t rflags; atomic_int nesting; } irq_ctx; volatile uint8_t kernel_stack[KSTACK_SIZE] ALIGNED (16); volatile uint8_t except_stack[KSTACK_SIZE] ALIGNED (16); volatile uint8_t irq_stack[KSTACK_SIZE] ALIGNED (16); volatile struct gdt_extended gdt ALIGNED (16); volatile struct tss tss; }; struct cpu* cpu_make (void); struct cpu* cpu_get (uint32_t id); void cpu_assign (uint32_t id); uint32_t cpu_id (void); #define thiscpu (cpu_get (cpu_id ())) #endif // _KERNEL_AMD64_SMP_H