mirror of https://github.com/acidanthera/audk.git
82 lines
1.9 KiB
C
82 lines
1.9 KiB
C
|
/** @file
|
||
|
SMM MP perf-logging implementation
|
||
|
|
||
|
Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
|
||
|
|
||
|
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(_) \
|
||
|
_(SmmInitHandler), \
|
||
|
_(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.
|
||
|
**/
|
||
|
VOID
|
||
|
MigrateMpPerf (
|
||
|
UINTN NumberofCpus
|
||
|
);
|
||
|
|
||
|
/**
|
||
|
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
|