Our new performance infrastructure (edk2 trunk commit hash value:
SHA-1: 73fef64f14d1b97ae9bd4705df3becc022391eba ~
SHA-1: 115eae650bfd2be2c2bc37360f4a755065e774c4) can support to
dump performance date form ACPI table in OS. So we can remove
the old pref code to write performance data to OS.

Cc: Liming Gao <liming....@intel.com>
Cc: Star Zeng <star.z...@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Dandan Bi <dandan...@intel.com>
---
 .../Library/GenericBdsLib/BdsBoot.c                |  29 +-
 .../Library/GenericBdsLib/GenericBdsLib.inf        |   4 +-
 .../Library/GenericBdsLib/InternalBdsLib.h         |  19 +-
 .../Library/GenericBdsLib/Performance.c            | 313 ---------------------
 4 files changed, 28 insertions(+), 337 deletions(-)
 delete mode 100644 IntelFrameworkModulePkg/Library/GenericBdsLib/Performance.c

diff --git a/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsBoot.c 
b/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsBoot.c
index d1da635..9c2d592 100644
--- a/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsBoot.c
+++ b/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsBoot.c
@@ -1,9 +1,9 @@
 /** @file
   BDS Lib functions which relate with create or process the boot option.
 
-Copyright (c) 2004 - 2017, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>
 This program and the accompanying materials
 are licensed and made available under the terms and conditions of the BSD 
License
 which accompanies this distribution.  The full text of the license may be 
found at
 http://opensource.org/licenses/bsd-license.php
 
@@ -17,10 +17,33 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER 
EXPRESS OR IMPLIED.
 
 BOOLEAN mEnumBootDevice = FALSE;
 EFI_HII_HANDLE gBdsLibStringPackHandle = NULL;
 
 /**
+
+  End Perf entry of BDS
+
+  @param  Event                 The triggered event.
+  @param  Context               Context for this event.
+
+**/
+VOID
+EFIAPI
+BmEndOfBdsPerfCode (
+  IN EFI_EVENT  Event,
+  IN VOID       *Context
+  )
+{
+  //
+  // Record the performance data for End of BDS
+  //
+  PERF_END(NULL, "BDS", NULL, 0);
+
+  return ;
+}
+
+/**
   The constructor function register UNI strings into imageHandle.
   
   It will ASSERT() if that operation fails and it will always return 
EFI_SUCCESS. 
 
   @param  ImageHandle   The firmware allocated handle for the EFI image.
@@ -1693,11 +1716,11 @@ BdsLibDoLegacyBoot (
     //
     // Create an event to be signalled when Legacy Boot occurs to write 
performance data.
     //
     Status = EfiCreateEventLegacyBootEx(
                TPL_NOTIFY,
-               WriteBootToOsPerformanceData,
+               BmEndOfBdsPerfCode,
                NULL, 
                &LegacyBootEvent
                );
     ASSERT_EFI_ERROR (Status);
   );
@@ -2423,11 +2446,11 @@ BdsLibBootViaBootOption (
 
   //
   // Write boot to OS performance data for UEFI boot
   //
   PERF_CODE (
-    WriteBootToOsPerformanceData (NULL, NULL);
+    BmEndOfBdsPerfCode (NULL, NULL);
   );
 
   //
   // Report status code for OS Loader StartImage.
   //
diff --git a/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.inf 
b/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.inf
index 9d879c2..a9e0f51 100644
--- a/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.inf
+++ b/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.inf
@@ -4,11 +4,11 @@
 #  General BDS defines and produce general interfaces for platform BDS driver 
including:
 #  1) BDS boot policy interface;
 #  2) BDS boot device connect interface;
 #  3) BDS Misc interfaces for mainting boot variable, ouput string, etc.
 #  
-#  Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR>
+#  Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
 #  This program and the accompanying materials
 #  are licensed and made available under the terms and conditions of the BSD 
License
 #  which accompanies this distribution.  The full text of the license may be 
found at
 #  http://opensource.org/licenses/bsd-license.php
 #  
@@ -33,11 +33,10 @@
 #  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
 #
 
 [Sources]
   DevicePath.c
-  Performance.c
   BdsConnect.c
   BdsMisc.c
   BdsConsole.c
   BdsBoot.c
   InternalBdsLib.h
@@ -94,11 +93,10 @@
   ## SOMETIMES_PRODUCES ## Variable:L"ErrOut"      # The device path of error 
out device
   ## SOMETIMES_PRODUCES ## Variable:L"BootCurrent" # The boot option of 
current boot
   ## SOMETIMES_PRODUCES ## Variable:L"BootNext"    # The number of next boot 
option
   gEfiGlobalVariableGuid
   gEfiFileInfoGuid                              ## SOMETIMES_CONSUMES ## GUID
-  gPerformanceProtocolGuid                      ## SOMETIMES_CONSUMES ## 
Variable:L"PerfDataMemAddr" # The ACPI address of performance data
   gLastEnumLangGuid                             ## SOMETIMES_PRODUCES ## 
Variable:L"LastEnumLang" # Platform language at last time enumeration.
   gHdBootDevicePathVariablGuid                  ## SOMETIMES_PRODUCES ## 
Variable:L"HDDP" # The device path of Boot file on Hard device.
   gBdsLibStringPackageGuid                      ## CONSUMES ## HII # HII 
String PackageList Guid
   ## SOMETIMES_PRODUCES ## Variable:L"LegacyDevOrder"
   ## SOMETIMES_CONSUMES ## Variable:L"LegacyDevOrder"
diff --git a/IntelFrameworkModulePkg/Library/GenericBdsLib/InternalBdsLib.h 
b/IntelFrameworkModulePkg/Library/GenericBdsLib/InternalBdsLib.h
index 7201d8a..8c9ab6e 100644
--- a/IntelFrameworkModulePkg/Library/GenericBdsLib/InternalBdsLib.h
+++ b/IntelFrameworkModulePkg/Library/GenericBdsLib/InternalBdsLib.h
@@ -1,9 +1,9 @@
 /** @file
   BDS library definition, include the file and data structure
 
-Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>
 This program and the accompanying materials
 are licensed and made available under the terms and conditions of the BSD 
License
 which accompanies this distribution.  The full text of the license may be 
found at
 http://opensource.org/licenses/bsd-license.php
 
@@ -43,11 +43,10 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER 
EXPRESS OR IMPLIED.
 
 #include <Guid/MemoryTypeInformation.h>
 #include <Guid/FileInfo.h>
 #include <Guid/GlobalVariable.h>
 #include <Guid/PcAnsi.h>
-#include <Guid/Performance.h>
 #include <Guid/BdsLibHii.h>
 #include <Guid/HdBootVariable.h>
 #include <Guid/LastEnumLang.h>
 #include <Guid/LegacyDevOrder.h>
 #include <Guid/StatusCodeDataTypeVariable.h>
@@ -83,26 +82,10 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER 
EXPRESS OR IMPLIED.
         #error "Can not determine the default boot file name for unknown 
processor type!"
     #endif
 #endif
 
 /**
-
-  Writes performance data of booting into the allocated memory.
-  OS can process these records.
-
-  @param  Event                 The triggered event.
-  @param  Context               Context for this event.
-
-**/
-VOID
-EFIAPI
-WriteBootToOsPerformanceData (
-  IN EFI_EVENT  Event,
-  IN VOID       *Context
-  );
-
-/**
   Get the headers (dos, image, optional header) from an image
 
   @param  Device                SimpleFileSystem device handle
   @param  FileName              File name for the image
   @param  DosHeader             Pointer to dos header
diff --git a/IntelFrameworkModulePkg/Library/GenericBdsLib/Performance.c 
b/IntelFrameworkModulePkg/Library/GenericBdsLib/Performance.c
deleted file mode 100644
index e50345a..0000000
--- a/IntelFrameworkModulePkg/Library/GenericBdsLib/Performance.c
+++ /dev/null
@@ -1,313 +0,0 @@
-/** @file
-  This file include the file which can help to get the system
-  performance, all the function will only include if the performance
-  switch is set.
-
-Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>
-This program and the accompanying materials
-are licensed and made available under the terms and conditions of the BSD 
License
-which accompanies this distribution.  The full text of the license may be 
found at
-http://opensource.org/licenses/bsd-license.php
-
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "InternalBdsLib.h"
-
-PERF_HEADER               mPerfHeader;
-PERF_DATA                 mPerfData;
-EFI_PHYSICAL_ADDRESS      mAcpiLowMemoryBase = 0x0FFFFFFFFULL;
-
-/**
-  Get the short verion of PDB file name to be
-  used in performance data logging.
-
-  @param PdbFileName     The long PDB file name.
-  @param GaugeString     The output string to be logged by performance logger.
-
-**/
-VOID
-GetShortPdbFileName (
-  IN  CONST CHAR8  *PdbFileName,
-  OUT       CHAR8  *GaugeString
-  )
-{
-  UINTN Index;
-  UINTN Index1;
-  UINTN StartIndex;
-  UINTN EndIndex;
-
-  if (PdbFileName == NULL) {
-    AsciiStrCpyS (GaugeString, PERF_TOKEN_SIZE, " ");
-  } else {
-    StartIndex = 0;
-    for (EndIndex = 0; PdbFileName[EndIndex] != 0; EndIndex++)
-      ;
-
-    for (Index = 0; PdbFileName[Index] != 0; Index++) {
-      if (PdbFileName[Index] == '\\') {
-        StartIndex = Index + 1;
-      }
-
-      if (PdbFileName[Index] == '.') {
-        EndIndex = Index;
-      }
-    }
-
-    Index1 = 0;
-    for (Index = StartIndex; Index < EndIndex; Index++) {
-      GaugeString[Index1] = PdbFileName[Index];
-      Index1++;
-      if (Index1 == PERF_TOKEN_LENGTH) {
-        break;
-      }
-    }
-
-    GaugeString[Index1] = 0;
-  }
-
-  return ;
-}
-
-/**
-  Get the name from the Driver handle, which can be a handle with
-  EFI_LOADED_IMAGE_PROTOCOL or EFI_DRIVER_BINDING_PROTOCOL installed.
-  This name can be used in performance data logging.
-
-  @param Handle          Driver handle.
-  @param GaugeString     The output string to be logged by performance logger.
-
-**/
-VOID
-GetNameFromHandle (
-  IN  EFI_HANDLE     Handle,
-  OUT CHAR8          *GaugeString
-  )
-{
-  EFI_STATUS                  Status;
-  EFI_LOADED_IMAGE_PROTOCOL   *Image;
-  CHAR8                       *PdbFileName;
-  EFI_DRIVER_BINDING_PROTOCOL *DriverBinding;
-
-  AsciiStrCpyS (GaugeString, PERF_TOKEN_SIZE, " ");
-
-  //
-  // Get handle name from image protocol
-  //
-  Status = gBS->HandleProtocol (
-                  Handle,
-                  &gEfiLoadedImageProtocolGuid,
-                  (VOID **) &Image
-                  );
-
-  if (EFI_ERROR (Status)) {
-    Status = gBS->OpenProtocol (
-                    Handle,
-                    &gEfiDriverBindingProtocolGuid,
-                    (VOID **) &DriverBinding,
-                    NULL,
-                    NULL,
-                    EFI_OPEN_PROTOCOL_GET_PROTOCOL
-                    );
-    if (EFI_ERROR (Status)) {
-      return ;
-    }
-    //
-    // Get handle name from image protocol
-    //
-    Status = gBS->HandleProtocol (
-                    DriverBinding->ImageHandle,
-                    &gEfiLoadedImageProtocolGuid,
-                    (VOID **) &Image
-                    );
-  }
-
-  PdbFileName = PeCoffLoaderGetPdbPointer (Image->ImageBase);
-
-  if (PdbFileName != NULL) {
-    GetShortPdbFileName (PdbFileName, GaugeString);
-  }
-
-  return ;
-}
-
-/**
-
-  Writes performance data of booting into the allocated memory.
-  OS can process these records.
-
-  @param  Event                 The triggered event.
-  @param  Context               Context for this event.
-
-**/
-VOID
-EFIAPI
-WriteBootToOsPerformanceData (
-  IN EFI_EVENT  Event,
-  IN VOID       *Context
-  )
-{
-  EFI_STATUS                Status;
-  UINT32                    LimitCount;
-  EFI_HANDLE                *Handles;
-  UINTN                     NoHandles;
-  CHAR8                     GaugeString[PERF_TOKEN_SIZE];
-  UINT8                     *Ptr;
-  UINT32                    Index;
-  UINT64                    Ticker;
-  UINT64                    Freq;
-  UINT32                    Duration;
-  UINTN                     LogEntryKey;
-  CONST VOID                *Handle;
-  CONST CHAR8               *Token;
-  CONST CHAR8               *Module;
-  UINT64                    StartTicker;
-  UINT64                    EndTicker;
-  UINT64                    StartValue;
-  UINT64                    EndValue;
-  BOOLEAN                   CountUp;
-  UINTN                     VarSize;
-  BOOLEAN                   Found;
-
-  //
-  // Record the performance data for End of BDS
-  //
-  PERF_END(NULL, "BDS", NULL, 0);
-
-  //
-  // Retrieve time stamp count as early as possible
-  //
-  Ticker  = GetPerformanceCounter ();
-
-  Freq    = GetPerformanceCounterProperties (&StartValue, &EndValue);
-  
-  Freq    = DivU64x32 (Freq, 1000);
-
-  mPerfHeader.CpuFreq = Freq;
-
-  //
-  // Record BDS raw performance data
-  //
-  if (EndValue >= StartValue) {
-    mPerfHeader.BDSRaw = Ticker - StartValue;
-    CountUp            = TRUE;
-  } else {
-    mPerfHeader.BDSRaw = StartValue - Ticker;
-    CountUp            = FALSE;
-  }
-
-  //
-  // Reset the entry count
-  //
-  mPerfHeader.Count = 0;
-
-  if (mAcpiLowMemoryBase == 0x0FFFFFFFF) {
-    VarSize = sizeof (EFI_PHYSICAL_ADDRESS);
-    Status = gRT->GetVariable (
-                    L"PerfDataMemAddr",
-                    &gPerformanceProtocolGuid,
-                    NULL,
-                    &VarSize,
-                    &mAcpiLowMemoryBase
-                    );
-    if (EFI_ERROR (Status)) {
-      //
-      // Fail to get the variable, return.
-      //
-      return;
-    }
-  }
-
-  //
-  // Put Detailed performance data into memory
-  //
-  Handles = NULL;
-  Status = gBS->LocateHandleBuffer (
-                  AllHandles,
-                  NULL,
-                  NULL,
-                  &NoHandles,
-                  &Handles
-                  );
-  if (EFI_ERROR (Status)) {
-    return ;
-  }
-
-  Ptr        = (UINT8 *) ((UINT32) mAcpiLowMemoryBase + sizeof (PERF_HEADER));
-  LimitCount = (UINT32) (PERF_DATA_MAX_LENGTH - sizeof (PERF_HEADER)) / sizeof 
(PERF_DATA);
-
-  //
-  // Get performance data
-  //
-  LogEntryKey = 0;
-  while ((LogEntryKey = GetPerformanceMeasurement (
-                          LogEntryKey,
-                          &Handle,
-                          &Token,
-                          &Module,
-                          &StartTicker,
-                          &EndTicker)) != 0) {
-    if (EndTicker != 0) {
-      if (StartTicker == 1) {
-        StartTicker = StartValue;
-      }
-      if (EndTicker == 1) {
-        EndTicker = StartValue;
-      }
-      Ticker = CountUp ? (EndTicker - StartTicker) : (StartTicker - EndTicker);
-
-      Duration = (UINT32) DivU64x32 (Ticker, (UINT32) Freq);
-      if (Duration == 0) {
-        continue;
-      }
-
-      ZeroMem (&mPerfData, sizeof (PERF_DATA));
-
-      mPerfData.Duration = Duration;
-
-      //
-      // See if the Handle is in the handle buffer
-      //
-      Found = FALSE;
-      for (Index = 0; Index < NoHandles; Index++) {
-        if (Handle == Handles[Index]) {
-          GetNameFromHandle (Handles[Index], GaugeString);
-          AsciiStrCpyS (mPerfData.Token, PERF_TOKEN_SIZE, GaugeString);
-          Found = TRUE;
-          break;
-        }
-      }
-
-      if (!Found) {
-        AsciiStrnCpyS (mPerfData.Token, PERF_TOKEN_SIZE, Token, 
PERF_TOKEN_LENGTH);
-      }
-
-      CopyMem (Ptr, &mPerfData, sizeof (PERF_DATA));
-      Ptr += sizeof (PERF_DATA);
-
-      mPerfHeader.Count++;
-      if (mPerfHeader.Count == LimitCount) {
-        goto Done;
-      }
-    }
-  }
-
-Done:
-
-  FreePool (Handles);
-
-  mPerfHeader.Signiture = PERFORMANCE_SIGNATURE;
-
-  //
-  // Put performance data to Reserved memory
-  //
-  CopyMem (
-    (UINTN *) (UINTN) mAcpiLowMemoryBase,
-    &mPerfHeader,
-    sizeof (PERF_HEADER)
-    );
-
-  return ;
-}
-- 
1.9.5.msysgit.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to