/** @file SMM MP perf-logging implementation Copyright (c) 2023, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef MP_PERF_H_ #define MP_PERF_H_ // // The list of all MP procedures that need to be perf-logged. // #define SMM_MP_PERF_PROCEDURE_LIST(_) \ _(InitializeSmm), \ _(SmmRendezvousEntry), \ _(PlatformValidSmi), \ _(SmmRendezvousExit), \ _(SmmMpProcedureMax) // Add new entries above this line // // To perf-log MP procedures, call MpPerfBegin()/MpPerfEnd() with CpuIndex // and SMM_MP_PERF_PROCEDURE_ID with entry name defined in the SMM_MP_PERF_PROCEDURE_LIST. // #define SMM_MP_PERF_PROCEDURE_ID(procedure) SmmMpProcedureId ## procedure enum { SMM_MP_PERF_PROCEDURE_LIST (SMM_MP_PERF_PROCEDURE_ID) }; typedef struct { UINT64 Begin[SMM_MP_PERF_PROCEDURE_ID (SmmMpProcedureMax)]; UINT64 End[SMM_MP_PERF_PROCEDURE_ID (SmmMpProcedureMax)]; } SMM_PERF_AP_PROCEDURE_PERFORMANCE; /** Initialize the perf-logging feature for APs. @param NumberofCpus Number of processors in the platform. **/ VOID InitializeMpPerf ( UINTN NumberofCpus ); /** Migrate MP performance data to standardized performance database. @param NumberofCpus Number of processors in the platform. @param BspIndex The index of the BSP. **/ VOID MigrateMpPerf ( UINTN NumberofCpus, UINTN BspIndex ); /** Save the performance counter value before running the MP procedure. @param CpuIndex The index of the CPU. @param MpProcedureId The ID of the MP procedure. **/ VOID MpPerfBegin ( IN UINTN CpuIndex, IN UINTN MpProcedureId ); /** Save the performance counter value after running the MP procedure. @param CpuIndex The index of the CPU. @param MpProcedureId The ID of the MP procedure. **/ VOID MpPerfEnd ( IN UINTN CpuIndex, IN UINTN MpProcedureId ); #endif