X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/9fe5e02cf615ad121c4460fbaaac2787d1e09c0e..b91be0033265b5b6bd716bd39cb0971da41906c4:/lunaix-os/includes/hal/cpu.h diff --git a/lunaix-os/includes/hal/cpu.h b/lunaix-os/includes/hal/cpu.h index 6381143..c68bb95 100644 --- a/lunaix-os/includes/hal/cpu.h +++ b/lunaix-os/includes/hal/cpu.h @@ -1,72 +1,83 @@ #ifndef __LUNAIX_CPU_H #define __LUNAIX_CPU_H -#include - -typedef unsigned int reg32; -typedef unsigned short reg16; - -typedef struct { - reg32 eax; - reg32 ebx; - reg32 ecx; - reg32 edx; - reg32 edi; - reg32 ebp; - reg32 esi; - reg32 esp; - reg32 cs; - reg32 eip; -} __attribute__((packed)) registers; - -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wreturn-type" -static inline reg32 cpu_rcr0() { - asm volatile ("mov %cr0, %eax"); -} - -static inline reg32 cpu_rcr2() { - asm volatile ("mov %cr2, %eax"); -} - -static inline reg32 cpu_rcr3() { - asm volatile ("mov %cr3, %eax"); -} -#pragma GCC diagnostic pop - -static inline void cpu_lcr0(reg32 v) { - asm volatile ( - "mov %0, %%cr0" - :: "r"(v) - ); -} - -static inline void cpu_lcr2(reg32 v) { - asm volatile ( - "mov %0, %%cr2" - :: "r"(v) - ); -} - -static inline void cpu_lcr3(reg32 v) { - asm volatile ( - "mov %0, %%cr3" - :: "r"(v) - ); -} - -static inline void cpu_invplg(void* va) { - __asm__("invlpg (%0)" ::"r"((uintptr_t)va) : "memory"); -} - -static inline void cpu_invtlb() { - reg32 interm; - __asm__( - "movl %%cr3, %0\n" - "movl %0, %%cr3" - :"=r"(interm) - :"r"(interm) - ); -} - -#endif \ No newline at end of file +#include + +/** + * @brief Get processor ID string + * + * @param id_out + */ +void +cpu_get_id(char* id_out); + +/** + * @brief Load current processor state + * + * @return u32_t + */ +u32_t +cpu_ldstate(); + +/** + * @brief Load current processor config + * + * @return u32_t + */ +u32_t +cpu_ldconfig(); + +/** + * @brief Change current processor state + * + * @return u32_t + */ +void +cpu_chconfig(u32_t val); + +/** + * @brief Load current virtual memory space + * + * @return u32_t + */ +u32_t +cpu_ldvmspace(); + +/** + * @brief Change current virtual memory space + * + * @return u32_t + */ +void +cpu_chvmspace(u32_t val); + +/** + * @brief Flush TLB + * + * @return u32_t + */ +void +cpu_flush_page(ptr_t va); + +void +cpu_flush_vmspace(); + +void +cpu_enable_interrupt(); + +void +cpu_disable_interrupt(); + +void +cpu_trap_sched(); + +void +cpu_trap_panic(char* message); + +void +cpu_wait(); + +ptr_t +cpu_ldeaddr(); + +#endif /* __LUNAIX_CPU_H */