XenevaOS
Loading...
Searching...
No Matches
x86_64_lowlevel.h
Go to the documentation of this file.
1
30#ifndef __X86_64_LOW_LEVEL_H__
31#define __X86_64_LOW_LEVEL_H__
32
33#include <stdint.h>
34#include <aurora.h>
35
39
42extern "C" void x64_hlt();
43
45extern "C" uint8_t x64_inportb(uint16_t port);
46extern "C" uint16_t x64_inportw(uint16_t port);
47extern "C" uint32_t x64_inportd(uint16_t port);
48
49extern "C" void x64_outportb(uint16_t port, uint8_t data);
50extern "C" void x64_outportw(uint16_t port, uint16_t data);
51extern "C" void x64_outportd(uint16_t port, uint32_t data);
52
54extern "C" uint64_t x64_read_msr(size_t msr);
55extern "C" void x64_write_msr(size_t msr, uint64_t data);
56
58extern "C" void x64_mfence();
59
61extern "C" void x64_pause();
62
64extern "C" void x64_cpuid(size_t page, size_t* a, size_t* b, size_t* c, size_t* d, size_t subpage = 0);
65
67extern "C" size_t x64_read_cr0();
68extern "C" size_t x64_read_cr2();
69extern "C" size_t x64_read_cr3();
70extern "C" size_t x64_read_cr4();
71extern "C" void x64_write_cr0(size_t);
72extern "C" void x64_write_cr3(size_t);
73extern "C" void x64_write_cr4(size_t);
74
76extern "C" void x64_lgdt(void* location);
77extern "C" void x64_sgdt(void* location);
78extern "C" void x86_64_idt_test();
79
81extern "C" void flush_tlb(void* addr);
82extern "C" void cache_flush();
83
84extern "C" void x64_atom_exchange(size_t r1, size_t r2);
85
89extern "C" void x64_fxsave(uint8_t* location);
90extern "C" void x64_fxrstor(uint8_t* location);
91
92/*
93* FS & GS Base
94*/
95extern "C" uint8_t x64_fs_readb(size_t offset);
96extern "C" uint16_t x64_fs_readw(size_t offset);
97extern "C" uint32_t x64_fs_readd(size_t offset);
98extern "C" uint64_t x64_fs_readq(size_t offset);
99extern "C" void x64_fs_writeb(size_t offset, uint8_t val);
100extern "C" void x64_fs_writew(size_t offset, uint16_t val);
101extern "C" void x64_fs_writed(size_t offset, uint32_t val);
102extern "C" void x64_fs_writeq(size_t offset, uint64_t val);
103extern "C" uint8_t x64_gs_readb(size_t offset);
104extern "C" uint16_t x64_gs_readw(size_t offset);
105extern "C" uint32_t x64_gs_readd(size_t offset);
106extern "C" uint64_t x64_gs_readq(size_t offset);
107extern "C" void x64_gs_writeb(size_t offset, uint8_t val);
108extern "C" void x64_gs_writew(size_t offset, uint16_t val);
109extern "C" void x64_gs_writed(size_t offset, uint32_t val);
110extern "C" void x64_gs_writeq(size_t offset, uint64_t val);
111extern "C" void x64_ldmxcsr(uint32_t *location);
112extern "C" void x64_stmxcsr(uint32_t *location);
113
114extern "C" void x64_set_kstack(void* ktss, size_t stack);
115extern "C" size_t x64_get_kstack(void* ktss);
116
118
119extern "C" void x64_rdtsc(uint32_t *hi, uint32_t *lo);
120
122extern "C" void x64_lidt(void* location);
123extern "C" void x64_sidt(void* location);
124extern "C" void x64_lgdt(void* location);
125extern "C" void x64_sgdt(void* location);
126extern "C" void x64_ltr(uint16_t seg);
127extern "C" void x64_enter_user(uint64_t stack, uint64_t entry_addr, uint64_t cs, uint64_t ss);
128extern "C" void x64_force_sched();
129extern "C" bool x64_lock_test(volatile size_t *lock, size_t old_value, size_t new_value);
130#endif
#define AU_EXTERN
Definition aurora.h:50
#define AU_EXPORT
Definition aurora.h:38
unsigned int uint32_t
Definition acefiex.h:163
unsigned char uint8_t
Definition acefiex.h:161
COMPILER_DEPENDENT_UINT64 uint64_t
Definition acefiex.h:165
unsigned short int uint16_t
Definition acefiex.h:162
size_t x64_read_cr4()
void x64_force_sched()
uint16_t x64_gs_readw(size_t offset)
void x64_lgdt(void *location)
GDT & IDT Function.
void x64_write_cr0(size_t)
void x64_pause()
Pause.
AU_EXTERN AU_EXPORT void x64_sti()
void flush_tlb(void *addr)
TLB Flush.
void x64_set_kstack(void *ktss, size_t stack)
void x64_fxsave(uint8_t *location)
void x64_lidt(void *location)
Interrupt Descriptor Table functions.
AU_EXTERN AU_EXPORT void x64_cli()
void cache_flush()
void x64_atom_exchange(size_t r1, size_t r2)
uint32_t x64_inportd(uint16_t port)
uint64_t x64_gs_readq(size_t offset)
void x64_outportd(uint16_t port, uint32_t data)
void x64_enter_user(uint64_t stack, uint64_t entry_addr, uint64_t cs, uint64_t ss)
void x64_stmxcsr(uint32_t *location)
size_t x64_read_cr0()
Control Register.
void x64_write_msr(size_t msr, uint64_t data)
void x64_gs_writeq(size_t offset, uint64_t val)
void x64_ltr(uint16_t seg)
void x64_fs_writew(size_t offset, uint16_t val)
void x64_hlt()
void x64_outportw(uint16_t port, uint16_t data)
void x64_sidt(void *location)
bool x64_lock_test(volatile size_t *lock, size_t old_value, size_t new_value)
size_t x64_get_kstack(void *ktss)
uint8_t x64_gs_readb(size_t offset)
void x64_write_cr4(size_t)
uint16_t x64_inportw(uint16_t port)
size_t x64_read_cr2()
void x64_ldmxcsr(uint32_t *location)
uint64_t x64_kesp_get_top()
uint64_t x64_read_msr(size_t msr)
MSR functions.
void x64_outportb(uint16_t port, uint8_t data)
void x64_gs_writeb(size_t offset, uint8_t val)
void x64_fs_writeq(size_t offset, uint64_t val)
void x64_rdtsc(uint32_t *hi, uint32_t *lo)
void x64_fs_writeb(size_t offset, uint8_t val)
uint16_t x64_fs_readw(size_t offset)
void x64_sgdt(void *location)
size_t x64_read_cr3()
void x64_fs_writed(size_t offset, uint32_t val)
uint8_t x64_fs_readb(size_t offset)
void x64_gs_writew(size_t offset, uint16_t val)
void x64_cpuid(size_t page, size_t *a, size_t *b, size_t *c, size_t *d, size_t subpage=0)
x64_cpuid
void x64_gs_writed(size_t offset, uint32_t val)
void x64_fxrstor(uint8_t *location)
uint64_t x64_fs_readq(size_t offset)
void x64_mfence()
Mfench.
uint32_t x64_gs_readd(size_t offset)
void x64_write_cr3(size_t)
uint8_t x64_inportb(uint16_t port)
in & out port functions
void x86_64_idt_test()
uint32_t x64_fs_readd(size_t offset)