Added cpuid.

This commit is contained in:
unknown 2015-04-16 14:46:54 -07:00
parent 7db4e9cf35
commit 3628eeb97c
3 changed files with 25 additions and 2 deletions

View File

@ -1,7 +1,9 @@
global flush_gdt
global flush_tlb
global get_cpuid
;Functions preserve the registers rbx, rsp, rbp, r12, r13, r14, and 15
;rax, rdi, rsi, rdx, rcx, r8, r9, r10, r11 are scratch registers.
;function parameter: rdi,rsi,rdx,rcx,r8,r9
[SECTION .text]
[BITS 64]
@ -34,4 +36,20 @@ ret
flush_tlb:
mov rax,cr3
mov cr3,rax
ret
ret
;void get_cpuid(int64_t* rax, int64_t* rbx, int64_t* rcx, int64_t* rdx)
get_cpuid:
mov rax,[rdi]
push rcx
mov rcx,[rdx]
cpuid
mov [rdi],rax
mov [rsi],rbx
mov [rdx],rcx
pop rcx
mov [rcx],rdx
ret

View File

@ -12,7 +12,6 @@ extern char kernel_start[];
extern char kernel_end[];
extern void NATIVE64 HLT_CPU(void);
extern void NATIVE64 BOCHS_MAGIC_BREAKPOINT();
extern void NATIVE64 flush_gdt(gdt_ptr_t *gdt_ptr, uint64_t code_slct, uint64_t data_slct);
void NATIVE64 kmain(multiboot_info_t *multiboot_info)
{
text_pos = get_pos(3, 0);

View File

@ -79,6 +79,12 @@ typedef struct __attribute__ ((packed))
void*NATIVE64 kmalloc(size_t const size);
void NATIVE64 kfree(void* ptr);
extern void NATIVE64 flush_gdt(gdt_ptr_t *gdt_ptr, uint64_t code_slct, uint64_t data_slct);
extern void NATIVE64 flush_tlb();
extern void NATIVE64 get_cpuid(int64_t * eax, int64_t * ebx, int64_t* ecx, int64_t* edx);
void NATIVE64 write_segment_descriptor(void *const gdt, uint32_t const base, uint32_t const limit, uint64_t const attr);
//extern void NATIVE64 hk_load_gdt(gdt_ptr_t const *const ptr, uint16_t const sel_code, uint16_t const sel_data);