mirror of https://github.com/acidanthera/audk.git
Update DP to get Image name with the following methods orderly.
1. Image PDB 2. ComponentName2 protocol 3. FFS UI section 4. Image GUID 5. Image DevicePath 6. Unknown Driver Name Signed-off-by: lzeng14 Reviewed-by: lgao4 git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12779 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
9ff904b046
commit
a2daf8dbec
|
@ -46,8 +46,8 @@
|
||||||
EFI_HII_HANDLE gHiiHandle;
|
EFI_HII_HANDLE gHiiHandle;
|
||||||
SHELL_PARAM_ITEM *DpParamList = NULL;
|
SHELL_PARAM_ITEM *DpParamList = NULL;
|
||||||
CHAR16 *mPrintTokenBuffer = NULL;
|
CHAR16 *mPrintTokenBuffer = NULL;
|
||||||
CHAR16 mGaugeString[DXE_PERFORMANCE_STRING_SIZE];
|
CHAR16 mGaugeString[DP_GAUGE_STRING_LENGTH + 1];
|
||||||
CHAR16 mUnicodeToken[PERF_TOKEN_LENGTH + 1];
|
CHAR16 mUnicodeToken[DXE_PERFORMANCE_STRING_SIZE];
|
||||||
UINT64 mInterestThreshold;
|
UINT64 mInterestThreshold;
|
||||||
|
|
||||||
PERF_SUMMARY_DATA SummaryData = { 0 }; ///< Create the SummaryData structure and init. to ZERO.
|
PERF_SUMMARY_DATA SummaryData = { 0 }; ///< Create the SummaryData structure and init. to ZERO.
|
||||||
|
@ -85,22 +85,6 @@ PARAM_ITEM_LIST ParamList[] = {
|
||||||
|
|
||||||
///@}
|
///@}
|
||||||
|
|
||||||
/**
|
|
||||||
Wrap original FreePool to check NULL pointer first.
|
|
||||||
|
|
||||||
@param[in] Buffer The pointer to the buffer to free.
|
|
||||||
|
|
||||||
**/
|
|
||||||
VOID
|
|
||||||
SafeFreePool (
|
|
||||||
IN VOID *Buffer
|
|
||||||
)
|
|
||||||
{
|
|
||||||
if (Buffer != NULL) {
|
|
||||||
FreePool (Buffer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Transfer the param list value and get the command line parse.
|
Transfer the param list value and get the command line parse.
|
||||||
|
|
||||||
|
|
|
@ -58,10 +58,15 @@
|
||||||
UefiLib
|
UefiLib
|
||||||
HiiLib
|
HiiLib
|
||||||
PcdLib
|
PcdLib
|
||||||
|
DevicePathLib
|
||||||
|
DxeServicesLib
|
||||||
|
|
||||||
[Protocols]
|
[Protocols]
|
||||||
gEfiLoadedImageProtocolGuid # ALWAYS_CONSUMED
|
gEfiLoadedImageProtocolGuid # ALWAYS_CONSUMED
|
||||||
gEfiDriverBindingProtocolGuid # ALWAYS_CONSUMED
|
gEfiDriverBindingProtocolGuid # SOMETIMES_CONSUMED
|
||||||
|
gEfiComponentName2ProtocolGuid # SOMETIMES_CONSUMED
|
||||||
|
gEfiLoadedImageDevicePathProtocolGuid # SOMETIMES_CONSUMED
|
||||||
|
gEfiDevicePathToTextProtocolGuid # SOMETIMES_CONSUMED
|
||||||
|
|
||||||
[Pcd]
|
[Pcd]
|
||||||
gEfiMdePkgTokenSpaceGuid.PcdUefiLibMaxPrintBufferSize
|
gEfiMdePkgTokenSpaceGuid.PcdUefiLibMaxPrintBufferSize
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
* Dp application. In addition to global data, function declarations for
|
* Dp application. In addition to global data, function declarations for
|
||||||
* DpUtilities.c, DpTrace.c, and DpProfile.c are included here.
|
* DpUtilities.c, DpTrace.c, and DpProfile.c are included here.
|
||||||
*
|
*
|
||||||
* Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>
|
* Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
|
||||||
* This program and the accompanying materials
|
* This program and the accompanying materials
|
||||||
* are licensed and made available under the terms and conditions of the BSD License
|
* 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
|
* which accompanies this distribution. The full text of the license may be found at
|
||||||
|
@ -17,13 +17,16 @@
|
||||||
**/
|
**/
|
||||||
#ifndef _DP_INTELNAL_H_
|
#ifndef _DP_INTELNAL_H_
|
||||||
#define _DP_INTELNAL_H_
|
#define _DP_INTELNAL_H_
|
||||||
|
|
||||||
|
#define DP_GAUGE_STRING_LENGTH 36
|
||||||
|
|
||||||
//
|
//
|
||||||
/// Module-Global Variables
|
/// Module-Global Variables
|
||||||
///@{
|
///@{
|
||||||
extern EFI_HII_HANDLE gHiiHandle;
|
extern EFI_HII_HANDLE gHiiHandle;
|
||||||
extern CHAR16 *mPrintTokenBuffer;
|
extern CHAR16 *mPrintTokenBuffer;
|
||||||
extern CHAR16 mGaugeString[DXE_PERFORMANCE_STRING_SIZE];
|
extern CHAR16 mGaugeString[DP_GAUGE_STRING_LENGTH + 1];
|
||||||
extern CHAR16 mUnicodeToken[PERF_TOKEN_LENGTH + 1];
|
extern CHAR16 mUnicodeToken[DXE_PERFORMANCE_STRING_SIZE];
|
||||||
extern UINT64 mInterestThreshold;
|
extern UINT64 mInterestThreshold;
|
||||||
|
|
||||||
extern PERF_SUMMARY_DATA SummaryData; ///< Create the SummaryData structure and init. to ZERO.
|
extern PERF_SUMMARY_DATA SummaryData; ///< Create the SummaryData structure and init. to ZERO.
|
||||||
|
@ -100,6 +103,13 @@ GetShortPdbFileName (
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Get a human readable name for an image handle.
|
Get a human readable name for an image handle.
|
||||||
|
The following methods will be tried orderly:
|
||||||
|
1. Image PDB
|
||||||
|
2. ComponentName2 protocol
|
||||||
|
3. FFS UI section
|
||||||
|
4. Image GUID
|
||||||
|
5. Image DevicePath
|
||||||
|
6. Unknown Driver Name
|
||||||
|
|
||||||
@param[in] Handle
|
@param[in] Handle
|
||||||
|
|
||||||
|
@ -341,4 +351,16 @@ DumpRawProfile(
|
||||||
IN UINTN Limit,
|
IN UINTN Limit,
|
||||||
IN BOOLEAN ExcludeFlag
|
IN BOOLEAN ExcludeFlag
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Wrap original FreePool to check NULL pointer first.
|
||||||
|
|
||||||
|
@param[in] Buffer The pointer to the buffer to free.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID
|
||||||
|
SafeFreePool (
|
||||||
|
IN VOID *Buffer
|
||||||
|
);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Binary file not shown.
|
@ -1,7 +1,7 @@
|
||||||
/** @file
|
/** @file
|
||||||
* Trace reporting for the Dp utility.
|
* Trace reporting for the Dp utility.
|
||||||
*
|
*
|
||||||
* Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>
|
* Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
|
||||||
* This program and the accompanying materials
|
* This program and the accompanying materials
|
||||||
* are licensed and made available under the terms and conditions of the BSD License
|
* 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
|
* which accompanies this distribution. The full text of the license may be found at
|
||||||
|
@ -197,14 +197,11 @@ DumpAllTrace(
|
||||||
else {
|
else {
|
||||||
IncFlag = HiiGetString (gHiiHandle, STRING_TOKEN (STR_DP_INCOMPLETE), NULL); // Mark incomplete records
|
IncFlag = HiiGetString (gHiiHandle, STRING_TOKEN (STR_DP_INCOMPLETE), NULL); // Mark incomplete records
|
||||||
}
|
}
|
||||||
if ((ElapsedTime < mInterestThreshold) ||
|
if (((Measurement.EndTimeStamp != 0) && (ElapsedTime < mInterestThreshold)) ||
|
||||||
((ExcludeFlag) && (GetCumulativeItem(&Measurement) >= 0))
|
((ExcludeFlag) && (GetCumulativeItem(&Measurement) >= 0))
|
||||||
) { // Ignore "uninteresting" or excluded records
|
) { // Ignore "uninteresting" or excluded records
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (Measurement.EndTimeStamp == 0) {
|
|
||||||
ElapsedTime = Measurement.StartTimeStamp;
|
|
||||||
}
|
|
||||||
++Count; // Count the number of records printed
|
++Count; // Count the number of records printed
|
||||||
|
|
||||||
// If Handle is non-zero, see if we can determine a name for the driver
|
// If Handle is non-zero, see if we can determine a name for the driver
|
||||||
|
@ -219,11 +216,16 @@ DumpAllTrace(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Ensure that the argument strings are not too long.
|
|
||||||
mGaugeString[31] = 0;
|
|
||||||
mUnicodeToken[18] = 0;
|
|
||||||
|
|
||||||
PrintToken( STRING_TOKEN (STR_DP_ALL_STATS),
|
if (AsciiStrnCmp (Measurement.Token, ALit_PEIM, PERF_TOKEN_LENGTH) == 0) {
|
||||||
|
UnicodeSPrint (mGaugeString, sizeof (mGaugeString), L"%g", Measurement.Handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ensure that the argument strings are not too long.
|
||||||
|
mGaugeString[DP_GAUGE_STRING_LENGTH] = 0;
|
||||||
|
mUnicodeToken[13] = 0;
|
||||||
|
|
||||||
|
PrintToken( STRING_TOKEN (STR_DP_ALL_VARS),
|
||||||
Index, // 1 based, Which measurement record is being printed
|
Index, // 1 based, Which measurement record is being printed
|
||||||
IncFlag,
|
IncFlag,
|
||||||
Measurement.Handle,
|
Measurement.Handle,
|
||||||
|
@ -510,7 +512,7 @@ ProcessHandles(
|
||||||
Print (L"There are %,d Handles defined.\n", (Size / sizeof(HandleBuffer[0])));
|
Print (L"There are %,d Handles defined.\n", (Size / sizeof(HandleBuffer[0])));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
PrintToken (STRING_TOKEN (STR_DP_HANDLE_GUID) );
|
PrintToken (STRING_TOKEN (STR_DP_HANDLE_SECTION) );
|
||||||
PrintToken (STRING_TOKEN (STR_DP_DASHES) );
|
PrintToken (STRING_TOKEN (STR_DP_DASHES) );
|
||||||
|
|
||||||
LogEntryKey = 0;
|
LogEntryKey = 0;
|
||||||
|
@ -543,8 +545,8 @@ ProcessHandles(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Ensure that the argument strings are not too long.
|
// Ensure that the argument strings are not too long.
|
||||||
mGaugeString[31] = 0;
|
mGaugeString[DP_GAUGE_STRING_LENGTH] = 0;
|
||||||
mUnicodeToken[18] = 0;
|
mUnicodeToken[11] = 0;
|
||||||
if (mGaugeString[0] != 0) {
|
if (mGaugeString[0] != 0) {
|
||||||
// Display the record if it has a valid handle.
|
// Display the record if it has a valid handle.
|
||||||
PrintToken (
|
PrintToken (
|
||||||
|
@ -613,7 +615,7 @@ ProcessPeims(
|
||||||
ElapsedTime = DurationInMicroSeconds ( Duration ); // Calculate elapsed time in microseconds
|
ElapsedTime = DurationInMicroSeconds ( Duration ); // Calculate elapsed time in microseconds
|
||||||
if (ElapsedTime >= mInterestThreshold) {
|
if (ElapsedTime >= mInterestThreshold) {
|
||||||
// PEIM FILE Handle is the start address of its FFS file that contains its file guid.
|
// PEIM FILE Handle is the start address of its FFS file that contains its file guid.
|
||||||
PrintToken (STRING_TOKEN (STR_DP_PEIM_STAT2),
|
PrintToken (STRING_TOKEN (STR_DP_PEIM_VARS),
|
||||||
TIndex, // 1 based, Which measurement record is being printed
|
TIndex, // 1 based, Which measurement record is being printed
|
||||||
Measurement.Handle, // base address
|
Measurement.Handle, // base address
|
||||||
Measurement.Handle, // file guid
|
Measurement.Handle, // file guid
|
||||||
|
@ -668,6 +670,8 @@ ProcessGlobal(
|
||||||
{
|
{
|
||||||
AsciiStrToUnicodeStr (Measurement.Module, mGaugeString);
|
AsciiStrToUnicodeStr (Measurement.Module, mGaugeString);
|
||||||
AsciiStrToUnicodeStr (Measurement.Token, mUnicodeToken);
|
AsciiStrToUnicodeStr (Measurement.Token, mUnicodeToken);
|
||||||
|
mGaugeString[26] = 0;
|
||||||
|
mUnicodeToken[31] = 0;
|
||||||
if ( ! ( IsPhase( &Measurement) ||
|
if ( ! ( IsPhase( &Measurement) ||
|
||||||
(Measurement.Handle != NULL) ||
|
(Measurement.Handle != NULL) ||
|
||||||
(Measurement.EndTimeStamp == 0)
|
(Measurement.EndTimeStamp == 0)
|
||||||
|
@ -677,7 +681,7 @@ ProcessGlobal(
|
||||||
ElapsedTime = DurationInMicroSeconds ( Duration );
|
ElapsedTime = DurationInMicroSeconds ( Duration );
|
||||||
if (ElapsedTime >= mInterestThreshold) {
|
if (ElapsedTime >= mInterestThreshold) {
|
||||||
PrintToken (
|
PrintToken (
|
||||||
STRING_TOKEN (STR_DP_FOUR_VARS_2),
|
STRING_TOKEN (STR_DP_GLOBAL_VARS),
|
||||||
Index,
|
Index,
|
||||||
mGaugeString,
|
mGaugeString,
|
||||||
mUnicodeToken,
|
mUnicodeToken,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/** @file
|
/** @file
|
||||||
* Utility functions used by the Dp application.
|
* Utility functions used by the Dp application.
|
||||||
*
|
*
|
||||||
* Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>
|
* Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
|
||||||
* This program and the accompanying materials
|
* This program and the accompanying materials
|
||||||
* are licensed and made available under the terms and conditions of the BSD License
|
* 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
|
* which accompanies this distribution. The full text of the license may be found at
|
||||||
|
@ -21,9 +21,17 @@
|
||||||
#include <Library/PrintLib.h>
|
#include <Library/PrintLib.h>
|
||||||
#include <Library/HiiLib.h>
|
#include <Library/HiiLib.h>
|
||||||
#include <Library/PcdLib.h>
|
#include <Library/PcdLib.h>
|
||||||
|
#include <Library/UefiLib.h>
|
||||||
|
#include <Library/DevicePathLib.h>
|
||||||
|
|
||||||
|
#include <Pi/PiFirmwareFile.h>
|
||||||
|
#include <Library/DxeServicesLib.h>
|
||||||
|
|
||||||
#include <Protocol/LoadedImage.h>
|
#include <Protocol/LoadedImage.h>
|
||||||
#include <Protocol/DriverBinding.h>
|
#include <Protocol/DriverBinding.h>
|
||||||
|
#include <Protocol/ComponentName2.h>
|
||||||
|
#include <Protocol/DevicePath.h>
|
||||||
|
#include <Protocol/DevicePathToText.h>
|
||||||
|
|
||||||
#include <Guid/Performance.h>
|
#include <Guid/Performance.h>
|
||||||
|
|
||||||
|
@ -31,6 +39,22 @@
|
||||||
#include "Literals.h"
|
#include "Literals.h"
|
||||||
#include "DpInternal.h"
|
#include "DpInternal.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
Wrap original FreePool to check NULL pointer first.
|
||||||
|
|
||||||
|
@param[in] Buffer The pointer to the buffer to free.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID
|
||||||
|
SafeFreePool (
|
||||||
|
IN VOID *Buffer
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (Buffer != NULL) {
|
||||||
|
FreePool (Buffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Calculate an event's duration in timer ticks.
|
Calculate an event's duration in timer ticks.
|
||||||
|
|
||||||
|
@ -165,12 +189,19 @@ GetShortPdbFileName (
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Get a human readable name for an image handle.
|
Get a human readable name for an image handle.
|
||||||
|
The following methods will be tried orderly:
|
||||||
|
1. Image PDB
|
||||||
|
2. ComponentName2 protocol
|
||||||
|
3. FFS UI section
|
||||||
|
4. Image GUID
|
||||||
|
5. Image DevicePath
|
||||||
|
6. Unknown Driver Name
|
||||||
|
|
||||||
@param[in] Handle
|
@param[in] Handle
|
||||||
|
|
||||||
@post The resulting Unicode name string is stored in the
|
@post The resulting Unicode name string is stored in the
|
||||||
mGaugeString global array.
|
mGaugeString global array.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
VOID
|
VOID
|
||||||
GetNameFromHandle (
|
GetNameFromHandle (
|
||||||
|
@ -182,52 +213,154 @@ GetNameFromHandle (
|
||||||
CHAR8 *PdbFileName;
|
CHAR8 *PdbFileName;
|
||||||
EFI_DRIVER_BINDING_PROTOCOL *DriverBinding;
|
EFI_DRIVER_BINDING_PROTOCOL *DriverBinding;
|
||||||
EFI_STRING StringPtr;
|
EFI_STRING StringPtr;
|
||||||
|
EFI_DEVICE_PATH_PROTOCOL *LoadedImageDevicePath;
|
||||||
|
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
||||||
|
EFI_GUID *NameGuid;
|
||||||
|
CHAR16 *NameString;
|
||||||
|
UINTN StringSize;
|
||||||
|
CHAR8 *PlatformLanguage;
|
||||||
|
EFI_COMPONENT_NAME2_PROTOCOL *ComponentName2;
|
||||||
|
EFI_DEVICE_PATH_TO_TEXT_PROTOCOL *DevicePathToText;
|
||||||
|
|
||||||
// Proactively get the error message so it will be ready if needed
|
//
|
||||||
StringPtr = HiiGetString (gHiiHandle, STRING_TOKEN (STR_DP_ERROR_NAME), NULL);
|
// Method 1: Get the name string from image PDB
|
||||||
ASSERT (StringPtr != NULL);
|
|
||||||
|
|
||||||
// Get handle name from image protocol
|
|
||||||
//
|
//
|
||||||
Status = gBS->HandleProtocol (
|
Status = gBS->HandleProtocol (
|
||||||
Handle,
|
Handle,
|
||||||
&gEfiLoadedImageProtocolGuid,
|
&gEfiLoadedImageProtocolGuid,
|
||||||
(VOID**) &Image
|
(VOID **) &Image
|
||||||
);
|
);
|
||||||
|
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
Status = gBS->OpenProtocol (
|
Status = gBS->OpenProtocol (
|
||||||
|
Handle,
|
||||||
|
&gEfiDriverBindingProtocolGuid,
|
||||||
|
(VOID **) &DriverBinding,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
EFI_OPEN_PROTOCOL_GET_PROTOCOL
|
||||||
|
);
|
||||||
|
if (!EFI_ERROR (Status)) {
|
||||||
|
Status = gBS->HandleProtocol (
|
||||||
|
DriverBinding->ImageHandle,
|
||||||
|
&gEfiLoadedImageProtocolGuid,
|
||||||
|
(VOID **) &Image
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!EFI_ERROR (Status)) {
|
||||||
|
PdbFileName = PeCoffLoaderGetPdbPointer (Image->ImageBase);
|
||||||
|
|
||||||
|
if (PdbFileName != NULL) {
|
||||||
|
GetShortPdbFileName (PdbFileName, mGaugeString);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Method 2: Get the name string from ComponentName2 protocol
|
||||||
|
//
|
||||||
|
Status = gBS->HandleProtocol (
|
||||||
Handle,
|
Handle,
|
||||||
&gEfiDriverBindingProtocolGuid,
|
&gEfiComponentName2ProtocolGuid,
|
||||||
(VOID **) &DriverBinding,
|
(VOID **) &ComponentName2
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
EFI_OPEN_PROTOCOL_GET_PROTOCOL
|
|
||||||
);
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (!EFI_ERROR (Status)) {
|
||||||
StrCpy (mGaugeString, StringPtr);
|
//
|
||||||
FreePool (StringPtr);
|
// Get the current platform language setting
|
||||||
return ;
|
//
|
||||||
|
PlatformLanguage = GetEfiGlobalVariable (L"PlatformLang");
|
||||||
|
Status = ComponentName2->GetDriverName (
|
||||||
|
ComponentName2,
|
||||||
|
PlatformLanguage != NULL ? PlatformLanguage : "en-US",
|
||||||
|
&StringPtr
|
||||||
|
);
|
||||||
|
if (!EFI_ERROR (Status)) {
|
||||||
|
SafeFreePool (PlatformLanguage);
|
||||||
|
StrnCpy (mGaugeString, StringPtr, DP_GAUGE_STRING_LENGTH);
|
||||||
|
mGaugeString[DP_GAUGE_STRING_LENGTH] = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = gBS->HandleProtocol (
|
||||||
|
Handle,
|
||||||
|
&gEfiLoadedImageDevicePathProtocolGuid,
|
||||||
|
(VOID **) &LoadedImageDevicePath
|
||||||
|
);
|
||||||
|
if (!EFI_ERROR (Status)) {
|
||||||
|
DevicePath = LoadedImageDevicePath;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Try to get image GUID from LoadedImageDevicePath protocol
|
||||||
|
//
|
||||||
|
NameGuid = NULL;
|
||||||
|
while (!IsDevicePathEndType (DevicePath)) {
|
||||||
|
NameGuid = EfiGetNameGuidFromFwVolDevicePathNode ((MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *) DevicePath);
|
||||||
|
if (NameGuid != NULL) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
DevicePath = NextDevicePathNode (DevicePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get handle name from image protocol
|
if (NameGuid != NULL) {
|
||||||
//
|
//
|
||||||
Status = gBS->HandleProtocol (
|
// Try to get the image's FFS UI section by image GUID
|
||||||
DriverBinding->ImageHandle,
|
//
|
||||||
&gEfiLoadedImageProtocolGuid,
|
NameString = NULL;
|
||||||
(VOID**) &Image
|
StringSize = 0;
|
||||||
);
|
Status = GetSectionFromAnyFv (
|
||||||
|
NameGuid,
|
||||||
|
EFI_SECTION_USER_INTERFACE,
|
||||||
|
0,
|
||||||
|
&NameString,
|
||||||
|
&StringSize
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!EFI_ERROR (Status)) {
|
||||||
|
//
|
||||||
|
// Method 3. Get the name string from FFS UI section
|
||||||
|
//
|
||||||
|
StrnCpy (mGaugeString, NameString, DP_GAUGE_STRING_LENGTH);
|
||||||
|
mGaugeString[DP_GAUGE_STRING_LENGTH] = 0;
|
||||||
|
FreePool (NameString);
|
||||||
|
} else {
|
||||||
|
//
|
||||||
|
// Method 4: Get the name string from image GUID
|
||||||
|
//
|
||||||
|
UnicodeSPrint (mGaugeString, sizeof (mGaugeString), L"%g", NameGuid);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
//
|
||||||
|
// Method 5: Get the name string from image DevicePath
|
||||||
|
//
|
||||||
|
Status = gBS->LocateProtocol (
|
||||||
|
&gEfiDevicePathToTextProtocolGuid,
|
||||||
|
NULL,
|
||||||
|
(VOID **) &DevicePathToText
|
||||||
|
);
|
||||||
|
if (!EFI_ERROR (Status)) {
|
||||||
|
NameString = DevicePathToText->ConvertDevicePathToText (LoadedImageDevicePath, TRUE, FALSE);
|
||||||
|
if (NameString != NULL) {
|
||||||
|
StrnCpy (mGaugeString, NameString, DP_GAUGE_STRING_LENGTH);
|
||||||
|
mGaugeString[DP_GAUGE_STRING_LENGTH] = 0;
|
||||||
|
FreePool (NameString);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PdbFileName = PeCoffLoaderGetPdbPointer (Image->ImageBase);
|
//
|
||||||
|
// Method 6: Unknown Driver Name
|
||||||
if (PdbFileName != NULL) {
|
//
|
||||||
GetShortPdbFileName (PdbFileName, mGaugeString);
|
StringPtr = HiiGetString (gHiiHandle, STRING_TOKEN (STR_DP_ERROR_NAME), NULL);
|
||||||
} else {
|
ASSERT (StringPtr != NULL);
|
||||||
StrCpy (mGaugeString, StringPtr);
|
StrCpy (mGaugeString, StringPtr);
|
||||||
}
|
|
||||||
FreePool (StringPtr);
|
FreePool (StringPtr);
|
||||||
return ;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue