X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/b26d3165c52589d1f8de37bf0df27ad96f460f47..28c176b668c841a3b7fb093faccf0efa39257603:/lunaix-os/arch/i386/hal/cpu.c?ds=sidebyside diff --git a/lunaix-os/arch/i386/hal/cpu.c b/lunaix-os/arch/i386/hal/cpu.c deleted file mode 100644 index 2ca126a..0000000 --- a/lunaix-os/arch/i386/hal/cpu.c +++ /dev/null @@ -1,153 +0,0 @@ -#include -#include -#include -#include - -#define BRAND_LEAF 0x80000000UL - -void -cpu_get_model(char* model_out) -{ - u32_t* out = (u32_t*)model_out; - u32_t eax = 0, ebx = 0, edx = 0, ecx = 0; - - __get_cpuid(0, &eax, &ebx, &ecx, &edx); - - out[0] = ebx; - out[1] = edx; - out[2] = ecx; - model_out[12] = '\0'; -} - -int -cpu_brand_string_supported() -{ - u32_t supported = __get_cpuid_max(BRAND_LEAF, 0); - return (supported >= 0x80000004UL); -} - -void -cpu_get_id(char* id_out) -{ - if (!cpu_brand_string_supported()) { - id_out[0] = '?'; - id_out[1] = '\0'; - } - u32_t* out = (u32_t*)id_out; - u32_t eax = 0, ebx = 0, edx = 0, ecx = 0; - for (u32_t i = 2, j = 0; i < 5; i++) { - __get_cpuid(BRAND_LEAF + i, &eax, &ebx, &ecx, &edx); - out[j] = eax; - out[j + 1] = ebx; - out[j + 2] = ecx; - out[j + 3] = edx; - j += 4; - } - 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() -{ - asm("movl %%cr3, %%eax\n" - "movl %%eax, %%cr3" :: - : "eax"); -} - -void -cpu_enable_interrupt() -{ - asm volatile("sti"); -} - -void -cpu_disable_interrupt() -{ - asm volatile("cli"); -} - -void -cpu_trap_sched() -{ - asm("int %0" ::"i"(LUNAIX_SCHED)); -} - -void -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