The output of "dh <handle>" originally is like below: 12C: USBIO DevicePath(x0)/Pci(0x14,0x0)/USB(0x6,0x0))
The device path part is very confusing. Use ".." in front of the partially displayed device path is better and it also aligns to the example output in Shell spec. 12C: USBIO DevicePath(..)/Pci(0x14,0x0)/USB(0x6,0x0)) Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ruiyu Ni <[email protected]> Cc: Jiewen Yao <[email protected]> Cc: Jaben Carsey <[email protected]> --- .../UefiHandleParsingLib/UefiHandleParsingLib.c | 347 +++++++++++---------- 1 file changed, 175 insertions(+), 172 deletions(-) diff --git a/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c b/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c index a81d1f2..9103a24 100644 --- a/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c +++ b/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c @@ -244,15 +244,15 @@ GraphicsOutputProtocolDumpInformation( IN CONST BOOLEAN Verbose ) { - EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput; - EFI_STATUS Status; - CHAR16 *RetVal; - CHAR16 *Temp; - CHAR16 *Fmt; - CHAR16 *TempRetVal; - UINTN GopInfoSize; - UINT32 Mode; - EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *GopInfo; + EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput; + EFI_STATUS Status; + CHAR16 *RetVal; + CHAR16 *Temp; + CHAR16 *Fmt; + CHAR16 *TempRetVal; + UINTN GopInfoSize; + UINT32 Mode; + EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *GopInfo; if (!Verbose) { return (CatSPrint(NULL, L"GraphicsOutput")); @@ -299,53 +299,53 @@ GraphicsOutputProtocolDumpInformation( GraphicsOutput->Mode->Info->PixelFormat!=PixelBitMask?0:GraphicsOutput->Mode->Info->PixelInformation.BlueMask ); - SHELL_FREE_NON_NULL (Temp); - + SHELL_FREE_NON_NULL (Temp); + Temp = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN (STR_GOP_RES_LIST_MAIN), NULL); if (Temp == NULL) { SHELL_FREE_NON_NULL (RetVal); goto EXIT; } - - TempRetVal = CatSPrint (RetVal, Temp); + + TempRetVal = CatSPrint (RetVal, Temp); SHELL_FREE_NON_NULL (RetVal); if (TempRetVal == NULL) { goto EXIT; } - RetVal = TempRetVal; - SHELL_FREE_NON_NULL (Temp); - + RetVal = TempRetVal; + SHELL_FREE_NON_NULL (Temp); + Temp = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN (STR_GOP_RES_LIST_ENTRY), NULL); if (Temp == NULL) { SHELL_FREE_NON_NULL (RetVal); goto EXIT; } - - for (Mode = 0; Mode < GraphicsOutput->Mode->MaxMode; Mode++) { - Status = GraphicsOutput->QueryMode ( - GraphicsOutput, - Mode, - &GopInfoSize, - &GopInfo - ); - if (EFI_ERROR (Status)) { - continue; - } - - TempRetVal = CatSPrint ( - RetVal, - Temp, - Mode, - GopInfo->HorizontalResolution, - GopInfo->VerticalResolution - ); - - SHELL_FREE_NON_NULL (GopInfo); - SHELL_FREE_NON_NULL (RetVal); - RetVal = TempRetVal; - } - + + for (Mode = 0; Mode < GraphicsOutput->Mode->MaxMode; Mode++) { + Status = GraphicsOutput->QueryMode ( + GraphicsOutput, + Mode, + &GopInfoSize, + &GopInfo + ); + if (EFI_ERROR (Status)) { + continue; + } + + TempRetVal = CatSPrint ( + RetVal, + Temp, + Mode, + GopInfo->HorizontalResolution, + GopInfo->VerticalResolution + ); + + SHELL_FREE_NON_NULL (GopInfo); + SHELL_FREE_NON_NULL (RetVal); + RetVal = TempRetVal; + } + EXIT: SHELL_FREE_NON_NULL(Temp); @@ -355,134 +355,134 @@ EXIT: } /** - Function to dump information about EDID Discovered Protocol. - - This will allocate the return buffer from boot services pool. - - @param[in] TheHandle The handle that has LoadedImage installed. - @param[in] Verbose TRUE for additional information, FALSE otherwise. - - @retval A pointer to a string containing the information. -**/ -CHAR16* -EFIAPI -EdidDiscoveredProtocolDumpInformation ( - IN CONST EFI_HANDLE TheHandle, - IN CONST BOOLEAN Verbose - ) -{ - EFI_EDID_DISCOVERED_PROTOCOL *EdidDiscovered; - EFI_STATUS Status; - CHAR16 *RetVal; - CHAR16 *Temp; - CHAR16 *TempRetVal; - - if (!Verbose) { - return (CatSPrint (NULL, L"EDIDDiscovered")); - } - - Status = gBS->OpenProtocol ( - TheHandle, - &gEfiEdidDiscoveredProtocolGuid, - (VOID**)&EdidDiscovered, - NULL, - NULL, - EFI_OPEN_PROTOCOL_GET_PROTOCOL - ); - - if (EFI_ERROR (Status)) { - return NULL; - } - - Temp = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN (STR_EDID_DISCOVERED_MAIN), NULL); - if (Temp == NULL) { - return NULL; - } - - RetVal = CatSPrint (NULL, Temp, EdidDiscovered->SizeOfEdid); - SHELL_FREE_NON_NULL (Temp); - - if (EdidDiscovered->SizeOfEdid != 0) { - Temp = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN (STR_EDID_DISCOVERED_DATA), NULL); - if (Temp == NULL) { - SHELL_FREE_NON_NULL (RetVal); - return NULL; - } - TempRetVal = CatSPrint (RetVal, Temp); - SHELL_FREE_NON_NULL (RetVal); - RetVal = TempRetVal; - - TempRetVal = CatSDumpHex (RetVal, 7, 0, EdidDiscovered->SizeOfEdid, EdidDiscovered->Edid); - RetVal = TempRetVal; - } - return RetVal; -} - -/** - Function to dump information about EDID Active Protocol. - - This will allocate the return buffer from boot services pool. - - @param[in] TheHandle The handle that has LoadedImage installed. - @param[in] Verbose TRUE for additional information, FALSE otherwise. - - @retval A pointer to a string containing the information. -**/ -CHAR16* -EFIAPI -EdidActiveProtocolDumpInformation ( - IN CONST EFI_HANDLE TheHandle, - IN CONST BOOLEAN Verbose - ) -{ - EFI_EDID_ACTIVE_PROTOCOL *EdidActive; - EFI_STATUS Status; - CHAR16 *RetVal; - CHAR16 *Temp; - CHAR16 *TempRetVal; - - if (!Verbose) { - return (CatSPrint (NULL, L"EDIDActive")); - } - - Status = gBS->OpenProtocol ( - TheHandle, - &gEfiEdidActiveProtocolGuid, - (VOID**)&EdidActive, - NULL, - NULL, - EFI_OPEN_PROTOCOL_GET_PROTOCOL - ); - - if (EFI_ERROR (Status)) { - return NULL; - } - - Temp = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN (STR_EDID_ACTIVE_MAIN), NULL); - if (Temp == NULL) { - return NULL; - } - - RetVal = CatSPrint (NULL, Temp, EdidActive->SizeOfEdid); - SHELL_FREE_NON_NULL (Temp); - - if (EdidActive->SizeOfEdid != 0) { - Temp = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN (STR_EDID_ACTIVE_DATA), NULL); - if (Temp == NULL) { - SHELL_FREE_NON_NULL (RetVal); - return NULL; - } - TempRetVal = CatSPrint (RetVal, Temp); - SHELL_FREE_NON_NULL (RetVal); - RetVal = TempRetVal; - - TempRetVal = CatSDumpHex (RetVal, 7, 0, EdidActive->SizeOfEdid, EdidActive->Edid); - RetVal = TempRetVal; - } - return RetVal; -} - -/** + Function to dump information about EDID Discovered Protocol. + + This will allocate the return buffer from boot services pool. + + @param[in] TheHandle The handle that has LoadedImage installed. + @param[in] Verbose TRUE for additional information, FALSE otherwise. + + @retval A pointer to a string containing the information. +**/ +CHAR16* +EFIAPI +EdidDiscoveredProtocolDumpInformation ( + IN CONST EFI_HANDLE TheHandle, + IN CONST BOOLEAN Verbose + ) +{ + EFI_EDID_DISCOVERED_PROTOCOL *EdidDiscovered; + EFI_STATUS Status; + CHAR16 *RetVal; + CHAR16 *Temp; + CHAR16 *TempRetVal; + + if (!Verbose) { + return (CatSPrint (NULL, L"EDIDDiscovered")); + } + + Status = gBS->OpenProtocol ( + TheHandle, + &gEfiEdidDiscoveredProtocolGuid, + (VOID**)&EdidDiscovered, + NULL, + NULL, + EFI_OPEN_PROTOCOL_GET_PROTOCOL + ); + + if (EFI_ERROR (Status)) { + return NULL; + } + + Temp = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN (STR_EDID_DISCOVERED_MAIN), NULL); + if (Temp == NULL) { + return NULL; + } + + RetVal = CatSPrint (NULL, Temp, EdidDiscovered->SizeOfEdid); + SHELL_FREE_NON_NULL (Temp); + + if (EdidDiscovered->SizeOfEdid != 0) { + Temp = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN (STR_EDID_DISCOVERED_DATA), NULL); + if (Temp == NULL) { + SHELL_FREE_NON_NULL (RetVal); + return NULL; + } + TempRetVal = CatSPrint (RetVal, Temp); + SHELL_FREE_NON_NULL (RetVal); + RetVal = TempRetVal; + + TempRetVal = CatSDumpHex (RetVal, 7, 0, EdidDiscovered->SizeOfEdid, EdidDiscovered->Edid); + RetVal = TempRetVal; + } + return RetVal; +} + +/** + Function to dump information about EDID Active Protocol. + + This will allocate the return buffer from boot services pool. + + @param[in] TheHandle The handle that has LoadedImage installed. + @param[in] Verbose TRUE for additional information, FALSE otherwise. + + @retval A pointer to a string containing the information. +**/ +CHAR16* +EFIAPI +EdidActiveProtocolDumpInformation ( + IN CONST EFI_HANDLE TheHandle, + IN CONST BOOLEAN Verbose + ) +{ + EFI_EDID_ACTIVE_PROTOCOL *EdidActive; + EFI_STATUS Status; + CHAR16 *RetVal; + CHAR16 *Temp; + CHAR16 *TempRetVal; + + if (!Verbose) { + return (CatSPrint (NULL, L"EDIDActive")); + } + + Status = gBS->OpenProtocol ( + TheHandle, + &gEfiEdidActiveProtocolGuid, + (VOID**)&EdidActive, + NULL, + NULL, + EFI_OPEN_PROTOCOL_GET_PROTOCOL + ); + + if (EFI_ERROR (Status)) { + return NULL; + } + + Temp = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN (STR_EDID_ACTIVE_MAIN), NULL); + if (Temp == NULL) { + return NULL; + } + + RetVal = CatSPrint (NULL, Temp, EdidActive->SizeOfEdid); + SHELL_FREE_NON_NULL (Temp); + + if (EdidActive->SizeOfEdid != 0) { + Temp = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN (STR_EDID_ACTIVE_DATA), NULL); + if (Temp == NULL) { + SHELL_FREE_NON_NULL (RetVal); + return NULL; + } + TempRetVal = CatSPrint (RetVal, Temp); + SHELL_FREE_NON_NULL (RetVal); + RetVal = TempRetVal; + + TempRetVal = CatSDumpHex (RetVal, 7, 0, EdidActive->SizeOfEdid, EdidActive->Edid); + RetVal = TempRetVal; + } + return RetVal; +} + +/** Function to dump information about PciRootBridgeIo. This will allocate the return buffer from boot services pool. @@ -753,6 +753,7 @@ DevicePathProtocolDumpInformation( CHAR16 *Temp; CHAR16 *Temp2; EFI_STATUS Status; + UINTN Size; Temp = NULL; Status = gBS->OpenProtocol(TheHandle, &gEfiDevicePathProtocolGuid, (VOID**)&DevPath, gImageHandle, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL); @@ -765,7 +766,9 @@ DevicePathProtocolDumpInformation( } if (!Verbose && Temp != NULL && StrLen(Temp) > 30) { Temp2 = NULL; - Temp2 = StrnCatGrow(&Temp2, NULL, Temp+(StrLen(Temp) - 30), 30); + Size = 0; + Temp2 = StrnCatGrow(&Temp2, &Size, L"..", 0); + Temp2 = StrnCatGrow(&Temp2, &Size, Temp+(StrLen(Temp) - 28), 0); FreePool(Temp); Temp = Temp2; } @@ -1475,8 +1478,8 @@ STATIC CONST GUID_INFO_BLOCK mGuidStringList[] = { {STRING_TOKEN(STR_ABS_POINTER), &gEfiAbsolutePointerProtocolGuid, NULL}, {STRING_TOKEN(STR_SERIAL_IO), &gEfiSerialIoProtocolGuid, NULL}, {STRING_TOKEN(STR_GRAPHICS_OUTPUT), &gEfiGraphicsOutputProtocolGuid, GraphicsOutputProtocolDumpInformation}, - {STRING_TOKEN(STR_EDID_DISCOVERED), &gEfiEdidDiscoveredProtocolGuid, EdidDiscoveredProtocolDumpInformation}, - {STRING_TOKEN(STR_EDID_ACTIVE), &gEfiEdidActiveProtocolGuid, EdidActiveProtocolDumpInformation}, + {STRING_TOKEN(STR_EDID_DISCOVERED), &gEfiEdidDiscoveredProtocolGuid, EdidDiscoveredProtocolDumpInformation}, + {STRING_TOKEN(STR_EDID_ACTIVE), &gEfiEdidActiveProtocolGuid, EdidActiveProtocolDumpInformation}, {STRING_TOKEN(STR_EDID_OVERRIDE), &gEfiEdidOverrideProtocolGuid, NULL}, {STRING_TOKEN(STR_CON_IN), &gEfiConsoleInDeviceGuid, NULL}, {STRING_TOKEN(STR_CON_OUT), &gEfiConsoleOutDeviceGuid, NULL}, -- 2.8.3.windows.1 _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

