]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/BaseLib/Ia32/Thunk16.asm
1. Updated CpuFlushTlb() according to IA-64 programmer's guide
[mirror_edk2.git] / MdePkg / Library / BaseLib / Ia32 / Thunk16.asm
index 89d4f679b6bd9ede99cd65512d0f9c397503e25c..454b8905bc3eb876f949d3e5ac80bb99e57b9f54 100644 (file)
@@ -141,6 +141,12 @@ _ToUserCode PROC
     call    @Base                       ; push eip\r
 @Base:\r
     pop     bp                          ; ebp <- offset @Base\r
+    DB      67h                         ; address size override\r
+    push    [esp + sizeof (IA32_REGS) + 2]\r
+    lea     eax, [esi + (offset @RealMode - offset @Base)]\r
+    push    eax\r
+    retf\r
+@RealMode:\r
     mov     cs:[esi + (offset SavedSs - offset @Base)], edx\r
     mov     cs:[esi + (offset SavedEsp - offset @Base)], bx\r
     DB      66h\r
@@ -208,7 +214,9 @@ InternalAsmThunk16  PROC    USES    ebp ebx esi edi ds  es  fs  gs
     push    10h\r
     pop     ecx                         ; ecx <- selector for data segments\r
     lgdt    fword ptr [edx + (offset _16Gdtr - offset SavedCr0)]\r
+    pushfd\r
     call    fword ptr [edx + (offset _EntryPoint - offset SavedCr0)]\r
+    popfd\r
     lidt    fword ptr [esp + 36]        ; restore protected mode IDTR\r
     lea     eax, [ebp - sizeof (IA32_REGS)]\r
     ret\r