1 ;------------------------------------------------------------------------------ ;
2 ; Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>
3 ; This program and the accompanying materials
4 ; are licensed and made available under the terms and conditions of the BSD License
5 ; which accompanies this distribution. The full text of the license may be found at
6 ; http://opensource.org/licenses/bsd-license.php.
8 ; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
9 ; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
17 ; Exception handlers used in SM mode
19 ;-------------------------------------------------------------------------------
24 EXTERNDEF gcStmPsd:BYTE
26 EXTERNDEF SmmStmExceptionHandler:PROC
27 EXTERNDEF SmmStmSetup:PROC
28 EXTERNDEF SmmStmTeardown:PROC
41 DB 05h ; Cr4Pse;Cr4Pae;Intel64Mode;ExecutionDisableOutsideSmrr
54 DQ 0 ; SmmSmiHandlerRip - SMM guest entrypoint
55 DQ 0 ; SmmSmiHandlerRsp
58 DD 80010100h ; RequiredStmSmmRevId
62 DW 01Fh ; ExceptionFilter
65 DQ 0 ; BiosHwResourceRequirementsPtr
67 DB 0 ; PhysicalAddressBits
68 PSD_SIZE = $ - offset gcStmPsd
71 ;------------------------------------------------------------------------------
72 ; SMM Exception handlers
73 ;------------------------------------------------------------------------------
77 call SmmStmExceptionHandler
82 DB 0fh, 01h, 0c1h ; VMCALL
88 ; Check XD disable bit
91 mov eax, gStmXdSupported
95 mov ecx, MSR_IA32_MISC_ENABLE
97 mov esi, edx ; save MSR_IA32_MISC_ENABLE[63-32]
98 test edx, BIT2 ; MSR_IA32_MISC_ENABLE[34]
100 and dx, 0FFFBh ; clear XD Disable bit if it is set
105 or ax, MSR_EFER_XD ; enable NXE
112 mov eax, gStmXdSupported
116 pop edx ; get saved MSR_IA32_MISC_ENABLE[63-32]
119 mov ecx, MSR_IA32_MISC_ENABLE
121 or dx, BIT2 ; set XD Disable bit if it was set before entering into SMM
130 ; Check XD disable bit
133 mov eax, gStmXdSupported
137 mov ecx, MSR_IA32_MISC_ENABLE
139 mov esi, edx ; save MSR_IA32_MISC_ENABLE[63-32]
140 test edx, BIT2 ; MSR_IA32_MISC_ENABLE[34]
142 and dx, 0FFFBh ; clear XD Disable bit if it is set
147 or ax, MSR_EFER_XD ; enable NXE
154 mov eax, gStmXdSupported
158 pop edx ; get saved MSR_IA32_MISC_ENABLE[63-32]
161 mov ecx, MSR_IA32_MISC_ENABLE
163 or dx, BIT2 ; set XD Disable bit if it was set before entering into SMM