X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/aa2843fdbdd9b5cc579d198fd1a9ec874642706e..b9f4a7b7475e62dbff22da6dd768222f03889c00:/lunaix-os/arch/i386/hal/cpu.c diff --git a/lunaix-os/arch/i386/hal/cpu.c b/lunaix-os/arch/i386/hal/cpu.c index 2ca126a..00ba7f4 100644 --- a/lunaix-os/arch/i386/hal/cpu.c +++ b/lunaix-os/arch/i386/hal/cpu.c @@ -1,7 +1,7 @@ -#include #include -#include #include +#include +#include #define BRAND_LEAF 0x80000000UL @@ -46,68 +46,20 @@ cpu_get_id(char* id_out) id_out[48] = '\0'; } -u32_t -cpu_ldstate() -{ - ptr_t val; - asm volatile("pushf\n" - "popl %0\n" - : "=r"(val)::); - return val; -} - -u32_t -cpu_ldconfig() -{ - ptr_t val; - asm volatile("movl %%cr0,%0" : "=r"(val)); - return val; -} - -void -cpu_chconfig(u32_t val) -{ - asm("mov %0, %%cr0" ::"r"(val)); -} - -u32_t -cpu_ldvmspace() -{ - ptr_t val; - asm volatile("movl %%cr3,%0" : "=r"(val)); - return val; -} - -void -cpu_chvmspace(u32_t val) -{ - asm("mov %0, %%cr3" ::"r"(val)); -} - -void -cpu_flush_page(ptr_t va) -{ - asm volatile("invlpg (%0)" ::"r"(va) : "memory"); -} - void -cpu_flush_vmspace() +cpu_rdmsr(u32_t msr_idx, u32_t* reg_high, u32_t* reg_low) { - asm("movl %%cr3, %%eax\n" - "movl %%eax, %%cr3" :: - : "eax"); -} + u32_t h = 0, l = 0; + asm volatile("rdmsr" : "=d"(h), "=a"(l) : "c"(msr_idx)); -void -cpu_enable_interrupt() -{ - asm volatile("sti"); + *reg_high = h; + *reg_low = l; } void -cpu_disable_interrupt() +cpu_wrmsr(u32_t msr_idx, u32_t reg_high, u32_t reg_low) { - asm volatile("cli"); + asm volatile("wrmsr" : : "d"(reg_high), "a"(reg_low), "c"(msr_idx)); } void @@ -121,33 +73,3 @@ cpu_trap_panic(char* message) { asm("int %0" ::"i"(LUNAIX_SYS_PANIC), "D"(message)); } - -void -cpu_wait() -{ - asm("hlt"); -} - -ptr_t -cpu_ldeaddr() -{ - ptr_t val; - asm volatile("movl %%cr2,%0" : "=r"(val)); - return val; -} - -void -cpu_rdmsr(u32_t msr_idx, u32_t* reg_high, u32_t* reg_low) -{ - u32_t h = 0, l = 0; - asm volatile("rdmsr" : "=d"(h), "=a"(l) : "c"(msr_idx)); - - *reg_high = h; - *reg_low = l; -} - -void -cpu_wrmsr(u32_t msr_idx, u32_t reg_high, u32_t reg_low) -{ - asm volatile("wrmsr" : : "d"(reg_high), "a"(reg_low), "c"(msr_idx)); -} \ No newline at end of file