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
|
;/*++
; This file contains an 'Intel Peripheral Driver' and uniquely
; identified as "Intel Reference Module" and is
; licensed for Intel CPUs and chipsets under the terms of your
; license agreement with Intel or your vendor. This file may
; be modified by the user, subject to additional terms of the
; license agreement
;--*/
;
;/*++
;
; Copyright (c) 2012 Intel Corporation. All rights reserved
; This software and associated documentation (if any) is furnished
; under a license and may only be used or copied in accordance
; with the terms of the license. Except as permitted by such
; license, no part of this software or documentation may be
; reproduced, stored in a retrieval system, or transmitted in any
; form or by any means without the express written consent of
; Intel Corporation.
;
;
; Module Name:
;
; TxtPeiLib.asm
;
; Abstract:
;
; This file contains the code to determine Processor/Chipset TXT capaiblity
;
;--*/
.XLIST
include txt.inc
.LIST
.686P
.MMX
.XMM
.MODEL FLAT,C
.CODE
;-----------------------------------------------------------------------------
;-----------------------------------------------------------------------------
; Procedure: CheckSmxCapabilities
;
; Input: None
;
; Output: None
;
; Registers: None are preserved
;
; Description: Execute GETSEC[CAPABILITIES] to report the SMX capabilities
;
;-----------------------------------------------------------------------------
;-----------------------------------------------------------------------------
CheckSmxCapabilities PROC PUBLIC USES ebx
;
; Check whether SMX is supported
;
mov eax, 1
cpuid
bt ecx, IA32_CPUID_SMX_B
.IF !CARRY?
mov eax, 0
jmp @F
.ENDIF
;
; Save cr4
;
mov edx, CR4
;
; Enable SMXE
;
mov eax, CR4
or eax, CR4_SMXE
mov CR4, eax
;
; Call GETSEC[CAPABILITIES]
;
mov eax, CAPABILITIES ; eax = CAPABILITIES
mov ebx, 0
_GETSEC
;
; Restore cr4
;
mov CR4, edx
@@:
ret
CheckSmxCapabilities ENDP
END
|