Revision: 17994
          http://sourceforge.net/p/edk2/code/17994
Author:   vanjeff
Date:     2015-07-15 03:37:25 +0000 (Wed, 15 Jul 2015)
Log Message:
-----------
UefiCpuPkg/CpuMpPei: Get AP reset code size and far jump information

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jeff Fan <[email protected]>
Reviewed-by: Feng Tian <[email protected]>
Reviewed-by: Jiewen Yao <[email protected]>

Modified Paths:
--------------
    trunk/edk2/UefiCpuPkg/CpuMpPei/CpuMpPei.h
    trunk/edk2/UefiCpuPkg/CpuMpPei/Ia32/MpFuncs.asm
    trunk/edk2/UefiCpuPkg/CpuMpPei/Ia32/MpFuncs.nasm
    trunk/edk2/UefiCpuPkg/CpuMpPei/X64/MpFuncs.asm
    trunk/edk2/UefiCpuPkg/CpuMpPei/X64/MpFuncs.nasm

Modified: trunk/edk2/UefiCpuPkg/CpuMpPei/CpuMpPei.h
===================================================================
--- trunk/edk2/UefiCpuPkg/CpuMpPei/CpuMpPei.h   2015-07-15 03:36:51 UTC (rev 
17993)
+++ trunk/edk2/UefiCpuPkg/CpuMpPei/CpuMpPei.h   2015-07-15 03:37:25 UTC (rev 
17994)
@@ -23,6 +23,16 @@
 #include <Library/PeimEntryPoint.h>
 #include <Library/UefiCpuLib.h>
 
+//
+// AP reset code information
+//
+typedef struct {
+  UINT8             *RendezvousFunnelAddress;
+  UINTN             PModeEntryOffset;
+  UINTN             LModeEntryOffset;
+  UINTN             RendezvousFunnelSize;
+} MP_ASSEMBLY_ADDRESS_MAP;
+
 #pragma pack(1)
 
 typedef union {
@@ -62,7 +72,20 @@
 } MP_CPU_EXCHANGE_INFO;
 
 #pragma pack()
+
 /**
+  Assembly code to get starting address and size of the rendezvous entry for 
APs.
+  Information for fixing a jump instruction in the code is also returned.
+
+  @param AddressMap  Output buffer for address map information.
+**/
+VOID
+EFIAPI
+AsmGetAddressMap (
+  OUT MP_ASSEMBLY_ADDRESS_MAP    *AddressMap
+  );
+
+/**
   Assembly code to load GDT table and update segment accordingly.
 
   @param Gdtr   Pointer to GDT descriptor

Modified: trunk/edk2/UefiCpuPkg/CpuMpPei/Ia32/MpFuncs.asm
===================================================================
--- trunk/edk2/UefiCpuPkg/CpuMpPei/Ia32/MpFuncs.asm     2015-07-15 03:36:51 UTC 
(rev 17993)
+++ trunk/edk2/UefiCpuPkg/CpuMpPei/Ia32/MpFuncs.asm     2015-07-15 03:37:25 UTC 
(rev 17994)
@@ -144,7 +144,23 @@
 RendezvousFunnelProc   ENDP
 RendezvousFunnelProcEnd::
 
+;-------------------------------------------------------------------------------------
+;  AsmGetAddressMap (&AddressMap);
+;-------------------------------------------------------------------------------------
+AsmGetAddressMap   PROC  near C  PUBLIC
+    pushad
+    mov        ebp,esp
 
+    mov        ebx, dword ptr [ebp+24h]
+    mov        dword ptr [ebx], RendezvousFunnelProcStart
+    mov        dword ptr [ebx +  4h], Flat32Start - RendezvousFunnelProcStart
+    mov        dword ptr [ebx +  8h], 0
+    mov        dword ptr [ebx + 0ch], RendezvousFunnelProcEnd - 
RendezvousFunnelProcStart
+
+    popad
+    ret
+AsmGetAddressMap   ENDP
+
 AsmInitializeGdt   PROC  near C  PUBLIC
   push         ebp
   mov          ebp, esp

Modified: trunk/edk2/UefiCpuPkg/CpuMpPei/Ia32/MpFuncs.nasm
===================================================================
--- trunk/edk2/UefiCpuPkg/CpuMpPei/Ia32/MpFuncs.nasm    2015-07-15 03:36:51 UTC 
(rev 17993)
+++ trunk/edk2/UefiCpuPkg/CpuMpPei/Ia32/MpFuncs.nasm    2015-07-15 03:37:25 UTC 
(rev 17994)
@@ -132,7 +132,23 @@
     jmp        $                 ; never reach here
 RendezvousFunnelProcEnd:
 
+;-------------------------------------------------------------------------------------
+;  AsmGetAddressMap (&AddressMap);
+;-------------------------------------------------------------------------------------
+global ASM_PFX(AsmGetAddressMap)
+ASM_PFX(AsmGetAddressMap):
+    pushad
+    mov        ebp,esp
 
+    mov        ebx,  [ebp + 24h]
+    mov        dword [ebx], RendezvousFunnelProcStart
+    mov        dword [ebx +  4h], Flat32Start - RendezvousFunnelProcStart
+    mov        dword [ebx +  8h], 0
+    mov        dword [ebx + 0ch], RendezvousFunnelProcEnd - 
RendezvousFunnelProcStart
+
+    popad
+    ret
+
 global ASM_PFX(AsmInitializeGdt)
 ASM_PFX(AsmInitializeGdt):
   push         ebp

Modified: trunk/edk2/UefiCpuPkg/CpuMpPei/X64/MpFuncs.asm
===================================================================
--- trunk/edk2/UefiCpuPkg/CpuMpPei/X64/MpFuncs.asm      2015-07-15 03:36:51 UTC 
(rev 17993)
+++ trunk/edk2/UefiCpuPkg/CpuMpPei/X64/MpFuncs.asm      2015-07-15 03:37:25 UTC 
(rev 17994)
@@ -181,6 +181,17 @@
 RendezvousFunnelProc   ENDP
 RendezvousFunnelProcEnd::
 
+;-------------------------------------------------------------------------------------
+;  AsmGetAddressMap (&AddressMap);
+;-------------------------------------------------------------------------------------
+AsmGetAddressMap   PROC
+    mov        rax, offset RendezvousFunnelProcStart
+    mov        qword ptr [rcx], rax
+    mov        qword ptr [rcx +  8h], Flat32Start - RendezvousFunnelProcStart
+    mov        qword ptr [rcx + 10h], LongModeStart - RendezvousFunnelProcStart
+    mov        qword ptr [rcx + 18h], RendezvousFunnelProcEnd - 
RendezvousFunnelProcStart
+    ret
+AsmGetAddressMap   ENDP
 
 AsmInitializeGdt   PROC
     push       rbp

Modified: trunk/edk2/UefiCpuPkg/CpuMpPei/X64/MpFuncs.nasm
===================================================================
--- trunk/edk2/UefiCpuPkg/CpuMpPei/X64/MpFuncs.nasm     2015-07-15 03:36:51 UTC 
(rev 17993)
+++ trunk/edk2/UefiCpuPkg/CpuMpPei/X64/MpFuncs.nasm     2015-07-15 03:37:25 UTC 
(rev 17994)
@@ -175,6 +175,17 @@
 
 RendezvousFunnelProcEnd:
 
+;-------------------------------------------------------------------------------------
+;  AsmGetAddressMap (&AddressMap);
+;-------------------------------------------------------------------------------------
+global ASM_PFX(AsmGetAddressMap)
+ASM_PFX(AsmGetAddressMap):
+    mov        rax, ASM_PFX(RendezvousFunnelProc)
+    mov        qword [rcx], rax
+    mov        qword [rcx +  8h], Flat32Start - RendezvousFunnelProcStart
+    mov        qword [rcx + 10h], LongModeStart - RendezvousFunnelProcStart
+    mov        qword [rcx + 18h], RendezvousFunnelProcEnd - 
RendezvousFunnelProcStart
+    ret
 
 global ASM_PFX(AsmInitializeGdt)
 ASM_PFX(AsmInitializeGdt):


------------------------------------------------------------------------------
Don't Limit Your Business. Reach for the Cloud.
GigeNET's Cloud Solutions provide you with the tools and support that
you need to offload your IT needs and focus on growing your business.
Configured For All Businesses. Start Your Cloud Today.
https://www.gigenetcloud.com/
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits

Reply via email to