]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Library/SmmPerformanceLib/SmmPerformanceLib.c
MdeModulePkg: Clean up source files
[mirror_edk2.git] / MdeModulePkg / Library / SmmPerformanceLib / SmmPerformanceLib.c
index 4a08c24789cf439fb6663f73de94b802121ea31e..120155b98ee8a707adc4cd3e48aff53a1a607b00 100644 (file)
@@ -6,7 +6,7 @@
   to log performance data. If both SMM PerformanceEx and Performance Protocol are not available, it does not log any\r
   performance information.\r
 \r
-  Copyright (c) 2011 - 2016, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>\r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
@@ -18,7 +18,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 **/\r
 \r
 \r
-#include <Guid/Performance.h>\r
+#include <Guid/PerformanceMeasurement.h>\r
 \r
 #include <Library/PerformanceLib.h>\r
 #include <Library/DebugLib.h>\r
@@ -28,10 +28,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
 //\r
 // The cached SMM Performance Protocol and SMM PerformanceEx Protocol interface.\r
-//\r
-PERFORMANCE_PROTOCOL        *mPerformance = NULL;\r
-PERFORMANCE_EX_PROTOCOL     *mPerformanceEx = NULL;\r
-BOOLEAN                     mPerformanceMeasurementEnabled;\r
+EDKII_PERFORMANCE_MEASUREMENT_PROTOCOL  *mPerformanceMeasurement = NULL;\r
+BOOLEAN                                 mPerformanceMeasurementEnabled;\r
 \r
 /**\r
   The constructor function initializes the Performance Measurement Enable flag\r
@@ -49,7 +47,7 @@ SmmPerformanceLibConstructor (
   IN EFI_SYSTEM_TABLE  *SystemTable\r
   )\r
 {\r
-  \r
+\r
   mPerformanceMeasurementEnabled =  (BOOLEAN) ((PcdGet8(PcdPerformanceLibraryPropertyMask) & PERFORMANCE_LIBRARY_PROPERTY_MEASUREMENT_ENABLED) != 0);\r
 \r
   return EFI_SUCCESS;\r
@@ -65,38 +63,26 @@ SmmPerformanceLibConstructor (
 \r
 **/\r
 EFI_STATUS\r
-GetPerformanceProtocol (\r
+GetPerformanceMeasurementProtocol (\r
   VOID\r
   )\r
 {\r
   EFI_STATUS                Status;\r
-  PERFORMANCE_PROTOCOL      *Performance;\r
-  PERFORMANCE_EX_PROTOCOL   *PerformanceEx;\r
-\r
-  if (mPerformanceEx != NULL || mPerformance != NULL) {\r
-    return EFI_SUCCESS;\r
-  }\r
+  EDKII_PERFORMANCE_MEASUREMENT_PROTOCOL   *PerformanceMeasurement;\r
 \r
-  Status = gSmst->SmmLocateProtocol (&gSmmPerformanceExProtocolGuid, NULL, (VOID **) &PerformanceEx);\r
-  if (!EFI_ERROR (Status)) {\r
-    ASSERT (PerformanceEx != NULL);\r
-    //\r
-    // Cache PerformanceEx Protocol.\r
-    //\r
-    mPerformanceEx = PerformanceEx;\r
+  if (mPerformanceMeasurement != NULL) {\r
     return EFI_SUCCESS;\r
   }\r
 \r
-  Status = gSmst->SmmLocateProtocol (&gSmmPerformanceProtocolGuid, NULL, (VOID **) &Performance);\r
+  Status = gSmst->SmmLocateProtocol (&gEdkiiSmmPerformanceMeasurementProtocolGuid, NULL, (VOID **) &PerformanceMeasurement);\r
   if (!EFI_ERROR (Status)) {\r
-    ASSERT (Performance != NULL);\r
+    ASSERT (PerformanceMeasurement != NULL);\r
     //\r
-    // Cache performance protocol.\r
+    // Cache PerformanceMeasurement Protocol.\r
     //\r
-    mPerformance = Performance;\r
+    mPerformanceMeasurement = PerformanceMeasurement;\r
     return EFI_SUCCESS;\r
   }\r
-\r
   return EFI_NOT_FOUND;\r
 }\r
 \r
@@ -132,17 +118,24 @@ StartPerformanceMeasurementEx (
   IN UINT32       Identifier\r
   )\r
 {\r
-  EFI_STATUS  Status;\r
+  EFI_STATUS    Status;\r
+  CONST CHAR8*  String;\r
 \r
-  Status = GetPerformanceProtocol ();\r
+  Status = GetPerformanceMeasurementProtocol ();\r
   if (EFI_ERROR (Status)) {\r
-    return RETURN_OUT_OF_RESOURCES;\r
+    return RETURN_NOT_FOUND;\r
+  }\r
+\r
+  if (Token != NULL) {\r
+    String = Token;\r
+  } else if (Module != NULL) {\r
+    String = Module;\r
+  } else {\r
+    String = NULL;\r
   }\r
 \r
-  if (mPerformanceEx != NULL) {\r
-    Status = mPerformanceEx->StartGaugeEx (Handle, Token, Module, TimeStamp, Identifier);\r
-  } else if (mPerformance != NULL) {\r
-    Status = mPerformance->StartGauge (Handle, Token, Module, TimeStamp);\r
+  if (mPerformanceMeasurement != NULL) {\r
+    Status = mPerformanceMeasurement->CreatePerformanceMeasurement (Handle, NULL, String, TimeStamp, 0, Identifier, PerfStartEntry);\r
   } else {\r
     ASSERT (FALSE);\r
   }\r
@@ -184,17 +177,24 @@ EndPerformanceMeasurementEx (
   IN UINT32       Identifier\r
   )\r
 {\r
-  EFI_STATUS  Status;\r
+  EFI_STATUS    Status;\r
+  CONST CHAR8*  String;\r
 \r
-  Status = GetPerformanceProtocol ();\r
+  Status = GetPerformanceMeasurementProtocol ();\r
   if (EFI_ERROR (Status)) {\r
     return RETURN_NOT_FOUND;\r
   }\r
 \r
-  if (mPerformanceEx != NULL) {\r
-    Status = mPerformanceEx->EndGaugeEx (Handle, Token, Module, TimeStamp, Identifier);\r
-  } else if (mPerformance != NULL) {\r
-    Status = mPerformance->EndGauge (Handle, Token, Module, TimeStamp);\r
+  if (Token != NULL) {\r
+    String = Token;\r
+  } else if (Module != NULL) {\r
+    String = Module;\r
+  } else {\r
+    String = NULL;\r
+  }\r
+\r
+  if (mPerformanceMeasurement != NULL) {\r
+    Status = mPerformanceMeasurement->CreatePerformanceMeasurement (Handle, NULL, String, TimeStamp, 0, Identifier, PerfEndEntry);\r
   } else {\r
     ASSERT (FALSE);\r
   }\r
@@ -246,7 +246,7 @@ EndPerformanceMeasurementEx (
 UINTN\r
 EFIAPI\r
 GetPerformanceMeasurementEx (\r
-  IN  UINTN       LogEntryKey, \r
+  IN  UINTN       LogEntryKey,\r
   OUT CONST VOID  **Handle,\r
   OUT CONST CHAR8 **Token,\r
   OUT CONST CHAR8 **Module,\r
@@ -255,58 +255,7 @@ GetPerformanceMeasurementEx (
   OUT UINT32      *Identifier\r
   )\r
 {\r
-  EFI_STATUS            Status;\r
-  GAUGE_DATA_ENTRY_EX   *GaugeData;\r
-\r
-  GaugeData = NULL;\r
-\r
-  ASSERT (Handle != NULL);\r
-  ASSERT (Token != NULL);\r
-  ASSERT (Module != NULL);\r
-  ASSERT (StartTimeStamp != NULL);\r
-  ASSERT (EndTimeStamp != NULL);\r
-  ASSERT (Identifier != NULL);\r
-\r
-  Status = GetPerformanceProtocol ();\r
-  if (EFI_ERROR (Status)) {\r
-    return 0;\r
-  }\r
-\r
-  if (mPerformanceEx != NULL) {\r
-    Status = mPerformanceEx->GetGaugeEx (LogEntryKey++, &GaugeData);\r
-  } else if (mPerformance != NULL) {\r
-    Status = mPerformance->GetGauge (LogEntryKey++, (GAUGE_DATA_ENTRY **) &GaugeData);\r
-  } else {\r
-    ASSERT (FALSE);\r
-    return 0;\r
-  }\r
-\r
-  //\r
-  // Make sure that LogEntryKey is a valid log entry key,\r
-  //\r
-  ASSERT (Status != EFI_INVALID_PARAMETER);\r
-\r
-  if (EFI_ERROR (Status)) {\r
-    //\r
-    // The LogEntryKey is the last entry (equals to the total entry number).\r
-    //\r
-    return 0;\r
-  }\r
-\r
-  ASSERT (GaugeData != NULL);\r
-\r
-  *Handle         = (VOID *) (UINTN) GaugeData->Handle;\r
-  *Token          = GaugeData->Token;\r
-  *Module         = GaugeData->Module;\r
-  *StartTimeStamp = GaugeData->StartTimeStamp;\r
-  *EndTimeStamp   = GaugeData->EndTimeStamp;\r
-  if (mPerformanceEx != NULL) {\r
-    *Identifier   = GaugeData->Identifier;\r
-  } else {\r
-    *Identifier   = 0;\r
-  }\r
-\r
-  return LogEntryKey;\r
+  return 0;\r
 }\r
 \r
 /**\r
@@ -425,8 +374,7 @@ GetPerformanceMeasurement (
   OUT UINT64      *EndTimeStamp\r
   )\r
 {\r
-  UINT32 Identifier;\r
-  return GetPerformanceMeasurementEx (LogEntryKey, Handle, Token, Module, StartTimeStamp, EndTimeStamp, &Identifier);\r
+  return 0;\r
 }\r
 \r
 /**\r
@@ -449,3 +397,71 @@ PerformanceMeasurementEnabled (
 {\r
   return mPerformanceMeasurementEnabled;\r
 }\r
+\r
+/**\r
+  Create performance record with event description and a timestamp.\r
+\r
+  @param CallerIdentifier  - Image handle or pointer to caller ID GUID\r
+  @param Guid              - Pointer to a GUID\r
+  @param String            - Pointer to a string describing the measurement\r
+  @param Address           - Pointer to a location in memory relevant to the measurement\r
+  @param Identifier        - Performance identifier describing the type of measurement\r
+\r
+  @retval RETURN_SUCCESS           - Successfully created performance record\r
+  @retval RETURN_OUT_OF_RESOURCES  - Ran out of space to store the records\r
+  @retval RETURN_INVALID_PARAMETER - Invalid parameter passed to function - NULL\r
+                                     pointer or invalid PerfId\r
+\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+LogPerformanceMeasurement (\r
+  IN CONST VOID   *CallerIdentifier,\r
+  IN CONST VOID   *Guid,    OPTIONAL\r
+  IN CONST CHAR8  *String,  OPTIONAL\r
+  IN UINT64       Address, OPTIONAL\r
+  IN UINT32       Identifier\r
+  )\r
+{\r
+  EFI_STATUS  Status;\r
+\r
+  Status = GetPerformanceMeasurementProtocol ();\r
+  if (EFI_ERROR (Status)) {\r
+    return RETURN_OUT_OF_RESOURCES;\r
+  }\r
+\r
+  if (mPerformanceMeasurement != NULL) {\r
+    Status = mPerformanceMeasurement->CreatePerformanceMeasurement (CallerIdentifier, Guid, String, 0, Address, Identifier, PerfEntry);\r
+  } else {\r
+    ASSERT (FALSE);\r
+  }\r
+\r
+  return (RETURN_STATUS) Status;\r
+}\r
+\r
+/**\r
+  Check whether the specified performance measurement can be logged.\r
+\r
+  This function returns TRUE when the PERFORMANCE_LIBRARY_PROPERTY_MEASUREMENT_ENABLED bit of PcdPerformanceLibraryPropertyMask is set\r
+  and the Type disable bit in PcdPerformanceLibraryPropertyMask is not set.\r
+\r
+  @param Type        - Type of the performance measurement entry.\r
+\r
+  @retval TRUE         The performance measurement can be logged.\r
+  @retval FALSE        The performance measurement can NOT be logged.\r
+\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+LogPerformanceMeasurementEnabled (\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
+    return TRUE;\r
+  }\r
+  return FALSE;\r
+}\r