/** @file\r
Main file for Drivers shell Driver1 function.\r
\r
- Copyright (c) 2012 - 2015, Hewlett-Packard Development Company, L.P.<BR>\r
- Copyright (c) 2010 - 2013, Intel Corporation. All rights reserved.<BR>\r
+ (C) Copyright 2012-2015 Hewlett-Packard Development Company, L.P.<BR>\r
+ Copyright (c) 2010 - 2017, 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
free this memory.\r
**/\r
CHAR16*\r
-EFIAPI\r
GetDevicePathTextForHandle(\r
IN EFI_HANDLE TheHandle\r
)\r
@retval FALSE The driver does not have Driver Configuration.\r
**/\r
BOOLEAN\r
-EFIAPI\r
ReturnDriverConfig(\r
IN CONST EFI_HANDLE TheHandle\r
)\r
@retval FALSE The driver does not have Driver Diagnostics.\r
**/\r
BOOLEAN\r
-EFIAPI\r
ReturnDriverDiag(\r
IN CONST EFI_HANDLE TheHandle\r
)\r
@retval 0xFFFFFFFF An error ocurred.\r
**/\r
UINT32\r
-EFIAPI\r
ReturnDriverVersion(\r
IN CONST EFI_HANDLE TheHandle\r
)\r
return (RetVal);\r
}\r
\r
+/**\r
+ Get image name from Image Handle.\r
+\r
+ @param[in] Handle Image Handle\r
+\r
+ @return A pointer to the image name as a string.\r
+**/\r
+CHAR16 *\r
+GetImageNameFromHandle (\r
+ IN CONST EFI_HANDLE Handle\r
+ )\r
+{\r
+ EFI_STATUS Status;\r
+ EFI_DRIVER_BINDING_PROTOCOL *DriverBinding;\r
+ EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;\r
+ EFI_DEVICE_PATH_PROTOCOL *DevPathNode;\r
+ EFI_GUID *NameGuid;\r
+ CHAR16 *ImageName;\r
+ UINTN BufferSize;\r
+ UINT32 AuthenticationStatus;\r
+ EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv2;\r
+\r
+ LoadedImage = NULL;\r
+ DriverBinding = NULL;\r
+ ImageName = NULL;\r
+\r
+ Status = gBS->OpenProtocol (\r
+ Handle,\r
+ &gEfiDriverBindingProtocolGuid,\r
+ (VOID **) &DriverBinding,\r
+ NULL,\r
+ NULL,\r
+ EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ return NULL;\r
+ }\r
+ Status = gBS->OpenProtocol (\r
+ DriverBinding->ImageHandle,\r
+ &gEfiLoadedImageProtocolGuid,\r
+ (VOID**)&LoadedImage,\r
+ gImageHandle,\r
+ NULL,\r
+ EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
+ );\r
+ if (!EFI_ERROR (Status)) {\r
+ DevPathNode = LoadedImage->FilePath;\r
+ if (DevPathNode == NULL) {\r
+ return NULL;\r
+ }\r
+ while (!IsDevicePathEnd (DevPathNode)) {\r
+ NameGuid = EfiGetNameGuidFromFwVolDevicePathNode ((MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *)DevPathNode);\r
+ if (NameGuid != NULL) {\r
+ Status = gBS->HandleProtocol (\r
+ LoadedImage->DeviceHandle,\r
+ &gEfiFirmwareVolume2ProtocolGuid,\r
+ (VOID **)&Fv2\r
+ );\r
+ if (!EFI_ERROR (Status)) {\r
+ Status = Fv2->ReadSection (\r
+ Fv2,\r
+ NameGuid,\r
+ EFI_SECTION_USER_INTERFACE,\r
+ 0,\r
+ (VOID **)&ImageName,\r
+ &BufferSize,\r
+ &AuthenticationStatus\r
+ );\r
+ if (!EFI_ERROR (Status)) {\r
+ break;\r
+ }\r
+ ImageName = NULL;\r
+ }\r
+ }\r
+ //\r
+ // Next device path node\r
+ //\r
+ DevPathNode = NextDevicePathNode (DevPathNode);\r
+ }\r
+ if (ImageName == NULL) {\r
+ ImageName = ConvertDevicePathToText (LoadedImage->FilePath, TRUE, TRUE);\r
+ }\r
+ }\r
+ return ImageName;\r
+}\r
+\r
/**\r
Function for 'drivers' command.\r
\r
EFI_HANDLE *HandleWalker;\r
UINTN ChildCount;\r
UINTN DeviceCount;\r
+ CHAR16 ChildCountStr[3];\r
+ CHAR16 DeviceCountStr[3];\r
CHAR16 *Temp2;\r
CONST CHAR16 *FullDriverName;\r
CHAR16 *TruncatedDriverName;\r
+ CHAR16 *ImageName;\r
CHAR16 *FormatString;\r
UINT32 DriverVersion;\r
BOOLEAN DriverConfig;\r
DriverConfig = ReturnDriverConfig(*HandleWalker);\r
DriverDiag = ReturnDriverDiag (*HandleWalker);\r
FullDriverName = GetStringNameFromHandle(*HandleWalker, Language);\r
+ ImageName = GetImageNameFromHandle (*HandleWalker);\r
\r
+ UnicodeValueToStringS (ChildCountStr, sizeof (ChildCountStr), 0, ChildCount, 0);\r
+ UnicodeValueToStringS (DeviceCountStr, sizeof (DeviceCountStr), 0, DeviceCount, 0);\r
TruncatedDriverName = NULL;\r
if (!SfoFlag && (FullDriverName != NULL)) {\r
TruncatedDriverName = AllocateZeroPool ((MAX_LEN_DRIVER_NAME + 1) * sizeof (CHAR16));\r
- StrnCpy (TruncatedDriverName, FullDriverName, MAX_LEN_DRIVER_NAME);\r
+ StrnCpyS (TruncatedDriverName, MAX_LEN_DRIVER_NAME + 1, FullDriverName, MAX_LEN_DRIVER_NAME);\r
}\r
\r
- ShellPrintEx(\r
- -1,\r
- -1,\r
- FormatString,\r
- ConvertHandleToHandleIndex(*HandleWalker),\r
- DriverVersion,\r
- ChildCount > 0?L'B':(DeviceCount > 0?L'D':L'?'),\r
- DriverConfig?L'Y':L'N',\r
- DriverDiag?L'Y':L'N',\r
- DeviceCount,\r
- ChildCount,\r
- SfoFlag?FullDriverName:TruncatedDriverName,\r
- Temp2==NULL?L"":Temp2\r
- );\r
+ if (!SfoFlag) {\r
+ ShellPrintEx (\r
+ -1,\r
+ -1,\r
+ FormatString,\r
+ ConvertHandleToHandleIndex (*HandleWalker),\r
+ DriverVersion,\r
+ ChildCount > 0 ? L'B' : (DeviceCount > 0 ? L'D' : L'?'),\r
+ DriverConfig ? L'X' : L'-',\r
+ DriverDiag ? L'X' : L'-',\r
+ DeviceCount > 0 ? DeviceCountStr : L"-",\r
+ ChildCount > 0 ? ChildCountStr : L"-",\r
+ TruncatedDriverName,\r
+ ImageName == NULL ? L"" : ImageName\r
+ );\r
+ } else {\r
+ ShellPrintEx (\r
+ -1,\r
+ -1,\r
+ FormatString,\r
+ ConvertHandleToHandleIndex (*HandleWalker),\r
+ DriverVersion,\r
+ ChildCount > 0 ? L'B' : (DeviceCount > 0 ? L'D' : L'?'),\r
+ DriverConfig ? L'Y' : L'N',\r
+ DriverDiag ? L'Y' : L'N',\r
+ DeviceCount,\r
+ ChildCount,\r
+ FullDriverName,\r
+ Temp2 == NULL ? L"" : Temp2\r
+ );\r
+ }\r
if (TruncatedDriverName != NULL) {\r
FreePool (TruncatedDriverName);\r
}\r
if (Temp2 != NULL) {\r
FreePool(Temp2);\r
}\r
- \r
+ if (ImageName != NULL) {\r
+ FreePool (ImageName);\r
+ }\r
+\r
if (ShellGetExecutionBreakFlag ()) {\r
ShellStatus = SHELL_ABORTED;\r
break;\r