#ifndef _CPU_H #define _CPU_H #include #include #include #include #include #include #include #include #include typedef struct cpu_t { thread_t *thread; uint64_t gdt[7]; ist_t ist; long id; isr_t isr[MAX_ISR_COUNT]; vmmcontext_t *vmmctx; int acpiid; timer_t *timer; bool intstatus; long ipl; thread_t *idlethread; timerentry_t schedtimerentry; void *schedulerstack; isr_t *isrqueue; dpc_t *dpcqueue; } cpu_t; #define CPU_HALT() asm volatile("hlt") static inline cpu_t *_cpu() { return (cpu_t *)rdmsr(MSR_GSBASE); } static inline void cpu_set(cpu_t *ptr) { wrmsr(MSR_GSBASE, (uint64_t)ptr); } void cpu_initstate(); #endif