4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Main file for DrvCfg 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#include <Protocol/HiiConfigAccess.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/HiiDatabase.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSTATIC CONST EFI_GUID *CfgGuidList[] = {&gEfiDriverConfigurationProtocolGuid, &gEfiDriverConfiguration2ProtocolGuid, NULL};
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Find the EFI_HII_HANDLE by device path.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] DevPath1 The Device Path to match.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] HiiHandle The EFI_HII_HANDLE after the converstion.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] HiiDb The Hii database protocol
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The operation was successful.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_FOUND There was no EFI_HII_HANDLE found for that deviec path.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncFindHiiHandleViaDevPath(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST EFI_DEVICE_PATH_PROTOCOL *DevPath1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT EFI_HII_HANDLE *HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HII_DATABASE_PROTOCOL *HiiDb
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HII_HANDLE *HandleBuffer;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN HandleBufferSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID *MainBuffer;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN MainBufferSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HII_PACKAGE_LIST_HEADER *PackageListHeader;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HII_PACKAGE_HEADER *PackageHeader;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN LoopVariable;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_DEVICE_PATH_PROTOCOL *DevPath2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_STATUS Status;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT(DevPath1 != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT(HiiHandle != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT(*HiiHandle == NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT(HiiDb != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleBufferSize = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleBuffer = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = HiiDb->ListPackageLists(HiiDb, EFI_HII_PACKAGE_DEVICE_PATH, NULL, &HandleBufferSize, HandleBuffer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Status == EFI_BUFFER_TOO_SMALL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleBuffer = AllocateZeroPool(HandleBufferSize);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (HandleBuffer != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = HiiDb->ListPackageLists(HiiDb, EFI_HII_PACKAGE_DEVICE_PATH, NULL, &HandleBufferSize, HandleBuffer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR(Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_FREE_NON_NULL(HandleBuffer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (HandleBuffer == NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return EFI_NOT_FOUND;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (LoopVariable = 0 ; LoopVariable < (HandleBufferSize/sizeof(HandleBuffer[0])) && *HiiHandle == NULL ; LoopVariable++) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MainBufferSize = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MainBuffer = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = HiiDb->ExportPackageLists(HiiDb, HandleBuffer[LoopVariable], &MainBufferSize, MainBuffer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Status == EFI_BUFFER_TOO_SMALL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MainBuffer = AllocateZeroPool(MainBufferSize);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (MainBuffer != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = HiiDb->ExportPackageLists(HiiDb, HandleBuffer[LoopVariable], &MainBufferSize, MainBuffer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Enumerate through the block of returned memory.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // This should actually be a small block, but we need to be sure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (PackageListHeader = (EFI_HII_PACKAGE_LIST_HEADER*)MainBuffer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ; PackageListHeader != NULL && ((CHAR8*)PackageListHeader) < (((CHAR8*)MainBuffer)+MainBufferSize) && *HiiHandle == NULL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ; PackageListHeader = (EFI_HII_PACKAGE_LIST_HEADER*)(((CHAR8*)(PackageListHeader)) + PackageListHeader->PackageLength )) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (PackageHeader = (EFI_HII_PACKAGE_HEADER*)(((CHAR8*)(PackageListHeader))+sizeof(EFI_HII_PACKAGE_LIST_HEADER))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ; PackageHeader != NULL && ((CHAR8*)PackageHeader) < (((CHAR8*)MainBuffer)+MainBufferSize) && PackageHeader->Type != EFI_HII_PACKAGE_END && *HiiHandle == NULL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ; PackageHeader = (EFI_HII_PACKAGE_HEADER*)(((CHAR8*)(PackageHeader))+PackageHeader->Length)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (PackageHeader->Type == EFI_HII_PACKAGE_DEVICE_PATH) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevPath2 = (EFI_DEVICE_PATH_PROTOCOL*)(((CHAR8*)PackageHeader) + sizeof(EFI_HII_PACKAGE_HEADER));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (DevicePathCompare(&DevPath1, &DevPath2) == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *HiiHandle = HandleBuffer[LoopVariable];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_FREE_NON_NULL(MainBuffer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_FREE_NON_NULL(HandleBuffer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (*HiiHandle == NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_NOT_FOUND);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_SUCCESS);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Convert a EFI_HANDLE to a EFI_HII_HANDLE.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Handle The EFI_HANDLE to convert.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] HiiHandle The EFI_HII_HANDLE after the converstion.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] HiiDb The Hii database protocol
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The operation was successful.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncConvertHandleToHiiHandle(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST EFI_HANDLE Handle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT EFI_HII_HANDLE *HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HII_DATABASE_PROTOCOL *HiiDb
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_STATUS Status;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_DEVICE_PATH_PROTOCOL *DevPath1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (HiiHandle == NULL || HiiDb == NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_INVALID_PARAMETER);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *HiiHandle = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Handle == NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_SUCCESS);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevPath1 = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = gBS->OpenProtocol(Handle, &gEfiDevicePathProtocolGuid, (VOID**)&DevPath1, gImageHandle, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR(Status) || DevPath1 == NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_NOT_FOUND);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (FindHiiHandleViaDevPath(DevPath1, HiiHandle, HiiDb));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Function to print out all HII configuration information to a file.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Handle The handle to get info on. NULL to do all handles.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] FileName The filename to rwite the info to.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSHELL_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncConfigToFile(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST EFI_HANDLE Handle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST CHAR16 *FileName
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HII_DATABASE_PROTOCOL *HiiDatabase;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_STATUS Status;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID *MainBuffer;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN MainBufferSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HII_HANDLE HiiHandle;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_FILE_HANDLE FileHandle;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HiiDatabase = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MainBufferSize = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MainBuffer = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FileHandle = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = ShellOpenFileByName(FileName, &FileHandle, EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE|EFI_FILE_MODE_CREATE, 0);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR(Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN(STR_GEN_FILE_OPEN),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FileName,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (SHELL_DEVICE_ERROR);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Locate HII Database protocol
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = gBS->LocateProtocol (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &gEfiHiiDatabaseProtocolGuid,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (VOID **) &HiiDatabase
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR(Status) || HiiDatabase == NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN(STR_GEN_PROTOCOL_NF),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync L"EfiHiiDatabaseProtocol",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &gEfiHiiDatabaseProtocolGuid);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellCloseFile(&FileHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (SHELL_NOT_FOUND);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = ConvertHandleToHiiHandle(Handle, &HiiHandle, HiiDatabase);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR(Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN(STR_GEN_HANDLE_NOT),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ConvertHandleToHandleIndex(Handle),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync L"Device");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellCloseFile(&FileHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (SHELL_DEVICE_ERROR);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = HiiDatabase->ExportPackageLists(HiiDatabase, HiiHandle, &MainBufferSize, MainBuffer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Status == EFI_BUFFER_TOO_SMALL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MainBuffer = AllocateZeroPool(MainBufferSize);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = HiiDatabase->ExportPackageLists(HiiDatabase, HiiHandle, &MainBufferSize, MainBuffer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = ShellWriteFile(FileHandle, &MainBufferSize, MainBuffer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellCloseFile(&FileHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_FREE_NON_NULL(MainBuffer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR(Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN(STR_FILE_WRITE_FAIL),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FileName,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (SHELL_DEVICE_ERROR);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN(STR_DRVCFG_COMP),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (SHELL_SUCCESS);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Function to read in HII configuration information from a file.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Handle The handle to get info for.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] FileName The filename to read the info from.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSHELL_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncConfigFromFile(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE Handle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST CHAR16 *FileName
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HII_DATABASE_PROTOCOL *HiiDatabase;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_STATUS Status;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID *MainBuffer;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 Temp;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN MainBufferSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HII_HANDLE HiiHandle;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_FILE_HANDLE FileHandle;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *TempDevPathString;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HII_PACKAGE_LIST_HEADER *PackageListHeader;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HII_PACKAGE_HEADER *PackageHeader;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_DEVICE_PATH_PROTOCOL *DevPath;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN HandleIndex;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HiiDatabase = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MainBufferSize = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MainBuffer = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FileHandle = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = ShellOpenFileByName(FileName, &FileHandle, EFI_FILE_MODE_READ, 0);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR(Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN(STR_GEN_FILE_OPEN),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FileName,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (SHELL_DEVICE_ERROR);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Locate HII Database protocol
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = gBS->LocateProtocol (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &gEfiHiiDatabaseProtocolGuid,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (VOID **) &HiiDatabase
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR(Status) || HiiDatabase == NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN(STR_GEN_PROTOCOL_NF),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync L"EfiHiiDatabaseProtocol",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &gEfiHiiDatabaseProtocolGuid);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellCloseFile(&FileHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (SHELL_NOT_FOUND);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = ShellGetFileSize(FileHandle, &Temp);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MainBufferSize = (UINTN)Temp;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR(Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN(STR_FILE_READ_FAIL),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FileName,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellCloseFile(&FileHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (SHELL_DEVICE_ERROR);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MainBuffer = AllocateZeroPool((UINTN)MainBufferSize);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR(Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN(STR_GEN_OUT_MEM),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellCloseFile(&FileHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (SHELL_DEVICE_ERROR);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = ShellReadFile(FileHandle, &MainBufferSize, MainBuffer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR(Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN(STR_FILE_READ_FAIL),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FileName,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellCloseFile(&FileHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_FREE_NON_NULL(MainBuffer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (SHELL_DEVICE_ERROR);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellCloseFile(&FileHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Handle != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // User override in place. Just do it.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HiiHandle = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = ConvertHandleToHiiHandle(Handle, &HiiHandle, HiiDatabase);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR(Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN(STR_GEN_HANDLE_NOT),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ConvertHandleToHandleIndex(Handle),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync L"Device");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellCloseFile(&FileHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (SHELL_DEVICE_ERROR);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = HiiDatabase->UpdatePackageList(HiiDatabase, HiiHandle, MainBuffer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR(Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN(STR_GEN_UEFI_FUNC_ERROR),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync L"HiiDatabase->UpdatePackageList",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (SHELL_DEVICE_ERROR);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // we need to parse the buffer and try to match the device paths for each item to try to find it's device path.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (PackageListHeader = (EFI_HII_PACKAGE_LIST_HEADER*)MainBuffer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ; PackageListHeader != NULL && ((CHAR8*)PackageListHeader) < (((CHAR8*)MainBuffer)+MainBufferSize)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ; PackageListHeader = (EFI_HII_PACKAGE_LIST_HEADER*)(((CHAR8*)(PackageListHeader)) + PackageListHeader->PackageLength )) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (PackageHeader = (EFI_HII_PACKAGE_HEADER*)(((CHAR8*)(PackageListHeader))+sizeof(EFI_HII_PACKAGE_LIST_HEADER))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ; PackageHeader != NULL && ((CHAR8*)PackageHeader) < (((CHAR8*)MainBuffer)+MainBufferSize) && PackageHeader->Type != EFI_HII_PACKAGE_END
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ; PackageHeader = (EFI_HII_PACKAGE_HEADER*)(((CHAR8*)(PackageHeader))+PackageHeader->Length)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (PackageHeader->Type == EFI_HII_PACKAGE_DEVICE_PATH) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HiiHandle = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = FindHiiHandleViaDevPath((EFI_DEVICE_PATH_PROTOCOL*)(((CHAR8*)PackageHeader) + sizeof(EFI_HII_PACKAGE_HEADER)), &HiiHandle, HiiDatabase);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR(Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // print out an error.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TempDevPathString = gDevPathToText->ConvertDevicePathToText((EFI_DEVICE_PATH_PROTOCOL*)(((CHAR8*)PackageHeader) + sizeof(EFI_HII_PACKAGE_HEADER)), TRUE, TRUE);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN(STR_DRVCFG_IN_FILE_NF),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TempDevPathString);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_FREE_NON_NULL(TempDevPathString);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = HiiDatabase->UpdatePackageList(HiiDatabase, HiiHandle, PackageListHeader);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR(Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN(STR_GEN_UEFI_FUNC_ERROR),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync L"HiiDatabase->UpdatePackageList",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (SHELL_DEVICE_ERROR);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevPath = (EFI_DEVICE_PATH_PROTOCOL*)(((CHAR8*)PackageHeader) + sizeof(EFI_HII_PACKAGE_HEADER));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gBS->LocateDevicePath(&gEfiHiiConfigAccessProtocolGuid, &DevPath, &Handle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleIndex = ConvertHandleToHandleIndex(Handle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN(STR_DRVCFG_DONE_HII),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleIndex);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_FREE_NON_NULL(MainBuffer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN(STR_DRVCFG_COMP),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (SHELL_SUCCESS);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Present a requested action to the user.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] DriverImageHandle The handle for the driver to configure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] ControllerHandle The handle of the device being managed by the Driver specified.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] ChildHandle The handle of a child device of the specified device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] ActionRequired The required HII action.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval SHELL_INVALID_PARAMETER A parameter has a invalid value.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncShellCmdDriverConfigurationProcessActionRequired (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE DriverImageHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE ControllerHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE ChildHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_DRIVER_CONFIGURATION_ACTION_REQUIRED ActionRequired
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE ConnectControllerContextOverride[2];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync switch (ActionRequired) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync case EfiDriverConfigurationActionNone:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_DRVCFG_NONE), gShellDriver1HiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync case EfiDriverConfigurationActionStopController:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_DRVCFG_STOP), gShellDriver1HiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_DRVCFG_ENTER_S), gShellDriver1HiiHandle, L"stop controller");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPromptForResponse(ShellPromptResponseTypeEnterContinue, NULL, NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gBS->DisconnectController (ControllerHandle, DriverImageHandle, ChildHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_DRVCFG_CTLR_S), gShellDriver1HiiHandle, L"stopped");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync case EfiDriverConfigurationActionRestartController:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_DRVCFG_RESTART_S), gShellDriver1HiiHandle, L"controller");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_DRVCFG_ENTER_S), gShellDriver1HiiHandle, L"restart controller");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPromptForResponse(ShellPromptResponseTypeEnterContinue, NULL, NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gBS->DisconnectController (ControllerHandle, DriverImageHandle, ChildHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ConnectControllerContextOverride[0] = DriverImageHandle;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ConnectControllerContextOverride[1] = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gBS->ConnectController (ControllerHandle, ConnectControllerContextOverride, NULL, TRUE);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_DRVCFG_CTLR_S), gShellDriver1HiiHandle, L"restarted");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync case EfiDriverConfigurationActionRestartPlatform:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_DRVCFG_RESTART_S), gShellDriver1HiiHandle, L"platform");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_DRVCFG_ENTER_S), gShellDriver1HiiHandle, L"restart platform");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPromptForResponse(ShellPromptResponseTypeEnterContinue, NULL, NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gRT->ResetSystem (EfiResetCold, EFI_SUCCESS, 0, NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync default:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_INVALID_PARAMETER);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return EFI_SUCCESS;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Do the configuration in an environment without HII.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Language The language code.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] ForceDefaults TRUE to force defaults, FALSE otherwise.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] DefaultType If ForceDefaults is TRUE, specifies the default type.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] AllChildren TRUE to configure all children, FALSE otherwise.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] ValidateOptions TRUE to validate existing options, FALSE otherwise.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] SetOptions TRUE to set options, FALSE otherwise.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] DriverImageHandle The handle for the driver to configure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] DeviceHandle The handle of the device being managed by the Driver specified.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] ChildHandle The handle of a child device of the specified device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval SHELL_NOT_FOUND A specified handle could not be found.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval SHELL_INVALID_PARAMETER A parameter has a invalid value.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSHELL_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncPreHiiDrvCfg (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST CHAR8 *Language,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN BOOLEAN ForceDefaults,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT32 DefaultType,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN BOOLEAN AllChildren,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN BOOLEAN ValidateOptions,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN BOOLEAN SetOptions,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE DriverImageHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE DeviceHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE ChildHandle
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_STATUS Status;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_STATUS ShellStatus;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN OuterLoopCounter;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR8 *BestLanguage;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN DriverImageHandleCount;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE *DriverImageHandleBuffer;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN HandleCount;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE *HandleBuffer;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN *HandleType;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN LoopCounter;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN ChildIndex;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN ChildHandleCount;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE *ChildHandleBuffer;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN *ChildHandleType;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_DRIVER_CONFIGURATION_ACTION_REQUIRED ActionRequired;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_DRIVER_CONFIGURATION_PROTOCOL *DriverConfiguration;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN Iso639Language;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN HandleIndex1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN HandleIndex2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN HandleIndex3;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_SUCCESS;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (ChildHandle == NULL && AllChildren) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SetOptions = FALSE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (ForceDefaults) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DRVCFG_FORCE_D),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DefaultType);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (ValidateOptions) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DRVCFG_VALIDATE),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (SetOptions) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DRVCFG_SET),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (DriverImageHandle == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverImageHandleBuffer = GetHandleListByProtocolList(CfgGuidList);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (DriverImageHandleBuffer == NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_NOT_FOUND;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync goto Done;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleBuffer = DriverImageHandleBuffer, DriverImageHandleCount = 0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ; HandleBuffer != NULL && *HandleBuffer != NULL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ; HandleBuffer++,DriverImageHandleCount++);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverImageHandleCount = 1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Allocate buffer to hold the image handle so as to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // keep consistent with the above clause
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverImageHandleBuffer = AllocatePool (sizeof (EFI_HANDLE));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (DriverImageHandleBuffer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverImageHandleBuffer[0] = DriverImageHandle;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (OuterLoopCounter = 0; OuterLoopCounter < DriverImageHandleCount; OuterLoopCounter++) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Iso639Language = FALSE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = gBS->OpenProtocol (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverImageHandleBuffer[OuterLoopCounter],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &gEfiDriverConfiguration2ProtocolGuid,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (VOID **) &DriverConfiguration,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_OPEN_PROTOCOL_GET_PROTOCOL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR (Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Iso639Language = TRUE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = gBS->OpenProtocol (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverImageHandleBuffer[OuterLoopCounter],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &gEfiDriverConfigurationProtocolGuid,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (VOID **) &DriverConfiguration,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_OPEN_PROTOCOL_GET_PROTOCOL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR (Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// STRING_TOKEN (STR_DRVCFG_NOT_SUPPORT),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// ConvertHandleToHandleIndex (DriverImageHandleBuffer[OuterLoopCounter])
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_UNSUPPORTED;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync continue;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BestLanguage = GetBestLanguage (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverConfiguration->SupportedLanguages,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Iso639Language,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Language!=NULL?Language:"",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverConfiguration->SupportedLanguages,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (BestLanguage == NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_GEN_PROBLEM_VAL),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync L"-l"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_INVALID_PARAMETER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync continue;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = ParseHandleDatabaseByRelationshipWithType (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverImageHandleBuffer[OuterLoopCounter],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &HandleCount,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &HandleBuffer,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &HandleType
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR (Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync continue;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (SetOptions && DeviceHandle == NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gST->ConOut->ClearScreen (gST->ConOut);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = DriverConfiguration->SetOptions (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverConfiguration,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BestLanguage,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &ActionRequired
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gST->ConOut->ClearScreen (gST->ConOut);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DRVCFG_ALL_LANG),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ConvertHandleToHandleIndex (DriverImageHandleBuffer[OuterLoopCounter]),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverConfiguration->SupportedLanguages
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!EFI_ERROR (Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DRVCFG_OPTIONS_SET),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (LoopCounter = 0; LoopCounter < HandleCount; LoopCounter++) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ((HandleType[LoopCounter] & HR_CONTROLLER_HANDLE) == HR_CONTROLLER_HANDLE) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellCmdDriverConfigurationProcessActionRequired (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverImageHandleBuffer[OuterLoopCounter],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleBuffer[LoopCounter],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ActionRequired
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DRVCFG_NOT_SET),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync continue;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (LoopCounter = 0; LoopCounter < HandleCount; LoopCounter++) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ((HandleType[LoopCounter] & HR_CONTROLLER_HANDLE) != HR_CONTROLLER_HANDLE) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync continue;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (DeviceHandle != NULL && DeviceHandle != HandleBuffer[LoopCounter]) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync continue;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (ChildHandle == NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleIndex1 = ConvertHandleToHandleIndex (DriverImageHandleBuffer[OuterLoopCounter]);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleIndex2 = ConvertHandleToHandleIndex (HandleBuffer[LoopCounter]);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DRVCFG_CTRL_LANG),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleIndex1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleIndex2,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverConfiguration->SupportedLanguages
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (ForceDefaults) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = DriverConfiguration->ForceDefaults (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverConfiguration,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleBuffer[LoopCounter],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DefaultType,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &ActionRequired
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!EFI_ERROR (Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DRVCFG_DEF_FORCED),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellCmdDriverConfigurationProcessActionRequired (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverImageHandleBuffer[OuterLoopCounter],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleBuffer[LoopCounter],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ActionRequired
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DRVCFG_FORCE_FAILED),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_DEVICE_ERROR;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (ValidateOptions) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = DriverConfiguration->OptionsValid (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverConfiguration,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleBuffer[LoopCounter],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!EFI_ERROR (Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DRVCFG_OPTIONS_VALID),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DRVCFG_OPTIONS_INV),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_DEVICE_ERROR;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (SetOptions) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gST->ConOut->ClearScreen (gST->ConOut);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = DriverConfiguration->SetOptions (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverConfiguration,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleBuffer[LoopCounter],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BestLanguage,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &ActionRequired
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gST->ConOut->ClearScreen (gST->ConOut);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleIndex1 = ConvertHandleToHandleIndex (DriverImageHandleBuffer[OuterLoopCounter]);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleIndex2 = ConvertHandleToHandleIndex (HandleBuffer[LoopCounter]);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DRVCFG_CTRL_LANG),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleIndex1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleIndex2,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverConfiguration->SupportedLanguages
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!EFI_ERROR (Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DRVCFG_OPTIONS_SET),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellCmdDriverConfigurationProcessActionRequired (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverImageHandleBuffer[OuterLoopCounter],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleBuffer[LoopCounter],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ActionRequired
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DRVCFG_NOT_SET),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_DEVICE_ERROR;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (ChildHandle == NULL && !AllChildren) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync continue;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = ParseHandleDatabaseByRelationshipWithType (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverImageHandleBuffer[OuterLoopCounter],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleBuffer[LoopCounter],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &ChildHandleCount,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &ChildHandleBuffer,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &ChildHandleType
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR (Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync continue;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (ChildIndex = 0; ChildIndex < ChildHandleCount; ChildIndex++) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ((ChildHandleType[ChildIndex] & HR_CHILD_HANDLE) != HR_CHILD_HANDLE) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync continue;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (ChildHandle != NULL && ChildHandle != ChildHandleBuffer[ChildIndex]) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync continue;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleIndex1 = ConvertHandleToHandleIndex (DriverImageHandleBuffer[OuterLoopCounter]);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleIndex2 = ConvertHandleToHandleIndex (HandleBuffer[LoopCounter]);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleIndex3 = ConvertHandleToHandleIndex (ChildHandleBuffer[ChildIndex]);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DRVCFG_CHILD_LANG),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleIndex1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleIndex2,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleIndex3,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverConfiguration->SupportedLanguages);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (ForceDefaults) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = DriverConfiguration->ForceDefaults (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverConfiguration,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleBuffer[LoopCounter],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ChildHandleBuffer[ChildIndex],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DefaultType,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &ActionRequired
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!EFI_ERROR (Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DRVCFG_DEF_FORCED),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellCmdDriverConfigurationProcessActionRequired (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverImageHandleBuffer[OuterLoopCounter],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleBuffer[LoopCounter],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ChildHandleBuffer[ChildIndex],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ActionRequired
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DRVCFG_FORCE_FAILED),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_DEVICE_ERROR;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (ValidateOptions) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = DriverConfiguration->OptionsValid (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverConfiguration,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleBuffer[LoopCounter],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ChildHandleBuffer[ChildIndex]
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!EFI_ERROR (Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DRVCFG_OPTIONS_VALID),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DRVCFG_OPTIONS_INV),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_DEVICE_ERROR;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (SetOptions) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gST->ConOut->ClearScreen (gST->ConOut);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = DriverConfiguration->SetOptions (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverConfiguration,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleBuffer[LoopCounter],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ChildHandleBuffer[ChildIndex],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BestLanguage,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &ActionRequired
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gST->ConOut->ClearScreen (gST->ConOut);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleIndex1 = ConvertHandleToHandleIndex (DriverImageHandleBuffer[OuterLoopCounter]);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleIndex2 = ConvertHandleToHandleIndex (HandleBuffer[LoopCounter]);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleIndex3 = ConvertHandleToHandleIndex (ChildHandleBuffer[ChildIndex]);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DRVCFG_CHILD_LANG),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleIndex1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleIndex2,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleIndex3,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverConfiguration->SupportedLanguages
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!EFI_ERROR (Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DRVCFG_OPTIONS_SET),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellCmdDriverConfigurationProcessActionRequired (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverImageHandleBuffer[OuterLoopCounter],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleBuffer[LoopCounter],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ChildHandleBuffer[ChildIndex],
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ActionRequired
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DRVCFG_NOT_SET),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_DEVICE_ERROR;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print (L"\n");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FreePool (ChildHandleBuffer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FreePool (ChildHandleType);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FreePool (BestLanguage);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FreePool (HandleBuffer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FreePool (HandleType);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (DriverImageHandle != NULL && DriverImageHandleCount != 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FreePool (DriverImageHandleBuffer);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDone:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ShellStatus;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Function to print out configuration information on all configurable handles.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] ChildrenToo TRUE to tewst for children.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Language ASCII string for language code.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] UseHii TRUE to check for Hii and DPC, FALSE for DCP only.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval SHELL_SUCCESS The operation was successful.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSHELL_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncPrintConfigInfoOnAll(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST BOOLEAN ChildrenToo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST CHAR8 *Language,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST BOOLEAN UseHii
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE *HandleList;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE *CurrentHandle;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN Found;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Index2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Found = FALSE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleList = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CurrentHandle = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (UseHii) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // HII method
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleList = GetHandleListByProtocol(&gEfiHiiConfigAccessProtocolGuid);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (CurrentHandle = HandleList ; CurrentHandle != NULL && *CurrentHandle != NULL; CurrentHandle++){
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Found = TRUE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Index2 = *CurrentHandle == NULL ? 0 : ConvertHandleToHandleIndex(*CurrentHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DRVCFG_LINE_HII),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Index2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_FREE_NON_NULL(HandleList);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (PreHiiDrvCfg (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Language,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FALSE,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ChildrenToo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FALSE,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FALSE,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0) == SHELL_SUCCESS) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Found = TRUE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!Found) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_DRVCFG_NONE), gShellDriver1HiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (SHELL_SUCCESS);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (SHELL_SUCCESS);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSTATIC CONST SHELL_PARAM_ITEM ParamListHii[] = {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"-s", TypeFlag},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"-l", TypeValue},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"-f", TypeValue},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"-o", TypeValue},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"-i", TypeValue},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {NULL, TypeMax}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync };
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSTATIC CONST SHELL_PARAM_ITEM ParamListPreHii[] = {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"-c", TypeFlag},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"-s", TypeFlag},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"-v", TypeFlag},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"-l", TypeValue},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"-f", TypeValue},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {NULL, TypeMax}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync };
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Function for 'drvcfg' 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
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncShellCommandRunDrvCfg (
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 *HandleIndex1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CONST CHAR16 *HandleIndex2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CONST CHAR16 *HandleIndex3;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CONST CHAR16 *ForceTypeString;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN Force;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN Set;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN Validate;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN InFromFile;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN OutToFile;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN AllChildren;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN UseHii;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ForceType;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 Intermediate;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE Handle1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE Handle2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE Handle3;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CONST CHAR16 *FileName;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_SUCCESS;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = EFI_SUCCESS;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Language = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UseHii = TRUE;
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 (ParamListHii, &Package, &ProblemParam, TRUE);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR(Status) || ShellCommandLineGetCount(Package) > 2) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UseHii = FALSE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Package != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellCommandLineFreeVarList (Package);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_FREE_NON_NULL(ProblemParam);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = ShellCommandLineParse (ParamListPreHii, &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 goto Done;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT(FALSE);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (ShellStatus == SHELL_SUCCESS) {
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 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDriver1HiiHandle, L"-l");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_INVALID_PARAMETER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync goto Done;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Set = ShellCommandLineGetFlag (Package, L"-s");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Validate = ShellCommandLineGetFlag (Package, L"-v");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync InFromFile = ShellCommandLineGetFlag (Package, L"-i");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OutToFile = ShellCommandLineGetFlag (Package, L"-o");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AllChildren = ShellCommandLineGetFlag (Package, L"-c");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Force = ShellCommandLineGetFlag (Package, L"-f");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ForceTypeString = ShellCommandLineGetValue(Package, L"-f");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (OutToFile) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FileName = ShellCommandLineGetValue(Package, L"-o");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (InFromFile) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FileName = ShellCommandLineGetValue(Package, L"-i");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FileName = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (InFromFile && EFI_ERROR(ShellFileExists(FileName))) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_FIND_FAIL), gShellDriver1HiiHandle, FileName);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_INVALID_PARAMETER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync goto Done;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (OutToFile && !EFI_ERROR(ShellFileExists(FileName))) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_EXIST), gShellDriver1HiiHandle, FileName);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_INVALID_PARAMETER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync goto Done;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Force && ForceTypeString == NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDriver1HiiHandle, L"-f");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_INVALID_PARAMETER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync goto Done;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Force) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = ShellConvertStringToUint64(ForceTypeString, &Intermediate, FALSE, FALSE);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR(Status)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM_VAL), gShellDriver1HiiHandle, L"-f");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_INVALID_PARAMETER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync goto Done;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ForceType = (UINT32)Intermediate;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ForceType = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleIndex1 = ShellCommandLineGetRawValue(Package, 1);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Handle1 = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (HandleIndex1 != NULL && !EFI_ERROR(ShellConvertStringToUint64(HandleIndex1, &Intermediate, TRUE, FALSE))) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Handle1 = ConvertHandleIndexToHandle((UINTN)Intermediate);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Handle1 == NULL || (UINT64)(UINTN)Intermediate != Intermediate) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, HandleIndex1);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_INVALID_PARAMETER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync goto Done;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleIndex2 = ShellCommandLineGetRawValue(Package, 2);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Handle2 = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (HandleIndex2 != NULL && !EFI_ERROR(ShellConvertStringToUint64(HandleIndex2, &Intermediate, TRUE, FALSE))) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Handle2 = ConvertHandleIndexToHandle((UINTN)Intermediate);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Handle2 == NULL || (UINT64)(UINTN)Intermediate != Intermediate) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, HandleIndex2);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_INVALID_PARAMETER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync goto Done;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HandleIndex3 = ShellCommandLineGetRawValue(Package, 3);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Handle3 = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (HandleIndex3 != NULL && !EFI_ERROR(ShellConvertStringToUint64(HandleIndex3, &Intermediate, TRUE, FALSE))) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Handle3 = ConvertHandleIndexToHandle((UINTN)Intermediate);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Handle3 == NULL || (UINT64)(UINTN)Intermediate != Intermediate) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, HandleIndex3);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_INVALID_PARAMETER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync goto Done;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ((InFromFile || OutToFile) && (FileName == NULL)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (FileName == NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDriver1HiiHandle, InFromFile?L"-i":L"-o");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_HANDLE_REQ), gShellDriver1HiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_INVALID_PARAMETER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync goto Done;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!UseHii && (InFromFile || OutToFile)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (InFromFile) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDriver1HiiHandle, L"-i");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_INVALID_PARAMETER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync goto Done;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (OutToFile) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDriver1HiiHandle, L"-o");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_INVALID_PARAMETER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync goto Done;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Validate && Force) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CONF), gShellDriver1HiiHandle, L"-v", L"-f");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_INVALID_PARAMETER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync goto Done;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Validate && Set) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CONF), gShellDriver1HiiHandle, L"-v", L"-s");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_INVALID_PARAMETER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync goto Done;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Set && Force) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CONF), gShellDriver1HiiHandle, L"-s", L"-f");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_INVALID_PARAMETER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync goto Done;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (OutToFile && InFromFile) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CONF), gShellDriver1HiiHandle, L"-i", L"-o");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_INVALID_PARAMETER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync goto Done;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // We do HII first.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (UseHii) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Handle1 != NULL && EFI_ERROR(gBS->OpenProtocol(Handle1, &gEfiHiiConfigAccessProtocolGuid, NULL, gImageHandle, NULL, EFI_OPEN_PROTOCOL_TEST_PROTOCOL))) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // no HII on this handle.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = SHELL_UNSUPPORTED;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (Validate) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (Force) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (Set) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (InFromFile) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = ConfigFromFile(Handle1, FileName);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Handle1 != NULL && ShellStatus == SHELL_SUCCESS) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync goto Done;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (OutToFile) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = ConfigToFile(Handle1, FileName);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Handle1 != NULL && ShellStatus == SHELL_SUCCESS) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync goto Done;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (HandleIndex1 == NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // display all that are configurable
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = PrintConfigInfoOnAll(AllChildren, Language, UseHii);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync goto Done;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!EFI_ERROR(gBS->OpenProtocol(Handle1, &gEfiHiiConfigAccessProtocolGuid, NULL, gImageHandle, NULL, EFI_OPEN_PROTOCOL_TEST_PROTOCOL))) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DRVCFG_LINE_HII),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ConvertHandleToHandleIndex(Handle1)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync goto Done;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // We allways need to do this one since it does both by default.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!InFromFile && !OutToFile) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellStatus = PreHiiDrvCfg (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Language,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Force,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ForceType,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AllChildren,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Validate,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Set,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Handle1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Handle2,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Handle3);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (ShellStatus == SHELL_UNSUPPORTED) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync -1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STRING_TOKEN (STR_DRVCFG_NOT_SUPPORT),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gShellDriver1HiiHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ConvertHandleToHandleIndex(Handle1)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDone:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellCommandLineFreeVarList (Package);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SHELL_FREE_NON_NULL(Language);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (ShellStatus);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}