14ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey/** @file 24ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey Main file for DrvCfg shell Driver1 function. 34ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 4c011b6c9e2baf57fc0557117e9875ceb3dca55a3Tapan Shah (C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR> 558972f5cf7e1163e474f961afe34e200fd5dac11Ruiyu Ni Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR> 64ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey This program and the accompanying materials 74ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey are licensed and made available under the terms and conditions of the BSD License 84ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey which accompanies this distribution. The full text of the license may be found at 94ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey http://opensource.org/licenses/bsd-license.php 104ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 114ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 124ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 134ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 144ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey**/ 154ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 164ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey#include "UefiShellDriver1CommandsLib.h" 174ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey#include <Protocol/HiiConfigAccess.h> 184ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey#include <Protocol/HiiDatabase.h> 194ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 204880c2c94d100238b310579fbd95313893a5353fjcarseySTATIC CONST EFI_GUID *CfgGuidList[] = {&gEfiDriverConfigurationProtocolGuid, &gEfiDriverConfiguration2ProtocolGuid, NULL}; 214880c2c94d100238b310579fbd95313893a5353fjcarsey 224ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey/** 234880c2c94d100238b310579fbd95313893a5353fjcarsey Find the EFI_HII_HANDLE by device path. 244ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 254880c2c94d100238b310579fbd95313893a5353fjcarsey @param[in] DevPath1 The Device Path to match. 264880c2c94d100238b310579fbd95313893a5353fjcarsey @param[out] HiiHandle The EFI_HII_HANDLE after the converstion. 274880c2c94d100238b310579fbd95313893a5353fjcarsey @param[in] HiiDb The Hii database protocol 284ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 294880c2c94d100238b310579fbd95313893a5353fjcarsey @retval EFI_SUCCESS The operation was successful. 304880c2c94d100238b310579fbd95313893a5353fjcarsey @retval EFI_NOT_FOUND There was no EFI_HII_HANDLE found for that deviec path. 314ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey**/ 324ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarseyEFI_STATUS 334880c2c94d100238b310579fbd95313893a5353fjcarseyFindHiiHandleViaDevPath( 344880c2c94d100238b310579fbd95313893a5353fjcarsey IN CONST EFI_DEVICE_PATH_PROTOCOL *DevPath1, 354880c2c94d100238b310579fbd95313893a5353fjcarsey OUT EFI_HII_HANDLE *HiiHandle, 364880c2c94d100238b310579fbd95313893a5353fjcarsey IN EFI_HII_DATABASE_PROTOCOL *HiiDb 374ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey ) 384ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey{ 394880c2c94d100238b310579fbd95313893a5353fjcarsey EFI_HII_HANDLE *HandleBuffer; 404880c2c94d100238b310579fbd95313893a5353fjcarsey UINTN HandleBufferSize; 414880c2c94d100238b310579fbd95313893a5353fjcarsey VOID *MainBuffer; 424880c2c94d100238b310579fbd95313893a5353fjcarsey UINTN MainBufferSize; 434880c2c94d100238b310579fbd95313893a5353fjcarsey EFI_HII_PACKAGE_LIST_HEADER *PackageListHeader; 444880c2c94d100238b310579fbd95313893a5353fjcarsey EFI_HII_PACKAGE_HEADER *PackageHeader; 454880c2c94d100238b310579fbd95313893a5353fjcarsey UINTN LoopVariable; 464880c2c94d100238b310579fbd95313893a5353fjcarsey EFI_DEVICE_PATH_PROTOCOL *DevPath2; 474880c2c94d100238b310579fbd95313893a5353fjcarsey EFI_STATUS Status; 484ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 494880c2c94d100238b310579fbd95313893a5353fjcarsey ASSERT(DevPath1 != NULL); 504880c2c94d100238b310579fbd95313893a5353fjcarsey ASSERT(HiiHandle != NULL); 514880c2c94d100238b310579fbd95313893a5353fjcarsey ASSERT(*HiiHandle == NULL); 524880c2c94d100238b310579fbd95313893a5353fjcarsey ASSERT(HiiDb != NULL); 534ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 544880c2c94d100238b310579fbd95313893a5353fjcarsey HandleBufferSize = 0; 554880c2c94d100238b310579fbd95313893a5353fjcarsey HandleBuffer = NULL; 564880c2c94d100238b310579fbd95313893a5353fjcarsey Status = HiiDb->ListPackageLists(HiiDb, EFI_HII_PACKAGE_DEVICE_PATH, NULL, &HandleBufferSize, HandleBuffer); 574ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey if (Status == EFI_BUFFER_TOO_SMALL) { 584880c2c94d100238b310579fbd95313893a5353fjcarsey HandleBuffer = AllocateZeroPool(HandleBufferSize); 5958972f5cf7e1163e474f961afe34e200fd5dac11Ruiyu Ni if (HandleBuffer == NULL) { 6058972f5cf7e1163e474f961afe34e200fd5dac11Ruiyu Ni Status = EFI_OUT_OF_RESOURCES; 6158972f5cf7e1163e474f961afe34e200fd5dac11Ruiyu Ni } else { 6258972f5cf7e1163e474f961afe34e200fd5dac11Ruiyu Ni Status = HiiDb->ListPackageLists (HiiDb, EFI_HII_PACKAGE_DEVICE_PATH, NULL, &HandleBufferSize, HandleBuffer); 6358972f5cf7e1163e474f961afe34e200fd5dac11Ruiyu Ni } 644ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey } 654ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey if (EFI_ERROR(Status)) { 664880c2c94d100238b310579fbd95313893a5353fjcarsey SHELL_FREE_NON_NULL(HandleBuffer); 674ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey return (Status); 684ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey } 694ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 7072c8a89a653a6d393969d928b18fde86cf021901ydong if (HandleBuffer == NULL) { 7172c8a89a653a6d393969d928b18fde86cf021901ydong return EFI_NOT_FOUND; 7272c8a89a653a6d393969d928b18fde86cf021901ydong } 7372c8a89a653a6d393969d928b18fde86cf021901ydong 744880c2c94d100238b310579fbd95313893a5353fjcarsey for (LoopVariable = 0 ; LoopVariable < (HandleBufferSize/sizeof(HandleBuffer[0])) && *HiiHandle == NULL ; LoopVariable++) { 754880c2c94d100238b310579fbd95313893a5353fjcarsey MainBufferSize = 0; 764880c2c94d100238b310579fbd95313893a5353fjcarsey MainBuffer = NULL; 774880c2c94d100238b310579fbd95313893a5353fjcarsey Status = HiiDb->ExportPackageLists(HiiDb, HandleBuffer[LoopVariable], &MainBufferSize, MainBuffer); 784880c2c94d100238b310579fbd95313893a5353fjcarsey if (Status == EFI_BUFFER_TOO_SMALL) { 794880c2c94d100238b310579fbd95313893a5353fjcarsey MainBuffer = AllocateZeroPool(MainBufferSize); 8058972f5cf7e1163e474f961afe34e200fd5dac11Ruiyu Ni if (MainBuffer != NULL) { 8158972f5cf7e1163e474f961afe34e200fd5dac11Ruiyu Ni Status = HiiDb->ExportPackageLists (HiiDb, HandleBuffer[LoopVariable], &MainBufferSize, MainBuffer); 8258972f5cf7e1163e474f961afe34e200fd5dac11Ruiyu Ni } 8358972f5cf7e1163e474f961afe34e200fd5dac11Ruiyu Ni } 8458972f5cf7e1163e474f961afe34e200fd5dac11Ruiyu Ni if (EFI_ERROR (Status)) { 8558972f5cf7e1163e474f961afe34e200fd5dac11Ruiyu Ni continue; 864880c2c94d100238b310579fbd95313893a5353fjcarsey } 874880c2c94d100238b310579fbd95313893a5353fjcarsey // 884880c2c94d100238b310579fbd95313893a5353fjcarsey // Enumerate through the block of returned memory. 894880c2c94d100238b310579fbd95313893a5353fjcarsey // This should actually be a small block, but we need to be sure. 904880c2c94d100238b310579fbd95313893a5353fjcarsey // 914880c2c94d100238b310579fbd95313893a5353fjcarsey for (PackageListHeader = (EFI_HII_PACKAGE_LIST_HEADER*)MainBuffer 924880c2c94d100238b310579fbd95313893a5353fjcarsey ; PackageListHeader != NULL && ((CHAR8*)PackageListHeader) < (((CHAR8*)MainBuffer)+MainBufferSize) && *HiiHandle == NULL 934880c2c94d100238b310579fbd95313893a5353fjcarsey ; PackageListHeader = (EFI_HII_PACKAGE_LIST_HEADER*)(((CHAR8*)(PackageListHeader)) + PackageListHeader->PackageLength )) { 944880c2c94d100238b310579fbd95313893a5353fjcarsey for (PackageHeader = (EFI_HII_PACKAGE_HEADER*)(((CHAR8*)(PackageListHeader))+sizeof(EFI_HII_PACKAGE_LIST_HEADER)) 954880c2c94d100238b310579fbd95313893a5353fjcarsey ; PackageHeader != NULL && ((CHAR8*)PackageHeader) < (((CHAR8*)MainBuffer)+MainBufferSize) && PackageHeader->Type != EFI_HII_PACKAGE_END && *HiiHandle == NULL 964880c2c94d100238b310579fbd95313893a5353fjcarsey ; PackageHeader = (EFI_HII_PACKAGE_HEADER*)(((CHAR8*)(PackageHeader))+PackageHeader->Length)) { 974880c2c94d100238b310579fbd95313893a5353fjcarsey if (PackageHeader->Type == EFI_HII_PACKAGE_DEVICE_PATH) { 984880c2c94d100238b310579fbd95313893a5353fjcarsey DevPath2 = (EFI_DEVICE_PATH_PROTOCOL*)(((CHAR8*)PackageHeader) + sizeof(EFI_HII_PACKAGE_HEADER)); 994880c2c94d100238b310579fbd95313893a5353fjcarsey if (DevicePathCompare(&DevPath1, &DevPath2) == 0) { 1004880c2c94d100238b310579fbd95313893a5353fjcarsey *HiiHandle = HandleBuffer[LoopVariable]; 1014880c2c94d100238b310579fbd95313893a5353fjcarsey break; 1024880c2c94d100238b310579fbd95313893a5353fjcarsey } 1034880c2c94d100238b310579fbd95313893a5353fjcarsey } 1044880c2c94d100238b310579fbd95313893a5353fjcarsey } 1054ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey } 1064880c2c94d100238b310579fbd95313893a5353fjcarsey SHELL_FREE_NON_NULL(MainBuffer); 1074ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey } 1084880c2c94d100238b310579fbd95313893a5353fjcarsey SHELL_FREE_NON_NULL(HandleBuffer); 1094ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 1104880c2c94d100238b310579fbd95313893a5353fjcarsey if (*HiiHandle == NULL) { 1114880c2c94d100238b310579fbd95313893a5353fjcarsey return (EFI_NOT_FOUND); 1124880c2c94d100238b310579fbd95313893a5353fjcarsey } 1134880c2c94d100238b310579fbd95313893a5353fjcarsey return (EFI_SUCCESS); 1144880c2c94d100238b310579fbd95313893a5353fjcarsey} 1154ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 1164880c2c94d100238b310579fbd95313893a5353fjcarsey/** 1174880c2c94d100238b310579fbd95313893a5353fjcarsey Convert a EFI_HANDLE to a EFI_HII_HANDLE. 1184ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 1194880c2c94d100238b310579fbd95313893a5353fjcarsey @param[in] Handle The EFI_HANDLE to convert. 1204880c2c94d100238b310579fbd95313893a5353fjcarsey @param[out] HiiHandle The EFI_HII_HANDLE after the converstion. 1214880c2c94d100238b310579fbd95313893a5353fjcarsey @param[in] HiiDb The Hii database protocol 1224ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 1234880c2c94d100238b310579fbd95313893a5353fjcarsey @retval EFI_SUCCESS The operation was successful. 1244880c2c94d100238b310579fbd95313893a5353fjcarsey**/ 1254880c2c94d100238b310579fbd95313893a5353fjcarseyEFI_STATUS 1264880c2c94d100238b310579fbd95313893a5353fjcarseyConvertHandleToHiiHandle( 1274880c2c94d100238b310579fbd95313893a5353fjcarsey IN CONST EFI_HANDLE Handle, 1284880c2c94d100238b310579fbd95313893a5353fjcarsey OUT EFI_HII_HANDLE *HiiHandle, 1294880c2c94d100238b310579fbd95313893a5353fjcarsey IN EFI_HII_DATABASE_PROTOCOL *HiiDb 1304880c2c94d100238b310579fbd95313893a5353fjcarsey ) 1314880c2c94d100238b310579fbd95313893a5353fjcarsey{ 1324880c2c94d100238b310579fbd95313893a5353fjcarsey EFI_STATUS Status; 1334880c2c94d100238b310579fbd95313893a5353fjcarsey EFI_DEVICE_PATH_PROTOCOL *DevPath1; 1344ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 1354880c2c94d100238b310579fbd95313893a5353fjcarsey if (HiiHandle == NULL || HiiDb == NULL) { 1364880c2c94d100238b310579fbd95313893a5353fjcarsey return (EFI_INVALID_PARAMETER); 1374880c2c94d100238b310579fbd95313893a5353fjcarsey } 1384880c2c94d100238b310579fbd95313893a5353fjcarsey *HiiHandle = NULL; 1394880c2c94d100238b310579fbd95313893a5353fjcarsey 1404880c2c94d100238b310579fbd95313893a5353fjcarsey if (Handle == NULL) { 1414880c2c94d100238b310579fbd95313893a5353fjcarsey return (EFI_SUCCESS); 1424880c2c94d100238b310579fbd95313893a5353fjcarsey } 1434880c2c94d100238b310579fbd95313893a5353fjcarsey 1444880c2c94d100238b310579fbd95313893a5353fjcarsey DevPath1 = NULL; 1454880c2c94d100238b310579fbd95313893a5353fjcarsey Status = gBS->OpenProtocol(Handle, &gEfiDevicePathProtocolGuid, (VOID**)&DevPath1, gImageHandle, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL); 1464880c2c94d100238b310579fbd95313893a5353fjcarsey if (EFI_ERROR(Status) || DevPath1 == NULL) { 1474880c2c94d100238b310579fbd95313893a5353fjcarsey return (EFI_NOT_FOUND); 1484880c2c94d100238b310579fbd95313893a5353fjcarsey } 1494880c2c94d100238b310579fbd95313893a5353fjcarsey 1504880c2c94d100238b310579fbd95313893a5353fjcarsey return (FindHiiHandleViaDevPath(DevPath1, HiiHandle, HiiDb)); 1514ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey} 1524ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 1534ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey/** 1544880c2c94d100238b310579fbd95313893a5353fjcarsey Function to print out all HII configuration information to a file. 1554ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 1564880c2c94d100238b310579fbd95313893a5353fjcarsey @param[in] Handle The handle to get info on. NULL to do all handles. 1574880c2c94d100238b310579fbd95313893a5353fjcarsey @param[in] FileName The filename to rwite the info to. 1584ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey**/ 1594ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarseySHELL_STATUS 1604880c2c94d100238b310579fbd95313893a5353fjcarseyConfigToFile( 1614880c2c94d100238b310579fbd95313893a5353fjcarsey IN CONST EFI_HANDLE Handle, 1624880c2c94d100238b310579fbd95313893a5353fjcarsey IN CONST CHAR16 *FileName 1634ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey ) 1644ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey{ 1654880c2c94d100238b310579fbd95313893a5353fjcarsey EFI_HII_DATABASE_PROTOCOL *HiiDatabase; 1664880c2c94d100238b310579fbd95313893a5353fjcarsey EFI_STATUS Status; 1674880c2c94d100238b310579fbd95313893a5353fjcarsey VOID *MainBuffer; 1684880c2c94d100238b310579fbd95313893a5353fjcarsey UINTN MainBufferSize; 1694880c2c94d100238b310579fbd95313893a5353fjcarsey EFI_HII_HANDLE HiiHandle; 1704880c2c94d100238b310579fbd95313893a5353fjcarsey SHELL_FILE_HANDLE FileHandle; 1714ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 1724880c2c94d100238b310579fbd95313893a5353fjcarsey HiiDatabase = NULL; 1734880c2c94d100238b310579fbd95313893a5353fjcarsey MainBufferSize = 0; 1744880c2c94d100238b310579fbd95313893a5353fjcarsey MainBuffer = NULL; 1754880c2c94d100238b310579fbd95313893a5353fjcarsey FileHandle = NULL; 1764ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 1774880c2c94d100238b310579fbd95313893a5353fjcarsey Status = ShellOpenFileByName(FileName, &FileHandle, EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE|EFI_FILE_MODE_CREATE, 0); 1784ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey if (EFI_ERROR(Status)) { 1794880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 1804880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 1814880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 1824880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 183bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah STRING_TOKEN(STR_GEN_FILE_OPEN_FAIL), 184bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah gShellDriver1HiiHandle, 185bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah L"drvcfg", 1864880c2c94d100238b310579fbd95313893a5353fjcarsey FileName, 1874880c2c94d100238b310579fbd95313893a5353fjcarsey Status); 1884880c2c94d100238b310579fbd95313893a5353fjcarsey return (SHELL_DEVICE_ERROR); 1894ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey } 1904ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 1914ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey // 1924880c2c94d100238b310579fbd95313893a5353fjcarsey // Locate HII Database protocol 1934ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey // 1944880c2c94d100238b310579fbd95313893a5353fjcarsey Status = gBS->LocateProtocol ( 1954880c2c94d100238b310579fbd95313893a5353fjcarsey &gEfiHiiDatabaseProtocolGuid, 1964880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 1974880c2c94d100238b310579fbd95313893a5353fjcarsey (VOID **) &HiiDatabase 1984880c2c94d100238b310579fbd95313893a5353fjcarsey ); 1994880c2c94d100238b310579fbd95313893a5353fjcarsey 2004880c2c94d100238b310579fbd95313893a5353fjcarsey if (EFI_ERROR(Status) || HiiDatabase == NULL) { 2014880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 2024880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 2034880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 2044880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 2054880c2c94d100238b310579fbd95313893a5353fjcarsey STRING_TOKEN(STR_GEN_PROTOCOL_NF), 206bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah gShellDriver1HiiHandle, 207bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah L"drvcfg", 2084880c2c94d100238b310579fbd95313893a5353fjcarsey L"EfiHiiDatabaseProtocol", 2094880c2c94d100238b310579fbd95313893a5353fjcarsey &gEfiHiiDatabaseProtocolGuid); 2104880c2c94d100238b310579fbd95313893a5353fjcarsey ShellCloseFile(&FileHandle); 2114880c2c94d100238b310579fbd95313893a5353fjcarsey return (SHELL_NOT_FOUND); 2124ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey } 2134ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 214eff60c11eadb1594fbd6d8f8906c5577c9f90026Kinney, Michael D HiiHandle = NULL; 2154880c2c94d100238b310579fbd95313893a5353fjcarsey Status = ConvertHandleToHiiHandle(Handle, &HiiHandle, HiiDatabase); 2164880c2c94d100238b310579fbd95313893a5353fjcarsey if (EFI_ERROR(Status)) { 2174880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 2184880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 2194880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 2204880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 2214880c2c94d100238b310579fbd95313893a5353fjcarsey STRING_TOKEN(STR_GEN_HANDLE_NOT), 222bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah gShellDriver1HiiHandle, 223bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah L"drvcfg", 2244880c2c94d100238b310579fbd95313893a5353fjcarsey ConvertHandleToHandleIndex(Handle), 2254880c2c94d100238b310579fbd95313893a5353fjcarsey L"Device"); 2264880c2c94d100238b310579fbd95313893a5353fjcarsey ShellCloseFile(&FileHandle); 2274880c2c94d100238b310579fbd95313893a5353fjcarsey return (SHELL_DEVICE_ERROR); 2284ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey } 2294ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 2304880c2c94d100238b310579fbd95313893a5353fjcarsey Status = HiiDatabase->ExportPackageLists(HiiDatabase, HiiHandle, &MainBufferSize, MainBuffer); 2314880c2c94d100238b310579fbd95313893a5353fjcarsey if (Status == EFI_BUFFER_TOO_SMALL) { 2324880c2c94d100238b310579fbd95313893a5353fjcarsey MainBuffer = AllocateZeroPool(MainBufferSize); 2334880c2c94d100238b310579fbd95313893a5353fjcarsey Status = HiiDatabase->ExportPackageLists(HiiDatabase, HiiHandle, &MainBufferSize, MainBuffer); 2344ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey } 2354ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 2364880c2c94d100238b310579fbd95313893a5353fjcarsey Status = ShellWriteFile(FileHandle, &MainBufferSize, MainBuffer); 2374880c2c94d100238b310579fbd95313893a5353fjcarsey 2384880c2c94d100238b310579fbd95313893a5353fjcarsey ShellCloseFile(&FileHandle); 2394880c2c94d100238b310579fbd95313893a5353fjcarsey SHELL_FREE_NON_NULL(MainBuffer); 2404880c2c94d100238b310579fbd95313893a5353fjcarsey 2414880c2c94d100238b310579fbd95313893a5353fjcarsey if (EFI_ERROR(Status)) { 2424880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 2434880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 2444880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 2454880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 2464880c2c94d100238b310579fbd95313893a5353fjcarsey STRING_TOKEN(STR_FILE_WRITE_FAIL), 247bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah gShellDriver1HiiHandle, 248bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah L"drvcfg", 249bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah FileName); 2504880c2c94d100238b310579fbd95313893a5353fjcarsey return (SHELL_DEVICE_ERROR); 2514880c2c94d100238b310579fbd95313893a5353fjcarsey } 2524880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 2534880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 2544880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 2554880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 2564880c2c94d100238b310579fbd95313893a5353fjcarsey STRING_TOKEN(STR_DRVCFG_COMP), 2574880c2c94d100238b310579fbd95313893a5353fjcarsey gShellDriver1HiiHandle); 2584880c2c94d100238b310579fbd95313893a5353fjcarsey 2594880c2c94d100238b310579fbd95313893a5353fjcarsey return (SHELL_SUCCESS); 2604ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey} 2614ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 2624ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey/** 2634880c2c94d100238b310579fbd95313893a5353fjcarsey Function to read in HII configuration information from a file. 2644ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 2654880c2c94d100238b310579fbd95313893a5353fjcarsey @param[in] Handle The handle to get info for. 2664880c2c94d100238b310579fbd95313893a5353fjcarsey @param[in] FileName The filename to read the info from. 2674ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey**/ 2684ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarseySHELL_STATUS 2694880c2c94d100238b310579fbd95313893a5353fjcarseyConfigFromFile( 2704880c2c94d100238b310579fbd95313893a5353fjcarsey IN EFI_HANDLE Handle, 2714880c2c94d100238b310579fbd95313893a5353fjcarsey IN CONST CHAR16 *FileName 2724ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey ) 2734ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey{ 2744880c2c94d100238b310579fbd95313893a5353fjcarsey EFI_HII_DATABASE_PROTOCOL *HiiDatabase; 2754880c2c94d100238b310579fbd95313893a5353fjcarsey EFI_STATUS Status; 2764880c2c94d100238b310579fbd95313893a5353fjcarsey VOID *MainBuffer; 2774880c2c94d100238b310579fbd95313893a5353fjcarsey UINT64 Temp; 2784880c2c94d100238b310579fbd95313893a5353fjcarsey UINTN MainBufferSize; 2794880c2c94d100238b310579fbd95313893a5353fjcarsey EFI_HII_HANDLE HiiHandle; 2804880c2c94d100238b310579fbd95313893a5353fjcarsey SHELL_FILE_HANDLE FileHandle; 2814880c2c94d100238b310579fbd95313893a5353fjcarsey CHAR16 *TempDevPathString; 2824880c2c94d100238b310579fbd95313893a5353fjcarsey EFI_HII_PACKAGE_LIST_HEADER *PackageListHeader; 2834880c2c94d100238b310579fbd95313893a5353fjcarsey EFI_HII_PACKAGE_HEADER *PackageHeader; 2844880c2c94d100238b310579fbd95313893a5353fjcarsey EFI_DEVICE_PATH_PROTOCOL *DevPath; 2854880c2c94d100238b310579fbd95313893a5353fjcarsey UINTN HandleIndex; 2864880c2c94d100238b310579fbd95313893a5353fjcarsey 2874880c2c94d100238b310579fbd95313893a5353fjcarsey HiiDatabase = NULL; 2884880c2c94d100238b310579fbd95313893a5353fjcarsey MainBufferSize = 0; 2894880c2c94d100238b310579fbd95313893a5353fjcarsey MainBuffer = NULL; 2904880c2c94d100238b310579fbd95313893a5353fjcarsey FileHandle = NULL; 2914880c2c94d100238b310579fbd95313893a5353fjcarsey 2924880c2c94d100238b310579fbd95313893a5353fjcarsey Status = ShellOpenFileByName(FileName, &FileHandle, EFI_FILE_MODE_READ, 0); 2934880c2c94d100238b310579fbd95313893a5353fjcarsey if (EFI_ERROR(Status)) { 2944880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 2954880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 2964880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 2974880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 298bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah STRING_TOKEN(STR_GEN_FILE_OPEN_FAIL), 2994880c2c94d100238b310579fbd95313893a5353fjcarsey gShellDriver1HiiHandle, 300bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah L"drvcfg", 3014880c2c94d100238b310579fbd95313893a5353fjcarsey FileName, 3024880c2c94d100238b310579fbd95313893a5353fjcarsey Status); 3034880c2c94d100238b310579fbd95313893a5353fjcarsey return (SHELL_DEVICE_ERROR); 3044880c2c94d100238b310579fbd95313893a5353fjcarsey } 3054880c2c94d100238b310579fbd95313893a5353fjcarsey 3064880c2c94d100238b310579fbd95313893a5353fjcarsey // 3074880c2c94d100238b310579fbd95313893a5353fjcarsey // Locate HII Database protocol 3084880c2c94d100238b310579fbd95313893a5353fjcarsey // 3094880c2c94d100238b310579fbd95313893a5353fjcarsey Status = gBS->LocateProtocol ( 3104880c2c94d100238b310579fbd95313893a5353fjcarsey &gEfiHiiDatabaseProtocolGuid, 3114880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 3124880c2c94d100238b310579fbd95313893a5353fjcarsey (VOID **) &HiiDatabase 3134880c2c94d100238b310579fbd95313893a5353fjcarsey ); 3144ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 3154880c2c94d100238b310579fbd95313893a5353fjcarsey if (EFI_ERROR(Status) || HiiDatabase == NULL) { 3164880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 3174880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 3184880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 3194880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 3204880c2c94d100238b310579fbd95313893a5353fjcarsey STRING_TOKEN(STR_GEN_PROTOCOL_NF), 3214880c2c94d100238b310579fbd95313893a5353fjcarsey gShellDriver1HiiHandle, 322bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah L"drvcfg", 3234880c2c94d100238b310579fbd95313893a5353fjcarsey L"EfiHiiDatabaseProtocol", 3244880c2c94d100238b310579fbd95313893a5353fjcarsey &gEfiHiiDatabaseProtocolGuid); 3254880c2c94d100238b310579fbd95313893a5353fjcarsey ShellCloseFile(&FileHandle); 3264880c2c94d100238b310579fbd95313893a5353fjcarsey return (SHELL_NOT_FOUND); 3274880c2c94d100238b310579fbd95313893a5353fjcarsey } 3284ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 3294880c2c94d100238b310579fbd95313893a5353fjcarsey Status = ShellGetFileSize(FileHandle, &Temp); 3304880c2c94d100238b310579fbd95313893a5353fjcarsey MainBufferSize = (UINTN)Temp; 3314880c2c94d100238b310579fbd95313893a5353fjcarsey if (EFI_ERROR(Status)) { 3324ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey ShellPrintHiiEx( 3334ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey -1, 3344ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey -1, 3354ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey NULL, 3364880c2c94d100238b310579fbd95313893a5353fjcarsey STRING_TOKEN(STR_FILE_READ_FAIL), 337bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah gShellDriver1HiiHandle, 338bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah L"drvcfg", 339bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah FileName); 340bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah 3414880c2c94d100238b310579fbd95313893a5353fjcarsey ShellCloseFile(&FileHandle); 3424880c2c94d100238b310579fbd95313893a5353fjcarsey return (SHELL_DEVICE_ERROR); 3434880c2c94d100238b310579fbd95313893a5353fjcarsey } 3444880c2c94d100238b310579fbd95313893a5353fjcarsey MainBuffer = AllocateZeroPool((UINTN)MainBufferSize); 3454880c2c94d100238b310579fbd95313893a5353fjcarsey if (EFI_ERROR(Status)) { 3464880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 3474880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 3484880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 3494880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 3504880c2c94d100238b310579fbd95313893a5353fjcarsey STRING_TOKEN(STR_GEN_OUT_MEM), 351bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah gShellDriver1HiiHandle, L"drvcfg"); 3524880c2c94d100238b310579fbd95313893a5353fjcarsey ShellCloseFile(&FileHandle); 3534880c2c94d100238b310579fbd95313893a5353fjcarsey return (SHELL_DEVICE_ERROR); 3544ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey } 3554880c2c94d100238b310579fbd95313893a5353fjcarsey Status = ShellReadFile(FileHandle, &MainBufferSize, MainBuffer); 3564880c2c94d100238b310579fbd95313893a5353fjcarsey if (EFI_ERROR(Status)) { 3574880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 3584880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 3594880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 3604880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 3614880c2c94d100238b310579fbd95313893a5353fjcarsey STRING_TOKEN(STR_FILE_READ_FAIL), 3624880c2c94d100238b310579fbd95313893a5353fjcarsey gShellDriver1HiiHandle, 363bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah L"drvcfg", 364bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah FileName); 365bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah 3664880c2c94d100238b310579fbd95313893a5353fjcarsey ShellCloseFile(&FileHandle); 3674880c2c94d100238b310579fbd95313893a5353fjcarsey SHELL_FREE_NON_NULL(MainBuffer); 3684880c2c94d100238b310579fbd95313893a5353fjcarsey return (SHELL_DEVICE_ERROR); 3694880c2c94d100238b310579fbd95313893a5353fjcarsey } 3704880c2c94d100238b310579fbd95313893a5353fjcarsey 3714880c2c94d100238b310579fbd95313893a5353fjcarsey ShellCloseFile(&FileHandle); 3724880c2c94d100238b310579fbd95313893a5353fjcarsey 3734880c2c94d100238b310579fbd95313893a5353fjcarsey if (Handle != NULL) { 3744880c2c94d100238b310579fbd95313893a5353fjcarsey // 3754880c2c94d100238b310579fbd95313893a5353fjcarsey // User override in place. Just do it. 3764880c2c94d100238b310579fbd95313893a5353fjcarsey // 3774880c2c94d100238b310579fbd95313893a5353fjcarsey HiiHandle = NULL; 3784880c2c94d100238b310579fbd95313893a5353fjcarsey Status = ConvertHandleToHiiHandle(Handle, &HiiHandle, HiiDatabase); 3794880c2c94d100238b310579fbd95313893a5353fjcarsey if (EFI_ERROR(Status)) { 3804ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey ShellPrintHiiEx( 3814ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey -1, 3824ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey -1, 3834ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey NULL, 3844880c2c94d100238b310579fbd95313893a5353fjcarsey STRING_TOKEN(STR_GEN_HANDLE_NOT), 385bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah gShellDriver1HiiHandle, L"drvcfg", 3864880c2c94d100238b310579fbd95313893a5353fjcarsey ConvertHandleToHandleIndex(Handle), 3874880c2c94d100238b310579fbd95313893a5353fjcarsey L"Device"); 3884880c2c94d100238b310579fbd95313893a5353fjcarsey ShellCloseFile(&FileHandle); 3894880c2c94d100238b310579fbd95313893a5353fjcarsey return (SHELL_DEVICE_ERROR); 3904880c2c94d100238b310579fbd95313893a5353fjcarsey } 3914880c2c94d100238b310579fbd95313893a5353fjcarsey Status = HiiDatabase->UpdatePackageList(HiiDatabase, HiiHandle, MainBuffer); 3924880c2c94d100238b310579fbd95313893a5353fjcarsey if (EFI_ERROR(Status)) { 3934880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 3944880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 3954880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 3964880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 397bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah STRING_TOKEN(STR_GEN_UEFI_FUNC_WARN), 398bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah gShellDriver1HiiHandle, 399bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah L"drvcfg", 4004880c2c94d100238b310579fbd95313893a5353fjcarsey L"HiiDatabase->UpdatePackageList", 4014880c2c94d100238b310579fbd95313893a5353fjcarsey Status); 4024880c2c94d100238b310579fbd95313893a5353fjcarsey return (SHELL_DEVICE_ERROR); 4034880c2c94d100238b310579fbd95313893a5353fjcarsey } 4044880c2c94d100238b310579fbd95313893a5353fjcarsey } else { 4054880c2c94d100238b310579fbd95313893a5353fjcarsey // 4064880c2c94d100238b310579fbd95313893a5353fjcarsey // we need to parse the buffer and try to match the device paths for each item to try to find it's device path. 4074880c2c94d100238b310579fbd95313893a5353fjcarsey // 4084880c2c94d100238b310579fbd95313893a5353fjcarsey 4094880c2c94d100238b310579fbd95313893a5353fjcarsey for (PackageListHeader = (EFI_HII_PACKAGE_LIST_HEADER*)MainBuffer 4104880c2c94d100238b310579fbd95313893a5353fjcarsey ; PackageListHeader != NULL && ((CHAR8*)PackageListHeader) < (((CHAR8*)MainBuffer)+MainBufferSize) 4114880c2c94d100238b310579fbd95313893a5353fjcarsey ; PackageListHeader = (EFI_HII_PACKAGE_LIST_HEADER*)(((CHAR8*)(PackageListHeader)) + PackageListHeader->PackageLength )) { 4124880c2c94d100238b310579fbd95313893a5353fjcarsey for (PackageHeader = (EFI_HII_PACKAGE_HEADER*)(((CHAR8*)(PackageListHeader))+sizeof(EFI_HII_PACKAGE_LIST_HEADER)) 4134880c2c94d100238b310579fbd95313893a5353fjcarsey ; PackageHeader != NULL && ((CHAR8*)PackageHeader) < (((CHAR8*)MainBuffer)+MainBufferSize) && PackageHeader->Type != EFI_HII_PACKAGE_END 4144880c2c94d100238b310579fbd95313893a5353fjcarsey ; PackageHeader = (EFI_HII_PACKAGE_HEADER*)(((CHAR8*)(PackageHeader))+PackageHeader->Length)) { 4154880c2c94d100238b310579fbd95313893a5353fjcarsey if (PackageHeader->Type == EFI_HII_PACKAGE_DEVICE_PATH) { 4164880c2c94d100238b310579fbd95313893a5353fjcarsey HiiHandle = NULL; 4174880c2c94d100238b310579fbd95313893a5353fjcarsey Status = FindHiiHandleViaDevPath((EFI_DEVICE_PATH_PROTOCOL*)(((CHAR8*)PackageHeader) + sizeof(EFI_HII_PACKAGE_HEADER)), &HiiHandle, HiiDatabase); 4184880c2c94d100238b310579fbd95313893a5353fjcarsey if (EFI_ERROR(Status)) { 4194880c2c94d100238b310579fbd95313893a5353fjcarsey // 4204880c2c94d100238b310579fbd95313893a5353fjcarsey // print out an error. 4214880c2c94d100238b310579fbd95313893a5353fjcarsey // 422863986b3c8e67736d361b68e293d01e6f92f825cRuiyu Ni TempDevPathString = ConvertDevicePathToText((EFI_DEVICE_PATH_PROTOCOL*)(((CHAR8*)PackageHeader) + sizeof(EFI_HII_PACKAGE_HEADER)), TRUE, TRUE); 4234880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 4244880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 4254880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 4264880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 4274880c2c94d100238b310579fbd95313893a5353fjcarsey STRING_TOKEN(STR_DRVCFG_IN_FILE_NF), 4284880c2c94d100238b310579fbd95313893a5353fjcarsey gShellDriver1HiiHandle, 4294880c2c94d100238b310579fbd95313893a5353fjcarsey TempDevPathString); 4304880c2c94d100238b310579fbd95313893a5353fjcarsey SHELL_FREE_NON_NULL(TempDevPathString); 4314880c2c94d100238b310579fbd95313893a5353fjcarsey } else { 4324880c2c94d100238b310579fbd95313893a5353fjcarsey Status = HiiDatabase->UpdatePackageList(HiiDatabase, HiiHandle, PackageListHeader); 4334880c2c94d100238b310579fbd95313893a5353fjcarsey if (EFI_ERROR(Status)) { 4344880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 4354880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 4364880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 4374880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 438bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah STRING_TOKEN(STR_GEN_UEFI_FUNC_WARN), 4394880c2c94d100238b310579fbd95313893a5353fjcarsey gShellDriver1HiiHandle, 440bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah L"drvcfg", 4414880c2c94d100238b310579fbd95313893a5353fjcarsey L"HiiDatabase->UpdatePackageList", 4424880c2c94d100238b310579fbd95313893a5353fjcarsey Status); 4434880c2c94d100238b310579fbd95313893a5353fjcarsey return (SHELL_DEVICE_ERROR); 4444880c2c94d100238b310579fbd95313893a5353fjcarsey } else { 4454880c2c94d100238b310579fbd95313893a5353fjcarsey DevPath = (EFI_DEVICE_PATH_PROTOCOL*)(((CHAR8*)PackageHeader) + sizeof(EFI_HII_PACKAGE_HEADER)); 4464880c2c94d100238b310579fbd95313893a5353fjcarsey gBS->LocateDevicePath(&gEfiHiiConfigAccessProtocolGuid, &DevPath, &Handle); 4474880c2c94d100238b310579fbd95313893a5353fjcarsey HandleIndex = ConvertHandleToHandleIndex(Handle); 4484880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 4494880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 4504880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 4514880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 4524880c2c94d100238b310579fbd95313893a5353fjcarsey STRING_TOKEN(STR_DRVCFG_DONE_HII), 4534880c2c94d100238b310579fbd95313893a5353fjcarsey gShellDriver1HiiHandle, 4544880c2c94d100238b310579fbd95313893a5353fjcarsey HandleIndex); 4554880c2c94d100238b310579fbd95313893a5353fjcarsey } 4564880c2c94d100238b310579fbd95313893a5353fjcarsey } 4574880c2c94d100238b310579fbd95313893a5353fjcarsey } 4584880c2c94d100238b310579fbd95313893a5353fjcarsey } 4594ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey } 4604ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey } 4614880c2c94d100238b310579fbd95313893a5353fjcarsey 4624880c2c94d100238b310579fbd95313893a5353fjcarsey SHELL_FREE_NON_NULL(MainBuffer); 4634880c2c94d100238b310579fbd95313893a5353fjcarsey 4644880c2c94d100238b310579fbd95313893a5353fjcarsey 4654880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 4664880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 4674880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 4684880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 4694880c2c94d100238b310579fbd95313893a5353fjcarsey STRING_TOKEN(STR_DRVCFG_COMP), 4704880c2c94d100238b310579fbd95313893a5353fjcarsey gShellDriver1HiiHandle); 4714ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey return (SHELL_SUCCESS); 4724ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey} 4734ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 4746a5aa4d6dc8240128ebc667919cc8f5d68541f45jcarsey/** 4756a5aa4d6dc8240128ebc667919cc8f5d68541f45jcarsey Present a requested action to the user. 4766a5aa4d6dc8240128ebc667919cc8f5d68541f45jcarsey 4776a5aa4d6dc8240128ebc667919cc8f5d68541f45jcarsey @param[in] DriverImageHandle The handle for the driver to configure. 4786a5aa4d6dc8240128ebc667919cc8f5d68541f45jcarsey @param[in] ControllerHandle The handle of the device being managed by the Driver specified. 4796a5aa4d6dc8240128ebc667919cc8f5d68541f45jcarsey @param[in] ChildHandle The handle of a child device of the specified device. 4806a5aa4d6dc8240128ebc667919cc8f5d68541f45jcarsey @param[in] ActionRequired The required HII action. 4816a5aa4d6dc8240128ebc667919cc8f5d68541f45jcarsey 4826a5aa4d6dc8240128ebc667919cc8f5d68541f45jcarsey @retval SHELL_INVALID_PARAMETER A parameter has a invalid value. 4836a5aa4d6dc8240128ebc667919cc8f5d68541f45jcarsey**/ 4844880c2c94d100238b310579fbd95313893a5353fjcarseyEFI_STATUS 4854880c2c94d100238b310579fbd95313893a5353fjcarseyShellCmdDriverConfigurationProcessActionRequired ( 4864880c2c94d100238b310579fbd95313893a5353fjcarsey EFI_HANDLE DriverImageHandle, 4874880c2c94d100238b310579fbd95313893a5353fjcarsey EFI_HANDLE ControllerHandle, 4884880c2c94d100238b310579fbd95313893a5353fjcarsey EFI_HANDLE ChildHandle, 4894880c2c94d100238b310579fbd95313893a5353fjcarsey EFI_DRIVER_CONFIGURATION_ACTION_REQUIRED ActionRequired 4904880c2c94d100238b310579fbd95313893a5353fjcarsey ) 4914880c2c94d100238b310579fbd95313893a5353fjcarsey{ 4924880c2c94d100238b310579fbd95313893a5353fjcarsey EFI_HANDLE ConnectControllerContextOverride[2]; 4934880c2c94d100238b310579fbd95313893a5353fjcarsey 4944880c2c94d100238b310579fbd95313893a5353fjcarsey switch (ActionRequired) { 4954880c2c94d100238b310579fbd95313893a5353fjcarsey case EfiDriverConfigurationActionNone: 4964880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_DRVCFG_NONE), gShellDriver1HiiHandle); 4974880c2c94d100238b310579fbd95313893a5353fjcarsey break; 4984880c2c94d100238b310579fbd95313893a5353fjcarsey 4994880c2c94d100238b310579fbd95313893a5353fjcarsey case EfiDriverConfigurationActionStopController: 5004880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_DRVCFG_STOP), gShellDriver1HiiHandle); 5014880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_DRVCFG_ENTER_S), gShellDriver1HiiHandle, L"stop controller"); 5024880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPromptForResponse(ShellPromptResponseTypeEnterContinue, NULL, NULL); 5034880c2c94d100238b310579fbd95313893a5353fjcarsey 5044880c2c94d100238b310579fbd95313893a5353fjcarsey gBS->DisconnectController (ControllerHandle, DriverImageHandle, ChildHandle); 5054880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_DRVCFG_CTLR_S), gShellDriver1HiiHandle, L"stopped"); 5064880c2c94d100238b310579fbd95313893a5353fjcarsey break; 5074880c2c94d100238b310579fbd95313893a5353fjcarsey 5084880c2c94d100238b310579fbd95313893a5353fjcarsey case EfiDriverConfigurationActionRestartController: 5094880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_DRVCFG_RESTART_S), gShellDriver1HiiHandle, L"controller"); 5104880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_DRVCFG_ENTER_S), gShellDriver1HiiHandle, L"restart controller"); 5114880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPromptForResponse(ShellPromptResponseTypeEnterContinue, NULL, NULL); 5124880c2c94d100238b310579fbd95313893a5353fjcarsey 5134880c2c94d100238b310579fbd95313893a5353fjcarsey gBS->DisconnectController (ControllerHandle, DriverImageHandle, ChildHandle); 5144880c2c94d100238b310579fbd95313893a5353fjcarsey ConnectControllerContextOverride[0] = DriverImageHandle; 5154880c2c94d100238b310579fbd95313893a5353fjcarsey ConnectControllerContextOverride[1] = NULL; 5164880c2c94d100238b310579fbd95313893a5353fjcarsey gBS->ConnectController (ControllerHandle, ConnectControllerContextOverride, NULL, TRUE); 5174880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_DRVCFG_CTLR_S), gShellDriver1HiiHandle, L"restarted"); 5184880c2c94d100238b310579fbd95313893a5353fjcarsey break; 5194880c2c94d100238b310579fbd95313893a5353fjcarsey 5204880c2c94d100238b310579fbd95313893a5353fjcarsey case EfiDriverConfigurationActionRestartPlatform: 5214880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_DRVCFG_RESTART_S), gShellDriver1HiiHandle, L"platform"); 5224880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_DRVCFG_ENTER_S), gShellDriver1HiiHandle, L"restart platform"); 5234880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPromptForResponse(ShellPromptResponseTypeEnterContinue, NULL, NULL); 5244880c2c94d100238b310579fbd95313893a5353fjcarsey 5254880c2c94d100238b310579fbd95313893a5353fjcarsey gRT->ResetSystem (EfiResetCold, EFI_SUCCESS, 0, NULL); 5264880c2c94d100238b310579fbd95313893a5353fjcarsey break; 5274880c2c94d100238b310579fbd95313893a5353fjcarsey 5284880c2c94d100238b310579fbd95313893a5353fjcarsey default: 5294880c2c94d100238b310579fbd95313893a5353fjcarsey return (EFI_INVALID_PARAMETER); 5304880c2c94d100238b310579fbd95313893a5353fjcarsey } 5314880c2c94d100238b310579fbd95313893a5353fjcarsey 5324880c2c94d100238b310579fbd95313893a5353fjcarsey return EFI_SUCCESS; 5334880c2c94d100238b310579fbd95313893a5353fjcarsey} 5344880c2c94d100238b310579fbd95313893a5353fjcarsey 5356a5aa4d6dc8240128ebc667919cc8f5d68541f45jcarsey/** 5366a5aa4d6dc8240128ebc667919cc8f5d68541f45jcarsey Do the configuration in an environment without HII. 5376a5aa4d6dc8240128ebc667919cc8f5d68541f45jcarsey 5386a5aa4d6dc8240128ebc667919cc8f5d68541f45jcarsey @param[in] Language The language code. 5396a5aa4d6dc8240128ebc667919cc8f5d68541f45jcarsey @param[in] ForceDefaults TRUE to force defaults, FALSE otherwise. 5406a5aa4d6dc8240128ebc667919cc8f5d68541f45jcarsey @param[in] DefaultType If ForceDefaults is TRUE, specifies the default type. 5416a5aa4d6dc8240128ebc667919cc8f5d68541f45jcarsey @param[in] AllChildren TRUE to configure all children, FALSE otherwise. 5426a5aa4d6dc8240128ebc667919cc8f5d68541f45jcarsey @param[in] ValidateOptions TRUE to validate existing options, FALSE otherwise. 5436a5aa4d6dc8240128ebc667919cc8f5d68541f45jcarsey @param[in] SetOptions TRUE to set options, FALSE otherwise. 5446a5aa4d6dc8240128ebc667919cc8f5d68541f45jcarsey @param[in] DriverImageHandle The handle for the driver to configure. 5456a5aa4d6dc8240128ebc667919cc8f5d68541f45jcarsey @param[in] DeviceHandle The handle of the device being managed by the Driver specified. 5466a5aa4d6dc8240128ebc667919cc8f5d68541f45jcarsey @param[in] ChildHandle The handle of a child device of the specified device. 5476a5aa4d6dc8240128ebc667919cc8f5d68541f45jcarsey 5486a5aa4d6dc8240128ebc667919cc8f5d68541f45jcarsey @retval SHELL_NOT_FOUND A specified handle could not be found. 5496a5aa4d6dc8240128ebc667919cc8f5d68541f45jcarsey @retval SHELL_INVALID_PARAMETER A parameter has a invalid value. 5506a5aa4d6dc8240128ebc667919cc8f5d68541f45jcarsey**/ 5514880c2c94d100238b310579fbd95313893a5353fjcarseySHELL_STATUS 5524880c2c94d100238b310579fbd95313893a5353fjcarseyPreHiiDrvCfg ( 5534880c2c94d100238b310579fbd95313893a5353fjcarsey IN CONST CHAR8 *Language, 5544880c2c94d100238b310579fbd95313893a5353fjcarsey IN BOOLEAN ForceDefaults, 5554880c2c94d100238b310579fbd95313893a5353fjcarsey IN UINT32 DefaultType, 5564880c2c94d100238b310579fbd95313893a5353fjcarsey IN BOOLEAN AllChildren, 5574880c2c94d100238b310579fbd95313893a5353fjcarsey IN BOOLEAN ValidateOptions, 5584880c2c94d100238b310579fbd95313893a5353fjcarsey IN BOOLEAN SetOptions, 5594880c2c94d100238b310579fbd95313893a5353fjcarsey IN EFI_HANDLE DriverImageHandle, 5604880c2c94d100238b310579fbd95313893a5353fjcarsey IN EFI_HANDLE DeviceHandle, 5614880c2c94d100238b310579fbd95313893a5353fjcarsey IN EFI_HANDLE ChildHandle 5624880c2c94d100238b310579fbd95313893a5353fjcarsey ) 5634880c2c94d100238b310579fbd95313893a5353fjcarsey{ 5644880c2c94d100238b310579fbd95313893a5353fjcarsey EFI_STATUS Status; 5654880c2c94d100238b310579fbd95313893a5353fjcarsey SHELL_STATUS ShellStatus; 5664880c2c94d100238b310579fbd95313893a5353fjcarsey UINTN OuterLoopCounter; 5674880c2c94d100238b310579fbd95313893a5353fjcarsey CHAR8 *BestLanguage; 5684880c2c94d100238b310579fbd95313893a5353fjcarsey UINTN DriverImageHandleCount; 5694880c2c94d100238b310579fbd95313893a5353fjcarsey EFI_HANDLE *DriverImageHandleBuffer; 5704880c2c94d100238b310579fbd95313893a5353fjcarsey UINTN HandleCount; 5714880c2c94d100238b310579fbd95313893a5353fjcarsey EFI_HANDLE *HandleBuffer; 5724880c2c94d100238b310579fbd95313893a5353fjcarsey UINTN *HandleType; 5734880c2c94d100238b310579fbd95313893a5353fjcarsey UINTN LoopCounter; 5744880c2c94d100238b310579fbd95313893a5353fjcarsey UINTN ChildIndex; 5754880c2c94d100238b310579fbd95313893a5353fjcarsey UINTN ChildHandleCount; 5764880c2c94d100238b310579fbd95313893a5353fjcarsey EFI_HANDLE *ChildHandleBuffer; 5774880c2c94d100238b310579fbd95313893a5353fjcarsey UINTN *ChildHandleType; 5784880c2c94d100238b310579fbd95313893a5353fjcarsey EFI_DRIVER_CONFIGURATION_ACTION_REQUIRED ActionRequired; 5794880c2c94d100238b310579fbd95313893a5353fjcarsey EFI_DRIVER_CONFIGURATION_PROTOCOL *DriverConfiguration; 5804880c2c94d100238b310579fbd95313893a5353fjcarsey BOOLEAN Iso639Language; 5814880c2c94d100238b310579fbd95313893a5353fjcarsey UINTN HandleIndex1; 5824880c2c94d100238b310579fbd95313893a5353fjcarsey UINTN HandleIndex2; 5834880c2c94d100238b310579fbd95313893a5353fjcarsey UINTN HandleIndex3; 5844880c2c94d100238b310579fbd95313893a5353fjcarsey 5854880c2c94d100238b310579fbd95313893a5353fjcarsey ShellStatus = SHELL_SUCCESS; 5864880c2c94d100238b310579fbd95313893a5353fjcarsey 5874880c2c94d100238b310579fbd95313893a5353fjcarsey if (ChildHandle == NULL && AllChildren) { 5884880c2c94d100238b310579fbd95313893a5353fjcarsey SetOptions = FALSE; 5894880c2c94d100238b310579fbd95313893a5353fjcarsey } 5904880c2c94d100238b310579fbd95313893a5353fjcarsey 5914880c2c94d100238b310579fbd95313893a5353fjcarsey if (ForceDefaults) { 5924880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 5934880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 5944880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 5954880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 5964880c2c94d100238b310579fbd95313893a5353fjcarsey STRING_TOKEN (STR_DRVCFG_FORCE_D), 5974880c2c94d100238b310579fbd95313893a5353fjcarsey gShellDriver1HiiHandle, 5984880c2c94d100238b310579fbd95313893a5353fjcarsey DefaultType); 5994880c2c94d100238b310579fbd95313893a5353fjcarsey } else if (ValidateOptions) { 6004880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 6014880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 6024880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 6034880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 6044880c2c94d100238b310579fbd95313893a5353fjcarsey STRING_TOKEN (STR_DRVCFG_VALIDATE), 6054880c2c94d100238b310579fbd95313893a5353fjcarsey gShellDriver1HiiHandle); 6064880c2c94d100238b310579fbd95313893a5353fjcarsey } else if (SetOptions) { 6074880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 6084880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 6094880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 6104880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 6114880c2c94d100238b310579fbd95313893a5353fjcarsey STRING_TOKEN (STR_DRVCFG_SET), 6124880c2c94d100238b310579fbd95313893a5353fjcarsey gShellDriver1HiiHandle); 6134880c2c94d100238b310579fbd95313893a5353fjcarsey } 6144880c2c94d100238b310579fbd95313893a5353fjcarsey 6154880c2c94d100238b310579fbd95313893a5353fjcarsey if (DriverImageHandle == 0) { 6164880c2c94d100238b310579fbd95313893a5353fjcarsey DriverImageHandleBuffer = GetHandleListByProtocolList(CfgGuidList); 6174880c2c94d100238b310579fbd95313893a5353fjcarsey if (DriverImageHandleBuffer == NULL) { 6184880c2c94d100238b310579fbd95313893a5353fjcarsey ShellStatus = SHELL_NOT_FOUND; 6194880c2c94d100238b310579fbd95313893a5353fjcarsey goto Done; 6204880c2c94d100238b310579fbd95313893a5353fjcarsey } 6214880c2c94d100238b310579fbd95313893a5353fjcarsey for ( 6224880c2c94d100238b310579fbd95313893a5353fjcarsey HandleBuffer = DriverImageHandleBuffer, DriverImageHandleCount = 0 6234880c2c94d100238b310579fbd95313893a5353fjcarsey ; HandleBuffer != NULL && *HandleBuffer != NULL 6244880c2c94d100238b310579fbd95313893a5353fjcarsey ; HandleBuffer++,DriverImageHandleCount++); 6254880c2c94d100238b310579fbd95313893a5353fjcarsey } else { 6264880c2c94d100238b310579fbd95313893a5353fjcarsey DriverImageHandleCount = 1; 6274880c2c94d100238b310579fbd95313893a5353fjcarsey // 6284880c2c94d100238b310579fbd95313893a5353fjcarsey // Allocate buffer to hold the image handle so as to 6294880c2c94d100238b310579fbd95313893a5353fjcarsey // keep consistent with the above clause 6304880c2c94d100238b310579fbd95313893a5353fjcarsey // 6314880c2c94d100238b310579fbd95313893a5353fjcarsey DriverImageHandleBuffer = AllocatePool (sizeof (EFI_HANDLE)); 6324880c2c94d100238b310579fbd95313893a5353fjcarsey ASSERT (DriverImageHandleBuffer); 6334880c2c94d100238b310579fbd95313893a5353fjcarsey DriverImageHandleBuffer[0] = DriverImageHandle; 6344880c2c94d100238b310579fbd95313893a5353fjcarsey } 6354880c2c94d100238b310579fbd95313893a5353fjcarsey 6364880c2c94d100238b310579fbd95313893a5353fjcarsey for (OuterLoopCounter = 0; OuterLoopCounter < DriverImageHandleCount; OuterLoopCounter++) { 6374880c2c94d100238b310579fbd95313893a5353fjcarsey Iso639Language = FALSE; 6384880c2c94d100238b310579fbd95313893a5353fjcarsey Status = gBS->OpenProtocol ( 6394880c2c94d100238b310579fbd95313893a5353fjcarsey DriverImageHandleBuffer[OuterLoopCounter], 6404880c2c94d100238b310579fbd95313893a5353fjcarsey &gEfiDriverConfiguration2ProtocolGuid, 6414880c2c94d100238b310579fbd95313893a5353fjcarsey (VOID **) &DriverConfiguration, 6424880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 6434880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 6444880c2c94d100238b310579fbd95313893a5353fjcarsey EFI_OPEN_PROTOCOL_GET_PROTOCOL 6454880c2c94d100238b310579fbd95313893a5353fjcarsey ); 6464880c2c94d100238b310579fbd95313893a5353fjcarsey if (EFI_ERROR (Status)) { 6474880c2c94d100238b310579fbd95313893a5353fjcarsey Iso639Language = TRUE; 6484880c2c94d100238b310579fbd95313893a5353fjcarsey Status = gBS->OpenProtocol ( 6494880c2c94d100238b310579fbd95313893a5353fjcarsey DriverImageHandleBuffer[OuterLoopCounter], 6504880c2c94d100238b310579fbd95313893a5353fjcarsey &gEfiDriverConfigurationProtocolGuid, 6514880c2c94d100238b310579fbd95313893a5353fjcarsey (VOID **) &DriverConfiguration, 6524880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 6534880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 6544880c2c94d100238b310579fbd95313893a5353fjcarsey EFI_OPEN_PROTOCOL_GET_PROTOCOL 6554880c2c94d100238b310579fbd95313893a5353fjcarsey ); 6564880c2c94d100238b310579fbd95313893a5353fjcarsey } 6574880c2c94d100238b310579fbd95313893a5353fjcarsey if (EFI_ERROR (Status)) { 6584880c2c94d100238b310579fbd95313893a5353fjcarsey// ShellPrintHiiEx( 6594880c2c94d100238b310579fbd95313893a5353fjcarsey// -1, 6604880c2c94d100238b310579fbd95313893a5353fjcarsey// -1, 6614880c2c94d100238b310579fbd95313893a5353fjcarsey// NULL, 6624880c2c94d100238b310579fbd95313893a5353fjcarsey// STRING_TOKEN (STR_DRVCFG_NOT_SUPPORT), 6634880c2c94d100238b310579fbd95313893a5353fjcarsey// gShellDriver1HiiHandle, 6644880c2c94d100238b310579fbd95313893a5353fjcarsey// ConvertHandleToHandleIndex (DriverImageHandleBuffer[OuterLoopCounter]) 6654880c2c94d100238b310579fbd95313893a5353fjcarsey// ); 6664880c2c94d100238b310579fbd95313893a5353fjcarsey ShellStatus = SHELL_UNSUPPORTED; 6674880c2c94d100238b310579fbd95313893a5353fjcarsey continue; 6684880c2c94d100238b310579fbd95313893a5353fjcarsey } 6694880c2c94d100238b310579fbd95313893a5353fjcarsey 6704880c2c94d100238b310579fbd95313893a5353fjcarsey BestLanguage = GetBestLanguage ( 6714880c2c94d100238b310579fbd95313893a5353fjcarsey DriverConfiguration->SupportedLanguages, 6724880c2c94d100238b310579fbd95313893a5353fjcarsey Iso639Language, 6734880c2c94d100238b310579fbd95313893a5353fjcarsey Language!=NULL?Language:"", 6744880c2c94d100238b310579fbd95313893a5353fjcarsey DriverConfiguration->SupportedLanguages, 6754880c2c94d100238b310579fbd95313893a5353fjcarsey NULL 6764880c2c94d100238b310579fbd95313893a5353fjcarsey ); 6774880c2c94d100238b310579fbd95313893a5353fjcarsey if (BestLanguage == NULL) { 6784880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 6794880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 6804880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 6814880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 682bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah STRING_TOKEN (STR_GEN_NO_VALUE), 6834880c2c94d100238b310579fbd95313893a5353fjcarsey gShellDriver1HiiHandle, 684bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah L"drvcfg", 6854880c2c94d100238b310579fbd95313893a5353fjcarsey L"-l" 6864880c2c94d100238b310579fbd95313893a5353fjcarsey ); 6874880c2c94d100238b310579fbd95313893a5353fjcarsey ShellStatus = SHELL_INVALID_PARAMETER; 6884880c2c94d100238b310579fbd95313893a5353fjcarsey continue; 6894880c2c94d100238b310579fbd95313893a5353fjcarsey } 6904880c2c94d100238b310579fbd95313893a5353fjcarsey 6914880c2c94d100238b310579fbd95313893a5353fjcarsey Status = ParseHandleDatabaseByRelationshipWithType ( 6924880c2c94d100238b310579fbd95313893a5353fjcarsey DriverImageHandleBuffer[OuterLoopCounter], 6934880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 6944880c2c94d100238b310579fbd95313893a5353fjcarsey &HandleCount, 6954880c2c94d100238b310579fbd95313893a5353fjcarsey &HandleBuffer, 6964880c2c94d100238b310579fbd95313893a5353fjcarsey &HandleType 6974880c2c94d100238b310579fbd95313893a5353fjcarsey ); 6984880c2c94d100238b310579fbd95313893a5353fjcarsey if (EFI_ERROR (Status)) { 6994880c2c94d100238b310579fbd95313893a5353fjcarsey continue; 7004880c2c94d100238b310579fbd95313893a5353fjcarsey } 7014880c2c94d100238b310579fbd95313893a5353fjcarsey 7024880c2c94d100238b310579fbd95313893a5353fjcarsey if (SetOptions && DeviceHandle == NULL) { 7034880c2c94d100238b310579fbd95313893a5353fjcarsey 7044880c2c94d100238b310579fbd95313893a5353fjcarsey gST->ConOut->ClearScreen (gST->ConOut); 7054880c2c94d100238b310579fbd95313893a5353fjcarsey Status = DriverConfiguration->SetOptions ( 7064880c2c94d100238b310579fbd95313893a5353fjcarsey DriverConfiguration, 7074880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 7084880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 7094880c2c94d100238b310579fbd95313893a5353fjcarsey BestLanguage, 7104880c2c94d100238b310579fbd95313893a5353fjcarsey &ActionRequired 7114880c2c94d100238b310579fbd95313893a5353fjcarsey ); 7124880c2c94d100238b310579fbd95313893a5353fjcarsey gST->ConOut->ClearScreen (gST->ConOut); 7134880c2c94d100238b310579fbd95313893a5353fjcarsey 7144880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 7154880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 7164880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 7174880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 7184880c2c94d100238b310579fbd95313893a5353fjcarsey STRING_TOKEN (STR_DRVCFG_ALL_LANG), 7194880c2c94d100238b310579fbd95313893a5353fjcarsey gShellDriver1HiiHandle, 7204880c2c94d100238b310579fbd95313893a5353fjcarsey ConvertHandleToHandleIndex (DriverImageHandleBuffer[OuterLoopCounter]), 7214880c2c94d100238b310579fbd95313893a5353fjcarsey DriverConfiguration->SupportedLanguages 7224880c2c94d100238b310579fbd95313893a5353fjcarsey ); 7234880c2c94d100238b310579fbd95313893a5353fjcarsey if (!EFI_ERROR (Status)) { 7244880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 7254880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 7264880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 7274880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 7284880c2c94d100238b310579fbd95313893a5353fjcarsey STRING_TOKEN (STR_DRVCFG_OPTIONS_SET), 7294880c2c94d100238b310579fbd95313893a5353fjcarsey gShellDriver1HiiHandle); 7304880c2c94d100238b310579fbd95313893a5353fjcarsey for (LoopCounter = 0; LoopCounter < HandleCount; LoopCounter++) { 7314880c2c94d100238b310579fbd95313893a5353fjcarsey if ((HandleType[LoopCounter] & HR_CONTROLLER_HANDLE) == HR_CONTROLLER_HANDLE) { 7324880c2c94d100238b310579fbd95313893a5353fjcarsey ShellCmdDriverConfigurationProcessActionRequired ( 7334880c2c94d100238b310579fbd95313893a5353fjcarsey DriverImageHandleBuffer[OuterLoopCounter], 7344880c2c94d100238b310579fbd95313893a5353fjcarsey HandleBuffer[LoopCounter], 7354880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 7364880c2c94d100238b310579fbd95313893a5353fjcarsey ActionRequired 7374880c2c94d100238b310579fbd95313893a5353fjcarsey ); 7384880c2c94d100238b310579fbd95313893a5353fjcarsey } 7394880c2c94d100238b310579fbd95313893a5353fjcarsey } 7404880c2c94d100238b310579fbd95313893a5353fjcarsey } else { 7414880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 7424880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 7434880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 7444880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 7454880c2c94d100238b310579fbd95313893a5353fjcarsey STRING_TOKEN (STR_DRVCFG_NOT_SET), 7464880c2c94d100238b310579fbd95313893a5353fjcarsey gShellDriver1HiiHandle, 7474880c2c94d100238b310579fbd95313893a5353fjcarsey Status); 7484880c2c94d100238b310579fbd95313893a5353fjcarsey } 7494880c2c94d100238b310579fbd95313893a5353fjcarsey continue; 7504880c2c94d100238b310579fbd95313893a5353fjcarsey } 7514880c2c94d100238b310579fbd95313893a5353fjcarsey 7524880c2c94d100238b310579fbd95313893a5353fjcarsey for (LoopCounter = 0; LoopCounter < HandleCount; LoopCounter++) { 7534880c2c94d100238b310579fbd95313893a5353fjcarsey if ((HandleType[LoopCounter] & HR_CONTROLLER_HANDLE) != HR_CONTROLLER_HANDLE) { 7544880c2c94d100238b310579fbd95313893a5353fjcarsey continue; 7554880c2c94d100238b310579fbd95313893a5353fjcarsey } 7564880c2c94d100238b310579fbd95313893a5353fjcarsey if (DeviceHandle != NULL && DeviceHandle != HandleBuffer[LoopCounter]) { 7574880c2c94d100238b310579fbd95313893a5353fjcarsey continue; 7584880c2c94d100238b310579fbd95313893a5353fjcarsey } 7594880c2c94d100238b310579fbd95313893a5353fjcarsey if (ChildHandle == NULL) { 7604880c2c94d100238b310579fbd95313893a5353fjcarsey HandleIndex1 = ConvertHandleToHandleIndex (DriverImageHandleBuffer[OuterLoopCounter]); 7614880c2c94d100238b310579fbd95313893a5353fjcarsey HandleIndex2 = ConvertHandleToHandleIndex (HandleBuffer[LoopCounter]); 7624880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 7634880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 7644880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 7654880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 7664880c2c94d100238b310579fbd95313893a5353fjcarsey STRING_TOKEN (STR_DRVCFG_CTRL_LANG), 7674880c2c94d100238b310579fbd95313893a5353fjcarsey gShellDriver1HiiHandle, 7684880c2c94d100238b310579fbd95313893a5353fjcarsey HandleIndex1, 7694880c2c94d100238b310579fbd95313893a5353fjcarsey HandleIndex2, 7704880c2c94d100238b310579fbd95313893a5353fjcarsey DriverConfiguration->SupportedLanguages 7714880c2c94d100238b310579fbd95313893a5353fjcarsey ); 7724880c2c94d100238b310579fbd95313893a5353fjcarsey 7734880c2c94d100238b310579fbd95313893a5353fjcarsey if (ForceDefaults) { 7744880c2c94d100238b310579fbd95313893a5353fjcarsey Status = DriverConfiguration->ForceDefaults ( 7754880c2c94d100238b310579fbd95313893a5353fjcarsey DriverConfiguration, 7764880c2c94d100238b310579fbd95313893a5353fjcarsey HandleBuffer[LoopCounter], 7774880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 7784880c2c94d100238b310579fbd95313893a5353fjcarsey DefaultType, 7794880c2c94d100238b310579fbd95313893a5353fjcarsey &ActionRequired 7804880c2c94d100238b310579fbd95313893a5353fjcarsey ); 7814880c2c94d100238b310579fbd95313893a5353fjcarsey 7824880c2c94d100238b310579fbd95313893a5353fjcarsey if (!EFI_ERROR (Status)) { 7834880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 7844880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 7854880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 7864880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 7874880c2c94d100238b310579fbd95313893a5353fjcarsey STRING_TOKEN (STR_DRVCFG_DEF_FORCED), 7884880c2c94d100238b310579fbd95313893a5353fjcarsey gShellDriver1HiiHandle); 7894880c2c94d100238b310579fbd95313893a5353fjcarsey ShellCmdDriverConfigurationProcessActionRequired ( 7904880c2c94d100238b310579fbd95313893a5353fjcarsey DriverImageHandleBuffer[OuterLoopCounter], 7914880c2c94d100238b310579fbd95313893a5353fjcarsey HandleBuffer[LoopCounter], 7924880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 7934880c2c94d100238b310579fbd95313893a5353fjcarsey ActionRequired 7944880c2c94d100238b310579fbd95313893a5353fjcarsey ); 7954880c2c94d100238b310579fbd95313893a5353fjcarsey } else { 7964880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 7974880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 7984880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 7994880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 8004880c2c94d100238b310579fbd95313893a5353fjcarsey STRING_TOKEN (STR_DRVCFG_FORCE_FAILED), 8014880c2c94d100238b310579fbd95313893a5353fjcarsey gShellDriver1HiiHandle, 8024880c2c94d100238b310579fbd95313893a5353fjcarsey Status); 8034880c2c94d100238b310579fbd95313893a5353fjcarsey ShellStatus = SHELL_DEVICE_ERROR; 8044880c2c94d100238b310579fbd95313893a5353fjcarsey } 8054880c2c94d100238b310579fbd95313893a5353fjcarsey } else if (ValidateOptions) { 8064880c2c94d100238b310579fbd95313893a5353fjcarsey Status = DriverConfiguration->OptionsValid ( 8074880c2c94d100238b310579fbd95313893a5353fjcarsey DriverConfiguration, 8084880c2c94d100238b310579fbd95313893a5353fjcarsey HandleBuffer[LoopCounter], 8094880c2c94d100238b310579fbd95313893a5353fjcarsey NULL 8104880c2c94d100238b310579fbd95313893a5353fjcarsey ); 8114880c2c94d100238b310579fbd95313893a5353fjcarsey 8124880c2c94d100238b310579fbd95313893a5353fjcarsey if (!EFI_ERROR (Status)) { 8134880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 8144880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 8154880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 8164880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 8174880c2c94d100238b310579fbd95313893a5353fjcarsey STRING_TOKEN (STR_DRVCFG_OPTIONS_VALID), 8184880c2c94d100238b310579fbd95313893a5353fjcarsey gShellDriver1HiiHandle); 8194880c2c94d100238b310579fbd95313893a5353fjcarsey } else { 8204880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 8214880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 8224880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 8234880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 8244880c2c94d100238b310579fbd95313893a5353fjcarsey STRING_TOKEN (STR_DRVCFG_OPTIONS_INV), 8254880c2c94d100238b310579fbd95313893a5353fjcarsey gShellDriver1HiiHandle, 8264880c2c94d100238b310579fbd95313893a5353fjcarsey Status); 8274880c2c94d100238b310579fbd95313893a5353fjcarsey ShellStatus = SHELL_DEVICE_ERROR; 8284880c2c94d100238b310579fbd95313893a5353fjcarsey } 8294880c2c94d100238b310579fbd95313893a5353fjcarsey } else if (SetOptions) { 8304880c2c94d100238b310579fbd95313893a5353fjcarsey gST->ConOut->ClearScreen (gST->ConOut); 8314880c2c94d100238b310579fbd95313893a5353fjcarsey Status = DriverConfiguration->SetOptions ( 8324880c2c94d100238b310579fbd95313893a5353fjcarsey DriverConfiguration, 8334880c2c94d100238b310579fbd95313893a5353fjcarsey HandleBuffer[LoopCounter], 8344880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 8354880c2c94d100238b310579fbd95313893a5353fjcarsey BestLanguage, 8364880c2c94d100238b310579fbd95313893a5353fjcarsey &ActionRequired 8374880c2c94d100238b310579fbd95313893a5353fjcarsey ); 8384880c2c94d100238b310579fbd95313893a5353fjcarsey gST->ConOut->ClearScreen (gST->ConOut); 8394880c2c94d100238b310579fbd95313893a5353fjcarsey HandleIndex1 = ConvertHandleToHandleIndex (DriverImageHandleBuffer[OuterLoopCounter]); 8404880c2c94d100238b310579fbd95313893a5353fjcarsey HandleIndex2 = ConvertHandleToHandleIndex (HandleBuffer[LoopCounter]); 8414880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 8424880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 8434880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 8444880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 8454880c2c94d100238b310579fbd95313893a5353fjcarsey STRING_TOKEN (STR_DRVCFG_CTRL_LANG), 8464880c2c94d100238b310579fbd95313893a5353fjcarsey gShellDriver1HiiHandle, 8474880c2c94d100238b310579fbd95313893a5353fjcarsey HandleIndex1, 8484880c2c94d100238b310579fbd95313893a5353fjcarsey HandleIndex2, 8494880c2c94d100238b310579fbd95313893a5353fjcarsey DriverConfiguration->SupportedLanguages 8504880c2c94d100238b310579fbd95313893a5353fjcarsey ); 8514880c2c94d100238b310579fbd95313893a5353fjcarsey if (!EFI_ERROR (Status)) { 8524880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 8534880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 8544880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 8554880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 8564880c2c94d100238b310579fbd95313893a5353fjcarsey STRING_TOKEN (STR_DRVCFG_OPTIONS_SET), 8574880c2c94d100238b310579fbd95313893a5353fjcarsey gShellDriver1HiiHandle); 8584880c2c94d100238b310579fbd95313893a5353fjcarsey 8594880c2c94d100238b310579fbd95313893a5353fjcarsey ShellCmdDriverConfigurationProcessActionRequired ( 8604880c2c94d100238b310579fbd95313893a5353fjcarsey DriverImageHandleBuffer[OuterLoopCounter], 8614880c2c94d100238b310579fbd95313893a5353fjcarsey HandleBuffer[LoopCounter], 8624880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 8634880c2c94d100238b310579fbd95313893a5353fjcarsey ActionRequired 8644880c2c94d100238b310579fbd95313893a5353fjcarsey ); 8654880c2c94d100238b310579fbd95313893a5353fjcarsey 8664880c2c94d100238b310579fbd95313893a5353fjcarsey } else { 8674880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 8684880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 8694880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 8704880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 8714880c2c94d100238b310579fbd95313893a5353fjcarsey STRING_TOKEN (STR_DRVCFG_NOT_SET), 8724880c2c94d100238b310579fbd95313893a5353fjcarsey gShellDriver1HiiHandle, 8734880c2c94d100238b310579fbd95313893a5353fjcarsey Status); 8744880c2c94d100238b310579fbd95313893a5353fjcarsey ShellStatus = SHELL_DEVICE_ERROR; 8754880c2c94d100238b310579fbd95313893a5353fjcarsey } 8764880c2c94d100238b310579fbd95313893a5353fjcarsey } else { 8774880c2c94d100238b310579fbd95313893a5353fjcarsey Print (L"\n"); 8784880c2c94d100238b310579fbd95313893a5353fjcarsey } 8794880c2c94d100238b310579fbd95313893a5353fjcarsey } 8804880c2c94d100238b310579fbd95313893a5353fjcarsey 8814880c2c94d100238b310579fbd95313893a5353fjcarsey if (ChildHandle == NULL && !AllChildren) { 8824880c2c94d100238b310579fbd95313893a5353fjcarsey continue; 8834880c2c94d100238b310579fbd95313893a5353fjcarsey } 8844880c2c94d100238b310579fbd95313893a5353fjcarsey 8854880c2c94d100238b310579fbd95313893a5353fjcarsey Status = ParseHandleDatabaseByRelationshipWithType ( 8864880c2c94d100238b310579fbd95313893a5353fjcarsey DriverImageHandleBuffer[OuterLoopCounter], 8874880c2c94d100238b310579fbd95313893a5353fjcarsey HandleBuffer[LoopCounter], 8884880c2c94d100238b310579fbd95313893a5353fjcarsey &ChildHandleCount, 8894880c2c94d100238b310579fbd95313893a5353fjcarsey &ChildHandleBuffer, 8904880c2c94d100238b310579fbd95313893a5353fjcarsey &ChildHandleType 8914880c2c94d100238b310579fbd95313893a5353fjcarsey ); 8924880c2c94d100238b310579fbd95313893a5353fjcarsey if (EFI_ERROR (Status)) { 8934880c2c94d100238b310579fbd95313893a5353fjcarsey continue; 8944880c2c94d100238b310579fbd95313893a5353fjcarsey } 8954880c2c94d100238b310579fbd95313893a5353fjcarsey 8964880c2c94d100238b310579fbd95313893a5353fjcarsey for (ChildIndex = 0; ChildIndex < ChildHandleCount; ChildIndex++) { 8974880c2c94d100238b310579fbd95313893a5353fjcarsey 8984880c2c94d100238b310579fbd95313893a5353fjcarsey if ((ChildHandleType[ChildIndex] & HR_CHILD_HANDLE) != HR_CHILD_HANDLE) { 8994880c2c94d100238b310579fbd95313893a5353fjcarsey continue; 9004880c2c94d100238b310579fbd95313893a5353fjcarsey } 9014880c2c94d100238b310579fbd95313893a5353fjcarsey 9024880c2c94d100238b310579fbd95313893a5353fjcarsey if (ChildHandle != NULL && ChildHandle != ChildHandleBuffer[ChildIndex]) { 9034880c2c94d100238b310579fbd95313893a5353fjcarsey continue; 9044880c2c94d100238b310579fbd95313893a5353fjcarsey } 9054880c2c94d100238b310579fbd95313893a5353fjcarsey 9064880c2c94d100238b310579fbd95313893a5353fjcarsey HandleIndex1 = ConvertHandleToHandleIndex (DriverImageHandleBuffer[OuterLoopCounter]); 9074880c2c94d100238b310579fbd95313893a5353fjcarsey HandleIndex2 = ConvertHandleToHandleIndex (HandleBuffer[LoopCounter]); 9084880c2c94d100238b310579fbd95313893a5353fjcarsey HandleIndex3 = ConvertHandleToHandleIndex (ChildHandleBuffer[ChildIndex]); 9094880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 9104880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 9114880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 9124880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 9134880c2c94d100238b310579fbd95313893a5353fjcarsey STRING_TOKEN (STR_DRVCFG_CHILD_LANG), 9144880c2c94d100238b310579fbd95313893a5353fjcarsey gShellDriver1HiiHandle, 9154880c2c94d100238b310579fbd95313893a5353fjcarsey HandleIndex1, 9164880c2c94d100238b310579fbd95313893a5353fjcarsey HandleIndex2, 9174880c2c94d100238b310579fbd95313893a5353fjcarsey HandleIndex3, 9184880c2c94d100238b310579fbd95313893a5353fjcarsey DriverConfiguration->SupportedLanguages); 9194880c2c94d100238b310579fbd95313893a5353fjcarsey 9204880c2c94d100238b310579fbd95313893a5353fjcarsey if (ForceDefaults) { 9214880c2c94d100238b310579fbd95313893a5353fjcarsey Status = DriverConfiguration->ForceDefaults ( 9224880c2c94d100238b310579fbd95313893a5353fjcarsey DriverConfiguration, 9234880c2c94d100238b310579fbd95313893a5353fjcarsey HandleBuffer[LoopCounter], 9244880c2c94d100238b310579fbd95313893a5353fjcarsey ChildHandleBuffer[ChildIndex], 9254880c2c94d100238b310579fbd95313893a5353fjcarsey DefaultType, 9264880c2c94d100238b310579fbd95313893a5353fjcarsey &ActionRequired 9274880c2c94d100238b310579fbd95313893a5353fjcarsey ); 9284880c2c94d100238b310579fbd95313893a5353fjcarsey 9294880c2c94d100238b310579fbd95313893a5353fjcarsey if (!EFI_ERROR (Status)) { 9304880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 9314880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 9324880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 9334880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 9344880c2c94d100238b310579fbd95313893a5353fjcarsey STRING_TOKEN (STR_DRVCFG_DEF_FORCED), 9354880c2c94d100238b310579fbd95313893a5353fjcarsey gShellDriver1HiiHandle); 9364880c2c94d100238b310579fbd95313893a5353fjcarsey 9374880c2c94d100238b310579fbd95313893a5353fjcarsey ShellCmdDriverConfigurationProcessActionRequired ( 9384880c2c94d100238b310579fbd95313893a5353fjcarsey DriverImageHandleBuffer[OuterLoopCounter], 9394880c2c94d100238b310579fbd95313893a5353fjcarsey HandleBuffer[LoopCounter], 9404880c2c94d100238b310579fbd95313893a5353fjcarsey ChildHandleBuffer[ChildIndex], 9414880c2c94d100238b310579fbd95313893a5353fjcarsey ActionRequired 9424880c2c94d100238b310579fbd95313893a5353fjcarsey ); 9434880c2c94d100238b310579fbd95313893a5353fjcarsey 9444880c2c94d100238b310579fbd95313893a5353fjcarsey } else { 9454880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 9464880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 9474880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 9484880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 9494880c2c94d100238b310579fbd95313893a5353fjcarsey STRING_TOKEN (STR_DRVCFG_FORCE_FAILED), 9504880c2c94d100238b310579fbd95313893a5353fjcarsey gShellDriver1HiiHandle, 9514880c2c94d100238b310579fbd95313893a5353fjcarsey Status); 9524880c2c94d100238b310579fbd95313893a5353fjcarsey ShellStatus = SHELL_DEVICE_ERROR; 9534880c2c94d100238b310579fbd95313893a5353fjcarsey } 9544880c2c94d100238b310579fbd95313893a5353fjcarsey } else if (ValidateOptions) { 9554880c2c94d100238b310579fbd95313893a5353fjcarsey Status = DriverConfiguration->OptionsValid ( 9564880c2c94d100238b310579fbd95313893a5353fjcarsey DriverConfiguration, 9574880c2c94d100238b310579fbd95313893a5353fjcarsey HandleBuffer[LoopCounter], 9584880c2c94d100238b310579fbd95313893a5353fjcarsey ChildHandleBuffer[ChildIndex] 9594880c2c94d100238b310579fbd95313893a5353fjcarsey ); 9604880c2c94d100238b310579fbd95313893a5353fjcarsey 9614880c2c94d100238b310579fbd95313893a5353fjcarsey if (!EFI_ERROR (Status)) { 9624880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 9634880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 9644880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 9654880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 9664880c2c94d100238b310579fbd95313893a5353fjcarsey STRING_TOKEN (STR_DRVCFG_OPTIONS_VALID), 9674880c2c94d100238b310579fbd95313893a5353fjcarsey gShellDriver1HiiHandle); 9684880c2c94d100238b310579fbd95313893a5353fjcarsey } else { 9694880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 9704880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 9714880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 9724880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 9734880c2c94d100238b310579fbd95313893a5353fjcarsey STRING_TOKEN (STR_DRVCFG_OPTIONS_INV), 9744880c2c94d100238b310579fbd95313893a5353fjcarsey gShellDriver1HiiHandle, 9754880c2c94d100238b310579fbd95313893a5353fjcarsey Status); 9764880c2c94d100238b310579fbd95313893a5353fjcarsey ShellStatus = SHELL_DEVICE_ERROR; 9774880c2c94d100238b310579fbd95313893a5353fjcarsey } 9784880c2c94d100238b310579fbd95313893a5353fjcarsey } else if (SetOptions) { 9794880c2c94d100238b310579fbd95313893a5353fjcarsey gST->ConOut->ClearScreen (gST->ConOut); 9804880c2c94d100238b310579fbd95313893a5353fjcarsey Status = DriverConfiguration->SetOptions ( 9814880c2c94d100238b310579fbd95313893a5353fjcarsey DriverConfiguration, 9824880c2c94d100238b310579fbd95313893a5353fjcarsey HandleBuffer[LoopCounter], 9834880c2c94d100238b310579fbd95313893a5353fjcarsey ChildHandleBuffer[ChildIndex], 9844880c2c94d100238b310579fbd95313893a5353fjcarsey BestLanguage, 9854880c2c94d100238b310579fbd95313893a5353fjcarsey &ActionRequired 9864880c2c94d100238b310579fbd95313893a5353fjcarsey ); 9874880c2c94d100238b310579fbd95313893a5353fjcarsey gST->ConOut->ClearScreen (gST->ConOut); 9884880c2c94d100238b310579fbd95313893a5353fjcarsey HandleIndex1 = ConvertHandleToHandleIndex (DriverImageHandleBuffer[OuterLoopCounter]); 9894880c2c94d100238b310579fbd95313893a5353fjcarsey HandleIndex2 = ConvertHandleToHandleIndex (HandleBuffer[LoopCounter]); 9904880c2c94d100238b310579fbd95313893a5353fjcarsey HandleIndex3 = ConvertHandleToHandleIndex (ChildHandleBuffer[ChildIndex]); 9914880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 9924880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 9934880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 9944880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 9954880c2c94d100238b310579fbd95313893a5353fjcarsey STRING_TOKEN (STR_DRVCFG_CHILD_LANG), 9964880c2c94d100238b310579fbd95313893a5353fjcarsey gShellDriver1HiiHandle, 9974880c2c94d100238b310579fbd95313893a5353fjcarsey HandleIndex1, 9984880c2c94d100238b310579fbd95313893a5353fjcarsey HandleIndex2, 9994880c2c94d100238b310579fbd95313893a5353fjcarsey HandleIndex3, 10004880c2c94d100238b310579fbd95313893a5353fjcarsey DriverConfiguration->SupportedLanguages 10014880c2c94d100238b310579fbd95313893a5353fjcarsey ); 10024880c2c94d100238b310579fbd95313893a5353fjcarsey if (!EFI_ERROR (Status)) { 10034880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 10044880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 10054880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 10064880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 10074880c2c94d100238b310579fbd95313893a5353fjcarsey STRING_TOKEN (STR_DRVCFG_OPTIONS_SET), 10084880c2c94d100238b310579fbd95313893a5353fjcarsey gShellDriver1HiiHandle); 10094880c2c94d100238b310579fbd95313893a5353fjcarsey 10104880c2c94d100238b310579fbd95313893a5353fjcarsey ShellCmdDriverConfigurationProcessActionRequired ( 10114880c2c94d100238b310579fbd95313893a5353fjcarsey DriverImageHandleBuffer[OuterLoopCounter], 10124880c2c94d100238b310579fbd95313893a5353fjcarsey HandleBuffer[LoopCounter], 10134880c2c94d100238b310579fbd95313893a5353fjcarsey ChildHandleBuffer[ChildIndex], 10144880c2c94d100238b310579fbd95313893a5353fjcarsey ActionRequired 10154880c2c94d100238b310579fbd95313893a5353fjcarsey ); 10164880c2c94d100238b310579fbd95313893a5353fjcarsey 10174880c2c94d100238b310579fbd95313893a5353fjcarsey } else { 10184880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 10194880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 10204880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 10214880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 10224880c2c94d100238b310579fbd95313893a5353fjcarsey STRING_TOKEN (STR_DRVCFG_NOT_SET), 10234880c2c94d100238b310579fbd95313893a5353fjcarsey gShellDriver1HiiHandle, 10244880c2c94d100238b310579fbd95313893a5353fjcarsey Status); 10254880c2c94d100238b310579fbd95313893a5353fjcarsey ShellStatus = SHELL_DEVICE_ERROR; 10264880c2c94d100238b310579fbd95313893a5353fjcarsey } 10274880c2c94d100238b310579fbd95313893a5353fjcarsey } else { 10284880c2c94d100238b310579fbd95313893a5353fjcarsey Print (L"\n"); 10294880c2c94d100238b310579fbd95313893a5353fjcarsey } 10304880c2c94d100238b310579fbd95313893a5353fjcarsey } 10314880c2c94d100238b310579fbd95313893a5353fjcarsey 10324880c2c94d100238b310579fbd95313893a5353fjcarsey FreePool (ChildHandleBuffer); 10334880c2c94d100238b310579fbd95313893a5353fjcarsey FreePool (ChildHandleType); 10344880c2c94d100238b310579fbd95313893a5353fjcarsey } 10354880c2c94d100238b310579fbd95313893a5353fjcarsey 10364880c2c94d100238b310579fbd95313893a5353fjcarsey FreePool (BestLanguage); 10374880c2c94d100238b310579fbd95313893a5353fjcarsey FreePool (HandleBuffer); 10384880c2c94d100238b310579fbd95313893a5353fjcarsey FreePool (HandleType); 10394880c2c94d100238b310579fbd95313893a5353fjcarsey } 10404880c2c94d100238b310579fbd95313893a5353fjcarsey 10414880c2c94d100238b310579fbd95313893a5353fjcarsey if (DriverImageHandle != NULL && DriverImageHandleCount != 0) { 10424880c2c94d100238b310579fbd95313893a5353fjcarsey FreePool (DriverImageHandleBuffer); 10434880c2c94d100238b310579fbd95313893a5353fjcarsey } 10444880c2c94d100238b310579fbd95313893a5353fjcarsey 10454880c2c94d100238b310579fbd95313893a5353fjcarseyDone: 10464880c2c94d100238b310579fbd95313893a5353fjcarsey return ShellStatus; 10474880c2c94d100238b310579fbd95313893a5353fjcarsey} 10484880c2c94d100238b310579fbd95313893a5353fjcarsey 10494ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey/** 10504ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey Function to print out configuration information on all configurable handles. 10514ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 10524ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey @param[in] ChildrenToo TRUE to tewst for children. 10534880c2c94d100238b310579fbd95313893a5353fjcarsey @param[in] Language ASCII string for language code. 10544880c2c94d100238b310579fbd95313893a5353fjcarsey @param[in] UseHii TRUE to check for Hii and DPC, FALSE for DCP only. 10554ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 10564ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey @retval SHELL_SUCCESS The operation was successful. 10574ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey**/ 10584ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarseySHELL_STATUS 10594ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarseyPrintConfigInfoOnAll( 10604880c2c94d100238b310579fbd95313893a5353fjcarsey IN CONST BOOLEAN ChildrenToo, 10614880c2c94d100238b310579fbd95313893a5353fjcarsey IN CONST CHAR8 *Language, 10624880c2c94d100238b310579fbd95313893a5353fjcarsey IN CONST BOOLEAN UseHii 10634ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey ) 10644ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey{ 10654ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey EFI_HANDLE *HandleList; 10664ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey EFI_HANDLE *CurrentHandle; 10674ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey BOOLEAN Found; 10684880c2c94d100238b310579fbd95313893a5353fjcarsey UINTN Index2; 10694880c2c94d100238b310579fbd95313893a5353fjcarsey 10704ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 10714ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey Found = FALSE; 10724ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey HandleList = NULL; 10734ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey CurrentHandle = NULL; 10744ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 10754880c2c94d100238b310579fbd95313893a5353fjcarsey if (UseHii) { 10764880c2c94d100238b310579fbd95313893a5353fjcarsey // 10774880c2c94d100238b310579fbd95313893a5353fjcarsey // HII method 10784880c2c94d100238b310579fbd95313893a5353fjcarsey // 10794880c2c94d100238b310579fbd95313893a5353fjcarsey HandleList = GetHandleListByProtocol(&gEfiHiiConfigAccessProtocolGuid); 10804880c2c94d100238b310579fbd95313893a5353fjcarsey for (CurrentHandle = HandleList ; CurrentHandle != NULL && *CurrentHandle != NULL; CurrentHandle++){ 10814880c2c94d100238b310579fbd95313893a5353fjcarsey Found = TRUE; 10824880c2c94d100238b310579fbd95313893a5353fjcarsey Index2 = *CurrentHandle == NULL ? 0 : ConvertHandleToHandleIndex(*CurrentHandle); 10834880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 10844880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 10854880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 10864880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 10874880c2c94d100238b310579fbd95313893a5353fjcarsey STRING_TOKEN (STR_DRVCFG_LINE_HII), 10884880c2c94d100238b310579fbd95313893a5353fjcarsey gShellDriver1HiiHandle, 10894880c2c94d100238b310579fbd95313893a5353fjcarsey Index2 10904880c2c94d100238b310579fbd95313893a5353fjcarsey ); 10914ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey } 10924880c2c94d100238b310579fbd95313893a5353fjcarsey SHELL_FREE_NON_NULL(HandleList); 10934ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey } 10944ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 10954880c2c94d100238b310579fbd95313893a5353fjcarsey if (PreHiiDrvCfg ( 10964880c2c94d100238b310579fbd95313893a5353fjcarsey Language, 10974880c2c94d100238b310579fbd95313893a5353fjcarsey FALSE, 10984880c2c94d100238b310579fbd95313893a5353fjcarsey 0, 10994880c2c94d100238b310579fbd95313893a5353fjcarsey ChildrenToo, 11004880c2c94d100238b310579fbd95313893a5353fjcarsey FALSE, 11014880c2c94d100238b310579fbd95313893a5353fjcarsey FALSE, 11024880c2c94d100238b310579fbd95313893a5353fjcarsey 0, 11034880c2c94d100238b310579fbd95313893a5353fjcarsey 0, 11044880c2c94d100238b310579fbd95313893a5353fjcarsey 0) == SHELL_SUCCESS) { 11054880c2c94d100238b310579fbd95313893a5353fjcarsey Found = TRUE; 11064ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey } 11074880c2c94d100238b310579fbd95313893a5353fjcarsey 11084ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey if (!Found) { 1109885f7fd0c767c2b39e6b60d20b575e7e95d4638dJaben Carsey ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_DRVCFG_NONE_FOUND), gShellDriver1HiiHandle); 11104ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey return (SHELL_SUCCESS); 11114ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey } 11124880c2c94d100238b310579fbd95313893a5353fjcarsey 11134880c2c94d100238b310579fbd95313893a5353fjcarsey return (SHELL_SUCCESS); 11144ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey} 11154ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 11164880c2c94d100238b310579fbd95313893a5353fjcarseySTATIC CONST SHELL_PARAM_ITEM ParamListHii[] = { 11174ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey {L"-s", TypeFlag}, 11184ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey {L"-l", TypeValue}, 11194ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey {L"-f", TypeValue}, 11204ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey {L"-o", TypeValue}, 11214ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey {L"-i", TypeValue}, 11224ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey {NULL, TypeMax} 11234ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey }; 11244880c2c94d100238b310579fbd95313893a5353fjcarseySTATIC CONST SHELL_PARAM_ITEM ParamListPreHii[] = { 11254880c2c94d100238b310579fbd95313893a5353fjcarsey {L"-c", TypeFlag}, 11264880c2c94d100238b310579fbd95313893a5353fjcarsey {L"-s", TypeFlag}, 11274880c2c94d100238b310579fbd95313893a5353fjcarsey {L"-v", TypeFlag}, 11284880c2c94d100238b310579fbd95313893a5353fjcarsey {L"-l", TypeValue}, 11294880c2c94d100238b310579fbd95313893a5353fjcarsey {L"-f", TypeValue}, 11304880c2c94d100238b310579fbd95313893a5353fjcarsey {NULL, TypeMax} 11314880c2c94d100238b310579fbd95313893a5353fjcarsey }; 11324ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 1133361a8267362f755cca29495afa79efa0e9fd9714jcarsey/** 1134361a8267362f755cca29495afa79efa0e9fd9714jcarsey Function for 'drvcfg' command. 1135361a8267362f755cca29495afa79efa0e9fd9714jcarsey 1136361a8267362f755cca29495afa79efa0e9fd9714jcarsey @param[in] ImageHandle Handle to the Image (NULL if Internal). 1137361a8267362f755cca29495afa79efa0e9fd9714jcarsey @param[in] SystemTable Pointer to the System Table (NULL if Internal). 1138361a8267362f755cca29495afa79efa0e9fd9714jcarsey**/ 11394ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarseySHELL_STATUS 11404ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarseyEFIAPI 11414ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarseyShellCommandRunDrvCfg ( 11424ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey IN EFI_HANDLE ImageHandle, 11434ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey IN EFI_SYSTEM_TABLE *SystemTable 11444ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey ) 11454ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey{ 11464ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey EFI_STATUS Status; 11474ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey LIST_ENTRY *Package; 11484ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey CHAR16 *ProblemParam; 11494ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey SHELL_STATUS ShellStatus; 11504ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey CHAR8 *Language; 11514ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey CONST CHAR16 *Lang; 11524880c2c94d100238b310579fbd95313893a5353fjcarsey CONST CHAR16 *HandleIndex1; 11534880c2c94d100238b310579fbd95313893a5353fjcarsey CONST CHAR16 *HandleIndex2; 11544880c2c94d100238b310579fbd95313893a5353fjcarsey CONST CHAR16 *HandleIndex3; 11554880c2c94d100238b310579fbd95313893a5353fjcarsey CONST CHAR16 *ForceTypeString; 11564880c2c94d100238b310579fbd95313893a5353fjcarsey BOOLEAN Force; 11574880c2c94d100238b310579fbd95313893a5353fjcarsey BOOLEAN Set; 11584880c2c94d100238b310579fbd95313893a5353fjcarsey BOOLEAN Validate; 11594880c2c94d100238b310579fbd95313893a5353fjcarsey BOOLEAN InFromFile; 11604880c2c94d100238b310579fbd95313893a5353fjcarsey BOOLEAN OutToFile; 11614880c2c94d100238b310579fbd95313893a5353fjcarsey BOOLEAN AllChildren; 11624880c2c94d100238b310579fbd95313893a5353fjcarsey BOOLEAN UseHii; 11634880c2c94d100238b310579fbd95313893a5353fjcarsey UINT32 ForceType; 11644880c2c94d100238b310579fbd95313893a5353fjcarsey UINT64 Intermediate; 11654880c2c94d100238b310579fbd95313893a5353fjcarsey EFI_HANDLE Handle1; 11664880c2c94d100238b310579fbd95313893a5353fjcarsey EFI_HANDLE Handle2; 11674880c2c94d100238b310579fbd95313893a5353fjcarsey EFI_HANDLE Handle3; 11684880c2c94d100238b310579fbd95313893a5353fjcarsey CONST CHAR16 *FileName; 11694ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 11704ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey ShellStatus = SHELL_SUCCESS; 11714ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey Status = EFI_SUCCESS; 11724ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey Language = NULL; 11734880c2c94d100238b310579fbd95313893a5353fjcarsey UseHii = TRUE; 117457a3e4f9b5805e5443c7c1b0814d76abe8bcfa11Qiu Shumin ProblemParam = NULL; 11754ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 11764ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey // 11774ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey // initialize the shell lib (we must be in non-auto-init...) 11784ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey // 11794ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey Status = ShellInitialize(); 11804ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey ASSERT_EFI_ERROR(Status); 11814ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 11824ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey Status = CommandInit(); 11834ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey ASSERT_EFI_ERROR(Status); 11844ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 11854ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey // 11864ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey // parse the command line 11874ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey // 11884880c2c94d100238b310579fbd95313893a5353fjcarsey Status = ShellCommandLineParse (ParamListHii, &Package, &ProblemParam, TRUE); 11894880c2c94d100238b310579fbd95313893a5353fjcarsey if (EFI_ERROR(Status) || ShellCommandLineGetCount(Package) > 2) { 11904880c2c94d100238b310579fbd95313893a5353fjcarsey UseHii = FALSE; 11914880c2c94d100238b310579fbd95313893a5353fjcarsey if (Package != NULL) { 11924880c2c94d100238b310579fbd95313893a5353fjcarsey ShellCommandLineFreeVarList (Package); 11934ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey } 11944880c2c94d100238b310579fbd95313893a5353fjcarsey SHELL_FREE_NON_NULL(ProblemParam); 11954880c2c94d100238b310579fbd95313893a5353fjcarsey Status = ShellCommandLineParse (ParamListPreHii, &Package, &ProblemParam, TRUE); 11964880c2c94d100238b310579fbd95313893a5353fjcarsey if (EFI_ERROR(Status)) { 11974880c2c94d100238b310579fbd95313893a5353fjcarsey if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) { 1198bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDriver1HiiHandle, L"drvcfg", ProblemParam); 11994880c2c94d100238b310579fbd95313893a5353fjcarsey FreePool(ProblemParam); 12004880c2c94d100238b310579fbd95313893a5353fjcarsey ShellStatus = SHELL_INVALID_PARAMETER; 12014880c2c94d100238b310579fbd95313893a5353fjcarsey goto Done; 12024880c2c94d100238b310579fbd95313893a5353fjcarsey } else { 12034880c2c94d100238b310579fbd95313893a5353fjcarsey ASSERT(FALSE); 12044880c2c94d100238b310579fbd95313893a5353fjcarsey } 12054880c2c94d100238b310579fbd95313893a5353fjcarsey } 12064880c2c94d100238b310579fbd95313893a5353fjcarsey } 12074880c2c94d100238b310579fbd95313893a5353fjcarsey if (ShellStatus == SHELL_SUCCESS) { 1208c6fc823413861c6bcafbb21bae9aab66b8ee5a24Dandan Bi if (ShellCommandLineGetCount(Package) > 4) { 1209c6fc823413861c6bcafbb21bae9aab66b8ee5a24Dandan Bi ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDriver1HiiHandle, L"drvcfg"); 1210c6fc823413861c6bcafbb21bae9aab66b8ee5a24Dandan Bi ShellStatus = SHELL_INVALID_PARAMETER; 1211c6fc823413861c6bcafbb21bae9aab66b8ee5a24Dandan Bi goto Done; 1212c6fc823413861c6bcafbb21bae9aab66b8ee5a24Dandan Bi } 12134ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey Lang = ShellCommandLineGetValue(Package, L"-l"); 12144ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey if (Lang != NULL) { 12154ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey Language = AllocateZeroPool(StrSize(Lang)); 12164ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey AsciiSPrint(Language, StrSize(Lang), "%S", Lang); 12174880c2c94d100238b310579fbd95313893a5353fjcarsey } else if (ShellCommandLineGetFlag(Package, L"-l")){ 1218bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDriver1HiiHandle, L"drvcfg", L"-l"); 12194880c2c94d100238b310579fbd95313893a5353fjcarsey ShellStatus = SHELL_INVALID_PARAMETER; 12204880c2c94d100238b310579fbd95313893a5353fjcarsey goto Done; 12214880c2c94d100238b310579fbd95313893a5353fjcarsey } 12224880c2c94d100238b310579fbd95313893a5353fjcarsey Set = ShellCommandLineGetFlag (Package, L"-s"); 12234880c2c94d100238b310579fbd95313893a5353fjcarsey Validate = ShellCommandLineGetFlag (Package, L"-v"); 12244880c2c94d100238b310579fbd95313893a5353fjcarsey InFromFile = ShellCommandLineGetFlag (Package, L"-i"); 12254880c2c94d100238b310579fbd95313893a5353fjcarsey OutToFile = ShellCommandLineGetFlag (Package, L"-o"); 12264880c2c94d100238b310579fbd95313893a5353fjcarsey AllChildren = ShellCommandLineGetFlag (Package, L"-c"); 12274880c2c94d100238b310579fbd95313893a5353fjcarsey Force = ShellCommandLineGetFlag (Package, L"-f"); 12284880c2c94d100238b310579fbd95313893a5353fjcarsey ForceTypeString = ShellCommandLineGetValue(Package, L"-f"); 12294880c2c94d100238b310579fbd95313893a5353fjcarsey 12304880c2c94d100238b310579fbd95313893a5353fjcarsey if (OutToFile) { 12314880c2c94d100238b310579fbd95313893a5353fjcarsey FileName = ShellCommandLineGetValue(Package, L"-o"); 12324880c2c94d100238b310579fbd95313893a5353fjcarsey } else if (InFromFile) { 12334880c2c94d100238b310579fbd95313893a5353fjcarsey FileName = ShellCommandLineGetValue(Package, L"-i"); 12344880c2c94d100238b310579fbd95313893a5353fjcarsey } else { 12354880c2c94d100238b310579fbd95313893a5353fjcarsey FileName = NULL; 12364880c2c94d100238b310579fbd95313893a5353fjcarsey } 12374880c2c94d100238b310579fbd95313893a5353fjcarsey 12384880c2c94d100238b310579fbd95313893a5353fjcarsey if (InFromFile && EFI_ERROR(ShellFileExists(FileName))) { 1239bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_FIND_FAIL), gShellDriver1HiiHandle, L"drvcfg", FileName); 12404880c2c94d100238b310579fbd95313893a5353fjcarsey ShellStatus = SHELL_INVALID_PARAMETER; 12414880c2c94d100238b310579fbd95313893a5353fjcarsey goto Done; 12424880c2c94d100238b310579fbd95313893a5353fjcarsey } 12434880c2c94d100238b310579fbd95313893a5353fjcarsey if (OutToFile && !EFI_ERROR(ShellFileExists(FileName))) { 1244bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_EXIST), gShellDriver1HiiHandle, L"drvcfg", FileName); 12454880c2c94d100238b310579fbd95313893a5353fjcarsey ShellStatus = SHELL_INVALID_PARAMETER; 12464880c2c94d100238b310579fbd95313893a5353fjcarsey goto Done; 12474880c2c94d100238b310579fbd95313893a5353fjcarsey } 12484880c2c94d100238b310579fbd95313893a5353fjcarsey if (Force && ForceTypeString == NULL) { 1249bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDriver1HiiHandle, L"drvcfg", L"-f"); 12504880c2c94d100238b310579fbd95313893a5353fjcarsey ShellStatus = SHELL_INVALID_PARAMETER; 12514880c2c94d100238b310579fbd95313893a5353fjcarsey goto Done; 12524880c2c94d100238b310579fbd95313893a5353fjcarsey } 12534880c2c94d100238b310579fbd95313893a5353fjcarsey if (Force) { 12544880c2c94d100238b310579fbd95313893a5353fjcarsey Status = ShellConvertStringToUint64(ForceTypeString, &Intermediate, FALSE, FALSE); 12554880c2c94d100238b310579fbd95313893a5353fjcarsey if (EFI_ERROR(Status)) { 1256bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM_VAL), gShellDriver1HiiHandle, L"drvcfg", ForceTypeString, L"-f"); 12574880c2c94d100238b310579fbd95313893a5353fjcarsey ShellStatus = SHELL_INVALID_PARAMETER; 12584880c2c94d100238b310579fbd95313893a5353fjcarsey goto Done; 12594880c2c94d100238b310579fbd95313893a5353fjcarsey } 12604880c2c94d100238b310579fbd95313893a5353fjcarsey ForceType = (UINT32)Intermediate; 12614880c2c94d100238b310579fbd95313893a5353fjcarsey } else { 12624880c2c94d100238b310579fbd95313893a5353fjcarsey ForceType = 0; 12634880c2c94d100238b310579fbd95313893a5353fjcarsey } 12644880c2c94d100238b310579fbd95313893a5353fjcarsey HandleIndex1 = ShellCommandLineGetRawValue(Package, 1); 12654880c2c94d100238b310579fbd95313893a5353fjcarsey Handle1 = NULL; 12664880c2c94d100238b310579fbd95313893a5353fjcarsey if (HandleIndex1 != NULL && !EFI_ERROR(ShellConvertStringToUint64(HandleIndex1, &Intermediate, TRUE, FALSE))) { 12674880c2c94d100238b310579fbd95313893a5353fjcarsey Handle1 = ConvertHandleIndexToHandle((UINTN)Intermediate); 12684880c2c94d100238b310579fbd95313893a5353fjcarsey if (Handle1 == NULL || (UINT64)(UINTN)Intermediate != Intermediate) { 1269bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"drvcfg", HandleIndex1); 12704880c2c94d100238b310579fbd95313893a5353fjcarsey ShellStatus = SHELL_INVALID_PARAMETER; 12714880c2c94d100238b310579fbd95313893a5353fjcarsey goto Done; 12724880c2c94d100238b310579fbd95313893a5353fjcarsey } 12734880c2c94d100238b310579fbd95313893a5353fjcarsey } 12744880c2c94d100238b310579fbd95313893a5353fjcarsey HandleIndex2 = ShellCommandLineGetRawValue(Package, 2); 12754880c2c94d100238b310579fbd95313893a5353fjcarsey Handle2 = NULL; 12764880c2c94d100238b310579fbd95313893a5353fjcarsey if (HandleIndex2 != NULL && !EFI_ERROR(ShellConvertStringToUint64(HandleIndex2, &Intermediate, TRUE, FALSE))) { 12774880c2c94d100238b310579fbd95313893a5353fjcarsey Handle2 = ConvertHandleIndexToHandle((UINTN)Intermediate); 12784880c2c94d100238b310579fbd95313893a5353fjcarsey if (Handle2 == NULL || (UINT64)(UINTN)Intermediate != Intermediate) { 1279bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"drvcfg", HandleIndex2); 12804880c2c94d100238b310579fbd95313893a5353fjcarsey ShellStatus = SHELL_INVALID_PARAMETER; 12814880c2c94d100238b310579fbd95313893a5353fjcarsey goto Done; 12824880c2c94d100238b310579fbd95313893a5353fjcarsey } 12834880c2c94d100238b310579fbd95313893a5353fjcarsey } 12844880c2c94d100238b310579fbd95313893a5353fjcarsey HandleIndex3 = ShellCommandLineGetRawValue(Package, 3); 12854880c2c94d100238b310579fbd95313893a5353fjcarsey Handle3 = NULL; 12864880c2c94d100238b310579fbd95313893a5353fjcarsey if (HandleIndex3 != NULL && !EFI_ERROR(ShellConvertStringToUint64(HandleIndex3, &Intermediate, TRUE, FALSE))) { 12874880c2c94d100238b310579fbd95313893a5353fjcarsey Handle3 = ConvertHandleIndexToHandle((UINTN)Intermediate); 12884880c2c94d100238b310579fbd95313893a5353fjcarsey if (Handle3 == NULL || (UINT64)(UINTN)Intermediate != Intermediate) { 1289bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"drvcfg", HandleIndex3); 12904880c2c94d100238b310579fbd95313893a5353fjcarsey ShellStatus = SHELL_INVALID_PARAMETER; 12914880c2c94d100238b310579fbd95313893a5353fjcarsey goto Done; 12924880c2c94d100238b310579fbd95313893a5353fjcarsey } 12934880c2c94d100238b310579fbd95313893a5353fjcarsey } 12944880c2c94d100238b310579fbd95313893a5353fjcarsey 12954880c2c94d100238b310579fbd95313893a5353fjcarsey if ((InFromFile || OutToFile) && (FileName == NULL)) { 12964880c2c94d100238b310579fbd95313893a5353fjcarsey if (FileName == NULL) { 1297bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDriver1HiiHandle, L"drvcfg", InFromFile?L"-i":L"-o"); 12984880c2c94d100238b310579fbd95313893a5353fjcarsey } else { 1299bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_HANDLE_REQ), gShellDriver1HiiHandle, L"drvcfg"); 13004880c2c94d100238b310579fbd95313893a5353fjcarsey } 13014880c2c94d100238b310579fbd95313893a5353fjcarsey ShellStatus = SHELL_INVALID_PARAMETER; 13024880c2c94d100238b310579fbd95313893a5353fjcarsey goto Done; 13034880c2c94d100238b310579fbd95313893a5353fjcarsey } 13044880c2c94d100238b310579fbd95313893a5353fjcarsey if (!UseHii && (InFromFile || OutToFile)) { 13054880c2c94d100238b310579fbd95313893a5353fjcarsey if (InFromFile) { 1306bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellDriver1HiiHandle, L"drvcfg", L"-i"); 13074880c2c94d100238b310579fbd95313893a5353fjcarsey ShellStatus = SHELL_INVALID_PARAMETER; 13084880c2c94d100238b310579fbd95313893a5353fjcarsey goto Done; 13094880c2c94d100238b310579fbd95313893a5353fjcarsey } 13104880c2c94d100238b310579fbd95313893a5353fjcarsey if (OutToFile) { 1311bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellDriver1HiiHandle, L"drvcfg", L"-o"); 13124880c2c94d100238b310579fbd95313893a5353fjcarsey ShellStatus = SHELL_INVALID_PARAMETER; 13134880c2c94d100238b310579fbd95313893a5353fjcarsey goto Done; 13144880c2c94d100238b310579fbd95313893a5353fjcarsey } 13154880c2c94d100238b310579fbd95313893a5353fjcarsey } 13164880c2c94d100238b310579fbd95313893a5353fjcarsey if (Validate && Force) { 1317bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CONFLICT), gShellDriver1HiiHandle, L"drvcfg", L"-v", L"-f"); 13184880c2c94d100238b310579fbd95313893a5353fjcarsey ShellStatus = SHELL_INVALID_PARAMETER; 13194880c2c94d100238b310579fbd95313893a5353fjcarsey goto Done; 13204880c2c94d100238b310579fbd95313893a5353fjcarsey } 13214880c2c94d100238b310579fbd95313893a5353fjcarsey if (Validate && Set) { 1322bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CONFLICT), gShellDriver1HiiHandle, L"drvcfg", L"-v", L"-s"); 13234880c2c94d100238b310579fbd95313893a5353fjcarsey ShellStatus = SHELL_INVALID_PARAMETER; 13244880c2c94d100238b310579fbd95313893a5353fjcarsey goto Done; 13254880c2c94d100238b310579fbd95313893a5353fjcarsey } 13264880c2c94d100238b310579fbd95313893a5353fjcarsey if (Set && Force) { 1327bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CONFLICT), gShellDriver1HiiHandle, L"drvcfg", L"-s", L"-f"); 13284880c2c94d100238b310579fbd95313893a5353fjcarsey ShellStatus = SHELL_INVALID_PARAMETER; 13294880c2c94d100238b310579fbd95313893a5353fjcarsey goto Done; 13304880c2c94d100238b310579fbd95313893a5353fjcarsey } 13314880c2c94d100238b310579fbd95313893a5353fjcarsey if (OutToFile && InFromFile) { 1332bc2807206bf0af2332691495d0ac2822d075a754Tapan Shah ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CONFLICT), gShellDriver1HiiHandle, L"drvcfg", L"-i", L"-o"); 13334880c2c94d100238b310579fbd95313893a5353fjcarsey ShellStatus = SHELL_INVALID_PARAMETER; 13344880c2c94d100238b310579fbd95313893a5353fjcarsey goto Done; 13354ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey } 13364ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey 13374ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey // 13384880c2c94d100238b310579fbd95313893a5353fjcarsey // We do HII first. 13394ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey // 13404880c2c94d100238b310579fbd95313893a5353fjcarsey if (UseHii) { 13414880c2c94d100238b310579fbd95313893a5353fjcarsey if (Handle1 != NULL && EFI_ERROR(gBS->OpenProtocol(Handle1, &gEfiHiiConfigAccessProtocolGuid, NULL, gImageHandle, NULL, EFI_OPEN_PROTOCOL_TEST_PROTOCOL))) { 13424ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey // 13434880c2c94d100238b310579fbd95313893a5353fjcarsey // no HII on this handle. 13444ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey // 13454880c2c94d100238b310579fbd95313893a5353fjcarsey ShellStatus = SHELL_UNSUPPORTED; 13464880c2c94d100238b310579fbd95313893a5353fjcarsey } else if (Validate) { 13474880c2c94d100238b310579fbd95313893a5353fjcarsey } else if (Force) { 13484880c2c94d100238b310579fbd95313893a5353fjcarsey } else if (Set) { 13494880c2c94d100238b310579fbd95313893a5353fjcarsey } else if (InFromFile) { 13504880c2c94d100238b310579fbd95313893a5353fjcarsey ShellStatus = ConfigFromFile(Handle1, FileName); 13514880c2c94d100238b310579fbd95313893a5353fjcarsey if (Handle1 != NULL && ShellStatus == SHELL_SUCCESS) { 13524880c2c94d100238b310579fbd95313893a5353fjcarsey goto Done; 13534880c2c94d100238b310579fbd95313893a5353fjcarsey } 13544880c2c94d100238b310579fbd95313893a5353fjcarsey } else if (OutToFile) { 13554880c2c94d100238b310579fbd95313893a5353fjcarsey ShellStatus = ConfigToFile(Handle1, FileName); 13564880c2c94d100238b310579fbd95313893a5353fjcarsey if (Handle1 != NULL && ShellStatus == SHELL_SUCCESS) { 13574880c2c94d100238b310579fbd95313893a5353fjcarsey goto Done; 13584880c2c94d100238b310579fbd95313893a5353fjcarsey } 13594880c2c94d100238b310579fbd95313893a5353fjcarsey } else if (HandleIndex1 == NULL) { 13604880c2c94d100238b310579fbd95313893a5353fjcarsey // 13614880c2c94d100238b310579fbd95313893a5353fjcarsey // display all that are configurable 13624880c2c94d100238b310579fbd95313893a5353fjcarsey // 13634880c2c94d100238b310579fbd95313893a5353fjcarsey ShellStatus = PrintConfigInfoOnAll(AllChildren, Language, UseHii); 13644880c2c94d100238b310579fbd95313893a5353fjcarsey goto Done; 13654880c2c94d100238b310579fbd95313893a5353fjcarsey } else { 13664880c2c94d100238b310579fbd95313893a5353fjcarsey if (!EFI_ERROR(gBS->OpenProtocol(Handle1, &gEfiHiiConfigAccessProtocolGuid, NULL, gImageHandle, NULL, EFI_OPEN_PROTOCOL_TEST_PROTOCOL))) { 13674880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 13684880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 13694880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 13704880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 13714880c2c94d100238b310579fbd95313893a5353fjcarsey STRING_TOKEN (STR_DRVCFG_LINE_HII), 13724880c2c94d100238b310579fbd95313893a5353fjcarsey gShellDriver1HiiHandle, 13734880c2c94d100238b310579fbd95313893a5353fjcarsey ConvertHandleToHandleIndex(Handle1) 13744880c2c94d100238b310579fbd95313893a5353fjcarsey ); 13754880c2c94d100238b310579fbd95313893a5353fjcarsey goto Done; 13764ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey } 13774ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey } 13784880c2c94d100238b310579fbd95313893a5353fjcarsey } 13794880c2c94d100238b310579fbd95313893a5353fjcarsey 13804880c2c94d100238b310579fbd95313893a5353fjcarsey // 13814880c2c94d100238b310579fbd95313893a5353fjcarsey // We allways need to do this one since it does both by default. 13824880c2c94d100238b310579fbd95313893a5353fjcarsey // 13834880c2c94d100238b310579fbd95313893a5353fjcarsey if (!InFromFile && !OutToFile) { 13844880c2c94d100238b310579fbd95313893a5353fjcarsey ShellStatus = PreHiiDrvCfg ( 13854880c2c94d100238b310579fbd95313893a5353fjcarsey Language, 13864880c2c94d100238b310579fbd95313893a5353fjcarsey Force, 13874880c2c94d100238b310579fbd95313893a5353fjcarsey ForceType, 13884880c2c94d100238b310579fbd95313893a5353fjcarsey AllChildren, 13894880c2c94d100238b310579fbd95313893a5353fjcarsey Validate, 13904880c2c94d100238b310579fbd95313893a5353fjcarsey Set, 13914880c2c94d100238b310579fbd95313893a5353fjcarsey Handle1, 13924880c2c94d100238b310579fbd95313893a5353fjcarsey Handle2, 13934880c2c94d100238b310579fbd95313893a5353fjcarsey Handle3); 13944880c2c94d100238b310579fbd95313893a5353fjcarsey } 13954880c2c94d100238b310579fbd95313893a5353fjcarsey 13964880c2c94d100238b310579fbd95313893a5353fjcarsey if (ShellStatus == SHELL_UNSUPPORTED) { 13974880c2c94d100238b310579fbd95313893a5353fjcarsey ShellPrintHiiEx( 13984880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 13994880c2c94d100238b310579fbd95313893a5353fjcarsey -1, 14004880c2c94d100238b310579fbd95313893a5353fjcarsey NULL, 14014880c2c94d100238b310579fbd95313893a5353fjcarsey STRING_TOKEN (STR_DRVCFG_NOT_SUPPORT), 14024880c2c94d100238b310579fbd95313893a5353fjcarsey gShellDriver1HiiHandle, 14034880c2c94d100238b310579fbd95313893a5353fjcarsey ConvertHandleToHandleIndex(Handle1) 14044880c2c94d100238b310579fbd95313893a5353fjcarsey ); 14054ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey } 14064ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey } 14074880c2c94d100238b310579fbd95313893a5353fjcarsey 14084880c2c94d100238b310579fbd95313893a5353fjcarseyDone: 14094ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey ShellCommandLineFreeVarList (Package); 14104ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey SHELL_FREE_NON_NULL(Language); 14114ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey return (ShellStatus); 14124ba49616416ad8ce57c61d0bb0a80c7b5dbf434bjcarsey} 1413