summaryrefslogtreecommitdiff
path: root/ReferenceCode/Haswell/Library/TxtLib/Ia32/TxtPeiLib.asm
blob: 34fcd355e45785fc00177141be3307527aa611cd (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
;/*++                                                             
;  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