XenevaOS
Loading...
Searching...
No Matches
x86_64_cpu.h
Go to the documentation of this file.
1
30#ifndef __X86_64_CPU_H__
31#define __X86_64_CPU_H__
32
33#include <stdint.h>
34#include <process.h>
35#include <time.h>
36
37#define IA32_EFER 0xC0000080
38#define IA32_STAR 0xC0000081
39#define IA32_LSTAR 0xC0000082
40#define IA32_CSTAR 0xC0000083
41#define IA32_SFMASK 0xC0000084
42
43#define IA32_SYSENTER_CS 0x174
44#define IA32_SYSENTER_ESP 0x175
45#define IA32_SYSENTER_EIP 0x176
46
47#define IA32_EFLAGS_INTR (1<<9)
48#define IA32_EFLAGS_DIRF (1<<10)
49
50#define MSR_IA32_MISC_ENABLE 0x1A0
51#define MSR_IA32_ENERGY_PERF_BIAS 0x1B0
52#define MSR_IA32_PERF_CTL 0x199
53#define MSR_IA32_PERF_STATUS 0x198
54#define MSR_IA32_PM_ENABLE 0x770
55#define MSR_IA32_HWP_CAPABILITIES 0x771
56#define MSR_IA32_HWP_REQUEST_PKG 0x772
57#define MSR_IA32_HWP_INTERRUPT 0x773
58#define MSR_IA32_HWP_REQUEST 0x774
59#define MSR_IA32_HWP_PECI_REQUEST_INFO 0x775
60#define MSR_IA32_HWP_STATUS 0x777
61#define MSR_IA32_FS_BASE 0xC0000100
62#define MSR_IA32_GS_BASE 0xC0000101
63#define MSR_IA32_KERNELGS_BASE 0xC0000102
64#define IA32_EFER 0xC0000080
65
66
67#pragma pack(push,1)
72#pragma pack(pop)
73
74/* Needed for Signal Handling */
75#pragma pack(push,1)
98#pragma pack(pop)
99
100
103 size_t error;
104 size_t rip;
105 size_t cs;
106 size_t rflags;
107 size_t rsp;
108 size_t ss;
109};
110#pragma pack (pop)
111
112
113#pragma pack(push,1)
123#pragma pack(pop)
124
125#pragma pack(push,1)
126/* cpu structure */
127typedef struct _cpu_ {
130 TSS* kernel_tss; //offset -> 9
132#pragma pack(pop)
133
134/*
135* x86_64_enable_syscall_ext -- enablse syscall
136* extension
137*/
138extern void x86_64_enable_syscall_ext();
139
140/*
141* x86_64_init_user -- initialise the user land
142* @param bit -- either 32 or 64 bit
143*/
144extern void x86_64_init_user(size_t bit);
145
146/*
147* x86_64_init_user_ap -- initialise user land for application
148* processor's
149* @param bit -- cpu bit
150*/
151extern void x86_64_init_user_ap(size_t bit);
152
153/*
154* x86_64_get_tss -- returns the tss
155*/
156extern TSS* x86_64_get_tss();
157
158/*
159* x86_64_hal_cpu_feature_enable -- enable cpu features
160*/
162
164
165/*
166* x86_64_cpu_msi_address -- calculates the cpu msi address
167* @param data -- msi data to return
168* @param vector -- interrupt vector number
169* @param processor -- processor number
170* @param edge -- edge triggered or level triggered
171* @param deassert -- deassert bit
172*/
173extern uint64_t x86_64_cpu_msi_address(uint64_t* data, size_t vector, uint32_t processor, uint8_t edge, uint8_t deassert);
174
175/*
176* x86_64_cpu_initialize -- initialise all Application processor
177* except the BSP processor
178* @param num_cpu -- cpu number to initialise except 0
179*/
180extern void x86_64_cpu_initialize(uint8_t num_cpu);
181
182/*
183* x86_64_set_ap_start_bit -- set a bit in __ApStarted
184* @param value -- bit to set
185*/
186extern void x86_64_set_ap_start_bit(bool value);
187
188/*
189* x86_64_initialise_syscall -- initialise the syscall service
190*/
191extern void x86_64_initialise_syscall();
192
193/*
194* cpu_read_tsc -- read the tsc count
195*/
196extern uint64_t cpu_read_tsc();
197
198extern void x86_64_measure_cpu_speed();
199
201
202extern int x86_64_gettimeofday(timeval *t);
203
204extern void updateTicks(uint64_t ticks, uint64_t* timerTick, uint64_t* timerSubticks);
205
206/*
207 * x86_64_calculate_ticks -- calculate the number of ticks from given milliseconds
208 * @param milliseconds -- amount of milliseconds
209 * @param out_milliseconds -- where to store the number of ticks
210 */
211void x86_64_calculate_ticks(uint64_t milliseconds, uint64_t subsec, uint64_t* out_milliseconds, uint64_t* out_subsec);
212
213/*
214 * x86_64_udelay -- udelay
215 */
217
218#endif
#define AU_EXTERN
Definition aurora.h:50
#define AU_EXPORT
Definition aurora.h:38
XETime t
Definition main.cpp:53
int timerTick
Definition main.cpp:59
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
Definition x86_64_cpu.h:127
uint64_t * au_current_thread
Definition x86_64_cpu.h:129
uint8_t cpu_id
Definition x86_64_cpu.h:128
TSS * kernel_tss
Definition x86_64_cpu.h:130
Definition x86_64_cpu.h:76
uint64_t rcx
Definition x86_64_cpu.h:89
uint64_t r8
Definition x86_64_cpu.h:84
uint64_t r13
Definition x86_64_cpu.h:79
uint64_t r14
Definition x86_64_cpu.h:78
uint64_t rdx
Definition x86_64_cpu.h:88
uint64_t r11
Definition x86_64_cpu.h:81
uint64_t rsp
Definition x86_64_cpu.h:95
uint64_t rbp
Definition x86_64_cpu.h:85
uint64_t ss
Definition x86_64_cpu.h:96
uint64_t rbx
Definition x86_64_cpu.h:90
uint64_t cs
Definition x86_64_cpu.h:93
uint64_t rsi
Definition x86_64_cpu.h:87
uint64_t rax
Definition x86_64_cpu.h:91
uint64_t rdi
Definition x86_64_cpu.h:86
uint64_t r12
Definition x86_64_cpu.h:80
uint64_t rflags
Definition x86_64_cpu.h:94
uint64_t r15
Definition x86_64_cpu.h:77
uint64_t r9
Definition x86_64_cpu.h:83
uint64_t rip
Definition x86_64_cpu.h:92
uint64_t r10
Definition x86_64_cpu.h:82
Definition x86_64_cpu.h:68
_stack_frame_ * baseptr
Definition x86_64_cpu.h:69
size_t rip
Definition x86_64_cpu.h:70
Definition time.h:52
Definition x86_64_cpu.h:114
size_t rsp[3]
Definition x86_64_cpu.h:116
size_t IST[7]
Definition x86_64_cpu.h:118
uint16_t resv4
Definition x86_64_cpu.h:120
uint16_t iomapbase
Definition x86_64_cpu.h:121
uint32_t reserved
Definition x86_64_cpu.h:115
size_t reserved2
Definition x86_64_cpu.h:117
size_t resv3
Definition x86_64_cpu.h:119
Definition x86_64_cpu.h:101
stack_frame * baseptr
Definition x86_64_cpu.h:102
size_t rflags
Definition x86_64_cpu.h:106
size_t rip
Definition x86_64_cpu.h:104
size_t cs
Definition x86_64_cpu.h:105
size_t ss
Definition x86_64_cpu.h:108
size_t rsp
Definition x86_64_cpu.h:107
size_t error
Definition x86_64_cpu.h:103
bool x86_64_is_cpu_fxsave_supported()
Definition x86_64_cpu.cpp:165
struct _cpu_ CPUStruc
void x86_64_initialise_syscall()
Definition x86_64_cpu.cpp:270
struct _tss TSS
AU_EXTERN AU_EXPORT void x86_64_udelay(uint64_t usec)
Definition x86_64_cpu.cpp:504
void x86_64_calculate_ticks(uint64_t milliseconds, uint64_t subsec, uint64_t *out_milliseconds, uint64_t *out_subsec)
Definition x86_64_cpu.cpp:485
struct _stack_frame_ stack_frame
struct _regs_ctx_ x86_64_cpu_regs_t
void x86_64_hal_cpu_feature_enable()
Definition x86_64_cpu.cpp:128
void x86_64_enable_syscall_ext()
Definition x86_64_cpu.cpp:55
void x86_64_cpu_initialize(uint8_t num_cpu)
Definition x86_64_cpu.cpp:203
uint64_t x86_64_cpu_get_mhz()
Definition x86_64_cpu.cpp:466
void x86_64_init_user_ap(size_t bit)
Definition x86_64_cpu.cpp:94
uint64_t cpu_read_tsc()
Definition x86_64_cpu.cpp:283
void updateTicks(uint64_t ticks, uint64_t *timerTick, uint64_t *timerSubticks)
Definition x86_64_cpu.cpp:411
void x86_64_init_user(size_t bit)
Definition x86_64_cpu.cpp:66
TSS * x86_64_get_tss()
Definition x86_64_cpu.cpp:121
void x86_64_measure_cpu_speed()
Definition x86_64_cpu.cpp:418
uint64_t x86_64_cpu_msi_address(uint64_t *data, size_t vector, uint32_t processor, uint8_t edge, uint8_t deassert)
Definition x86_64_cpu.cpp:177
int x86_64_gettimeofday(timeval *t)
Definition x86_64_cpu.cpp:470
void x86_64_set_ap_start_bit(bool value)
Definition x86_64_cpu.cpp:260