X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=UefiCpuPkg%2FLibrary%2FMpInitLib%2FMpLib.h;h=ea56412cbce04adb575786e214165032f4ddbf67;hp=e53deb449d977be7ef81a6ae1ad72eb56961dd77;hb=3b2928b46987693caaaeefbb7b799d1e1de803c0;hpb=4d3314f694881f4a4a53636515da144230f1d913 diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.h b/UefiCpuPkg/Library/MpInitLib/MpLib.h index e53deb449d..ea56412cbc 100644 --- a/UefiCpuPkg/Library/MpInitLib/MpLib.h +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.h @@ -1,7 +1,7 @@ /** @file Common header file for MP Initialize Library. - Copyright (c) 2016, Intel Corporation. All rights reserved.
+ Copyright (c) 2016 - 2017, 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 @@ -112,9 +112,6 @@ typedef struct { volatile UINT32 *StartupApSignal; volatile UINTN ApFunction; volatile UINTN ApFunctionArgument; - UINT32 InitialApicId; - UINT32 ApicId; - UINT32 Health; BOOLEAN CpuHealthy; volatile CPU_STATE State; CPU_VOLATILE_REGISTERS VolatileRegisters; @@ -132,11 +129,14 @@ typedef struct { // we need to make sure the each fields offset same in different // architecture. // +#pragma pack (1) typedef struct { UINT32 InitialApicId; UINT32 ApicId; UINT32 Health; + UINT64 ApTopOfStack; } CPU_INFO_IN_HOB; +#pragma pack () // // AP reset code information including code address and size, @@ -174,7 +174,10 @@ typedef struct { UINTN DataSegment; UINTN EnableExecuteDisable; UINTN Cr3; + UINTN InitFlag; + CPU_INFO_IN_HOB *CpuInfo; CPU_MP_DATA *CpuMpData; + UINTN InitializeFloatingPointUnitsAddress; } MP_CPU_EXCHANGE_INFO; #pragma pack() @@ -198,7 +201,7 @@ struct _CPU_MP_DATA { UINTN WakeupBuffer; UINTN BackupBuffer; UINTN BackupBufferSize; - BOOLEAN EndOfPeiFlag; + BOOLEAN SaveRestoreFlag; volatile UINT32 StartCount; volatile UINT32 FinishedCount; @@ -216,6 +219,7 @@ struct _CPU_MP_DATA { AP_INIT_STATE InitFlag; BOOLEAN X2ApicEnable; BOOLEAN SwitchBspFlag; + UINTN NewBspNumber; CPU_EXCHANGE_ROLE_INFO BSPInfo; CPU_EXCHANGE_ROLE_INFO APInfo; MTRR_SETTINGS MtrrTable; @@ -224,6 +228,12 @@ struct _CPU_MP_DATA { UINT16 PmCodeSegment; CPU_AP_DATA *CpuData; volatile MP_CPU_EXCHANGE_INFO *MpCpuExchangeInfo; + + UINT32 CurrentTimerCount; + UINTN DivideValue; + UINT8 Vector; + BOOLEAN PeriodicMode; + BOOLEAN TimerInterruptState; }; extern EFI_GUID mCpuInitMpLibHobGuid; @@ -247,7 +257,9 @@ VOID (EFIAPI * ASM_RELOCATE_AP_LOOP) ( IN BOOLEAN MwaitSupport, IN UINTN ApTargetCState, - IN UINTN PmCodeSegment + IN UINTN PmCodeSegment, + IN UINTN TopOfApStack, + IN UINTN NumberToFinish ); /** @@ -360,7 +372,7 @@ InitMpGlobalData ( simultaneously. @param[in] WaitEvent The event created by the caller with CreateEvent() service. - @param[in] TimeoutInMicrosecsond Indicates the time limit in microseconds for + @param[in] TimeoutInMicroseconds Indicates the time limit in microseconds for APs to return from Procedure, either for blocking or non-blocking mode. @param[in] ProcedureArgument The parameter passed into Procedure for @@ -397,7 +409,7 @@ StartupAllAPsWorker ( @param[in] ProcessorNumber The handle number of the AP. @param[in] WaitEvent The event created by the caller with CreateEvent() service. - @param[in] TimeoutInMicrosecsond Indicates the time limit in microseconds for + @param[in] TimeoutInMicroseconds Indicates the time limit in microseconds for APs to return from Procedure, either for blocking or non-blocking mode. @param[in] ProcedureArgument The parameter passed into Procedure for @@ -512,7 +524,7 @@ CheckAndUpdateApsStatus ( /** Detect whether specified processor can find matching microcode patch and load it. - @param[in] PeiCpuMpData Pointer to PEI CPU MP Data + @param[in] CpuMpData The pointer to CPU MP Data structure. **/ VOID MicrocodeDetect ( @@ -531,23 +543,32 @@ IsMwaitSupport ( ); /** - Notify function on End Of PEI PPI. + Get available system memory below 1MB by specified size. - On S3 boot, this function will restore wakeup buffer data. - On normal boot, this function will flag wakeup buffer to be un-used type. + @param[in] CpuMpData The pointer to CPU MP Data structure. +**/ +VOID +BackupAndPrepareWakeupBuffer( + IN CPU_MP_DATA *CpuMpData + ); - @param[in] PeiServices The pointer to the PEI Services Table. - @param[in] NotifyDescriptor Address of the notification descriptor data structure. - @param[in] Ppi Address of the PPI that was installed. +/** + Restore wakeup buffer data. - @retval EFI_SUCCESS When everything is OK. + @param[in] CpuMpData The pointer to CPU MP Data structure. **/ -EFI_STATUS -EFIAPI -CpuMpEndOfPeiCallback ( - IN EFI_PEI_SERVICES **PeiServices, - IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDescriptor, - IN VOID *Ppi +VOID +RestoreWakeupBuffer( + IN CPU_MP_DATA *CpuMpData + ); + +/** + Enable Debug Agent to support source debugging on AP function. + +**/ +VOID +EnableDebugAgent ( + VOID ); #endif