summaryrefslogtreecommitdiff
path: root/Core/CPU/x64/x64AsmLib/CPULib_CpuID.asm
blob: 53719f2c91b6ed082e7323bd6e3fbd5716e7ca0d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
;*************************************************************************
;*************************************************************************
;**                                                                     **
;**        (C)Copyright 1985-2009, American Megatrends, Inc.            **
;**                                                                     **
;**                       All Rights Reserved.                          **
;**                                                                     **
;**      5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093           **
;**                                                                     **
;**                       Phone: (770)-246-8600                         **
;**                                                                     **
;*************************************************************************
;*************************************************************************

;*************************************************************************
; $Header: /Alaska/SOURCE/Core/Modules/x64Core/x64AsmLib/CPULib_CpuID.asm 2     11/11/11 3:40p Artems $
;
; $Revision: 2 $
;
; $Date: 11/11/11 3:40p $
;*************************************************************************
; Revision History
; ----------------
; $Log: /Alaska/SOURCE/Core/Modules/x64Core/x64AsmLib/CPULib_CpuID.asm $
; 
; 2     11/11/11 3:40p Artems
; Bug fix: Verify pointer is not NULL, when return value
; 
; 1     10/01/10 5:07p Felixp
; 
; 1     8/24/06 12:57p Felixp
; 
;*************************************************************************
;<AMI_FHDR_START>
;
; Name:
;
; Description:
;
;<AMI_FHDR_END>
;*************************************************************************
.code

;*************************************************************************
;<AMI_PHDR_START>
;
; Name: CPULib_CpuID
;
; Description:
;  VOID CPULib_CpuID(IN UINT32 CpuIDIndex, IN UINT32 *pRegEAX,
; IN UINT32 *pRegEBX, IN UINT32 *pRegECX, IN UINT32 *pRegEDX) issues the
; CPUID instruction with the index provided and returns the register values.
;
; Input:
;  IN UINT32 CpuIDIndex
; 32-bit CPUID index.
;
;  IN UINT32 *pRegEAX
; Value of EAX after CPUID instruction.
;
;  IN UINT32 *pRegEBX
; Value of EBX after CPUID instruction.
;
;  IN UINT32 *pRegECX
; Value of ECX after CPUID instruction.
;
;  IN UINT32 *pRegEDX
; Value of EDX after CPUID instruction.
;
; Output:
;  VOID.
;
; Modified:
;
; Referrals:
;
; Notes:
;
;<AMI_PHDR_END>
;*************************************************************************
CPULib_CpuID proc
;rcx = CpuIDIndex
;rdx = pRegEax
;r8  = pRegEBX
;r9  = pRegECX
;[rsp + 8] = pRegEDX:DWORD

    push rbx
    mov r11, [rsp + 30h]    ;pRegEDX
    mov r10, r9             ;pRegECX
    mov r9,  r8             ;pRegEBX
    mov r8,  rdx            ;pRegEAX

	mov eax, ecx
	mov ecx, [r10]
    cpuid

    or  r8, r8
    jz  skip1
    mov [r8], eax
skip1:
    or  r9, r9
    jz  skip2
    mov [r9], ebx
skip2:
    or  r10, r10
    jz  skip3
    mov [r10], ecx
skip3:
    or  r11, r11
    jz  skip4
    mov [r11], edx
skip4:
    pop rbx
	ret
CPULib_CpuID endp

END
;*************************************************************************
;*************************************************************************
;**                                                                     **
;**        (C)Copyright 1985-2009, American Megatrends, Inc.            **
;**                                                                     **
;**                       All Rights Reserved.                          **
;**                                                                     **
;**      5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093           **
;**                                                                     **
;**                       Phone: (770)-246-8600                         **
;**                                                                     **
;*************************************************************************