]> git.proxmox.com Git - mirror_edk2.git/blobdiff - UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmiEntry.asm
Move SmmDebug feature from ASM to C.
[mirror_edk2.git] / UefiCpuPkg / PiSmmCpuDxeSmm / X64 / SmiEntry.asm
index 4d53db5b00da6c6ca961c69c73dd7e2e1a70617d..4f5c03c5cf5fe87a71b25d33be66d9e12531a163 100644 (file)
 ; Variables referenced by C code\r
 ;\r
 EXTERNDEF   SmiRendezvous:PROC\r
+EXTERNDEF   CpuSmmDebugEntry:PROC\r
+EXTERNDEF   CpuSmmDebugExit:PROC\r
 EXTERNDEF   gcSmiHandlerTemplate:BYTE\r
 EXTERNDEF   gcSmiHandlerSize:WORD\r
 EXTERNDEF   gSmiCr3:DWORD\r
 EXTERNDEF   gSmiStack:DWORD\r
 EXTERNDEF   gSmbase:DWORD\r
-EXTERNDEF   FeaturePcdGet (PcdCpuSmmDebug):BYTE\r
 EXTERNDEF   gSmiHandlerIdtr:FWORD\r
 \r
 \r
@@ -157,26 +158,7 @@ Base:
 ;   jmp     _SmiHandler                 ; instruction is not needed\r
 \r
 _SmiHandler:\r
-;\r
-; The following lines restore DR6 & DR7 before running C code. They are useful\r
-; when you want to enable hardware breakpoints in SMM.\r
-;\r
-; NOTE: These lines might not be appreciated in runtime since they might\r
-;       conflict with OS debugging facilities. Turn them off in RELEASE.\r
-;\r
-    mov     rax, offset FeaturePcdGet (PcdCpuSmmDebug) ;Get absolute address. Avoid RIP relative addressing\r
-    cmp     byte ptr [rax], 0\r
-    jz      @1\r
-\r
-    DB      48h, 8bh, 0dh               ; mov rcx, [rip + disp32]\r
-    DD      SSM_DR6 - ($ + 4 - _SmiEntryPoint + 8000h)\r
-    DB      48h, 8bh, 15h               ; mov rdx, [rip + disp32]\r
-    DD      SSM_DR7 - ($ + 4 - _SmiEntryPoint + 8000h)\r
-    mov     dr6, rcx\r
-    mov     dr7, rdx\r
-@1:\r
-    mov     rcx, [rsp]                  ; rcx <- CpuIndex\r
-    mov     rax, SmiRendezvous          ; rax <- absolute addr of SmiRedezvous\r
+    mov     rbx, [rsp]                  ; rbx <- CpuIndex\r
 \r
     ;\r
     ; Save FP registers\r
@@ -186,7 +168,19 @@ _SmiHandler:
     fxsave  [rsp]\r
 \r
     add     rsp, -20h\r
+\r
+    mov     rcx, rbx\r
+    mov     rax, CpuSmmDebugEntry\r
+    call    rax\r
+    \r
+    mov     rcx, rbx\r
+    mov     rax, SmiRendezvous          ; rax <- absolute addr of SmiRedezvous\r
+    call    rax\r
+    \r
+    mov     rcx, rbx\r
+    mov     rax, CpuSmmDebugExit\r
     call    rax\r
+    \r
     add     rsp, 20h\r
 \r
     ;\r
@@ -195,17 +189,6 @@ _SmiHandler:
     DB      48h                         ; FXRSTOR64\r
     fxrstor [rsp]\r
 \r
-    mov     rax, offset FeaturePcdGet (PcdCpuSmmDebug) ;Get absolute address. Avoid RIP relative addressing\r
-    cmp     byte ptr [rax], 0\r
-    jz      @2\r
-\r
-    mov     rdx, dr7\r
-    mov     rcx, dr6\r
-    DB      48h, 89h, 15h               ; mov [rip + disp32], rdx\r
-    DD      SSM_DR7 - ($ + 4 - _SmiEntryPoint + 8000h)\r
-    DB      48h, 89h, 0dh               ; mov [rip + disp32], rcx\r
-    DD      SSM_DR6 - ($ + 4 - _SmiEntryPoint + 8000h)\r
-@2:\r
     rsm\r
 \r
 gcSmiHandlerSize    DW      $ - _SmiEntryPoint\r