From de243ee44476ccdb4979e5719cb7ac8a8c290565 Mon Sep 17 00:00:00 2001 From: vanjeff Date: Fri, 11 Jun 2010 08:24:01 +0000 Subject: 1.Restore BSP IDT table to AP when AP wakeup. 2.Restore Virtual wire mode on AP when AP wakeup. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10575 6f19259b-4bc3-4df7-8a09-765794883524 --- .../X64/AsmInclude.inc | 7 +++-- .../X64/MpFuncs.S | 7 ++++- .../X64/MpFuncs.asm | 35 ++++++++++++---------- 3 files changed, 30 insertions(+), 19 deletions(-) (limited to 'EdkCompatibilityPkg/Compatibility/MpServicesOnFrameworkMpServicesThunk/X64') diff --git a/EdkCompatibilityPkg/Compatibility/MpServicesOnFrameworkMpServicesThunk/X64/AsmInclude.inc b/EdkCompatibilityPkg/Compatibility/MpServicesOnFrameworkMpServicesThunk/X64/AsmInclude.inc index 073ce1c613..d0269760a6 100644 --- a/EdkCompatibilityPkg/Compatibility/MpServicesOnFrameworkMpServicesThunk/X64/AsmInclude.inc +++ b/EdkCompatibilityPkg/Compatibility/MpServicesOnFrameworkMpServicesThunk/X64/AsmInclude.inc @@ -1,7 +1,7 @@ ;------------------------------------------------------------------------------ ; Include file for X64 MpFuncs.asm ; -; Copyright (c) 2009, Intel Corporation. All rights reserved.
+; Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.
; This program and the accompanying materials ; are licensed and made available under the terms and conditions of the BSD License ; which accompanies this distribution. The full text of the license may be found at @@ -20,7 +20,8 @@ StackStartAddressLocation equ LockLocation + 08h StackSizeLocation equ LockLocation + 10h CProcedureLocation equ LockLocation + 18h GdtrLocation equ LockLocation + 20h -BufferStartLocation equ LockLocation + 2Ch -Cr3OffsetLocation equ LockLocation + 30h +IdtrLocation equ LockLocation + 2Ah +BufferStartLocation equ LockLocation + 34h +Cr3OffsetLocation equ LockLocation + 38h ;------------------------------------------------------------------------------- diff --git a/EdkCompatibilityPkg/Compatibility/MpServicesOnFrameworkMpServicesThunk/X64/MpFuncs.S b/EdkCompatibilityPkg/Compatibility/MpServicesOnFrameworkMpServicesThunk/X64/MpFuncs.S index dc21c144a8..2c9feb07b0 100644 --- a/EdkCompatibilityPkg/Compatibility/MpServicesOnFrameworkMpServicesThunk/X64/MpFuncs.S +++ b/EdkCompatibilityPkg/Compatibility/MpServicesOnFrameworkMpServicesThunk/X64/MpFuncs.S @@ -1,7 +1,7 @@ #------------------------------------------------------------------------------ # X64 assembly file for AP startup vector. # -# Copyright (c) 2009, Intel Corporation. All rights reserved.
+# Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.
# This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at @@ -66,6 +66,11 @@ RendezvousFunnelProcStart: .byte 0x66 # db 66h .byte 0x2E,0xF,0x1,0x14 # lgdt fword ptr cs:[si] + .byte 0xBE + .word IdtrLocation + .byte 0x66 # db 66h + .byte 0x2E,0xF,0x1,0x1C # lidt fword ptr cs:[si] + .byte 0x33,0xC0 # xor ax, ax .byte 0x8E,0xD8 # mov ds, ax diff --git a/EdkCompatibilityPkg/Compatibility/MpServicesOnFrameworkMpServicesThunk/X64/MpFuncs.asm b/EdkCompatibilityPkg/Compatibility/MpServicesOnFrameworkMpServicesThunk/X64/MpFuncs.asm index ad74c2dace..91bdb22451 100644 --- a/EdkCompatibilityPkg/Compatibility/MpServicesOnFrameworkMpServicesThunk/X64/MpFuncs.asm +++ b/EdkCompatibilityPkg/Compatibility/MpServicesOnFrameworkMpServicesThunk/X64/MpFuncs.asm @@ -1,7 +1,7 @@ ;------------------------------------------------------------------------------ ; X64 assembly file for AP startup vector. ; -; Copyright (c) 2009, Intel Corporation. All rights reserved.
+; Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.
; This program and the accompanying materials ; are licensed and made available under the terms and conditions of the BSD License ; which accompanies this distribution. The full text of the license may be found at @@ -14,7 +14,7 @@ .code -include AsmInclude.inc +include AsmInclude.inc ;------------------------------------------------------------------------------------- ;------------------------------------------------------------------------------------- @@ -34,7 +34,7 @@ RendezvousFunnelProcStart:: db 8ch, 0c8h ; mov ax, cs db 8eh, 0d8h ; mov ds, ax db 8eh, 0c0h ; mov es, ax - db 8eh, 0d0h ; mov ss, ax + db 8eh, 0d0h ; mov ss, ax db 33h, 0c0h ; xor ax, ax db 8eh, 0e0h ; mov fs, ax db 8eh, 0e8h ; mov gs, ax @@ -48,15 +48,20 @@ RendezvousFunnelProcStart:: db 0BEh dw Cr3OffsetLocation ; mov si, Cr3Location db 66h, 8Bh, 0Ch ; mov ecx,dword ptr [si] ; ECX is keeping the value of CR3 - + db 0BEh dw GdtrLocation ; mov si, GdtrProfile db 66h ; db 66h db 2Eh, 0Fh, 01h, 14h ; lgdt fword ptr cs:[si] + db 0BEh + dw IdtrLocation ; mov si, IdtrProfile + db 66h ; db 66h + db 2Eh, 0Fh, 01h, 1Ch ; lidt fword ptr cs:[si] + db 33h, 0C0h ; xor ax, ax db 8Eh, 0D8h ; mov ds, ax - + db 0Fh, 20h, 0C0h ; mov eax, cr0 ; Get control register 0 db 66h, 83h, 0C8h, 01h ; or eax, 000000001h ; Set PE bit (bit #0) db 0Fh, 22h, 0C0h ; mov cr0, eax @@ -81,25 +86,25 @@ ProtectedModeStart:: db 0Fh, 22h, 0E0h ; mov cr4, eax db 0Fh, 22h, 0D9h ; mov cr3, ecx - + db 8Bh, 0F2h ; mov esi, edx ; Save wakeup buffer address - + db 0B9h dd 0C0000080h ; mov ecx, 0c0000080h ; EFER MSR number. db 0Fh, 32h ; rdmsr ; Read EFER. db 0Fh, 0BAh, 0E8h, 08h ; bts eax, 8 ; Set LME=1. db 0Fh, 30h ; wrmsr ; Write EFER. - + db 0Fh, 20h, 0C0h ; mov eax, cr0 ; Read CR0. db 0Fh, 0BAh, 0E8h, 1Fh ; bts eax, 31 ; Set PG=1. db 0Fh, 22h, 0C0h ; mov cr0, eax ; Write CR0. LONG_JUMP:: - + db 67h, 0EAh ; far jump dd 0h ; 32-bit offset dw 38h ; 16-bit selector - + LongModeStart:: mov ax, 30h @@ -146,13 +151,13 @@ Releaselock:: sub rsp, 20h call rax add rsp, 20h - + GoToSleep:: cli hlt jmp $-2 - + RendezvousFunnelProc ENDP RendezvousFunnelProcEnd:: @@ -160,7 +165,7 @@ RendezvousFunnelProcEnd:: ;------------------------------------------------------------------------------------- ; AsmGetAddressMap (&AddressMap); ;------------------------------------------------------------------------------------- -AsmGetAddressMap PROC +AsmGetAddressMap PROC mov rax, offset RendezvousFunnelProcStart mov qword ptr [rcx], rax @@ -169,9 +174,9 @@ AsmGetAddressMap PROC mov qword ptr [rcx+18h], LongModeStart - RendezvousFunnelProcStart mov qword ptr [rcx+20h], LONG_JUMP - RendezvousFunnelProcStart mov qword ptr [rcx+28h], RendezvousFunnelProcEnd - RendezvousFunnelProcStart - + ret - + AsmGetAddressMap ENDP END -- cgit v1.2.3