4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Main file for Dh shell Driver1 function.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync are licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync which accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync http://opensource.org/licenses/bsd-license.php
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "UefiShellDriver1CommandsLib.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSTATIC CONST SHELL_PARAM_ITEM ParamList[] = {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"-p", TypeValue},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"-d", TypeFlag},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"-v", TypeFlag},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"-verbose", TypeFlag},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"-sfo", TypeFlag},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"-l", TypeValue},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {NULL, TypeMax}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync };
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSTATIC CONST EFI_GUID *UefiDriverModelProtocolsGuidArray[] = {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &gEfiDriverBindingProtocolGuid,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &gEfiPlatformDriverOverrideProtocolGuid,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &gEfiBusSpecificDriverOverrideProtocolGuid,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &gEfiDriverDiagnosticsProtocolGuid,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &gEfiDriverDiagnostics2ProtocolGuid,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &gEfiComponentNameProtocolGuid,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &gEfiComponentName2ProtocolGuid,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &gEfiPlatformToDriverConfigurationProtocolGuid,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &gEfiDriverSupportedEfiVersionProtocolGuid,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &gEfiDriverFamilyOverrideProtocolGuid,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &gEfiDriverHealthProtocolGuid,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &gEfiLoadedImageProtocolGuid,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync};
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Get the name of a driver by it's handle.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If a name is found the memory must be callee freed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] TheHandle The driver's handle.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Language The language to use.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] NameFound Upon a successful return the name found.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The name was found.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncGetDriverName (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE TheHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST CHAR8 *Language,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 **NameFound
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR8 *Lang;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR8 *TempChar;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_STATUS Status;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_COMPONENT_NAME2_PROTOCOL *CompName2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *NameToReturn;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Go through those handles until we get one that passes for GetComponentName
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = gBS->OpenProtocol(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TheHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &gEfiComponentName2ProtocolGuid,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (VOID**)&CompName2,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gImageHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_OPEN_PROTOCOL_GET_PROTOCOL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR(Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = gBS->OpenProtocol(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TheHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &gEfiComponentNameProtocolGuid,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (VOID**)&CompName2,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gImageHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_OPEN_PROTOCOL_GET_PROTOCOL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR(Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_NOT_FOUND);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Language == NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Lang = AllocateZeroPool(AsciiStrSize(CompName2->SupportedLanguages));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Lang == NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_OUT_OF_RESOURCES);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AsciiStrCpy(Lang, CompName2->SupportedLanguages);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TempChar = AsciiStrStr(Lang, ";");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (TempChar != NULL){
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *TempChar = CHAR_NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Lang = AllocateZeroPool(AsciiStrSize(Language));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Lang == NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_OUT_OF_RESOURCES);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AsciiStrCpy(Lang, Language);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = CompName2->GetDriverName(CompName2, Lang, &NameToReturn);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FreePool(Lang);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!EFI_ERROR(Status) && NameToReturn != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *NameFound = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrnCatGrow(NameFound, NULL, NameToReturn, 0);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Discover if a protocol guid is one of the UEFI Driver Model Protocols.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Guid The guid to test.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval TRUE The guid does represent a driver model protocol.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval FALSE The guid does not represent a driver model protocol.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncBOOLEAN
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncIsDriverProt (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST EFI_GUID *Guid
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CONST EFI_GUID **GuidWalker;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN GuidFound;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync GuidFound = FALSE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (GuidWalker = UefiDriverModelProtocolsGuidArray
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ; GuidWalker != NULL && *GuidWalker != NULL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ; GuidWalker++
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ){
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (CompareGuid(*GuidWalker, Guid)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync GuidFound = TRUE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (GuidFound);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Get information for a handle.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] TheHandle The handles to show info on.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Language Language string per UEFI specification.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Seperator Separator string between information blocks.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Verbose TRUE for extra info, FALSE otherwise.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] ExtraInfo TRUE for extra info, FALSE otherwise.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval SHELL_SUCCESS The operation was successful.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval SHELL_INVALID_PARAMETER ProtocolName was NULL or invalid.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCHAR16*
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncGetProtocolInfoString(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST EFI_HANDLE TheHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST CHAR8 *Language,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST CHAR16 *Seperator,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST BOOLEAN Verbose,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST BOOLEAN ExtraInfo
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_GUID **ProtocolGuidArray;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN ArrayCount;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN ProtocolIndex;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_STATUS Status;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *RetVal;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Size;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *Temp;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ProtocolGuidArray = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync RetVal = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Size = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = gBS->ProtocolsPerHandle (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TheHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &ProtocolGuidArray,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &ArrayCount
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!EFI_ERROR (Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (ProtocolIndex = 0; ProtocolIndex < ArrayCount; ProtocolIndex++) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Temp = GetStringNameFromGuid(ProtocolGuidArray[ProtocolIndex], Language);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Temp != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT((RetVal == NULL && Size == 0) || (RetVal != NULL));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Size != 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrnCatGrow(&RetVal, &Size, Seperator, 0);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrnCatGrow(&RetVal, &Size, L"%H", 0);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrnCatGrow(&RetVal, &Size, Temp, 0);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrnCatGrow(&RetVal, &Size, L"%N", 0);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FreePool(Temp);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (ExtraInfo) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Temp = GetProtocolInformationDump(TheHandle, ProtocolGuidArray[ProtocolIndex], Verbose);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Temp != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT((RetVal == NULL && Size == 0) || (RetVal != NULL));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!Verbose) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrnCatGrow(&RetVal, &Size, L"(", 0);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrnCatGrow(&RetVal, &Size, Temp, 0);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrnCatGrow(&RetVal, &Size, L")", 0);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrnCatGrow(&RetVal, &Size, Seperator, 0);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrnCatGrow(&RetVal, &Size, Temp, 0);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FreePool(Temp);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_FREE_NON_NULL(ProtocolGuidArray);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (RetVal == NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT((RetVal == NULL && Size == 0) || (RetVal != NULL));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrnCatGrow(&RetVal, &Size, Seperator, 0);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (RetVal);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Gets the name of the loaded image.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] TheHandle The handle of the driver to get info on.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] Name The pointer to the pointer. Valid upon a successful return.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The operation was successful.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncGetDriverImageName (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE TheHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT CHAR16 **Name
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // get loaded image and devicepathtotext on image->Filepath
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_STATUS Status;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_DEVICE_PATH_PROTOCOL *DevicePath;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (TheHandle == NULL || Name == NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_INVALID_PARAMETER);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = gBS->OpenProtocol (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TheHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &gEfiLoadedImageProtocolGuid,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (VOID **) &LoadedImage,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gImageHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_OPEN_PROTOCOL_GET_PROTOCOL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR(Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevicePath = LoadedImage->FilePath;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *Name = gDevPathToText->ConvertDevicePathToText(DevicePath, TRUE, TRUE);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_SUCCESS);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Display driver model information for a given handle.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Handle The handle to display info on.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] BestName Use the best name?
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Language The language to output in.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDisplayDriverModelHandle (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE Handle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN BOOLEAN BestName,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST CHAR8 *Language OPTIONAL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_STATUS Status;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN ConfigurationStatus;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN DiagnosticsStatus;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN DriverBindingHandleCount;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE *DriverBindingHandleBuffer;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN ParentControllerHandleCount;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE *ParentControllerHandleBuffer;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN ChildControllerHandleCount;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE *ChildControllerHandleBuffer;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *TempStringPointer;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_DEVICE_PATH_PROTOCOL *DevicePath;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Index;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *DriverName;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_DRIVER_BINDING_PROTOCOL *DriverBinding;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN NumberOfChildren;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN HandleIndex;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN ControllerHandleCount;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE *ControllerHandleBuffer;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN ChildIndex;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN Image;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // See if Handle is a device handle and display its details.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverBindingHandleBuffer = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = PARSE_HANDLE_DATABASE_UEFI_DRIVERS (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Handle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &DriverBindingHandleCount,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &DriverBindingHandleBuffer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ParentControllerHandleBuffer = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = PARSE_HANDLE_DATABASE_PARENTS (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Handle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &ParentControllerHandleCount,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &ParentControllerHandleBuffer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ChildControllerHandleBuffer = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = ParseHandleDatabaseForChildControllers (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Handle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &ChildControllerHandleCount,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &ChildControllerHandleBuffer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DiagnosticsStatus = FALSE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ConfigurationStatus = FALSE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!EFI_ERROR(gBS->OpenProtocol(Handle, &gEfiDriverConfigurationProtocolGuid, NULL, NULL, gImageHandle, EFI_OPEN_PROTOCOL_TEST_PROTOCOL))) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ConfigurationStatus = TRUE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!EFI_ERROR(gBS->OpenProtocol(Handle, &gEfiDriverConfiguration2ProtocolGuid, NULL, NULL, gImageHandle, EFI_OPEN_PROTOCOL_TEST_PROTOCOL))) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ConfigurationStatus = TRUE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!EFI_ERROR(gBS->OpenProtocol(Handle, &gEfiDriverDiagnosticsProtocolGuid, NULL, NULL, gImageHandle, EFI_OPEN_PROTOCOL_TEST_PROTOCOL))) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DiagnosticsStatus = TRUE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!EFI_ERROR(gBS->OpenProtocol(Handle, &gEfiDriverDiagnostics2ProtocolGuid, NULL, NULL, gImageHandle, EFI_OPEN_PROTOCOL_TEST_PROTOCOL))) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DiagnosticsStatus = TRUE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = EFI_SUCCESS;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (DriverBindingHandleCount > 0 || ParentControllerHandleCount > 0 || ChildControllerHandleCount > 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevicePath = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TempStringPointer = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = gBS->HandleProtocol (Handle, &gEfiDevicePathProtocolGuid, (VOID**)&DevicePath);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = gEfiShellProtocol->GetDeviceName(Handle, EFI_DEVICE_NAME_USE_COMPONENT_NAME|EFI_DEVICE_NAME_USE_DEVICE_PATH, (CHAR8*)Language, &TempStringPointer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_DH_OUTPUT_DRIVER1), gShellDriver1HiiHandle, TempStringPointer!=NULL?TempStringPointer:L"<Unknown>");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_FREE_NON_NULL(TempStringPointer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TempStringPointer = gDevPathToText->ConvertDevicePathToText(DevicePath, TRUE, FALSE);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DH_OUTPUT_DRIVER2),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TempStringPointer!=NULL?TempStringPointer:L"<None>",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ParentControllerHandleCount == 0?L"ROOT":(ChildControllerHandleCount > 0)?L"BUS":L"DEVICE",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ConfigurationStatus?L"YES":L"NO",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DiagnosticsStatus?L"YES":L"NO"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_FREE_NON_NULL(TempStringPointer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (DriverBindingHandleCount == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DH_OUTPUT_DRIVER3),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync L"<None>"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DH_OUTPUT_DRIVER3),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync L""
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (Index = 0; Index < DriverBindingHandleCount; Index++) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Image = FALSE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = GetDriverName (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverBindingHandleBuffer[Index],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Language,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &DriverName
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (DriverName == NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = GetDriverImageName (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverBindingHandleBuffer[Index],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &DriverName
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Image) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DH_OUTPUT_DRIVER4A),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ConvertHandleToHandleIndex (DriverBindingHandleBuffer[Index]),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverName!=NULL?DriverName:L"<Unknown>"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DH_OUTPUT_DRIVER4B),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ConvertHandleToHandleIndex (DriverBindingHandleBuffer[Index]),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverName!=NULL?DriverName:L"<Unknown>"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_FREE_NON_NULL(DriverName);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (ParentControllerHandleCount == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DH_OUTPUT_DRIVER5),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync L"<None>"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DH_OUTPUT_DRIVER5),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync L""
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (Index = 0; Index < ParentControllerHandleCount; Index++) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = gEfiShellProtocol->GetDeviceName(ParentControllerHandleBuffer[Index], EFI_DEVICE_NAME_USE_COMPONENT_NAME|EFI_DEVICE_NAME_USE_DEVICE_PATH, (CHAR8*)Language, &TempStringPointer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DH_OUTPUT_DRIVER5B),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ConvertHandleToHandleIndex (ParentControllerHandleBuffer[Index]),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TempStringPointer!=NULL?TempStringPointer:L"<Unknown>"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_FREE_NON_NULL(TempStringPointer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (ChildControllerHandleCount == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DH_OUTPUT_DRIVER6),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync L"<None>"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DH_OUTPUT_DRIVER6),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync L""
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (Index = 0; Index < ChildControllerHandleCount; Index++) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = gEfiShellProtocol->GetDeviceName(ChildControllerHandleBuffer[Index], EFI_DEVICE_NAME_USE_COMPONENT_NAME|EFI_DEVICE_NAME_USE_DEVICE_PATH, (CHAR8*)Language, &TempStringPointer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DH_OUTPUT_DRIVER6B),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ConvertHandleToHandleIndex (ChildControllerHandleBuffer[Index]),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TempStringPointer!=NULL?TempStringPointer:L"<Unknown>"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_FREE_NON_NULL(TempStringPointer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_FREE_NON_NULL(DriverBindingHandleBuffer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_FREE_NON_NULL(ParentControllerHandleBuffer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_FREE_NON_NULL(ChildControllerHandleBuffer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR (Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return Status;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // See if Handle is a driver binding handle and display its details.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = gBS->OpenProtocol (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Handle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &gEfiDriverBindingProtocolGuid,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (VOID **) &DriverBinding,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_OPEN_PROTOCOL_GET_PROTOCOL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR (Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return EFI_SUCCESS;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NumberOfChildren = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ControllerHandleBuffer = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = PARSE_HANDLE_DATABASE_DEVICES (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Handle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &ControllerHandleCount,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &ControllerHandleBuffer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (ControllerHandleCount > 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (HandleIndex = 0; HandleIndex < ControllerHandleCount; HandleIndex++) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = PARSE_HANDLE_DATABASE_MANAGED_CHILDREN (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Handle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ControllerHandleBuffer[HandleIndex],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &ChildControllerHandleCount,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NumberOfChildren += ChildControllerHandleCount;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = GetDriverName (Handle, Language, &DriverName);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DH_OUTPUT_DRIVER6B),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ConvertHandleToHandleIndex(Handle),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverName!=NULL?DriverName:L"<Unknown>"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_FREE_NON_NULL(DriverName);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverName = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = GetDriverImageName (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Handle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &DriverName
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DH_OUTPUT_DRIVER7B),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverName!=NULL?DriverName:L"<Unknown>"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_FREE_NON_NULL(DriverName);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DH_OUTPUT_DRIVER8),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverBinding->Version,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NumberOfChildren > 0?L"Bus":ControllerHandleCount > 0?L"Device":L"<Unknown>",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ConfigurationStatus?L"YES":L"NO",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DiagnosticsStatus?L"YES":L"NO"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (ControllerHandleCount == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DH_OUTPUT_DRIVER6),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync L"None"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DH_OUTPUT_DRIVER6),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync L""
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (HandleIndex = 0; HandleIndex < ControllerHandleCount; HandleIndex++) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = gEfiShellProtocol->GetDeviceName(ControllerHandleBuffer[HandleIndex], EFI_DEVICE_NAME_USE_COMPONENT_NAME|EFI_DEVICE_NAME_USE_DEVICE_PATH, (CHAR8*)Language, &TempStringPointer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DH_OUTPUT_DRIVER9B),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ConvertHandleToHandleIndex(ControllerHandleBuffer[HandleIndex]),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TempStringPointer!=NULL?TempStringPointer:L"<Unknown>"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_FREE_NON_NULL(TempStringPointer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = PARSE_HANDLE_DATABASE_MANAGED_CHILDREN (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Handle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ControllerHandleBuffer[HandleIndex],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &ChildControllerHandleCount,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &ChildControllerHandleBuffer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!EFI_ERROR (Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (ChildIndex = 0; ChildIndex < ChildControllerHandleCount; ChildIndex++) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = gEfiShellProtocol->GetDeviceName(ChildControllerHandleBuffer[ChildIndex], EFI_DEVICE_NAME_USE_COMPONENT_NAME|EFI_DEVICE_NAME_USE_DEVICE_PATH, (CHAR8*)Language, &TempStringPointer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DH_OUTPUT_DRIVER6B),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ConvertHandleToHandleIndex(ChildControllerHandleBuffer[ChildIndex]),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TempStringPointer!=NULL?TempStringPointer:L"<Unknown>"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_FREE_NON_NULL(TempStringPointer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_FREE_NON_NULL (ChildControllerHandleBuffer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_FREE_NON_NULL (ControllerHandleBuffer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return EFI_SUCCESS;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Display information for a handle.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] TheHandle The handles to show info on.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Verbose TRUE for extra info, FALSE otherwise.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Sfo TRUE to output in standard format output (spec).
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Language Language string per UEFI specification.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] DriverInfo TRUE to show all info about the handle.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Multiple TRUE indicates more than will be output,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FALSE for a single one.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval SHELL_SUCCESS The operation was successful.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval SHELL_INVALID_PARAMETER ProtocolName was NULL or invalid.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSHELL_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDoDhByHandle(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST EFI_HANDLE TheHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST BOOLEAN Verbose,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST BOOLEAN Sfo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST CHAR8 *Language,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST BOOLEAN DriverInfo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST BOOLEAN Multiple
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *ProtocolInfoString;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_STATUS ShellStatus;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_STATUS Status;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = EFI_SUCCESS;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_SUCCESS;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ProtocolInfoString = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!Sfo) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Multiple) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ProtocolInfoString = GetProtocolInfoString(TheHandle, Language, L" ", Verbose, TRUE);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DH_OUTPUT),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ConvertHandleToHandleIndex(TheHandle),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ProtocolInfoString==NULL?L"":ProtocolInfoString);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ProtocolInfoString = GetProtocolInfoString(TheHandle, Language, L"\r\n", Verbose, TRUE);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DH_OUTPUT_SINGLE),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ConvertHandleToHandleIndex(TheHandle),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TheHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ProtocolInfoString==NULL?L"":ProtocolInfoString);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (DriverInfo) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DisplayDriverModelHandle ((EFI_HANDLE)TheHandle, TRUE, Language);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ProtocolInfoString = GetProtocolInfoString(TheHandle, Language, L";", FALSE, FALSE);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DH_OUTPUT_SFO),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Multiple ?L"HandlesInfo":L"HandleInfo",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync L"DriverName",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync L"ControllerName",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ConvertHandleToHandleIndex(TheHandle),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync L"DevPath",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ProtocolInfoString==NULL?L"":ProtocolInfoString);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (ProtocolInfoString != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FreePool(ProtocolInfoString);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (ShellStatus);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Display information for all handles on a list.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] HandleList The NULL-terminated list of handles.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Sfo TRUE to output in standard format output (spec).
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Language Language string per UEFI specification.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] DriverInfo TRUE to show all info about the handle.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval SHELL_SUCCESS The operation was successful.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval SHELL_INVALID_PARAMETER ProtocolName was NULL or invalid.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSHELL_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDoDhForHandleList(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST EFI_HANDLE *HandleList,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST BOOLEAN Sfo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST CHAR8 *Language,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST BOOLEAN DriverInfo
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CONST EFI_HANDLE *HandleWalker;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_STATUS ShellStatus;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_SUCCESS;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (HandleWalker = HandleList ; HandleWalker != NULL && *HandleWalker != NULL && ShellStatus == SHELL_SUCCESS; HandleWalker++) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = DoDhByHandle(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *HandleWalker,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FALSE,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Sfo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Language,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverInfo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TRUE
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (ShellStatus);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Display information for all handles.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Sfo TRUE to output in standard format output (spec).
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Language Language string per UEFI specification.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] DriverInfo TRUE to show all info about the handle.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval SHELL_SUCCESS The operation was successful.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval SHELL_INVALID_PARAMETER ProtocolName was NULL or invalid.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSHELL_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDoDhForAll(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST BOOLEAN Sfo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST CHAR8 *Language,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST BOOLEAN DriverInfo
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE *HandleList;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_STATUS ShellStatus;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleList = GetHandleListByProtocol(NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = DoDhForHandleList(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleList,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Sfo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Language,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverInfo);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FreePool(HandleList);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (ShellStatus);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Display information for all handles which have a specific protocol.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] ProtocolName The pointer to the name of the protocol.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Sfo TRUE to output in standard format output (spec).
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Language Language string per UEFI specification.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] DriverInfo TRUE to show all info about the handle.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval SHELL_SUCCESS The operation was successful.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval SHELL_INVALID_PARAMETER ProtocolName was NULL or invalid.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSHELL_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDoDhByProtocol(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST CHAR16 *ProtocolName,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST BOOLEAN Sfo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST CHAR8 *Language,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST BOOLEAN DriverInfo
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_GUID *Guid;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_STATUS Status;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE *HandleList;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_STATUS ShellStatus;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (ProtocolName == NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (SHELL_INVALID_PARAMETER);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = GetGuidFromStringName(ProtocolName, Language, &Guid);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR(Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_DH_NO_GUID_FOUND), gShellDriver1HiiHandle, ProtocolName);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (SHELL_INVALID_PARAMETER);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleList = GetHandleListByProtocol(Guid);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = DoDhForHandleList(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleList,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Sfo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Language,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverInfo);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_FREE_NON_NULL(HandleList);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (ShellStatus);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Function for 'dh' command.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] ImageHandle Handle to the Image (NULL if Internal).
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] SystemTable Pointer to the System Table (NULL if Internal).
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSHELL_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncShellCommandRunDh (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE ImageHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_SYSTEM_TABLE *SystemTable
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_STATUS Status;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LIST_ENTRY *Package;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *ProblemParam;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_STATUS ShellStatus;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR8 *Language;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CONST CHAR16 *Lang;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CONST CHAR16 *Temp2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN SfoMode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN FlagD;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN Verbose;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 Intermediate;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_SUCCESS;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = EFI_SUCCESS;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Language = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // initialize the shell lib (we must be in non-auto-init...)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = ShellInitialize();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT_EFI_ERROR(Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = CommandInit();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT_EFI_ERROR(Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // parse the command line
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = ShellCommandLineParse (ParamList, &Package, &ProblemParam, TRUE);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR(Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDriver1HiiHandle, ProblemParam);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FreePool(ProblemParam);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_INVALID_PARAMETER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT(FALSE);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (ShellCommandLineGetCount(Package) > 2) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDriver1HiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellCommandLineFreeVarList (Package);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (SHELL_INVALID_PARAMETER);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Lang = ShellCommandLineGetValue(Package, L"-l");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Lang != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Language = AllocateZeroPool(StrSize(Lang));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AsciiSPrint(Language, StrSize(Lang), "%S", Lang);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (!ShellCommandLineGetFlag(Package, L"-l")){
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Language = AllocateZeroPool(10);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AsciiSPrint(Language, 10, "en-us");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT(Language == NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDriver1HiiHandle, L"-l");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellCommandLineFreeVarList (Package);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (SHELL_INVALID_PARAMETER);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SfoMode = ShellCommandLineGetFlag(Package, L"-sfo");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FlagD = ShellCommandLineGetFlag(Package, L"-d");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Verbose = (BOOLEAN)(ShellCommandLineGetFlag(Package, L"-v") || ShellCommandLineGetFlag(Package, L"-verbose"));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (ShellCommandLineGetFlag(Package, L"-p")) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (ShellCommandLineGetCount(Package) > 1) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDriver1HiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_INVALID_PARAMETER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (ShellCommandLineGetValue(Package, L"-p") == NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDriver1HiiHandle, L"-p");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_INVALID_PARAMETER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // print by protocol
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = DoDhByProtocol(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellCommandLineGetValue(Package, L"-p"),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SfoMode,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Lang==NULL?NULL:Language,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FlagD
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Temp2 = ShellCommandLineGetRawValue(Package, 1);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Temp2 == NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Print everything
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = DoDhForAll(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SfoMode,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Lang==NULL?NULL:Language,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FlagD
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = ShellConvertStringToUint64(Temp2, &Intermediate, TRUE, FALSE);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR(Status) || ConvertHandleIndexToHandle((UINTN)Intermediate) == NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, Temp2);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_INVALID_PARAMETER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // print 1 handle
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = DoDhByHandle(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ConvertHandleIndexToHandle((UINTN)Intermediate),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Verbose,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SfoMode,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Lang==NULL?NULL:Language,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FlagD,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FALSE
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellCommandLineFreeVarList (Package);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_FREE_NON_NULL(Language);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (ShellStatus);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}