]> git.proxmox.com Git - mirror_edk2.git/commitdiff
UefiCpuPkg/SmmCpuFeaturesLib: Remove .S files for IA32 and X64 arch
authorShenglei Zhang <shenglei.zhang@intel.com>
Wed, 6 Mar 2019 07:21:08 +0000 (15:21 +0800)
committerLiming Gao <liming.gao@intel.com>
Wed, 3 Apr 2019 05:27:42 +0000 (13:27 +0800)
.nasm file has been added for X86 arch. .S assembly code
is not required any more.
https://bugzilla.tianocore.org/show_bug.cgi?id=1594

Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Shenglei Zhang <shenglei.zhang@intel.com>
Reviewed-by: Eric Dong <eric.dong@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
UefiCpuPkg/Library/SmmCpuFeaturesLib/Ia32/SmiEntry.S [deleted file]
UefiCpuPkg/Library/SmmCpuFeaturesLib/Ia32/SmiException.S [deleted file]
UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLibStm.inf
UefiCpuPkg/Library/SmmCpuFeaturesLib/X64/SmiEntry.S [deleted file]
UefiCpuPkg/Library/SmmCpuFeaturesLib/X64/SmiException.S [deleted file]

diff --git a/UefiCpuPkg/Library/SmmCpuFeaturesLib/Ia32/SmiEntry.S b/UefiCpuPkg/Library/SmmCpuFeaturesLib/Ia32/SmiEntry.S
deleted file mode 100644 (file)
index 4c0f8c8..0000000
+++ /dev/null
@@ -1,278 +0,0 @@
-#------------------------------------------------------------------------------\r
-#\r
-# Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>\r
-# This program and the accompanying materials\r
-# are licensed and made available under the terms and conditions of the BSD License\r
-# which accompanies this distribution.  The full text of the license may be found at\r
-# http://opensource.org/licenses/bsd-license.php.\r
-#\r
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-#\r
-# Module Name:\r
-#\r
-#   SmiEntry.S\r
-#\r
-# Abstract:\r
-#\r
-#   Code template of the SMI handler for a particular processor\r
-#\r
-#------------------------------------------------------------------------------\r
-\r
-ASM_GLOBAL  ASM_PFX(gcStmSmiHandlerTemplate)\r
-ASM_GLOBAL  ASM_PFX(gcStmSmiHandlerSize)\r
-ASM_GLOBAL  ASM_PFX(gcStmSmiHandlerOffset)\r
-ASM_GLOBAL  ASM_PFX(gStmSmiCr3)\r
-ASM_GLOBAL  ASM_PFX(gStmSmiStack)\r
-ASM_GLOBAL  ASM_PFX(gStmSmbase)\r
-ASM_GLOBAL  ASM_PFX(gStmXdSupported)\r
-ASM_GLOBAL  ASM_PFX(FeaturePcdGet (PcdCpuSmmStackGuard))\r
-ASM_GLOBAL  ASM_PFX(gStmSmiHandlerIdtr)\r
-\r
-.equ            MSR_IA32_MISC_ENABLE, 0x1A0\r
-.equ            MSR_EFER, 0xc0000080\r
-.equ            MSR_EFER_XD, 0x800\r
-\r
-#\r
-# Constants relating to TXT_PROCESSOR_SMM_DESCRIPTOR\r
-#\r
-.equ            DSC_OFFSET, 0xfb00\r
-.equ            DSC_GDTPTR, 0x48\r
-.equ            DSC_GDTSIZ, 0x50\r
-.equ            DSC_CS, 0x14\r
-.equ            DSC_DS, 0x16\r
-.equ            DSC_SS, 0x18\r
-.equ            DSC_OTHERSEG, 0x1A\r
-\r
-.equ            PROTECT_MODE_CS, 0x08\r
-.equ            PROTECT_MODE_DS, 0x20\r
-.equ            TSS_SEGMENT,     0x40\r
-\r
-    .text\r
-ASM_PFX(gcStmSmiHandlerTemplate):\r
-\r
-_StmSmiEntryPoint:\r
-    .byte 0xbb                          # mov bx, imm16\r
-    .word _StmGdtDesc - _StmSmiEntryPoint + 0x8000\r
-    .byte 0x2e,0xa1                     # mov ax, cs:[offset16]\r
-    .word DSC_OFFSET + DSC_GDTSIZ\r
-    decl    %eax\r
-    movl    %eax, %cs:(%edi)            # mov cs:[bx], ax\r
-    .byte 0x66,0x2e,0xa1                # mov eax, cs:[offset16]\r
-    .word   DSC_OFFSET + DSC_GDTPTR\r
-    movw    %ax, %cs:2(%edi)\r
-    movw    %ax, %bp                    # ebp = GDT base\r
-    .byte 0x66\r
-    lgdt    %cs:(%edi)\r
-# Patch ProtectedMode Segment\r
-    .byte   0xb8                        # mov ax, imm16\r
-    .word   PROTECT_MODE_CS             # set AX for segment directly\r
-    movl    %eax, %cs:-2(%edi)          # mov cs:[bx - 2], ax\r
-# Patch ProtectedMode entry\r
-    .byte 0x66, 0xbf                    # mov edi, SMBASE\r
-ASM_PFX(gStmSmbase): .space 4\r
-    .byte 0x67\r
-    lea     ((Start32bit - _StmSmiEntryPoint) + 0x8000)(%edi), %ax\r
-    movw     %ax, %cs:-6(%edi)\r
-    movl    %cr0, %ebx\r
-    .byte 0x66\r
-    andl    $0x9ffafff3, %ebx\r
-    .byte 0x66\r
-    orl     $0x23, %ebx\r
-    movl    %ebx, %cr0\r
-    .byte 0x66,0xea\r
-    .space  4\r
-    .space  2\r
-_StmGdtDesc:   .space 4\r
-            .space 2\r
-\r
-Start32bit:\r
-    movw    $PROTECT_MODE_DS, %ax\r
-    movl    %eax,%ds\r
-    movl    %eax,%es\r
-    movl    %eax,%fs\r
-    movl    %eax,%gs\r
-    movl    %eax,%ss\r
-    .byte   0xbc                          # mov esp, imm32\r
-ASM_PFX(gStmSmiStack): .space 4\r
-    movl    $ASM_PFX(gStmSmiHandlerIdtr), %eax\r
-    lidt    (%eax)\r
-    jmp     ProtFlatMode\r
-\r
-ProtFlatMode:\r
-    .byte   0xb8                           # mov eax, imm32\r
-ASM_PFX(gStmSmiCr3): .space 4\r
-    movl    %eax, %cr3\r
-#\r
-# Need to test for CR4 specific bit support\r
-#\r
-    movl    $1, %eax\r
-    cpuid                                  # use CPUID to determine if specific CR4 bits are supported\r
-    xorl    %eax, %eax                     # Clear EAX\r
-    testl   $BIT2, %edx                    # Check for DE capabilities\r
-    jz      L8\r
-    orl     $BIT3, %eax\r
-L8:\r
-    testl   $BIT6, %edx                    # Check for PAE capabilities\r
-    jz      L9\r
-    orl     $BIT5, %eax\r
-L9:\r
-    testl   $BIT7, %edx                    # Check for MCE capabilities\r
-    jz      L10\r
-    orl     $BIT6, %eax\r
-L10:\r
-    testl   $BIT24, %edx                   # Check for FXSR capabilities\r
-    jz      L11\r
-    orl     $BIT9, %eax\r
-L11:\r
-    testl   $BIT25, %edx                   # Check for SSE capabilities\r
-    jz      L12\r
-    orl     $BIT10, %eax\r
-L12:                                       # as cr4.PGE is not set here, refresh cr3\r
-    movl    %eax, %cr4                     # in PreModifyMtrrs() to flush TLB.\r
-\r
-    cmpb    $0, ASM_PFX(FeaturePcdGet (PcdCpuSmmStackGuard))\r
-    jz      L5\r
-# Load TSS\r
-    movb    $0x89, (TSS_SEGMENT + 5)(%ebp) # clear busy flag\r
-    movl    $TSS_SEGMENT, %eax\r
-    ltrw    %ax\r
-L5:\r
-\r
-# enable NXE if supported\r
-    .byte   0xb0                           # mov al, imm8\r
-ASM_PFX(gStmXdSupported): .byte 1\r
-    cmpb    $0, %al\r
-    jz      SkipXd\r
-#\r
-# Check XD disable bit\r
-#\r
-    movl    $MSR_IA32_MISC_ENABLE, %ecx\r
-    rdmsr\r
-    pushl   %edx                           # save MSR_IA32_MISC_ENABLE[63-32]\r
-    testl   $BIT2, %edx                    # MSR_IA32_MISC_ENABLE[34]\r
-    jz      L13\r
-    andw    $0x0FFFB, %dx                  # clear XD Disable bit if it is set\r
-    wrmsr\r
-L13:\r
-    movl    $MSR_EFER, %ecx\r
-    rdmsr\r
-    orw     $MSR_EFER_XD,%ax               # enable NXE\r
-    wrmsr\r
-    jmp     XdDone\r
-SkipXd:\r
-    subl    $4, %esp\r
-XdDone:\r
-\r
-    movl    %cr0, %ebx\r
-    orl     $0x080010023, %ebx             # enable paging + WP + NE + MP + PE\r
-    movl    %ebx, %cr0\r
-    leal    DSC_OFFSET(%edi),%ebx\r
-    movw    DSC_DS(%ebx),%ax\r
-    movl    %eax, %ds\r
-    movw    DSC_OTHERSEG(%ebx),%ax\r
-    movl    %eax, %es\r
-    movl    %eax, %fs\r
-    movl    %eax, %gs\r
-    movw    DSC_SS(%ebx),%ax\r
-    movl    %eax, %ss\r
-\r
-CommonHandler:\r
-    movl    4(%esp), %ebx\r
-\r
-    pushl   %ebx\r
-    movl    $ASM_PFX(CpuSmmDebugEntry), %eax\r
-    call    *%eax\r
-    addl    $4, %esp\r
-\r
-    pushl   %ebx\r
-    movl    $ASM_PFX(SmiRendezvous), %eax\r
-    call    *%eax\r
-    addl    $4, %esp\r
-\r
-    pushl   %ebx\r
-    movl    $ASM_PFX(CpuSmmDebugExit), %eax\r
-    call    *%eax\r
-    addl    $4, %esp\r
-\r
-    movl    $ASM_PFX(gStmXdSupported), %eax\r
-    movb    (%eax), %al\r
-    cmpb    $0, %al\r
-    jz      L16\r
-    popl    %edx                        # get saved MSR_IA32_MISC_ENABLE[63-32]\r
-    testl   $BIT2, %edx\r
-    jz      L16\r
-    movl    $MSR_IA32_MISC_ENABLE, %ecx\r
-    rdmsr\r
-    orw     $BIT2, %dx                  # set XD Disable bit if it was set before entering into SMM\r
-    wrmsr\r
-\r
-L16:\r
-    rsm\r
-\r
-_StmSmiHandler:\r
-#\r
-# Check XD disable bit\r
-#\r
-    xorl    %esi, %esi\r
-    movl    $ASM_PFX(gStmXdSupported), %eax\r
-    movb    (%eax), %al\r
-    cmpb    $0, %al\r
-    jz      StmXdDone\r
-    movl    $MSR_IA32_MISC_ENABLE, %ecx\r
-    rdmsr\r
-    movl    %edx, %esi                     # save MSR_IA32_MISC_ENABLE[63-32]\r
-    testl   $BIT2, %edx                    # MSR_IA32_MISC_ENABLE[34]\r
-    jz      L14\r
-    andw    $0x0FFFB, %dx                  # clear XD Disable bit if it is set\r
-    wrmsr\r
-L14:\r
-    movl    $MSR_EFER, %ecx\r
-    rdmsr\r
-    orw     $MSR_EFER_XD,%ax               # enable NXE\r
-    wrmsr\r
-StmXdDone:\r
-    push    %esi\r
-\r
-    # below step is needed, because STM does not run above code.\r
-    # we have to run below code to set IDT/CR0/CR4\r
-    movl    $ASM_PFX(gStmSmiHandlerIdtr), %eax\r
-    lidt    (%eax)\r
-\r
-    movl    %cr0, %eax\r
-    orl     $0x80010023, %eax           # enable paging + WP + NE + MP + PE\r
-    movl    %eax, %cr0\r
-#\r
-# Need to test for CR4 specific bit support\r
-#\r
-    movl    $1, %eax\r
-    cpuid                               # use CPUID to determine if specific CR4 bits are supported\r
-    movl    %cr4, %eax                  # init EAX\r
-    testl   $BIT2, %edx                 # Check for DE capabilities\r
-    jz      L28\r
-    orl     $BIT3, %eax\r
-L28:\r
-    testl   $BIT6, %edx                 # Check for PAE capabilities\r
-    jz      L29\r
-    orl     $BIT5, %eax\r
-L29:\r
-    testl   $BIT7, %edx                 # Check for MCE capabilities\r
-    jz      L30\r
-    orl     $BIT6, %eax\r
-L30:\r
-    testl   $BIT24, %edx                # Check for FXSR capabilities\r
-    jz      L31\r
-    orl     $BIT9, %eax\r
-L31:\r
-    testl   $BIT25, %edx                # Check for SSE capabilities\r
-    jz      L32\r
-    orl     $BIT10, %eax\r
-L32:                                    # as cr4.PGE is not set here, refresh cr3\r
-    movl    %eax, %cr4                  # in PreModifyMtrrs() to flush TLB.\r
-    # STM init finish\r
-    jmp     CommonHandler\r
-\r
-\r
-ASM_PFX(gcStmSmiHandlerSize)  :  .word      . - _StmSmiEntryPoint\r
-ASM_PFX(gcStmSmiHandlerOffset):  .word      _StmSmiHandler - _StmSmiEntryPoint\r
-\r
diff --git a/UefiCpuPkg/Library/SmmCpuFeaturesLib/Ia32/SmiException.S b/UefiCpuPkg/Library/SmmCpuFeaturesLib/Ia32/SmiException.S
deleted file mode 100644 (file)
index 7d0057a..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
-#------------------------------------------------------------------------------\r
-#\r
-# Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>\r
-# This program and the accompanying materials\r
-# are licensed and made available under the terms and conditions of the BSD License\r
-# which accompanies this distribution.  The full text of the license may be found at\r
-# http://opensource.org/licenses/bsd-license.php.\r
-#\r
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-#\r
-# Module Name:\r
-#\r
-#   SmiException.S\r
-#\r
-# Abstract:\r
-#\r
-#   Exception handlers used in SM mode\r
-#\r
-#------------------------------------------------------------------------------\r
-\r
-ASM_GLOBAL  ASM_PFX(gcStmPsd)\r
-\r
-ASM_GLOBAL  ASM_PFX(SmmStmExceptionHandler)\r
-ASM_GLOBAL  ASM_PFX(SmmStmSetup)\r
-ASM_GLOBAL  ASM_PFX(SmmStmTeardown)\r
-\r
-.equ  MSR_IA32_MISC_ENABLE, 0x1A0\r
-.equ  MSR_EFER,             0xc0000080\r
-.equ  MSR_EFER_XD,          0x800\r
-\r
-.equ  CODE_SEL,          0x08\r
-.equ  DATA_SEL,          0x20\r
-.equ  TSS_SEL,           0x40\r
-\r
-    .data\r
-\r
-ASM_PFX(gcStmPsd):\r
-            .ascii  "TXTPSSIG"\r
-            .word      PSD_SIZE\r
-            .word      1              # Version\r
-            .long      0              # LocalApicId\r
-            .byte      0x5            # Cr4Pse;Cr4Pae;Intel64Mode;ExecutionDisableOutsideSmrr\r
-            .byte      0              # BIOS to STM\r
-            .byte      0              # STM to BIOS\r
-            .byte      0\r
-            .word      CODE_SEL\r
-            .word      DATA_SEL\r
-            .word      DATA_SEL\r
-            .word      DATA_SEL\r
-            .word      TSS_SEL\r
-            .word      0\r
-            .quad      0              # SmmCr3\r
-            .long      ASM_PFX(_OnStmSetup)\r
-            .long      0\r
-            .long      ASM_PFX(_OnStmTeardown)\r
-            .long      0\r
-            .quad      0              # SmmSmiHandlerRip - SMM guest entrypoint\r
-            .quad      0              # SmmSmiHandlerRsp\r
-            .quad      0\r
-            .long      0\r
-            .long      0x80010100     # RequiredStmSmmRevId\r
-            .long      ASM_PFX(_OnException)\r
-            .long      0\r
-            .quad      0              # ExceptionStack\r
-            .word      DATA_SEL\r
-            .word      0x1F           # ExceptionFilter\r
-            .long      0\r
-            .quad      0\r
-            .quad      0              # BiosHwResourceRequirementsPtr\r
-            .quad      0              # AcpiRsdp\r
-            .byte      0              # PhysicalAddressBits\r
-.equ  PSD_SIZE,  . - ASM_PFX(gcStmPsd)\r
-\r
-    .text\r
-\r
-#------------------------------------------------------------------------------\r
-# SMM Exception handlers\r
-#------------------------------------------------------------------------------\r
-ASM_GLOBAL ASM_PFX(_OnException)\r
-ASM_PFX(_OnException):\r
-    movl  %esp, %ecx\r
-    pushl %ecx\r
-    call  ASM_PFX(SmmStmExceptionHandler)\r
-    addl  $4, %esp\r
-\r
-    movl  %eax, %ebx\r
-    movl  $4, %eax\r
-    .byte 0xf, 0x1, 0xc1 # VMCALL\r
-    jmp .\r
-\r
-ASM_GLOBAL ASM_PFX(_OnStmSetup)\r
-ASM_PFX(_OnStmSetup):\r
-#\r
-# Check XD disable bit\r
-#\r
-    xorl    %esi, %esi\r
-    movl    $ASM_PFX(gStmXdSupported), %eax\r
-    movb    (%eax), %al\r
-    cmpb    $0, %al\r
-    jz      StmXdDone1\r
-    movl    $MSR_IA32_MISC_ENABLE, %ecx\r
-    rdmsr\r
-    movl    %edx, %esi                     # save MSR_IA32_MISC_ENABLE[63-32]\r
-    testl   $BIT2, %edx                    # MSR_IA32_MISC_ENABLE[34]\r
-    jz      L13\r
-    andw    $0x0FFFB, %dx                  # clear XD Disable bit if it is set\r
-    wrmsr\r
-L13:\r
-    movl    $MSR_EFER, %ecx\r
-    rdmsr\r
-    orw     $MSR_EFER_XD,%ax               # enable NXE\r
-    wrmsr\r
-StmXdDone1:\r
-    push    %esi\r
-\r
-  call ASM_PFX(SmmStmSetup)\r
-\r
-    movl    $ASM_PFX(gStmXdSupported), %eax\r
-    movb    (%eax), %al\r
-    cmpb    $0, %al\r
-    jz      L14\r
-    popl    %edx                        # get saved MSR_IA32_MISC_ENABLE[63-32]\r
-    testl   $BIT2, %edx\r
-    jz      L14\r
-    movl    $MSR_IA32_MISC_ENABLE, %ecx\r
-    rdmsr\r
-    orw     $BIT2, %dx                  # set XD Disable bit if it was set before entering into SMM\r
-    wrmsr\r
-L14:\r
-\r
-  rsm\r
-\r
-ASM_GLOBAL ASM_PFX(_OnStmTeardown)\r
-ASM_PFX(_OnStmTeardown):\r
-#\r
-# Check XD disable bit\r
-#\r
-    xorl    %esi, %esi\r
-    movl    $ASM_PFX(gStmXdSupported), %eax\r
-    movb    (%eax), %al\r
-    cmpb    $0, %al\r
-    jz      StmXdDone2\r
-    movl    $MSR_IA32_MISC_ENABLE, %ecx\r
-    rdmsr\r
-    movl    %edx, %esi                     # save MSR_IA32_MISC_ENABLE[63-32]\r
-    testl   $BIT2, %edx                    # MSR_IA32_MISC_ENABLE[34]\r
-    jz      L15\r
-    andw    $0x0FFFB, %dx                  # clear XD Disable bit if it is set\r
-    wrmsr\r
-L15:\r
-    movl    $MSR_EFER, %ecx\r
-    rdmsr\r
-    orw     $MSR_EFER_XD,%ax               # enable NXE\r
-    wrmsr\r
-StmXdDone2:\r
-    push    %esi\r
-\r
-  call ASM_PFX(SmmStmTeardown)\r
-\r
-    movl    $ASM_PFX(gStmXdSupported), %eax\r
-    movb    (%eax), %al\r
-    cmpb    $0, %al\r
-    jz      L16\r
-    popl    %edx                        # get saved MSR_IA32_MISC_ENABLE[63-32]\r
-    testl   $BIT2, %edx\r
-    jz      L16\r
-    movl    $MSR_IA32_MISC_ENABLE, %ecx\r
-    rdmsr\r
-    orw     $BIT2, %dx                  # set XD Disable bit if it was set before entering into SMM\r
-    wrmsr\r
-L16:\r
-\r
-  rsm\r
index c700644427d491204cfbdc9abb8488a729d045d3..7fd0cc5d04e7f90464f25dfff7f1ef989943214c 100644 (file)
@@ -35,9 +35,6 @@
   Ia32/SmiEntry.nasm\r
   Ia32/SmiException.nasm\r
 \r
-  Ia32/SmiEntry.S\r
-  Ia32/SmiException.S\r
-\r
 [Sources.X64]\r
   X64/SmmStmSupport.c\r
 \r
@@ -45,9 +42,6 @@
   X64/SmiEntry.nasm\r
   X64/SmiException.nasm\r
 \r
-  X64/SmiEntry.S\r
-  X64/SmiException.S\r
-\r
 [Packages]\r
   MdePkg/MdePkg.dec\r
   MdeModulePkg/MdeModulePkg.dec\r
diff --git a/UefiCpuPkg/Library/SmmCpuFeaturesLib/X64/SmiEntry.S b/UefiCpuPkg/Library/SmmCpuFeaturesLib/X64/SmiEntry.S
deleted file mode 100644 (file)
index 1f9f91c..0000000
+++ /dev/null
@@ -1,282 +0,0 @@
-#------------------------------------------------------------------------------\r
-#\r
-# Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>\r
-# This program and the accompanying materials\r
-# are licensed and made available under the terms and conditions of the BSD License\r
-# which accompanies this distribution.  The full text of the license may be found at\r
-# http://opensource.org/licenses/bsd-license.php.\r
-#\r
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-#\r
-# Module Name:\r
-#\r
-#   SmiEntry.S\r
-#\r
-# Abstract:\r
-#\r
-#   Code template of the SMI handler for a particular processor\r
-#\r
-#------------------------------------------------------------------------------\r
-\r
-ASM_GLOBAL  ASM_PFX(gcStmSmiHandlerTemplate)\r
-ASM_GLOBAL  ASM_PFX(gcStmSmiHandlerSize)\r
-ASM_GLOBAL  ASM_PFX(gcStmSmiHandlerOffset)\r
-ASM_GLOBAL  ASM_PFX(gStmSmiCr3)\r
-ASM_GLOBAL  ASM_PFX(gStmSmiStack)\r
-ASM_GLOBAL  ASM_PFX(gStmSmbase)\r
-ASM_GLOBAL  ASM_PFX(gStmXdSupported)\r
-ASM_GLOBAL  ASM_PFX(gStmSmiHandlerIdtr)\r
-\r
-.equ            MSR_IA32_MISC_ENABLE, 0x1A0\r
-.equ            MSR_EFER, 0xc0000080\r
-.equ            MSR_EFER_XD, 0x800\r
-\r
-#\r
-# Constants relating to TXT_PROCESSOR_SMM_DESCRIPTOR\r
-#\r
-.equ            DSC_OFFSET, 0xfb00\r
-.equ            DSC_GDTPTR, 0x48\r
-.equ            DSC_GDTSIZ, 0x50\r
-.equ            DSC_CS, 0x14\r
-.equ            DSC_DS, 0x16\r
-.equ            DSC_SS, 0x18\r
-.equ            DSC_OTHERSEG, 0x1a\r
-#\r
-# Constants relating to CPU State Save Area\r
-#\r
-.equ            SSM_DR6,   0xffd0\r
-.equ            SSM_DR7,   0xffc8\r
-\r
-.equ            PROTECT_MODE_CS, 0x08\r
-.equ            PROTECT_MODE_DS, 0x20\r
-.equ            LONG_MODE_CS, 0x38\r
-.equ            TSS_SEGMENT, 0x40\r
-.equ            GDT_SIZE, 0x50\r
-\r
-    .text\r
-\r
-ASM_PFX(gcStmSmiHandlerTemplate):\r
-\r
-_StmSmiEntryPoint:\r
-    #\r
-    # The encoding of BX in 16-bit addressing mode is the same as of RDI in 64-\r
-    # bit addressing mode. And that coincidence has been used in the following\r
-    # "64-bit like" 16-bit code. Be aware that once RDI is referenced as a\r
-    # base address register, it is actually BX that is referenced.\r
-    #\r
-    .byte 0xbb                          # mov bx, imm16\r
-    .word _StmGdtDesc - _StmSmiEntryPoint + 0x8000\r
-    #\r
-    # fix GDT descriptor\r
-    #\r
-    .byte 0x2e,0xa1                     # mov ax, cs:[offset16]\r
-    .word      DSC_OFFSET + DSC_GDTSIZ\r
-    .byte 0x48                          # dec ax\r
-    .byte 0x2e\r
-    movl    %eax, (%rdi)                # mov cs:[bx], ax\r
-    .byte 0x66,0x2e,0xa1                # mov eax, cs:[offset16]\r
-    .word      DSC_OFFSET + DSC_GDTPTR\r
-    .byte 0x2e\r
-    movw    %ax, 2(%rdi)\r
-    .byte 0x66,0x2e\r
-    lgdt    (%rdi)\r
-    #\r
-    # Patch ProtectedMode Segment\r
-    #\r
-    .byte 0xb8\r
-    .word PROTECT_MODE_CS\r
-    .byte 0x2e\r
-    movl    %eax, -2(%rdi)\r
-    #\r
-    # Patch ProtectedMode entry\r
-    #\r
-    .byte 0x66, 0xbf                    # mov edi, SMBASE\r
-ASM_PFX(gStmSmbase): .space 4\r
-    lea     ((ProtectedMode - _StmSmiEntryPoint) + 0x8000)(%edi), %ax\r
-    .byte 0x2e\r
-    movw    %ax, -6(%rdi)\r
-    #\r
-    # Switch into ProtectedMode\r
-    #\r
-    movq    %cr0, %rbx\r
-    .byte 0x66\r
-    andl    $0x9ffafff3, %ebx\r
-    .byte 0x66\r
-    orl     $0x00000023, %ebx\r
-\r
-    movq    %rbx, %cr0\r
-    .byte 0x66, 0xea\r
-    .space 6\r
-\r
-_StmGdtDesc:    .space  6\r
-\r
-ProtectedMode:\r
-    movw    $PROTECT_MODE_DS, %ax\r
-    movl    %eax, %ds\r
-    movl    %eax, %es\r
-    movl    %eax, %fs\r
-    movl    %eax, %gs\r
-    movl    %eax, %ss\r
-    .byte   0xbc                       # mov esp, imm32\r
-ASM_PFX(gStmSmiStack):   .space  4\r
-    jmp     ProtFlatMode\r
-\r
-ProtFlatMode:\r
-    .byte   0xb8\r
-ASM_PFX(gStmSmiCr3):    .space  4\r
-    movq    %rax, %cr3\r
-    movl    $0x668,%eax                 # as cr4.PGE is not set here, refresh cr3\r
-    movq    %rax, %cr4                  # in PreModifyMtrrs() to flush TLB.\r
-# Load TSS\r
-    subl    $8, %esp                    # reserve room in stack\r
-    sgdt    (%rsp)\r
-    movl    2(%rsp), %eax               # eax = GDT base\r
-    addl    $8, %esp\r
-    movb    $0x89, %dl\r
-    movb    %dl, (TSS_SEGMENT + 5)(%rax) # clear busy flag\r
-    movl    $TSS_SEGMENT, %eax\r
-    ltr     %ax\r
-\r
-# enable NXE if supported\r
-    .byte   0xb0                        # mov al, imm8\r
-ASM_PFX(gStmXdSupported): .byte 1\r
-    cmpb    $0, %al\r
-    jz      SkipXd\r
-#\r
-# Check XD disable bit\r
-#\r
-    movl    $MSR_IA32_MISC_ENABLE, %ecx\r
-    rdmsr\r
-    subl    $4, %esp\r
-    pushq   %rdx                       # save MSR_IA32_MISC_ENABLE[63-32]\r
-    testl   $BIT2, %edx                # MSR_IA32_MISC_ENABLE[34]\r
-    jz      L13\r
-    andw    $0x0FFFB, %dx              # clear XD Disable bit if it is set\r
-    wrmsr\r
-L13:\r
-    movl    $MSR_EFER, %ecx\r
-    rdmsr\r
-    orw     $MSR_EFER_XD,%ax            # enable NXE\r
-    wrmsr\r
-    jmp     XdDone\r
-SkipXd:\r
-    subl    $8, %esp\r
-XdDone:\r
-\r
-    #\r
-    # Switch to LongMode\r
-    #\r
-    pushq    $LONG_MODE_CS                # push cs hardcore here\r
-    call     Base                         # push return address for retf later\r
-Base:\r
-    addl    $(LongMode - Base), (%rsp)  # offset for far retf, seg is the 1st arg\r
-\r
-    movl    $MSR_EFER, %ecx\r
-    rdmsr\r
-    orb     $1,%ah                      # enable LME\r
-    wrmsr\r
-    movq    %cr0, %rbx\r
-    orl     $0x080010023, %ebx          # enable paging + WP + NE + MP + PE\r
-    movq    %rbx, %cr0\r
-    retf\r
-LongMode:                               # long mode (64-bit code) starts here\r
-    movabsq $ASM_PFX(gStmSmiHandlerIdtr), %rax\r
-    lidt    (%rax)\r
-    lea     (DSC_OFFSET)(%rdi), %ebx\r
-    movw    DSC_DS(%rbx), %ax\r
-    movl    %eax,%ds\r
-    movw    DSC_OTHERSEG(%rbx), %ax\r
-    movl    %eax,%es\r
-    movl    %eax,%fs\r
-    movl    %eax,%gs\r
-    movw    DSC_SS(%rbx), %ax\r
-    movl    %eax,%ss\r
-\r
-CommonHandler:\r
-    movq    8(%rsp), %rbx\r
-    # Save FP registers\r
-\r
-    subq    $0x200, %rsp\r
-    .byte   0x48                        # FXSAVE64\r
-    fxsave  (%rsp)\r
-\r
-    addq    $-0x20, %rsp\r
-\r
-    movq    %rbx, %rcx\r
-    movabsq $ASM_PFX(CpuSmmDebugEntry), %rax\r
-    call    *%rax\r
-\r
-    movq    %rbx, %rcx\r
-    movabsq $ASM_PFX(SmiRendezvous), %rax\r
-    call    *%rax\r
-\r
-    movq    %rbx, %rcx\r
-    movabsq $ASM_PFX(CpuSmmDebugExit), %rax\r
-    call    *%rax\r
-\r
-    addq    $0x20, %rsp\r
-\r
-    #\r
-    # Restore FP registers\r
-    #\r
-    .byte   0x48                        # FXRSTOR64\r
-    fxrstor (%rsp)\r
-\r
-    addq    $0x200, %rsp\r
-\r
-    movabsq $ASM_PFX(gStmXdSupported), %rax\r
-    movb    (%rax), %al\r
-    cmpb    $0, %al\r
-    jz      L16\r
-    popq    %rdx                        # get saved MSR_IA32_MISC_ENABLE[63-32]\r
-    testl   $BIT2, %edx\r
-    jz      L16\r
-    movl    $MSR_IA32_MISC_ENABLE, %ecx\r
-    rdmsr\r
-    orw     $BIT2, %dx                  # set XD Disable bit if it was set before entering into SMM\r
-    wrmsr\r
-\r
-L16:\r
-    rsm\r
-\r
-_StmSmiHandler:\r
-#\r
-# Check XD disable bit\r
-#\r
-    xorq    %r8, %r8\r
-    movabsq $ASM_PFX(gStmXdSupported), %rax\r
-    movb    (%rax), %al\r
-    cmpb    $0, %al\r
-    jz      StmXdDone\r
-    movl    $MSR_IA32_MISC_ENABLE, %ecx\r
-    rdmsr\r
-    movq    %rdx, %r8                  # save MSR_IA32_MISC_ENABLE[63-32]\r
-    testl   $BIT2, %edx                # MSR_IA32_MISC_ENABLE[34]\r
-    jz      L14\r
-    andw    $0x0FFFB, %dx              # clear XD Disable bit if it is set\r
-    wrmsr\r
-L14:\r
-    movl    $MSR_EFER, %ecx\r
-    rdmsr\r
-    orw     $MSR_EFER_XD,%ax            # enable NXE\r
-    wrmsr\r
-StmXdDone:\r
-    pushq   %r8\r
-\r
-    # below step is needed, because STM does not run above code.\r
-    # we have to run below code to set IDT/CR0/CR4\r
-    movabsq $ASM_PFX(gStmSmiHandlerIdtr), %rax\r
-    lidt    (%rax)\r
-\r
-    movq    %cr0, %rax\r
-    orl     $0x80010023, %eax\r
-    movq    %rax, %cr0\r
-    movq    %cr4, %rax\r
-    movl    $0x668, %eax                # as cr4.PGE is not set here, refresh cr3\r
-    movq    %rax, %cr4                  # in PreModifyMtrrs() to flush TLB.\r
-    # STM init finish\r
-    jmp     CommonHandler\r
-\r
-ASM_PFX(gcStmSmiHandlerSize)  :  .word      . - _StmSmiEntryPoint\r
-ASM_PFX(gcStmSmiHandlerOffset):  .word      _StmSmiHandler - _StmSmiEntryPoint\r
diff --git a/UefiCpuPkg/Library/SmmCpuFeaturesLib/X64/SmiException.S b/UefiCpuPkg/Library/SmmCpuFeaturesLib/X64/SmiException.S
deleted file mode 100644 (file)
index 4d0cd9a..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-#------------------------------------------------------------------------------\r
-#\r
-# Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>\r
-# This program and the accompanying materials\r
-# are licensed and made available under the terms and conditions of the BSD License\r
-# which accompanies this distribution.  The full text of the license may be found at\r
-# http://opensource.org/licenses/bsd-license.php.\r
-#\r
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-#\r
-# Module Name:\r
-#\r
-#   SmiException.S\r
-#\r
-# Abstract:\r
-#\r
-#   Exception handlers used in SM mode\r
-#\r
-#------------------------------------------------------------------------------\r
-\r
-ASM_GLOBAL  ASM_PFX(gcStmPsd)\r
-\r
-ASM_GLOBAL  ASM_PFX(SmmStmExceptionHandler)\r
-ASM_GLOBAL  ASM_PFX(SmmStmSetup)\r
-ASM_GLOBAL  ASM_PFX(SmmStmTeardown)\r
-\r
-.equ  CODE_SEL,             0x38\r
-.equ  DATA_SEL,             0x20\r
-.equ  TR_SEL,               0x40\r
-\r
-.equ  MSR_IA32_MISC_ENABLE, 0x1A0\r
-.equ  MSR_EFER,             0x0c0000080\r
-.equ  MSR_EFER_XD,          0x0800\r
-\r
-    .data\r
-\r
-#\r
-# This structure serves as a template for all processors.\r
-#\r
-ASM_PFX(gcStmPsd):\r
-            .ascii     "TXTPSSIG"\r
-            .word      PSD_SIZE\r
-            .word      1              # Version\r
-            .long      0              # LocalApicId\r
-            .byte      0xF            # Cr4Pse;Cr4Pae;Intel64Mode;ExecutionDisableOutsideSmrr\r
-            .byte      0              # BIOS to STM\r
-            .byte      0              # STM to BIOS\r
-            .byte      0\r
-            .word      CODE_SEL\r
-            .word      DATA_SEL\r
-            .word      DATA_SEL\r
-            .word      DATA_SEL\r
-            .word      TR_SEL\r
-            .word      0\r
-            .quad      0              # SmmCr3\r
-            .quad      ASM_PFX(_OnStmSetup)\r
-            .quad      ASM_PFX(_OnStmTeardown)\r
-            .quad      0              # SmmSmiHandlerRip - SMM guest entrypoint\r
-            .quad      0              # SmmSmiHandlerRsp\r
-            .quad      0\r
-            .long      0\r
-            .long      0x80010100     # RequiredStmSmmRevId\r
-            .quad      ASM_PFX(_OnException)\r
-            .quad      0              # ExceptionStack\r
-            .word      DATA_SEL\r
-            .word      0x1F           # ExceptionFilter\r
-            .long      0\r
-            .quad      0\r
-            .quad      0              # BiosHwResourceRequirementsPtr\r
-            .quad      0              # AcpiRsdp\r
-            .byte      0              # PhysicalAddressBits\r
-.equ  PSD_SIZE,  . - ASM_PFX(gcStmPsd)\r
-\r
-    .text\r
-#------------------------------------------------------------------------------\r
-# SMM Exception handlers\r
-#------------------------------------------------------------------------------\r
-\r
-ASM_GLOBAL ASM_PFX(_OnException)\r
-ASM_PFX(_OnException):\r
-    movq %rsp, %rcx\r
-    subq $0x28, %rsp\r
-    call ASM_PFX(SmmStmExceptionHandler)\r
-    addq $0x28, %rsp\r
-    movl %eax, %ebx\r
-    movl $4, %eax\r
-    .byte  0xf, 0x1, 0xc1 # VMCALL\r
-    jmp .\r
-\r
-ASM_GLOBAL ASM_PFX(_OnStmSetup)\r
-ASM_PFX(_OnStmSetup):\r
-#\r
-# Check XD disable bit\r
-#\r
-    xorq    %r8, %r8\r
-    movabsq $ASM_PFX(gStmXdSupported), %rax\r
-    movb    (%rax), %al\r
-    cmpb    $0, %al\r
-    jz      StmXdDone1\r
-    movl    $MSR_IA32_MISC_ENABLE, %ecx\r
-    rdmsr\r
-    movq    %rdx, %r8                  # save MSR_IA32_MISC_ENABLE[63-32]\r
-    testl   $BIT2, %edx                # MSR_IA32_MISC_ENABLE[34]\r
-    jz      L13\r
-    andw    $0x0FFFB, %dx              # clear XD Disable bit if it is set\r
-    wrmsr\r
-L13:\r
-    movl    $MSR_EFER, %ecx\r
-    rdmsr\r
-    orw     $MSR_EFER_XD,%ax            # enable NXE\r
-    wrmsr\r
-StmXdDone1:\r
-    pushq   %r8\r
-\r
-  subq $0x20, %rsp\r
-  call ASM_PFX(SmmStmSetup)\r
-  addq 0x20, %rsp\r
-\r
-    movabsq $ASM_PFX(gStmXdSupported), %rax\r
-    movb    (%rax), %al\r
-    cmpb    $0, %al\r
-    jz      L14\r
-    popq    %rdx                        # get saved MSR_IA32_MISC_ENABLE[63-32]\r
-    testl   $BIT2, %edx\r
-    jz      L14\r
-    movl    $MSR_IA32_MISC_ENABLE, %ecx\r
-    rdmsr\r
-    orw     $BIT2, %dx                  # set XD Disable bit if it was set before entering into SMM\r
-    wrmsr\r
-L14:\r
-\r
-  rsm\r
-\r
-ASM_GLOBAL ASM_PFX(_OnStmTeardown)\r
-ASM_PFX(_OnStmTeardown):\r
-#\r
-# Check XD disable bit\r
-#\r
-    xorq    %r8, %r8\r
-    movabsq $ASM_PFX(gStmXdSupported), %rax\r
-    movb    (%rax), %al\r
-    cmpb    $0, %al\r
-    jz      StmXdDone2\r
-    movl    $MSR_IA32_MISC_ENABLE, %ecx\r
-    rdmsr\r
-    movq    %rdx, %r8                  # save MSR_IA32_MISC_ENABLE[63-32]\r
-    testl   $BIT2, %edx                # MSR_IA32_MISC_ENABLE[34]\r
-    jz      L15\r
-    andw    $0x0FFFB, %dx              # clear XD Disable bit if it is set\r
-    wrmsr\r
-L15:\r
-    movl    $MSR_EFER, %ecx\r
-    rdmsr\r
-    orw     $MSR_EFER_XD,%ax            # enable NXE\r
-    wrmsr\r
-StmXdDone2:\r
-    pushq   %r8\r
-\r
-  subq $0x20, %rsp\r
-  call ASM_PFX(SmmStmTeardown)\r
-  addq $0x20, %rsp\r
-\r
-    movabsq $ASM_PFX(gStmXdSupported), %rax\r
-    movb    (%rax), %al\r
-    cmpb    $0, %al\r
-    jz      L16\r
-    popq    %rdx                        # get saved MSR_IA32_MISC_ENABLE[63-32]\r
-    testl   $BIT2, %edx\r
-    jz      L16\r
-    movl    $MSR_IA32_MISC_ENABLE, %ecx\r
-    rdmsr\r
-    orw     $BIT2, %dx                  # set XD Disable bit if it was set before entering into SMM\r
-    wrmsr\r
-L16:\r
-\r
-  rsm\r
-\r