]> git.proxmox.com Git - mirror_edk2.git/blobdiff - UefiCpuPkg/Library/MpInitLib/Ia32/MpFuncs.nasm
UefiCpuPkg/MpInitLib: Add EnableExecuteDisable in MP_CPU_EXCHANGE_INFO
[mirror_edk2.git] / UefiCpuPkg / Library / MpInitLib / Ia32 / MpFuncs.nasm
index 0852a5bc848cfe00d4d108666620224d3d8e39c2..8bacb4283641370eab2be4d83a8e9894fe649cdf 100644 (file)
@@ -71,8 +71,8 @@ o32 lidt       [cs:si]
     xor        ax,  ax\r
     mov        ds,  ax\r
 \r
-    mov        eax, cr0                        ;Get control register 0\r
-    or         eax, 000000003h                 ;Set PE bit (bit #0) & MP\r
+    mov        eax, cr0                        ; Get control register 0\r
+    or         eax, 000000003h                 ; Set PE bit (bit #0) & MP\r
     mov        cr0, eax\r
 \r
     jmp        0:strict dword 0                ; far jump to protected mode\r
@@ -85,6 +85,36 @@ Flat32Start:                                   ; protected mode entry point
     mov        ss, dx\r
 \r
     mov        esi, ebx\r
+\r
+    mov         edi, esi\r
+    add         edi, EnableExecuteDisableLocation\r
+    cmp         byte [edi], 0\r
+    jz          SkipEnableExecuteDisable\r
+\r
+    ;\r
+    ; Enable IA32 PAE execute disable\r
+    ;\r
+\r
+    mov         ecx, 0xc0000080\r
+    rdmsr\r
+    bts         eax, 11\r
+    wrmsr\r
+\r
+    mov         edi, esi\r
+    add         edi, Cr3Location\r
+    mov         eax, dword [edi]\r
+    mov         cr3, eax\r
+\r
+    mov         eax, cr4\r
+    bts         eax, 5\r
+    mov         cr4, eax\r
+\r
+    mov         eax, cr0\r
+    bts         eax, 31\r
+    mov         cr0, eax\r
+\r
+SkipEnableExecuteDisable:\r
+\r
     mov        edi, esi\r
     add        edi, LockLocation\r
     mov        eax, NotVacantFlag\r
@@ -95,7 +125,7 @@ TestLock:
     jz         TestLock\r
 \r
     mov        edi, esi\r
-    add        edi, NumApsExecutingLoction\r
+    add        edi, NumApsExecutingLocation\r
     inc        dword [edi]\r
     mov        ebx, [edi]\r
 \r
@@ -133,9 +163,9 @@ CProcedureInvoke:
     add        edi, ApProcedureLocation\r
     mov        eax, [edi]\r
 \r
-    call       eax               ; invoke C function\r
+    call       eax               ; Invoke C function\r
 \r
-    jmp        $                 ; never reach here\r
+    jmp        $                 ; Never reach here\r
 RendezvousFunnelProcEnd:\r
 \r
 ;-------------------------------------------------------------------------------------\r