]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/BaseLib/X64/Thunk16.asm
1. Updated CpuFlushTlb() according to IA-64 programmer's guide
[mirror_edk2.git] / MdePkg / Library / BaseLib / X64 / Thunk16.asm
index 15aaa80090774af1e8a94a03ed398283bde3819a..3121867ebb41e4f886d8df7a924fcc48de0d6e19 100644 (file)
@@ -149,6 +149,11 @@ _ToUserCode PROC
     call    @Base                       ; push eip\r
 @Base:\r
     pop     bp                          ; ebp <- offset @Base\r
     call    @Base                       ; push eip\r
 @Base:\r
     pop     bp                          ; ebp <- offset @Base\r
+    push    [esp + sizeof (IA32_REGS) + 2]\r
+    lea     eax, [rsi + (offset @RealMode - offset @Base)]\r
+    push    rax\r
+    retf\r
+@RealMode:\r
     DB      2eh                         ; cs:\r
     mov     [rsi + (offset SavedSs - offset @Base)], edi\r
     DB      2eh                         ; cs:\r
     DB      2eh                         ; cs:\r
     mov     [rsi + (offset SavedSs - offset @Base)], edi\r
     DB      2eh                         ; cs:\r
@@ -222,7 +227,9 @@ InternalAsmThunk16  PROC    USES    rbp rbx rsi rdi
     push    10h\r
     pop     rdx                         ; rdx <- selector for data segments\r
     lgdt    fword ptr [rcx + (offset _16Gdtr - offset SavedCr4)]\r
     push    10h\r
     pop     rdx                         ; rdx <- selector for data segments\r
     lgdt    fword ptr [rcx + (offset _16Gdtr - offset SavedCr4)]\r
+    pushfq\r
     call    fword ptr [rcx + (offset _EntryPoint - offset SavedCr4)]\r
     call    fword ptr [rcx + (offset _EntryPoint - offset SavedCr4)]\r
+    popfq\r
     lidt    fword ptr [rsp + 38h]       ; restore protected mode IDTR\r
     lea     eax, [rbp - sizeof (IA32_REGS)]\r
     pop     gs\r
     lidt    fword ptr [rsp + 38h]       ; restore protected mode IDTR\r
     lea     eax, [rbp - sizeof (IA32_REGS)]\r
     pop     gs\r