#ifndef SOCKS_X86_64_CPU_H_ #define SOCKS_X86_64_CPU_H_ #include #include #define ml_cpu_block_get_id(p) ((p)->c_cpu_id) typedef struct ml_cpu_block { struct ml_cpu_block *c_this; struct gdt c_gdt; struct gdt_ptr c_gdt_ptr; struct idt_ptr c_idt_ptr; unsigned int c_cpu_id; } ml_cpu_block; #define ml_cpu_pause() asm volatile("hlt") #define ml_cpu_relax() asm volatile("pause") extern int ml_init_bootcpu(void); extern int ml_cpu_block_init(ml_cpu_block *p); extern int ml_cpu_block_use(ml_cpu_block *p); /* defined in cpu_ctrl.S */ extern void ml_halt_cpu(void); extern ml_cpu_block *ml_this_cpu(void); #endif