]> git.proxmox.com Git - mirror_edk2.git/commitdiff
comp - add comments and add input verification
authorjcarsey <jcarsey@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 25 Mar 2011 21:22:20 +0000 (21:22 +0000)
committerjcarsey <jcarsey@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 25 Mar 2011 21:22:20 +0000 (21:22 +0000)
bcfg - updated for bugs.
compress - rename for coding standards. add comments.
dblk - add comments, input verification, and a header line
dmem - add comments, add input verification, add system table info
dmpstore - add comments
eficompress - add comments and add input verification
efidecompress - add comments and add input verification
loadpcirom - add comments and more output messages
memmap - add more output to exceed the spec.
mm - move functions, add comments, add input verification.
mode - add comment
pci - add input verification.
SerMode - add comments and add input verification
setsize - add comments and add input verification
setvar - add comments and add input verification
smbiosview - add input verification.

clarify error messages.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11438 6f19259b-4bc3-4df7-8a09-765794883524

23 files changed:
ShellPkg/Library/UefiShellDebug1CommandsLib/Bcfg.c
ShellPkg/Library/UefiShellDebug1CommandsLib/Comp.c
ShellPkg/Library/UefiShellDebug1CommandsLib/Compress.c
ShellPkg/Library/UefiShellDebug1CommandsLib/Compress.h
ShellPkg/Library/UefiShellDebug1CommandsLib/Dblk.c
ShellPkg/Library/UefiShellDebug1CommandsLib/Dmem.c
ShellPkg/Library/UefiShellDebug1CommandsLib/DmpStore.c
ShellPkg/Library/UefiShellDebug1CommandsLib/EfiCompress.c
ShellPkg/Library/UefiShellDebug1CommandsLib/EfiDecompress.c
ShellPkg/Library/UefiShellDebug1CommandsLib/LoadPciRom.c
ShellPkg/Library/UefiShellDebug1CommandsLib/MemMap.c
ShellPkg/Library/UefiShellDebug1CommandsLib/Mm.c
ShellPkg/Library/UefiShellDebug1CommandsLib/Mode.c
ShellPkg/Library/UefiShellDebug1CommandsLib/Pci.c
ShellPkg/Library/UefiShellDebug1CommandsLib/SerMode.c
ShellPkg/Library/UefiShellDebug1CommandsLib/SetSize.c
ShellPkg/Library/UefiShellDebug1CommandsLib/SetVar.c
ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/SmbiosView.c
ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/SmbiosViewStrings.uni
ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.c
ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.h
ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.inf
ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.uni

index 4c2eb3c1a8015e7f2d31d182b9148d85e4a35c06..73e8c576372af350d0e60b438c076724cd896ee5 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
-  Main file for bcfg shell install1 function.\r
+  Main file for bcfg shell Debug1 function.\r
 \r
-  Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2010 - 2011, 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
 #include <Library/DevicePathLib.h>\r
 \r
 typedef enum {\r
-  BCFG_TARGET_BOOT_ORDER    = 0,\r
-  BCFG_TARGET_DRIVER_ORDER  = 1,\r
-  BCFG_TARGET_MAX           = 2\r
+  BcfgTargetBootOrder    = 0,\r
+  BcfgTargetDriverOrder  = 1,\r
+  BcfgTargetMax          = 2\r
 } BCFG_OPERATION_TARGET;\r
 \r
 typedef enum {\r
-  BCFG_TYPE_DUMP       = 0,\r
-  BCFG_TYPE_ADD        = 1,\r
-  BCFG_TYPE_ADDP       = 2,\r
-  BCFG_TYPE_ADDH       = 3,\r
-  BCFG_TYPE_RM         = 4,\r
-  BCFG_TYPE_MV         = 5,\r
-  BCFG_TYPE_OPT        = 6,\r
-  BCFG_TYPE_MAX        = 7\r
+  BcfgTypeDump       = 0,\r
+  BcfgTypeAdd        = 1,\r
+  BcfgTypeAddp       = 2,\r
+  BcfgTypeAddh       = 3,\r
+  BcfgTypeRm         = 4,\r
+  BcfgTypeMv         = 5,\r
+  BcfgTypeOpt        = 6,\r
+  BcfgTypeMax        = 7\r
 } BCFG_OPERATION_TYPE;\r
 \r
 typedef struct {\r
@@ -47,9 +47,25 @@ typedef struct {
   CONST CHAR16          *OptData;\r
 } BGFG_OPERATION;\r
 \r
+/**\r
+  Function to add a option.\r
+\r
+  @param[in] Position       The position to add Target at.\r
+  @param[in] File           The file to make the target.\r
+  @param[in] Desc           The description text.\r
+  @param[in] CurrentOrder   The pointer to the current order of items.\r
+  @param[in] OrderCount     The number if items in CurrentOrder.\r
+  @param[in] Target         The info on the option to add.\r
+  @param[in] UseHandle      TRUE to use HandleNumber, FALSE to use File and Desc.\r
+  @param[in] UsePath        TRUE to convert to devicepath.\r
+  @param[in] HandleNumber   The handle number to add.\r
+\r
+  @retval SHELL_SUCCESS             The operation was successful.\r
+  @retval SHELL_INVALID_PARAMETER   A parameter was invalid.\r
+**/\r
 SHELL_STATUS\r
 EFIAPI\r
-BcfgAdd (\r
+BcfgAddDebug1(\r
   IN       UINTN                  Position,\r
   IN CONST CHAR16                 *File,\r
   IN CONST CHAR16                 *Desc,\r
@@ -62,10 +78,14 @@ BcfgAdd (
   )\r
 {\r
   EFI_STATUS                Status;\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevicePath, *FilePath, *FileNode, *DevPath;\r
+  EFI_DEVICE_PATH_PROTOCOL  *DevicePath;\r
+  EFI_DEVICE_PATH_PROTOCOL  *FilePath;\r
+  EFI_DEVICE_PATH_PROTOCOL  *FileNode;\r
+  EFI_DEVICE_PATH_PROTOCOL  *DevPath;\r
   CHAR16                    *Str;\r
-  CONST CHAR16              *p;\r
-  UINT8                     *p8;\r
+  CONST CHAR16              *StringWalker;\r
+  UINT8                     *TempByteBuffer;\r
+  UINT8                     *TempByteStart;\r
   EFI_SHELL_FILE_INFO       *Arg;\r
   EFI_SHELL_FILE_INFO       *FileList;\r
   CHAR16                    OptionStr[40];\r
@@ -80,15 +100,21 @@ BcfgAdd (
   UINTN                     ChildControllerHandleCount;\r
   SHELL_STATUS              ShellStatus;\r
   UINT16                    *NewOrder;\r
+  UINT64                    Intermediate;\r
 \r
   if (!UseHandle) {\r
-    ASSERT(File != NULL);\r
-    ASSERT(Desc != NULL);\r
+    if (File == NULL || Desc == NULL) {\r
+      return (SHELL_INVALID_PARAMETER);\r
+    }\r
   } else {\r
-    ASSERT(HandleNumber != 0);\r
+    if (HandleNumber == 0) {\r
+      return (SHELL_INVALID_PARAMETER);\r
+    }\r
   }\r
 \r
-  ASSERT(Position <= (OrderCount+1));\r
+  if (Position > OrderCount) {\r
+    Position =  OrderCount;\r
+  }\r
 \r
   Str             = NULL;\r
   FilePath        = NULL;\r
@@ -98,13 +124,10 @@ BcfgAdd (
   ShellStatus     = SHELL_SUCCESS;\r
   TargetLocation  = 0xFFFF;\r
 \r
-//  if (Position > 0) {\r
-//    Position--;\r
-//  }\r
-\r
   if (UseHandle) {\r
-    CurHandle = ConvertHandleIndexToHandle(StrHexToUintn(File));\r
-    if (CurHandle == NULL) {\r
+    Status = ShellConvertStringToUint64(File, &Intermediate, TRUE, FALSE);\r
+    CurHandle = ConvertHandleIndexToHandle((UINTN)Intermediate);\r
+    if (CurHandle == NULL || EFI_ERROR(Status)) {\r
       ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, File);\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
     } else {\r
@@ -136,7 +159,7 @@ BcfgAdd (
                    (VOID**)&FilePath);\r
       }\r
       if (EFI_ERROR (Status)) {\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_HANDLE), gShellDebug1HiiHandle, StrHexToUintn(File));\r
+        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_HANDLE), gShellDebug1HiiHandle, Intermediate);\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
       }\r
     }\r
@@ -146,10 +169,16 @@ BcfgAdd (
     //\r
     ShellOpenFileMetaArg ((CHAR16*)File, EFI_FILE_MODE_READ, &FileList);\r
 \r
-    //\r
-    // If filename expanded to multiple names, fail\r
-    //\r
-    if (FileList == NULL || FileList->Link.ForwardLink != FileList->Link.BackLink) {\r
+    if (FileList == NULL) {\r
+      //\r
+      // If filename matched nothing fail\r
+      //\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellDebug1HiiHandle, File);\r
+      ShellStatus = SHELL_INVALID_PARAMETER;\r
+    } else if (FileList->Link.ForwardLink != FileList->Link.BackLink) {\r
+      //\r
+      // If filename expanded to multiple names, fail\r
+      //\r
       ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_FILE), gShellDebug1HiiHandle, File);\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
     } else {\r
@@ -166,7 +195,7 @@ BcfgAdd (
         // get the device path\r
         //\r
         DevicePath = mEfiShellProtocol->GetDevicePathFromFilePath(Arg->FullName);\r
-        if (DevicePath != NULL) {\r
+        if (DevicePath == NULL) {\r
           ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_FILE_DP), gShellDebug1HiiHandle, Arg->FullName);\r
           ShellStatus = SHELL_UNSUPPORTED;\r
         } else {\r
@@ -187,8 +216,8 @@ BcfgAdd (
             //\r
             // append the file\r
             //\r
-            for(p=Arg->FullName; *p != CHAR_NULL && *p != ':'; p++);\r
-            FileNode = FileDevicePath(NULL, p+1);\r
+            for(StringWalker=Arg->FullName; *StringWalker != CHAR_NULL && *StringWalker != ':'; StringWalker++);\r
+            FileNode = FileDevicePath(NULL, StringWalker+1);\r
             FilePath = AppendDevicePath(DevicePath, FileNode);\r
             FreePool(FileNode);\r
           } else {\r
@@ -207,7 +236,7 @@ BcfgAdd (
     // Find a free target ,a brute force implementation\r
     //\r
     Found = FALSE;\r
-    for (TargetLocation=1; TargetLocation < 0xFFFF; TargetLocation++) {\r
+    for (TargetLocation=0; TargetLocation < 0xFFFF; TargetLocation++) {\r
       Found = TRUE;\r
       for (Index=0; Index < OrderCount; Index++) {\r
         if (CurrentOrder[Index] == TargetLocation) {\r
@@ -235,32 +264,33 @@ BcfgAdd (
     DescSize = StrSize(Desc);\r
     FilePathSize = GetDevicePathSize (FilePath);\r
 \r
-    p8 = AllocatePool(sizeof(UINT32) + sizeof(UINT16) + DescSize + FilePathSize);\r
-    *((UINT32 *) p8) = LOAD_OPTION_ACTIVE;      // Attributes\r
-    p8 += sizeof (UINT32);\r
+    TempByteBuffer = AllocateZeroPool(sizeof(UINT32) + sizeof(UINT16) + DescSize + FilePathSize);\r
+    TempByteStart  = TempByteBuffer;\r
+    *((UINT32 *) TempByteBuffer) = LOAD_OPTION_ACTIVE;      // Attributes\r
+    TempByteBuffer += sizeof (UINT32);\r
 \r
-    *((UINT16 *) p8) = (UINT16)FilePathSize;    // FilePathListLength\r
-    p8 += sizeof (UINT16);\r
+    *((UINT16 *) TempByteBuffer) = (UINT16)FilePathSize;    // FilePathListLength\r
+    TempByteBuffer += sizeof (UINT16);\r
 \r
-    CopyMem (p8, Desc, DescSize);\r
-    p8 += DescSize;\r
-    CopyMem (p8, FilePath, FilePathSize);\r
+    CopyMem (TempByteBuffer, Desc, DescSize);\r
+    TempByteBuffer += DescSize;\r
+    CopyMem (TempByteBuffer, FilePath, FilePathSize);\r
 \r
-    UnicodeSPrint (OptionStr, sizeof(OptionStr), L"%s%04x", Target == BCFG_TARGET_BOOT_ORDER?L"Boot":L"Driver", TargetLocation);\r
+    UnicodeSPrint (OptionStr, sizeof(OptionStr), L"%s%04x", Target == BcfgTargetBootOrder?L"Boot":L"Driver", TargetLocation);\r
     Status = gRT->SetVariable (\r
           OptionStr,\r
           &gEfiGlobalVariableGuid,\r
           EFI_VARIABLE_NON_VOLATILE|EFI_VARIABLE_BOOTSERVICE_ACCESS|EFI_VARIABLE_RUNTIME_ACCESS,\r
           sizeof(UINT32) + sizeof(UINT16) + DescSize + FilePathSize,\r
-          p8\r
+          TempByteStart\r
          );\r
 \r
-    FreePool(p8);\r
+    FreePool(TempByteStart);\r
 \r
     if (EFI_ERROR(Status)) {\r
       ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_SET_VAR_FAIL), gShellDebug1HiiHandle, OptionStr, Status);\r
     } else {\r
-      NewOrder = AllocatePool((OrderCount+1)*sizeof(NewOrder[0]));\r
+      NewOrder = AllocateZeroPool((OrderCount+1)*sizeof(NewOrder[0]));\r
       ASSERT(NewOrder != NULL);\r
       CopyMem(NewOrder, CurrentOrder, (OrderCount)*sizeof(NewOrder[0]));\r
 \r
@@ -273,7 +303,7 @@ BcfgAdd (
 \r
       NewOrder[Position] = (UINT16) TargetLocation;\r
       Status = gRT->SetVariable (\r
-        Target == BCFG_TARGET_BOOT_ORDER?L"BootOrder":L"DriverOrder",\r
+        Target == BcfgTargetBootOrder?L"BootOrder":L"DriverOrder",\r
         &gEfiGlobalVariableGuid,\r
         EFI_VARIABLE_NON_VOLATILE|EFI_VARIABLE_BOOTSERVICE_ACCESS|EFI_VARIABLE_RUNTIME_ACCESS,\r
         (OrderCount+1) * sizeof(UINT16),\r
@@ -283,7 +313,7 @@ BcfgAdd (
       FreePool(NewOrder);\r
 \r
       if (EFI_ERROR(Status)) {\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_WRITE_FAIL), gShellDebug1HiiHandle, Target == BCFG_TARGET_BOOT_ORDER?L"BootOrder":L"DriverOrder", Status);\r
+        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_WRITE_FAIL), gShellDebug1HiiHandle, Target == BcfgTargetBootOrder?L"BootOrder":L"DriverOrder", Status);\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
       } else {\r
         Print (L"bcfg: Add %s as %x\n", OptionStr, Position);\r
@@ -317,9 +347,20 @@ BcfgAdd (
   return (ShellStatus);\r
 }\r
 \r
+/**\r
+  Funciton to remove an item.\r
+\r
+  @param[in] Target         The target item to move.\r
+  @param[in] CurrentOrder   The pointer to the current order of items.\r
+  @param[in] OrderCount     The number if items in CurrentOrder.\r
+  @param[in] Location       The current location of the Target.\r
+\r
+  @retval SHELL_SUCCESS             The operation was successful.\r
+  @retval SHELL_INVALID_PARAMETER   A parameter was invalid.\r
+**/\r
 SHELL_STATUS\r
 EFIAPI\r
-BcfgRemove(\r
+BcfgRemoveDebug1(\r
   IN CONST BCFG_OPERATION_TARGET  Target,\r
   IN CONST UINT16                 *CurrentOrder,\r
   IN CONST UINTN                  OrderCount,\r
@@ -332,7 +373,7 @@ BcfgRemove(
   UINTN       LoopVar;\r
   UINTN       NewCount;\r
 \r
-  UnicodeSPrint(VariableName, sizeof(VariableName), L"%s%04x", Target == BCFG_TARGET_BOOT_ORDER?L"Boot":L"Driver", Location);\r
+  UnicodeSPrint(VariableName, sizeof(VariableName), L"%s%04x", Target == BcfgTargetBootOrder?L"Boot":L"Driver", Location);\r
   Status = gRT->SetVariable(\r
     VariableName,\r
     (EFI_GUID*)&gEfiGlobalVariableGuid,\r
@@ -343,7 +384,7 @@ BcfgRemove(
     ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_WRITE_FAIL), gShellDebug1HiiHandle, VariableName, Status);\r
     return (SHELL_INVALID_PARAMETER);\r
   }\r
-  NewOrder = AllocatePool(OrderCount*sizeof(CurrentOrder[0]));\r
+  NewOrder = AllocateZeroPool(OrderCount*sizeof(CurrentOrder[0]));\r
   NewCount = OrderCount;\r
   CopyMem(NewOrder, CurrentOrder, OrderCount*sizeof(CurrentOrder[0]));\r
   for (LoopVar = 0 ; LoopVar < OrderCount ; LoopVar++){\r
@@ -353,7 +394,7 @@ BcfgRemove(
     }\r
   }\r
   Status = gRT->SetVariable(\r
-    Target == BCFG_TARGET_BOOT_ORDER?(CHAR16*)L"BootOrder":(CHAR16*)L"DriverOrder",\r
+    Target == BcfgTargetBootOrder?(CHAR16*)L"BootOrder":(CHAR16*)L"DriverOrder",\r
     (EFI_GUID*)&gEfiGlobalVariableGuid,\r
     EFI_VARIABLE_NON_VOLATILE|EFI_VARIABLE_BOOTSERVICE_ACCESS|EFI_VARIABLE_RUNTIME_ACCESS,\r
     NewCount*sizeof(NewOrder[0]),\r
@@ -361,15 +402,27 @@ BcfgRemove(
   FreePool(NewOrder);\r
 \r
   if (EFI_ERROR(Status)) {\r
-    ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_WRITE_FAIL), gShellDebug1HiiHandle, Target == BCFG_TARGET_BOOT_ORDER?(CHAR16*)L"BootOrder":(CHAR16*)L"DriverOrder", Status);\r
+    ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_WRITE_FAIL), gShellDebug1HiiHandle, Target == BcfgTargetBootOrder?(CHAR16*)L"BootOrder":(CHAR16*)L"DriverOrder", Status);\r
     return (SHELL_INVALID_PARAMETER);\r
   }\r
   return (SHELL_SUCCESS);\r
 }\r
 \r
+/**\r
+  Funciton to move a item to another location.\r
+\r
+  @param[in] Target         The target item to move.\r
+  @param[in] CurrentOrder   The pointer to the current order of items.\r
+  @param[in] OrderCount     The number if items in CurrentOrder.\r
+  @param[in] OldLocation    The current location of the Target.\r
+  @param[in] NewLocation    The desired location of the Target.\r
+\r
+  @retval SHELL_SUCCESS             The operation was successful.\r
+  @retval SHELL_INVALID_PARAMETER   A parameter was invalid.\r
+**/\r
 SHELL_STATUS\r
 EFIAPI\r
-BcfgMove(\r
+BcfgMoveDebug1(\r
   IN CONST BCFG_OPERATION_TARGET  Target,\r
   IN CONST UINT16                 *CurrentOrder,\r
   IN CONST UINTN                  OrderCount,\r
@@ -381,7 +434,7 @@ BcfgMove(
   EFI_STATUS        Status;\r
   UINT16            Temp;\r
 \r
-  NewOrder = AllocatePool(OrderCount*sizeof(CurrentOrder[0]));\r
+  NewOrder = AllocateZeroPool(OrderCount*sizeof(CurrentOrder[0]));\r
   ASSERT(NewOrder != NULL);\r
 \r
   Temp = CurrentOrder[OldLocation];\r
@@ -392,7 +445,7 @@ BcfgMove(
 \r
 \r
   Status = gRT->SetVariable(\r
-    Target == BCFG_TARGET_BOOT_ORDER?(CHAR16*)L"BootOrder":(CHAR16*)L"DriverOrder",\r
+    Target == BcfgTargetBootOrder?(CHAR16*)L"BootOrder":(CHAR16*)L"DriverOrder",\r
     (EFI_GUID*)&gEfiGlobalVariableGuid,\r
     EFI_VARIABLE_NON_VOLATILE|EFI_VARIABLE_BOOTSERVICE_ACCESS|EFI_VARIABLE_RUNTIME_ACCESS,\r
     OrderCount*sizeof(CurrentOrder[0]),\r
@@ -401,7 +454,7 @@ BcfgMove(
   FreePool(NewOrder);\r
 \r
   if (EFI_ERROR(Status)) {\r
-    ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_WRITE_FAIL), gShellDebug1HiiHandle, Target == BCFG_TARGET_BOOT_ORDER?(CHAR16*)L"BootOrder":(CHAR16*)L"DriverOrder", Status);\r
+    ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_WRITE_FAIL), gShellDebug1HiiHandle, Target == BcfgTargetBootOrder?(CHAR16*)L"BootOrder":(CHAR16*)L"DriverOrder", Status);\r
     return (SHELL_INVALID_PARAMETER);\r
   }\r
   return (SHELL_SUCCESS);\r
@@ -409,9 +462,32 @@ BcfgMove(
 \r
 SHELL_STATUS\r
 EFIAPI\r
-BcfgDisplayDump(\r
+BcfgAddOptDebug1(\r
+  IN CONST CHAR16                 *OptData,\r
+  IN CONST BCFG_OPERATION_TARGET  Target\r
+  )\r
+{\r
+  ASSERT(OptData != NULL);\r
+  return SHELL_SUCCESS;\r
+}\r
+\r
+/**\r
+  Function to dump the Bcfg information.\r
+\r
+  @param[in] Op             The operation.\r
+  @param[in] OrderCount     How many to dump.\r
+  @param[in] CurrentOrder   The pointer to the current order of items.\r
+  @param[in] VerboseOutput  TRUE for extra output.  FALSE otherwise.\r
+\r
+  @retval SHELL_SUCCESS           The dump was successful.\r
+  @retval SHELL_INVALID_PARAMETER A parameter was invalid.\r
+**/\r
+SHELL_STATUS\r
+EFIAPI\r
+BcfgDisplayDumpDebug1(\r
   IN CONST CHAR16   *Op,\r
-  IN CONST UINTN   OrderCount,\r
+  IN CONST UINTN    OrderCount,\r
+  IN CONST UINT16   *CurrentOrder,\r
   IN CONST BOOLEAN  VerboseOutput\r
   )\r
 {\r
@@ -424,10 +500,15 @@ BcfgDisplayDump(
   CHAR16      *DevPathString;\r
   VOID        *DevPath;\r
 \r
+  if (OrderCount == 0) {\r
+    ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN(STR_BCFG_NONE), gShellDebug1HiiHandle);\r
+    return (SHELL_SUCCESS);\r
+  }\r
+\r
   for (LoopVar = 0 ; LoopVar < OrderCount ; LoopVar++) {\r
     Buffer      = NULL;\r
     BufferSize  = 0;\r
-    UnicodeSPrint(VariableName, sizeof(VariableName), L"%s%04x", Op, LoopVar);\r
+    UnicodeSPrint(VariableName, sizeof(VariableName), L"%s%04x", Op, CurrentOrder[LoopVar]);\r
 \r
     Status = gRT->GetVariable(\r
         VariableName,\r
@@ -436,7 +517,7 @@ BcfgDisplayDump(
         &BufferSize,\r
         Buffer);\r
     if (Status == EFI_BUFFER_TOO_SMALL) {\r
-      Buffer = AllocatePool(BufferSize);\r
+      Buffer = AllocateZeroPool(BufferSize);\r
       Status = gRT->GetVariable(\r
           VariableName,\r
           (EFI_GUID*)&gEfiGlobalVariableGuid,\r
@@ -450,7 +531,7 @@ BcfgDisplayDump(
       return (SHELL_INVALID_PARAMETER);\r
     }\r
 \r
-    DevPath = AllocatePool(*(UINT16*)(Buffer+4));\r
+    DevPath = AllocateZeroPool(*(UINT16*)(Buffer+4));\r
     CopyMem(DevPath, Buffer+6+StrSize((CHAR16*)(Buffer+6)), *(UINT16*)(Buffer+4));\r
     DevPathString = gDevPathToText->ConvertDevicePathToText(DevPath, TRUE, FALSE);\r
     ShellPrintHiiEx(\r
@@ -459,6 +540,7 @@ BcfgDisplayDump(
       NULL,\r
       STRING_TOKEN(STR_BCFG_LOAD_OPTIONS),\r
       gShellDebug1HiiHandle,\r
+      LoopVar,\r
       VariableName,\r
       (CHAR16*)(Buffer+6),\r
       DevPathString,\r
@@ -492,15 +574,20 @@ BcfgDisplayDump(
   return (SHELL_SUCCESS);\r
 }\r
 \r
+/**\r
+  Function to initialize the BCFG operation structure.\r
+\r
+  @param[in] Struct   The stuct to initialize.\r
+**/\r
 VOID\r
 EFIAPI\r
-InitBcfgStruct(\r
+InitBcfgStructDebug1(\r
   IN BGFG_OPERATION *Struct\r
   )\r
 {\r
   ASSERT(Struct != NULL);\r
-  Struct->Target      = BCFG_TARGET_MAX;\r
-  Struct->Type        = BCFG_TYPE_MAX;\r
+  Struct->Target      = BcfgTargetMax;\r
+  Struct->Type        = BcfgTypeMax;\r
   Struct->Number1     = 0;\r
   Struct->Number2     = 0;\r
   Struct->HandleIndex = 0;\r
@@ -538,13 +625,14 @@ ShellCommandRunBcfg (
   CONST CHAR16          *CurrentParam;\r
   BGFG_OPERATION        CurrentOperation;\r
   UINTN                 Length;\r
+  UINT64                Intermediate;\r
 \r
   Length              = 0;\r
   ProblemParam        = NULL;\r
   Package             = NULL;\r
   ShellStatus         = SHELL_SUCCESS;\r
 \r
-  InitBcfgStruct(&CurrentOperation);\r
+  InitBcfgStructDebug1(&CurrentOperation);\r
 \r
   //\r
   // initialize the shell lib (we must be in non-auto-init...)\r
@@ -568,44 +656,51 @@ ShellCommandRunBcfg (
       ASSERT(FALSE);\r
     }\r
   } else {\r
+    //\r
+    // Read in if we are doing -OPT\r
+    //\r
+    if (ShellCommandLineGetFlag(Package, L"-opt")) {\r
+      CurrentOperation.OptData = ShellCommandLineGetValue(Package, L"-opt");\r
+      if (CurrentOperation.OptData == NULL) {\r
+        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM_VAL), gShellDebug1HiiHandle, L"-opt");\r
+        ShellStatus = SHELL_INVALID_PARAMETER;\r
+      }\r
+      CurrentOperation.Type = BcfgTypeOpt;\r
+    }\r
+\r
     //\r
     // small block to read the target of the operation\r
     //\r
-    if (ShellCommandLineGetCount(Package) < 3) {\r
+    if ((ShellCommandLineGetCount(Package) < 3 && CurrentOperation.Type != BcfgTypeOpt) ||\r
+        (ShellCommandLineGetCount(Package) < 2 && CurrentOperation.Type == BcfgTypeOpt)\r
+       ){\r
       ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle);\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
     } else if (gUnicodeCollation->StriColl(gUnicodeCollation, (CHAR16*)ShellCommandLineGetRawValue(Package, 1), L"driver") == 0) {\r
-      CurrentOperation.Target = BCFG_TARGET_DRIVER_ORDER;\r
+      CurrentOperation.Target = BcfgTargetDriverOrder;\r
     } else if (gUnicodeCollation->StriColl(gUnicodeCollation, (CHAR16*)ShellCommandLineGetRawValue(Package, 1), L"boot") == 0) {\r
-      CurrentOperation.Target = BCFG_TARGET_BOOT_ORDER;\r
+      CurrentOperation.Target = BcfgTargetBootOrder;\r
     } else {\r
       ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_DRIVER_BOOT), gShellDebug1HiiHandle);\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
     }\r
 \r
-    //\r
-    // Read in if we are doing -OPT\r
-    //\r
-    if (ShellStatus == SHELL_SUCCESS && CurrentOperation.Target < BCFG_TARGET_MAX && ShellCommandLineGetFlag(Package, L"-opt")) {\r
-      CurrentOperation.OptData = ShellCommandLineGetValue(Package, L"-opt");\r
-      CurrentOperation.Type = BCFG_TYPE_OPT;\r
-    }\r
 \r
     //\r
     // Read in the boot or driver order environment variable (not needed for opt)\r
     //\r
-    if (ShellStatus == SHELL_SUCCESS && CurrentOperation.Target < BCFG_TARGET_MAX && CurrentOperation.Type != BCFG_TYPE_OPT) {\r
+    if (ShellStatus == SHELL_SUCCESS && CurrentOperation.Target < BcfgTargetMax && CurrentOperation.Type != BcfgTypeOpt) {\r
       Length = 0;\r
       Status = gRT->GetVariable(\r
-        CurrentOperation.Target == BCFG_TARGET_BOOT_ORDER?(CHAR16*)L"BootOrder":(CHAR16*)L"DriverOrder",\r
+        CurrentOperation.Target == BcfgTargetBootOrder?(CHAR16*)L"BootOrder":(CHAR16*)L"DriverOrder",\r
         (EFI_GUID*)&gEfiGlobalVariableGuid,\r
         NULL,\r
         &Length,\r
         CurrentOperation.Order);\r
       if (Status == EFI_BUFFER_TOO_SMALL) {\r
-        CurrentOperation.Order = AllocatePool(Length+(4*sizeof(CurrentOperation.Order[0])));\r
+        CurrentOperation.Order = AllocateZeroPool(Length+(4*sizeof(CurrentOperation.Order[0])));\r
         Status = gRT->GetVariable(\r
-          CurrentOperation.Target == BCFG_TARGET_BOOT_ORDER?(CHAR16*)L"BootOrder":(CHAR16*)L"DriverOrder",\r
+          CurrentOperation.Target == BcfgTargetBootOrder?(CHAR16*)L"BootOrder":(CHAR16*)L"DriverOrder",\r
           (EFI_GUID*)&gEfiGlobalVariableGuid,\r
           NULL,\r
           &Length,\r
@@ -616,11 +711,11 @@ ShellCommandRunBcfg (
     //\r
     // large block to read the type of operation and verify parameter types for the info.\r
     //\r
-    if (ShellStatus == SHELL_SUCCESS && CurrentOperation.Target < BCFG_TARGET_MAX) {\r
+    if (ShellStatus == SHELL_SUCCESS && CurrentOperation.Target < BcfgTargetMax) {\r
       for (ParamNumber = 2 ; ParamNumber < ShellCommandLineGetCount(Package) && ShellStatus == SHELL_SUCCESS; ParamNumber++) {\r
         CurrentParam = ShellCommandLineGetRawValue(Package, ParamNumber);\r
         if        (gUnicodeCollation->StriColl(gUnicodeCollation, (CHAR16*)CurrentParam, L"dump") == 0)    {\r
-          CurrentOperation.Type = BCFG_TYPE_DUMP;\r
+          CurrentOperation.Type = BcfgTypeDump;\r
         } else if (ShellCommandLineGetFlag(Package, L"-v")) {\r
           ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, L"-v (without dump)");\r
           ShellStatus = SHELL_INVALID_PARAMETER;\r
@@ -629,13 +724,14 @@ ShellCommandRunBcfg (
             ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle);\r
             ShellStatus = SHELL_INVALID_PARAMETER;\r
           }\r
-          CurrentOperation.Type = BCFG_TYPE_ADD;\r
+          CurrentOperation.Type = BcfgTypeAdd;\r
           CurrentParam = ShellCommandLineGetRawValue(Package, ++ParamNumber);\r
           if (CurrentParam == NULL || !ShellIsHexOrDecimalNumber(CurrentParam, TRUE, FALSE)) {\r
             ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, CurrentParam);\r
             ShellStatus = SHELL_INVALID_PARAMETER;\r
           } else {\r
-            CurrentOperation.Number1     = (UINT16)StrHexToUintn(CurrentParam);\r
+            Status = ShellConvertStringToUint64(CurrentParam, &Intermediate, TRUE, FALSE);\r
+            CurrentOperation.Number1     = (UINT16)Intermediate;\r
             ASSERT(CurrentOperation.FileName == NULL);\r
             CurrentOperation.FileName    = StrnCatGrow(&CurrentOperation.FileName   , NULL, ShellCommandLineGetRawValue(Package, ++ParamNumber), 0);\r
             ASSERT(CurrentOperation.Description == NULL);\r
@@ -646,13 +742,14 @@ ShellCommandRunBcfg (
             ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle);\r
             ShellStatus = SHELL_INVALID_PARAMETER;\r
           }\r
-          CurrentOperation.Type = BCFG_TYPE_ADDP;\r
+          CurrentOperation.Type = BcfgTypeAddp;\r
           CurrentParam = ShellCommandLineGetRawValue(Package, ++ParamNumber);\r
           if (CurrentParam == NULL || !ShellIsHexOrDecimalNumber(CurrentParam, TRUE, FALSE)) {\r
             ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, CurrentParam);\r
             ShellStatus = SHELL_INVALID_PARAMETER;\r
           } else {\r
-            CurrentOperation.Number1     = (UINT16)StrHexToUintn(CurrentParam);\r
+            Status = ShellConvertStringToUint64(CurrentParam, &Intermediate, TRUE, FALSE);\r
+            CurrentOperation.Number1     = (UINT16)Intermediate;\r
             ASSERT(CurrentOperation.FileName == NULL);\r
             CurrentOperation.FileName    = StrnCatGrow(&CurrentOperation.FileName   , NULL, ShellCommandLineGetRawValue(Package, ++ParamNumber), 0);\r
             ASSERT(CurrentOperation.Description == NULL);\r
@@ -663,19 +760,21 @@ ShellCommandRunBcfg (
             ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle);\r
             ShellStatus = SHELL_INVALID_PARAMETER;\r
           }\r
-          CurrentOperation.Type = BCFG_TYPE_ADDH;\r
+          CurrentOperation.Type = BcfgTypeAddh;\r
           CurrentParam = ShellCommandLineGetRawValue(Package, ++ParamNumber);\r
           if (CurrentParam == NULL || !ShellIsHexOrDecimalNumber(CurrentParam, TRUE, FALSE)) {\r
             ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, CurrentParam);\r
             ShellStatus = SHELL_INVALID_PARAMETER;\r
           } else {\r
-            CurrentOperation.Number1     = (UINT16)StrHexToUintn(CurrentParam);\r
+            Status = ShellConvertStringToUint64(CurrentParam, &Intermediate, TRUE, FALSE);\r
+            CurrentOperation.Number1     = (UINT16)Intermediate;\r
             CurrentParam = ShellCommandLineGetRawValue(Package, ++ParamNumber);\r
             if (CurrentParam == NULL || !ShellIsHexOrDecimalNumber(CurrentParam, TRUE, FALSE)) {\r
               ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, CurrentParam);\r
               ShellStatus = SHELL_INVALID_PARAMETER;\r
             } else {\r
-              CurrentOperation.HandleIndex = (UINT16)StrHexToUintn(CurrentParam);\r
+              Status = ShellConvertStringToUint64(CurrentParam, &Intermediate, TRUE, FALSE);\r
+              CurrentOperation.HandleIndex = (UINT16)Intermediate;\r
               ASSERT(CurrentOperation.Description == NULL);\r
               CurrentOperation.Description = StrnCatGrow(&CurrentOperation.Description, NULL, ShellCommandLineGetRawValue(Package, ++ParamNumber), 0);\r
             }\r
@@ -685,13 +784,14 @@ ShellCommandRunBcfg (
             ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle);\r
             ShellStatus = SHELL_INVALID_PARAMETER;\r
           }\r
-          CurrentOperation.Type = BCFG_TYPE_RM;\r
+          CurrentOperation.Type = BcfgTypeRm;\r
           CurrentParam = ShellCommandLineGetRawValue(Package, ++ParamNumber);\r
           if (CurrentParam == NULL || !ShellIsHexOrDecimalNumber(CurrentParam, TRUE, FALSE)) {\r
             ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, CurrentParam);\r
             ShellStatus = SHELL_INVALID_PARAMETER;\r
           } else {\r
-            CurrentOperation.Number1     = (UINT16)StrHexToUintn(CurrentParam);\r
+            Status = ShellConvertStringToUint64(CurrentParam, &Intermediate, TRUE, FALSE);\r
+            CurrentOperation.Number1     = (UINT16)Intermediate;\r
             if (CurrentOperation.Number1 > (Length / sizeof(CurrentOperation.Order[0]))){\r
               ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_NUMB_RANGE), gShellDebug1HiiHandle, Length / sizeof(CurrentOperation.Order[0]));\r
               ShellStatus = SHELL_INVALID_PARAMETER;\r
@@ -702,13 +802,14 @@ ShellCommandRunBcfg (
             ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle);\r
             ShellStatus = SHELL_INVALID_PARAMETER;\r
           }\r
-          CurrentOperation.Type = BCFG_TYPE_MV;\r
+          CurrentOperation.Type = BcfgTypeMv;\r
           CurrentParam = ShellCommandLineGetRawValue(Package, ++ParamNumber);\r
           if (CurrentParam == NULL || !ShellIsHexOrDecimalNumber(CurrentParam, TRUE, FALSE)) {\r
             ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, CurrentParam);\r
             ShellStatus = SHELL_INVALID_PARAMETER;\r
           } else {\r
-            CurrentOperation.Number1     = (UINT16)StrHexToUintn(CurrentParam);\r
+            Status = ShellConvertStringToUint64(CurrentParam, &Intermediate, TRUE, FALSE);\r
+            CurrentOperation.Number1     = (UINT16)Intermediate;\r
             if (CurrentOperation.Number1 > (Length / sizeof(CurrentOperation.Order[0]))){\r
               ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_NUMB_RANGE), gShellDebug1HiiHandle, Length / sizeof(CurrentOperation.Order[0]));\r
               ShellStatus = SHELL_INVALID_PARAMETER;\r
@@ -718,7 +819,8 @@ ShellCommandRunBcfg (
               ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, CurrentParam);\r
               ShellStatus = SHELL_INVALID_PARAMETER;\r
             } else {\r
-              CurrentOperation.Number2     = (UINT16)StrHexToUintn(CurrentParam);\r
+              Status = ShellConvertStringToUint64(CurrentParam, &Intermediate, TRUE, FALSE);\r
+              CurrentOperation.Number2     = (UINT16)Intermediate;\r
             }\r
             if (CurrentOperation.Number2 == CurrentOperation.Number1\r
               ||CurrentOperation.Number1 > (Length / sizeof(CurrentOperation.Order[0]))\r
@@ -734,47 +836,52 @@ ShellCommandRunBcfg (
         }\r
       }\r
     }\r
-    if (ShellStatus == SHELL_SUCCESS && CurrentOperation.Target < BCFG_TARGET_MAX && CurrentOperation.Type < BCFG_TYPE_MAX) {\r
+    if (ShellStatus == SHELL_SUCCESS && CurrentOperation.Target < BcfgTargetMax && CurrentOperation.Type < BcfgTypeMax) {\r
       //\r
       // we have all the info.  Do the work\r
       //\r
       switch (CurrentOperation.Type) {\r
-        case   BCFG_TYPE_DUMP:\r
-          ShellStatus = BcfgDisplayDump(\r
-            CurrentOperation.Target == BCFG_TARGET_BOOT_ORDER?L"Boot":L"Driver",\r
+        case   BcfgTypeDump:\r
+          ShellStatus = BcfgDisplayDumpDebug1(\r
+            CurrentOperation.Target == BcfgTargetBootOrder?L"Boot":L"Driver",\r
             Length / sizeof(CurrentOperation.Order[0]),\r
+            CurrentOperation.Order,\r
             ShellCommandLineGetFlag(Package, L"-v"));\r
           break;\r
-        case   BCFG_TYPE_MV:\r
-          ShellStatus = BcfgMove(\r
+        case   BcfgTypeMv:\r
+          ShellStatus = BcfgMoveDebug1(\r
             CurrentOperation.Target,\r
             CurrentOperation.Order,\r
             Length / sizeof(CurrentOperation.Order[0]),\r
             CurrentOperation.Number1,\r
             CurrentOperation.Number2);\r
           break;\r
-        case   BCFG_TYPE_RM:\r
-          ShellStatus = BcfgRemove(\r
+        case   BcfgTypeRm:\r
+          ShellStatus = BcfgRemoveDebug1(\r
             CurrentOperation.Target,\r
             CurrentOperation.Order,\r
             Length / sizeof(CurrentOperation.Order[0]),\r
             CurrentOperation.Number1);\r
           break;\r
-        case   BCFG_TYPE_ADD:\r
-        case   BCFG_TYPE_ADDP:\r
-        case   BCFG_TYPE_ADDH:\r
-          ShellStatus = BcfgAdd(\r
+        case   BcfgTypeAdd:\r
+        case   BcfgTypeAddp:\r
+        case   BcfgTypeAddh:\r
+          ShellStatus = BcfgAddDebug1(\r
             CurrentOperation.Number1,\r
             CurrentOperation.FileName,\r
             CurrentOperation.Description,\r
             CurrentOperation.Order,\r
-            Length,\r
+            Length / sizeof(CurrentOperation.Order[0]),\r
             CurrentOperation.Target,\r
-            (BOOLEAN)(CurrentOperation.Type == BCFG_TYPE_ADDH),\r
-            (BOOLEAN)(CurrentOperation.Type == BCFG_TYPE_ADDP),\r
+            (BOOLEAN)(CurrentOperation.Type == BcfgTypeAddh),\r
+            (BOOLEAN)(CurrentOperation.Type == BcfgTypeAddp),\r
             CurrentOperation.HandleIndex);\r
           break;\r
-        case   BCFG_TYPE_OPT:\r
+        case   BcfgTypeOpt:\r
+          ShellStatus = BcfgAddOptDebug1(\r
+            CurrentOperation.OptData,\r
+            CurrentOperation.Target);\r
+          break;\r
         default:\r
           ASSERT(FALSE);\r
       }\r
index c6933e6095b8ab73932ccbcb643a45e98c4d1e0b..b59ef31682c5917bd072eda03c4bda874c7231af 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Main file for Comp shell Debug1 function.\r
 \r
-  Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2010 - 2011, 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
 \r
 #include "UefiShellDebug1CommandsLib.h"\r
 \r
+/**\r
+  Function for 'comp' command.\r
+\r
+  @param[in] ImageHandle  Handle to the Image (NULL if Internal).\r
+  @param[in] SystemTable  Pointer to the System Table (NULL if Internal).\r
+**/\r
 SHELL_STATUS\r
 EFIAPI\r
 ShellCommandRunComp (\r
@@ -83,24 +89,26 @@ ShellCommandRunComp (
       ShellStatus = SHELL_INVALID_PARAMETER;\r
     } else {\r
       FileName1 = ShellFindFilePath(ShellCommandLineGetRawValue(Package, 1));\r
-      FileName2 = ShellFindFilePath(ShellCommandLineGetRawValue(Package, 2));\r
-      Status = ShellOpenFileByName(FileName1, &FileHandle1, EFI_FILE_MODE_READ, 0);\r
-      if (EFI_ERROR(Status)) {\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_OPEN_FAIL), gShellDebug1HiiHandle, ShellCommandLineGetRawValue(Package, 1), Status);\r
+      if (FileName1 == NULL) {\r
+        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_FIND_FAIL), gShellDebug1HiiHandle, ShellCommandLineGetRawValue(Package, 1));\r
         ShellStatus = SHELL_NOT_FOUND;\r
+      } else {\r
+        Status = ShellOpenFileByName(FileName1, &FileHandle1, EFI_FILE_MODE_READ, 0);\r
+        if (EFI_ERROR(Status)) {\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_OPEN_FAIL), gShellDebug1HiiHandle, ShellCommandLineGetRawValue(Package, 1), Status);\r
+          ShellStatus = SHELL_NOT_FOUND;\r
+        }\r
       }\r
-      Status = ShellOpenFileByName(FileName2, &FileHandle2, EFI_FILE_MODE_READ, 0);\r
-      if (EFI_ERROR(Status)) {\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_OPEN_FAIL), gShellDebug1HiiHandle, ShellCommandLineGetRawValue(Package, 2), Status);\r
+      FileName2 = ShellFindFilePath(ShellCommandLineGetRawValue(Package, 2));\r
+      if (FileName2 == NULL) {\r
+        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_FIND_FAIL), gShellDebug1HiiHandle, ShellCommandLineGetRawValue(Package, 2));\r
         ShellStatus = SHELL_NOT_FOUND;\r
-      }\r
-      if (FileHandleIsDirectory(FileHandle1) == EFI_SUCCESS){\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_NOT_DIR), gShellDebug1HiiHandle, FileName1);\r
-        ShellStatus = SHELL_INVALID_PARAMETER;\r
-      }\r
-      if (FileHandleIsDirectory(FileHandle2) == EFI_SUCCESS){\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_NOT_DIR), gShellDebug1HiiHandle, FileName2);\r
-        ShellStatus = SHELL_INVALID_PARAMETER;\r
+      } else {\r
+        Status = ShellOpenFileByName(FileName2, &FileHandle2, EFI_FILE_MODE_READ, 0);\r
+        if (EFI_ERROR(Status)) {\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_OPEN_FAIL), gShellDebug1HiiHandle, ShellCommandLineGetRawValue(Package, 2), Status);\r
+          ShellStatus = SHELL_NOT_FOUND;\r
+        }\r
       }\r
       if (ShellStatus == SHELL_SUCCESS) {\r
         ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_COMP_HEADER), gShellDebug1HiiHandle, FileName1, FileName2);\r
@@ -228,22 +236,19 @@ ShellCommandRunComp (
             ShellStatus = SHELL_NOT_EQUAL;\r
           }\r
         }\r
-      }\r
-      if (ErrorCount == 0) {\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_COMP_FOOTER_PASS), gShellDebug1HiiHandle);\r
-      } else {\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_COMP_FOOTER_FAIL), gShellDebug1HiiHandle);\r
+        if (ErrorCount == 0) {\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_COMP_FOOTER_PASS), gShellDebug1HiiHandle);\r
+        } else {\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_COMP_FOOTER_FAIL), gShellDebug1HiiHandle);\r
+        }\r
       }\r
     }\r
 \r
     ShellCommandLineFreeVarList (Package);\r
   }\r
-  if (FileName1 != NULL) {\r
-    FreePool(FileName1);\r
-  }\r
-  if (FileName2 != NULL) {\r
-    FreePool(FileName2);\r
-  }\r
+  SHELL_FREE_NON_NULL(FileName1);\r
+  SHELL_FREE_NON_NULL(FileName2);\r
+\r
   if (FileHandle1 != NULL) {\r
     gEfiShellProtocol->CloseFile(FileHandle1);\r
   }\r
index 9e880e6d6b5eecc13db7d061f6a56037c96c07fa..870335b9a1403476e4a6358006a522ccbc8fccac 100644 (file)
@@ -7,7 +7,7 @@
   This sequence is further divided into Blocks and Huffman codings\r
   are applied to each Block.\r
 \r
-  Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2007 - 2011, 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
@@ -39,9 +39,9 @@ typedef INT16             NODE;
 #define CODE_BIT          16\r
 #define NIL               0\r
 #define MAX_HASH_VAL      (3 * WNDSIZ + (WNDSIZ / 512 + 1) * UINT8_MAX)\r
-#define HASH(p, c)        ((p) + ((c) << (WNDBIT - 9)) + WNDSIZ * 2)\r
+#define HASH(LoopVar7, LoopVar5)        ((LoopVar7) + ((LoopVar5) << (WNDBIT - 9)) + WNDSIZ * 2)\r
 #define CRCPOLY           0xA001\r
-#define UPDATE_CRC(c)     mCrc = mCrcTable[(mCrc ^ (c)) & 0xFF] ^ (mCrc >> UINT8_BIT)\r
+#define UPDATE_CRC(LoopVar5)     mCrc = mCrcTable[(mCrc ^ (LoopVar5)) & 0xFF] ^ (mCrc >> UINT8_BIT)\r
 \r
 //\r
 // C: the Char&Len Set; P: the Position Set; T: the exTra Set\r
@@ -72,287 +72,85 @@ PutDword(
   IN UINT32 Data\r
   );\r
 \r
-EFI_STATUS\r
-EFIAPI\r
-AllocateMemory (\r
-  VOID\r
-  );\r
-\r
-VOID\r
-EFIAPI\r
-FreeMemory (\r
-  VOID\r
-  );\r
-\r
-VOID\r
-EFIAPI\r
-InitSlide (\r
-  VOID\r
-  );\r
-\r
-NODE\r
-EFIAPI\r
-Child (\r
-  IN NODE   q,\r
-  IN UINT8  c\r
-  );\r
-\r
-VOID\r
-EFIAPI\r
-MakeChild (\r
-  IN NODE   q,\r
-  IN UINT8  c,\r
-  IN NODE   r\r
-  );\r
-\r
-VOID\r
-EFIAPI\r
-Split (\r
-  IN NODE Old\r
-  );\r
-\r
-VOID\r
-EFIAPI\r
-InsertNode (\r
-  VOID\r
-  );\r
-\r
-VOID\r
-EFIAPI\r
-DeleteNode (\r
-  VOID\r
-  );\r
-\r
-VOID\r
-EFIAPI\r
-GetNextMatch (\r
-  VOID\r
-  );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-Encode (\r
-  VOID\r
-  );\r
-\r
-VOID\r
-EFIAPI\r
-CountTFreq (\r
-  VOID\r
-  );\r
-\r
-VOID\r
-EFIAPI\r
-WritePTLen (\r
-  IN INT32 n,\r
-  IN INT32 nbit,\r
-  IN INT32 Special\r
-  );\r
-\r
-VOID\r
-EFIAPI\r
-WriteCLen (\r
-  VOID\r
-  );\r
-\r
-VOID\r
-EFIAPI\r
-EncodeC (\r
-  IN INT32 c\r
-  );\r
-\r
-VOID\r
-EFIAPI\r
-EncodeP (\r
-  IN UINT32 p\r
-  );\r
-\r
-VOID\r
-EFIAPI\r
-SendBlock (\r
-  VOID\r
-  );\r
-\r
-VOID\r
-EFIAPI\r
-CompressOutput (\r
-  IN UINT32 c,\r
-  IN UINT32 p\r
-  );\r
-\r
-VOID\r
-EFIAPI\r
-HufEncodeStart (\r
-  VOID\r
-  );\r
-\r
-VOID\r
-EFIAPI\r
-HufEncodeEnd (\r
-  VOID\r
-  );\r
-\r
-VOID\r
-EFIAPI\r
-MakeCrcTable (\r
-  VOID\r
-  );\r
-\r
-VOID\r
-EFIAPI\r
-PutBits (\r
-  IN INT32    n,\r
-  IN UINT32   x\r
-  );\r
-\r
-INT32\r
-EFIAPI\r
-FreadCrc (\r
-  OUT UINT8 *p,\r
-  IN  INT32 n\r
-  );\r
-\r
-VOID\r
-EFIAPI\r
-InitPutBits (\r
-  VOID\r
-  );\r
-\r
-VOID\r
-EFIAPI\r
-CountLen (\r
-  IN INT32 i\r
-  );\r
-\r
-VOID\r
-EFIAPI\r
-MakeLen (\r
-  IN INT32 Root\r
-  );\r
-\r
-VOID\r
-EFIAPI\r
-DownHeap (\r
-  IN INT32 i\r
-  );\r
-\r
-VOID\r
-EFIAPI\r
-MakeCode (\r
-  IN  INT32         n,\r
-  IN  UINT8 Len[    ],\r
-  OUT UINT16 Code[  ]\r
-  );\r
-\r
-INT32\r
-EFIAPI\r
-MakeTree (\r
-  IN  INT32             NParm,\r
-  IN  UINT16  FreqParm[ ],\r
-  OUT UINT8   LenParm[  ],\r
-  OUT UINT16  CodeParm[ ]\r
-  );\r
-\r
 //\r
 //  Global Variables\r
 //\r
-STATIC UINT8  *mSrc, *mDst, *mSrcUpperLimit, *mDstUpperLimit;\r
-\r
-STATIC UINT8  *mLevel, *mText, *mChildCount, *mBuf, mCLen[NC], mPTLen[NPT], *mLen;\r
+STATIC UINT8  *mSrc;\r
+STATIC UINT8  *mDst;\r
+STATIC UINT8  *mSrcUpperLimit;\r
+STATIC UINT8  *mDstUpperLimit;\r
+\r
+STATIC UINT8  *mLevel;\r
+STATIC UINT8  *mText;\r
+STATIC UINT8  *mChildCount;\r
+STATIC UINT8  *mBuf;\r
+STATIC UINT8  mCLen[NC];\r
+STATIC UINT8  mPTLen[NPT];\r
+STATIC UINT8  *mLen;\r
 STATIC INT16  mHeap[NC + 1];\r
-STATIC INT32  mRemainder, mMatchLen, mBitCount, mHeapSize, mN;\r
-STATIC UINT32 mBufSiz = 0, mOutputPos, mOutputMask, mSubBitBuf, mCrc;\r
-STATIC UINT32 mCompSize, mOrigSize;\r
-\r
-STATIC UINT16 *mFreq, *mSortPtr, mLenCnt[17], mLeft[2 * NC - 1], mRight[2 * NC - 1],\r
-              mCrcTable[UINT8_MAX + 1], mCFreq[2 * NC - 1], mCTable[4096], mCCode[NC],\r
-              mPFreq[2 * NP - 1], mPTCode[NPT], mTFreq[2 * NT - 1];\r
+STATIC INT32  mRemainder;\r
+STATIC INT32  mMatchLen;\r
+STATIC INT32  mBitCount;\r
+STATIC INT32  mHeapSize;\r
+STATIC INT32  mTempInt32;\r
+STATIC UINT32 mBufSiz = 0;\r
+STATIC UINT32 mOutputPos;\r
+STATIC UINT32 mOutputMask;\r
+STATIC UINT32 mSubBitBuf;\r
+STATIC UINT32 mCrc;\r
+STATIC UINT32 mCompSize;\r
+STATIC UINT32 mOrigSize;\r
+\r
+STATIC UINT16 *mFreq;\r
+STATIC UINT16 *mSortPtr;\r
+STATIC UINT16 mLenCnt[17];\r
+STATIC UINT16 mLeft[2 * NC - 1];\r
+STATIC UINT16 mRight[2 * NC - 1];\r
+STATIC UINT16 mCrcTable[UINT8_MAX + 1];\r
+STATIC UINT16 mCFreq[2 * NC - 1];\r
+STATIC UINT16 mCTable[4096];\r
+STATIC UINT16 mCCode[NC];\r
+STATIC UINT16 mPFreq[2 * NP - 1];\r
+STATIC UINT16 mPTCode[NPT];\r
+STATIC UINT16 mTFreq[2 * NT - 1];\r
+\r
+STATIC NODE   mPos;\r
+STATIC NODE   mMatchPos;\r
+STATIC NODE   mAvail;\r
+STATIC NODE   *mPosition;\r
+STATIC NODE   *mParent;\r
+STATIC NODE   *mPrev;\r
+STATIC NODE   *mNext = NULL;\r
+INT32         mHuffmanDepth = 0;\r
 \r
-STATIC NODE   mPos, mMatchPos, mAvail, *mPosition, *mParent, *mPrev, *mNext = NULL;\r
-\r
-//\r
-// functions\r
-//\r
 /**\r
-  The compression routine.\r
-\r
-  @param[in]      SrcBuffer     The buffer containing the source data.\r
-  @param[in]      SrcSizae      Number of bytes in SrcBuffer.\r
-  @param[in]      DstBuffer     The buffer to put the compressed image in.\r
-  @param[in,out]  DstSize       On input the size (in bytes) of DstBuffer, on\r
-                                return the number of bytes placed in DstBuffer.\r
+  Make a CRC table.\r
 \r
-  @retval EFI_SUCCESS           The compression was sucessful.\r
-  @retval EFI_BUFFER_TOO_SMALL  The buffer was too small.  DstSize is required.\r
 **/\r
-EFI_STATUS\r
+VOID\r
 EFIAPI\r
-Compress (\r
-  IN       VOID   *SrcBuffer,\r
-  IN       UINT64 SrcSize,\r
-  IN       VOID   *DstBuffer,\r
-  IN OUT   UINT64 *DstSize\r
+MakeCrcTable (\r
+  VOID\r
   )\r
 {\r
-  EFI_STATUS  Status;\r
-\r
-  //\r
-  // Initializations\r
-  //\r
-  mBufSiz         = 0;\r
-  mBuf            = NULL;\r
-  mText           = NULL;\r
-  mLevel          = NULL;\r
-  mChildCount     = NULL;\r
-  mPosition       = NULL;\r
-  mParent         = NULL;\r
-  mPrev           = NULL;\r
-  mNext           = NULL;\r
-\r
-  mSrc            = SrcBuffer;\r
-  mSrcUpperLimit  = mSrc + SrcSize;\r
-  mDst            = DstBuffer;\r
-  mDstUpperLimit  = mDst +*DstSize;\r
-\r
-  PutDword (0L);\r
-  PutDword (0L);\r
+  UINT32  LoopVar1;\r
 \r
-  MakeCrcTable ();\r
+  UINT32  LoopVar2;\r
 \r
-  mOrigSize             = mCompSize = 0;\r
-  mCrc                  = INIT_CRC;\r
+  UINT32  LoopVar4;\r
 \r
-  //\r
-  // Compress it\r
-  //\r
-  Status = Encode ();\r
-  if (EFI_ERROR (Status)) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-  //\r
-  // Null terminate the compressed data\r
-  //\r
-  if (mDst < mDstUpperLimit) {\r
-    *mDst++ = 0;\r
-  }\r
-  //\r
-  // Fill in compressed size and original size\r
-  //\r
-  mDst = DstBuffer;\r
-  PutDword (mCompSize + 1);\r
-  PutDword (mOrigSize);\r
+  for (LoopVar1 = 0; LoopVar1 <= UINT8_MAX; LoopVar1++) {\r
+    LoopVar4 = LoopVar1;\r
+    for (LoopVar2 = 0; LoopVar2 < UINT8_BIT; LoopVar2++) {\r
+      if ((LoopVar4 & 1) != 0) {\r
+        LoopVar4 = (LoopVar4 >> 1) ^ CRCPOLY;\r
+      } else {\r
+        LoopVar4 >>= 1;\r
+      }\r
+    }\r
 \r
-  //\r
-  // Return\r
-  //\r
-  if (mCompSize + 1 + 8 > *DstSize) {\r
-    *DstSize = mCompSize + 1 + 8;\r
-    return EFI_BUFFER_TOO_SMALL;\r
-  } else {\r
-    *DstSize = mCompSize + 1 + 8;\r
-    return EFI_SUCCESS;\r
+    mCrcTable[LoopVar1] = (UINT16) LoopVar4;\r
   }\r
-\r
 }\r
 \r
 /**\r
@@ -383,45 +181,35 @@ PutDword (
   }\r
 }\r
 \r
+/**\r
+  Allocate memory spaces for data structures used in compression process.\r
+  \r
+  @retval EFI_SUCCESS           Memory was allocated successfully.\r
+  @retval EFI_OUT_OF_RESOURCES  A memory allocation failed.\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 AllocateMemory (\r
   VOID\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Allocate memory spaces for data structures used in compression process\r
-\r
-Arguments:\r
-\r
-  None\r
-\r
-Returns:\r
-\r
-  EFI_SUCCESS           - Memory is allocated successfully\r
-  EFI_OUT_OF_RESOURCES  - Allocation fails\r
-\r
-**/\r
 {\r
   mText       = AllocateZeroPool (WNDSIZ * 2 + MAXMATCH);\r
-  mLevel      = AllocatePool ((WNDSIZ + UINT8_MAX + 1) * sizeof (*mLevel));\r
-  mChildCount = AllocatePool ((WNDSIZ + UINT8_MAX + 1) * sizeof (*mChildCount));\r
-  mPosition   = AllocatePool ((WNDSIZ + UINT8_MAX + 1) * sizeof (*mPosition));\r
-  mParent     = AllocatePool (WNDSIZ * 2 * sizeof (*mParent));\r
-  mPrev       = AllocatePool (WNDSIZ * 2 * sizeof (*mPrev));\r
-  mNext       = AllocatePool ((MAX_HASH_VAL + 1) * sizeof (*mNext));\r
+  mLevel      = AllocateZeroPool ((WNDSIZ + UINT8_MAX + 1) * sizeof (*mLevel));\r
+  mChildCount = AllocateZeroPool ((WNDSIZ + UINT8_MAX + 1) * sizeof (*mChildCount));\r
+  mPosition   = AllocateZeroPool ((WNDSIZ + UINT8_MAX + 1) * sizeof (*mPosition));\r
+  mParent     = AllocateZeroPool (WNDSIZ * 2 * sizeof (*mParent));\r
+  mPrev       = AllocateZeroPool (WNDSIZ * 2 * sizeof (*mPrev));\r
+  mNext       = AllocateZeroPool ((MAX_HASH_VAL + 1) * sizeof (*mNext));\r
 \r
   mBufSiz     = BLKSIZ;\r
-  mBuf        = AllocatePool (mBufSiz);\r
+  mBuf        = AllocateZeroPool (mBufSiz);\r
   while (mBuf == NULL) {\r
     mBufSiz = (mBufSiz / 10U) * 9U;\r
     if (mBufSiz < 4 * 1024U) {\r
       return EFI_OUT_OF_RESOURCES;\r
     }\r
 \r
-    mBuf = AllocatePool (mBufSiz);\r
+    mBuf = AllocateZeroPool (mBufSiz);\r
   }\r
 \r
   mBuf[0] = 0;\r
@@ -429,22 +217,15 @@ Returns:
   return EFI_SUCCESS;\r
 }\r
 \r
-VOID\r
+/**\r
+  Called when compression is completed to free memory previously allocated.\r
+\r
+**/\r
+VOID\r
 EFIAPI\r
 FreeMemory (\r
   VOID\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Called when compression is completed to free memory previously allocated.\r
-\r
-Arguments: (VOID)\r
-\r
-Returns: (VOID)\r
-\r
-**/\r
 {\r
   SHELL_FREE_NON_NULL (mText);\r
   SHELL_FREE_NON_NULL (mLevel);\r
@@ -456,24 +237,17 @@ Returns: (VOID)
   SHELL_FREE_NON_NULL (mBuf);\r
 }\r
 \r
+/**\r
+  Initialize String Info Log data structures\r
+\r
+**/\r
 VOID\r
 EFIAPI\r
 InitSlide (\r
   VOID\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Initialize String Info Log data structures\r
-\r
-Arguments: (VOID)\r
-\r
-Returns: (VOID)\r
-\r
-**/\r
 {\r
-  NODE  i;\r
+  NODE  LoopVar1;\r
 \r
   SetMem (mLevel + WNDSIZ, (UINT8_MAX + 1) * sizeof (UINT8), 1);\r
   SetMem (mPosition + WNDSIZ, (UINT8_MAX + 1) * sizeof (NODE), 0);\r
@@ -481,117 +255,95 @@ Returns: (VOID)
   SetMem (mParent + WNDSIZ, WNDSIZ * sizeof (NODE), 0);\r
 \r
   mAvail = 1;\r
-  for (i = 1; i < WNDSIZ - 1; i++) {\r
-    mNext[i] = (NODE) (i + 1);\r
+  for (LoopVar1 = 1; LoopVar1 < WNDSIZ - 1; LoopVar1++) {\r
+    mNext[LoopVar1] = (NODE) (LoopVar1 + 1);\r
   }\r
 \r
   mNext[WNDSIZ - 1] = NIL;\r
   SetMem (mNext + WNDSIZ * 2, (MAX_HASH_VAL - WNDSIZ * 2 + 1) * sizeof (NODE), 0);\r
 }\r
 \r
-NODE\r
-EFIAPI\r
-Child (\r
-  IN NODE   q,\r
-  IN UINT8  c\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
+/**\r
   Find child node given the parent node and the edge character\r
 \r
-Arguments:\r
-\r
-  q       - the parent node\r
-  c       - the edge character\r
-\r
-Returns:\r
+  @param[in] LoopVar6       The parent node.\r
+  @param[in] LoopVar5       The edge character.\r
 \r
-  The child node (NIL if not found)\r
+  @return             The child node.\r
+  @retval NIL(Zero)   No child could be found.\r
 \r
 **/\r
+NODE\r
+EFIAPI\r
+Child (\r
+  IN NODE   LoopVar6,\r
+  IN UINT8  LoopVar5\r
+  )\r
 {\r
-  NODE  r;\r
+  NODE  LoopVar4;\r
 \r
-  r             = mNext[HASH (q, c)];\r
-  mParent[NIL]  = q;  /* sentinel */\r
-  while (mParent[r] != q) {\r
-    r = mNext[r];\r
+  LoopVar4             = mNext[HASH (LoopVar6, LoopVar5)];\r
+  mParent[NIL]  = LoopVar6;  /* sentinel */\r
+  while (mParent[LoopVar4] != LoopVar6) {\r
+    LoopVar4 = mNext[LoopVar4];\r
   }\r
 \r
-  return r;\r
+  return LoopVar4;\r
 }\r
 \r
+/**\r
+  Create a new child for a given parent node.\r
+\r
+  @param[in] LoopVar6       The parent node.\r
+  @param[in] LoopVar5       The edge character.\r
+  @param[in] LoopVar4       The child node.\r
+**/\r
 VOID\r
 EFIAPI\r
 MakeChild (\r
-  IN NODE   q,\r
-  IN UINT8  c,\r
-  IN NODE   r\r
+  IN NODE   LoopVar6,\r
+  IN UINT8  LoopVar5,\r
+  IN NODE   LoopVar4\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Create a new child for a given parent node.\r
-\r
-Arguments:\r
-\r
-  q       - the parent node\r
-  c       - the edge character\r
-  r       - the child node\r
-\r
-Returns: (VOID)\r
-\r
-**/\r
 {\r
-  NODE  h;\r
-\r
-  NODE  t;\r
-\r
-  h           = (NODE) HASH (q, c);\r
-  t           = mNext[h];\r
-  mNext[h]    = r;\r
-  mNext[r]    = t;\r
-  mPrev[t]    = r;\r
-  mPrev[r]    = h;\r
-  mParent[r]  = q;\r
-  mChildCount[q]++;\r
+  NODE  LoopVar12;\r
+\r
+  NODE  LoopVar10;\r
+\r
+  LoopVar12          = (NODE) HASH (LoopVar6, LoopVar5);\r
+  LoopVar10          = mNext[LoopVar12];\r
+  mNext[LoopVar12]   = LoopVar4;\r
+  mNext[LoopVar4]    = LoopVar10;\r
+  mPrev[LoopVar10]   = LoopVar4;\r
+  mPrev[LoopVar4]    = LoopVar12;\r
+  mParent[LoopVar4]  = LoopVar6;\r
+  mChildCount[LoopVar6]++;\r
 }\r
 \r
+/**\r
+  Split a node.\r
+\r
+  @param[in] Old     The node to split.\r
+**/\r
 VOID\r
 EFIAPI\r
 Split (\r
-  NODE Old\r
+  IN NODE Old\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Split a node.\r
-\r
-Arguments:\r
-\r
-  Old     - the node to split\r
-\r
-Returns: (VOID)\r
-\r
-**/\r
 {\r
   NODE  New;\r
 \r
-  NODE  t;\r
+  NODE  LoopVar10;\r
 \r
   New               = mAvail;\r
   mAvail            = mNext[New];\r
   mChildCount[New]  = 0;\r
-  t                 = mPrev[Old];\r
-  mPrev[New]        = t;\r
-  mNext[t]          = New;\r
-  t                 = mNext[Old];\r
-  mNext[New]        = t;\r
-  mPrev[t]          = New;\r
+  LoopVar10                 = mPrev[Old];\r
+  mPrev[New]        = LoopVar10;\r
+  mNext[LoopVar10]          = New;\r
+  LoopVar10                 = mNext[Old];\r
+  mNext[New]        = LoopVar10;\r
+  mPrev[LoopVar10]          = New;\r
   mParent[New]      = mParent[Old];\r
   mLevel[New]       = (UINT8) mMatchLen;\r
   mPosition[New]    = mPos;\r
@@ -599,33 +351,26 @@ Returns: (VOID)
   MakeChild (New, mText[mPos + mMatchLen], mPos);\r
 }\r
 \r
+/**\r
+  Insert string info for current position into the String Info Log.\r
+\r
+**/\r
 VOID\r
 EFIAPI\r
 InsertNode (\r
   VOID\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Insert string info for current position into the String Info Log\r
-\r
-Arguments: (VOID)\r
-\r
-Returns: (VOID)\r
-\r
-**/\r
 {\r
-  NODE  q;\r
+  NODE  LoopVar6;\r
 \r
-  NODE  r;\r
+  NODE  LoopVar4;\r
 \r
-  NODE  j;\r
+  NODE  LoopVar2;\r
 \r
-  NODE  t;\r
-  UINT8 c;\r
-  UINT8 *t1;\r
-  UINT8 *t2;\r
+  NODE  LoopVar10;\r
+  UINT8 LoopVar5;\r
+  UINT8 *TempString3;\r
+  UINT8 *TempString2;\r
 \r
   if (mMatchLen >= 4) {\r
     //\r
@@ -636,36 +381,36 @@ Returns: (VOID)
     // in DeleteNode() later.\r
     //\r
     mMatchLen--;\r
-    r = (NODE) ((mMatchPos + 1) | WNDSIZ);\r
-    q = mParent[r];\r
-    while (q == NIL) {\r
-      r = mNext[r];\r
-      q = mParent[r];\r
+    LoopVar4 = (NODE) ((mMatchPos + 1) | WNDSIZ);\r
+    LoopVar6 = mParent[LoopVar4];\r
+    while (LoopVar6 == NIL) {\r
+      LoopVar4 = mNext[LoopVar4];\r
+      LoopVar6 = mParent[LoopVar4];\r
     }\r
 \r
-    while (mLevel[q] >= mMatchLen) {\r
-      r = q;\r
-      q = mParent[q];\r
+    while (mLevel[LoopVar6] >= mMatchLen) {\r
+      LoopVar4 = LoopVar6;\r
+      LoopVar6 = mParent[LoopVar6];\r
     }\r
 \r
-    t = q;\r
-    while (mPosition[t] < 0) {\r
-      mPosition[t]  = mPos;\r
-      t             = mParent[t];\r
+    LoopVar10 = LoopVar6;\r
+    while (mPosition[LoopVar10] < 0) {\r
+      mPosition[LoopVar10]  = mPos;\r
+      LoopVar10             = mParent[LoopVar10];\r
     }\r
 \r
-    if (t < WNDSIZ) {\r
-      mPosition[t] = (NODE) (mPos | PERC_FLAG);\r
+    if (LoopVar10 < WNDSIZ) {\r
+      mPosition[LoopVar10] = (NODE) (mPos | PERC_FLAG);\r
     }\r
   } else {\r
     //\r
     // Locate the target tree\r
     //\r
-    q = (NODE) (mText[mPos] + WNDSIZ);\r
-    c = mText[mPos + 1];\r
-    r = Child (q, c);\r
-    if (r == NIL) {\r
-      MakeChild (q, c, mPos);\r
+    LoopVar6 = (NODE) (mText[mPos] + WNDSIZ);\r
+    LoopVar5 = mText[mPos + 1];\r
+    LoopVar4 = Child (LoopVar6, LoopVar5);\r
+    if (LoopVar4 == NIL) {\r
+      MakeChild (LoopVar6, LoopVar5, mPos);\r
       mMatchLen = 1;\r
       return ;\r
     }\r
@@ -678,191 +423,211 @@ Returns: (VOID)
   // Node split or creation is involved.\r
   //\r
   for (;;) {\r
-    if (r >= WNDSIZ) {\r
-      j         = MAXMATCH;\r
-      mMatchPos = r;\r
+    if (LoopVar4 >= WNDSIZ) {\r
+      LoopVar2         = MAXMATCH;\r
+      mMatchPos = LoopVar4;\r
     } else {\r
-      j         = mLevel[r];\r
-      mMatchPos = (NODE) (mPosition[r] & ~PERC_FLAG);\r
+      LoopVar2         = mLevel[LoopVar4];\r
+      mMatchPos = (NODE) (mPosition[LoopVar4] & ~PERC_FLAG);\r
     }\r
 \r
     if (mMatchPos >= mPos) {\r
       mMatchPos -= WNDSIZ;\r
     }\r
 \r
-    t1  = &mText[mPos + mMatchLen];\r
-    t2  = &mText[mMatchPos + mMatchLen];\r
-    while (mMatchLen < j) {\r
-      if (*t1 != *t2) {\r
-        Split (r);\r
+    TempString3  = &mText[mPos + mMatchLen];\r
+    TempString2  = &mText[mMatchPos + mMatchLen];\r
+    while (mMatchLen < LoopVar2) {\r
+      if (*TempString3 != *TempString2) {\r
+        Split (LoopVar4);\r
         return ;\r
       }\r
 \r
       mMatchLen++;\r
-      t1++;\r
-      t2++;\r
+      TempString3++;\r
+      TempString2++;\r
     }\r
 \r
     if (mMatchLen >= MAXMATCH) {\r
       break;\r
     }\r
 \r
-    mPosition[r]  = mPos;\r
-    q             = r;\r
-    r             = Child (q, *t1);\r
-    if (r == NIL) {\r
-      MakeChild (q, *t1, mPos);\r
+    mPosition[LoopVar4]  = mPos;\r
+    LoopVar6             = LoopVar4;\r
+    LoopVar4             = Child (LoopVar6, *TempString3);\r
+    if (LoopVar4 == NIL) {\r
+      MakeChild (LoopVar6, *TempString3, mPos);\r
       return ;\r
     }\r
 \r
     mMatchLen++;\r
   }\r
 \r
-  t             = mPrev[r];\r
-  mPrev[mPos]   = t;\r
-  mNext[t]      = mPos;\r
-  t             = mNext[r];\r
-  mNext[mPos]   = t;\r
-  mPrev[t]      = mPos;\r
-  mParent[mPos] = q;\r
-  mParent[r]    = NIL;\r
+  LoopVar10             = mPrev[LoopVar4];\r
+  mPrev[mPos]   = LoopVar10;\r
+  mNext[LoopVar10]      = mPos;\r
+  LoopVar10             = mNext[LoopVar4];\r
+  mNext[mPos]   = LoopVar10;\r
+  mPrev[LoopVar10]      = mPos;\r
+  mParent[mPos] = LoopVar6;\r
+  mParent[LoopVar4]    = NIL;\r
 \r
   //\r
   // Special usage of 'next'\r
   //\r
-  mNext[r] = mPos;\r
+  mNext[LoopVar4] = mPos;\r
 \r
 }\r
 \r
+/**\r
+  Delete outdated string info. (The Usage of PERC_FLAG\r
+  ensures a clean deletion).\r
+\r
+**/\r
 VOID\r
 EFIAPI\r
 DeleteNode (\r
   VOID\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Delete outdated string info. (The Usage of PERC_FLAG\r
-  ensures a clean deletion)\r
-\r
-Arguments: (VOID)\r
-\r
-Returns: (VOID)\r
-\r
-**/\r
 {\r
-  NODE  q;\r
+  NODE  LoopVar6;\r
 \r
-  NODE  r;\r
+  NODE  LoopVar4;\r
 \r
-  NODE  s;\r
+  NODE  LoopVar11;\r
 \r
-  NODE  t;\r
+  NODE  LoopVar10;\r
 \r
-  NODE  u;\r
+  NODE  LoopVar9;\r
 \r
   if (mParent[mPos] == NIL) {\r
     return ;\r
   }\r
 \r
-  r             = mPrev[mPos];\r
-  s             = mNext[mPos];\r
-  mNext[r]      = s;\r
-  mPrev[s]      = r;\r
-  r             = mParent[mPos];\r
+  LoopVar4             = mPrev[mPos];\r
+  LoopVar11             = mNext[mPos];\r
+  mNext[LoopVar4]      = LoopVar11;\r
+  mPrev[LoopVar11]      = LoopVar4;\r
+  LoopVar4             = mParent[mPos];\r
   mParent[mPos] = NIL;\r
-  if (r >= WNDSIZ) {\r
+  if (LoopVar4 >= WNDSIZ) {\r
     return ;\r
   }\r
 \r
-  mChildCount[r]--;\r
-  if (mChildCount[r] > 1) {\r
+  mChildCount[LoopVar4]--;\r
+  if (mChildCount[LoopVar4] > 1) {\r
     return ;\r
   }\r
 \r
-  t = (NODE) (mPosition[r] & ~PERC_FLAG);\r
-  if (t >= mPos) {\r
-    t -= WNDSIZ;\r
+  LoopVar10 = (NODE) (mPosition[LoopVar4] & ~PERC_FLAG);\r
+  if (LoopVar10 >= mPos) {\r
+    LoopVar10 -= WNDSIZ;\r
   }\r
 \r
-  s = t;\r
-  q = mParent[r];\r
-  u = mPosition[q];\r
-  while ((u & PERC_FLAG) != 0){\r
-    u &= ~PERC_FLAG;\r
-    if (u >= mPos) {\r
-      u -= WNDSIZ;\r
+  LoopVar11 = LoopVar10;\r
+  LoopVar6 = mParent[LoopVar4];\r
+  LoopVar9 = mPosition[LoopVar6];\r
+  while ((LoopVar9 & PERC_FLAG) != 0){\r
+    LoopVar9 &= ~PERC_FLAG;\r
+    if (LoopVar9 >= mPos) {\r
+      LoopVar9 -= WNDSIZ;\r
     }\r
 \r
-    if (u > s) {\r
-      s = u;\r
+    if (LoopVar9 > LoopVar11) {\r
+      LoopVar11 = LoopVar9;\r
     }\r
 \r
-    mPosition[q]  = (NODE) (s | WNDSIZ);\r
-    q             = mParent[q];\r
-    u             = mPosition[q];\r
+    mPosition[LoopVar6]  = (NODE) (LoopVar11 | WNDSIZ);\r
+    LoopVar6             = mParent[LoopVar6];\r
+    LoopVar9             = mPosition[LoopVar6];\r
   }\r
 \r
-  if (q < WNDSIZ) {\r
-    if (u >= mPos) {\r
-      u -= WNDSIZ;\r
+  if (LoopVar6 < WNDSIZ) {\r
+    if (LoopVar9 >= mPos) {\r
+      LoopVar9 -= WNDSIZ;\r
     }\r
 \r
-    if (u > s) {\r
-      s = u;\r
+    if (LoopVar9 > LoopVar11) {\r
+      LoopVar11 = LoopVar9;\r
     }\r
 \r
-    mPosition[q] = (NODE) (s | WNDSIZ | PERC_FLAG);\r
+    mPosition[LoopVar6] = (NODE) (LoopVar11 | WNDSIZ | PERC_FLAG);\r
   }\r
 \r
-  s           = Child (r, mText[t + mLevel[r]]);\r
-  t           = mPrev[s];\r
-  u           = mNext[s];\r
-  mNext[t]    = u;\r
-  mPrev[u]    = t;\r
-  t           = mPrev[r];\r
-  mNext[t]    = s;\r
-  mPrev[s]    = t;\r
-  t           = mNext[r];\r
-  mPrev[t]    = s;\r
-  mNext[s]    = t;\r
-  mParent[s]  = mParent[r];\r
-  mParent[r]  = NIL;\r
-  mNext[r]    = mAvail;\r
-  mAvail      = r;\r
+  LoopVar11           = Child (LoopVar4, mText[LoopVar10 + mLevel[LoopVar4]]);\r
+  LoopVar10           = mPrev[LoopVar11];\r
+  LoopVar9           = mNext[LoopVar11];\r
+  mNext[LoopVar10]    = LoopVar9;\r
+  mPrev[LoopVar9]    = LoopVar10;\r
+  LoopVar10           = mPrev[LoopVar4];\r
+  mNext[LoopVar10]    = LoopVar11;\r
+  mPrev[LoopVar11]    = LoopVar10;\r
+  LoopVar10           = mNext[LoopVar4];\r
+  mPrev[LoopVar10]    = LoopVar11;\r
+  mNext[LoopVar11]    = LoopVar10;\r
+  mParent[LoopVar11]  = mParent[LoopVar4];\r
+  mParent[LoopVar4]  = NIL;\r
+  mNext[LoopVar4]    = mAvail;\r
+  mAvail      = LoopVar4;\r
 }\r
 \r
-VOID\r
+/**\r
+  Read in source data\r
+\r
+  @param[out] LoopVar7   The buffer to hold the data.\r
+  @param[in] LoopVar8    The number of bytes to read.\r
+\r
+  @return The number of bytes actually read.\r
+**/\r
+INT32\r
 EFIAPI\r
-GetNextMatch (\r
-  VOID\r
+FreadCrc (\r
+  OUT UINT8 *LoopVar7,\r
+  IN  INT32 LoopVar8\r
   )\r
-/*++\r
+{\r
+  INT32 LoopVar1;\r
 \r
-Routine Description:\r
+  for (LoopVar1 = 0; mSrc < mSrcUpperLimit && LoopVar1 < LoopVar8; LoopVar1++) {\r
+    *LoopVar7++ = *mSrc++;\r
+  }\r
 \r
-  Advance the current position (read in new data if needed).\r
-  Delete outdated string info. Find a match string for current position.\r
+  LoopVar8 = LoopVar1;\r
+\r
+  LoopVar7 -= LoopVar8;\r
+  mOrigSize += LoopVar8;\r
+  LoopVar1--;\r
+  while (LoopVar1 >= 0) {\r
+    UPDATE_CRC (*LoopVar7++);\r
+    LoopVar1--;\r
+  }\r
 \r
-Arguments: (VOID)\r
+  return LoopVar8;\r
+}\r
 \r
-Returns: (VOID)\r
+/**\r
+  Advance the current position (read in new data if needed).\r
+  Delete outdated string info. Find a match string for current position.\r
 \r
 **/\r
+VOID\r
+EFIAPI\r
+GetNextMatch (\r
+  VOID\r
+  )\r
 {\r
-  INT32 n;\r
+  INT32 LoopVar8;\r
   VOID  *Temp;\r
 \r
   mRemainder--;\r
   mPos++;\r
   if (mPos == WNDSIZ * 2) {\r
-    Temp = AllocatePool (WNDSIZ + MAXMATCH);\r
+    Temp = AllocateZeroPool (WNDSIZ + MAXMATCH);\r
     CopyMem (Temp, &mText[WNDSIZ], WNDSIZ + MAXMATCH);\r
     CopyMem (&mText[0], Temp, WNDSIZ + MAXMATCH);\r
     FreePool (Temp);\r
-    n = FreadCrc (&mText[WNDSIZ + MAXMATCH], WNDSIZ);\r
-    mRemainder += n;\r
+    LoopVar8 = FreadCrc (&mText[WNDSIZ + MAXMATCH], WNDSIZ);\r
+    mRemainder += LoopVar8;\r
     mPos = WNDSIZ;\r
   }\r
 \r
@@ -870,318 +635,483 @@ Returns: (VOID)
   InsertNode ();\r
 }\r
 \r
-EFI_STATUS\r
+/**\r
+  Send entry LoopVar1 down the queue.\r
+\r
+  @param[in] LoopVar1    The index of the item to move.\r
+**/\r
+VOID\r
 EFIAPI\r
-Encode (\r
-  VOID\r
+DownHeap (\r
+  IN INT32 i\r
   )\r
-/*++\r
+{\r
+  INT32 LoopVar1;\r
 \r
-Routine Description:\r
+  INT32 LoopVar2;\r
 \r
-  The main controlling routine for compression process.\r
+  //\r
+  // priority queue: send i-th entry down heap\r
+  //\r
+  LoopVar2 = mHeap[i];\r
+  LoopVar1 = 2 * i;\r
+  while (LoopVar1 <= mHeapSize) {\r
+    if (LoopVar1 < mHeapSize && mFreq[mHeap[LoopVar1]] > mFreq[mHeap[LoopVar1 + 1]]) {\r
+      LoopVar1++;\r
+    }\r
+\r
+    if (mFreq[LoopVar2] <= mFreq[mHeap[LoopVar1]]) {\r
+      break;\r
+    }\r
 \r
-Arguments: (VOID)\r
+    mHeap[i]  = mHeap[LoopVar1];\r
+    i         = LoopVar1;\r
+    LoopVar1         = 2 * i;\r
+  }\r
 \r
-Returns:\r
+  mHeap[i] = (INT16) LoopVar2;\r
+}\r
 \r
-  EFI_SUCCESS           - The compression is successful\r
-  EFI_OUT_0F_RESOURCES  - Not enough memory for compression process\r
+/**\r
+  Count the number of each code length for a Huffman tree.\r
 \r
+  @param[in] LoopVar1      The top node.\r
 **/\r
+VOID\r
+EFIAPI\r
+CountLen (\r
+  IN INT32 LoopVar1\r
+  )\r
 {\r
-  EFI_STATUS  Status;\r
-  INT32       LastMatchLen;\r
-  NODE        LastMatchPos;\r
-\r
-  Status = AllocateMemory ();\r
-  if (EFI_ERROR (Status)) {\r
-    FreeMemory ();\r
-    return Status;\r
+  if (LoopVar1 < mTempInt32) {\r
+    mLenCnt[(mHuffmanDepth < 16) ? mHuffmanDepth : 16]++;\r
+  } else {\r
+    mHuffmanDepth++;\r
+    CountLen (mLeft[LoopVar1]);\r
+    CountLen (mRight[LoopVar1]);\r
+    mHuffmanDepth--;\r
   }\r
+}\r
 \r
-  InitSlide ();\r
+/**\r
+  Create code length array for a Huffman tree.\r
 \r
-  HufEncodeStart ();\r
+  @param[in] Root   The root of the tree.\r
+**/\r
+VOID\r
+EFIAPI\r
+MakeLen (\r
+  IN INT32 Root\r
+  )\r
+{\r
+  INT32   LoopVar1;\r
 \r
-  mRemainder  = FreadCrc (&mText[WNDSIZ], WNDSIZ + MAXMATCH);\r
+  INT32   LoopVar2;\r
+  UINT32  Cum;\r
 \r
-  mMatchLen   = 0;\r
-  mPos        = WNDSIZ;\r
-  InsertNode ();\r
-  if (mMatchLen > mRemainder) {\r
-    mMatchLen = mRemainder;\r
+  for (LoopVar1 = 0; LoopVar1 <= 16; LoopVar1++) {\r
+    mLenCnt[LoopVar1] = 0;\r
   }\r
 \r
-  while (mRemainder > 0) {\r
-    LastMatchLen  = mMatchLen;\r
-    LastMatchPos  = mMatchPos;\r
-    GetNextMatch ();\r
-    if (mMatchLen > mRemainder) {\r
-      mMatchLen = mRemainder;\r
-    }\r
-\r
-    if (mMatchLen > LastMatchLen || LastMatchLen < THRESHOLD) {\r
-      //\r
-      // Not enough benefits are gained by outputting a pointer,\r
-      // so just output the original character\r
-      //\r
-      CompressOutput(mText[mPos - 1], 0);\r
-    } else {\r
-      //\r
-      // Outputting a pointer is beneficial enough, do it.\r
-      //\r
+  CountLen (Root);\r
 \r
-      CompressOutput(LastMatchLen + (UINT8_MAX + 1 - THRESHOLD),\r
-             (mPos - LastMatchPos - 2) & (WNDSIZ - 1));\r
-      LastMatchLen--;\r
-      while (LastMatchLen > 0) {\r
-        GetNextMatch ();\r
-        LastMatchLen--;\r
-      }\r
+  //\r
+  // Adjust the length count array so that\r
+  // no code will be generated longer than its designated length\r
+  //\r
+  Cum = 0;\r
+  for (LoopVar1 = 16; LoopVar1 > 0; LoopVar1--) {\r
+    Cum += mLenCnt[LoopVar1] << (16 - LoopVar1);\r
+  }\r
 \r
-      if (mMatchLen > mRemainder) {\r
-        mMatchLen = mRemainder;\r
+  while (Cum != (1U << 16)) {\r
+    mLenCnt[16]--;\r
+    for (LoopVar1 = 15; LoopVar1 > 0; LoopVar1--) {\r
+      if (mLenCnt[LoopVar1] != 0) {\r
+        mLenCnt[LoopVar1]--;\r
+        mLenCnt[LoopVar1 + 1] += 2;\r
+        break;\r
       }\r
     }\r
+\r
+    Cum--;\r
   }\r
 \r
-  HufEncodeEnd ();\r
-  FreeMemory ();\r
-  return EFI_SUCCESS;\r
+  for (LoopVar1 = 16; LoopVar1 > 0; LoopVar1--) {\r
+    LoopVar2 = mLenCnt[LoopVar1];\r
+    LoopVar2--;\r
+    while (LoopVar2 >= 0) {\r
+      mLen[*mSortPtr++] = (UINT8) LoopVar1;\r
+      LoopVar2--;\r
+    }\r
+  }\r
 }\r
 \r
+/**\r
+  Assign code to each symbol based on the code length array.\r
+  \r
+  @param[in] LoopVar8      The number of symbols.\r
+  @param[in] Len    The code length array.\r
+  @param[out] Code  The stores codes for each symbol.\r
+**/\r
 VOID\r
 EFIAPI\r
-CountTFreq (\r
-  VOID\r
+MakeCode (\r
+  IN  INT32         LoopVar8,\r
+  IN  UINT8 Len[    ],\r
+  OUT UINT16 Code[  ]\r
   )\r
-/*++\r
-\r
-Routine Description:\r
+{\r
+  INT32   LoopVar1;\r
+  UINT16  Start[18];\r
 \r
-  Count the frequencies for the Extra Set\r
+  Start[1] = 0;\r
+  for (LoopVar1 = 1; LoopVar1 <= 16; LoopVar1++) {\r
+    Start[LoopVar1 + 1] = (UINT16) ((Start[LoopVar1] + mLenCnt[LoopVar1]) << 1);\r
+  }\r
 \r
-Arguments: (VOID)\r
+  for (LoopVar1 = 0; LoopVar1 < LoopVar8; LoopVar1++) {\r
+    Code[LoopVar1] = Start[Len[LoopVar1]]++;\r
+  }\r
+}\r
+  \r
+/**\r
+  Generates Huffman codes given a frequency distribution of symbols.\r
 \r
-Returns: (VOID)\r
+  @param[in] NParm      The number of symbols.\r
+  @param[in] FreqParm   The frequency of each symbol.\r
+  @param[out] LenParm   The code length for each symbol.\r
+  @param[out] CodeParm  The code for each symbol.\r
 \r
+  @return The root of the Huffman tree.\r
 **/\r
+INT32\r
+EFIAPI\r
+MakeTree (\r
+  IN  INT32             NParm,\r
+  IN  UINT16  FreqParm[ ],\r
+  OUT UINT8   LenParm[  ],\r
+  OUT UINT16  CodeParm[ ]\r
+  )\r
 {\r
-  INT32 i;\r
+  INT32 LoopVar1;\r
 \r
-  INT32 k;\r
+  INT32 LoopVar2;\r
 \r
-  INT32 n;\r
+  INT32 LoopVar3;\r
 \r
-  INT32 Count;\r
+  INT32 Avail;\r
 \r
-  for (i = 0; i < NT; i++) {\r
-    mTFreq[i] = 0;\r
+  //\r
+  // make tree, calculate len[], return root\r
+  //\r
+  mTempInt32        = NParm;\r
+  mFreq     = FreqParm;\r
+  mLen      = LenParm;\r
+  Avail     = mTempInt32;\r
+  mHeapSize = 0;\r
+  mHeap[1]  = 0;\r
+  for (LoopVar1 = 0; LoopVar1 < mTempInt32; LoopVar1++) {\r
+    mLen[LoopVar1] = 0;\r
+    if ((mFreq[LoopVar1]) != 0) {\r
+      mHeapSize++;\r
+      mHeap[mHeapSize] = (INT16) LoopVar1;\r
+    }\r
   }\r
 \r
-  n = NC;\r
-  while (n > 0 && mCLen[n - 1] == 0) {\r
-    n--;\r
+  if (mHeapSize < 2) {\r
+    CodeParm[mHeap[1]] = 0;\r
+    return mHeap[1];\r
   }\r
 \r
-  i = 0;\r
-  while (i < n) {\r
-    k = mCLen[i++];\r
-    if (k == 0) {\r
-      Count = 1;\r
-      while (i < n && mCLen[i] == 0) {\r
-        i++;\r
-        Count++;\r
-      }\r
+  for (LoopVar1 = mHeapSize / 2; LoopVar1 >= 1; LoopVar1--) {\r
+    //\r
+    // make priority queue\r
+    //\r
+    DownHeap (LoopVar1);\r
+  }\r
 \r
-      if (Count <= 2) {\r
-        mTFreq[0] = (UINT16) (mTFreq[0] + Count);\r
-      } else if (Count <= 18) {\r
-        mTFreq[1]++;\r
-      } else if (Count == 19) {\r
-        mTFreq[0]++;\r
-        mTFreq[1]++;\r
-      } else {\r
-        mTFreq[2]++;\r
-      }\r
-    } else {\r
-      ASSERT((k+2)<(2 * NT - 1));\r
-      mTFreq[k + 2]++;\r
+  mSortPtr = CodeParm;\r
+  do {\r
+    LoopVar1 = mHeap[1];\r
+    if (LoopVar1 < mTempInt32) {\r
+      *mSortPtr++ = (UINT16) LoopVar1;\r
     }\r
-  }\r
-}\r
-\r
-VOID\r
-EFIAPI\r
-WritePTLen (\r
-  IN INT32 n,\r
-  IN INT32 nbit,\r
-  IN INT32 Special\r
-  )\r
-/*++\r
 \r
-Routine Description:\r
+    mHeap[1] = mHeap[mHeapSize--];\r
+    DownHeap (1);\r
+    LoopVar2 = mHeap[1];\r
+    if (LoopVar2 < mTempInt32) {\r
+      *mSortPtr++ = (UINT16) LoopVar2;\r
+    }\r
 \r
-  Outputs the code length array for the Extra Set or the Position Set.\r
+    LoopVar3         = Avail++;\r
+    mFreq[LoopVar3]  = (UINT16) (mFreq[LoopVar1] + mFreq[LoopVar2]);\r
+    mHeap[1]  = (INT16) LoopVar3;\r
+    DownHeap (1);\r
+    mLeft[LoopVar3]  = (UINT16) LoopVar1;\r
+    mRight[LoopVar3] = (UINT16) LoopVar2;\r
+  } while (mHeapSize > 1);\r
 \r
-Arguments:\r
+  mSortPtr = CodeParm;\r
+  MakeLen (LoopVar3);\r
+  MakeCode (NParm, LenParm, CodeParm);\r
 \r
-  n       - the number of symbols\r
-  nbit    - the number of bits needed to represent 'n'\r
-  Special - the special symbol that needs to be take care of\r
+  //\r
+  // return root\r
+  //\r
+  return LoopVar3;\r
+}\r
 \r
-Returns: (VOID)\r
+/**\r
+  Outputs rightmost LoopVar8 bits of x\r
 \r
+  @param[in] LoopVar8   The rightmost LoopVar8 bits of the data is used.\r
+  @param[in] x   The data.\r
 **/\r
+VOID\r
+EFIAPI\r
+PutBits (\r
+  IN INT32    LoopVar8,\r
+  IN UINT32   x\r
+  )\r
 {\r
-  INT32 i;\r
+  UINT8 Temp;\r
 \r
-  INT32 k;\r
+  if (LoopVar8 < mBitCount) {\r
+    mSubBitBuf |= x << (mBitCount -= LoopVar8);\r
+  } else {\r
 \r
-  while (n > 0 && mPTLen[n - 1] == 0) {\r
-    n--;\r
-  }\r
+    Temp = (UINT8)(mSubBitBuf | (x >> (LoopVar8 -= mBitCount)));\r
+    if (mDst < mDstUpperLimit) {\r
+      *mDst++ = Temp;\r
+    }\r
+    mCompSize++;\r
 \r
-  PutBits (nbit, n);\r
-  i = 0;\r
-  while (i < n) {\r
-    k = mPTLen[i++];\r
-    if (k <= 6) {\r
-      PutBits (3, k);\r
+    if (LoopVar8 < UINT8_BIT) {\r
+      mSubBitBuf = x << (mBitCount = UINT8_BIT - LoopVar8);\r
     } else {\r
-      PutBits (k - 3, (1U << (k - 3)) - 2);\r
-    }\r
 \r
-    if (i == Special) {\r
-      while (i < 6 && mPTLen[i] == 0) {\r
-        i++;\r
+      Temp = (UINT8)(x >> (LoopVar8 - UINT8_BIT));\r
+      if (mDst < mDstUpperLimit) {\r
+        *mDst++ = Temp;\r
       }\r
+      mCompSize++;\r
 \r
-      PutBits (2, (i - 3) & 3);\r
+      mSubBitBuf = x << (mBitCount = 2 * UINT8_BIT - LoopVar8);\r
     }\r
   }\r
 }\r
 \r
+/**\r
+  Encode a signed 32 bit number.\r
+\r
+  @param[in] LoopVar5     The number to encode.\r
+**/\r
 VOID\r
 EFIAPI\r
-WriteCLen (\r
-  VOID\r
+EncodeC (\r
+  IN INT32 LoopVar5\r
   )\r
-/*++\r
+{\r
+  PutBits (mCLen[LoopVar5], mCCode[LoopVar5]);\r
+}\r
 \r
-Routine Description:\r
+/**\r
+  Encode a unsigned 32 bit number.\r
 \r
-  Outputs the code length array for Char&Length Set\r
+  @param[in] LoopVar7     The number to encode.\r
+**/\r
+VOID\r
+EFIAPI\r
+EncodeP (\r
+  IN UINT32 LoopVar7\r
+  )\r
+{\r
+  UINT32  LoopVar5;\r
 \r
-Arguments: (VOID)\r
+  UINT32  LoopVar6;\r
 \r
-Returns: (VOID)\r
+  LoopVar5 = 0;\r
+  LoopVar6 = LoopVar7;\r
+  while (LoopVar6 != 0) {\r
+    LoopVar6 >>= 1;\r
+    LoopVar5++;\r
+  }\r
+\r
+  PutBits (mPTLen[LoopVar5], mPTCode[LoopVar5]);\r
+  if (LoopVar5 > 1) {\r
+    PutBits(LoopVar5 - 1, LoopVar7 & (0xFFFFU >> (17 - LoopVar5)));\r
+  }\r
+}\r
+\r
+/**\r
+  Count the frequencies for the Extra Set.\r
 \r
 **/\r
+VOID\r
+EFIAPI\r
+CountTFreq (\r
+  VOID\r
+  )\r
 {\r
-  INT32 i;\r
+  INT32 LoopVar1;\r
 \r
-  INT32 k;\r
+  INT32 LoopVar3;\r
 \r
-  INT32 n;\r
+  INT32 LoopVar8;\r
 \r
   INT32 Count;\r
 \r
-  n = NC;\r
-  while (n > 0 && mCLen[n - 1] == 0) {\r
-    n--;\r
+  for (LoopVar1 = 0; LoopVar1 < NT; LoopVar1++) {\r
+    mTFreq[LoopVar1] = 0;\r
   }\r
 \r
-  PutBits (CBIT, n);\r
-  i = 0;\r
-  while (i < n) {\r
-    k = mCLen[i++];\r
-    if (k == 0) {\r
+  LoopVar8 = NC;\r
+  while (LoopVar8 > 0 && mCLen[LoopVar8 - 1] == 0) {\r
+    LoopVar8--;\r
+  }\r
+\r
+  LoopVar1 = 0;\r
+  while (LoopVar1 < LoopVar8) {\r
+    LoopVar3 = mCLen[LoopVar1++];\r
+    if (LoopVar3 == 0) {\r
       Count = 1;\r
-      while (i < n && mCLen[i] == 0) {\r
-        i++;\r
+      while (LoopVar1 < LoopVar8 && mCLen[LoopVar1] == 0) {\r
+        LoopVar1++;\r
         Count++;\r
       }\r
 \r
       if (Count <= 2) {\r
-        for (k = 0; k < Count; k++) {\r
-          PutBits (mPTLen[0], mPTCode[0]);\r
-        }\r
+        mTFreq[0] = (UINT16) (mTFreq[0] + Count);\r
       } else if (Count <= 18) {\r
-        PutBits (mPTLen[1], mPTCode[1]);\r
-        PutBits (4, Count - 3);\r
+        mTFreq[1]++;\r
       } else if (Count == 19) {\r
-        PutBits (mPTLen[0], mPTCode[0]);\r
-        PutBits (mPTLen[1], mPTCode[1]);\r
-        PutBits (4, 15);\r
+        mTFreq[0]++;\r
+        mTFreq[1]++;\r
       } else {\r
-        PutBits (mPTLen[2], mPTCode[2]);\r
-        PutBits (CBIT, Count - 20);\r
+        mTFreq[2]++;\r
       }\r
     } else {\r
-      ASSERT((k+2)<NPT);\r
-      PutBits (mPTLen[k + 2], mPTCode[k + 2]);\r
+      ASSERT((LoopVar3+2)<(2 * NT - 1));\r
+      mTFreq[LoopVar3 + 2]++;\r
     }\r
   }\r
 }\r
 \r
-VOID\r
-EFIAPI\r
-EncodeC (\r
-  IN INT32 c\r
-  )\r
-{\r
-  PutBits (mCLen[c], mCCode[c]);\r
-}\r
+/**\r
+  Outputs the code length array for the Extra Set or the Position Set.\r
 \r
+  @param[in] LoopVar8       The number of symbols.\r
+  @param[in] nbit           The number of bits needed to represent 'LoopVar8'.\r
+  @param[in] Special        The special symbol that needs to be take care of.\r
+\r
+**/\r
 VOID\r
 EFIAPI\r
-EncodeP (\r
-  IN UINT32 p\r
+WritePTLen (\r
+  IN INT32 LoopVar8,\r
+  IN INT32 nbit,\r
+  IN INT32 Special\r
   )\r
 {\r
-  UINT32  c;\r
+  INT32 LoopVar1;\r
 \r
-  UINT32  q;\r
+  INT32 LoopVar3;\r
 \r
-  c = 0;\r
-  q = p;\r
-  while (q != 0) {\r
-    q >>= 1;\r
-    c++;\r
+  while (LoopVar8 > 0 && mPTLen[LoopVar8 - 1] == 0) {\r
+    LoopVar8--;\r
   }\r
 \r
-  PutBits (mPTLen[c], mPTCode[c]);\r
-  if (c > 1) {\r
-    PutBits(c - 1, p & (0xFFFFU >> (17 - c)));\r
+  PutBits (nbit, LoopVar8);\r
+  LoopVar1 = 0;\r
+  while (LoopVar1 < LoopVar8) {\r
+    LoopVar3 = mPTLen[LoopVar1++];\r
+    if (LoopVar3 <= 6) {\r
+      PutBits (3, LoopVar3);\r
+    } else {\r
+      PutBits (LoopVar3 - 3, (1U << (LoopVar3 - 3)) - 2);\r
+    }\r
+\r
+    if (LoopVar1 == Special) {\r
+      while (LoopVar1 < 6 && mPTLen[LoopVar1] == 0) {\r
+        LoopVar1++;\r
+      }\r
+\r
+      PutBits (2, (LoopVar1 - 3) & 3);\r
+    }\r
   }\r
 }\r
 \r
+/**\r
+  Outputs the code length array for Char&Length Set\r
+\r
+**/\r
 VOID\r
 EFIAPI\r
-SendBlock (\r
+WriteCLen (\r
   VOID\r
   )\r
-/*++\r
+{\r
+  INT32 LoopVar1;\r
 \r
-Routine Description:\r
+  INT32 LoopVar3;\r
 \r
-  Huffman code the block and output it.\r
+  INT32 LoopVar8;\r
 \r
-Arguments:\r
+  INT32 Count;\r
 \r
-  None\r
+  LoopVar8 = NC;\r
+  while (LoopVar8 > 0 && mCLen[LoopVar8 - 1] == 0) {\r
+    LoopVar8--;\r
+  }\r
 \r
-Returns:\r
+  PutBits (CBIT, LoopVar8);\r
+  LoopVar1 = 0;\r
+  while (LoopVar1 < LoopVar8) {\r
+    LoopVar3 = mCLen[LoopVar1++];\r
+    if (LoopVar3 == 0) {\r
+      Count = 1;\r
+      while (LoopVar1 < LoopVar8 && mCLen[LoopVar1] == 0) {\r
+        LoopVar1++;\r
+        Count++;\r
+      }\r
+\r
+      if (Count <= 2) {\r
+        for (LoopVar3 = 0; LoopVar3 < Count; LoopVar3++) {\r
+          PutBits (mPTLen[0], mPTCode[0]);\r
+        }\r
+      } else if (Count <= 18) {\r
+        PutBits (mPTLen[1], mPTCode[1]);\r
+        PutBits (4, Count - 3);\r
+      } else if (Count == 19) {\r
+        PutBits (mPTLen[0], mPTCode[0]);\r
+        PutBits (mPTLen[1], mPTCode[1]);\r
+        PutBits (4, 15);\r
+      } else {\r
+        PutBits (mPTLen[2], mPTCode[2]);\r
+        PutBits (CBIT, Count - 20);\r
+      }\r
+    } else {\r
+      ASSERT((LoopVar3+2)<NPT);\r
+      PutBits (mPTLen[LoopVar3 + 2], mPTCode[LoopVar3 + 2]);\r
+    }\r
+  }\r
+}\r
 \r
-  None\r
+/**\r
+  Huffman code the block and output it.\r
 \r
 **/\r
+VOID\r
+EFIAPI\r
+SendBlock (\r
+  VOID\r
+  )\r
 {\r
-  UINT32  i;\r
+  UINT32  LoopVar1;\r
 \r
-  UINT32  k;\r
+  UINT32  LoopVar3;\r
 \r
   UINT32  Flags;\r
 \r
@@ -1222,18 +1152,18 @@ Returns:
   }\r
 \r
   Pos = 0;\r
-  for (i = 0; i < Size; i++) {\r
-    if (i % UINT8_BIT == 0) {\r
+  for (LoopVar1 = 0; LoopVar1 < Size; LoopVar1++) {\r
+    if (LoopVar1 % UINT8_BIT == 0) {\r
       Flags = mBuf[Pos++];\r
     } else {\r
       Flags <<= 1;\r
     }\r
     if ((Flags & (1U << (UINT8_BIT - 1))) != 0){\r
       EncodeC(mBuf[Pos++] + (1U << UINT8_BIT));\r
-      k = mBuf[Pos++] << UINT8_BIT;\r
-      k += mBuf[Pos++];\r
+      LoopVar3 = mBuf[Pos++] << UINT8_BIT;\r
+      LoopVar3 += mBuf[Pos++];\r
 \r
-      EncodeP (k);\r
+      EncodeP (LoopVar3);\r
     } else {\r
       EncodeC (mBuf[Pos++]);\r
     }\r
@@ -1243,26 +1173,38 @@ Returns:
   SetMem (mPFreq, NP * sizeof (UINT16), 0);\r
 }\r
 \r
+/**\r
+  Start the huffman encoding.\r
+\r
+**/\r
 VOID\r
 EFIAPI\r
-CompressOutput (\r
-  IN UINT32 c,\r
-  IN UINT32 p\r
+HufEncodeStart (\r
+  VOID\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Outputs an Original Character or a Pointer\r
+{\r
+  SetMem (mCFreq, NC * sizeof (UINT16), 0);\r
+  SetMem (mPFreq, NP * sizeof (UINT16), 0);\r
 \r
-Arguments:\r
+  mOutputPos = mOutputMask = 0;\r
 \r
-  c     - The original character or the 'String Length' element of a Pointer\r
-  p     - The 'Position' field of a Pointer\r
+  mBitCount   = UINT8_BIT;\r
+  mSubBitBuf  = 0;\r
+}\r
 \r
-Returns: (VOID)\r
+/**\r
+  Outputs an Original Character or a Pointer.\r
 \r
+  @param[in] LoopVar5     The original character or the 'String Length' element of \r
+                   a Pointer.\r
+  @param[in] LoopVar7     The 'Position' field of a Pointer.\r
 **/\r
+VOID\r
+EFIAPI\r
+CompressOutput (\r
+  IN UINT32 LoopVar5,\r
+  IN UINT32 LoopVar7\r
+  )\r
 {\r
   STATIC UINT32 CPos;\r
 \r
@@ -1276,35 +1218,25 @@ Returns: (VOID)
     CPos        = mOutputPos++;\r
     mBuf[CPos]  = 0;\r
   }\r
-  mBuf[mOutputPos++] = (UINT8) c;\r
-  mCFreq[c]++;\r
-  if (c >= (1U << UINT8_BIT)) {\r
+  mBuf[mOutputPos++] = (UINT8) LoopVar5;\r
+  mCFreq[LoopVar5]++;\r
+  if (LoopVar5 >= (1U << UINT8_BIT)) {\r
     mBuf[CPos] = (UINT8)(mBuf[CPos]|mOutputMask);\r
-    mBuf[mOutputPos++] = (UINT8)(p >> UINT8_BIT);\r
-    mBuf[mOutputPos++] = (UINT8) p;\r
-    c                  = 0;\r
-    while (p!=0) {\r
-      p >>= 1;\r
-      c++;\r
+    mBuf[mOutputPos++] = (UINT8)(LoopVar7 >> UINT8_BIT);\r
+    mBuf[mOutputPos++] = (UINT8) LoopVar7;\r
+    LoopVar5                  = 0;\r
+    while (LoopVar7!=0) {\r
+      LoopVar7 >>= 1;\r
+      LoopVar5++;\r
     }\r
-    mPFreq[c]++;\r
+    mPFreq[LoopVar5]++;\r
   }\r
 }\r
 \r
-VOID\r
-EFIAPI\r
-HufEncodeStart (\r
-  VOID\r
-  )\r
-{\r
-  SetMem (mCFreq, NC * sizeof (UINT16), 0);\r
-  SetMem (mPFreq, NP * sizeof (UINT16), 0);\r
-\r
-  mOutputPos = mOutputMask = 0;\r
-  InitPutBits ();\r
-  return ;\r
-}\r
+/**\r
+  End the huffman encoding.\r
 \r
+**/\r
 VOID\r
 EFIAPI\r
 HufEncodeEnd (\r
@@ -1317,395 +1249,160 @@ HufEncodeEnd (
   // Flush remaining bits\r
   //\r
   PutBits (UINT8_BIT - 1, 0);\r
-\r
-  return ;\r
 }\r
 \r
-VOID\r
+/**\r
+  The main controlling routine for compression process.\r
+\r
+  @retval EFI_SUCCESS           The compression is successful.\r
+  @retval EFI_OUT_0F_RESOURCES  Not enough memory for compression process.\r
+**/\r
+EFI_STATUS\r
 EFIAPI\r
-MakeCrcTable (\r
+Encode (\r
   VOID\r
   )\r
 {\r
-  UINT32  i;\r
-\r
-  UINT32  j;\r
-\r
-  UINT32  r;\r
-\r
-  for (i = 0; i <= UINT8_MAX; i++) {\r
-    r = i;\r
-    for (j = 0; j < UINT8_BIT; j++) {\r
-      if ((r & 1) != 0) {\r
-        r = (r >> 1) ^ CRCPOLY;\r
-      } else {\r
-        r >>= 1;\r
-      }\r
-    }\r
+  EFI_STATUS  Status;\r
+  INT32       LastMatchLen;\r
+  NODE        LastMatchPos;\r
 \r
-    mCrcTable[i] = (UINT16) r;\r
+  Status = AllocateMemory ();\r
+  if (EFI_ERROR (Status)) {\r
+    FreeMemory ();\r
+    return Status;\r
   }\r
-}\r
 \r
-VOID\r
-EFIAPI\r
-PutBits (\r
-  IN INT32    n,\r
-  IN UINT32   x\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Outputs rightmost n bits of x\r
-\r
-Arguments:\r
-\r
-  n   - the rightmost n bits of the data is used\r
-  x   - the data\r
-\r
-Returns:\r
+  InitSlide ();\r
 \r
-  None\r
+  HufEncodeStart ();\r
 \r
-**/\r
-{\r
-  UINT8 Temp;\r
+  mRemainder  = FreadCrc (&mText[WNDSIZ], WNDSIZ + MAXMATCH);\r
 \r
-  if (n < mBitCount) {\r
-    mSubBitBuf |= x << (mBitCount -= n);\r
-  } else {\r
+  mMatchLen   = 0;\r
+  mPos        = WNDSIZ;\r
+  InsertNode ();\r
+  if (mMatchLen > mRemainder) {\r
+    mMatchLen = mRemainder;\r
+  }\r
 \r
-    Temp = (UINT8)(mSubBitBuf | (x >> (n -= mBitCount)));\r
-    if (mDst < mDstUpperLimit) {\r
-      *mDst++ = Temp;\r
+  while (mRemainder > 0) {\r
+    LastMatchLen  = mMatchLen;\r
+    LastMatchPos  = mMatchPos;\r
+    GetNextMatch ();\r
+    if (mMatchLen > mRemainder) {\r
+      mMatchLen = mRemainder;\r
     }\r
-    mCompSize++;\r
 \r
-    if (n < UINT8_BIT) {\r
-      mSubBitBuf = x << (mBitCount = UINT8_BIT - n);\r
+    if (mMatchLen > LastMatchLen || LastMatchLen < THRESHOLD) {\r
+      //\r
+      // Not enough benefits are gained by outputting a pointer,\r
+      // so just output the original character\r
+      //\r
+      CompressOutput(mText[mPos - 1], 0);\r
     } else {\r
+      //\r
+      // Outputting a pointer is beneficial enough, do it.\r
+      //\r
 \r
-      Temp = (UINT8)(x >> (n - UINT8_BIT));\r
-      if (mDst < mDstUpperLimit) {\r
-        *mDst++ = Temp;\r
+      CompressOutput(LastMatchLen + (UINT8_MAX + 1 - THRESHOLD),\r
+             (mPos - LastMatchPos - 2) & (WNDSIZ - 1));\r
+      LastMatchLen--;\r
+      while (LastMatchLen > 0) {\r
+        GetNextMatch ();\r
+        LastMatchLen--;\r
       }\r
-      mCompSize++;\r
 \r
-      mSubBitBuf = x << (mBitCount = 2 * UINT8_BIT - n);\r
+      if (mMatchLen > mRemainder) {\r
+        mMatchLen = mRemainder;\r
+      }\r
     }\r
   }\r
-}\r
 \r
-INT32\r
-EFIAPI\r
-FreadCrc (\r
-  OUT UINT8 *p,\r
-  IN  INT32 n\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Read in source data\r
-\r
-Arguments:\r
-\r
-  p   - the buffer to hold the data\r
-  n   - number of bytes to read\r
-\r
-Returns:\r
-\r
-  number of bytes actually read\r
-\r
-**/\r
-{\r
-  INT32 i;\r
-\r
-  for (i = 0; mSrc < mSrcUpperLimit && i < n; i++) {\r
-    *p++ = *mSrc++;\r
-  }\r
-\r
-  n = i;\r
-\r
-  p -= n;\r
-  mOrigSize += n;\r
-  i--;\r
-  while (i >= 0) {\r
-    UPDATE_CRC (*p++);\r
-    i--;\r
-  }\r
-\r
-  return n;\r
-}\r
-\r
-VOID\r
-EFIAPI\r
-InitPutBits (\r
-  VOID\r
-  )\r
-{\r
-  mBitCount   = UINT8_BIT;\r
-  mSubBitBuf  = 0;\r
+  HufEncodeEnd ();\r
+  FreeMemory ();\r
+  return EFI_SUCCESS;\r
 }\r
 \r
-VOID\r
-EFIAPI\r
-CountLen (\r
-  IN INT32 i\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Count the number of each code length for a Huffman tree.\r
-\r
-Arguments:\r
-\r
-  i   - the top node\r
+/**\r
+  The compression routine.\r
 \r
-Returns: (VOID)\r
+  @param[in]      SrcBuffer     The buffer containing the source data.\r
+  @param[in]      SrcSize       The number of bytes in SrcBuffer.\r
+  @param[in]      DstBuffer     The buffer to put the compressed image in.\r
+  @param[in,out]  DstSize       On input the size (in bytes) of DstBuffer, on\r
+                                return the number of bytes placed in DstBuffer.\r
 \r
+  @retval EFI_SUCCESS           The compression was sucessful.\r
+  @retval EFI_BUFFER_TOO_SMALL  The buffer was too small.  DstSize is required.\r
 **/\r
-{\r
-  STATIC INT32  Depth = 0;\r
-\r
-  if (i < mN) {\r
-    mLenCnt[(Depth < 16) ? Depth : 16]++;\r
-  } else {\r
-    Depth++;\r
-    CountLen (mLeft[i]);\r
-    CountLen (mRight[i]);\r
-    Depth--;\r
-  }\r
-}\r
-\r
-VOID\r
+EFI_STATUS\r
 EFIAPI\r
-MakeLen (\r
-  IN INT32 Root\r
+Compress (\r
+  IN       VOID   *SrcBuffer,\r
+  IN       UINT64 SrcSize,\r
+  IN       VOID   *DstBuffer,\r
+  IN OUT   UINT64 *DstSize\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Create code length array for a Huffman tree\r
-\r
-Arguments:\r
-\r
-  Root   - the root of the tree\r
-\r
-Returns:\r
-\r
-  None\r
-\r
-**/\r
 {\r
-  INT32   i;\r
-\r
-  INT32   k;\r
-  UINT32  Cum;\r
-\r
-  for (i = 0; i <= 16; i++) {\r
-    mLenCnt[i] = 0;\r
-  }\r
-\r
-  CountLen (Root);\r
+  EFI_STATUS  Status;\r
 \r
   //\r
-  // Adjust the length count array so that\r
-  // no code will be generated longer than its designated length\r
+  // Initializations\r
   //\r
-  Cum = 0;\r
-  for (i = 16; i > 0; i--) {\r
-    Cum += mLenCnt[i] << (16 - i);\r
-  }\r
-\r
-  while (Cum != (1U << 16)) {\r
-    mLenCnt[16]--;\r
-    for (i = 15; i > 0; i--) {\r
-      if (mLenCnt[i] != 0) {\r
-        mLenCnt[i]--;\r
-        mLenCnt[i + 1] += 2;\r
-        break;\r
-      }\r
-    }\r
+  mBufSiz         = 0;\r
+  mBuf            = NULL;\r
+  mText           = NULL;\r
+  mLevel          = NULL;\r
+  mChildCount     = NULL;\r
+  mPosition       = NULL;\r
+  mParent         = NULL;\r
+  mPrev           = NULL;\r
+  mNext           = NULL;\r
 \r
-    Cum--;\r
-  }\r
+  mSrc            = SrcBuffer;\r
+  mSrcUpperLimit  = mSrc + SrcSize;\r
+  mDst            = DstBuffer;\r
+  mDstUpperLimit  = mDst +*DstSize;\r
 \r
-  for (i = 16; i > 0; i--) {\r
-    k = mLenCnt[i];\r
-    k--;\r
-    while (k >= 0) {\r
-      mLen[*mSortPtr++] = (UINT8) i;\r
-      k--;\r
-    }\r
-  }\r
-}\r
+  PutDword (0L);\r
+  PutDword (0L);\r
 \r
-VOID\r
-EFIAPI\r
-DownHeap (\r
-  IN INT32 i\r
-  )\r
-{\r
-  INT32 j;\r
+  MakeCrcTable ();\r
 \r
-  INT32 k;\r
+  mOrigSize             = mCompSize = 0;\r
+  mCrc                  = INIT_CRC;\r
 \r
   //\r
-  // priority queue: send i-th entry down heap\r
+  // Compress it\r
   //\r
-  k = mHeap[i];\r
-  j = 2 * i;\r
-  while (j <= mHeapSize) {\r
-    if (j < mHeapSize && mFreq[mHeap[j]] > mFreq[mHeap[j + 1]]) {\r
-      j++;\r
-    }\r
-\r
-    if (mFreq[k] <= mFreq[mHeap[j]]) {\r
-      break;\r
-    }\r
-\r
-    mHeap[i]  = mHeap[j];\r
-    i         = j;\r
-    j         = 2 * i;\r
-  }\r
-\r
-  mHeap[i] = (INT16) k;\r
-}\r
-\r
-VOID\r
-EFIAPI\r
-MakeCode (\r
-  IN  INT32         n,\r
-  IN  UINT8 Len[    ],\r
-  OUT UINT16 Code[  ]\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Assign code to each symbol based on the code length array\r
-\r
-Arguments:\r
-\r
-  n     - number of symbols\r
-  Len   - the code length array\r
-  Code  - stores codes for each symbol\r
-\r
-Returns:\r
-\r
-  None\r
-\r
-**/\r
-{\r
-  INT32   i;\r
-  UINT16  Start[18];\r
-\r
-  Start[1] = 0;\r
-  for (i = 1; i <= 16; i++) {\r
-    Start[i + 1] = (UINT16) ((Start[i] + mLenCnt[i]) << 1);\r
-  }\r
-\r
-  for (i = 0; i < n; i++) {\r
-    Code[i] = Start[Len[i]]++;\r
+  Status = Encode ();\r
+  if (EFI_ERROR (Status)) {\r
+    return EFI_OUT_OF_RESOURCES;\r
   }\r
-}\r
-\r
-INT32\r
-EFIAPI\r
-MakeTree (\r
-  IN  INT32             NParm,\r
-  IN  UINT16  FreqParm[ ],\r
-  OUT UINT8   LenParm[  ],\r
-  OUT UINT16  CodeParm[ ]\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Generates Huffman codes given a frequency distribution of symbols\r
-\r
-Arguments:\r
-\r
-  NParm    - number of symbols\r
-  FreqParm - frequency of each symbol\r
-  LenParm  - code length for each symbol\r
-  CodeParm - code for each symbol\r
-\r
-Returns:\r
-\r
-  Root of the Huffman tree.\r
-\r
-**/\r
-{\r
-  INT32 i;\r
-\r
-  INT32 j;\r
-\r
-  INT32 k;\r
-\r
-  INT32 Avail;\r
-\r
   //\r
-  // make tree, calculate len[], return root\r
+  // Null terminate the compressed data\r
   //\r
-  mN        = NParm;\r
-  mFreq     = FreqParm;\r
-  mLen      = LenParm;\r
-  Avail     = mN;\r
-  mHeapSize = 0;\r
-  mHeap[1]  = 0;\r
-  for (i = 0; i < mN; i++) {\r
-    mLen[i] = 0;\r
-    if ((mFreq[i]) != 0) {\r
-      mHeapSize++;\r
-      mHeap[mHeapSize] = (INT16) i;\r
-    }\r
-  }\r
-\r
-  if (mHeapSize < 2) {\r
-    CodeParm[mHeap[1]] = 0;\r
-    return mHeap[1];\r
-  }\r
-\r
-  for (i = mHeapSize / 2; i >= 1; i--) {\r
-    //\r
-    // make priority queue\r
-    //\r
-    DownHeap (i);\r
+  if (mDst < mDstUpperLimit) {\r
+    *mDst++ = 0;\r
   }\r
-\r
-  mSortPtr = CodeParm;\r
-  do {\r
-    i = mHeap[1];\r
-    if (i < mN) {\r
-      *mSortPtr++ = (UINT16) i;\r
-    }\r
-\r
-    mHeap[1] = mHeap[mHeapSize--];\r
-    DownHeap (1);\r
-    j = mHeap[1];\r
-    if (j < mN) {\r
-      *mSortPtr++ = (UINT16) j;\r
-    }\r
-\r
-    k         = Avail++;\r
-    mFreq[k]  = (UINT16) (mFreq[i] + mFreq[j]);\r
-    mHeap[1]  = (INT16) k;\r
-    DownHeap (1);\r
-    mLeft[k]  = (UINT16) i;\r
-    mRight[k] = (UINT16) j;\r
-  } while (mHeapSize > 1);\r
-\r
-  mSortPtr = CodeParm;\r
-  MakeLen (k);\r
-  MakeCode (NParm, LenParm, CodeParm);\r
+  //\r
+  // Fill in compressed size and original size\r
+  //\r
+  mDst = DstBuffer;\r
+  PutDword (mCompSize + 1);\r
+  PutDword (mOrigSize);\r
 \r
   //\r
-  // return root\r
+  // Return\r
   //\r
-  return k;\r
+  if (mCompSize + 1 + 8 > *DstSize) {\r
+    *DstSize = mCompSize + 1 + 8;\r
+    return EFI_BUFFER_TOO_SMALL;\r
+  } else {\r
+    *DstSize = mCompSize + 1 + 8;\r
+    return EFI_SUCCESS;\r
+  }\r
+\r
 }\r
+\r
index 29f0a53fe34b0ff2fdfb0f6c0fb028895b07ec56..64e339cf973a0000d2b0f2e7011ccfaa5d246ded 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Header file for compression routine.\r
 \r
-  Copyright (c) 2005 - 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2005 - 2011, 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
@@ -19,7 +19,7 @@
   The compression routine.\r
 \r
   @param[in]      SrcBuffer     The buffer containing the source data.\r
-  @param[in]      SrcSizae      Number of bytes in SrcBuffer.\r
+  @param[in]      SrcSiz      Number of bytes in SrcBuffer.\r
   @param[in]      DstBuffer     The buffer to put the compressed image in.\r
   @param[in,out]  DstSize       On input the size (in bytes) of DstBuffer, on\r
                                 return the number of bytes placed in DstBuffer.\r
index 96da3044836b50309d6447b44bab75a68e5a7b2c..4e49d2120b7c8566718e92621b3394e0245c5fdd 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Main file for Dblk shell Debug1 function.\r
 \r
-  Copyright (c) 2005 - 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2005 - 2011, 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
 #include "UefiShellDebug1CommandsLib.h"\r
 #include <Protocol/BlockIo.h>\r
 \r
+/**\r
+  Display blocks to the screen.\r
+\r
+  @param[in] DevPath      The device path to get the blocks from.\r
+  @param[in] Lba          The Lba number to start from.\r
+  @param[in] BlockCount   How many blocks to display.\r
+\r
+  @retval SHELL_SUCCESS   The display was successful.\r
+**/\r
 SHELL_STATUS\r
 EFIAPI\r
 DisplayTheBlocks(\r
@@ -24,7 +33,6 @@ DisplayTheBlocks(
   )\r
 {\r
   EFI_BLOCK_IO_PROTOCOL     *BlockIo;\r
-  EFI_DEVICE_PATH_PROTOCOL  *Copy;\r
   EFI_HANDLE                BlockIoHandle;\r
   EFI_STATUS                Status;\r
   SHELL_STATUS              ShellStatus;\r
@@ -32,23 +40,38 @@ DisplayTheBlocks(
   UINTN                     BufferSize;\r
 \r
   ShellStatus = SHELL_SUCCESS;\r
-  Copy = (EFI_DEVICE_PATH_PROTOCOL *)DevPath;\r
 \r
-  Status = gBS->LocateDevicePath(&gEfiBlockIoProtocolGuid, &Copy, &BlockIoHandle);\r
-  ASSERT_EFI_ERROR(Status);\r
+  Status = gBS->LocateDevicePath(&gEfiBlockIoProtocolGuid, &((EFI_DEVICE_PATH_PROTOCOL *)DevPath), &BlockIoHandle);\r
+  if (EFI_ERROR(Status)) {\r
+    return (SHELL_NOT_FOUND);\r
+  }\r
 \r
   Status = gBS->OpenProtocol(BlockIoHandle, &gEfiBlockIoProtocolGuid, (VOID**)&BlockIo, gImageHandle, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL);\r
-  ASSERT_EFI_ERROR(Status);\r
+  if (EFI_ERROR(Status)) {\r
+    return (SHELL_NOT_FOUND);\r
+  }\r
 \r
   BufferSize = BlockIo->Media->BlockSize * BlockCount;\r
   if (BufferSize > 0) {\r
-    Buffer     = AllocatePool(BufferSize);\r
+    Buffer     = AllocateZeroPool(BufferSize);\r
   } else {\r
+    ShellPrintEx(-1,-1,L"  BlockSize: 0x%08x, BlockCount: 0x%08x\r\n", BlockIo->Media->BlockSize, BlockCount);\r
     Buffer    = NULL;\r
   }\r
 \r
   Status = BlockIo->ReadBlocks(BlockIo, BlockIo->Media->MediaId, Lba, BufferSize, Buffer);\r
   if (!EFI_ERROR(Status) && Buffer != NULL) {\r
+    ShellPrintHiiEx(\r
+      -1, \r
+      -1, \r
+      NULL, \r
+      STRING_TOKEN (STR_DBLK_HEADER), \r
+      gShellDebug1HiiHandle, \r
+      Lba,\r
+      BufferSize,\r
+      BlockIo\r
+      );\r
+\r
     DumpHex(2,0,BufferSize,Buffer);\r
   } else {\r
     ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_READ_FAIL), gShellDebug1HiiHandle, L"BlockIo", Status);\r
@@ -63,6 +86,12 @@ DisplayTheBlocks(
   return (ShellStatus);\r
 }\r
 \r
+/**\r
+  Function for 'dblk' command.\r
+\r
+  @param[in] ImageHandle  Handle to the Image (NULL if Internal).\r
+  @param[in] SystemTable  Pointer to the System Table (NULL if Internal).\r
+**/\r
 SHELL_STATUS\r
 EFIAPI\r
 ShellCommandRunDblk (\r
@@ -70,15 +99,16 @@ ShellCommandRunDblk (
   IN EFI_SYSTEM_TABLE  *SystemTable\r
   )\r
 {\r
-  EFI_STATUS          Status;\r
-  LIST_ENTRY          *Package;\r
-  CHAR16              *ProblemParam;\r
-  SHELL_STATUS        ShellStatus;\r
-  CONST CHAR16        *BlockName;\r
-  CONST CHAR16        *LbaString;\r
-  CONST CHAR16        *BlockCountString;\r
-  UINT64              Lba;\r
-  UINT8               BlockCount;\r
+  EFI_STATUS                Status;\r
+  LIST_ENTRY                *Package;\r
+  CHAR16                    *ProblemParam;\r
+  SHELL_STATUS              ShellStatus;\r
+  CONST CHAR16              *BlockName;\r
+  CONST CHAR16              *LbaString;\r
+  CONST CHAR16              *BlockCountString;\r
+  UINT64                    Lba;\r
+  UINT64                    BlockCount;\r
+  EFI_DEVICE_PATH_PROTOCOL  *DevPath;\r
 \r
   ShellStatus         = SHELL_SUCCESS;\r
   Status              = EFI_SUCCESS;\r
@@ -122,26 +152,45 @@ ShellCommandRunDblk (
       if (LbaString == NULL) {\r
         Lba = 0;\r
       } else {\r
-        Lba = (UINT64)StrHexToUintn(LbaString);\r
+        if (!ShellIsHexOrDecimalNumber(LbaString, TRUE, FALSE)) {\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, LbaString);\r
+          ShellStatus = SHELL_INVALID_PARAMETER;\r
+        }\r
+        ShellConvertStringToUint64(LbaString, &Lba, TRUE, FALSE);\r
       }\r
 \r
       if (BlockCountString == NULL) {\r
         BlockCount = 1;\r
       } else {\r
-        BlockCount = (UINT8)StrHexToUintn(BlockCountString);\r
+        if (!ShellIsHexOrDecimalNumber(BlockCountString, TRUE, FALSE)) {\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, BlockCountString);\r
+          ShellStatus = SHELL_INVALID_PARAMETER;\r
+        }\r
+        ShellConvertStringToUint64(BlockCountString, &BlockCount, TRUE, FALSE);\r
         if (BlockCount > 0x10) {\r
           BlockCount = 0x10;\r
+        } else if (BlockCount == 0) {\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, BlockCountString);\r
+          ShellStatus = SHELL_INVALID_PARAMETER;\r
         }\r
       }\r
-\r
-      //\r
-      // do the work if we have a valid block identifier\r
-      //\r
-      if (mEfiShellProtocol->GetDevicePathFromMap(BlockName) == NULL) {\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, BlockName);\r
-        ShellStatus = SHELL_INVALID_PARAMETER;\r
-      } else {\r
-        ShellStatus = DisplayTheBlocks(mEfiShellProtocol->GetDevicePathFromMap(BlockName), Lba, BlockCount);\r
+      \r
+      if (ShellStatus == SHELL_SUCCESS) {\r
+        //\r
+        // do the work if we have a valid block identifier\r
+        //\r
+        if (mEfiShellProtocol->GetDevicePathFromMap(BlockName) == NULL) {\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, BlockName);\r
+          ShellStatus = SHELL_INVALID_PARAMETER;\r
+        } else {\r
+          DevPath = (EFI_DEVICE_PATH_PROTOCOL*)mEfiShellProtocol->GetDevicePathFromMap(BlockName);\r
+          if (gBS->LocateDevicePath(&gEfiBlockIoProtocolGuid, &DevPath, NULL) == EFI_NOT_FOUND) {\r
+            ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_MAP_PROTOCOL), gShellDebug1HiiHandle, BlockName, L"BlockIo");\r
+            ShellStatus = SHELL_INVALID_PARAMETER;\r
+          } else {\r
+            ShellStatus = DisplayTheBlocks(mEfiShellProtocol->GetDevicePathFromMap(BlockName), Lba, (UINT8)BlockCount);\r
+          }\r
+        }\r
       }\r
     }\r
 \r
index b8ab9c69e60954955f0ca705721f87a94ca42b22..0229450528ea603b0c9a05c71de5c1c17b68c0d1 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Main file for Dmem shell Debug1 function.\r
 \r
-  Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2010 - 2011, 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
 \r
 #include "UefiShellDebug1CommandsLib.h"\r
 #include <Protocol/PciRootBridgeIo.h>\r
+#include <Guid/Acpi.h>\r
+#include <Guid/Mps.h>\r
+#include <Guid/SmBios.h>\r
+#include <Guid/SalSystemTable.h>\r
 \r
+/**\r
+  Make a printable character.\r
+\r
+  If Char is printable then return it, otherwise return a question mark.\r
+\r
+  @param[in] Char     The character to make printable.\r
+\r
+  @return A printable character representing Char.\r
+**/\r
 CHAR16\r
+EFIAPI\r
 MakePrintable(\r
   IN CONST CHAR16 Char\r
   )\r
@@ -26,6 +40,12 @@ MakePrintable(
   return (Char);\r
 }\r
 \r
+/**\r
+  Display some Memory-Mapped-IO memory.\r
+\r
+  @param[in] Address    The starting address to display.\r
+  @param[in] Size       The length of memory to display.\r
+**/\r
 SHELL_STATUS\r
 EFIAPI\r
 DisplayMmioMemory(\r
@@ -66,6 +86,12 @@ STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
   {NULL, TypeMax}\r
   };\r
 \r
+/**\r
+  Function for 'dmem' command.\r
+\r
+  @param[in] ImageHandle  Handle to the Image (NULL if Internal).\r
+  @param[in] SystemTable  Pointer to the System Table (NULL if Internal).\r
+**/\r
 SHELL_STATUS\r
 EFIAPI\r
 ShellCommandRunDmem (\r
@@ -78,8 +104,14 @@ ShellCommandRunDmem (
   CHAR16              *ProblemParam;\r
   SHELL_STATUS        ShellStatus;\r
   VOID                *Address;\r
-  UINT              Size;\r
+  UINT64              Size;\r
   CONST CHAR16        *Temp1;\r
+  UINT64              AcpiTableAddress;\r
+  UINT64              Acpi20TableAddress;\r
+  UINT64              SalTableAddress;\r
+  UINT64              SmbiosTableAddress;\r
+  UINT64              MpsTableAddress;\r
+  UINTN               TableWalker;\r
 \r
   ShellStatus         = SHELL_SUCCESS;\r
   Status              = EFI_SUCCESS;\r
@@ -108,26 +140,27 @@ ShellCommandRunDmem (
       ASSERT(FALSE);\r
     }\r
   } else {\r
-    Temp1 = ShellCommandLineGetRawValue(Package, 1);\r
-    if (Temp1 == NULL) {\r
-      Address = gST;\r
-      Size = 512;\r
+    if (ShellCommandLineGetCount(Package) > 3) {\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle);\r
+      ShellStatus = SHELL_INVALID_PARAMETER;\r
     } else {\r
-      if (!ShellIsHexOrDecimalNumber(Temp1, TRUE, FALSE)) {\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, Temp1);\r
-        ShellStatus = SHELL_INVALID_PARAMETER;\r
-      } else {\r
-        Address = (VOID*)StrHexToUintn(Temp1);\r
-      }\r
-      Temp1 = ShellCommandLineGetRawValue(Package, 2);\r
+      Temp1 = ShellCommandLineGetRawValue(Package, 1);\r
       if (Temp1 == NULL) {\r
+        Address = gST;\r
         Size = 512;\r
       } else {\r
-        if (!ShellIsHexOrDecimalNumber(Temp1, FALSE, FALSE)) {\r
+        if (!ShellIsHexOrDecimalNumber(Temp1, TRUE, FALSE) || EFI_ERROR(ShellConvertStringToUint64(Temp1, (UINT64*)&Address, TRUE, FALSE))) {\r
           ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, Temp1);\r
           ShellStatus = SHELL_INVALID_PARAMETER;\r
+        } \r
+        Temp1 = ShellCommandLineGetRawValue(Package, 2);\r
+        if (Temp1 == NULL) {\r
+          Size = 512;\r
         } else {\r
-          Size = ShellStrToUintn(Temp1);\r
+          if (!ShellIsHexOrDecimalNumber(Temp1, FALSE, FALSE) || EFI_ERROR(ShellConvertStringToUint64(Temp1, &Size, TRUE, FALSE))) {\r
+            ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, Temp1);\r
+            ShellStatus = SHELL_INVALID_PARAMETER;\r
+          }\r
         }\r
       }\r
     }\r
@@ -135,9 +168,54 @@ ShellCommandRunDmem (
     if (ShellStatus == SHELL_SUCCESS) {\r
       if (!ShellCommandLineGetFlag(Package, L"-mmio")) {\r
         ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_DMEM_HEADER_ROW), gShellDebug1HiiHandle, (UINT64)Address, Size);\r
-        DumpHex(2,0,Size,Address);\r
+        DumpHex(2,0,(UINTN)Size,Address);\r
+        if (Address == (VOID*)gST) {\r
+          Acpi20TableAddress  = 0;\r
+          AcpiTableAddress    = 0;\r
+          SalTableAddress     = 0;\r
+          SmbiosTableAddress  = 0;\r
+          MpsTableAddress     = 0;\r
+          for (TableWalker = 0 ; TableWalker < gST->NumberOfTableEntries ; TableWalker++) {\r
+            if (CompareGuid(&gST->ConfigurationTable[TableWalker].VendorGuid, &gEfiAcpi20TableGuid)) {\r
+              Acpi20TableAddress = (UINT64)gST->ConfigurationTable[TableWalker].VendorTable;\r
+              continue;\r
+            }\r
+            if (CompareGuid(&gST->ConfigurationTable[TableWalker].VendorGuid, &gEfiAcpi10TableGuid)) {\r
+              AcpiTableAddress = (UINT64)gST->ConfigurationTable[TableWalker].VendorTable;\r
+              continue;\r
+            }\r
+            if (CompareGuid(&gST->ConfigurationTable[TableWalker].VendorGuid, &gEfiSalSystemTableGuid)) {\r
+              SalTableAddress = (UINT64)gST->ConfigurationTable[TableWalker].VendorTable;\r
+              continue;\r
+            }\r
+            if (CompareGuid(&gST->ConfigurationTable[TableWalker].VendorGuid, &gEfiSmbiosTableGuid)) {\r
+              SmbiosTableAddress = (UINT64)gST->ConfigurationTable[TableWalker].VendorTable;\r
+              continue;\r
+            }\r
+            if (CompareGuid(&gST->ConfigurationTable[TableWalker].VendorGuid, &gEfiMpsTableGuid)) {\r
+              MpsTableAddress = (UINT64)gST->ConfigurationTable[TableWalker].VendorTable;\r
+              continue;\r
+            }\r
+          }\r
+\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_DMEM_SYSTEM_TABLE), gShellDebug1HiiHandle, \r
+            (UINT64)Address,\r
+            gST->Hdr.HeaderSize,\r
+            gST->Hdr.Revision,\r
+            (UINT64)gST->ConIn,\r
+            (UINT64)gST->ConOut,\r
+            (UINT64)gST->StdErr,\r
+            (UINT64)gST->RuntimeServices,\r
+            (UINT64)gST->BootServices,\r
+            SalTableAddress,\r
+            AcpiTableAddress,\r
+            Acpi20TableAddress,\r
+            MpsTableAddress,\r
+            SmbiosTableAddress\r
+            );\r
+        }\r
       } else {\r
-        ShellStatus = DisplayMmioMemory(Address, Size);\r
+        ShellStatus = DisplayMmioMemory(Address, (UINTN)Size);\r
       }\r
     }\r
 \r
index 0a586591beeb2a2a53a5f8d1bb7aa27ba584b00e..60ced4ee7311771901ed2fcefe891b3a8ff754e7 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Main file for DmpStore shell Debug1 function.\r
 \r
-  Copyright (c) 2005 - 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2005 - 2011, 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
@@ -25,6 +25,19 @@ STATIC CHAR16   *AttrType[] = {
   L"NV+RT+BS",  // 111\r
 };\r
 \r
+/**\r
+  Function to display or delete variables.\r
+\r
+  @param[in] VariableName   The variable name of the EFI variable (or NULL).\r
+  @param[in] Guid           The GUID of the variable set (or NULL).\r
+  @param[in] Delete         TRUE to delete, FALSE otherwise.\r
+\r
+  @retval SHELL_SUCCESS           The operation was successful.\r
+  @retval SHELL_OUT_OF_RESOURCES  A memorty allocation failed.\r
+  @retval SHELL_ABORTED           The abort message was received.\r
+  @retval SHELL_DEVICE_ERROR      UEFI Variable Services returned an error.\r
+  @retval SHELL_NOT_FOUND         the Name/Guid pair could not be found.\r
+**/\r
 SHELL_STATUS\r
 EFIAPI\r
 ProcessVariables (\r
@@ -44,21 +57,26 @@ ProcessVariables (
   UINTN                     DataSize;\r
   UINT32                    Atts;\r
   SHELL_STATUS              ShellStatus;\r
+  BOOLEAN                   Found;\r
+\r
+  Status = gRT->QueryVariableInfo(EFI_VARIABLE_BOOTSERVICE_ACCESS|EFI_VARIABLE_RUNTIME_ACCESS|EFI_VARIABLE_NON_VOLATILE, &MaxStorSize, &RemStorSize, &MaxVarSize);\r
+  if (EFI_ERROR(Status)) {\r
+    return (SHELL_DEVICE_ERROR);\r
+  }\r
 \r
+  Found         = FALSE;\r
   ShellStatus   = SHELL_SUCCESS;\r
   Size          = PcdGet16(PcdShellFileOperationSize);\r
-  FoundVarName  = AllocatePool(Size);\r
+  FoundVarName  = AllocateZeroPool(Size);\r
 \r
   if (FoundVarName == NULL) {\r
     return (SHELL_OUT_OF_RESOURCES);\r
   }\r
   FoundVarName[0] = CHAR_NULL;\r
 \r
-  Status = gRT->QueryVariableInfo(EFI_VARIABLE_BOOTSERVICE_ACCESS|EFI_VARIABLE_RUNTIME_ACCESS|EFI_VARIABLE_NON_VOLATILE, &MaxStorSize, &RemStorSize, &MaxVarSize);\r
-  ASSERT_EFI_ERROR(Status);\r
 \r
   DataSize = (UINTN)MaxVarSize;\r
-  DataBuffer = AllocatePool(DataSize);\r
+  DataBuffer = AllocateZeroPool(DataSize);\r
   if (DataBuffer == NULL) {\r
     FreePool(FoundVarName);\r
     return (SHELL_OUT_OF_RESOURCES);\r
@@ -98,6 +116,7 @@ ProcessVariables (
     //\r
     // do the print or delete\r
     //\r
+    Found = TRUE;\r
     if (!Delete) {\r
       ShellPrintHiiEx(\r
         -1,\r
@@ -135,8 +154,19 @@ ProcessVariables (
   if (DataBuffer != NULL) {\r
     FreePool(DataBuffer);\r
   }\r
-\r
-  return (SHELL_UNSUPPORTED);\r
+  if (!Found) {\r
+    if (VariableName != NULL && Guid == NULL) {\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_NO_VAR_FOUND_N), gShellDebug1HiiHandle, VariableName);\r
+    } else if (VariableName != NULL && Guid != NULL) {\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_NO_VAR_FOUND_GN), gShellDebug1HiiHandle, Guid, VariableName);\r
+    } else if (VariableName == NULL && Guid == NULL) {\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_NO_VAR_FOUND), gShellDebug1HiiHandle);\r
+    } else if (VariableName == NULL && Guid != NULL) {\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_NO_VAR_FOUND_G), gShellDebug1HiiHandle, Guid);\r
+    } \r
+    return (SHELL_NOT_FOUND);\r
+  }\r
+  return (SHELL_SUCCESS);\r
 }\r
 \r
 STATIC CONST SHELL_PARAM_ITEM ParamList[] = {\r
@@ -148,6 +178,12 @@ STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
   {NULL, TypeMax}\r
   };\r
 \r
+/**\r
+  Function for 'dmpstore' command.\r
+\r
+  @param[in] ImageHandle  Handle to the Image (NULL if Internal).\r
+  @param[in] SystemTable  Pointer to the System Table (NULL if Internal).\r
+**/\r
 SHELL_STATUS\r
 EFIAPI\r
 ShellCommandRunDmpStore (\r
@@ -177,10 +213,7 @@ ShellCommandRunDmpStore (
       ASSERT(FALSE);\r
     }\r
   } else {\r
-    if (ShellCommandLineGetCount(Package) < 1) {\r
-      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle);\r
-      ShellStatus = SHELL_INVALID_PARAMETER;\r
-    } else if (ShellCommandLineGetCount(Package) > 2) {\r
+    if (ShellCommandLineGetCount(Package) > 2) {\r
       ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle);\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
     } else if (ShellCommandLineGetFlag(Package, L"-all") && ShellCommandLineGetFlag(Package, L"-guid")) {\r
@@ -195,14 +228,14 @@ ShellCommandRunDmpStore (
         if (Temp != NULL) {\r
           Status = ConvertStringToGuid(Temp, &GuidData);\r
           if (EFI_ERROR(Status)) {\r
-            ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, L"-guid");\r
+            ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, Temp);\r
             ShellStatus = SHELL_INVALID_PARAMETER;\r
           }\r
           Guid = &GuidData;\r
         } else  {\r
           Guid = &gEfiGlobalVariableGuid;\r
         }\r
-        VariableName = ShellCommandLineGetRawValue(Package, 2);\r
+        VariableName = ShellCommandLineGetRawValue(Package, 1);\r
       } else {\r
         VariableName  = NULL;\r
         Guid          = NULL;\r
@@ -210,9 +243,8 @@ ShellCommandRunDmpStore (
       if (ShellStatus == SHELL_SUCCESS) {\r
         if (ShellCommandLineGetFlag(Package, L"-s") || ShellCommandLineGetFlag(Package, L"-l")) {\r
           ///@todo fix this after Jordan makes lib...\r
-          ShellPrintEx(-1, -1, L"Not implemeneted yet (ASSERT follows).\r\n");\r
-          ShellStatus = SHELL_INVALID_PARAMETER;\r
-          ASSERT(FALSE);\r
+          ShellPrintEx(-1, -1, L"Not implemeneted yet.\r\n");\r
+          ShellStatus = SHELL_UNSUPPORTED;\r
         } else {\r
           ShellStatus = ProcessVariables (VariableName, Guid, ShellCommandLineGetFlag(Package, L"-d"));\r
         }\r
index 8d5aabdafcc061411aa5afc76d7054fdf7d4a3d5..3f27d1ae0d430ec95f9b3144b638e7d97208f5b2 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Main file for EfiCompress shell Debug1 function.\r
 \r
-  Copyright (c) 2005 - 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2005 - 2011, 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
 #include "UefiShellDebug1CommandsLib.h"\r
 #include "Compress.h"\r
 \r
+/**\r
+  Function for 'compress' command.\r
+\r
+  @param[in] ImageHandle  Handle to the Image (NULL if Internal).\r
+  @param[in] SystemTable  Pointer to the System Table (NULL if Internal).\r
+**/\r
 SHELL_STATUS\r
 EFIAPI\r
 ShellCommandRunEfiCompress (\r
@@ -76,65 +82,68 @@ ShellCommandRunEfiCompress (
     } else {\r
       InFileName = ShellFindFilePath(ShellCommandLineGetRawValue(Package, 1));\r
       OutFileName = ShellCommandLineGetRawValue(Package, 2);\r
-      Status = ShellOpenFileByName(InFileName, &InShellFileHandle, EFI_FILE_MODE_READ, 0);\r
-      if (EFI_ERROR(Status)) {\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_OPEN_FAIL), gShellDebug1HiiHandle, ShellCommandLineGetRawValue(Package, 1), Status);\r
-        ShellStatus = SHELL_NOT_FOUND;\r
-      }\r
-      Status = ShellOpenFileByName(OutFileName, &OutShellFileHandle, EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE|EFI_FILE_MODE_CREATE, 0);\r
-      if (EFI_ERROR(Status)) {\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_OPEN_FAIL), gShellDebug1HiiHandle, ShellCommandLineGetRawValue(Package, 2), Status);\r
+      if (InFileName == NULL) {\r
+        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_FIND_FAIL), gShellDebug1HiiHandle, ShellCommandLineGetRawValue(Package, 1));\r
         ShellStatus = SHELL_NOT_FOUND;\r
-      }\r
-      if (FileHandleIsDirectory(InShellFileHandle) == EFI_SUCCESS){\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_NOT_DIR), gShellDebug1HiiHandle, InFileName);\r
-        ShellStatus = SHELL_INVALID_PARAMETER;\r
-      }\r
-      if (FileHandleIsDirectory(OutShellFileHandle) == EFI_SUCCESS){\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_NOT_DIR), gShellDebug1HiiHandle, OutFileName);\r
-        ShellStatus = SHELL_INVALID_PARAMETER;\r
-      }\r
-      Status = gEfiShellProtocol->GetFileSize(InShellFileHandle, &InSize);\r
-      ASSERT_EFI_ERROR(Status);\r
-      InBuffer = AllocateZeroPool((UINTN)InSize);\r
-      ASSERT(InBuffer != NULL);\r
-      Status = gEfiShellProtocol->ReadFile(InShellFileHandle, &((UINTN)InSize), InBuffer);\r
-      ASSERT_EFI_ERROR(Status);\r
-      Status = Compress(InBuffer, InSize, OutBuffer, &OutSize);\r
-      if (Status == EFI_BUFFER_TOO_SMALL) {\r
-        OutBuffer = AllocateZeroPool((UINTN)OutSize);\r
-        ASSERT(OutBuffer != NULL);\r
-        Status = Compress(InBuffer, InSize, OutBuffer, &OutSize);\r
-      }\r
-      if (EFI_ERROR(Status)) {\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_EFI_COMPRESS_FAIL), gShellDebug1HiiHandle, Status);\r
-        ShellStatus = SHELL_DEVICE_ERROR;\r
       } else {\r
-        Status = gEfiShellProtocol->WriteFile(OutShellFileHandle, &((UINTN)OutSize), OutBuffer);\r
-        if (EFI_ERROR(Status)) {\r
-          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_WRITE_FAIL), gShellDebug1HiiHandle, OutFileName, Status);\r
-          ShellStatus = SHELL_DEVICE_ERROR;\r
+        if (ShellIsDirectory(InFileName) == EFI_SUCCESS){\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_NOT_DIR), gShellDebug1HiiHandle, InFileName);\r
+          ShellStatus = SHELL_INVALID_PARAMETER;\r
+        }\r
+        if (ShellIsDirectory(OutFileName) == EFI_SUCCESS){\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_NOT_DIR), gShellDebug1HiiHandle, OutFileName);\r
+          ShellStatus = SHELL_INVALID_PARAMETER;\r
+        }\r
+        if (ShellStatus == SHELL_SUCCESS) {\r
+          Status = ShellOpenFileByName(InFileName, &InShellFileHandle, EFI_FILE_MODE_READ, 0);\r
+          if (EFI_ERROR(Status)) {\r
+            ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_OPEN_FAIL), gShellDebug1HiiHandle, ShellCommandLineGetRawValue(Package, 1), Status);\r
+            ShellStatus = SHELL_NOT_FOUND;\r
+          }\r
+          Status = ShellOpenFileByName(OutFileName, &OutShellFileHandle, EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE|EFI_FILE_MODE_CREATE, 0);\r
+          if (EFI_ERROR(Status)) {\r
+            ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_OPEN_FAIL), gShellDebug1HiiHandle, ShellCommandLineGetRawValue(Package, 2), Status);\r
+            ShellStatus = SHELL_NOT_FOUND;\r
+          }\r
+        }\r
+        if (ShellStatus == SHELL_SUCCESS) {\r
+          Status = gEfiShellProtocol->GetFileSize(InShellFileHandle, &InSize);\r
+          ASSERT_EFI_ERROR(Status);\r
+          InBuffer = AllocateZeroPool((UINTN)InSize);\r
+          ASSERT(InBuffer != NULL);\r
+          Status = gEfiShellProtocol->ReadFile(InShellFileHandle, &((UINTN)InSize), InBuffer);\r
+          ASSERT_EFI_ERROR(Status);\r
+          Status = Compress(InBuffer, InSize, OutBuffer, &OutSize);\r
+          if (Status == EFI_BUFFER_TOO_SMALL) {\r
+            OutBuffer = AllocateZeroPool((UINTN)OutSize);\r
+            ASSERT(OutBuffer != NULL);\r
+            Status = Compress(InBuffer, InSize, OutBuffer, &OutSize);\r
+          }\r
+          if (EFI_ERROR(Status)) {\r
+            ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_EFI_COMPRESS_FAIL), gShellDebug1HiiHandle, Status);\r
+            ShellStatus = SHELL_DEVICE_ERROR;\r
+          } else {\r
+            Status = gEfiShellProtocol->WriteFile(OutShellFileHandle, &((UINTN)OutSize), OutBuffer);\r
+            if (EFI_ERROR(Status)) {\r
+              ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_WRITE_FAIL), gShellDebug1HiiHandle, OutFileName, Status);\r
+              ShellStatus = SHELL_DEVICE_ERROR;\r
+            }\r
+          }\r
         }\r
       }\r
     }\r
 \r
     ShellCommandLineFreeVarList (Package);\r
   }\r
-  if (InFileName != NULL) {\r
-    FreePool(InFileName);\r
-  }\r
   if (InShellFileHandle != NULL) {\r
     gEfiShellProtocol->CloseFile(InShellFileHandle);\r
   }\r
   if (OutShellFileHandle != NULL) {\r
     gEfiShellProtocol->CloseFile(OutShellFileHandle);\r
   }\r
-  if (InBuffer != NULL) {\r
-    FreePool(InBuffer);\r
-  }\r
-  if (OutBuffer != NULL) {\r
-    FreePool(OutBuffer);\r
-  }\r
+  SHELL_FREE_NON_NULL(InFileName);\r
+  SHELL_FREE_NON_NULL(InBuffer);\r
+  SHELL_FREE_NON_NULL(OutBuffer);\r
 \r
   return (ShellStatus);\r
 }\r
index 3d01515f05874037c5a6040a7ab5543222a739ee..4b4671b4554f8efd2c944c3c97c0c4047cdb397c 100644 (file)
 #include <Protocol/Decompress.h>\r
 \r
 \r
+/**\r
+  Function for 'decompress' command.\r
+\r
+  @param[in] ImageHandle  Handle to the Image (NULL if Internal).\r
+  @param[in] SystemTable  Pointer to the System Table (NULL if Internal).\r
+**/\r
 SHELL_STATUS\r
 EFIAPI\r
 ShellCommandRunEfiDecompress (\r
@@ -27,8 +33,8 @@ ShellCommandRunEfiDecompress (
   LIST_ENTRY          *Package;\r
   CHAR16              *ProblemParam;\r
   SHELL_STATUS        ShellStatus;\r
-  SHELL_FILE_HANDLE              InFileHandle;\r
-  SHELL_FILE_HANDLE              OutFileHandle;\r
+  SHELL_FILE_HANDLE   InFileHandle;\r
+  SHELL_FILE_HANDLE   OutFileHandle;\r
   UINT32              OutSize;\r
   UINTN               OutSizeTemp;\r
   VOID                *OutBuffer;\r
@@ -36,7 +42,7 @@ ShellCommandRunEfiDecompress (
   VOID                *InBuffer;\r
   CHAR16              *InFileName;\r
   CONST CHAR16        *OutFileName;\r
-  UINT64              temp;\r
+  UINT64              Temp64Bit;\r
   UINT32              ScratchSize;\r
   VOID                *ScratchBuffer;\r
   EFI_DECOMPRESS_PROTOCOL *Decompress;\r
@@ -83,81 +89,84 @@ ShellCommandRunEfiDecompress (
     } else {\r
       InFileName = ShellFindFilePath(ShellCommandLineGetRawValue(Package, 1));\r
       OutFileName = ShellCommandLineGetRawValue(Package, 2);\r
-      Status = ShellOpenFileByName(InFileName, &InFileHandle, EFI_FILE_MODE_READ, 0);\r
-      if (EFI_ERROR(Status)) {\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_OPEN_FAIL), gShellDebug1HiiHandle, ShellCommandLineGetRawValue(Package, 1), Status);\r
-        ShellStatus = SHELL_NOT_FOUND;\r
-      }\r
-      Status = ShellOpenFileByName(OutFileName, &OutFileHandle, EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE|EFI_FILE_MODE_CREATE, 0);\r
-      if (EFI_ERROR(Status)) {\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_OPEN_FAIL), gShellDebug1HiiHandle, ShellCommandLineGetRawValue(Package, 2), Status);\r
+      if (InFileName == NULL) {\r
+        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_FIND_FAIL), gShellDebug1HiiHandle, ShellCommandLineGetRawValue(Package, 1));\r
         ShellStatus = SHELL_NOT_FOUND;\r
-      }\r
-      if (FileHandleIsDirectory(InFileHandle) == EFI_SUCCESS){\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_NOT_DIR), gShellDebug1HiiHandle, InFileName);\r
-        ShellStatus = SHELL_INVALID_PARAMETER;\r
-      }\r
-      if (FileHandleIsDirectory(OutFileHandle) == EFI_SUCCESS){\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_NOT_DIR), gShellDebug1HiiHandle, OutFileName);\r
-        ShellStatus = SHELL_INVALID_PARAMETER;\r
-      }\r
-      Status = FileHandleGetSize(InFileHandle, &temp);\r
-      ASSERT(temp <= (UINT32)(-1));\r
-      InSize = (UINTN)temp;\r
-      ASSERT_EFI_ERROR(Status);\r
-      InBuffer = AllocatePool(InSize);\r
-      ASSERT(InBuffer != NULL);\r
-      Status = gEfiShellProtocol->ReadFile(InFileHandle, &InSize, InBuffer);\r
-      ASSERT_EFI_ERROR(Status);\r
-\r
-      Status = gBS->LocateProtocol(&gEfiDecompressProtocolGuid, NULL, (VOID**)&Decompress);\r
-      ASSERT_EFI_ERROR(Status);\r
-\r
-      Status = Decompress->GetInfo(Decompress, InBuffer, (UINT32)InSize, &OutSize, &ScratchSize);\r
-      ASSERT_EFI_ERROR(Status);\r
-\r
-      OutBuffer = AllocatePool(OutSize);\r
-      ScratchBuffer = AllocatePool(ScratchSize);\r
-      ASSERT(OutBuffer != NULL);\r
-      ASSERT(ScratchBuffer != NULL);\r
-\r
-      Status = Decompress->Decompress(Decompress, InBuffer, (UINT32)InSize, OutBuffer, OutSize, ScratchBuffer, ScratchSize);\r
-      ASSERT_EFI_ERROR(Status);\r
-\r
-      if (EFI_ERROR(Status)) {\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_EFI_DECOMPRESS_FAIL), gShellDebug1HiiHandle, Status);\r
-        ShellStatus = SHELL_DEVICE_ERROR;\r
       } else {\r
-        OutSizeTemp = OutSize;\r
-        Status = gEfiShellProtocol->WriteFile(OutFileHandle, &OutSizeTemp, OutBuffer);\r
-        OutSize = (UINT32)OutSizeTemp;\r
-        if (EFI_ERROR(Status)) {\r
-          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_WRITE_FAIL), gShellDebug1HiiHandle, OutFileName, Status);\r
-          ShellStatus = SHELL_DEVICE_ERROR;\r
+        if (ShellIsDirectory(InFileName) == EFI_SUCCESS){\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_NOT_DIR), gShellDebug1HiiHandle, InFileName);\r
+          ShellStatus = SHELL_INVALID_PARAMETER;\r
+        }\r
+        if (ShellIsDirectory(OutFileName) == EFI_SUCCESS){\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_NOT_DIR), gShellDebug1HiiHandle, OutFileName);\r
+          ShellStatus = SHELL_INVALID_PARAMETER;\r
+        }\r
+        if (ShellStatus == SHELL_SUCCESS) {\r
+          Status = ShellOpenFileByName(InFileName, &InFileHandle, EFI_FILE_MODE_READ, 0);\r
+          if (EFI_ERROR(Status)) {\r
+            ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_OPEN_FAIL), gShellDebug1HiiHandle, ShellCommandLineGetRawValue(Package, 1), Status);\r
+            ShellStatus = SHELL_NOT_FOUND;\r
+          }\r
+          Status = ShellOpenFileByName(OutFileName, &OutFileHandle, EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE|EFI_FILE_MODE_CREATE, 0);\r
+          if (EFI_ERROR(Status)) {\r
+            ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_OPEN_FAIL), gShellDebug1HiiHandle, ShellCommandLineGetRawValue(Package, 2), Status);\r
+            ShellStatus = SHELL_NOT_FOUND;\r
+          }\r
+        }\r
+\r
+        if (ShellStatus == SHELL_SUCCESS) {\r
+          Status = FileHandleGetSize(InFileHandle, &Temp64Bit);\r
+          ASSERT(Temp64Bit <= (UINT32)(-1));\r
+          InSize = (UINTN)Temp64Bit;\r
+          ASSERT_EFI_ERROR(Status);\r
+          InBuffer = AllocateZeroPool(InSize);\r
+          ASSERT(InBuffer != NULL);\r
+          Status = gEfiShellProtocol->ReadFile(InFileHandle, &InSize, InBuffer);\r
+          ASSERT_EFI_ERROR(Status);\r
+\r
+          Status = gBS->LocateProtocol(&gEfiDecompressProtocolGuid, NULL, (VOID**)&Decompress);\r
+          ASSERT_EFI_ERROR(Status);\r
+\r
+          Status = Decompress->GetInfo(Decompress, InBuffer, (UINT32)InSize, &OutSize, &ScratchSize);\r
+          ASSERT_EFI_ERROR(Status);\r
+\r
+          OutBuffer = AllocateZeroPool(OutSize);\r
+          ScratchBuffer = AllocateZeroPool(ScratchSize);\r
+          ASSERT(OutBuffer != NULL);\r
+          ASSERT(ScratchBuffer != NULL);\r
+\r
+          Status = Decompress->Decompress(Decompress, InBuffer, (UINT32)InSize, OutBuffer, OutSize, ScratchBuffer, ScratchSize);\r
+          ASSERT_EFI_ERROR(Status);\r
+\r
+          if (EFI_ERROR(Status)) {\r
+            ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_EFI_DECOMPRESS_FAIL), gShellDebug1HiiHandle, Status);\r
+            ShellStatus = SHELL_DEVICE_ERROR;\r
+          } else {\r
+            OutSizeTemp = OutSize;\r
+            Status = gEfiShellProtocol->WriteFile(OutFileHandle, &OutSizeTemp, OutBuffer);\r
+            OutSize = (UINT32)OutSizeTemp;\r
+            if (EFI_ERROR(Status)) {\r
+              ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_WRITE_FAIL), gShellDebug1HiiHandle, OutFileName, Status);\r
+              ShellStatus = SHELL_DEVICE_ERROR;\r
+            }\r
+          }\r
         }\r
       }\r
     }\r
 \r
     ShellCommandLineFreeVarList (Package);\r
   }\r
-  if (InFileName != NULL) {\r
-    FreePool(InFileName);\r
-  }\r
   if (InFileHandle != NULL) {\r
     gEfiShellProtocol->CloseFile(InFileHandle);\r
   }\r
   if (OutFileHandle != NULL) {\r
     gEfiShellProtocol->CloseFile(OutFileHandle);\r
   }\r
-  if (InBuffer != NULL) {\r
-    FreePool(InBuffer);\r
-  }\r
-  if (OutBuffer != NULL) {\r
-    FreePool(OutBuffer);\r
-  }\r
-  if (ScratchBuffer != NULL) {\r
-    FreePool(ScratchBuffer);\r
-  }\r
+\r
+  SHELL_FREE_NON_NULL(InFileName);\r
+  SHELL_FREE_NON_NULL(InBuffer);\r
+  SHELL_FREE_NON_NULL(OutBuffer);\r
+  SHELL_FREE_NON_NULL(ScratchBuffer);\r
 \r
   return (ShellStatus);\r
 }\r
index 0084f87ca16ac2fee660554708b37be3941f4f25..8f1015800003c1851d950c208865d6a8b54a9db1 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Main file for LoadPciRom shell Debug1 function.\r
 \r
-  Copyright (c) 2005 - 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2005 - 2011, 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
 #include <IndustryStandard/PeImage.h>\r
 #include <Protocol/Decompress.h>\r
 \r
+/**\r
+  Connects all available drives and controllers.\r
+\r
+  @retval EFI_SUCCESS     The operation was successful.\r
+  @retval EFI_ABORTED     The abort mechanism was received.\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 LoadPciRomConnectAllDriversToAllControllers (\r
   VOID\r
   );\r
 \r
-EFI_STATUS\r
-EFIAPI\r
-InitializeLoadPciRom (\r
-  IN EFI_HANDLE        ImageHandle,\r
-  IN EFI_SYSTEM_TABLE  *SystemTable\r
-  );\r
+/**\r
+  Command entry point.\r
 \r
+  @param[in] RomBar       The Rom Base address.\r
+  @param[in] RomSize      The Rom size.\r
+  @param[in] FileName     The file name.\r
+\r
+  @retval EFI_SUCCESS             The command completed successfully.\r
+  @retval EFI_INVALID_PARAMETER   Command usage error.\r
+  @retval EFI_UNSUPPORTED         Protocols unsupported.\r
+  @retval EFI_OUT_OF_RESOURCES    Out of memory.\r
+  @retval Other value             Unknown error.\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 LoadEfiDriversFromRomImage (\r
@@ -44,6 +56,12 @@ STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
   {NULL, TypeMax}\r
   };\r
 \r
+/**\r
+  Function for 'loadpcirom' command.\r
+\r
+  @param[in] ImageHandle  Handle to the Image (NULL if Internal).\r
+  @param[in] SystemTable  Pointer to the System Table (NULL if Internal).\r
+**/\r
 SHELL_STATUS\r
 EFIAPI\r
 ShellCommandRunLoadPciRom (\r
@@ -83,11 +101,11 @@ ShellCommandRunLoadPciRom (
       ASSERT(FALSE);\r
     }\r
   } else {\r
-    if (ShellCommandLineGetCount(Package) < 1) {\r
+    if (ShellCommandLineGetCount(Package) < 2) {\r
       ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle);\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
     } else {\r
-      if (!ShellCommandLineGetFlag(Package, L"-nc")) {\r
+      if (ShellCommandLineGetFlag(Package, L"-nc")) {\r
         Connect = FALSE;\r
       } else {\r
         Connect = TRUE;\r
@@ -103,15 +121,12 @@ ShellCommandRunLoadPciRom (
          ){\r
         Status = ShellOpenFileMetaArg((CHAR16*)Param, EFI_FILE_MODE_WRITE|EFI_FILE_MODE_READ, &FileList);\r
         if (EFI_ERROR(Status)) {\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_OPEN_FAIL), gShellDebug1HiiHandle, Param, Status);\r
           ShellStatus = SHELL_ACCESS_DENIED;\r
           break;\r
         }\r
       }\r
-      if (FileList == NULL || IsListEmpty(&FileList->Link)) {\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellDebug1HiiHandle);\r
-      } else if (ShellStatus == SHELL_SUCCESS) {\r
-\r
-\r
+      if (ShellStatus == SHELL_SUCCESS  && FileList != NULL) {\r
         //\r
         // loop through the list and make sure we are not aborting...\r
         //\r
@@ -130,7 +145,7 @@ ShellCommandRunLoadPciRom (
             continue;\r
           }\r
           SourceSize  = (UINTN) Node->Info->FileSize;\r
-          File1Buffer = AllocatePool (SourceSize);\r
+          File1Buffer = AllocateZeroPool (SourceSize);\r
           ASSERT(File1Buffer != NULL);\r
           Status = gEfiShellProtocol->ReadFile(Node->Handle, &SourceSize, File1Buffer);\r
           if (EFI_ERROR(Status)) {\r
@@ -147,6 +162,9 @@ ShellCommandRunLoadPciRom (
           }\r
           FreePool(File1Buffer);\r
         }\r
+      } else if (ShellStatus == SHELL_SUCCESS) {\r
+        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_NOT_SPEC), gShellDebug1HiiHandle);\r
+        ShellStatus = SHELL_NOT_FOUND;\r
       }\r
       if (FileList != NULL && !IsListEmpty(&FileList->Link)) {\r
         Status = ShellCloseFileMetaArg(&FileList);\r
@@ -162,31 +180,27 @@ ShellCommandRunLoadPciRom (
   return (ShellStatus);\r
 }\r
 \r
+/**\r
+  Command entry point.\r
+\r
+  @param[in] RomBar       The Rom Base address.\r
+  @param[in] RomSize      The Rom size.\r
+  @param[in] FileName     The file name.\r
+\r
+  @retval EFI_SUCCESS             The command completed successfully.\r
+  @retval EFI_INVALID_PARAMETER   Command usage error.\r
+  @retval EFI_UNSUPPORTED         Protocols unsupported.\r
+  @retval EFI_OUT_OF_RESOURCES    Out of memory.\r
+  @retval Other value             Unknown error.\r
+**/\r
 EFI_STATUS\r
+EFIAPI\r
 LoadEfiDriversFromRomImage (\r
   VOID                      *RomBar,\r
   UINTN                     RomSize,\r
   CONST CHAR16              *FileName\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-  Command entry point.\r
 \r
-Arguments:\r
-\r
-  RomBar   - Rom\r
-  RomSize  - Rom size\r
-  FileName - The file name\r
-\r
-Returns:\r
-  EFI_SUCCESS             - The command completed successfully\r
-  EFI_INVALID_PARAMETER   - Command usage error\r
-  EFI_UNSUPPORTED         - Protocols unsupported\r
-  EFI_OUT_OF_RESOURCES    - Out of memory\r
-  Other value             - Unknown error\r
-\r
-**/\r
 {\r
   EFI_PCI_EXPANSION_ROM_HEADER  *EfiRomHeader;\r
   PCI_DATA_STRUCTURE            *Pcir;\r
@@ -196,7 +210,7 @@ Returns:
   UINT16                        ImageOffset;\r
   EFI_HANDLE                    ImageHandle;\r
   EFI_STATUS                    Status;\r
-  EFI_STATUS                    retStatus;\r
+  EFI_STATUS                    ReturnStatus;\r
   CHAR16                        RomFileName[280];\r
   EFI_DEVICE_PATH_PROTOCOL      *FilePath;\r
   BOOLEAN                       SkipImage;\r
@@ -209,7 +223,7 @@ Returns:
   EFI_DECOMPRESS_PROTOCOL       *Decompress;\r
 \r
   ImageIndex    = 0;\r
-  retStatus     = EFI_NOT_FOUND;\r
+  ReturnStatus     = EFI_NOT_FOUND;\r
   RomBarOffset  = (UINTN) RomBar;\r
 \r
   do {\r
@@ -219,7 +233,7 @@ Returns:
     if (EfiRomHeader->Signature != 0xaa55) {\r
       ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_LOADPCIROM_CORRUPT), gShellDebug1HiiHandle, FileName, ImageIndex);\r
 //      PrintToken (STRING_TOKEN (STR_LOADPCIROM_IMAGE_CORRUPT), HiiHandle, ImageIndex);\r
-      return retStatus;\r
+      return ReturnStatus;\r
     }\r
 \r
     Pcir      = (PCI_DATA_STRUCTURE *) (UINTN) (RomBarOffset + EfiRomHeader->PcirOffset);\r
@@ -262,9 +276,9 @@ Returns:
                                   &ScratchSize\r
                                  );\r
             if (!EFI_ERROR (Status)) {\r
-              DecompressedImageBuffer = AllocatePool (DestinationSize);\r
+              DecompressedImageBuffer = AllocateZeroPool (DestinationSize);\r
               if (ImageBuffer != NULL) {\r
-                Scratch = AllocatePool (ScratchSize);\r
+                Scratch = AllocateZeroPool (ScratchSize);\r
                 if (Scratch != NULL) {\r
                   Status = Decompress->Decompress (\r
                                         Decompress,\r
@@ -312,7 +326,7 @@ Returns:
               ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_LOADPCIROM_START_FAIL), gShellDebug1HiiHandle, FileName, ImageIndex, Status);\r
 //              PrintToken (STRING_TOKEN (STR_LOADPCIROM_START_IMAGE), HiiHandle, ImageIndex, Status);\r
             } else {\r
-              retStatus = Status;\r
+              ReturnStatus = Status;\r
             }\r
           }\r
         }\r
@@ -328,10 +342,17 @@ Returns:
     ImageIndex++;\r
   } while (((Pcir->Indicator & 0x80) == 0x00) && ((RomBarOffset - (UINTN) RomBar) < RomSize));\r
 \r
-  return retStatus;\r
+  return ReturnStatus;\r
 }\r
 \r
+/**\r
+  Connects all available drives and controllers.\r
+\r
+  @retval EFI_SUCCESS     The operation was successful.\r
+  @retval EFI_ABORTED     The abort mechanism was received.\r
+**/\r
 EFI_STATUS\r
+EFIAPI\r
 LoadPciRomConnectAllDriversToAllControllers (\r
   VOID\r
   )\r
index 653c7f2d9eb7a7fc23d777737ddc6cac1af8b3cb..59900d32565b014b1d43b752d95d96c52985c176 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Main file for Mode shell Debug1 function.\r
 \r
-  Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>\r
   This program and the acModeanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
   which acModeanies this distribution.  The full text of the license may be found at\r
 \r
 **/\r
 \r
-STATIC CONST CHAR16 strNameEfiReservedMemoryType[]      = L"Reserved";\r
-STATIC CONST CHAR16 strNameEfiLoaderCode[]              = L"LoadCode";\r
-STATIC CONST CHAR16 strNameEfiLoaderData[]              = L"LoadData";\r
-STATIC CONST CHAR16 strNameEfiBootServicesCode[]        = L"BSCode";\r
-STATIC CONST CHAR16 strNameEfiBootServicesData[]        = L"BSData";\r
-STATIC CONST CHAR16 strNameEfiRuntimeServicesCode[]     = L"RTCode";\r
-STATIC CONST CHAR16 strNameEfiRuntimeServicesData[]     = L"RTData";\r
-STATIC CONST CHAR16 strNameEfiConventionalMemory[]      = L"Conv";\r
-STATIC CONST CHAR16 strNameEfiUnusableMemory[]          = L"Unusable";\r
-STATIC CONST CHAR16 strNameEfiACPIReclaimMemory[]       = L"ACPIRec";\r
-STATIC CONST CHAR16 strNameEfiACPIMemoryNVS[]           = L"ACPI_NVS";\r
-STATIC CONST CHAR16 strNameEfiMemoryMappedIO[]          = L"MMIO";\r
-STATIC CONST CHAR16 strNameEfiMemoryMappedIOPortSpace[] = L"MMIOPort";\r
-STATIC CONST CHAR16 strNameEfiPalCode[]                 = L"PalCode";\r
+STATIC CONST CHAR16 NameEfiReservedMemoryType[]      = L"Reserved";\r
+STATIC CONST CHAR16 NameEfiLoaderCode[]              = L"LoaderCode";\r
+STATIC CONST CHAR16 NameEfiLoaderData[]              = L"LoaderData";\r
+STATIC CONST CHAR16 NameEfiBootServicesCode[]        = L"BS_Code";\r
+STATIC CONST CHAR16 NameEfiBootServicesData[]        = L"BS_Data";\r
+STATIC CONST CHAR16 NameEfiRuntimeServicesCode[]     = L"RT_Code";\r
+STATIC CONST CHAR16 NameEfiRuntimeServicesData[]     = L"RT_Data";\r
+STATIC CONST CHAR16 NameEfiConventionalMemory[]      = L"Available";\r
+STATIC CONST CHAR16 NameEfiUnusableMemory[]          = L"Unusable";\r
+STATIC CONST CHAR16 NameEfiACPIReclaimMemory[]       = L"ACPIRec";\r
+STATIC CONST CHAR16 NameEfiACPIMemoryNVS[]           = L"ACPI_NVS";\r
+STATIC CONST CHAR16 NameEfiMemoryMappedIO[]          = L"MMIO";\r
+STATIC CONST CHAR16 NameEfiMemoryMappedIOPortSpace[] = L"MMIOPort";\r
+STATIC CONST CHAR16 NameEfiPalCode[]                 = L"PalCode";\r
 \r
 #include "UefiShellDebug1CommandsLib.h"\r
 \r
+/**\r
+  Function for 'memmap' command.\r
+\r
+  @param[in] ImageHandle  Handle to the Image (NULL if Internal).\r
+  @param[in] SystemTable  Pointer to the System Table (NULL if Internal).\r
+**/\r
 SHELL_STATUS\r
 EFIAPI\r
 ShellCommandRunMemMap (\r
@@ -64,8 +70,17 @@ ShellCommandRunMemMap (
   UINT64              RTCodePagesSize;\r
   UINT64              AvailPagesSize;\r
   UINT64              TotalPagesSize;\r
+  UINT64              AcpiReclaimPages;\r
+  UINT64              AcpiNvsPages;\r
+  UINT64              MmioSpacePages;\r
+  UINT64              AcpiReclaimPagesSize;\r
+  UINT64              AcpiNvsPagesSize;\r
+  UINT64              MmioSpacePagesSize;\r
   BOOLEAN             Sfo;\r
 \r
+  AcpiReclaimPages    = 0;\r
+  AcpiNvsPages        = 0;\r
+  MmioSpacePages      = 0;\r
   TotalPages          = 0;\r
   ReservedPages       = 0;\r
   LoadCodePages       = 0;\r
@@ -109,7 +124,7 @@ ShellCommandRunMemMap (
       Status = gBS->GetMemoryMap(&Size, Buffer, &MapKey, &ItemSize, &Version);\r
       if (Status == EFI_BUFFER_TOO_SMALL){\r
         Size += SIZE_1KB;\r
-        Buffer = AllocatePool(Size);\r
+        Buffer = AllocateZeroPool(Size);\r
         Status = gBS->GetMemoryMap(&Size, Buffer, &MapKey, &ItemSize, &Version);\r
       }\r
       if (EFI_ERROR(Status)) {\r
@@ -123,67 +138,70 @@ ShellCommandRunMemMap (
           switch (((EFI_MEMORY_DESCRIPTOR*)Walker)->Type) {\r
             // replaced ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages) with 0000\r
             case  EfiReservedMemoryType:\r
-              ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, strNameEfiReservedMemoryType, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages), ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);\r
+              ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, NameEfiReservedMemoryType, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages)-1, ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);\r
               ReservedPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
               TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
               break;\r
             case EfiLoaderCode:\r
-              ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, strNameEfiLoaderCode, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages), ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);\r
+              ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, NameEfiLoaderCode, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages)-1, ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);\r
               LoadCodePages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
               TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
               break;\r
             case EfiLoaderData:\r
-              ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, strNameEfiLoaderData, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages), ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);\r
+              ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, NameEfiLoaderData, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages)-1, ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);\r
               LoadDataPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
               TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
               break;\r
             case EfiBootServicesCode:\r
-              ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, strNameEfiBootServicesCode, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages), ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);\r
+              ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, NameEfiBootServicesCode, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages)-1, ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);\r
               BSCodePages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
               TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
               break;\r
             case EfiBootServicesData:\r
-              ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, strNameEfiBootServicesData, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages), ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);\r
+              ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, NameEfiBootServicesData, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages)-1, ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);\r
               BSDataPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
               TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
               break;\r
             case EfiRuntimeServicesCode:\r
-              ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, strNameEfiRuntimeServicesCode, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages), ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);\r
+              ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, NameEfiRuntimeServicesCode, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages)-1, ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);\r
               RTCodePages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
               TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
               break;\r
             case EfiRuntimeServicesData:\r
-              ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, strNameEfiRuntimeServicesData, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages), ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);\r
+              ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, NameEfiRuntimeServicesData, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages)-1, ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);\r
               RTDataPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
               TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
               break;\r
             case EfiConventionalMemory:\r
-              ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, strNameEfiConventionalMemory, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages), ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);\r
+              ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, NameEfiConventionalMemory, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages)-1, ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);\r
               AvailPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
               TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
               break;\r
             case EfiUnusableMemory:\r
-              ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, strNameEfiUnusableMemory, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages), ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);\r
+              ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, NameEfiUnusableMemory, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages)-1, ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);\r
               TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
               break;\r
             case EfiACPIReclaimMemory:\r
-              ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, strNameEfiACPIReclaimMemory, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages), ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);\r
+              ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, NameEfiACPIReclaimMemory, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages)-1, ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);\r
               TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
+              AcpiReclaimPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
               break;\r
             case EfiACPIMemoryNVS:\r
-              ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, strNameEfiACPIMemoryNVS, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages), ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);\r
+              ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, NameEfiACPIMemoryNVS, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages)-1, ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);\r
               TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
+              AcpiNvsPages    += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
               break;\r
             case EfiMemoryMappedIO:\r
-              ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, strNameEfiMemoryMappedIO, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages), ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);\r
+              ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, NameEfiMemoryMappedIO, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages)-1, ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);\r
               TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
+              MmioSpacePages  += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
               break;\r
             case EfiMemoryMappedIOPortSpace:\r
-              ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, strNameEfiMemoryMappedIOPortSpace, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages), ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);\r
+              ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, NameEfiMemoryMappedIOPortSpace, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages)-1, ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);\r
               TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
               break;\r
             case EfiPalCode:\r
-              ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, strNameEfiPalCode, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages), ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);\r
+              ShellPrintHiiEx(-1, -1, NULL, (EFI_STRING_ID)(!Sfo?STRING_TOKEN (STR_MEMMAP_LIST_ITEM):STRING_TOKEN (STR_MEMMAP_LIST_ITEM_SFO)), gShellDebug1HiiHandle, NameEfiPalCode, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart, ((EFI_MEMORY_DESCRIPTOR*)Walker)->PhysicalStart+MultU64x64(SIZE_4KB,((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages)-1, ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages, ((EFI_MEMORY_DESCRIPTOR*)Walker)->Attribute);\r
               TotalPages += ((EFI_MEMORY_DESCRIPTOR*)Walker)->NumberOfPages;\r
               break;\r
             default:\r
@@ -202,6 +220,9 @@ ShellCommandRunMemMap (
         RTCodePagesSize                  = MultU64x64(SIZE_4KB,RTCodePages);\r
         AvailPagesSize           = MultU64x64(SIZE_4KB,AvailPages);\r
         TotalPagesSize           = MultU64x64(SIZE_4KB,TotalPages);\r
+        AcpiReclaimPagesSize     = MultU64x64(SIZE_4KB,AcpiReclaimPages);\r
+        AcpiNvsPagesSize         = MultU64x64(SIZE_4KB,AcpiNvsPages);\r
+        MmioSpacePagesSize       = MultU64x64(SIZE_4KB,MmioSpacePages);\r
         if (!Sfo) {\r
           ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MEMMAP_LIST_SUMM), gShellDebug1HiiHandle,\r
             ReservedPages, ReservedPagesSize,\r
@@ -209,7 +230,11 @@ ShellCommandRunMemMap (
             LoadDataPages, LoadDataPagesSize,\r
             BSCodePages, BSCodePagesSize,\r
             BSDataPages, BSDataPagesSize,\r
+            RTCodePages, RTCodePagesSize,\r
             RTDataPages, RTDataPagesSize,\r
+            AcpiReclaimPages, AcpiReclaimPagesSize,\r
+            AcpiNvsPages, AcpiNvsPagesSize,\r
+            MmioSpacePages, MmioSpacePagesSize,\r
             AvailPages, AvailPagesSize,\r
             DivU64x32(MultU64x64(SIZE_4KB,TotalPages), SIZE_1MB), TotalPagesSize\r
            );\r
index a9be4950c8d6ad57014449f180af4c9e33271ed3..ad1e9d09b4e4e62825cfaca4352de5c12d8e1503 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Main file for Mm shell Debug1 function.\r
 \r
-  Copyright (c) 2005 - 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2005 - 2011, 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
@@ -25,22 +25,69 @@ typedef enum {
   EfiPciEConfig\r
 } EFI_ACCESS_TYPE;\r
 \r
-EFI_STATUS\r
-EFIAPI\r
-DumpIoModify (\r
-  IN EFI_HANDLE           ImageHandle,\r
-  IN EFI_SYSTEM_TABLE     *SystemTable\r
-  );\r
+STATIC CONST SHELL_PARAM_ITEM ParamList[] = {\r
+  {L"-mmio", TypeFlag},\r
+  {L"-mem", TypeFlag},\r
+  {L"-io", TypeFlag},\r
+  {L"-pci", TypeFlag},\r
+  {L"-pcie", TypeFlag},\r
+  {L"-n", TypeFlag},\r
+  {L"-w", TypeValue},\r
+  {NULL, TypeMax}\r
+  };\r
+\r
+STATIC CONST UINT64 MaxNum[9]      = { 0xff, 0xffff, 0xffffffff, 0xffffffffffffffff };\r
+\r
+/**\r
+  Read some data into a buffer from memory.\r
 \r
+  @param[in] Width    The width of each read.\r
+  @param[in] Addresss The memory location to start reading at.\r
+  @param[in] Size     The size of Buffer in Width sized units.\r
+  @param[out] Buffer  The buffer to read into.\r
+**/\r
 VOID\r
 EFIAPI\r
 ReadMem (\r
   IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH  Width,\r
   IN  UINT64        Address,\r
   IN  UINTN         Size,\r
-  IN  VOID          *Buffer\r
-  );\r
+  OUT VOID          *Buffer\r
+  )\r
+{\r
+  //\r
+  // This function is defective.  This ASSERT prevents the defect from affecting anything.\r
+  //\r
+  ASSERT(Size == 1);\r
+  do {\r
+    if (Width == EfiPciWidthUint8) {\r
+      *(UINT8 *) Buffer = *(UINT8 *) (UINTN) Address;\r
+      Address -= 1;\r
+    } else if (Width == EfiPciWidthUint16) {\r
+      *(UINT16 *) Buffer = *(UINT16 *) (UINTN) Address;\r
+      Address -= 2;\r
+    } else if (Width == EfiPciWidthUint32) {\r
+      *(UINT32 *) Buffer = *(UINT32 *) (UINTN) Address;\r
+      Address -= 4;\r
+    } else if (Width == EfiPciWidthUint64) {\r
+      *(UINT64 *) Buffer = *(UINT64 *) (UINTN) Address;\r
+      Address -= 8;\r
+    } else {\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MM_READ_ERROR), gShellDebug1HiiHandle);\r
+      break;\r
+    }\r
+    Size--;\r
+  } while (Size > 0);\r
+}\r
+\r
+/**\r
+  Write some data to memory.\r
 \r
+  @param[in] Width    The width of each write.\r
+  @param[in] Addresss The memory location to start writing at.\r
+  @param[in] Size     The size of Buffer in Width sized units.\r
+  @param[in] Buffer   The buffer to write from.\r
+**/\r
 VOID\r
 EFIAPI\r
 WriteMem (\r
@@ -48,27 +95,84 @@ WriteMem (
   IN  UINT64        Address,\r
   IN  UINTN         Size,\r
   IN  VOID          *Buffer\r
-  );\r
+  )\r
+{\r
+  //\r
+  // This function is defective.  This ASSERT prevents the defect from affecting anything.\r
+  //\r
+  ASSERT(Size == 1);\r
+  do {\r
+    if (Width == EfiPciWidthUint8) {\r
+      *(UINT8 *) (UINTN) Address = *(UINT8 *) Buffer;\r
+      Address += 1;\r
+    } else if (Width == EfiPciWidthUint16) {\r
+      *(UINT16 *) (UINTN) Address = *(UINT16 *) Buffer;\r
+      Address += 2;\r
+    } else if (Width == EfiPciWidthUint32) {\r
+      *(UINT32 *) (UINTN) Address = *(UINT32 *) Buffer;\r
+      Address += 4;\r
+    } else if (Width == EfiPciWidthUint64) {\r
+      *(UINT64 *) (UINTN) Address = *(UINT64 *) Buffer;\r
+      Address += 8;\r
+    } else {\r
+      ASSERT (FALSE);\r
+    }\r
+    //\r
+    //\r
+    //\r
+    Size--;\r
+  } while (Size > 0);\r
+}\r
 \r
+/**\r
+  Convert a string to it's hex data.\r
+\r
+  @param[in] str    The pointer to the string of hex data.\r
+  @param[out] data  The pointer to the buffer to fill.  Valid upon a TRUE return.\r
+\r
+  @retval TRUE      The conversion was successful.\r
+  @retval FALSE     The conversion failed.\r
+**/\r
 BOOLEAN\r
 EFIAPI\r
 GetHex (\r
   IN  UINT16  *str,\r
   OUT UINT64  *data\r
-  );\r
+  )\r
+{\r
+  UINTN   TempUint;\r
+  CHAR16  TempChar;\r
+  BOOLEAN Find;\r
 \r
-STATIC CONST SHELL_PARAM_ITEM ParamList[] = {\r
-  {L"-mmio", TypeFlag},\r
-  {L"-mem", TypeFlag},\r
-  {L"-io", TypeFlag},\r
-  {L"-pci", TypeFlag},\r
-  {L"-pcie", TypeFlag},\r
-  {L"-n", TypeFlag},\r
-  {L"-w", TypeValue},\r
-  {NULL, TypeMax}\r
-  };\r
+  Find = FALSE;\r
+  //\r
+  // convert hex digits\r
+  //\r
+  TempUint = 0;\r
+  TempChar = *(str++);\r
+  while (TempChar != CHAR_NULL) {\r
+    if (TempChar >= 'a' && TempChar <= 'f') {\r
+      TempChar -= 'a' - 'A';\r
+    }\r
 \r
-STATIC CONST UINT64 MaxNum[9]      = { 0xff, 0xffff, 0xffffffff, 0xffffffffffffffff };\r
+    if (TempChar == ' ') {\r
+      break;\r
+    }\r
+\r
+    if ((TempChar >= '0' && TempChar <= '9') || (TempChar >= 'A' && TempChar <= 'F')) {\r
+      TempUint     = TempUint << 4 | TempChar - (TempChar >= 'A' ? 'A' - 10 : '0');\r
+\r
+      Find  = TRUE;\r
+    } else {\r
+      return FALSE;\r
+    }\r
+\r
+    TempChar = *(str++);\r
+  }\r
+\r
+  *data = TempUint;\r
+  return Find;\r
+}\r
 \r
 /**\r
   Get the PCI-E Address from a PCI address format 0x0000ssbbddffrrr\r
@@ -157,7 +261,7 @@ ShellCommandRunMm (
       ASSERT(FALSE);\r
     }\r
   } else {\r
-    if (ShellCommandLineGetCount(Package) < 1) {\r
+    if (ShellCommandLineGetCount(Package) < 2) {\r
       ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle);\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
       goto Done;\r
@@ -165,15 +269,49 @@ ShellCommandRunMm (
       ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle);\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
       goto Done;\r
+    } else if (ShellCommandLineGetFlag(Package, L"-w") && ShellCommandLineGetValue(Package, L"-w") == NULL) {\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDebug1HiiHandle, L"-w");\r
+      ShellStatus = SHELL_INVALID_PARAMETER;\r
+      goto Done;\r
     } else {\r
       if (ShellCommandLineGetFlag(Package, L"-mmio")) {\r
         AccessType = EFIMemoryMappedIo;\r
+        if (ShellCommandLineGetFlag(Package, L"-mem")\r
+          ||ShellCommandLineGetFlag(Package, L"-io")\r
+          ||ShellCommandLineGetFlag(Package, L"-pci")\r
+          ||ShellCommandLineGetFlag(Package, L"-pcie")\r
+        ){\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle);\r
+          ShellStatus = SHELL_INVALID_PARAMETER;\r
+          goto Done;\r
+        }\r
       } else if (ShellCommandLineGetFlag(Package, L"-mem")) {\r
         AccessType = EfiMemory;\r
+        if (ShellCommandLineGetFlag(Package, L"-io")\r
+          ||ShellCommandLineGetFlag(Package, L"-pci")\r
+          ||ShellCommandLineGetFlag(Package, L"-pcie")\r
+        ){\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle);\r
+          ShellStatus = SHELL_INVALID_PARAMETER;\r
+          goto Done;\r
+        }\r
       } else if (ShellCommandLineGetFlag(Package, L"-io")) {\r
         AccessType = EfiIo;\r
+        if (ShellCommandLineGetFlag(Package, L"-pci")\r
+          ||ShellCommandLineGetFlag(Package, L"-pcie")\r
+        ){\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle);\r
+          ShellStatus = SHELL_INVALID_PARAMETER;\r
+          goto Done;\r
+        }\r
       } else if (ShellCommandLineGetFlag(Package, L"-pci")) {\r
         AccessType = EfiPciConfig;\r
+        if (ShellCommandLineGetFlag(Package, L"-pcie")\r
+        ){\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle);\r
+          ShellStatus = SHELL_INVALID_PARAMETER;\r
+          goto Done;\r
+        }\r
       } else if (ShellCommandLineGetFlag(Package, L"-pcie")) {\r
         AccessType = EfiPciEConfig;\r
       }\r
@@ -185,7 +323,7 @@ ShellCommandRunMm (
 \r
     Temp = ShellCommandLineGetValue(Package, L"-w");\r
     if (Temp != NULL) {\r
-      ItemValue = StrDecimalToUintn (Temp);\r
+      ItemValue = ShellStrToUintn (Temp);\r
 \r
       switch (ItemValue) {\r
       case 1:\r
@@ -209,20 +347,26 @@ ShellCommandRunMm (
         break;\r
 \r
       default:\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, L"-w");\r
+        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM_VAL), gShellDebug1HiiHandle, L"-w");\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
         goto Done;\r
       }\r
     }\r
 \r
     Temp = ShellCommandLineGetRawValue(Package, 1);\r
-    if (Temp != NULL) {\r
-      Address = StrHexToUint64(Temp);\r
+    if (!ShellIsHexOrDecimalNumber(Temp, TRUE, FALSE) || EFI_ERROR(ShellConvertStringToUint64(Temp, (UINT64*)&Address, TRUE, FALSE))) {\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, Temp);\r
+      ShellStatus = SHELL_INVALID_PARAMETER;\r
+      goto Done;\r
     }\r
 \r
     Temp = ShellCommandLineGetRawValue(Package, 2);\r
     if (Temp != NULL) {\r
-      Value = StrHexToUint64(Temp);\r
+      if (!ShellIsHexOrDecimalNumber(Temp, TRUE, FALSE) || EFI_ERROR(ShellConvertStringToUint64(Temp, &Value, TRUE, FALSE))) {\r
+        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, Temp);\r
+        ShellStatus = SHELL_INVALID_PARAMETER;\r
+        goto Done;\r
+      }\r
       switch (Size) {\r
       case 1:\r
         if (Value > 0xFF) {\r
@@ -304,7 +448,6 @@ ShellCommandRunMm (
         }\r
       }\r
       if (IoDev == NULL) {\r
-        // TODO add token\r
         ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MM_SEGMENT_NOT_FOUND), gShellDebug1HiiHandle, SegmentNumber);\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
         goto Done;\r
@@ -357,10 +500,10 @@ ShellCommandRunMm (
         ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MM_PCI), gShellDebug1HiiHandle);\r
         IoDev->Pci.Read (IoDev, Width, Address, 1, &Buffer);\r
       } else if (AccessType == EfiPciEConfig) {\r
-         ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MM_PCIE), gShellDebug1HiiHandle);\r
+        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MM_PCIE), gShellDebug1HiiHandle);\r
         IoDev->Pci.Read (IoDev, Width, PciEAddress, 1, &Buffer);\r
       } else {\r
-         ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MM_MEM), gShellDebug1HiiHandle);\r
+        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MM_MEM), gShellDebug1HiiHandle);\r
         ReadMem (Width, Address, 1, &Buffer);\r
       }\r
 \r
@@ -387,68 +530,59 @@ ShellCommandRunMm (
     do {\r
       if (AccessType == EfiIo && Address + Size > 0x10000) {\r
         ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MM_ADDRESS_RANGE2), gShellDebug1HiiHandle);\r
-  //      PrintToken (STRING_TOKEN (STR_IOMOD_IO_ADDRESS_2), HiiHandle, L"mm");\r
         break;\r
       }\r
 \r
       Buffer = 0;\r
       if (AccessType == EFIMemoryMappedIo) {\r
         ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MM_MMIO), gShellDebug1HiiHandle);\r
-  //      PrintToken (STRING_TOKEN (STR_IOMOD_HMMIO), HiiHandle);\r
         IoDev->Mem.Read (IoDev, Width, Address, 1, &Buffer);\r
       } else if (AccessType == EfiIo) {\r
         ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MM_IO), gShellDebug1HiiHandle);\r
-  //      PrintToken (STRING_TOKEN (STR_IOMOD_HIO), HiiHandle);\r
         IoDev->Io.Read (IoDev, Width, Address, 1, &Buffer);\r
       } else if (AccessType == EfiPciConfig) {\r
         ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MM_PCI), gShellDebug1HiiHandle);\r
-  //      PrintToken (STRING_TOKEN (STR_IOMOD_HPCI), HiiHandle);\r
         IoDev->Pci.Read (IoDev, Width, Address, 1, &Buffer);\r
       } else if (AccessType == EfiPciEConfig) {\r
         ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MM_PCIE), gShellDebug1HiiHandle);\r
-  //      PrintToken (STRING_TOKEN (STR_IOMOD_HPCIE), HiiHandle);\r
         IoDev->Pci.Read (IoDev, Width, PciEAddress, 1, &Buffer);\r
       } else {\r
         ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MM_MEM), gShellDebug1HiiHandle);\r
-  //      PrintToken (STRING_TOKEN (STR_IOMOD_HMEM), HiiHandle);\r
         ReadMem (Width, Address, 1, &Buffer);\r
       }\r
 \r
       ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MM_ADDRESS), gShellDebug1HiiHandle, Address);\r
-  //    PrintToken (STRING_TOKEN (STR_IOMOD_ADDRESS), HiiHandle, Address);\r
 \r
       if (Size == 1) {\r
         ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MM_BUF2), gShellDebug1HiiHandle, Buffer);\r
-  //      PrintToken (STRING_TOKEN (STR_IOMOD_BUFFER_2), HiiHandle, Buffer);\r
       } else if (Size == 2) {\r
         ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MM_BUF4), gShellDebug1HiiHandle, Buffer);\r
-  //      PrintToken (STRING_TOKEN (STR_IOMOD_BUFFER_4), HiiHandle, Buffer);\r
       } else if (Size == 4) {\r
         ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MM_BUF8), gShellDebug1HiiHandle, Buffer);\r
-  //      PrintToken (STRING_TOKEN (STR_IOMOD_BUFFER_8), HiiHandle, Buffer);\r
       } else if (Size == 8) {\r
         ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MM_BUF16), gShellDebug1HiiHandle, Buffer);\r
-  //      PrintToken (STRING_TOKEN (STR_IOMOD_BUFFER_16), HiiHandle, Buffer);\r
       }\r
+      ShellPrintEx(-1, -1, L" > ");\r
       //\r
       // wait user input to modify\r
       //\r
       if (InputStr != NULL) {\r
         FreePool(InputStr);\r
+        InputStr = NULL;\r
       }\r
       ShellPromptForResponse(ShellPromptResponseTypeFreeform, NULL, (VOID**)&InputStr);\r
 \r
       //\r
       // skip space characters\r
       //\r
-      for (Index = 0; InputStr[Index] == ' '; Index++);\r
+      for (Index = 0; InputStr != NULL && InputStr[Index] == ' '; Index++);\r
 \r
       //\r
       // parse input string\r
       //\r
-      if (InputStr[Index] == '.' || InputStr[Index] == 'q' || InputStr[Index] == 'Q') {\r
+      if (InputStr != NULL && (InputStr[Index] == '.' || InputStr[Index] == 'q' || InputStr[Index] == 'Q')) {\r
         Complete = TRUE;\r
-      } else if (InputStr[Index] == CHAR_NULL) {\r
+      } else if (InputStr == NULL || InputStr[Index] == CHAR_NULL) {\r
         //\r
         // Continue to next address\r
         //\r
@@ -466,8 +600,8 @@ ShellCommandRunMm (
         }\r
       } else {\r
         ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MM_ERROR), gShellDebug1HiiHandle);\r
-  //      PrintToken (STRING_TOKEN (STR_IOMOD_ERROR), HiiHandle);\r
         continue;\r
+  //      PrintToken (STRING_TOKEN (STR_IOMOD_ERROR), HiiHandle);\r
       }\r
 \r
       Address += Size;\r
@@ -492,111 +626,3 @@ Done:
   }\r
   return ShellStatus;\r
 }\r
-\r
-\r
-VOID\r
-EFIAPI\r
-ReadMem (\r
-  IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH  Width,\r
-  IN  UINT64        Address,\r
-  IN  UINTN         Size,\r
-  IN  VOID          *Buffer\r
-  )\r
-{\r
-  do {\r
-    if (Width == EfiPciWidthUint8) {\r
-      *(UINT8 *) Buffer = *(UINT8 *) (UINTN) Address;\r
-      Address -= 1;\r
-    } else if (Width == EfiPciWidthUint16) {\r
-      *(UINT16 *) Buffer = *(UINT16 *) (UINTN) Address;\r
-      Address -= 2;\r
-    } else if (Width == EfiPciWidthUint32) {\r
-      *(UINT32 *) Buffer = *(UINT32 *) (UINTN) Address;\r
-      Address -= 4;\r
-    } else if (Width == EfiPciWidthUint64) {\r
-      *(UINT64 *) Buffer = *(UINT64 *) (UINTN) Address;\r
-      Address -= 8;\r
-    } else {\r
-      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MM_READ_ERROR), gShellDebug1HiiHandle);\r
-//      PrintToken (STRING_TOKEN (STR_IOMOD_READ_MEM_ERROR), HiiHandle);\r
-      break;\r
-    }\r
-    //\r
-    //\r
-    //\r
-    Size--;\r
-  } while (Size > 0);\r
-}\r
-\r
-VOID\r
-EFIAPI\r
-WriteMem (\r
-  IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH  Width,\r
-  IN  UINT64        Address,\r
-  IN  UINTN         Size,\r
-  IN  VOID          *Buffer\r
-  )\r
-{\r
-  do {\r
-    if (Width == EfiPciWidthUint8) {\r
-      *(UINT8 *) (UINTN) Address = *(UINT8 *) Buffer;\r
-      Address += 1;\r
-    } else if (Width == EfiPciWidthUint16) {\r
-      *(UINT16 *) (UINTN) Address = *(UINT16 *) Buffer;\r
-      Address += 2;\r
-    } else if (Width == EfiPciWidthUint32) {\r
-      *(UINT32 *) (UINTN) Address = *(UINT32 *) Buffer;\r
-      Address += 4;\r
-    } else if (Width == EfiPciWidthUint64) {\r
-      *(UINT64 *) (UINTN) Address = *(UINT64 *) Buffer;\r
-      Address += 8;\r
-    } else {\r
-      ASSERT (FALSE);\r
-    }\r
-    //\r
-    //\r
-    //\r
-    Size--;\r
-  } while (Size > 0);\r
-}\r
-\r
-BOOLEAN\r
-EFIAPI\r
-GetHex (\r
-  IN  UINT16  *str,\r
-  OUT UINT64  *data\r
-  )\r
-{\r
-  UINTN   u;\r
-  CHAR16  c;\r
-  BOOLEAN Find;\r
-\r
-  Find = FALSE;\r
-  //\r
-  // convert hex digits\r
-  //\r
-  u = 0;\r
-  c = *(str++);\r
-  while (c != CHAR_NULL) {\r
-    if (c >= 'a' && c <= 'f') {\r
-      c -= 'a' - 'A';\r
-    }\r
-\r
-    if (c == ' ') {\r
-      break;\r
-    }\r
-\r
-    if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'F')) {\r
-      u     = u << 4 | c - (c >= 'A' ? 'A' - 10 : '0');\r
-\r
-      Find  = TRUE;\r
-    } else {\r
-      return FALSE;\r
-    }\r
-\r
-    c = *(str++);\r
-  }\r
-\r
-  *data = u;\r
-  return Find;\r
-}\r
index 53ba0b6cd483d9384db9efe586f13a96a09fa091..d2b67d5760aaf342cda74fd510b104f5bce4dd05 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Main file for Mode shell Debug1 function.\r
 \r
-  Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>\r
   This program and the acModeanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
   which acModeanies this distribution.  The full text of the license may be found at\r
 \r
 #include "UefiShellDebug1CommandsLib.h"\r
 \r
+/**\r
+  Function for 'mode' command.\r
+\r
+  @param[in] ImageHandle  Handle to the Image (NULL if Internal).\r
+  @param[in] SystemTable  Pointer to the System Table (NULL if Internal).\r
+**/\r
 SHELL_STATUS\r
 EFIAPI\r
 ShellCommandRunMode (\r
index 56d5f7fd6f9fa8dbd9f55d8974df8a57b7b2fdc1..d3a33e207ccdec16c3b0dd7c37cfadf84ab8e2da 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Main file for Pci shell Debug1 function.\r
 \r
-  Copyright (c) 2005 - 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2005 - 2011, 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
@@ -1938,14 +1938,29 @@ ShellCommandRunPci (
     }\r
   } else {\r
 \r
+    if (ShellCommandLineGetCount(Package) == 2) {\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle);\r
+      ShellStatus = SHELL_INVALID_PARAMETER;\r
+      goto Done;\r
+    }\r
 \r
+    if (ShellCommandLineGetCount(Package) > 4) {\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle);\r
+      ShellStatus = SHELL_INVALID_PARAMETER;\r
+      goto Done;\r
+    }\r
+    if (ShellCommandLineGetFlag(Package, L"-s") && ShellCommandLineGetValue(Package, L"-s") == NULL) {\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDebug1HiiHandle, L"-s");\r
+      ShellStatus = SHELL_INVALID_PARAMETER;\r
+      goto Done;\r
+    }\r
     //\r
     // Get all instances of PciRootBridgeIo. Allocate space for 1 EFI_HANDLE and\r
     // call LibLocateHandle(), if EFI_BUFFER_TOO_SMALL is returned, allocate enough\r
     // space for handles and call it again.\r
     //\r
     HandleBufSize = sizeof (EFI_HANDLE);\r
-    HandleBuf     = (EFI_HANDLE *) AllocatePool (HandleBufSize);\r
+    HandleBuf     = (EFI_HANDLE *) AllocateZeroPool (HandleBufSize);\r
     if (HandleBuf == NULL) {\r
       ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_OUT_MEM), gShellDebug1HiiHandle);\r
       ShellStatus = SHELL_OUT_OF_RESOURCES;\r
@@ -1987,7 +2002,7 @@ ShellCommandRunPci (
     //\r
     // Argument Count == 1(no other argument): enumerate all pci functions\r
     //\r
-    if (ShellCommandLineGetCount(Package) == 0) {\r
+    if (ShellCommandLineGetCount(Package) == 1) {\r
       gST->ConOut->QueryMode (\r
                     gST->ConOut,\r
                     gST->ConOut->Mode->Mode,\r
@@ -2134,20 +2149,6 @@ ShellCommandRunPci (
       goto Done;\r
     }\r
 \r
-    if (ShellCommandLineGetCount(Package) == 1) {\r
-      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle);\r
-      ShellStatus = SHELL_INVALID_PARAMETER;\r
-      goto Done;\r
-    }\r
-    //\r
-    // Arg count >= 3, dump binary of specified function, interpret if necessary\r
-    //\r
-    if (ShellCommandLineGetCount(Package) > 3) {\r
-      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle);\r
-      ShellStatus = SHELL_INVALID_PARAMETER;\r
-      goto Done;\r
-    }\r
-\r
     ExplainData                   = FALSE;\r
     Segment                       = 0;\r
     Bus                           = 0;\r
@@ -2159,7 +2160,7 @@ ShellCommandRunPci (
 \r
     Temp = ShellCommandLineGetValue(Package, L"-s");\r
     if (Temp != NULL) {\r
-      Segment = (UINT16) StrHexToUintn (Temp);\r
+      Segment = (UINT16) ShellStrToUintn (Temp);\r
     }\r
 \r
     //\r
@@ -2168,7 +2169,7 @@ ShellCommandRunPci (
     //\r
     Temp = ShellCommandLineGetRawValue(Package, 1);\r
     if (Temp != NULL) {\r
-      Bus = (UINT16)StrHexToUintn(Temp);\r
+      Bus = (UINT16)ShellStrToUintn(Temp);\r
       if (Bus > MAX_BUS_NUMBER) {\r
         ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, Temp);\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
@@ -2177,7 +2178,7 @@ ShellCommandRunPci (
     }\r
     Temp = ShellCommandLineGetRawValue(Package, 2);\r
     if (Temp != NULL) {\r
-      Device = (UINT16) StrHexToUintn(Temp);\r
+      Device = (UINT16) ShellStrToUintn(Temp);\r
       if (Device > MAX_DEVICE_NUMBER){\r
         ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, Temp);\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
@@ -2187,7 +2188,7 @@ ShellCommandRunPci (
 \r
     Temp = ShellCommandLineGetRawValue(Package, 3);\r
     if (Temp != NULL) {\r
-      Func = (UINT16) StrHexToUintn(Temp);\r
+      Func = (UINT16) ShellStrToUintn(Temp);\r
       if (Func > MAX_FUNCTION_NUMBER){\r
         ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, Temp);\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
@@ -2469,21 +2470,22 @@ Returns:
   // if a bus typed one is found and its bus range covers bus, this handle\r
   // is the handle we are looking for.\r
   //\r
-  if ((*Descriptors)->Desc == ACPI_END_TAG_DESCRIPTOR) {\r
-    *IsEnd = TRUE;\r
-  }\r
 \r
   while ((*Descriptors)->Desc != ACPI_END_TAG_DESCRIPTOR) {\r
     if ((*Descriptors)->ResType == ACPI_ADDRESS_SPACE_TYPE_BUS) {\r
       *MinBus = (UINT16) (*Descriptors)->AddrRangeMin;\r
       *MaxBus = (UINT16) (*Descriptors)->AddrRangeMax;\r
       (*Descriptors)++;\r
-      break;\r
+      return (EFI_SUCCESS);\r
     }\r
 \r
     (*Descriptors)++;\r
   }\r
 \r
+  if ((*Descriptors)->Desc == ACPI_END_TAG_DESCRIPTOR) {\r
+    *IsEnd = TRUE;\r
+  }\r
+\r
   return EFI_SUCCESS;\r
 }\r
 \r
@@ -4496,7 +4498,7 @@ PciExplainPciExpress (
 \r
   ExtendRegSize = 0x1000 - 0x100;\r
 \r
-  ExRegBuffer   = (UINT8 *) AllocatePool (ExtendRegSize);\r
+  ExRegBuffer   = (UINT8 *) AllocateZeroPool (ExtendRegSize);\r
 \r
   //\r
   // PciRootBridgeIo protocol should support pci express extend space IO\r
index 52612283a2bb4c1df26d14bb86ea54651e8744c8..e464d57fe48137bddd51208bbfbca62bf7c21253 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Main file for SerMode shell Debug1 function.\r
 \r
-  Copyright (c) 2005 - 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2005 - 2011, 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
 #include <Library/ShellLib.h>\r
 #include <Protocol/SerialIo.h>\r
 \r
+/**\r
+  Display information about a serial device by it's handle.\r
+\r
+  If HandleValid is FALSE, do all devices.\r
+\r
+  @param[in] HandleIdx      The handle index for the device.\r
+  @param[in] HandleValid    TRUE if HandleIdx is valid.\r
+\r
+  @retval SHELL_INVALID_PARAMETER   A parameter was invalid.\r
+  @retval SHELL_SUCCESS             The operation was successful.\r
+**/\r
 SHELL_STATUS\r
 EFIAPI\r
-iDisplaySettings (\r
+DisplaySettings (\r
   IN UINTN                   HandleIdx,\r
   IN BOOLEAN                 HandleValid\r
   )\r
@@ -147,6 +158,12 @@ iDisplaySettings (
   return ShellStatus;\r
 }\r
 \r
+/**\r
+  Function for 'sermode' command.\r
+\r
+  @param[in] ImageHandle  Handle to the Image (NULL if Internal).\r
+  @param[in] SystemTable  Pointer to the System Table (NULL if Internal).\r
+**/\r
 SHELL_STATUS\r
 EFIAPI\r
 ShellCommandRunSerMode (\r
@@ -169,6 +186,7 @@ ShellCommandRunSerMode (
   LIST_ENTRY              *Package;\r
   CHAR16                  *ProblemParam;\r
   CONST CHAR16            *Temp;\r
+  UINT64                  Intermediate;\r
 \r
   ShellStatus = SHELL_SUCCESS;\r
   HandleIdx   = 0;\r
@@ -188,28 +206,29 @@ ShellCommandRunSerMode (
       ASSERT(FALSE);\r
     }\r
   } else {\r
-    if (ShellCommandLineGetCount(Package) < 5 && ShellCommandLineGetCount(Package) > 1) {\r
+    if (ShellCommandLineGetCount(Package) < 6 && ShellCommandLineGetCount(Package) > 2) {\r
       ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle);\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
-    } else if (ShellCommandLineGetCount(Package) > 5) {\r
+    } else if (ShellCommandLineGetCount(Package) > 6) {\r
       ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle);\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
     } else {\r
       Temp = ShellCommandLineGetRawValue(Package, 1);\r
       if (Temp != NULL) {\r
-        HandleIdx = StrHexToUintn(Temp);\r
+        Status = ShellConvertStringToUint64(Temp, &Intermediate, TRUE, FALSE);\r
+        HandleIdx = (UINTN)Intermediate;\r
         Temp = ShellCommandLineGetRawValue(Package, 2);\r
         if (Temp == NULL) {\r
-          ShellStatus = iDisplaySettings (HandleIdx, TRUE);\r
+          ShellStatus = DisplaySettings (HandleIdx, TRUE);\r
           goto Done;\r
         }\r
       } else {\r
-        ShellStatus = iDisplaySettings (0, FALSE);\r
+        ShellStatus = DisplaySettings (0, FALSE);\r
         goto Done;\r
       }\r
       Temp = ShellCommandLineGetRawValue(Package, 2);\r
       if (Temp != NULL) {\r
-        BaudRate = StrHexToUintn(Temp);\r
+        BaudRate = ShellStrToUintn(Temp);\r
       } else {\r
         ASSERT(FALSE);\r
         BaudRate = 0;\r
@@ -252,7 +271,7 @@ ShellCommandRunSerMode (
       }\r
       Temp = ShellCommandLineGetRawValue(Package, 4);\r
       if (Temp != NULL) {\r
-        DataBits = StrHexToUintn(Temp);\r
+        DataBits = ShellStrToUintn(Temp);\r
       } else {\r
         //\r
         // make sure this is some number not in the list below.\r
@@ -270,7 +289,7 @@ ShellCommandRunSerMode (
         goto Done;\r
       }\r
       Temp = ShellCommandLineGetRawValue(Package, 5);\r
-      Value = StrHexToUintn(Temp);\r
+      Value = ShellStrToUintn(Temp);\r
       switch (Value) {\r
       case 0:\r
         StopBits = DefaultStopBits;\r
@@ -328,7 +347,7 @@ ShellCommandRunSerMode (
     }\r
   }\r
 \r
-  if (Index == NoHandles) {\r
+  if (ShellStatus == SHELL_SUCCESS && Index == NoHandles) {\r
     ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SERMODE_BAD_HANDLE), gShellDebug1HiiHandle, HandleIdx);\r
     ShellStatus = SHELL_INVALID_PARAMETER;\r
   }\r
index 30a382fb049ba13a19b2b45dac3f838e82a5b47c..24200320fcca69303964107d241552aac874a3c4 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Main file for SetSize shell Debug1 function.\r
 \r
-  Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2010 - 2011, 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
 \r
 #include "UefiShellDebug1CommandsLib.h"\r
 \r
+/**\r
+  Function for 'setsize' command.\r
+\r
+  @param[in] ImageHandle  Handle to the Image (NULL if Internal).\r
+  @param[in] SystemTable  Pointer to the System Table (NULL if Internal).\r
+**/\r
 SHELL_STATUS\r
 EFIAPI\r
 ShellCommandRunSetSize (\r
@@ -55,20 +61,31 @@ ShellCommandRunSetSize (
       ASSERT(FALSE);\r
     }\r
   } else {\r
-    Temp1 = ShellCommandLineGetRawValue(Package, 1);\r
-    if (Temp1 == NULL) {\r
-      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SIZE_NOT_SPEC), gShellDebug1HiiHandle);\r
+    if (ShellCommandLineGetCount(Package) < 3) {\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle);\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
       NewSize = 0;\r
     } else {\r
-      NewSize = ShellStrToUintn(Temp1);\r
+      Temp1 = ShellCommandLineGetRawValue(Package, 1);\r
+      if (!ShellIsHexOrDecimalNumber(Temp1, FALSE, FALSE)) {\r
+        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SIZE_NOT_SPEC), gShellDebug1HiiHandle);\r
+        ShellStatus = SHELL_INVALID_PARAMETER;\r
+        NewSize = 0;\r
+      } else {\r
+        NewSize = ShellStrToUintn(Temp1);\r
+      }\r
     }\r
     for (LoopVar = 2 ; LoopVar < ShellCommandLineGetCount(Package) && ShellStatus == SHELL_SUCCESS ; LoopVar++) {\r
-      Status = ShellOpenFileByName(ShellCommandLineGetRawValue(Package, LoopVar), &FileHandle, EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE|EFI_FILE_MODE_CREATE, 0);\r
+      Status = ShellOpenFileByName(ShellCommandLineGetRawValue(Package, LoopVar), &FileHandle, EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE, 0);\r
+      if (EFI_ERROR(Status)) {\r
+        Status = ShellOpenFileByName(ShellCommandLineGetRawValue(Package, LoopVar), &FileHandle, EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE|EFI_FILE_MODE_CREATE, 0);\r
+      }\r
       if (EFI_ERROR(Status) && LoopVar == 2) {\r
         ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_NOT_SPEC), gShellDebug1HiiHandle);\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
       } else if (EFI_ERROR(Status)) {\r
+        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_OPEN_FAIL), gShellDebug1HiiHandle, ShellCommandLineGetRawValue(Package, LoopVar), Status);\r
+        ShellStatus = SHELL_INVALID_PARAMETER;\r
         break;\r
       } else {\r
         Status = FileHandleSetSize(FileHandle, NewSize);\r
@@ -78,6 +95,8 @@ ShellCommandRunSetSize (
         } else if (EFI_ERROR(Status)) {\r
           ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SET_SIZE_FAIL), gShellDebug1HiiHandle, ShellCommandLineGetRawValue(Package, LoopVar), Status);\r
           ShellStatus = SHELL_INVALID_PARAMETER;\r
+        } else {\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SET_SIZE_DONE), gShellDebug1HiiHandle, ShellCommandLineGetRawValue(Package, LoopVar));\r
         }\r
         ShellCloseFile(&FileHandle);\r
       }\r
index f8c6dd2e30d3c2383a369adaf7f92616893be9e5..324db922e6ae6d5d6ee5b9830df9dba9c5552bac 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Main file for SetVar shell Debug1 function.\r
 \r
-  Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2010 - 2011, 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
@@ -22,6 +22,12 @@ STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
   {NULL, TypeMax}\r
   };\r
 \r
+/**\r
+  Function for 'setvar' command.\r
+\r
+  @param[in] ImageHandle  Handle to the Image (NULL if Internal).\r
+  @param[in] SystemTable  Pointer to the System Table (NULL if Internal).\r
+**/\r
 SHELL_STATUS\r
 EFIAPI\r
 ShellCommandRunSetVar (\r
@@ -38,6 +44,7 @@ ShellCommandRunSetVar (
   EFI_GUID            Guid;\r
   CONST CHAR16        *StringGuid;\r
   UINT32              Attributes;\r
+  UINT32              Attributes2;\r
   VOID                *Buffer;\r
   UINTN               Size;\r
   UINTN               LoopVar;\r
@@ -88,7 +95,8 @@ ShellCommandRunSetVar (
         StringGuid = ShellCommandLineGetValue(Package, L"-guid");\r
         Status = ConvertStringToGuid(StringGuid, &Guid);\r
         if (EFI_ERROR(Status)) {\r
-          ShellStatus = SHELL_NOT_FOUND;\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, StringGuid);\r
+          ShellStatus = SHELL_INVALID_PARAMETER;\r
         }\r
       }\r
       if (Data == NULL) {\r
@@ -97,7 +105,7 @@ ShellCommandRunSetVar (
         //\r
         Status = gRT->GetVariable((CHAR16*)VariableName, &Guid, &Attributes, &Size, Buffer);\r
         if (Status == EFI_BUFFER_TOO_SMALL) {\r
-          Buffer = AllocatePool(Size);\r
+          Buffer = AllocateZeroPool(Size);\r
           Status = gRT->GetVariable((CHAR16*)VariableName, &Guid, &Attributes, &Size, Buffer);\r
         }\r
         if (!EFI_ERROR(Status)&& Buffer != NULL) {\r
@@ -138,22 +146,36 @@ ShellCommandRunSetVar (
           Attributes |= EFI_VARIABLE_NON_VOLATILE;\r
         }\r
         if (ShellIsHexOrDecimalNumber(Data, TRUE, FALSE)) {\r
-          //\r
-          // arbitrary buffer\r
-          //\r
-          Buffer = AllocateZeroPool((StrLen(Data) / 2));\r
-          for (LoopVar = 0 ; LoopVar < (StrLen(Data) / 2) ; LoopVar++) {\r
-            ((UINT8*)Buffer)[LoopVar] = (UINT8)(HexCharToUintn(Data[LoopVar*2]) * 16);\r
-            ((UINT8*)Buffer)[LoopVar] = (UINT8)(((UINT8*)Buffer)[LoopVar] + HexCharToUintn(Data[LoopVar*2+1]));\r
-          }\r
-          Status = gRT->SetVariable((CHAR16*)VariableName, &Guid, Attributes, StrLen(Data) / 2, Buffer);\r
-          if (EFI_ERROR(Status)) {\r
-            ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SETVAR_ERROR_SET), gShellDebug1HiiHandle, &Guid, VariableName, Status);\r
-            ShellStatus = SHELL_ACCESS_DENIED;\r
+          if (StrLen(Data) % 2 != 0) {\r
+            ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM_VAL), gShellDebug1HiiHandle, Data);\r
+            ShellStatus = SHELL_INVALID_PARAMETER;\r
           } else {\r
-            ASSERT(ShellStatus == SHELL_SUCCESS);\r
+            //\r
+            // arbitrary buffer\r
+            //\r
+            Buffer = AllocateZeroPool((StrLen(Data) / 2));\r
+            for (LoopVar = 0 ; LoopVar < (StrLen(Data) / 2) ; LoopVar++) {\r
+              ((UINT8*)Buffer)[LoopVar] = (UINT8)(HexCharToUintn(Data[LoopVar*2]) * 16);\r
+              ((UINT8*)Buffer)[LoopVar] = (UINT8)(((UINT8*)Buffer)[LoopVar] + HexCharToUintn(Data[LoopVar*2+1]));\r
+            }\r
+            Status = gRT->SetVariable((CHAR16*)VariableName, &Guid, Attributes, StrLen(Data) / 2, Buffer);\r
+            if (EFI_ERROR(Status)) {\r
+              ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SETVAR_ERROR_SET), gShellDebug1HiiHandle, &Guid, VariableName, Status);\r
+              ShellStatus = SHELL_ACCESS_DENIED;\r
+            } else {\r
+              ASSERT(ShellStatus == SHELL_SUCCESS);\r
+            }\r
           }\r
         } else if (StrnCmp(Data, L"\"", 1) == 0) {\r
+          Size = 0;\r
+          Attributes2 = 0;\r
+          Status = gRT->GetVariable((CHAR16*)VariableName, &Guid, &Attributes2, &Size, Buffer);\r
+          if (Status == EFI_BUFFER_TOO_SMALL) {\r
+            Buffer = AllocateZeroPool(Size);\r
+            Status = gRT->GetVariable((CHAR16*)VariableName, &Guid, &Attributes2, &Size, Buffer);\r
+            FreePool(Buffer);\r
+            Attributes = Attributes2;\r
+          }          \r
           //\r
           // ascii text\r
           //\r
@@ -162,6 +184,7 @@ ShellCommandRunSetVar (
           AsciiSPrint(Buffer, StrSize(Data) / 2, "%s", Data);\r
           ((CHAR8*)Buffer)[AsciiStrLen(Buffer)-1] = CHAR_NULL;\r
 \r
+          \r
           Status = gRT->SetVariable((CHAR16*)VariableName, &Guid, Attributes, AsciiStrSize(Buffer)-sizeof(CHAR8), Buffer);\r
           if (EFI_ERROR(Status)) {\r
             ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SETVAR_ERROR_SET), gShellDebug1HiiHandle, &Guid, VariableName, Status);\r
index b9ff013d602c36cbc43f418c5527564e6d8d65e0..a45a721df320215adf469c57cfddcd22ad399316 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Tools of clarify the content of the smbios table.\r
 \r
-  Copyright (c) 2005 - 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2005 - 2011, 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
@@ -52,7 +52,7 @@ ShellCommandRunSmbiosView (
   Package             = NULL;\r
   ShellStatus         = SHELL_SUCCESS;\r
 \r
-  Status = ShellCommandLineParse (EmptyParamList, &Package, &ProblemParam, TRUE);\r
+  Status = ShellCommandLineParse (ParamList, &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), gShellDebug1HiiHandle, ProblemParam);\r
@@ -65,11 +65,21 @@ ShellCommandRunSmbiosView (
     if (ShellCommandLineGetCount(Package) > 1) {\r
       ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle);\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
+    } else if (\r
+        (ShellCommandLineGetFlag(Package, L"-t") && ShellCommandLineGetFlag(Package, L"-h")) ||\r
+        (ShellCommandLineGetFlag(Package, L"-t") && ShellCommandLineGetFlag(Package, L"-s")) ||\r
+        (ShellCommandLineGetFlag(Package, L"-t") && ShellCommandLineGetFlag(Package, L"-a")) ||\r
+        (ShellCommandLineGetFlag(Package, L"-h") && ShellCommandLineGetFlag(Package, L"-s")) ||\r
+        (ShellCommandLineGetFlag(Package, L"-h") && ShellCommandLineGetFlag(Package, L"-a")) ||\r
+        (ShellCommandLineGetFlag(Package, L"-s") && ShellCommandLineGetFlag(Package, L"-a"))\r
+      ) {\r
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle);\r
+      ShellStatus = SHELL_INVALID_PARAMETER;\r
     } else {\r
 \r
       //\r
       // Init Lib\r
-      //\r
+      \r
       Status = LibSmbiosInit ();\r
       if (EFI_ERROR (Status)) {\r
         ShellStatus = SHELL_NOT_FOUND;\r
@@ -370,7 +380,7 @@ InitSmbiosTableStatistics (
     mStatisticsTable = NULL;\r
   }\r
 \r
-  mStatisticsTable = (STRUCTURE_STATISTICS *) AllocatePool (SMBiosTable->NumberOfSmbiosStructures * sizeof (STRUCTURE_STATISTICS));\r
+  mStatisticsTable = (STRUCTURE_STATISTICS *) AllocateZeroPool (SMBiosTable->NumberOfSmbiosStructures * sizeof (STRUCTURE_STATISTICS));\r
 \r
   if (mStatisticsTable == NULL) {\r
     ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_OUT_OF_MEM), gShellDebug1HiiHandle);\r
index b9d2aea3ce8cdd3772fc76dd5450b9c1118843b0..c63001a90e2980fffd55c71f6abfeb692af30e20 100644 (file)
Binary files a/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/SmbiosViewStrings.uni and b/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/SmbiosViewStrings.uni differ
index 094e429fede2bb05c857c3278b75a147fef8b1da..226dd903971a794e43309e80ddfeb352ddd1b68f 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Main file for NULL named library for debug1 profile shell command functions.\r
 \r
-  Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2010 - 2011, 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
@@ -21,6 +21,12 @@ CONST EFI_GUID gShellDebug1HiiGuid = \
     0x25f200aa, 0xd3cb, 0x470a, { 0xbf, 0x51, 0xe7, 0xd1, 0x62, 0xd2, 0x2e, 0x6f } \\r
   };\r
 \r
+/**\r
+  Gets the debug file name.  This will be used if HII is not working.\r
+\r
+  @retval NULL    No file is available.\r
+  @return         The NULL-terminated filename to get help from.\r
+**/\r
 CONST CHAR16*\r
 EFIAPI\r
 ShellCommandGetManFileNameDebug1 (\r
@@ -64,21 +70,23 @@ UefiShellDebug1CommandsLibConstructor (
   //\r
   // install our shell command handlers that are always installed\r
   //\r
-  ShellCommandRegisterCommandName(L"SetSize",       ShellCommandRunSetSize            , ShellCommandGetManFileNameDebug1, 0, L"Debug1", TRUE, gShellDebug1HiiHandle, STRING_TOKEN(STR_GET_HELP_SETSIZE)      );\r
+  ShellCommandRegisterCommandName(L"setsize",       ShellCommandRunSetSize            , ShellCommandGetManFileNameDebug1, 0, L"Debug1", TRUE, gShellDebug1HiiHandle, STRING_TOKEN(STR_GET_HELP_SETSIZE)      );\r
   ShellCommandRegisterCommandName(L"comp",          ShellCommandRunComp               , ShellCommandGetManFileNameDebug1, 0, L"Debug1", TRUE, gShellDebug1HiiHandle, STRING_TOKEN(STR_GET_HELP_COMP)         );\r
   ShellCommandRegisterCommandName(L"mode",          ShellCommandRunMode               , ShellCommandGetManFileNameDebug1, 0, L"Debug1", TRUE, gShellDebug1HiiHandle, STRING_TOKEN(STR_GET_HELP_MODE)         );\r
   ShellCommandRegisterCommandName(L"memmap",        ShellCommandRunMemMap             , ShellCommandGetManFileNameDebug1, 0, L"Debug1", TRUE, gShellDebug1HiiHandle, STRING_TOKEN(STR_GET_HELP_MEMMAP)       );\r
   ShellCommandRegisterCommandName(L"eficompress",   ShellCommandRunEfiCompress        , ShellCommandGetManFileNameDebug1, 0, L"Debug1", TRUE, gShellDebug1HiiHandle, STRING_TOKEN(STR_GET_HELP_EFICOMPRESS)  );\r
   ShellCommandRegisterCommandName(L"efidecompress", ShellCommandRunEfiDecompress      , ShellCommandGetManFileNameDebug1, 0, L"Debug1", TRUE, gShellDebug1HiiHandle, STRING_TOKEN(STR_GET_HELP_EFIDCOMPRESS) );\r
   ShellCommandRegisterCommandName(L"dmem",          ShellCommandRunDmem               , ShellCommandGetManFileNameDebug1, 0, L"Debug1", TRUE, gShellDebug1HiiHandle, STRING_TOKEN(STR_GET_HELP_DMEM)         );\r
-  ShellCommandRegisterCommandName(L"LoadPciRom",    ShellCommandRunLoadPciRom         , ShellCommandGetManFileNameDebug1, 0, L"Debug1", TRUE, gShellDebug1HiiHandle, STRING_TOKEN(STR_GET_HELP_LOAD_PCI_ROM) );\r
+  ShellCommandRegisterCommandName(L"loadpcirom",    ShellCommandRunLoadPciRom         , ShellCommandGetManFileNameDebug1, 0, L"Debug1", TRUE, gShellDebug1HiiHandle, STRING_TOKEN(STR_GET_HELP_LOAD_PCI_ROM) );\r
   ShellCommandRegisterCommandName(L"mm",            ShellCommandRunMm                 , ShellCommandGetManFileNameDebug1, 0, L"Debug1", TRUE, gShellDebug1HiiHandle, STRING_TOKEN(STR_GET_HELP_MM)           );\r
-  ShellCommandRegisterCommandName(L"SetVar",        ShellCommandRunSetVar             , ShellCommandGetManFileNameDebug1, 0, L"Debug1", TRUE, gShellDebug1HiiHandle, STRING_TOKEN(STR_GET_HELP_SETVAR)       );\r
-  ShellCommandRegisterCommandName(L"SerMode",       ShellCommandRunSerMode            , ShellCommandGetManFileNameDebug1, 0, L"Debug1", TRUE, gShellDebug1HiiHandle, STRING_TOKEN(STR_GET_HELP_SERMODE)      );\r
-  ShellCommandRegisterCommandName(L"Pci",           ShellCommandRunPci                , ShellCommandGetManFileNameDebug1, 0, L"Debug1", TRUE, gShellDebug1HiiHandle, STRING_TOKEN(STR_GET_HELP_PCI)          );\r
+  ShellCommandRegisterCommandName(L"setvar",        ShellCommandRunSetVar             , ShellCommandGetManFileNameDebug1, 0, L"Debug1", TRUE, gShellDebug1HiiHandle, STRING_TOKEN(STR_GET_HELP_SETVAR)       );\r
+  ShellCommandRegisterCommandName(L"sermode",       ShellCommandRunSerMode            , ShellCommandGetManFileNameDebug1, 0, L"Debug1", TRUE, gShellDebug1HiiHandle, STRING_TOKEN(STR_GET_HELP_SERMODE)      );\r
+  ShellCommandRegisterCommandName(L"pci",           ShellCommandRunPci                , ShellCommandGetManFileNameDebug1, 0, L"Debug1", TRUE, gShellDebug1HiiHandle, STRING_TOKEN(STR_GET_HELP_PCI)          );\r
   ShellCommandRegisterCommandName(L"smbiosview",    ShellCommandRunSmbiosView         , ShellCommandGetManFileNameDebug1, 0, L"Debug1", TRUE, gShellDebug1HiiHandle, STRING_TOKEN(STR_GET_HELP_SMBIOSVIEW)   );\r
   ShellCommandRegisterCommandName(L"dmpstore",      ShellCommandRunDmpStore           , ShellCommandGetManFileNameDebug1, 0, L"Debug1", TRUE, gShellDebug1HiiHandle, STRING_TOKEN(STR_GET_HELP_DMPSTORE)     );\r
   ShellCommandRegisterCommandName(L"dblk",          ShellCommandRunDblk               , ShellCommandGetManFileNameDebug1, 0, L"Debug1", TRUE, gShellDebug1HiiHandle, STRING_TOKEN(STR_GET_HELP_DBLK)         );\r
+  ShellCommandRegisterCommandName(L"edit",          ShellCommandRunEdit               , ShellCommandGetManFileNameDebug1, 0, L"Debug1", TRUE, gShellDebug1HiiHandle, STRING_TOKEN(STR_GET_HELP_EDIT)         );\r
+  ShellCommandRegisterCommandName(L"hexedit",       ShellCommandRunHexEdit            , ShellCommandGetManFileNameDebug1, 0, L"Debug1", TRUE, gShellDebug1HiiHandle, STRING_TOKEN(STR_GET_HELP_HEXEDIT)      );\r
 \r
   //\r
   // check install profile bit of the profiles mask is set\r
@@ -87,10 +95,8 @@ UefiShellDebug1CommandsLibConstructor (
     ShellCommandRegisterCommandName(L"bcfg",        ShellCommandRunBcfg               , ShellCommandGetManFileNameDebug1, 0, L"Debug1", TRUE, gShellDebug1HiiHandle, STRING_TOKEN(STR_GET_HELP_BCFG)         );\r
   }\r
 \r
-/*\r
-  ShellCommandRegisterCommandName(L"hexedit",       ShellCommandRunHexEdit            , ShellCommandGetManFileNameDebug1, 0, L"Debug1", TRUE, gShellDebug1HiiHandle, STRING_TOKEN(STR_GET_HELP_HEXEDIT       );\r
-  ShellCommandRegisterCommandName(L"edit",          ShellCommandRunEdit               , ShellCommandGetManFileNameDebug1, 0, L"Debug1", TRUE, gShellDebug1HiiHandle, STRING_TOKEN(STR_GET_HELP_EDIT)         );\r
-*/\r
+\r
+\r
 \r
   ShellCommandRegisterAlias(L"dmem", L"mem");\r
 \r
@@ -99,6 +105,9 @@ UefiShellDebug1CommandsLibConstructor (
 \r
 /**\r
   Destructor for the library.  free any resources.\r
+\r
+  @param ImageHandle            The image handle of the process.\r
+  @param SystemTable            The EFI System Table pointer.\r
 **/\r
 EFI_STATUS\r
 EFIAPI\r
@@ -132,6 +141,14 @@ STATIC CONST CHAR8 Hex[] = {
   'F'\r
 };\r
 \r
+/**\r
+  Dump some hexadecimal data to the screen.\r
+\r
+  @param[in] Indent     How many spaces to indent the output.\r
+  @param[in] Offset     The offset of the printing.\r
+  @param[in] DataSize   The size in bytes of UserData.\r
+  @param[in] UserData   The data to print out.\r
+**/\r
 VOID\r
 EFIAPI\r
 DumpHex (\r
@@ -147,12 +164,10 @@ DumpHex (
 \r
   CHAR8 Str[20];\r
 \r
-  UINT8 c;\r
+  UINT8 TempByte;\r
   UINTN Size;\r
   UINTN Index;\r
 \r
-  ASSERT (UserData != NULL);\r
-\r
   Data = UserData;\r
   while (DataSize != 0) {\r
     Size = 16;\r
@@ -161,11 +176,11 @@ DumpHex (
     }\r
 \r
     for (Index = 0; Index < Size; Index += 1) {\r
-      c                   = Data[Index];\r
-      Val[Index * 3 + 0]  = Hex[c >> 4];\r
-      Val[Index * 3 + 1]  = Hex[c & 0xF];\r
+      TempByte            = Data[Index];\r
+      Val[Index * 3 + 0]  = Hex[TempByte >> 4];\r
+      Val[Index * 3 + 1]  = Hex[TempByte & 0xF];\r
       Val[Index * 3 + 2]  = (CHAR8) ((Index == 7) ? '-' : ' ');\r
-      Str[Index]          = (CHAR8) ((c < ' ' || c > 'z') ? '.' : c);\r
+      Str[Index]          = (CHAR8) ((TempByte < ' ' || TempByte > 'z') ? '.' : TempByte);\r
     }\r
 \r
     Val[Index * 3]  = 0;\r
@@ -213,7 +228,7 @@ CharToUpper (
   EFI System Table based on the provided GUID.\r
 \r
   @param[in]  TableGuid    A pointer to the table's GUID type.\r
-  @param[out] Table        On exit, a pointer to a system configuration table.\r
+  @param[in,out] Table     On exit, a pointer to a system configuration table.\r
 \r
   @retval EFI_SUCCESS      A configuration table matching TableGuid was found.\r
   @retval EFI_NOT_FOUND    A configuration table matching TableGuid was not found.\r
@@ -229,7 +244,7 @@ GetSystemConfigurationTable (
   ASSERT (Table != NULL);\r
 \r
   for (Index = 0; Index < gST->NumberOfTableEntries; Index++) {\r
-    if (CompareGuid (TableGuid, &(gST->ConfigurationTable[Index].VendorGuid)) == 0) {\r
+    if (CompareGuid (TableGuid, &(gST->ConfigurationTable[Index].VendorGuid))) {\r
       *Table = gST->ConfigurationTable[Index].VendorTable;\r
       return EFI_SUCCESS;\r
     }\r
@@ -264,6 +279,15 @@ HexCharToUintn (
   return (UINTN) (10 + CharToUpper (Char) - L'A');\r
 }\r
 \r
+/**\r
+  Convert a string representation of a guid to a Guid value.\r
+\r
+  @param[in] StringGuid   The pointer to the string of a guid.\r
+  @param[in,out] Guid     The pointer to the GUID structure to populate.\r
+\r
+  @retval EFI_INVALID_PARAMETER   A parameter was invalid.\r
+  @retval EFI_SUCCESS             The conversion was successful.\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 ConvertStringToGuid (\r
@@ -271,39 +295,399 @@ ConvertStringToGuid (
   IN OUT EFI_GUID *Guid\r
   )\r
 {\r
-  if (StrLen(StringGuid) != 35) {\r
+  CHAR16  *TempCopy;\r
+  CHAR16  *TempSpot;\r
+  CHAR16  *Walker;\r
+  UINT64  TempVal;\r
+  EFI_STATUS Status;\r
+\r
+  if (StringGuid == NULL) {\r
+    return (EFI_INVALID_PARAMETER);\r
+  } else if (StrLen(StringGuid) != 36) {\r
     return (EFI_INVALID_PARAMETER);\r
+  } \r
+  TempCopy = NULL;\r
+  TempCopy = StrnCatGrow(&TempCopy, NULL, StringGuid, 0);\r
+  Walker   = TempCopy;\r
+  TempSpot = StrStr(Walker, L"-");\r
+  *TempSpot = CHAR_NULL;\r
+  Status = ShellConvertStringToUint64(Walker, &TempVal, TRUE, FALSE);\r
+  if (EFI_ERROR(Status)) {\r
+    FreePool(TempCopy);\r
+    return (Status);\r
+  }\r
+  Guid->Data1 = (UINT32)TempVal;\r
+  Walker += 9;\r
+  TempSpot = StrStr(Walker, L"-");\r
+  *TempSpot = CHAR_NULL;\r
+  Status = ShellConvertStringToUint64(Walker, &TempVal, TRUE, FALSE);\r
+  if (EFI_ERROR(Status)) {\r
+    FreePool(TempCopy);\r
+    return (Status);\r
+  }\r
+  Guid->Data2 = (UINT16)TempVal;\r
+  Walker += 5;\r
+  TempSpot = StrStr(Walker, L"-");\r
+  *TempSpot = CHAR_NULL;\r
+  Status = ShellConvertStringToUint64(Walker, &TempVal, TRUE, FALSE);\r
+  if (EFI_ERROR(Status)) {\r
+    FreePool(TempCopy);\r
+    return (Status);\r
+  }\r
+  Guid->Data3 = (UINT16)TempVal;\r
+  Walker += 5;\r
+  Guid->Data4[0] = (UINT8)(HexCharToUintn(Walker[0]) * 16);\r
+  Guid->Data4[0] = (UINT8)(Guid->Data4[0]+ (UINT8)HexCharToUintn(Walker[1]));\r
+  Walker += 2;\r
+  Guid->Data4[1] = (UINT8)(HexCharToUintn(Walker[0]) * 16);\r
+  Guid->Data4[1] = (UINT8)(Guid->Data4[1] + (UINT8)HexCharToUintn(Walker[1]));\r
+  Walker += 3;\r
+  Guid->Data4[2] = (UINT8)(HexCharToUintn(Walker[0]) * 16);\r
+  Guid->Data4[2] = (UINT8)(Guid->Data4[2] + (UINT8)HexCharToUintn(Walker[1]));\r
+  Walker += 2;\r
+  Guid->Data4[3] = (UINT8)(HexCharToUintn(Walker[0]) * 16);\r
+  Guid->Data4[3] = (UINT8)(Guid->Data4[3] + (UINT8)HexCharToUintn(Walker[1]));\r
+  Walker += 2;\r
+  Guid->Data4[4] = (UINT8)(HexCharToUintn(Walker[0]) * 16);\r
+  Guid->Data4[4] = (UINT8)(Guid->Data4[4] + (UINT8)HexCharToUintn(Walker[1]));\r
+  Walker += 2;\r
+  Guid->Data4[5] = (UINT8)(HexCharToUintn(Walker[0]) * 16);\r
+  Guid->Data4[5] = (UINT8)(Guid->Data4[5] + (UINT8)HexCharToUintn(Walker[1]));\r
+  Walker += 2;\r
+  Guid->Data4[6] = (UINT8)(HexCharToUintn(Walker[0]) * 16);\r
+  Guid->Data4[6] = (UINT8)(Guid->Data4[6] + (UINT8)HexCharToUintn(Walker[1]));\r
+  Walker += 2;\r
+  Guid->Data4[7] = (UINT8)(HexCharToUintn(Walker[0]) * 16);\r
+  Guid->Data4[7] = (UINT8)(Guid->Data4[7] + (UINT8)HexCharToUintn(Walker[1]));\r
+  FreePool(TempCopy);\r
+  return (EFI_SUCCESS);\r
+}\r
+\r
+CHAR16  TempBufferCatSPrint[1000];\r
+/** \r
+  Appends a formatted Unicode string to a Null-terminated Unicode string\r
\r
+  This function appends a formatted Unicode string to the Null-terminated \r
+  Unicode string specified by String.   String is optional and may be NULL.\r
+  Storage for the formatted Unicode string returned is allocated using \r
+  AllocateZeroPool().  The pointer to the appended string is returned.  The caller\r
+  is responsible for freeing the returned string.\r
\r
+  If String is not NULL and not aligned on a 16-bit boundary, then ASSERT().\r
+  If Format is NULL, then ASSERT().\r
+  If Format is not aligned on a 16-bit boundary, then ASSERT().\r
\r
+  @param String   A null-terminated Unicode string.\r
+  @param FormatString  A null-terminated Unicode format string.\r
+  @param ...      The variable argument list whose contents are accessed based \r
+                  on the format string specified by Format.\r
+\r
+  @retval NULL    There was not enough available memory.\r
+  @return         Null terminated Unicode string is that is the formatted \r
+                  string appended to String.\r
+  @sa CatVSPrint\r
+**/\r
+CHAR16*\r
+EFIAPI\r
+CatSPrint (\r
+  IN  CONST CHAR16  *String OPTIONAL,\r
+  IN  CONST CHAR16  *FormatString,\r
+  ...\r
+  )\r
+{\r
+  VA_LIST Marker;\r
+  UINTN   StringLength;\r
+  if (String != NULL) {\r
+    StrCpy(TempBufferCatSPrint, String);\r
+  } else {\r
+    *TempBufferCatSPrint = CHAR_NULL;\r
+  }\r
+  VA_START (Marker, FormatString);\r
+  StringLength = StrLen(TempBufferCatSPrint);\r
+\r
+  UnicodeVSPrint(TempBufferCatSPrint+StrLen(TempBufferCatSPrint), 1000-StringLength, FormatString, Marker);\r
+  return (AllocateCopyPool(StrSize(TempBufferCatSPrint), TempBufferCatSPrint));\r
+}\r
+\r
+/**\r
+  Clear the line at the specified Row.\r
+  \r
+  @param[in] Row                The row number to be cleared ( start from 1 )\r
+  @param[in] LastCol            The last printable column.\r
+  @param[in] LastRow            The last printable row.\r
+**/\r
+VOID\r
+EFIAPI\r
+EditorClearLine (\r
+  IN UINTN Row,\r
+  IN UINTN LastCol,\r
+  IN UINTN LastRow\r
+  )\r
+{\r
+  CHAR16 Line[200];\r
+\r
+  if (Row == 0) {\r
+    Row = 1;\r
+  }\r
+\r
+  //\r
+  // prepare a blank line\r
+  //\r
+  SetMem16(Line, LastCol*sizeof(CHAR16), L' ');\r
+\r
+  if (Row == LastRow) {\r
+    //\r
+    // if CHAR_NULL is still at position 80, it will cause first line error\r
+    //\r
+    Line[LastCol - 1] = CHAR_NULL;\r
   } else {\r
-    Guid->Data1 = (UINT32)StrHexToUintn(StringGuid);\r
-    StringGuid += 9;\r
-    Guid->Data2 = (UINT16)StrHexToUintn(StringGuid);\r
-    StringGuid += 5;\r
-    Guid->Data3 = (UINT16)StrHexToUintn(StringGuid);\r
-    StringGuid += 5;\r
-    Guid->Data4[0] = (UINT8)(HexCharToUintn(StringGuid[0]) * 16);\r
-    Guid->Data4[0] = (UINT8)(Guid->Data4[0]+ (UINT8)HexCharToUintn(StringGuid[1]));\r
-    StringGuid += 2;\r
-    Guid->Data4[1] = (UINT8)(HexCharToUintn(StringGuid[0]) * 16);\r
-    Guid->Data4[1] = (UINT8)(Guid->Data4[1] + (UINT8)HexCharToUintn(StringGuid[1]));\r
-    StringGuid += 2;\r
-    Guid->Data4[2] = (UINT8)(HexCharToUintn(StringGuid[0]) * 16);\r
-    Guid->Data4[2] = (UINT8)(Guid->Data4[2] + (UINT8)HexCharToUintn(StringGuid[1]));\r
-    StringGuid += 2;\r
-    Guid->Data4[3] = (UINT8)(HexCharToUintn(StringGuid[0]) * 16);\r
-    Guid->Data4[3] = (UINT8)(Guid->Data4[3] + (UINT8)HexCharToUintn(StringGuid[1]));\r
-    StringGuid += 2;\r
-    Guid->Data4[4] = (UINT8)(HexCharToUintn(StringGuid[0]) * 16);\r
-    Guid->Data4[4] = (UINT8)(Guid->Data4[4] + (UINT8)HexCharToUintn(StringGuid[1]));\r
-    StringGuid += 2;\r
-    Guid->Data4[5] = (UINT8)(HexCharToUintn(StringGuid[0]) * 16);\r
-    Guid->Data4[5] = (UINT8)(Guid->Data4[5] + (UINT8)HexCharToUintn(StringGuid[1]));\r
-    StringGuid += 2;\r
-    Guid->Data4[6] = (UINT8)(HexCharToUintn(StringGuid[0]) * 16);\r
-    Guid->Data4[6] = (UINT8)(Guid->Data4[6] + (UINT8)HexCharToUintn(StringGuid[1]));\r
-    StringGuid += 2;\r
-    Guid->Data4[7] = (UINT8)(HexCharToUintn(StringGuid[0]) * 16);\r
-    Guid->Data4[7] = (UINT8)(Guid->Data4[7] = (UINT8)HexCharToUintn(StringGuid[1]));\r
-    return (EFI_SUCCESS);\r
+    Line[LastCol] = CHAR_NULL;\r
+  }\r
+\r
+  //\r
+  // print out the blank line\r
+  //\r
+  ShellPrintEx (0, ((INT32)Row) - 1, Line);\r
+}\r
+\r
+/**\r
+  Determine if the character is valid for a filename.\r
+\r
+  @param[in] Ch     The character to test.\r
+\r
+  @retval TRUE      The character is valid.\r
+  @retval FALSE     The character is not valid.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+IsValidFileNameChar (\r
+  IN CONST CHAR16 Ch\r
+  )\r
+{\r
+  //\r
+  // See if there are any illegal characters within the name\r
+  //\r
+  if (Ch < 0x20 || Ch == L'\"' || Ch == L'*' || Ch == L'/' || Ch == L'<' || Ch == L'>' || Ch == L'?' || Ch == L'|' || Ch == L' ') {\r
+    return FALSE;\r
+  }\r
+\r
+  return TRUE;\r
+}\r
+\r
+/**\r
+  Check if file name has illegal characters.\r
+  \r
+  @param Name       The filename to check.\r
+\r
+  @retval TRUE      The filename is ok.\r
+  @retval FALSE     The filename is not ok.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+IsValidFileName (\r
+  IN CONST CHAR16 *Name\r
+  )\r
+{\r
+\r
+  UINTN Index;\r
+  UINTN Len;\r
+\r
+  //\r
+  // check the length of Name\r
+  //\r
+  for (Len = 0, Index = StrLen (Name) - 1; Index + 1 != 0; Index--, Len++) {\r
+    if (Name[Index] == '\\' || Name[Index] == ':') {\r
+      break;\r
+    }\r
+  }\r
+\r
+  if (Len == 0 || Len > 255) {\r
+    return FALSE;\r
+  }\r
+  //\r
+  // check whether any char in Name not appears in valid file name char\r
+  //\r
+  for (Index = 0; Index < StrLen (Name); Index++) {\r
+    if (!IsValidFileNameChar (Name[Index])) {\r
+      return FALSE;\r
+    }\r
   }\r
+\r
+  return TRUE;\r
+}\r
+\r
+/**\r
+  Find a filename that is valid (not taken) with the given extension.\r
+\r
+  @param[in] Extension      The file extension.\r
+\r
+  @retval NULL  Something went wrong.\r
+  @return the valid filename.\r
+**/\r
+CHAR16 *\r
+EFIAPI\r
+EditGetDefaultFileName (\r
+  IN CONST CHAR16 *Extension\r
+  )\r
+{\r
+  EFI_STATUS         Status;\r
+  UINTN              Suffix;\r
+  BOOLEAN            FoundNewFile;\r
+  CHAR16             *FileNameTmp;\r
+\r
+  Suffix       = 0;\r
+  FoundNewFile = FALSE;\r
+\r
+  do {\r
+    FileNameTmp = CatSPrint (NULL, L"NewFile%d.%s", Suffix, Extension);\r
+\r
+    //\r
+    // after that filename changed to path\r
+    //\r
+    Status = ShellFileExists (FileNameTmp);\r
+\r
+    if (Status == EFI_NOT_FOUND) {\r
+      return FileNameTmp;\r
+    }\r
+\r
+    FreePool (FileNameTmp);\r
+    FileNameTmp = NULL;\r
+    Suffix++;\r
+  } while (Suffix != 0);\r
+\r
+  FreePool (FileNameTmp);\r
+  return NULL;\r
 }\r
 \r
+/**\r
+  Read a file into an allocated buffer.  The buffer is the responsibility \r
+  of the caller to free.\r
+\r
+  @param[in]  FileName          The filename of the file to open.\r
+  @param[out] Buffer            Upon successful return, the pointer to the \r
+                                address of the allocated buffer.                                  \r
+  @param[out] BufferSize        If not NULL, then the pointer to the size\r
+                                of the allocated buffer.\r
+  @param[out] ReadOnly          Upon successful return TRUE if the file is\r
+                                read only.  FALSE otherwise.\r
+\r
+  @retval EFI_NOT_FOUND         The filename did not represent a file in the \r
+                                file system.\r
+  @retval EFI_SUCCESS           The file was read into the buffer.\r
+  @retval EFI_OUT_OF_RESOURCES  A memory allocation failed.\r
+  @retval EFI_LOAD_ERROR        The file read operation failed.\r
+  @retval EFI_INVALID_PARAMETER A parameter was invalid.\r
+  @retval EFI_INVALID_PARAMETER FileName was NULL.\r
+  @retval EFI_INVALID_PARAMETER FileName was a directory.\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+ReadFileIntoBuffer (\r
+  IN CONST CHAR16 *FileName,\r
+  OUT VOID        **Buffer,\r
+  OUT UINTN       *BufferSize OPTIONAL,\r
+  OUT BOOLEAN     *ReadOnly\r
+  )\r
+{\r
+  VOID              *InternalBuffer;\r
+  UINTN             FileSize;\r
+  SHELL_FILE_HANDLE FileHandle;\r
+  BOOLEAN           CreateFile;\r
+  EFI_STATUS        Status;\r
+  EFI_FILE_INFO     *Info;\r
+\r
+  InternalBuffer  = NULL;\r
+  FileSize        = 0;\r
+  FileHandle      = NULL;\r
+  CreateFile      = FALSE;\r
+  Status          = EFI_SUCCESS;\r
+  Info            = NULL;\r
+\r
+  if (FileName == NULL || Buffer == NULL || ReadOnly == NULL) {\r
+    return (EFI_INVALID_PARAMETER);\r
+  }\r
+\r
+  //\r
+  // try to open the file\r
+  //\r
+  Status = ShellOpenFileByName (FileName, &FileHandle, EFI_FILE_MODE_READ, 0);\r
+\r
+  if (!EFI_ERROR(Status)) {\r
+    ASSERT(CreateFile == FALSE);\r
+    if (FileHandle == NULL) {\r
+      return EFI_LOAD_ERROR;\r
+    }\r
+\r
+    Info = ShellGetFileInfo(FileHandle);\r
+    \r
+    if (Info->Attribute & EFI_FILE_DIRECTORY) {\r
+      FreePool (Info);\r
+      return EFI_INVALID_PARAMETER;\r
+    }\r
+\r
+    if (Info->Attribute & EFI_FILE_READ_ONLY) {\r
+      *ReadOnly = TRUE;\r
+    } else {\r
+      *ReadOnly = FALSE;\r
+    }\r
+    //\r
+    // get file size\r
+    //\r
+    FileSize = (UINTN) Info->FileSize;\r
+\r
+    FreePool (Info);\r
+  } else if (Status == EFI_NOT_FOUND) {\r
+    //\r
+    // file not exists.  add create and try again\r
+    //\r
+    Status = ShellOpenFileByName (FileName, &FileHandle, EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE|EFI_FILE_MODE_CREATE, 0);\r
+    if (EFI_ERROR (Status)) {\r
+      return Status;\r
+    } else {\r
+      //\r
+      // it worked.  now delete it and move on with the name (now validated)\r
+      //\r
+      Status = ShellDeleteFile (&FileHandle);\r
+      if (Status == EFI_WARN_DELETE_FAILURE) {\r
+        Status = EFI_ACCESS_DENIED;\r
+      }\r
+      if (EFI_ERROR (Status)) {\r
+        return Status;\r
+      }\r
+    }\r
+    //\r
+    // file doesn't exist, so set CreateFile to TRUE and can't be read-only\r
+    //\r
+    CreateFile = TRUE;\r
+    *ReadOnly  = FALSE;\r
+  }\r
+\r
+  //\r
+  // the file exists\r
+  //\r
+  if (!CreateFile) {\r
+    //\r
+    // allocate buffer to read file\r
+    //\r
+    InternalBuffer = AllocateZeroPool (FileSize);\r
+    if (InternalBuffer == NULL) {\r
+      return EFI_OUT_OF_RESOURCES;\r
+    }\r
+    //\r
+    // read file into InternalBuffer\r
+    //\r
+    Status = ShellReadFile (FileHandle, &FileSize, InternalBuffer);\r
+    ShellCloseFile(&FileHandle);\r
+    FileHandle = NULL;\r
+    if (EFI_ERROR (Status)) {\r
+      SHELL_FREE_NON_NULL (InternalBuffer);\r
+      return EFI_LOAD_ERROR;\r
+    }\r
+  }\r
+  *Buffer = InternalBuffer;\r
+  if (BufferSize != NULL) {\r
+    *BufferSize = FileSize;\r
+  }\r
+  return (EFI_SUCCESS);\r
+\r
+}\r
index f34889f76d9b1d31a2af16649c7c4d08cad704c1..de754e8bc76a6acc5adebcd9acc816f0d9a014cd 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Main file for NULL named library for Profile1 shell command functions.\r
 \r
-  Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2010 - 2011, 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
 \r
 **/\r
 \r
+#if !defined (_UEFI_SHELL_DEBUG1_COMMANDS_LIB_H_)\r
+#define _UEFI_SHELL_DEBUG1_COMMANDS_LIB_H_\r
+\r
 #include <Uefi.h>\r
 #include <ShellBase.h>\r
 \r
 #include <Guid/GlobalVariable.h>\r
 #include <Guid/ConsoleInDevice.h>\r
 #include <Guid/ConsoleOutDevice.h>\r
+#include <Guid/FileSystemInfo.h>\r
 \r
 #include <Protocol/EfiShell.h>\r
 #include <Protocol/EfiShellParameters.h>\r
@@ -34,6 +38,8 @@
 #include <Protocol/DriverFamilyOverride.h>\r
 #include <Protocol/DriverHealth.h>\r
 #include <Protocol/DevicePathFromText.h>\r
+#include <Protocol/SimplePointer.h>\r
+#include <Protocol/PciRootBridgeIo.h>\r
 \r
 #include <Library/BaseLib.h>\r
 #include <Library/BaseMemoryLib.h>\r
@@ -77,7 +83,7 @@ DumpHex (
   EFI System Table based on the provided GUID.\r
 \r
   @param[in]  TableGuid    A pointer to the table's GUID type.\r
-  @param[out] Table        On exit, a pointer to a system configuration table.\r
+  @param[in,out] Table     On exit, a pointer to a system configuration table.\r
 \r
   @retval EFI_SUCCESS      A configuration table matching TableGuid was found.\r
   @retval EFI_NOT_FOUND    A configuration table matching TableGuid was not found.\r
@@ -329,4 +335,135 @@ ShellCommandRunDblk (
   IN EFI_SYSTEM_TABLE  *SystemTable\r
   );\r
 \r
+/**\r
+  Function for 'edit' command.\r
+\r
+  @param[in] ImageHandle  Handle to the Image (NULL if Internal).\r
+  @param[in] SystemTable  Pointer to the System Table (NULL if Internal).\r
+**/\r
+SHELL_STATUS\r
+EFIAPI\r
+ShellCommandRunEdit (\r
+  IN EFI_HANDLE        ImageHandle,\r
+  IN EFI_SYSTEM_TABLE  *SystemTable\r
+  );\r
+\r
+/**\r
+  Function for 'hexedit' command.\r
+\r
+  @param[in] ImageHandle  Handle to the Image (NULL if Internal).\r
+  @param[in] SystemTable  Pointer to the System Table (NULL if Internal).\r
+**/\r
+SHELL_STATUS\r
+EFIAPI\r
+ShellCommandRunHexEdit (\r
+  IN EFI_HANDLE        ImageHandle,\r
+  IN EFI_SYSTEM_TABLE  *SystemTable\r
+  );\r
+\r
+/** \r
+  Appends a formatted Unicode string to a Null-terminated Unicode string\r
\r
+  This function appends a formatted Unicode string to the Null-terminated \r
+  Unicode string specified by String.   String is optional and may be NULL.\r
+  Storage for the formatted Unicode string returned is allocated using \r
+  AllocateZeroPool().  The pointer to the appended string is returned.  The caller\r
+  is responsible for freeing the returned string.\r
\r
+  If String is not NULL and not aligned on a 16-bit boundary, then ASSERT().\r
+  If Format is NULL, then ASSERT().\r
+  If Format is not aligned on a 16-bit boundary, then ASSERT().\r
\r
+  @param String   A null-terminated Unicode string.\r
+  @param FormatString   A null-terminated Unicode format string.\r
+  @param ...      The variable argument list whose contents are accessed based \r
+                  on the format string specified by Format.\r
+\r
+  @retval NULL    There was not enough available memory.\r
+  @return         Null terminated Unicode string is that is the formatted \r
+                  string appended to String.\r
+  @sa CatVSPrint\r
+**/\r
+CHAR16*\r
+EFIAPI\r
+CatSPrint (\r
+  IN  CONST CHAR16  *String OPTIONAL,\r
+  IN  CONST CHAR16  *FormatString,\r
+  ...\r
+  );\r
+\r
+/**\r
+  Clear the line at the specified Row.\r
+  \r
+  @param[in] Row                The row number to be cleared ( start from 1 )\r
+  @param[in] LastCol            The last printable column.\r
+  @param[in] LastRow            The last printable row.\r
+**/\r
+VOID\r
+EFIAPI\r
+EditorClearLine (\r
+  IN UINTN Row,\r
+  IN UINTN LastCol,\r
+  IN UINTN LastRow\r
+  );\r
+\r
+/**\r
+  Check if file name has illegal characters.\r
+  \r
+  @param Name       The filename to check.\r
+\r
+  @retval TRUE      The filename is ok.\r
+  @retval FALSE     The filename is not ok.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+IsValidFileName (\r
+  IN CONST CHAR16 *Name\r
+  );\r
+\r
+/**\r
+  Find a filename that is valid (not taken) with the given extension.\r
+\r
+  @param[in] Extension      The file extension.\r
+\r
+  @retval NULL  Something went wrong.\r
+  @return the valid filename.\r
+**/\r
+CHAR16 *\r
+EFIAPI\r
+EditGetDefaultFileName (\r
+  IN CONST CHAR16 *Extension\r
+  );\r
+\r
+/**\r
+  Read a file into an allocated buffer.  The buffer is the responsibility \r
+  of the caller to free.\r
+\r
+  @param[in]  FileName          The filename of the file to open.\r
+  @param[out] Buffer            Upon successful return, the pointer to the \r
+                                address of the allocated buffer.                                  \r
+  @param[out] BufferSize        If not NULL, then the pointer to the size\r
+                                of the allocated buffer.\r
+  @param[out] ReadOnly          Upon successful return TRUE if the file is\r
+                                read only.  FALSE otherwise.\r
+\r
+  @retval EFI_NOT_FOUND         The filename did not represent a file in the \r
+                                file system.  Directories cannot be read with\r
+                                this method.\r
+  @retval EFI_SUCCESS           The file was read into the buffer.\r
+  @retval EFI_OUT_OF_RESOURCES  A memory allocation failed.\r
+  @retval EFI_LOAD_ERROR        The file read operation failed.\r
+  @retval EFI_INVALID_PARAMETER A parameter was invalid.\r
+  @retval EFI_INVALID_PARAMETER FileName was NULL.\r
+  @retval EFI_INVALID_PARAMETER FileName was a directory.\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+ReadFileIntoBuffer (\r
+  IN CONST CHAR16 *FileName,\r
+  OUT VOID        **Buffer,\r
+  OUT UINTN       *BufferSize OPTIONAL,\r
+  OUT BOOLEAN     *ReadOnly\r
+  );\r
 \r
+#endif\r
index e04c29b6ff771aecd85bdbd5edbf66b1b643af73..f83785b07144b8a15bce8898de2228644599c2f1 100644 (file)
   UefiShellDebug1CommandsLib.h\r
   UefiShellDebug1CommandsLib.uni\r
 \r
+## Files shared by both editors\r
+  EditTitleBar.h\r
+  EditTitleBar.c\r
+  EditInputBar.h\r
+  EditInputBar.c\r
+  EditStatusBar.h\r
+  EditStatusBar.c\r
+  EditMenuBar.h\r
+  EditMenuBar.c\r
+  \r
+## Files specific to the text editor  \r
+  ./Edit/Edit.c\r
+  ./Edit/TextEditor.h\r
+  ./Edit/TextEditorTypes.h\r
+  ./Edit/FileBuffer.h\r
+  ./Edit/FileBuffer.c\r
+  ./Edit/MainTextEditor.h\r
+  ./Edit/MainTextEditor.c\r
+  ./Edit/Misc.h\r
+  ./Edit/Misc.c\r
+  ./Edit/TextEditStrings.uni\r
+  \r
+## Files specific to the HEX editor\r
+  ./HexEdit/BufferImage.h\r
+  ./HexEdit/BufferImage.c\r
+  ./HexEdit/Clipboard.h\r
+  ./HexEdit/Clipboard.c\r
+  ./HexEdit/DiskImage.h\r
+  ./HexEdit/DiskImage.c\r
+  ./HexEdit/FileImage.h\r
+  ./HexEdit/FileImage.c\r
+  ./HexEdit/HexEdit.c\r
+  ./HexEdit/HexEditor.h\r
+  ./HexEdit/HexEditorTypes.h\r
+  ./HexEdit/HexeditStrings.uni\r
+  ./HexEdit/MainHexEditor.h\r
+  ./HexEdit/MainHexEditor.c\r
+  ./HexEdit/MemImage.h\r
+  ./HexEdit/MemImage.c\r
+  ./HexEdit/Misc.h\r
+  ./HexEdit/Misc.c\r
+\r
 [Packages]\r
   MdePkg/MdePkg.dec\r
   ShellPkg/ShellPkg.dec\r
   PrintLib\r
 \r
 [Pcd]\r
-  gEfiShellPkgTokenSpaceGuid.PcdShellProfileMask        # ALWAYS_CONSUMED\r
-  gEfiShellPkgTokenSpaceGuid.PcdShellFileOperationSize  # ALWAYS_CONSUMED\r
+  gEfiShellPkgTokenSpaceGuid.PcdShellProfileMask              # ALWAYS_CONSUMED\r
+  gEfiShellPkgTokenSpaceGuid.PcdShellFileOperationSize        # ALWAYS_CONSUMED\r
+  gEfiMdePkgTokenSpaceGuid.PcdMaximumUnicodeStringLength      # ALWAYS_CONSUMED\r
 \r
 [Protocols]\r
   gEfiPciRootBridgeIoProtocolGuid\r
   gEfiBlockIoProtocolGuid\r
+  gEfiSimplePointerProtocolGuid\r
 \r
 [Guids]\r
   gEfiGlobalVariableGuid\r
   gEfiSmbiosTableGuid\r
+  gEfiMpsTableGuid\r
+  gEfiSalSystemTableGuid\r
+  gEfiAcpi10TableGuid\r
+  gEfiAcpi20TableGuid\r
 \r
index 925bf849f475431d45a3028bf02c2168d3f4db23..733ff4d1055dc0a0ed59b75ce8075616a89595a4 100644 (file)
Binary files a/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.uni and b/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.uni differ