]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ShellPkg/Library/UefiDpLib/Dp.c
ShellPkg/tftp: Convert from NULL class library to Dynamic Command
[mirror_edk2.git] / ShellPkg / Library / UefiDpLib / Dp.c
index 54fd0d1ae163b0ca2d61dd3a178b9531c8b85c25..94fa61c7108e55e421e9cd98fdffa645379b4fa6 100644 (file)
@@ -13,7 +13,7 @@
   Dp uses this information to group records in different ways.  It also uses\r
   timer information to calculate elapsed time for each measurement.\r
  \r
-  Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.\r
+  Copyright (c) 2009 - 2017, Intel Corporation. All rights reserved.\r
   (C) Copyright 2015-2016 Hewlett Packard Enterprise Development LP<BR>\r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
 **/\r
 \r
 #include "UefiDpLib.h"\r
-#include <Guid/GlobalVariable.h>\r
-#include <Library/PrintLib.h>\r
-#include <Library/HandleParsingLib.h>\r
-#include <Library/DevicePathLib.h>\r
-\r
 #include <Library/ShellLib.h>\r
 #include <Library/BaseLib.h>\r
 #include <Library/MemoryAllocationLib.h>\r
 #include <Library/DebugLib.h>\r
-#include <Library/TimerLib.h>\r
 #include <Library/UefiLib.h>\r
 \r
 #include <Guid/Performance.h>\r
@@ -153,8 +147,7 @@ ShellCommandRunDp (
   CONST CHAR16              *CmdLineArg;\r
   EFI_STATUS                Status;\r
 \r
-  UINT64                    Freq;\r
-  UINT64                    Ticker;\r
+  PERFORMANCE_PROPERTY      *PerformanceProperty;\r
   UINTN                     Number2Display;\r
 \r
   EFI_STRING                StringPtr;\r
@@ -168,6 +161,7 @@ ShellCommandRunDp (
   BOOLEAN                   CumulativeMode;\r
   CONST CHAR16              *CustomCumulativeToken;\r
   PERF_CUM_DATA             *CustomCumulativeData;\r
+  UINTN                     NameSize;\r
   SHELL_STATUS              ShellStatus;\r
 \r
   StringPtr   = NULL;\r
@@ -182,11 +176,6 @@ ShellCommandRunDp (
   CustomCumulativeData = NULL;\r
   ShellStatus = SHELL_SUCCESS;\r
 \r
-  // Get DP's entry time as soon as possible.\r
-  // This is used as the Shell-Phase end time.\r
-  //\r
-  Ticker  = GetPerformanceCounter ();\r
-\r
   //\r
   // initialize the shell lib (we must be in non-auto-init...)\r
   //\r
@@ -258,13 +247,20 @@ ShellCommandRunDp (
   CustomCumulativeToken = ShellCommandLineGetValue (ParamPackage, L"-c");\r
   if (CustomCumulativeToken != NULL) {\r
     CustomCumulativeData = AllocateZeroPool (sizeof (PERF_CUM_DATA));\r
-    ASSERT (CustomCumulativeData != NULL);\r
-    CustomCumulativeData->MinDur = 0;\r
+    if (CustomCumulativeData == NULL) {\r
+      return SHELL_OUT_OF_RESOURCES;\r
+    }\r
+    CustomCumulativeData->MinDur = PERF_MAXDUR;\r
     CustomCumulativeData->MaxDur = 0;\r
     CustomCumulativeData->Count  = 0;\r
     CustomCumulativeData->Duration = 0;\r
-    CustomCumulativeData->Name   = AllocateZeroPool (StrLen (CustomCumulativeToken) + 1);\r
-    UnicodeStrToAsciiStr (CustomCumulativeToken, CustomCumulativeData->Name);\r
+    NameSize = StrLen (CustomCumulativeToken) + 1;\r
+    CustomCumulativeData->Name   = AllocateZeroPool (NameSize);\r
+    if (CustomCumulativeData->Name == NULL) {\r
+      FreePool (CustomCumulativeData);\r
+      return SHELL_OUT_OF_RESOURCES;\r
+    }\r
+    UnicodeStrToAsciiStrS (CustomCumulativeToken, CustomCumulativeData->Name, NameSize);\r
   }\r
 \r
   //\r
@@ -275,10 +271,15 @@ ShellCommandRunDp (
   //    StartCount = Value loaded into the counter when it starts counting\r
   //      EndCount = Value counter counts to before it needs to be reset\r
   //\r
-  Freq = GetPerformanceCounterProperties (&TimerInfo.StartCount, &TimerInfo.EndCount);\r
+  Status = EfiGetSystemConfigurationTable (&gPerformanceProtocolGuid, (VOID **) &PerformanceProperty);\r
+  if (EFI_ERROR (Status) || (PerformanceProperty == NULL)) {\r
+    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PERF_PROPERTY_NOT_FOUND), gDpHiiHandle);\r
+    goto Done;\r
+  }\r
 \r
-  // Convert the Frequency from Hz to KHz\r
-  TimerInfo.Frequency = (UINT32)DivU64x32 (Freq, 1000);\r
+  TimerInfo.Frequency  = (UINT32)DivU64x32 (PerformanceProperty->Frequency, 1000);\r
+  TimerInfo.StartCount = PerformanceProperty->TimerStartValue;\r
+  TimerInfo.EndCount   = PerformanceProperty->TimerEndValue;\r
 \r
   // Determine in which direction the performance counter counts.\r
   TimerInfo.CountUp = (BOOLEAN) (TimerInfo.EndCount >= TimerInfo.StartCount);\r
@@ -354,7 +355,7 @@ ShellCommandRunDp (
   } else {\r
     //------------- Begin Cooked Mode Processing\r
     if (TraceMode) {\r
-      ProcessPhases ( Ticker );\r
+      ProcessPhases ();\r
       if ( ! SummaryMode) {\r
         Status = ProcessHandles ( ExcludeMode);\r
         if (Status == EFI_ABORTED) {\r