; Low level interrupt/thread handling code for GeekOS.
; Copyright (c) 2001,2003,2004 David H. Hovemeyer <daveho@cs.umd.edu>
; Copyright (c) 2003, Jeffrey K. Hollingsworth <hollings@cs.umd.edu>
-; $Revision: 1.1 $
+; $Revision: 1.5 $
; This is free software. You are permitted to use,
; redistribute, and modify it as specified in the file "COPYING".
; CPUID functions
EXPORT cpuid_ecx
EXPORT cpuid_eax
+EXPORT cpuid_edx
; Utility Functions
EXPORT Set_MSR
EXPORT Get_MSR
+
EXPORT Get_CR2
+EXPORT Get_CR3
EXPORT Proc_test
ret
+
+;
+; cpuid_edx - return the edx register from cpuid
+;
+align 8
+cpuid_edx:
+ push ebp
+ mov ebp, esp
+ push edx
+ push ecx
+ push ebx
+
+ mov eax, [ebp + 8]
+ cpuid
+ mov eax, edx
+
+ pop ebx
+ pop ecx
+ pop edx
+ pop ebp
+ ret
+
+
;
; cpuid_ecx - return the ecx register from cpuid
;
cpuid_ecx:
push ebp
mov ebp, esp
+ push edx
push ecx
+ push ebx
+
mov eax, [ebp + 8]
cpuid
mov eax, ecx
+
+ pop ebx
pop ecx
+ pop edx
pop ebp
ret
;
align 8
cpuid_eax:
+ push ebp
+ mov ebp, esp
+ push edx
+ push ecx
+ push ebx
+
mov eax, [esp+4]
cpuid
+
+ pop ebx
+ pop ecx
+ pop edx
+ pop ebp
ret
;
+
align 8
Get_CR2:
mov eax, cr2
align 8
+Get_CR3:
+ mov eax, cr3
+ ret
+
+align 8
Proc_test:
push ebp
mov ebp, esp