2 Definitions to install Multiple Processor PPI.
4 Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
15 #ifndef _CPU_MP_PEI_H_
16 #define _CPU_MP_PEI_H_
20 #include <Ppi/MpServices.h>
21 #include <Ppi/SecPlatformInformation.h>
22 #include <Ppi/SecPlatformInformation2.h>
24 #include <Register/LocalApic.h>
26 #include <Library/BaseLib.h>
27 #include <Library/BaseMemoryLib.h>
28 #include <Library/DebugLib.h>
29 #include <Library/HobLib.h>
30 #include <Library/LocalApicLib.h>
31 #include <Library/MtrrLib.h>
32 #include <Library/PcdLib.h>
33 #include <Library/PeimEntryPoint.h>
34 #include <Library/PeiServicesLib.h>
35 #include <Library/ReportStatusCodeLib.h>
36 #include <Library/SynchronizationLib.h>
37 #include <Library/TimerLib.h>
38 #include <Library/UefiCpuLib.h>
40 #include "Microcode.h"
52 // AP reset code information
55 UINT8
*RendezvousFunnelAddress
;
56 UINTN PModeEntryOffset
;
57 UINTN LModeEntryOffset
;
58 UINTN RendezvousFunnelSize
;
59 } MP_ASSEMBLY_ADDRESS_MAP
;
61 typedef struct _PEI_CPU_MP_DATA PEI_CPU_MP_DATA
;
77 UINT32 DefaultSize
: 1;
78 UINT32 Granularity
: 1;
85 // MP CPU exchange information for AP reset code
92 IA32_DESCRIPTOR GdtrProfile
;
93 IA32_DESCRIPTOR IdtrProfile
;
96 UINTN NumApsExecuting
;
99 PEI_CPU_MP_DATA
*PeiCpuMpData
;
100 } MP_CPU_EXCHANGE_INFO
;
106 EFI_HEALTH_FLAGS Health
;
112 // PEI CPU MP Data save in memory
114 struct _PEI_CPU_MP_DATA
{
118 UINTN CpuApStackSize
;
119 MP_ASSEMBLY_ADDRESS_MAP AddressMap
;
122 UINTN BackupBufferSize
;
124 UINTN ApFunctionArgument
;
125 volatile UINT32 FinishedCount
;
127 MTRR_SETTINGS MtrrTable
;
128 PEI_CPU_DATA
*CpuData
;
129 volatile MP_CPU_EXCHANGE_INFO
*MpCpuExchangeInfo
;
133 Assembly code to get starting address and size of the rendezvous entry for APs.
134 Information for fixing a jump instruction in the code is also returned.
136 @param AddressMap Output buffer for address map information.
141 OUT MP_ASSEMBLY_ADDRESS_MAP
*AddressMap
145 Assembly code to load GDT table and update segment accordingly.
147 @param Gdtr Pointer to GDT descriptor
152 IN IA32_DESCRIPTOR
*Gdtr
157 Get CPU MP Data pointer from the Guided HOB.
159 @return Pointer to Pointer to PEI CPU MP Data
167 Collects BIST data from PPI.
169 This function collects BIST data from Sec Platform Information2 PPI
170 or SEC Platform Information PPI.
172 @param PeiServices Pointer to PEI Services Table
173 @param PeiCpuMpData Pointer to PEI CPU MP Data
177 CollectBistDataFromPpi (
178 IN CONST EFI_PEI_SERVICES
**PeiServices
,
179 IN PEI_CPU_MP_DATA
*PeiCpuMpData
183 Implementation of the PlatformInformation2 service in EFI_SEC_PLATFORM_INFORMATION2_PPI.
185 @param PeiServices The pointer to the PEI Services Table.
186 @param StructureSize The pointer to the variable describing size of the input buffer.
187 @param PlatformInformationRecord2 The pointer to the EFI_SEC_PLATFORM_INFORMATION_RECORD2.
189 @retval EFI_SUCCESS The data was successfully returned.
190 @retval EFI_BUFFER_TOO_SMALL The buffer was too small. The current buffer size needed to
191 hold the record is returned in StructureSize.
196 SecPlatformInformation2 (
197 IN CONST EFI_PEI_SERVICES
**PeiServices
,
198 IN OUT UINT64
*StructureSize
,
199 OUT EFI_SEC_PLATFORM_INFORMATION_RECORD2
*PlatformInformationRecord2