Add assembly code for AP reset vector and the definition of MP_CPU_EXCHANGE_INFO that are used to exchange the data between C code and assembly code when AP wake up. v4: 1. Copy MP_CPU_EXCHANGE_INFO from UefiCpuPkg/CpuMpPei/CpuMpPei.h 2. Copy MpEqu.inc and MpFuncs.nasm from UefiCpuPkg/CpuMpPei. v3: 1. Rename NumApsExecutingLoction to NumApsExecutingLocation 2. Add whitespace after ; in .nasm file Cc: Michael Kinney <michael.d.kinney@intel.com> Cc: Feng Tian <feng.tian@intel.com> Cc: Giri P Mudusuru <giri.p.mudusuru@intel.com> Cc: Laszlo Ersek <lersek@redhat.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jeff Fan <jeff.fan@intel.com> Reviewed-by: Michael Kinney <michael.d.kinney@intel.com> Tested-by: Laszlo Ersek <lersek@redhat.com> Tested-by: Michael Kinney <michael.d.kinney@intel.com>
		
			
				
	
	
		
			65 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   Common header file for MP Initialize Library.
 | |
| 
 | |
|   Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
 | |
|   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
 | |
|   http://opensource.org/licenses/bsd-license.php
 | |
| 
 | |
|   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 | |
|   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef _MP_LIB_H_
 | |
| #define _MP_LIB_H_
 | |
| 
 | |
| #include <PiPei.h>
 | |
| 
 | |
| #include <Register/Cpuid.h>
 | |
| #include <Register/Msr.h>
 | |
| #include <Register/LocalApic.h>
 | |
| #include <Register/Microcode.h>
 | |
| 
 | |
| #include <Library/MpInitLib.h>
 | |
| #include <Library/BaseLib.h>
 | |
| #include <Library/BaseMemoryLib.h>
 | |
| #include <Library/MemoryAllocationLib.h>
 | |
| #include <Library/DebugLib.h>
 | |
| #include <Library/LocalApicLib.h>
 | |
| #include <Library/CpuLib.h>
 | |
| #include <Library/UefiCpuLib.h>
 | |
| #include <Library/TimerLib.h>
 | |
| #include <Library/SynchronizationLib.h>
 | |
| #include <Library/MtrrLib.h>
 | |
| #include <Library/HobLib.h>
 | |
| 
 | |
| 
 | |
| #pragma pack(1)
 | |
| 
 | |
| //
 | |
| // MP CPU exchange information for AP reset code
 | |
| // This structure is required to be packed because fixed field offsets
 | |
| // into this structure are used in assembly code in this module
 | |
| //
 | |
| typedef struct {
 | |
|   UINTN                 Lock;
 | |
|   UINTN                 StackStart;
 | |
|   UINTN                 StackSize;
 | |
|   UINTN                 CFunction;
 | |
|   IA32_DESCRIPTOR       GdtrProfile;
 | |
|   IA32_DESCRIPTOR       IdtrProfile;
 | |
|   UINTN                 BufferStart;
 | |
|   UINTN                 ModeOffset;
 | |
|   UINTN                 NumApsExecuting;
 | |
|   UINTN                 CodeSegment;
 | |
|   UINTN                 DataSegment;
 | |
|   UINTN                 Cr3;
 | |
|   PEI_CPU_MP_DATA       *PeiCpuMpData;
 | |
| } MP_CPU_EXCHANGE_INFO;
 | |
| 
 | |
| #pragma pack()
 | |
| #endif
 | |
| 
 |