\r
**/\r
\r
-\r
#include <PiPei.h>\r
\r
#include <Guid/ExtendedFirmwarePerformance.h>\r
#include <Library/PcdLib.h>\r
#include <Library/BaseMemoryLib.h>\r
\r
-#define STRING_SIZE (FPDT_STRING_EVENT_RECORD_NAME_LENGTH * sizeof (CHAR8))\r
-#define PEI_MAX_RECORD_SIZE (sizeof (FPDT_DUAL_GUID_STRING_EVENT_RECORD) + STRING_SIZE)\r
-\r
+#define STRING_SIZE (FPDT_STRING_EVENT_RECORD_NAME_LENGTH * sizeof (CHAR8))\r
+#define PEI_MAX_RECORD_SIZE (sizeof (FPDT_DUAL_GUID_STRING_EVENT_RECORD) + STRING_SIZE)\r
\r
/**\r
Return the pointer to the FPDT record in the allocated memory.\r
IN UINT8 RecordSize,\r
IN OUT FPDT_RECORD_PTR *FpdtRecordPtr,\r
IN OUT FPDT_PEI_EXT_PERF_HEADER **PeiPerformanceLogHeader\r
-)\r
+ )\r
{\r
- UINT16 PeiPerformanceLogEntries;\r
- UINTN PeiPerformanceSize;\r
- UINT8 *PeiFirmwarePerformance;\r
- EFI_HOB_GUID_TYPE *GuidHob;\r
+ UINT16 PeiPerformanceLogEntries;\r
+ UINTN PeiPerformanceSize;\r
+ UINT8 *PeiFirmwarePerformance;\r
+ EFI_HOB_GUID_TYPE *GuidHob;\r
\r
//\r
// Get the number of PeiPerformanceLogEntries form PCD.\r
//\r
- PeiPerformanceLogEntries = (UINT16) (PcdGet16 (PcdMaxPeiPerformanceLogEntries16) != 0 ?\r
- PcdGet16 (PcdMaxPeiPerformanceLogEntries16) :\r
- PcdGet8 (PcdMaxPeiPerformanceLogEntries));\r
+ PeiPerformanceLogEntries = (UINT16)(PcdGet16 (PcdMaxPeiPerformanceLogEntries16) != 0 ?\r
+ PcdGet16 (PcdMaxPeiPerformanceLogEntries16) :\r
+ PcdGet8 (PcdMaxPeiPerformanceLogEntries));\r
\r
//\r
// Create GUID HOB Data.\r
//\r
- GuidHob = GetFirstGuidHob (&gEdkiiFpdtExtendedFirmwarePerformanceGuid);\r
+ GuidHob = GetFirstGuidHob (&gEdkiiFpdtExtendedFirmwarePerformanceGuid);\r
PeiFirmwarePerformance = NULL;\r
while (GuidHob != NULL) {\r
//\r
// PEI Performance HOB was found, then return the existing one.\r
//\r
- PeiFirmwarePerformance = (UINT8*)GET_GUID_HOB_DATA (GuidHob);\r
+ PeiFirmwarePerformance = (UINT8 *)GET_GUID_HOB_DATA (GuidHob);\r
*PeiPerformanceLogHeader = (FPDT_PEI_EXT_PERF_HEADER *)PeiFirmwarePerformance;\r
- if (!(*PeiPerformanceLogHeader)->HobIsFull && (*PeiPerformanceLogHeader)->SizeOfAllEntries + RecordSize > (PeiPerformanceLogEntries * PEI_MAX_RECORD_SIZE)) {\r
+ if (!(*PeiPerformanceLogHeader)->HobIsFull && ((*PeiPerformanceLogHeader)->SizeOfAllEntries + RecordSize > (PeiPerformanceLogEntries * PEI_MAX_RECORD_SIZE))) {\r
(*PeiPerformanceLogHeader)->HobIsFull = TRUE;\r
}\r
- if (!(*PeiPerformanceLogHeader)->HobIsFull && (*PeiPerformanceLogHeader)->SizeOfAllEntries + RecordSize <= (PeiPerformanceLogEntries * PEI_MAX_RECORD_SIZE)) {\r
+\r
+ if (!(*PeiPerformanceLogHeader)->HobIsFull && ((*PeiPerformanceLogHeader)->SizeOfAllEntries + RecordSize <= (PeiPerformanceLogEntries * PEI_MAX_RECORD_SIZE))) {\r
FpdtRecordPtr->RecordHeader = (EFI_ACPI_5_0_FPDT_PERFORMANCE_RECORD_HEADER *)(PeiFirmwarePerformance + sizeof (FPDT_PEI_EXT_PERF_HEADER) + (*PeiPerformanceLogHeader)->SizeOfAllEntries);\r
break;\r
}\r
+\r
//\r
// Previous HOB is used, then find next one.\r
//\r
//\r
// PEI Performance HOB was not found, then build one.\r
//\r
- PeiPerformanceSize = sizeof (FPDT_PEI_EXT_PERF_HEADER) +\r
- PEI_MAX_RECORD_SIZE * PeiPerformanceLogEntries;\r
- PeiFirmwarePerformance = (UINT8*)BuildGuidHob (&gEdkiiFpdtExtendedFirmwarePerformanceGuid, PeiPerformanceSize);\r
+ PeiPerformanceSize = sizeof (FPDT_PEI_EXT_PERF_HEADER) +\r
+ PEI_MAX_RECORD_SIZE * PeiPerformanceLogEntries;\r
+ PeiFirmwarePerformance = (UINT8 *)BuildGuidHob (&gEdkiiFpdtExtendedFirmwarePerformanceGuid, PeiPerformanceSize);\r
if (PeiFirmwarePerformance != NULL) {\r
ZeroMem (PeiFirmwarePerformance, PeiPerformanceSize);\r
- (*PeiPerformanceLogHeader) = (FPDT_PEI_EXT_PERF_HEADER *)PeiFirmwarePerformance;\r
+ (*PeiPerformanceLogHeader) = (FPDT_PEI_EXT_PERF_HEADER *)PeiFirmwarePerformance;\r
FpdtRecordPtr->RecordHeader = (EFI_ACPI_5_0_FPDT_PERFORMANCE_RECORD_HEADER *)(PeiFirmwarePerformance + sizeof (FPDT_PEI_EXT_PERF_HEADER));\r
}\r
}\r
return FALSE;\r
}\r
\r
- if (AsciiStrCmp (Token, SEC_TOK) == 0 ||\r
- AsciiStrCmp (Token, PEI_TOK) == 0 ||\r
- AsciiStrCmp (Token, DXE_TOK) == 0 ||\r
- AsciiStrCmp (Token, BDS_TOK) == 0 ||\r
- AsciiStrCmp (Token, DRIVERBINDING_START_TOK) == 0 ||\r
- AsciiStrCmp (Token, DRIVERBINDING_SUPPORT_TOK) == 0 ||\r
- AsciiStrCmp (Token, DRIVERBINDING_STOP_TOK) == 0 ||\r
- AsciiStrCmp (Token, LOAD_IMAGE_TOK) == 0 ||\r
- AsciiStrCmp (Token, START_IMAGE_TOK) == 0 ||\r
- AsciiStrCmp (Token, PEIM_TOK) == 0) {\r
+ if ((AsciiStrCmp (Token, SEC_TOK) == 0) ||\r
+ (AsciiStrCmp (Token, PEI_TOK) == 0) ||\r
+ (AsciiStrCmp (Token, DXE_TOK) == 0) ||\r
+ (AsciiStrCmp (Token, BDS_TOK) == 0) ||\r
+ (AsciiStrCmp (Token, DRIVERBINDING_START_TOK) == 0) ||\r
+ (AsciiStrCmp (Token, DRIVERBINDING_SUPPORT_TOK) == 0) ||\r
+ (AsciiStrCmp (Token, DRIVERBINDING_STOP_TOK) == 0) ||\r
+ (AsciiStrCmp (Token, LOAD_IMAGE_TOK) == 0) ||\r
+ (AsciiStrCmp (Token, START_IMAGE_TOK) == 0) ||\r
+ (AsciiStrCmp (Token, PEIM_TOK) == 0))\r
+ {\r
return TRUE;\r
} else {\r
return FALSE;\r
**/\r
BOOLEAN\r
IsKnownID (\r
- IN UINT32 Identifier\r
+ IN UINT32 Identifier\r
)\r
{\r
- if (Identifier == MODULE_START_ID ||\r
- Identifier == MODULE_END_ID ||\r
- Identifier == MODULE_LOADIMAGE_START_ID ||\r
- Identifier == MODULE_LOADIMAGE_END_ID ||\r
- Identifier == MODULE_DB_START_ID ||\r
- Identifier == MODULE_DB_END_ID ||\r
- Identifier == MODULE_DB_SUPPORT_START_ID ||\r
- Identifier == MODULE_DB_SUPPORT_END_ID ||\r
- Identifier == MODULE_DB_STOP_START_ID ||\r
- Identifier == MODULE_DB_STOP_END_ID) {\r
+ if ((Identifier == MODULE_START_ID) ||\r
+ (Identifier == MODULE_END_ID) ||\r
+ (Identifier == MODULE_LOADIMAGE_START_ID) ||\r
+ (Identifier == MODULE_LOADIMAGE_END_ID) ||\r
+ (Identifier == MODULE_DB_START_ID) ||\r
+ (Identifier == MODULE_DB_END_ID) ||\r
+ (Identifier == MODULE_DB_SUPPORT_START_ID) ||\r
+ (Identifier == MODULE_DB_SUPPORT_END_ID) ||\r
+ (Identifier == MODULE_DB_STOP_START_ID) ||\r
+ (Identifier == MODULE_DB_STOP_END_ID))\r
+ {\r
return TRUE;\r
} else {\r
return FALSE;\r
**/\r
EFI_STATUS\r
GetFpdtRecordId (\r
- IN BOOLEAN Attribute,\r
- IN CONST VOID *Handle,\r
- IN CONST CHAR8 *String,\r
- OUT UINT16 *ProgressID\r
+ IN BOOLEAN Attribute,\r
+ IN CONST VOID *Handle,\r
+ IN CONST CHAR8 *String,\r
+ OUT UINT16 *ProgressID\r
)\r
{\r
//\r
// When PcdEdkiiFpdtStringRecordEnableOnly is TRUE, all records are with type of FPDT_DYNAMIC_STRING_EVENT_TYPE.\r
//\r
if (String != NULL) {\r
- if (AsciiStrCmp (String, LOAD_IMAGE_TOK) == 0) { // "LoadImage:"\r
+ if (AsciiStrCmp (String, LOAD_IMAGE_TOK) == 0) {\r
+ // "LoadImage:"\r
if (Attribute == PerfStartEntry) {\r
*ProgressID = MODULE_LOADIMAGE_START_ID;\r
} else {\r
*ProgressID = MODULE_LOADIMAGE_END_ID;\r
}\r
- } else if (AsciiStrCmp (String, SEC_TOK) == 0 || // "SEC"\r
- AsciiStrCmp (String, PEI_TOK) == 0) { // "PEI"\r
+ } else if ((AsciiStrCmp (String, SEC_TOK) == 0) || // "SEC"\r
+ (AsciiStrCmp (String, PEI_TOK) == 0)) // "PEI"\r
+ {\r
if (Attribute == PerfStartEntry) {\r
*ProgressID = PERF_CROSSMODULE_START_ID;\r
} else {\r
*ProgressID = PERF_CROSSMODULE_END_ID;\r
}\r
- } else if (AsciiStrCmp (String, PEIM_TOK) == 0) { // "PEIM"\r
+ } else if (AsciiStrCmp (String, PEIM_TOK) == 0) {\r
+ // "PEIM"\r
if (Attribute == PerfStartEntry) {\r
*ProgressID = MODULE_START_ID;\r
} else {\r
*ProgressID = MODULE_END_ID;\r
}\r
- } else { //Pref used in Modules.\r
+ } else {\r
+ // Pref used in Modules.\r
if (Attribute == PerfStartEntry) {\r
*ProgressID = PERF_INMODULE_START_ID;\r
} else {\r
*ProgressID = PERF_INMODULE_END_ID;\r
}\r
}\r
- } else if (Handle != NULL) { //Pref used in Modules.\r
+ } else if (Handle != NULL) {\r
+ // Pref used in Modules.\r
if (Attribute == PerfStartEntry) {\r
*ProgressID = PERF_INMODULE_START_ID;\r
} else {\r
**/\r
VOID\r
CopyStringIntoPerfRecordAndUpdateLength (\r
- IN OUT CHAR8 *Destination,\r
+ IN OUT CHAR8 *Destination,\r
IN CONST CHAR8 *Source,\r
- IN OUT UINT8 *Length\r
+ IN OUT UINT8 *Length\r
)\r
{\r
UINTN StringLen;\r
DestMax = STRING_SIZE;\r
}\r
}\r
+\r
StringLen = AsciiStrLen (Source);\r
if (StringLen >= DestMax) {\r
StringLen = DestMax -1;\r
}\r
\r
- AsciiStrnCpyS(Destination, DestMax, Source, StringLen);\r
+ AsciiStrnCpyS (Destination, DestMax, Source, StringLen);\r
*Length += (UINT8)DestMax;\r
\r
return;\r
}\r
\r
-\r
/**\r
Convert PEI performance log to FPDT String boot record.\r
\r
IN PERF_MEASUREMENT_ATTRIBUTE Attribute\r
)\r
{\r
- FPDT_RECORD_PTR FpdtRecordPtr;\r
- CONST VOID *ModuleGuid;\r
- CONST CHAR8 *StringPtr;\r
- EFI_STATUS Status;\r
- UINT64 TimeStamp;\r
- FPDT_PEI_EXT_PERF_HEADER *PeiPerformanceLogHeader;\r
-\r
- StringPtr = NULL;\r
+ FPDT_RECORD_PTR FpdtRecordPtr;\r
+ CONST VOID *ModuleGuid;\r
+ CONST CHAR8 *StringPtr;\r
+ EFI_STATUS Status;\r
+ UINT64 TimeStamp;\r
+ FPDT_PEI_EXT_PERF_HEADER *PeiPerformanceLogHeader;\r
+\r
+ StringPtr = NULL;\r
FpdtRecordPtr.RecordHeader = NULL;\r
- PeiPerformanceLogHeader = NULL;\r
+ PeiPerformanceLogHeader = NULL;\r
\r
//\r
// 1. Get the Perf Id for records from PERF_START/PERF_END, PERF_START_EX/PERF_END_EX.\r
if ((PerfId != 0) && (IsKnownID (PerfId)) && (!IsKnownTokens (String))) {\r
return EFI_UNSUPPORTED;\r
} else if ((PerfId != 0) && (!IsKnownID (PerfId)) && (!IsKnownTokens (String))) {\r
- if (Attribute == PerfStartEntry && ((PerfId & 0x000F) != 0)) {\r
+ if ((Attribute == PerfStartEntry) && ((PerfId & 0x000F) != 0)) {\r
PerfId &= 0xFFF0;\r
} else if ((Attribute == PerfEndEntry) && ((PerfId & 0x000F) == 0)) {\r
PerfId += 1;\r
// 5. Fill in the FPDT record according to different Performance Identifier.\r
//\r
switch (PerfId) {\r
- case MODULE_START_ID:\r
- case MODULE_END_ID:\r
- StringPtr = PEIM_TOK;\r
- if (!PcdGetBool (PcdEdkiiFpdtStringRecordEnableOnly)) {\r
- FpdtRecordPtr.GuidEvent->Header.Type = FPDT_GUID_EVENT_TYPE;\r
- FpdtRecordPtr.GuidEvent->Header.Length = sizeof (FPDT_GUID_EVENT_RECORD);\r
- FpdtRecordPtr.GuidEvent->Header.Revision = FPDT_RECORD_REVISION_1;\r
- FpdtRecordPtr.GuidEvent->ProgressID = PerfId;\r
- FpdtRecordPtr.GuidEvent->Timestamp = TimeStamp;\r
- CopyMem (&FpdtRecordPtr.GuidEvent->Guid, ModuleGuid, sizeof (EFI_GUID));\r
- }\r
- break;\r
-\r
- case MODULE_LOADIMAGE_START_ID:\r
- case MODULE_LOADIMAGE_END_ID:\r
- StringPtr = LOAD_IMAGE_TOK;\r
- if (!PcdGetBool (PcdEdkiiFpdtStringRecordEnableOnly)) {\r
- FpdtRecordPtr.GuidQwordEvent->Header.Type = FPDT_GUID_QWORD_EVENT_TYPE;\r
- FpdtRecordPtr.GuidQwordEvent->Header.Length = sizeof (FPDT_GUID_QWORD_EVENT_RECORD);\r
- FpdtRecordPtr.GuidQwordEvent->Header.Revision = FPDT_RECORD_REVISION_1;\r
- FpdtRecordPtr.GuidQwordEvent->ProgressID = PerfId;\r
- FpdtRecordPtr.GuidQwordEvent->Timestamp = TimeStamp;\r
- if (PerfId == MODULE_LOADIMAGE_START_ID) {\r
- PeiPerformanceLogHeader->LoadImageCount++;\r
+ case MODULE_START_ID:\r
+ case MODULE_END_ID:\r
+ StringPtr = PEIM_TOK;\r
+ if (!PcdGetBool (PcdEdkiiFpdtStringRecordEnableOnly)) {\r
+ FpdtRecordPtr.GuidEvent->Header.Type = FPDT_GUID_EVENT_TYPE;\r
+ FpdtRecordPtr.GuidEvent->Header.Length = sizeof (FPDT_GUID_EVENT_RECORD);\r
+ FpdtRecordPtr.GuidEvent->Header.Revision = FPDT_RECORD_REVISION_1;\r
+ FpdtRecordPtr.GuidEvent->ProgressID = PerfId;\r
+ FpdtRecordPtr.GuidEvent->Timestamp = TimeStamp;\r
+ CopyMem (&FpdtRecordPtr.GuidEvent->Guid, ModuleGuid, sizeof (EFI_GUID));\r
}\r
- FpdtRecordPtr.GuidQwordEvent->Qword = PeiPerformanceLogHeader->LoadImageCount;\r
- CopyMem (&FpdtRecordPtr.GuidQwordEvent->Guid, ModuleGuid, sizeof (EFI_GUID));\r
- }\r
- break;\r
-\r
- case PERF_EVENTSIGNAL_START_ID:\r
- case PERF_EVENTSIGNAL_END_ID:\r
- case PERF_CALLBACK_START_ID:\r
- case PERF_CALLBACK_END_ID:\r
- if (String == NULL || Guid == NULL) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
- StringPtr = String;\r
- if (AsciiStrLen (String) == 0) {\r
- StringPtr = "unknown name";\r
- }\r
- if (!PcdGetBool (PcdEdkiiFpdtStringRecordEnableOnly)) {\r
- FpdtRecordPtr.DualGuidStringEvent->Header.Type = FPDT_DUAL_GUID_STRING_EVENT_TYPE;\r
- FpdtRecordPtr.DualGuidStringEvent->Header.Length = sizeof (FPDT_DUAL_GUID_STRING_EVENT_RECORD);\r
- FpdtRecordPtr.DualGuidStringEvent->Header.Revision = FPDT_RECORD_REVISION_1;\r
- FpdtRecordPtr.DualGuidStringEvent->ProgressID = PerfId;\r
- FpdtRecordPtr.DualGuidStringEvent->Timestamp = TimeStamp;\r
- CopyMem (&FpdtRecordPtr.DualGuidStringEvent->Guid1, ModuleGuid, sizeof (FpdtRecordPtr.DualGuidStringEvent->Guid1));\r
- CopyMem (&FpdtRecordPtr.DualGuidStringEvent->Guid2, Guid, sizeof (FpdtRecordPtr.DualGuidStringEvent->Guid2));\r
- CopyStringIntoPerfRecordAndUpdateLength (FpdtRecordPtr.DualGuidStringEvent->String, StringPtr, &FpdtRecordPtr.DualGuidStringEvent->Header.Length);\r
- }\r
- break;\r
-\r
- case PERF_EVENT_ID:\r
- case PERF_FUNCTION_START_ID:\r
- case PERF_FUNCTION_END_ID:\r
- case PERF_INMODULE_START_ID:\r
- case PERF_INMODULE_END_ID:\r
- case PERF_CROSSMODULE_START_ID:\r
- case PERF_CROSSMODULE_END_ID:\r
- if (String != NULL && AsciiStrLen (String) != 0) {\r
+\r
+ break;\r
+\r
+ case MODULE_LOADIMAGE_START_ID:\r
+ case MODULE_LOADIMAGE_END_ID:\r
+ StringPtr = LOAD_IMAGE_TOK;\r
+ if (!PcdGetBool (PcdEdkiiFpdtStringRecordEnableOnly)) {\r
+ FpdtRecordPtr.GuidQwordEvent->Header.Type = FPDT_GUID_QWORD_EVENT_TYPE;\r
+ FpdtRecordPtr.GuidQwordEvent->Header.Length = sizeof (FPDT_GUID_QWORD_EVENT_RECORD);\r
+ FpdtRecordPtr.GuidQwordEvent->Header.Revision = FPDT_RECORD_REVISION_1;\r
+ FpdtRecordPtr.GuidQwordEvent->ProgressID = PerfId;\r
+ FpdtRecordPtr.GuidQwordEvent->Timestamp = TimeStamp;\r
+ if (PerfId == MODULE_LOADIMAGE_START_ID) {\r
+ PeiPerformanceLogHeader->LoadImageCount++;\r
+ }\r
+\r
+ FpdtRecordPtr.GuidQwordEvent->Qword = PeiPerformanceLogHeader->LoadImageCount;\r
+ CopyMem (&FpdtRecordPtr.GuidQwordEvent->Guid, ModuleGuid, sizeof (EFI_GUID));\r
+ }\r
+\r
+ break;\r
+\r
+ case PERF_EVENTSIGNAL_START_ID:\r
+ case PERF_EVENTSIGNAL_END_ID:\r
+ case PERF_CALLBACK_START_ID:\r
+ case PERF_CALLBACK_END_ID:\r
+ if ((String == NULL) || (Guid == NULL)) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
StringPtr = String;\r
- } else {\r
- StringPtr = "unknown name";\r
- }\r
- if (!PcdGetBool (PcdEdkiiFpdtStringRecordEnableOnly)) {\r
- FpdtRecordPtr.DynamicStringEvent->Header.Type = FPDT_DYNAMIC_STRING_EVENT_TYPE;\r
- FpdtRecordPtr.DynamicStringEvent->Header.Length = sizeof (FPDT_DYNAMIC_STRING_EVENT_RECORD);\r
- FpdtRecordPtr.DynamicStringEvent->Header.Revision = FPDT_RECORD_REVISION_1;\r
- FpdtRecordPtr.DynamicStringEvent->ProgressID = PerfId;\r
- FpdtRecordPtr.DynamicStringEvent->Timestamp = TimeStamp;\r
- CopyMem (&FpdtRecordPtr.DynamicStringEvent->Guid, ModuleGuid, sizeof (EFI_GUID));\r
- CopyStringIntoPerfRecordAndUpdateLength (FpdtRecordPtr.DynamicStringEvent->String, StringPtr, &FpdtRecordPtr.DynamicStringEvent->Header.Length);\r
- }\r
- break;\r
-\r
- default:\r
- if (Attribute != PerfEntry) {\r
- if (String != NULL && AsciiStrLen (String) != 0) {\r
- StringPtr = String;\r
- } else {\r
- StringPtr = "unknown name";\r
- }\r
- if (!PcdGetBool (PcdEdkiiFpdtStringRecordEnableOnly)) {\r
- FpdtRecordPtr.DynamicStringEvent->Header.Type = FPDT_DYNAMIC_STRING_EVENT_TYPE;\r
- FpdtRecordPtr.DynamicStringEvent->Header.Length = sizeof (FPDT_DYNAMIC_STRING_EVENT_RECORD);\r
- FpdtRecordPtr.DynamicStringEvent->Header.Revision = FPDT_RECORD_REVISION_1;\r
- FpdtRecordPtr.DynamicStringEvent->ProgressID = PerfId;\r
- FpdtRecordPtr.DynamicStringEvent->Timestamp = TimeStamp;\r
- CopyMem (&FpdtRecordPtr.DynamicStringEvent->Guid, ModuleGuid, sizeof (FpdtRecordPtr.DynamicStringEvent->Guid));\r
- CopyStringIntoPerfRecordAndUpdateLength (FpdtRecordPtr.DynamicStringEvent->String, StringPtr, &FpdtRecordPtr.DynamicStringEvent->Header.Length);\r
- }\r
- } else {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
- break;\r
+ if (AsciiStrLen (String) == 0) {\r
+ StringPtr = "unknown name";\r
+ }\r
+\r
+ if (!PcdGetBool (PcdEdkiiFpdtStringRecordEnableOnly)) {\r
+ FpdtRecordPtr.DualGuidStringEvent->Header.Type = FPDT_DUAL_GUID_STRING_EVENT_TYPE;\r
+ FpdtRecordPtr.DualGuidStringEvent->Header.Length = sizeof (FPDT_DUAL_GUID_STRING_EVENT_RECORD);\r
+ FpdtRecordPtr.DualGuidStringEvent->Header.Revision = FPDT_RECORD_REVISION_1;\r
+ FpdtRecordPtr.DualGuidStringEvent->ProgressID = PerfId;\r
+ FpdtRecordPtr.DualGuidStringEvent->Timestamp = TimeStamp;\r
+ CopyMem (&FpdtRecordPtr.DualGuidStringEvent->Guid1, ModuleGuid, sizeof (FpdtRecordPtr.DualGuidStringEvent->Guid1));\r
+ CopyMem (&FpdtRecordPtr.DualGuidStringEvent->Guid2, Guid, sizeof (FpdtRecordPtr.DualGuidStringEvent->Guid2));\r
+ CopyStringIntoPerfRecordAndUpdateLength (FpdtRecordPtr.DualGuidStringEvent->String, StringPtr, &FpdtRecordPtr.DualGuidStringEvent->Header.Length);\r
+ }\r
+\r
+ break;\r
+\r
+ case PERF_EVENT_ID:\r
+ case PERF_FUNCTION_START_ID:\r
+ case PERF_FUNCTION_END_ID:\r
+ case PERF_INMODULE_START_ID:\r
+ case PERF_INMODULE_END_ID:\r
+ case PERF_CROSSMODULE_START_ID:\r
+ case PERF_CROSSMODULE_END_ID:\r
+ if ((String != NULL) && (AsciiStrLen (String) != 0)) {\r
+ StringPtr = String;\r
+ } else {\r
+ StringPtr = "unknown name";\r
+ }\r
+\r
+ if (!PcdGetBool (PcdEdkiiFpdtStringRecordEnableOnly)) {\r
+ FpdtRecordPtr.DynamicStringEvent->Header.Type = FPDT_DYNAMIC_STRING_EVENT_TYPE;\r
+ FpdtRecordPtr.DynamicStringEvent->Header.Length = sizeof (FPDT_DYNAMIC_STRING_EVENT_RECORD);\r
+ FpdtRecordPtr.DynamicStringEvent->Header.Revision = FPDT_RECORD_REVISION_1;\r
+ FpdtRecordPtr.DynamicStringEvent->ProgressID = PerfId;\r
+ FpdtRecordPtr.DynamicStringEvent->Timestamp = TimeStamp;\r
+ CopyMem (&FpdtRecordPtr.DynamicStringEvent->Guid, ModuleGuid, sizeof (EFI_GUID));\r
+ CopyStringIntoPerfRecordAndUpdateLength (FpdtRecordPtr.DynamicStringEvent->String, StringPtr, &FpdtRecordPtr.DynamicStringEvent->Header.Length);\r
+ }\r
+\r
+ break;\r
+\r
+ default:\r
+ if (Attribute != PerfEntry) {\r
+ if ((String != NULL) && (AsciiStrLen (String) != 0)) {\r
+ StringPtr = String;\r
+ } else {\r
+ StringPtr = "unknown name";\r
+ }\r
+\r
+ if (!PcdGetBool (PcdEdkiiFpdtStringRecordEnableOnly)) {\r
+ FpdtRecordPtr.DynamicStringEvent->Header.Type = FPDT_DYNAMIC_STRING_EVENT_TYPE;\r
+ FpdtRecordPtr.DynamicStringEvent->Header.Length = sizeof (FPDT_DYNAMIC_STRING_EVENT_RECORD);\r
+ FpdtRecordPtr.DynamicStringEvent->Header.Revision = FPDT_RECORD_REVISION_1;\r
+ FpdtRecordPtr.DynamicStringEvent->ProgressID = PerfId;\r
+ FpdtRecordPtr.DynamicStringEvent->Timestamp = TimeStamp;\r
+ CopyMem (&FpdtRecordPtr.DynamicStringEvent->Guid, ModuleGuid, sizeof (FpdtRecordPtr.DynamicStringEvent->Guid));\r
+ CopyStringIntoPerfRecordAndUpdateLength (FpdtRecordPtr.DynamicStringEvent->String, StringPtr, &FpdtRecordPtr.DynamicStringEvent->Header.Length);\r
+ }\r
+ } else {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ break;\r
}\r
\r
//\r
// 5.2 When PcdEdkiiFpdtStringRecordEnableOnly==TRUE, create string record for all Perf entries.\r
//\r
if (PcdGetBool (PcdEdkiiFpdtStringRecordEnableOnly)) {\r
- FpdtRecordPtr.DynamicStringEvent->Header.Type = FPDT_DYNAMIC_STRING_EVENT_TYPE;\r
- FpdtRecordPtr.DynamicStringEvent->Header.Length = sizeof (FPDT_DYNAMIC_STRING_EVENT_RECORD);\r
- FpdtRecordPtr.DynamicStringEvent->Header.Revision = FPDT_RECORD_REVISION_1;\r
- FpdtRecordPtr.DynamicStringEvent->ProgressID = PerfId;\r
- FpdtRecordPtr.DynamicStringEvent->Timestamp = TimeStamp;\r
+ FpdtRecordPtr.DynamicStringEvent->Header.Type = FPDT_DYNAMIC_STRING_EVENT_TYPE;\r
+ FpdtRecordPtr.DynamicStringEvent->Header.Length = sizeof (FPDT_DYNAMIC_STRING_EVENT_RECORD);\r
+ FpdtRecordPtr.DynamicStringEvent->Header.Revision = FPDT_RECORD_REVISION_1;\r
+ FpdtRecordPtr.DynamicStringEvent->ProgressID = PerfId;\r
+ FpdtRecordPtr.DynamicStringEvent->Timestamp = TimeStamp;\r
if (Guid != NULL) {\r
//\r
// Cache the event guid in string event record.\r
} else {\r
CopyMem (&FpdtRecordPtr.DynamicStringEvent->Guid, ModuleGuid, sizeof (EFI_GUID));\r
}\r
+\r
CopyStringIntoPerfRecordAndUpdateLength (FpdtRecordPtr.DynamicStringEvent->String, StringPtr, &FpdtRecordPtr.DynamicStringEvent->Header.Length);\r
}\r
\r
IN UINT32 Identifier\r
)\r
{\r
- CONST CHAR8 *String;\r
+ CONST CHAR8 *String;\r
\r
if (Token != NULL) {\r
String = Token;\r
}\r
\r
return (RETURN_STATUS)InsertFpdtRecord (Handle, NULL, String, TimeStamp, 0, (UINT16)Identifier, PerfStartEntry);\r
-\r
}\r
\r
/**\r
IN UINT32 Identifier\r
)\r
{\r
- CONST CHAR8 *String;\r
+ CONST CHAR8 *String;\r
\r
if (Token != NULL) {\r
String = Token;\r
UINTN\r
EFIAPI\r
GetPerformanceMeasurementEx (\r
- IN UINTN LogEntryKey,\r
- OUT CONST VOID **Handle,\r
- OUT CONST CHAR8 **Token,\r
- OUT CONST CHAR8 **Module,\r
- OUT UINT64 *StartTimeStamp,\r
- OUT UINT64 *EndTimeStamp,\r
- OUT UINT32 *Identifier\r
+ IN UINTN LogEntryKey,\r
+ OUT CONST VOID **Handle,\r
+ OUT CONST CHAR8 **Token,\r
+ OUT CONST CHAR8 **Module,\r
+ OUT UINT64 *StartTimeStamp,\r
+ OUT UINT64 *EndTimeStamp,\r
+ OUT UINT32 *Identifier\r
)\r
{\r
return 0;\r
UINTN\r
EFIAPI\r
GetPerformanceMeasurement (\r
- IN UINTN LogEntryKey,\r
- OUT CONST VOID **Handle,\r
- OUT CONST CHAR8 **Token,\r
- OUT CONST CHAR8 **Module,\r
- OUT UINT64 *StartTimeStamp,\r
- OUT UINT64 *EndTimeStamp\r
+ IN UINTN LogEntryKey,\r
+ OUT CONST VOID **Handle,\r
+ OUT CONST CHAR8 **Token,\r
+ OUT CONST CHAR8 **Module,\r
+ OUT UINT64 *StartTimeStamp,\r
+ OUT UINT64 *EndTimeStamp\r
)\r
{\r
return 0;\r
VOID\r
)\r
{\r
- return (BOOLEAN) ((PcdGet8(PcdPerformanceLibraryPropertyMask) & PERFORMANCE_LIBRARY_PROPERTY_MEASUREMENT_ENABLED) != 0);\r
+ return (BOOLEAN)((PcdGet8 (PcdPerformanceLibraryPropertyMask) & PERFORMANCE_LIBRARY_PROPERTY_MEASUREMENT_ENABLED) != 0);\r
}\r
\r
/**\r
BOOLEAN\r
EFIAPI\r
LogPerformanceMeasurementEnabled (\r
- IN CONST UINTN Type\r
+ IN CONST UINTN Type\r
)\r
{\r
//\r
// When Performance measurement is enabled and the type is not filtered, the performance can be logged.\r
//\r
- if (PerformanceMeasurementEnabled () && (PcdGet8(PcdPerformanceLibraryPropertyMask) & Type) == 0) {\r
+ if (PerformanceMeasurementEnabled () && ((PcdGet8 (PcdPerformanceLibraryPropertyMask) & Type) == 0)) {\r
return TRUE;\r
}\r
+\r
return FALSE;\r
}\r