2016-06-13 04:11:38 +00:00
|
|
|
#ifndef _HAL_ARCH_H_
|
|
|
|
#define _HAL_ARCH_H_
|
|
|
|
|
2016-06-25 07:25:54 +00:00
|
|
|
#include "g_abi.h"
|
2016-07-09 03:01:33 +00:00
|
|
|
#include "g_type.h"
|
|
|
|
|
|
|
|
#define HAL_CORE_COUNT 1
|
2016-06-13 04:11:38 +00:00
|
|
|
|
2016-06-14 06:33:31 +00:00
|
|
|
typedef struct
|
2016-06-13 04:11:38 +00:00
|
|
|
{
|
|
|
|
uint16_t limit;
|
|
|
|
uint64_t base;
|
2016-06-14 06:33:31 +00:00
|
|
|
} __attribute__ ((packed)) hal_gdt_ptr_t;
|
2016-06-13 04:11:38 +00:00
|
|
|
|
2016-06-14 06:33:31 +00:00
|
|
|
typedef struct
|
2016-06-13 04:11:38 +00:00
|
|
|
{
|
|
|
|
uint16_t limit;
|
|
|
|
uint64_t base;
|
2016-08-06 05:55:55 +00:00
|
|
|
|
2016-06-14 06:33:31 +00:00
|
|
|
} __attribute__ ((packed)) hal_idt_ptr_t;
|
2016-06-13 04:11:38 +00:00
|
|
|
|
2016-08-06 05:55:55 +00:00
|
|
|
extern void KAPI hal_interlocked_increment(uint64_t* dst);
|
2016-06-13 04:11:38 +00:00
|
|
|
|
2016-08-06 05:55:55 +00:00
|
|
|
extern uint64_t KAPI hal_interlocked_exchange(uint64_t *dst, uint64_t val);
|
2016-06-24 01:48:34 +00:00
|
|
|
|
2016-06-13 04:11:38 +00:00
|
|
|
extern void KAPI hal_cpuid(uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx);
|
|
|
|
|
|
|
|
#define MSR_IA32_APIC_BASE 0x1B
|
|
|
|
extern void KAPI hal_read_msr(uint32_t *ecx, uint32_t *edx, uint32_t *eax);
|
|
|
|
|
|
|
|
extern void KAPI hal_write_msr(uint32_t *ecx, uint32_t *edx, uint32_t *eax);
|
|
|
|
|
|
|
|
extern void KAPI hal_enable_interrupt();
|
|
|
|
|
|
|
|
extern void KAPI hal_disable_interrupt();
|
|
|
|
|
|
|
|
extern void KAPI hal_halt_cpu();
|
|
|
|
|
2016-06-14 06:57:38 +00:00
|
|
|
extern int8_t KAPI hal_read_port_8(uint16_t port);
|
2016-06-13 04:11:38 +00:00
|
|
|
|
2016-06-14 06:57:38 +00:00
|
|
|
extern int16_t KAPI hal_read_port_16(uint16_t port);
|
|
|
|
|
|
|
|
extern int32_t KAPI hal_read_port_32(uint16_t port);
|
|
|
|
|
|
|
|
extern void KAPI hal_write_port_8(uint16_t port, uint8_t data);
|
|
|
|
|
|
|
|
extern void KAPI hal_write_port_16(uint16_t port, uint16_t data);
|
|
|
|
|
|
|
|
extern void KAPI hal_write_port_32(uint16_t port, uint32_t data);
|
2016-06-13 04:11:38 +00:00
|
|
|
|
|
|
|
extern void KAPI hal_write_mem_32(void* target, uint32_t data);
|
|
|
|
|
|
|
|
extern void KAPI hal_write_mem_64(void* target, uint64_t data);
|
|
|
|
|
|
|
|
extern void KAPI hal_flush_gdt(hal_gdt_ptr_t *gdt_ptr, uint64_t code_slct, uint64_t data_slct);
|
|
|
|
|
|
|
|
extern void KAPI hal_flush_tlb();
|
|
|
|
|
|
|
|
extern void KAPI hal_flush_idt(hal_idt_ptr_t *idt_ptr);
|
|
|
|
|
2016-06-14 06:33:31 +00:00
|
|
|
extern void KAPI hal_read_idt(hal_idt_ptr_t **idt_ptr);
|
|
|
|
|
2016-06-13 04:11:38 +00:00
|
|
|
extern void KAPI hal_write_cr3(uint64_t base);
|
|
|
|
|
|
|
|
extern uint64_t KAPI hal_read_cr3();
|
|
|
|
|
2016-06-15 07:29:46 +00:00
|
|
|
extern void KAPI hal_write_cr8(uint64_t pri);
|
|
|
|
|
|
|
|
extern uint64_t KAPI hal_read_cr8();
|
|
|
|
|
2016-06-13 04:11:38 +00:00
|
|
|
#endif
|