]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ShellPkg/Library/UefiShellDriver1CommandsLib/DrvCfg.c
ShellPkg: Clean up source files
[mirror_edk2.git] / ShellPkg / Library / UefiShellDriver1CommandsLib / DrvCfg.c
index bd5a825ad4c6916cccf948ad32b10633cc6e41c2..1bc2974797857877837218c840a8d13690cc16fb 100644 (file)
@@ -1,7 +1,8 @@
 /** @file\r
   Main file for DrvCfg shell Driver1 function.\r
 \r
-  Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>\r
+  (C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>\r
+  Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>\r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
   which accompanies this distribution.  The full text of the license may be found at\r
@@ -29,7 +30,6 @@ STATIC CONST EFI_GUID *CfgGuidList[] = {&gEfiDriverConfigurationProtocolGuid, &g
   @retval EFI_NOT_FOUND   There was no EFI_HII_HANDLE found for that deviec path.\r
 **/\r
 EFI_STATUS\r
-EFIAPI\r
 FindHiiHandleViaDevPath(\r
   IN CONST EFI_DEVICE_PATH_PROTOCOL *DevPath1,\r
   OUT EFI_HII_HANDLE                *HiiHandle,\r
@@ -56,20 +56,33 @@ FindHiiHandleViaDevPath(
   Status = HiiDb->ListPackageLists(HiiDb, EFI_HII_PACKAGE_DEVICE_PATH, NULL, &HandleBufferSize, HandleBuffer);\r
   if (Status == EFI_BUFFER_TOO_SMALL) {\r
     HandleBuffer = AllocateZeroPool(HandleBufferSize);\r
-    Status = HiiDb->ListPackageLists(HiiDb, EFI_HII_PACKAGE_DEVICE_PATH, NULL, &HandleBufferSize, HandleBuffer);\r
+    if (HandleBuffer == NULL) {\r
+      Status = EFI_OUT_OF_RESOURCES;\r
+    } else {\r
+      Status = HiiDb->ListPackageLists (HiiDb, EFI_HII_PACKAGE_DEVICE_PATH, NULL, &HandleBufferSize, HandleBuffer);\r
+    }\r
   }\r
   if (EFI_ERROR(Status)) {\r
     SHELL_FREE_NON_NULL(HandleBuffer);\r
     return (Status);\r
   }\r
 \r
+  if (HandleBuffer == NULL) {\r
+    return EFI_NOT_FOUND;\r
+  }\r
+\r
   for (LoopVariable = 0 ; LoopVariable < (HandleBufferSize/sizeof(HandleBuffer[0])) && *HiiHandle == NULL ; LoopVariable++) {\r
     MainBufferSize    = 0;\r
     MainBuffer        = NULL;\r
     Status = HiiDb->ExportPackageLists(HiiDb, HandleBuffer[LoopVariable], &MainBufferSize, MainBuffer);\r
     if (Status == EFI_BUFFER_TOO_SMALL) {\r
       MainBuffer = AllocateZeroPool(MainBufferSize);\r
-      Status = HiiDb->ExportPackageLists(HiiDb, HandleBuffer[LoopVariable], &MainBufferSize, MainBuffer);\r
+      if (MainBuffer != NULL) {\r
+        Status = HiiDb->ExportPackageLists (HiiDb, HandleBuffer[LoopVariable], &MainBufferSize, MainBuffer);\r
+      }\r
+    }\r
+    if (EFI_ERROR (Status)) {\r
+      continue;\r
     }\r
     //\r
     // Enumerate through the block of returned memory.\r
@@ -110,7 +123,6 @@ FindHiiHandleViaDevPath(
   @retval EFI_SUCCESS   The operation was successful.\r
 **/\r
 EFI_STATUS\r
-EFIAPI\r
 ConvertHandleToHiiHandle(\r
   IN CONST EFI_HANDLE           Handle,\r
   OUT EFI_HII_HANDLE            *HiiHandle,\r
@@ -145,7 +157,6 @@ ConvertHandleToHiiHandle(
   @param[in] FileName         The filename to rwite the info to.\r
 **/\r
 SHELL_STATUS\r
-EFIAPI\r
 ConfigToFile(\r
   IN CONST EFI_HANDLE     Handle,\r
   IN CONST CHAR16         *FileName\r
@@ -169,9 +180,10 @@ ConfigToFile(
       -1,\r
       -1,\r
       NULL,\r
-      STRING_TOKEN(STR_GEN_FILE_OPEN), \r
-      gShellDriver1HiiHandle, \r
-      FileName, \r
+      STRING_TOKEN(STR_GEN_FILE_OPEN_FAIL),\r
+      gShellDriver1HiiHandle,\r
+      L"drvcfg",\r
+      FileName,\r
       Status);\r
     return (SHELL_DEVICE_ERROR);\r
   }\r
@@ -187,29 +199,32 @@ ConfigToFile(
 \r
   if (EFI_ERROR(Status) || HiiDatabase == NULL) {\r
     ShellPrintHiiEx(\r
-      -1, \r
-      -1, \r
+      -1,\r
+      -1,\r
       NULL,\r
-      STRING_TOKEN(STR_GEN_PROTOCOL_NF), \r
-      gShellDriver1HiiHandle, \r
-      L"EfiHiiDatabaseProtocol", \r
+      STRING_TOKEN(STR_GEN_PROTOCOL_NF),\r
+      gShellDriver1HiiHandle,\r
+      L"drvcfg",\r
+      L"EfiHiiDatabaseProtocol",\r
       &gEfiHiiDatabaseProtocolGuid);\r
     ShellCloseFile(&FileHandle);\r
     return (SHELL_NOT_FOUND);\r
   }\r
 \r
+  HiiHandle = NULL;\r
   Status = ConvertHandleToHiiHandle(Handle, &HiiHandle, HiiDatabase);\r
   if (EFI_ERROR(Status)) {\r
     ShellPrintHiiEx(\r
-      -1, \r
-      -1, \r
-      NULL, \r
-      STRING_TOKEN(STR_GEN_HANDLE_NOT), \r
-      gShellDriver1HiiHandle, \r
-      ConvertHandleToHandleIndex(Handle), \r
+      -1,\r
+      -1,\r
+      NULL,\r
+      STRING_TOKEN(STR_GEN_HANDLE_NOT),\r
+      gShellDriver1HiiHandle,\r
+      L"drvcfg",\r
+      ConvertHandleToHandleIndex(Handle),\r
       L"Device");\r
     ShellCloseFile(&FileHandle);\r
-    return (SHELL_DEVICE_ERROR);   \r
+    return (SHELL_DEVICE_ERROR);\r
   }\r
 \r
   Status = HiiDatabase->ExportPackageLists(HiiDatabase, HiiHandle, &MainBufferSize, MainBuffer);\r
@@ -225,20 +240,20 @@ ConfigToFile(
 \r
   if (EFI_ERROR(Status)) {\r
     ShellPrintHiiEx(\r
-      -1, \r
+      -1,\r
       -1,\r
       NULL,\r
-      STRING_TOKEN(STR_FILE_WRITE_FAIL), \r
-      gShellDriver1HiiHandle, \r
-      FileName, \r
-      Status);\r
-    return (SHELL_DEVICE_ERROR);   \r
+      STRING_TOKEN(STR_FILE_WRITE_FAIL),\r
+      gShellDriver1HiiHandle,\r
+      L"drvcfg",\r
+      FileName);\r
+    return (SHELL_DEVICE_ERROR);\r
   }\r
   ShellPrintHiiEx(\r
-    -1, \r
+    -1,\r
     -1,\r
     NULL,\r
-    STRING_TOKEN(STR_DRVCFG_COMP), \r
+    STRING_TOKEN(STR_DRVCFG_COMP),\r
     gShellDriver1HiiHandle);\r
 \r
   return (SHELL_SUCCESS);\r
@@ -251,7 +266,6 @@ ConfigToFile(
   @param[in] FileName         The filename to read the info from.\r
 **/\r
 SHELL_STATUS\r
-EFIAPI\r
 ConfigFromFile(\r
   IN       EFI_HANDLE     Handle,\r
   IN CONST CHAR16         *FileName\r
@@ -281,9 +295,10 @@ ConfigFromFile(
       -1,\r
       -1,\r
       NULL,\r
-      STRING_TOKEN(STR_GEN_FILE_OPEN), \r
-      gShellDriver1HiiHandle, \r
-      FileName, \r
+      STRING_TOKEN(STR_GEN_FILE_OPEN_FAIL),\r
+      gShellDriver1HiiHandle,\r
+      L"drvcfg",\r
+      FileName,\r
       Status);\r
     return (SHELL_DEVICE_ERROR);\r
   }\r
@@ -299,12 +314,13 @@ ConfigFromFile(
 \r
   if (EFI_ERROR(Status) || HiiDatabase == NULL) {\r
     ShellPrintHiiEx(\r
-      -1, \r
-      -1, \r
+      -1,\r
+      -1,\r
       NULL,\r
-      STRING_TOKEN(STR_GEN_PROTOCOL_NF), \r
-      gShellDriver1HiiHandle, \r
-      L"EfiHiiDatabaseProtocol", \r
+      STRING_TOKEN(STR_GEN_PROTOCOL_NF),\r
+      gShellDriver1HiiHandle,\r
+      L"drvcfg",\r
+      L"EfiHiiDatabaseProtocol",\r
       &gEfiHiiDatabaseProtocolGuid);\r
     ShellCloseFile(&FileHandle);\r
     return (SHELL_NOT_FOUND);\r
@@ -314,40 +330,42 @@ ConfigFromFile(
   MainBufferSize = (UINTN)Temp;\r
   if (EFI_ERROR(Status)) {\r
     ShellPrintHiiEx(\r
-      -1, \r
-      -1, \r
-      NULL, \r
-      STRING_TOKEN(STR_FILE_READ_FAIL), \r
-      gShellDriver1HiiHandle, \r
-      FileName,\r
-      Status);\r
+      -1,\r
+      -1,\r
+      NULL,\r
+      STRING_TOKEN(STR_FILE_READ_FAIL),\r
+      gShellDriver1HiiHandle,\r
+      L"drvcfg",\r
+      FileName);\r
+\r
     ShellCloseFile(&FileHandle);\r
-    return (SHELL_DEVICE_ERROR);   \r
+    return (SHELL_DEVICE_ERROR);\r
   }\r
-  MainBuffer = AllocateZeroPool((UINTN)MainBufferSize);  \r
+  MainBuffer = AllocateZeroPool((UINTN)MainBufferSize);\r
   if (EFI_ERROR(Status)) {\r
     ShellPrintHiiEx(\r
-      -1, \r
-      -1, \r
-      NULL, \r
-      STRING_TOKEN(STR_GEN_OUT_MEM), \r
-      gShellDriver1HiiHandle);\r
+      -1,\r
+      -1,\r
+      NULL,\r
+      STRING_TOKEN(STR_GEN_OUT_MEM),\r
+      gShellDriver1HiiHandle, L"drvcfg");\r
     ShellCloseFile(&FileHandle);\r
-    return (SHELL_DEVICE_ERROR);   \r
+    return (SHELL_DEVICE_ERROR);\r
   }\r
   Status = ShellReadFile(FileHandle, &MainBufferSize, MainBuffer);\r
   if (EFI_ERROR(Status)) {\r
     ShellPrintHiiEx(\r
-      -1, \r
-      -1, \r
-      NULL, \r
-      STRING_TOKEN(STR_FILE_READ_FAIL), \r
-      gShellDriver1HiiHandle, \r
-      FileName,\r
-      Status);\r
+      -1,\r
+      -1,\r
+      NULL,\r
+      STRING_TOKEN(STR_FILE_READ_FAIL),\r
+      gShellDriver1HiiHandle,\r
+      L"drvcfg",\r
+      FileName);\r
+\r
     ShellCloseFile(&FileHandle);\r
     SHELL_FREE_NON_NULL(MainBuffer);\r
-    return (SHELL_DEVICE_ERROR);   \r
+    return (SHELL_DEVICE_ERROR);\r
   }\r
 \r
   ShellCloseFile(&FileHandle);\r
@@ -360,27 +378,28 @@ ConfigFromFile(
     Status = ConvertHandleToHiiHandle(Handle, &HiiHandle, HiiDatabase);\r
     if (EFI_ERROR(Status)) {\r
       ShellPrintHiiEx(\r
-        -1, \r
-        -1, \r
-        NULL, \r
-        STRING_TOKEN(STR_GEN_HANDLE_NOT), \r
-        gShellDriver1HiiHandle, \r
-        ConvertHandleToHandleIndex(Handle), \r
+        -1,\r
+        -1,\r
+        NULL,\r
+        STRING_TOKEN(STR_GEN_HANDLE_NOT),\r
+        gShellDriver1HiiHandle, L"drvcfg",\r
+        ConvertHandleToHandleIndex(Handle),\r
         L"Device");\r
       ShellCloseFile(&FileHandle);\r
-      return (SHELL_DEVICE_ERROR);   \r
+      return (SHELL_DEVICE_ERROR);\r
     }\r
     Status = HiiDatabase->UpdatePackageList(HiiDatabase, HiiHandle, MainBuffer);\r
     if (EFI_ERROR(Status)) {\r
       ShellPrintHiiEx(\r
-        -1, \r
-        -1, \r
-        NULL, \r
-        STRING_TOKEN(STR_GEN_UEFI_FUNC_ERROR), \r
-        gShellDriver1HiiHandle, \r
-        L"HiiDatabase->UpdatePackageList", \r
+        -1,\r
+        -1,\r
+        NULL,\r
+        STRING_TOKEN(STR_GEN_UEFI_FUNC_WARN),\r
+        gShellDriver1HiiHandle,\r
+        L"drvcfg",\r
+        L"HiiDatabase->UpdatePackageList",\r
         Status);\r
-      return (SHELL_DEVICE_ERROR);   \r
+      return (SHELL_DEVICE_ERROR);\r
     }\r
   } else {\r
     //\r
@@ -400,25 +419,26 @@ ConfigFromFile(
                 //\r
                 // print out an error.\r
                 //\r
-                TempDevPathString = gDevPathToText->ConvertDevicePathToText((EFI_DEVICE_PATH_PROTOCOL*)(((CHAR8*)PackageHeader) + sizeof(EFI_HII_PACKAGE_HEADER)), TRUE, TRUE);\r
+                TempDevPathString = ConvertDevicePathToText((EFI_DEVICE_PATH_PROTOCOL*)(((CHAR8*)PackageHeader) + sizeof(EFI_HII_PACKAGE_HEADER)), TRUE, TRUE);\r
                 ShellPrintHiiEx(\r
-                  -1, \r
-                  -1, \r
-                  NULL, \r
-                  STRING_TOKEN(STR_DRVCFG_IN_FILE_NF), \r
-                  gShellDriver1HiiHandle, \r
+                  -1,\r
+                  -1,\r
+                  NULL,\r
+                  STRING_TOKEN(STR_DRVCFG_IN_FILE_NF),\r
+                  gShellDriver1HiiHandle,\r
                   TempDevPathString);\r
                 SHELL_FREE_NON_NULL(TempDevPathString);\r
              } else {\r
                 Status = HiiDatabase->UpdatePackageList(HiiDatabase, HiiHandle, PackageListHeader);\r
                 if (EFI_ERROR(Status)) {\r
                   ShellPrintHiiEx(\r
-                    -1, \r
-                    -1, \r
-                    NULL, \r
-                    STRING_TOKEN(STR_GEN_UEFI_FUNC_ERROR), \r
-                    gShellDriver1HiiHandle, \r
-                    L"HiiDatabase->UpdatePackageList", \r
+                    -1,\r
+                    -1,\r
+                    NULL,\r
+                    STRING_TOKEN(STR_GEN_UEFI_FUNC_WARN),\r
+                    gShellDriver1HiiHandle,\r
+                    L"drvcfg",\r
+                    L"HiiDatabase->UpdatePackageList",\r
                     Status);\r
                   return (SHELL_DEVICE_ERROR);\r
                 } else {\r
@@ -426,14 +446,14 @@ ConfigFromFile(
                   gBS->LocateDevicePath(&gEfiHiiConfigAccessProtocolGuid, &DevPath, &Handle);\r
                   HandleIndex = ConvertHandleToHandleIndex(Handle);\r
                   ShellPrintHiiEx(\r
-                    -1, \r
-                    -1, \r
-                    NULL, \r
-                    STRING_TOKEN(STR_DRVCFG_DONE_HII), \r
-                    gShellDriver1HiiHandle, \r
+                    -1,\r
+                    -1,\r
+                    NULL,\r
+                    STRING_TOKEN(STR_DRVCFG_DONE_HII),\r
+                    gShellDriver1HiiHandle,\r
                     HandleIndex);\r
                 }\r
-              }              \r
+              }\r
             }\r
         }\r
     }\r
@@ -443,16 +463,25 @@ ConfigFromFile(
 \r
 \r
   ShellPrintHiiEx(\r
-    -1, \r
+    -1,\r
     -1,\r
     NULL,\r
-    STRING_TOKEN(STR_DRVCFG_COMP), \r
+    STRING_TOKEN(STR_DRVCFG_COMP),\r
     gShellDriver1HiiHandle);\r
   return (SHELL_SUCCESS);\r
 }\r
 \r
+/**\r
+  Present a requested action to the user.\r
+\r
+  @param[in] DriverImageHandle  The handle for the driver to configure.\r
+  @param[in] ControllerHandle   The handle of the device being managed by the Driver specified.\r
+  @param[in] ChildHandle        The handle of a child device of the specified device.\r
+  @param[in] ActionRequired     The required HII action.\r
+\r
+  @retval SHELL_INVALID_PARAMETER   A parameter has a invalid value.\r
+**/\r
 EFI_STATUS\r
-EFIAPI\r
 ShellCmdDriverConfigurationProcessActionRequired (\r
   EFI_HANDLE                                DriverImageHandle,\r
   EFI_HANDLE                                ControllerHandle,\r
@@ -498,14 +527,28 @@ ShellCmdDriverConfigurationProcessActionRequired (
 \r
   default:\r
     return (EFI_INVALID_PARAMETER);\r
-    break;\r
   }\r
 \r
   return EFI_SUCCESS;\r
 }\r
 \r
+/**\r
+  Do the configuration in an environment without HII.\r
+\r
+  @param[in] Language           The language code.\r
+  @param[in] ForceDefaults      TRUE to force defaults, FALSE otherwise.\r
+  @param[in] DefaultType        If ForceDefaults is TRUE, specifies the default type.\r
+  @param[in] AllChildren        TRUE to configure all children, FALSE otherwise.\r
+  @param[in] ValidateOptions    TRUE to validate existing options, FALSE otherwise.\r
+  @param[in] SetOptions         TRUE to set options, FALSE otherwise.\r
+  @param[in] DriverImageHandle  The handle for the driver to configure.\r
+  @param[in] DeviceHandle       The handle of the device being managed by the Driver specified.\r
+  @param[in] ChildHandle        The handle of a child device of the specified device.\r
+\r
+  @retval SHELL_NOT_FOUND           A specified handle could not be found.\r
+  @retval SHELL_INVALID_PARAMETER   A parameter has a invalid value.\r
+**/\r
 SHELL_STATUS\r
-EFIAPI\r
 PreHiiDrvCfg (\r
   IN CONST CHAR8    *Language,\r
   IN BOOLEAN        ForceDefaults,\r
@@ -550,22 +593,22 @@ PreHiiDrvCfg (
       -1,\r
       -1,\r
       NULL,\r
-      STRING_TOKEN (STR_DRVCFG_FORCE_D), \r
-      gShellDriver1HiiHandle, \r
+      STRING_TOKEN (STR_DRVCFG_FORCE_D),\r
+      gShellDriver1HiiHandle,\r
       DefaultType);\r
   } else if (ValidateOptions) {\r
     ShellPrintHiiEx(\r
       -1,\r
       -1,\r
       NULL,\r
-      STRING_TOKEN (STR_DRVCFG_VALIDATE), \r
+      STRING_TOKEN (STR_DRVCFG_VALIDATE),\r
       gShellDriver1HiiHandle);\r
   } else if (SetOptions) {\r
     ShellPrintHiiEx(\r
       -1,\r
       -1,\r
       NULL,\r
-      STRING_TOKEN (STR_DRVCFG_SET), \r
+      STRING_TOKEN (STR_DRVCFG_SET),\r
       gShellDriver1HiiHandle);\r
   }\r
 \r
@@ -576,8 +619,8 @@ PreHiiDrvCfg (
       goto Done;\r
     }\r
     for (\r
-      HandleBuffer = DriverImageHandleBuffer, DriverImageHandleCount = 0 \r
-      ; HandleBuffer != NULL && *HandleBuffer != NULL \r
+      HandleBuffer = DriverImageHandleBuffer, DriverImageHandleCount = 0\r
+      ; HandleBuffer != NULL && *HandleBuffer != NULL\r
       ; HandleBuffer++,DriverImageHandleCount++);\r
   } else {\r
     DriverImageHandleCount = 1;\r
@@ -623,7 +666,7 @@ PreHiiDrvCfg (
       ShellStatus = SHELL_UNSUPPORTED;\r
       continue;\r
     }\r
-    \r
+\r
     BestLanguage = GetBestLanguage (\r
                           DriverConfiguration->SupportedLanguages,\r
                           Iso639Language,\r
@@ -636,8 +679,9 @@ PreHiiDrvCfg (
         -1,\r
         -1,\r
         NULL,\r
-        STRING_TOKEN (STR_GEN_PROBLEM_VAL),\r
+        STRING_TOKEN (STR_GEN_NO_VALUE),\r
         gShellDriver1HiiHandle,\r
+        L"drvcfg",\r
         L"-l"\r
         );\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
@@ -681,7 +725,7 @@ PreHiiDrvCfg (
           -1,\r
           -1,\r
           NULL,\r
-          STRING_TOKEN (STR_DRVCFG_OPTIONS_SET), \r
+          STRING_TOKEN (STR_DRVCFG_OPTIONS_SET),\r
           gShellDriver1HiiHandle);\r
         for (LoopCounter = 0; LoopCounter < HandleCount; LoopCounter++) {\r
           if ((HandleType[LoopCounter] & HR_CONTROLLER_HANDLE) == HR_CONTROLLER_HANDLE) {\r
@@ -698,8 +742,8 @@ PreHiiDrvCfg (
           -1,\r
           -1,\r
           NULL,\r
-          STRING_TOKEN (STR_DRVCFG_NOT_SET), \r
-          gShellDriver1HiiHandle, \r
+          STRING_TOKEN (STR_DRVCFG_NOT_SET),\r
+          gShellDriver1HiiHandle,\r
           Status);\r
       }\r
       continue;\r
@@ -740,7 +784,7 @@ PreHiiDrvCfg (
               -1,\r
               -1,\r
               NULL,\r
-              STRING_TOKEN (STR_DRVCFG_DEF_FORCED), \r
+              STRING_TOKEN (STR_DRVCFG_DEF_FORCED),\r
               gShellDriver1HiiHandle);\r
             ShellCmdDriverConfigurationProcessActionRequired (\r
               DriverImageHandleBuffer[OuterLoopCounter],\r
@@ -753,8 +797,8 @@ PreHiiDrvCfg (
               -1,\r
               -1,\r
               NULL,\r
-              STRING_TOKEN (STR_DRVCFG_FORCE_FAILED), \r
-              gShellDriver1HiiHandle, \r
+              STRING_TOKEN (STR_DRVCFG_FORCE_FAILED),\r
+              gShellDriver1HiiHandle,\r
               Status);\r
            ShellStatus = SHELL_DEVICE_ERROR;\r
          }\r
@@ -770,15 +814,15 @@ PreHiiDrvCfg (
               -1,\r
               -1,\r
               NULL,\r
-              STRING_TOKEN (STR_DRVCFG_OPTIONS_VALID), \r
+              STRING_TOKEN (STR_DRVCFG_OPTIONS_VALID),\r
               gShellDriver1HiiHandle);\r
           } else {\r
             ShellPrintHiiEx(\r
               -1,\r
               -1,\r
               NULL,\r
-              STRING_TOKEN (STR_DRVCFG_OPTIONS_INV), \r
-              gShellDriver1HiiHandle, \r
+              STRING_TOKEN (STR_DRVCFG_OPTIONS_INV),\r
+              gShellDriver1HiiHandle,\r
               Status);\r
             ShellStatus = SHELL_DEVICE_ERROR;\r
           }\r
@@ -809,7 +853,7 @@ PreHiiDrvCfg (
               -1,\r
               -1,\r
               NULL,\r
-              STRING_TOKEN (STR_DRVCFG_OPTIONS_SET), \r
+              STRING_TOKEN (STR_DRVCFG_OPTIONS_SET),\r
               gShellDriver1HiiHandle);\r
 \r
             ShellCmdDriverConfigurationProcessActionRequired (\r
@@ -824,8 +868,8 @@ PreHiiDrvCfg (
               -1,\r
               -1,\r
               NULL,\r
-              STRING_TOKEN (STR_DRVCFG_NOT_SET), \r
-              gShellDriver1HiiHandle, \r
+              STRING_TOKEN (STR_DRVCFG_NOT_SET),\r
+              gShellDriver1HiiHandle,\r
               Status);\r
             ShellStatus = SHELL_DEVICE_ERROR;\r
           }\r
@@ -887,7 +931,7 @@ PreHiiDrvCfg (
               -1,\r
               -1,\r
               NULL,\r
-              STRING_TOKEN (STR_DRVCFG_DEF_FORCED), \r
+              STRING_TOKEN (STR_DRVCFG_DEF_FORCED),\r
               gShellDriver1HiiHandle);\r
 \r
             ShellCmdDriverConfigurationProcessActionRequired (\r
@@ -902,8 +946,8 @@ PreHiiDrvCfg (
               -1,\r
               -1,\r
               NULL,\r
-              STRING_TOKEN (STR_DRVCFG_FORCE_FAILED), \r
-              gShellDriver1HiiHandle, \r
+              STRING_TOKEN (STR_DRVCFG_FORCE_FAILED),\r
+              gShellDriver1HiiHandle,\r
               Status);\r
             ShellStatus = SHELL_DEVICE_ERROR;\r
           }\r
@@ -919,15 +963,15 @@ PreHiiDrvCfg (
               -1,\r
               -1,\r
               NULL,\r
-              STRING_TOKEN (STR_DRVCFG_OPTIONS_VALID), \r
+              STRING_TOKEN (STR_DRVCFG_OPTIONS_VALID),\r
               gShellDriver1HiiHandle);\r
           } else {\r
             ShellPrintHiiEx(\r
               -1,\r
               -1,\r
               NULL,\r
-              STRING_TOKEN (STR_DRVCFG_OPTIONS_INV), \r
-              gShellDriver1HiiHandle, \r
+              STRING_TOKEN (STR_DRVCFG_OPTIONS_INV),\r
+              gShellDriver1HiiHandle,\r
               Status);\r
             ShellStatus = SHELL_DEVICE_ERROR;\r
           }\r
@@ -960,7 +1004,7 @@ PreHiiDrvCfg (
               -1,\r
               -1,\r
               NULL,\r
-              STRING_TOKEN (STR_DRVCFG_OPTIONS_SET), \r
+              STRING_TOKEN (STR_DRVCFG_OPTIONS_SET),\r
               gShellDriver1HiiHandle);\r
 \r
             ShellCmdDriverConfigurationProcessActionRequired (\r
@@ -975,8 +1019,8 @@ PreHiiDrvCfg (
               -1,\r
               -1,\r
               NULL,\r
-              STRING_TOKEN (STR_DRVCFG_NOT_SET), \r
-              gShellDriver1HiiHandle, \r
+              STRING_TOKEN (STR_DRVCFG_NOT_SET),\r
+              gShellDriver1HiiHandle,\r
               Status);\r
             ShellStatus = SHELL_DEVICE_ERROR;\r
           }\r
@@ -1012,7 +1056,6 @@ Done:
   @retval SHELL_SUCCESS     The operation was successful.\r
 **/\r
 SHELL_STATUS\r
-EFIAPI\r
 PrintConfigInfoOnAll(\r
   IN CONST BOOLEAN ChildrenToo,\r
   IN CONST CHAR8   *Language,\r
@@ -1038,11 +1081,11 @@ PrintConfigInfoOnAll(
       Found = TRUE;\r
       Index2 = *CurrentHandle == NULL ? 0 : ConvertHandleToHandleIndex(*CurrentHandle);\r
       ShellPrintHiiEx(\r
-        -1, \r
-        -1, \r
-        NULL, \r
-        STRING_TOKEN (STR_DRVCFG_LINE_HII), \r
-        gShellDriver1HiiHandle, \r
+        -1,\r
+        -1,\r
+        NULL,\r
+        STRING_TOKEN (STR_DRVCFG_LINE_HII),\r
+        gShellDriver1HiiHandle,\r
         Index2\r
         );\r
     }\r
@@ -1063,7 +1106,7 @@ PrintConfigInfoOnAll(
   }\r
 \r
   if (!Found) {\r
-    ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_DRVCFG_NONE), gShellDriver1HiiHandle);\r
+    ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_DRVCFG_NONE_FOUND), gShellDriver1HiiHandle);\r
     return (SHELL_SUCCESS);\r
   }\r
 \r
@@ -1128,6 +1171,7 @@ ShellCommandRunDrvCfg (
   Status              = EFI_SUCCESS;\r
   Language            = NULL;\r
   UseHii              = TRUE;\r
+  ProblemParam        = NULL;\r
 \r
   //\r
   // initialize the shell lib (we must be in non-auto-init...)\r
@@ -1151,7 +1195,7 @@ ShellCommandRunDrvCfg (
     Status = ShellCommandLineParse (ParamListPreHii, &Package, &ProblemParam, TRUE);\r
     if (EFI_ERROR(Status)) {\r
       if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDriver1HiiHandle, ProblemParam);\r
+        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDriver1HiiHandle, L"drvcfg", ProblemParam);\r
         FreePool(ProblemParam);\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
         goto Done;\r
@@ -1159,14 +1203,19 @@ ShellCommandRunDrvCfg (
         ASSERT(FALSE);\r
       }\r
     }\r
-  } \r
+  }\r
   if (ShellStatus == SHELL_SUCCESS) {\r
+    if (ShellCommandLineGetCount(Package) > 4) {\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDriver1HiiHandle, L"drvcfg");\r
+      ShellStatus = SHELL_INVALID_PARAMETER;\r
+      goto Done;\r
+    }\r
     Lang = ShellCommandLineGetValue(Package, L"-l");\r
     if (Lang != NULL) {\r
       Language = AllocateZeroPool(StrSize(Lang));\r
       AsciiSPrint(Language, StrSize(Lang), "%S", Lang);\r
     } else if (ShellCommandLineGetFlag(Package, L"-l")){\r
-      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDriver1HiiHandle, L"-l");\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDriver1HiiHandle, L"drvcfg",  L"-l");\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
       goto Done;\r
     }\r
@@ -1187,24 +1236,24 @@ ShellCommandRunDrvCfg (
     }\r
 \r
     if (InFromFile && EFI_ERROR(ShellFileExists(FileName))) {\r
-      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_FIND_FAIL), gShellDriver1HiiHandle, FileName);\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_FIND_FAIL), gShellDriver1HiiHandle, L"drvcfg", FileName);\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
-      goto Done;      \r
+      goto Done;\r
     }\r
     if (OutToFile && !EFI_ERROR(ShellFileExists(FileName))) {\r
-      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_EXIST), gShellDriver1HiiHandle, FileName);\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_EXIST), gShellDriver1HiiHandle, L"drvcfg", FileName);\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
-      goto Done;      \r
+      goto Done;\r
     }\r
     if (Force && ForceTypeString == NULL) {\r
-      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDriver1HiiHandle, L"-f");\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDriver1HiiHandle, L"drvcfg", L"-f");\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
       goto Done;\r
-    } \r
+    }\r
     if (Force) {\r
       Status = ShellConvertStringToUint64(ForceTypeString, &Intermediate, FALSE, FALSE);\r
       if (EFI_ERROR(Status)) {\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM_VAL), gShellDriver1HiiHandle, L"-f");\r
+        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM_VAL), gShellDriver1HiiHandle, L"drvcfg", ForceTypeString, L"-f");\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
         goto Done;\r
       }\r
@@ -1217,7 +1266,7 @@ ShellCommandRunDrvCfg (
     if (HandleIndex1 != NULL && !EFI_ERROR(ShellConvertStringToUint64(HandleIndex1, &Intermediate, TRUE, FALSE))) {\r
       Handle1 = ConvertHandleIndexToHandle((UINTN)Intermediate);\r
       if (Handle1 == NULL || (UINT64)(UINTN)Intermediate != Intermediate) {\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, HandleIndex1);\r
+        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"drvcfg", HandleIndex1);\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
         goto Done;\r
       }\r
@@ -1227,7 +1276,7 @@ ShellCommandRunDrvCfg (
     if (HandleIndex2 != NULL && !EFI_ERROR(ShellConvertStringToUint64(HandleIndex2, &Intermediate, TRUE, FALSE))) {\r
       Handle2 = ConvertHandleIndexToHandle((UINTN)Intermediate);\r
       if (Handle2 == NULL || (UINT64)(UINTN)Intermediate != Intermediate) {\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, HandleIndex2);\r
+        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"drvcfg", HandleIndex2);\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
         goto Done;\r
       }\r
@@ -1237,7 +1286,7 @@ ShellCommandRunDrvCfg (
     if (HandleIndex3 != NULL && !EFI_ERROR(ShellConvertStringToUint64(HandleIndex3, &Intermediate, TRUE, FALSE))) {\r
       Handle3 = ConvertHandleIndexToHandle((UINTN)Intermediate);\r
       if (Handle3 == NULL || (UINT64)(UINTN)Intermediate != Intermediate) {\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, HandleIndex3);\r
+        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"drvcfg", HandleIndex3);\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
         goto Done;\r
       }\r
@@ -1245,42 +1294,42 @@ ShellCommandRunDrvCfg (
 \r
     if ((InFromFile || OutToFile) && (FileName == NULL)) {\r
       if (FileName == NULL) {\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDriver1HiiHandle, InFromFile?L"-i":L"-o");\r
+        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDriver1HiiHandle, L"drvcfg",  InFromFile?L"-i":L"-o");\r
       } else {\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_HANDLE_REQ), gShellDriver1HiiHandle);\r
+        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_HANDLE_REQ), gShellDriver1HiiHandle, L"drvcfg");\r
       }\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
       goto Done;\r
     }\r
     if (!UseHii && (InFromFile || OutToFile)) {\r
       if (InFromFile) {\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDriver1HiiHandle, L"-i");\r
+        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellDriver1HiiHandle, L"drvcfg", L"-i");\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
         goto Done;\r
-      } \r
+      }\r
       if (OutToFile) {\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDriver1HiiHandle, L"-o");\r
+        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellDriver1HiiHandle, L"drvcfg", L"-o");\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
         goto Done;\r
       }\r
     }\r
     if (Validate && Force) {\r
-      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CONF), gShellDriver1HiiHandle, L"-v", L"-f");\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CONFLICT), gShellDriver1HiiHandle, L"drvcfg", L"-v", L"-f");\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
       goto Done;\r
-    } \r
+    }\r
     if (Validate && Set) {\r
-      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CONF), gShellDriver1HiiHandle, L"-v", L"-s");\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CONFLICT), gShellDriver1HiiHandle, L"drvcfg", L"-v", L"-s");\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
       goto Done;\r
-    } \r
+    }\r
     if (Set && Force) {\r
-      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CONF), gShellDriver1HiiHandle, L"-s", L"-f");\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CONFLICT), gShellDriver1HiiHandle, L"drvcfg", L"-s", L"-f");\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
       goto Done;\r
     }\r
     if (OutToFile && InFromFile) {\r
-      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CONF), gShellDriver1HiiHandle, L"-i", L"-o");\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CONFLICT), gShellDriver1HiiHandle, L"drvcfg", L"-i", L"-o");\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
       goto Done;\r
     }\r
@@ -1316,11 +1365,11 @@ ShellCommandRunDrvCfg (
       } else {\r
         if (!EFI_ERROR(gBS->OpenProtocol(Handle1, &gEfiHiiConfigAccessProtocolGuid, NULL, gImageHandle, NULL, EFI_OPEN_PROTOCOL_TEST_PROTOCOL))) {\r
           ShellPrintHiiEx(\r
-            -1, \r
-            -1, \r
-            NULL, \r
-            STRING_TOKEN (STR_DRVCFG_LINE_HII), \r
-            gShellDriver1HiiHandle, \r
+            -1,\r
+            -1,\r
+            NULL,\r
+            STRING_TOKEN (STR_DRVCFG_LINE_HII),\r
+            gShellDriver1HiiHandle,\r
             ConvertHandleToHandleIndex(Handle1)\r
             );\r
           goto Done;\r
@@ -1350,7 +1399,7 @@ ShellCommandRunDrvCfg (
         -1,\r
         NULL,\r
         STRING_TOKEN (STR_DRVCFG_NOT_SUPPORT),\r
-        gShellDriver1HiiHandle, \r
+        gShellDriver1HiiHandle,\r
         ConvertHandleToHandleIndex(Handle1)\r
         );\r
     }\r