]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ShellPkg/Library/UefiShellCommandLib/ConsistMapping.c
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / ShellPkg / Library / UefiShellCommandLib / ConsistMapping.c
old mode 100644 (file)
new mode 100755 (executable)
index 48739e2..1767a7d
@@ -1,14 +1,8 @@
 /** @file\r
   Main file for support of shell consist mapping.\r
 \r
-  Copyright (c) 2005 - 2014, 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
-  http://opensource.org/licenses/bsd-license.php\r
-\r
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+  Copyright (c) 2005 - 2018, Intel Corporation. All rights reserved.<BR>\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
 **/\r
 \r
 #include "UefiShellCommandLib.h"\r
@@ -16,6 +10,8 @@
 #include <Library/SortLib.h>\r
 #include <Library/UefiLib.h>\r
 #include <Protocol/UsbIo.h>\r
+#include <Protocol/BlockIo.h>\r
+#include <Protocol/SimpleFileSystem.h>\r
 \r
 typedef enum {\r
   MTDTypeUnknown,\r
@@ -26,32 +22,47 @@ typedef enum {
 } MTD_TYPE;\r
 \r
 typedef struct {\r
-  CHAR16  *Str;\r
-  UINTN   Len;\r
+  CHAR16    *Str;\r
+  UINTN     Len;\r
 } POOL_PRINT;\r
 \r
 typedef struct {\r
-  UINTN       Hi;\r
-  MTD_TYPE    Mtd;\r
-  POOL_PRINT  Csd;\r
-  BOOLEAN     Digital;\r
+  UINTN         Hi;\r
+  MTD_TYPE      Mtd;\r
+  POOL_PRINT    Csd;\r
+  BOOLEAN       Digital;\r
 } DEVICE_CONSIST_MAPPING_INFO;\r
 \r
 typedef struct {\r
-  MTD_TYPE  MTDType;\r
-  CHAR16    *Name;\r
+  MTD_TYPE    MTDType;\r
+  CHAR16      *Name;\r
 } MTD_NAME;\r
 \r
-typedef VOID (EFIAPI *SerialDecodeFucntion) (EFI_DEVICE_PATH_PROTOCOL *DevPath, DEVICE_CONSIST_MAPPING_INFO *MapInfo,EFI_DEVICE_PATH_PROTOCOL *);\r
+/**\r
+  Serial Decode function.\r
+\r
+  @param  DevPath          The Device path info.\r
+  @param  MapInfo          The map info.\r
+  @param  OrigDevPath      The original device path protocol.\r
+\r
+  @retval EFI_OUT_OF_RESOURCES    Out of resources.\r
+  @retval EFI_SUCCESS             The appending was successful.\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(*SERIAL_DECODE_FUNCTION) (\r
+  EFI_DEVICE_PATH_PROTOCOL     *DevPath,\r
+  DEVICE_CONSIST_MAPPING_INFO  *MapInfo,\r
+  EFI_DEVICE_PATH_PROTOCOL     *OrigDevPath\r
+  );\r
 \r
 typedef struct {\r
-  UINT8 Type;\r
-  UINT8 SubType;\r
-  SerialDecodeFucntion SerialFun;\r
-  INTN (EFIAPI *CompareFun) (EFI_DEVICE_PATH_PROTOCOL *DevPath, EFI_DEVICE_PATH_PROTOCOL *DevPath2);\r
+  UINT8                     Type;\r
+  UINT8                     SubType;\r
+  SERIAL_DECODE_FUNCTION    SerialFun;\r
+  INTN (EFIAPI *CompareFun)(EFI_DEVICE_PATH_PROTOCOL *DevPath, EFI_DEVICE_PATH_PROTOCOL *DevPath2);\r
 } DEV_PATH_CONSIST_MAPPING_TABLE;\r
 \r
-\r
 /**\r
   Concatenates a formatted unicode string to allocated pool.\r
   The caller must free the resulting buffer.\r
@@ -60,53 +71,56 @@ typedef struct {
   @param  Fmt      The format string\r
   @param  ...      The data will be printed.\r
 \r
-  @return Allocated buffer with the formatted string printed in it.\r
-          The caller must free the allocated buffer.\r
-          The buffer allocation is not packed.\r
+  @retval EFI_SUCCESS          The string is concatenated successfully.\r
+  @retval EFI_OUT_OF_RESOURCES Out of resources.\r
 \r
 **/\r
-CHAR16 *\r
+EFI_STATUS\r
 EFIAPI\r
 CatPrint (\r
-  IN OUT POOL_PRINT   *Str,\r
-  IN CHAR16           *Fmt,\r
+  IN OUT POOL_PRINT  *Str,\r
+  IN CHAR16          *Fmt,\r
   ...\r
   )\r
 {\r
-  UINT16  *AppendStr;\r
-  VA_LIST Args;\r
-  UINTN   StringSize;\r
+  UINT16   *AppendStr;\r
+  VA_LIST  Args;\r
+  UINTN    StringSize;\r
+  CHAR16   *NewStr;\r
 \r
   AppendStr = AllocateZeroPool (0x1000);\r
   if (AppendStr == NULL) {\r
-    ASSERT(FALSE);\r
-    return Str->Str;\r
+    return EFI_OUT_OF_RESOURCES;\r
   }\r
 \r
   VA_START (Args, Fmt);\r
   UnicodeVSPrint (AppendStr, 0x1000, Fmt, Args);\r
   VA_END (Args);\r
   if (NULL == Str->Str) {\r
-    StringSize   = StrSize (AppendStr);\r
-    Str->Str  = AllocateZeroPool (StringSize);\r
-    ASSERT (Str->Str != NULL);\r
-  } else {\r
     StringSize = StrSize (AppendStr);\r
+    NewStr     = AllocateZeroPool (StringSize);\r
+  } else {\r
+    StringSize  = StrSize (AppendStr);\r
     StringSize += (StrSize (Str->Str) - sizeof (UINT16));\r
 \r
-    Str->Str = ReallocatePool (\r
-                StrSize (Str->Str),\r
-                StringSize,\r
-                Str->Str\r
+    NewStr = ReallocatePool (\r
+               StrSize (Str->Str),\r
+               StringSize,\r
+               Str->Str\r
                );\r
-    ASSERT (Str->Str != NULL);\r
   }\r
 \r
-  StrnCat (Str->Str, AppendStr, StringSize/sizeof(CHAR16) - 1 - StrLen(Str->Str));\r
+  if (NewStr == NULL) {\r
+    FreePool (AppendStr);\r
+    return EFI_OUT_OF_RESOURCES;\r
+  }\r
+\r
+  Str->Str = NewStr;\r
+  StrCatS (Str->Str, StringSize/sizeof (CHAR16), AppendStr);\r
   Str->Len = StringSize;\r
 \r
   FreePool (AppendStr);\r
-  return Str->Str;\r
+  return EFI_SUCCESS;\r
 }\r
 \r
 MTD_NAME  mMTDName[] = {\r
@@ -138,30 +152,30 @@ MTD_NAME  mMTDName[] = {
   @param[in, out] Str          The string so append onto.\r
   @param[in]      Num          The number to divide and append.\r
 \r
-  @retval EFI_INVALID_PARAMETER   A parameter was NULL.\r
+  @retval EFI_OUT_OF_RESOURCES    Out of resources.\r
   @retval EFI_SUCCESS             The appending was successful.\r
 **/\r
 EFI_STATUS\r
-EFIAPI\r
 AppendCSDNum2 (\r
-  IN OUT POOL_PRINT       *Str,\r
-  IN UINT64               Num\r
+  IN OUT POOL_PRINT  *Str,\r
+  IN UINT64          Num\r
   )\r
 {\r
-  UINT64  Result;\r
-  UINT32   Rem;\r
+  EFI_STATUS  Status;\r
+  UINT64      Result;\r
+  UINT32      Rem;\r
 \r
-  if (Str == NULL) {\r
-    return (EFI_INVALID_PARAMETER);\r
-  }\r
+  ASSERT (Str != NULL);\r
 \r
   Result = DivU64x32Remainder (Num, 25, &Rem);\r
   if (Result > 0) {\r
-    AppendCSDNum2 (Str, Result);\r
+    Status = AppendCSDNum2 (Str, Result);\r
+    if (EFI_ERROR (Status)) {\r
+      return Status;\r
+    }\r
   }\r
 \r
-  CatPrint (Str, L"%c", Rem + 'a');\r
-  return (EFI_SUCCESS);\r
+  return CatPrint (Str, L"%c", Rem + 'a');\r
 }\r
 \r
 /**\r
@@ -170,29 +184,31 @@ AppendCSDNum2 (
   @param[in, out] MappingItem  The mapping info object to append onto.\r
   @param[in]      Num          The info to append.\r
 \r
-  @retval EFI_INVALID_PARAMETER   A parameter was NULL.\r
+  @retval EFI_OUT_OF_RESOURCES    Out of resources.\r
   @retval EFI_SUCCESS             The appending was successful.\r
+\r
 **/\r
 EFI_STATUS\r
-EFIAPI\r
 AppendCSDNum (\r
-  IN OUT DEVICE_CONSIST_MAPPING_INFO            *MappingItem,\r
-  IN     UINT64                                 Num\r
+  IN OUT DEVICE_CONSIST_MAPPING_INFO  *MappingItem,\r
+  IN     UINT64                       Num\r
   )\r
 {\r
-  if (MappingItem == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
+  EFI_STATUS  Status;\r
+\r
+  ASSERT (MappingItem != NULL);\r
 \r
   if (MappingItem->Digital) {\r
-    CatPrint (&MappingItem->Csd, L"%ld", Num);\r
+    Status = CatPrint (&MappingItem->Csd, L"%ld", Num);\r
   } else {\r
-    AppendCSDNum2 (&MappingItem->Csd, Num);\r
+    Status = AppendCSDNum2 (&MappingItem->Csd, Num);\r
   }\r
 \r
-  MappingItem->Digital = (BOOLEAN)!(MappingItem->Digital);\r
+  if (!EFI_ERROR (Status)) {\r
+    MappingItem->Digital = (BOOLEAN) !(MappingItem->Digital);\r
+  }\r
 \r
-  return (EFI_SUCCESS);\r
+  return Status;\r
 }\r
 \r
 /**\r
@@ -201,21 +217,21 @@ AppendCSDNum (
   @param[in, out] MappingItem  The mapping info object to append onto.\r
   @param[in]      Str          The info to append.\r
 \r
-  @retval EFI_INVALID_PARAMETER   A parameter was NULL.\r
+  @retval EFI_OUT_OF_RESOURCES    Out of resources.\r
   @retval EFI_SUCCESS             The appending was successful.\r
 **/\r
 EFI_STATUS\r
-EFIAPI\r
 AppendCSDStr (\r
-  IN OUT DEVICE_CONSIST_MAPPING_INFO            *MappingItem,\r
-  IN     CHAR16                                 *Str\r
+  IN OUT DEVICE_CONSIST_MAPPING_INFO  *MappingItem,\r
+  IN     CHAR16                       *Str\r
   )\r
 {\r
-  CHAR16  *Index;\r
+  CHAR16      *Index;\r
+  EFI_STATUS  Status;\r
 \r
-  if (Str == NULL || MappingItem == NULL) {\r
-    return (EFI_INVALID_PARAMETER);\r
-  }\r
+  ASSERT (Str != NULL && MappingItem != NULL);\r
+\r
+  Status = EFI_SUCCESS;\r
 \r
   if (MappingItem->Digital) {\r
     //\r
@@ -225,39 +241,43 @@ AppendCSDStr (
     //\r
     for (Index = Str; *Index != 0; Index++) {\r
       switch (*Index) {\r
-      case '0':\r
-      case '2':\r
-      case '3':\r
-      case '4':\r
-      case '5':\r
-      case '6':\r
-      case '7':\r
-      case '8':\r
-      case '9':\r
-        CatPrint (&MappingItem->Csd, L"%c", *Index);\r
-        break;\r
-\r
-      case '1':\r
-        CatPrint (&MappingItem->Csd, L"16");\r
-        break;\r
-\r
-      case 'a':\r
-      case 'b':\r
-      case 'c':\r
-      case 'd':\r
-      case 'e':\r
-      case 'f':\r
-        CatPrint (&MappingItem->Csd, L"1%c", *Index - 'a' + '0');\r
-        break;\r
+        case '0':\r
+        case '2':\r
+        case '3':\r
+        case '4':\r
+        case '5':\r
+        case '6':\r
+        case '7':\r
+        case '8':\r
+        case '9':\r
+          Status = CatPrint (&MappingItem->Csd, L"%c", *Index);\r
+          break;\r
+\r
+        case '1':\r
+          Status = CatPrint (&MappingItem->Csd, L"16");\r
+          break;\r
+\r
+        case 'a':\r
+        case 'b':\r
+        case 'c':\r
+        case 'd':\r
+        case 'e':\r
+        case 'f':\r
+          Status = CatPrint (&MappingItem->Csd, L"1%c", *Index - 'a' + '0');\r
+          break;\r
+\r
+        case 'A':\r
+        case 'B':\r
+        case 'C':\r
+        case 'D':\r
+        case 'E':\r
+        case 'F':\r
+          Status = CatPrint (&MappingItem->Csd, L"1%c", *Index - 'A' + '0');\r
+          break;\r
+      }\r
 \r
-      case 'A':\r
-      case 'B':\r
-      case 'C':\r
-      case 'D':\r
-      case 'E':\r
-      case 'F':\r
-        CatPrint (&MappingItem->Csd, L"1%c", *Index - 'A' + '0');\r
-        break;\r
+      if (EFI_ERROR (Status)) {\r
+        return Status;\r
       }\r
     }\r
   } else {\r
@@ -267,17 +287,21 @@ AppendCSDStr (
       //  0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f\r
       //  a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p\r
       //\r
-      if (*Index >= '0' && *Index <= '9') {\r
-        CatPrint (&MappingItem->Csd, L"%c", *Index - '0' + 'a');\r
-      } else if (*Index >= 'a' && *Index <= 'f') {\r
-        CatPrint (&MappingItem->Csd, L"%c", *Index - 'a' + 'k');\r
-      } else if (*Index >= 'A' && *Index <= 'F') {\r
-        CatPrint (&MappingItem->Csd, L"%c", *Index - 'A' + 'k');\r
+      if ((*Index >= '0') && (*Index <= '9')) {\r
+        Status = CatPrint (&MappingItem->Csd, L"%c", *Index - '0' + 'a');\r
+      } else if ((*Index >= 'a') && (*Index <= 'f')) {\r
+        Status = CatPrint (&MappingItem->Csd, L"%c", *Index - 'a' + 'k');\r
+      } else if ((*Index >= 'A') && (*Index <= 'F')) {\r
+        Status = CatPrint (&MappingItem->Csd, L"%c", *Index - 'A' + 'k');\r
+      }\r
+\r
+      if (EFI_ERROR (Status)) {\r
+        return Status;\r
       }\r
     }\r
   }\r
 \r
-  MappingItem->Digital = (BOOLEAN)!(MappingItem->Digital);\r
+  MappingItem->Digital = (BOOLEAN) !(MappingItem->Digital);\r
 \r
   return (EFI_SUCCESS);\r
 }\r
@@ -288,32 +312,27 @@ AppendCSDStr (
   @param[in, out] MappingItem  The item to append onto.\r
   @param[in]      Guid         The guid to append.\r
 \r
-  @retval EFI_SUCCESS           The appending operation was successful.\r
-  @retval EFI_INVALID_PARAMETER A parameter was NULL.\r
+  @retval EFI_OUT_OF_RESOURCES    Out of resources.\r
+  @retval EFI_SUCCESS             The appending was successful.\r
 **/\r
 EFI_STATUS\r
-EFIAPI\r
 AppendCSDGuid (\r
-  DEVICE_CONSIST_MAPPING_INFO            *MappingItem,\r
-  EFI_GUID                               *Guid\r
+  DEVICE_CONSIST_MAPPING_INFO  *MappingItem,\r
+  EFI_GUID                     *Guid\r
   )\r
 {\r
   CHAR16  Buffer[64];\r
 \r
-  if (Guid == NULL || MappingItem == NULL) {\r
-    return (EFI_INVALID_PARAMETER);\r
-  }\r
+  ASSERT (Guid != NULL && MappingItem != NULL);\r
 \r
   UnicodeSPrint (\r
     Buffer,\r
     0,\r
     L"%g",\r
     Guid\r
-   );\r
-\r
-  AppendCSDStr (MappingItem, Buffer);\r
+    );\r
 \r
-  return (EFI_SUCCESS);\r
+  return AppendCSDStr (MappingItem, Buffer);\r
 }\r
 \r
 /**\r
@@ -328,24 +347,24 @@ AppendCSDGuid (
 INTN\r
 EFIAPI\r
 DevPathCompareAcpi (\r
-  IN EFI_DEVICE_PATH_PROTOCOL       *DevicePath1,\r
-  IN EFI_DEVICE_PATH_PROTOCOL       *DevicePath2\r
+  IN EFI_DEVICE_PATH_PROTOCOL  *DevicePath1,\r
+  IN EFI_DEVICE_PATH_PROTOCOL  *DevicePath2\r
   )\r
 {\r
   ACPI_HID_DEVICE_PATH  *Acpi1;\r
   ACPI_HID_DEVICE_PATH  *Acpi2;\r
 \r
-  if (DevicePath1 == NULL || DevicePath2 == NULL) {\r
+  if ((DevicePath1 == NULL) || (DevicePath2 == NULL)) {\r
     return (-2);\r
   }\r
 \r
-  Acpi1 = (ACPI_HID_DEVICE_PATH *) DevicePath1;\r
-  Acpi2 = (ACPI_HID_DEVICE_PATH *) DevicePath2;\r
-  if (Acpi1->HID > Acpi2->HID || (Acpi1->HID == Acpi2->HID && Acpi1->UID > Acpi2->UID)) {\r
+  Acpi1 = (ACPI_HID_DEVICE_PATH *)DevicePath1;\r
+  Acpi2 = (ACPI_HID_DEVICE_PATH *)DevicePath2;\r
+  if ((Acpi1->HID > Acpi2->HID) || ((Acpi1->HID == Acpi2->HID) && (Acpi1->UID > Acpi2->UID))) {\r
     return 1;\r
   }\r
 \r
-  if (Acpi1->HID == Acpi2->HID && Acpi1->UID == Acpi2->UID) {\r
+  if ((Acpi1->HID == Acpi2->HID) && (Acpi1->UID == Acpi2->UID)) {\r
     return 0;\r
   }\r
 \r
@@ -364,23 +383,23 @@ DevPathCompareAcpi (
 INTN\r
 EFIAPI\r
 DevPathComparePci (\r
-  IN EFI_DEVICE_PATH_PROTOCOL       *DevicePath1,\r
-  IN EFI_DEVICE_PATH_PROTOCOL       *DevicePath2\r
+  IN EFI_DEVICE_PATH_PROTOCOL  *DevicePath1,\r
+  IN EFI_DEVICE_PATH_PROTOCOL  *DevicePath2\r
   )\r
 {\r
-  PCI_DEVICE_PATH *Pci1;\r
-  PCI_DEVICE_PATH *Pci2;\r
+  PCI_DEVICE_PATH  *Pci1;\r
+  PCI_DEVICE_PATH  *Pci2;\r
 \r
-  ASSERT(DevicePath1 != NULL);\r
-  ASSERT(DevicePath2 != NULL);\r
+  ASSERT (DevicePath1 != NULL);\r
+  ASSERT (DevicePath2 != NULL);\r
 \r
-  Pci1  = (PCI_DEVICE_PATH *) DevicePath1;\r
-  Pci2  = (PCI_DEVICE_PATH *) DevicePath2;\r
-  if (Pci1->Device > Pci2->Device || (Pci1->Device == Pci2->Device && Pci1->Function > Pci2->Function)) {\r
+  Pci1 = (PCI_DEVICE_PATH *)DevicePath1;\r
+  Pci2 = (PCI_DEVICE_PATH *)DevicePath2;\r
+  if ((Pci1->Device > Pci2->Device) || ((Pci1->Device == Pci2->Device) && (Pci1->Function > Pci2->Function))) {\r
     return 1;\r
   }\r
 \r
-  if (Pci1->Device == Pci2->Device && Pci1->Function == Pci2->Function) {\r
+  if ((Pci1->Device == Pci2->Device) && (Pci1->Function == Pci2->Function)) {\r
     return 0;\r
   }\r
 \r
@@ -400,18 +419,18 @@ DevPathComparePci (
 INTN\r
 EFIAPI\r
 DevPathCompareDefault (\r
-  IN EFI_DEVICE_PATH_PROTOCOL       *DevicePath1,\r
-  IN EFI_DEVICE_PATH_PROTOCOL       *DevicePath2\r
+  IN EFI_DEVICE_PATH_PROTOCOL  *DevicePath1,\r
+  IN EFI_DEVICE_PATH_PROTOCOL  *DevicePath2\r
   )\r
 {\r
-  UINTN DevPathSize1;\r
-  UINTN DevPathSize2;\r
+  UINTN  DevPathSize1;\r
+  UINTN  DevPathSize2;\r
 \r
-  ASSERT(DevicePath1 != NULL);\r
-  ASSERT(DevicePath2 != NULL);\r
+  ASSERT (DevicePath1 != NULL);\r
+  ASSERT (DevicePath2 != NULL);\r
 \r
-  DevPathSize1  = DevicePathNodeLength (DevicePath1);\r
-  DevPathSize2  = DevicePathNodeLength (DevicePath2);\r
+  DevPathSize1 = DevicePathNodeLength (DevicePath1);\r
+  DevPathSize2 = DevicePathNodeLength (DevicePath2);\r
   if (DevPathSize1 > DevPathSize2) {\r
     return 1;\r
   } else if (DevPathSize1 < DevPathSize2) {\r
@@ -426,26 +445,29 @@ DevPathCompareDefault (
 \r
   @param[in] DevicePathNode   The node to get info on.\r
   @param[in] MappingItem      The info item to populate.\r
+  @param[in] DevicePath       Ignored.\r
+\r
+  @retval EFI_OUT_OF_RESOURCES    Out of resources.\r
+  @retval EFI_SUCCESS             The appending was successful.\r
 **/\r
-VOID\r
-EFIAPI\r
+EFI_STATUS\r
 DevPathSerialHardDrive (\r
   IN EFI_DEVICE_PATH_PROTOCOL     *DevicePathNode,\r
   IN DEVICE_CONSIST_MAPPING_INFO  *MappingItem,\r
   IN EFI_DEVICE_PATH_PROTOCOL     *DevicePath\r
   )\r
 {\r
-  HARDDRIVE_DEVICE_PATH *Hd;\r
+  HARDDRIVE_DEVICE_PATH  *Hd;\r
 \r
-  ASSERT(DevicePathNode != NULL);\r
-  ASSERT(MappingItem != NULL);\r
+  ASSERT (DevicePathNode != NULL);\r
+  ASSERT (MappingItem != NULL);\r
 \r
-  Hd = (HARDDRIVE_DEVICE_PATH *) DevicePathNode;\r
+  Hd = (HARDDRIVE_DEVICE_PATH *)DevicePathNode;\r
   if (MappingItem->Mtd == MTDTypeUnknown) {\r
     MappingItem->Mtd = MTDTypeHardDisk;\r
   }\r
 \r
-  AppendCSDNum (MappingItem, Hd->PartitionNumber);\r
+  return AppendCSDNum (MappingItem, Hd->PartitionNumber);\r
 }\r
 \r
 /**\r
@@ -453,22 +475,25 @@ DevPathSerialHardDrive (
 \r
   @param[in] DevicePathNode   The node to get info on.\r
   @param[in] MappingItem      The info item to populate.\r
+  @param[in] DevicePath       Ignored.\r
+\r
+  @retval EFI_OUT_OF_RESOURCES    Out of resources.\r
+  @retval EFI_SUCCESS             The appending was successful.\r
 **/\r
-VOID\r
-EFIAPI\r
+EFI_STATUS\r
 DevPathSerialAtapi (\r
   IN EFI_DEVICE_PATH_PROTOCOL     *DevicePathNode,\r
   IN DEVICE_CONSIST_MAPPING_INFO  *MappingItem,\r
   IN EFI_DEVICE_PATH_PROTOCOL     *DevicePath\r
   )\r
 {\r
-  ATAPI_DEVICE_PATH *Atapi;\r
+  ATAPI_DEVICE_PATH  *Atapi;\r
 \r
-  ASSERT(DevicePathNode != NULL);\r
-  ASSERT(MappingItem != NULL);\r
+  ASSERT (DevicePathNode != NULL);\r
+  ASSERT (MappingItem != NULL);\r
 \r
-  Atapi = (ATAPI_DEVICE_PATH *) DevicePathNode;\r
-  AppendCSDNum (MappingItem, (Atapi->PrimarySecondary * 2 + Atapi->SlaveMaster));\r
+  Atapi = (ATAPI_DEVICE_PATH *)DevicePathNode;\r
+  return AppendCSDNum (MappingItem, (Atapi->PrimarySecondary * 2 + Atapi->SlaveMaster));\r
 }\r
 \r
 /**\r
@@ -476,23 +501,26 @@ DevPathSerialAtapi (
 \r
   @param[in] DevicePathNode   The node to get info on.\r
   @param[in] MappingItem      The info item to populate.\r
+  @param[in] DevicePath       Ignored.\r
+\r
+  @retval EFI_OUT_OF_RESOURCES    Out of resources.\r
+  @retval EFI_SUCCESS             The appending was successful.\r
 **/\r
-VOID\r
-EFIAPI\r
+EFI_STATUS\r
 DevPathSerialCdRom (\r
   IN EFI_DEVICE_PATH_PROTOCOL     *DevicePathNode,\r
   IN DEVICE_CONSIST_MAPPING_INFO  *MappingItem,\r
   IN EFI_DEVICE_PATH_PROTOCOL     *DevicePath\r
   )\r
 {\r
-  CDROM_DEVICE_PATH *Cd;\r
+  CDROM_DEVICE_PATH  *Cd;\r
 \r
-  ASSERT(DevicePathNode != NULL);\r
-  ASSERT(MappingItem != NULL);\r
+  ASSERT (DevicePathNode != NULL);\r
+  ASSERT (MappingItem != NULL);\r
 \r
-  Cd                = (CDROM_DEVICE_PATH *) DevicePathNode;\r
-  MappingItem->Mtd  = MTDTypeCDRom;\r
-  AppendCSDNum (MappingItem, Cd->BootEntry);\r
+  Cd               = (CDROM_DEVICE_PATH *)DevicePathNode;\r
+  MappingItem->Mtd = MTDTypeCDRom;\r
+  return AppendCSDNum (MappingItem, Cd->BootEntry);\r
 }\r
 \r
 /**\r
@@ -500,23 +528,31 @@ DevPathSerialCdRom (
 \r
   @param[in] DevicePathNode   The node to get info on.\r
   @param[in] MappingItem      The info item to populate.\r
+  @param[in] DevicePath       Ignored.\r
+\r
+  @retval EFI_OUT_OF_RESOURCES    Out of resources.\r
+  @retval EFI_SUCCESS             The appending was successful.\r
 **/\r
-VOID\r
-EFIAPI\r
+EFI_STATUS\r
 DevPathSerialFibre (\r
   IN EFI_DEVICE_PATH_PROTOCOL     *DevicePathNode,\r
   IN DEVICE_CONSIST_MAPPING_INFO  *MappingItem,\r
   IN EFI_DEVICE_PATH_PROTOCOL     *DevicePath\r
   )\r
 {\r
+  EFI_STATUS                Status;\r
   FIBRECHANNEL_DEVICE_PATH  *Fibre;\r
 \r
-  ASSERT(DevicePathNode != NULL);\r
-  ASSERT(MappingItem != NULL);\r
+  ASSERT (DevicePathNode != NULL);\r
+  ASSERT (MappingItem != NULL);\r
+\r
+  Fibre  = (FIBRECHANNEL_DEVICE_PATH *)DevicePathNode;\r
+  Status = AppendCSDNum (MappingItem, Fibre->WWN);\r
+  if (!EFI_ERROR (Status)) {\r
+    Status = AppendCSDNum (MappingItem, Fibre->Lun);\r
+  }\r
 \r
-  Fibre = (FIBRECHANNEL_DEVICE_PATH *) DevicePathNode;\r
-  AppendCSDNum (MappingItem, Fibre->WWN);\r
-  AppendCSDNum (MappingItem, Fibre->Lun);\r
+  return Status;\r
 }\r
 \r
 /**\r
@@ -524,25 +560,39 @@ DevPathSerialFibre (
 \r
   @param[in] DevicePathNode   The node to get info on.\r
   @param[in] MappingItem      The info item to populate.\r
+  @param[in] DevicePath       Ignored.\r
+\r
+  @retval EFI_OUT_OF_RESOURCES    Out of resources.\r
+  @retval EFI_SUCCESS             The appending was successful.\r
 **/\r
-VOID\r
-EFIAPI\r
+EFI_STATUS\r
 DevPathSerialUart (\r
   IN EFI_DEVICE_PATH_PROTOCOL     *DevicePathNode,\r
   IN DEVICE_CONSIST_MAPPING_INFO  *MappingItem,\r
   IN EFI_DEVICE_PATH_PROTOCOL     *DevicePath\r
   )\r
 {\r
+  EFI_STATUS        Status;\r
   UART_DEVICE_PATH  *Uart;\r
 \r
-  ASSERT(DevicePathNode != NULL);\r
-  ASSERT(MappingItem != NULL);\r
+  ASSERT (DevicePathNode != NULL);\r
+  ASSERT (MappingItem != NULL);\r
 \r
-  Uart = (UART_DEVICE_PATH *) DevicePathNode;\r
-  AppendCSDNum (MappingItem, Uart->BaudRate);\r
-  AppendCSDNum (MappingItem, Uart->DataBits);\r
-  AppendCSDNum (MappingItem, Uart->Parity);\r
-  AppendCSDNum (MappingItem, Uart->StopBits);\r
+  Uart   = (UART_DEVICE_PATH *)DevicePathNode;\r
+  Status = AppendCSDNum (MappingItem, Uart->BaudRate);\r
+  if (!EFI_ERROR (Status)) {\r
+    Status = AppendCSDNum (MappingItem, Uart->DataBits);\r
+  }\r
+\r
+  if (!EFI_ERROR (Status)) {\r
+    Status = AppendCSDNum (MappingItem, Uart->Parity);\r
+  }\r
+\r
+  if (!EFI_ERROR (Status)) {\r
+    Status = AppendCSDNum (MappingItem, Uart->StopBits);\r
+  }\r
+\r
+  return Status;\r
 }\r
 \r
 /**\r
@@ -550,9 +600,12 @@ DevPathSerialUart (
 \r
   @param[in] DevicePathNode   The node to get info on.\r
   @param[in] MappingItem      The info item to populate.\r
+  @param[in] DevicePath       Ignored.\r
+\r
+  @retval EFI_OUT_OF_RESOURCES    Out of resources.\r
+  @retval EFI_SUCCESS             The appending was successful.\r
 **/\r
-VOID\r
-EFIAPI\r
+EFI_STATUS\r
 DevPathSerialUsb (\r
   IN EFI_DEVICE_PATH_PROTOCOL     *DevicePathNode,\r
   IN DEVICE_CONSIST_MAPPING_INFO  *MappingItem,\r
@@ -565,27 +618,32 @@ DevPathSerialUsb (
   EFI_STATUS                Status;\r
   USB_INTERFACE_DESCRIPTOR  InterfaceDesc;\r
 \r
+  ASSERT (DevicePathNode != NULL);\r
+  ASSERT (MappingItem != NULL);\r
 \r
-  ASSERT(DevicePathNode != NULL);\r
-  ASSERT(MappingItem != NULL);\r
+  Usb    = (USB_DEVICE_PATH *)DevicePathNode;\r
+  Status = AppendCSDNum (MappingItem, Usb->ParentPortNumber);\r
+  if (!EFI_ERROR (Status)) {\r
+    Status = AppendCSDNum (MappingItem, Usb->InterfaceNumber);\r
+  }\r
 \r
-  Usb = (USB_DEVICE_PATH *) DevicePathNode;\r
-  AppendCSDNum (MappingItem, Usb->ParentPortNumber);\r
-  AppendCSDNum (MappingItem, Usb->InterfaceNumber);\r
+  if (EFI_ERROR (Status)) {\r
+    return Status;\r
+  }\r
 \r
-  if (PcdGetBool(PcdUsbExtendedDecode)) {\r
-    Status = gBS->LocateDevicePath( &gEfiUsbIoProtocolGuid, &DevicePath, &TempHandle );\r
-    UsbIo = NULL;\r
-    if (!EFI_ERROR(Status)) {\r
-      Status = gBS->OpenProtocol(TempHandle, &gEfiUsbIoProtocolGuid, (VOID**)&UsbIo, gImageHandle, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL);\r
-    } \r
+  if (PcdGetBool (PcdUsbExtendedDecode)) {\r
+    Status = gBS->LocateDevicePath (&gEfiUsbIoProtocolGuid, &DevicePath, &TempHandle);\r
+    UsbIo  = NULL;\r
+    if (!EFI_ERROR (Status)) {\r
+      Status = gBS->OpenProtocol (TempHandle, &gEfiUsbIoProtocolGuid, (VOID **)&UsbIo, gImageHandle, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL);\r
+    }\r
 \r
-    if (!EFI_ERROR(Status)) {\r
-      ASSERT(UsbIo != NULL);\r
-      Status = UsbIo->UsbGetInterfaceDescriptor(UsbIo, &InterfaceDesc);\r
-      if (!EFI_ERROR(Status)) {\r
-        if (InterfaceDesc.InterfaceClass == USB_MASS_STORE_CLASS && MappingItem->Mtd == MTDTypeUnknown) {\r
-          switch (InterfaceDesc.InterfaceSubClass){\r
+    if (!EFI_ERROR (Status)) {\r
+      ASSERT (UsbIo != NULL);\r
+      Status = UsbIo->UsbGetInterfaceDescriptor (UsbIo, &InterfaceDesc);\r
+      if (!EFI_ERROR (Status)) {\r
+        if ((InterfaceDesc.InterfaceClass == USB_MASS_STORE_CLASS) && (MappingItem->Mtd == MTDTypeUnknown)) {\r
+          switch (InterfaceDesc.InterfaceSubClass) {\r
             case USB_MASS_STORE_SCSI:\r
               MappingItem->Mtd = MTDTypeHardDisk;\r
               break;\r
@@ -594,13 +652,15 @@ DevPathSerialUsb (
               MappingItem->Mtd = MTDTypeFloppy;\r
               break;\r
             case USB_MASS_STORE_8020I:\r
-              MappingItem->Mtd  = MTDTypeCDRom;\r
+              MappingItem->Mtd = MTDTypeCDRom;\r
               break;\r
           }\r
         }\r
       }\r
-    } \r
+    }\r
   }\r
+\r
+  return Status;\r
 }\r
 \r
 /**\r
@@ -608,62 +668,85 @@ DevPathSerialUsb (
 \r
   @param[in] DevicePathNode   The node to get info on.\r
   @param[in] MappingItem      The info item to populate.\r
+  @param[in] DevicePath       Ignored.\r
 \r
+  @retval EFI_OUT_OF_RESOURCES    Out of resources.\r
+  @retval EFI_SUCCESS             The appending was successful.\r
 **/\r
-VOID\r
-EFIAPI\r
+EFI_STATUS\r
 DevPathSerialVendor (\r
   IN EFI_DEVICE_PATH_PROTOCOL     *DevicePathNode,\r
   IN DEVICE_CONSIST_MAPPING_INFO  *MappingItem,\r
   IN EFI_DEVICE_PATH_PROTOCOL     *DevicePath\r
   )\r
 {\r
+  EFI_STATUS          Status;\r
   VENDOR_DEVICE_PATH  *Vendor;\r
   SAS_DEVICE_PATH     *Sas;\r
   UINTN               TargetNameLength;\r
   UINTN               Index;\r
   CHAR16              *Buffer;\r
+  CHAR16              *NewBuffer;\r
 \r
-  if (DevicePathNode == NULL || MappingItem == NULL) {\r
-    return;\r
-  }\r
+  ASSERT (DevicePathNode != NULL);\r
+  ASSERT (MappingItem != NULL);\r
 \r
-  Vendor = (VENDOR_DEVICE_PATH *) DevicePathNode;\r
-  AppendCSDGuid (MappingItem, &Vendor->Guid);\r
+  Vendor = (VENDOR_DEVICE_PATH *)DevicePathNode;\r
+  Status = AppendCSDGuid (MappingItem, &Vendor->Guid);\r
+  if (EFI_ERROR (Status)) {\r
+    return Status;\r
+  }\r
 \r
   if (CompareGuid (&gEfiSasDevicePathGuid, &Vendor->Guid)) {\r
-    Sas = (SAS_DEVICE_PATH *) Vendor;\r
-    AppendCSDNum (MappingItem, Sas->SasAddress);\r
-    AppendCSDNum (MappingItem, Sas->Lun);\r
-    AppendCSDNum (MappingItem, Sas->DeviceTopology);\r
-    AppendCSDNum (MappingItem, Sas->RelativeTargetPort);\r
+    Sas    = (SAS_DEVICE_PATH *)Vendor;\r
+    Status = AppendCSDNum (MappingItem, Sas->SasAddress);\r
+    if (!EFI_ERROR (Status)) {\r
+      Status = AppendCSDNum (MappingItem, Sas->Lun);\r
+    }\r
+\r
+    if (!EFI_ERROR (Status)) {\r
+      Status = AppendCSDNum (MappingItem, Sas->DeviceTopology);\r
+    }\r
+\r
+    if (!EFI_ERROR (Status)) {\r
+      Status = AppendCSDNum (MappingItem, Sas->RelativeTargetPort);\r
+    }\r
   } else {\r
-    TargetNameLength = MIN(DevicePathNodeLength (DevicePathNode) - sizeof (VENDOR_DEVICE_PATH), PcdGet32(PcdShellVendorExtendedDecode));\r
+    TargetNameLength = MIN (DevicePathNodeLength (DevicePathNode) - sizeof (VENDOR_DEVICE_PATH), PcdGet32 (PcdShellVendorExtendedDecode));\r
     if (TargetNameLength != 0) {\r
       //\r
       // String is 2 chars per data byte, plus NULL terminator\r
       //\r
-      Buffer = AllocateZeroPool (((TargetNameLength * 2) + 1) * sizeof(CHAR16));\r
-      ASSERT(Buffer != NULL);\r
+      Buffer = AllocateZeroPool (((TargetNameLength * 2) + 1) * sizeof (CHAR16));\r
       if (Buffer == NULL) {\r
-        return;\r
-  }\r
+        return EFI_OUT_OF_RESOURCES;\r
+      }\r
 \r
       //\r
       // Build the string data\r
       //\r
       for (Index = 0; Index < TargetNameLength; Index++) {\r
-        Buffer = CatSPrint (Buffer, L"%02x", *((UINT8*)Vendor + sizeof (VENDOR_DEVICE_PATH) + Index));\r
-}\r
+        NewBuffer = CatSPrint (Buffer, L"%02x", *((UINT8 *)Vendor + sizeof (VENDOR_DEVICE_PATH) + Index));\r
+        if (NewBuffer == NULL) {\r
+          Status = EFI_OUT_OF_RESOURCES;\r
+          break;\r
+        }\r
+\r
+        Buffer = NewBuffer;\r
+      }\r
 \r
       //\r
       // Append the new data block\r
       //\r
-      AppendCSDStr (MappingItem, Buffer);\r
+      if (!EFI_ERROR (Status)) {\r
+        Status = AppendCSDStr (MappingItem, Buffer);\r
+      }\r
 \r
-      FreePool(Buffer);\r
+      FreePool (Buffer);\r
     }\r
   }\r
+\r
+  return Status;\r
 }\r
 \r
 /**\r
@@ -671,22 +754,25 @@ DevPathSerialVendor (
 \r
   @param[in] DevicePathNode   The node to get info on.\r
   @param[in] MappingItem      The info item to populate.\r
+  @param[in] DevicePath       Ignored.\r
+\r
+  @retval EFI_OUT_OF_RESOURCES    Out of resources.\r
+  @retval EFI_SUCCESS             The appending was successful.\r
 **/\r
-VOID\r
-EFIAPI\r
+EFI_STATUS\r
 DevPathSerialLun (\r
   IN EFI_DEVICE_PATH_PROTOCOL     *DevicePathNode,\r
   IN DEVICE_CONSIST_MAPPING_INFO  *MappingItem,\r
   IN EFI_DEVICE_PATH_PROTOCOL     *DevicePath\r
   )\r
 {\r
-  DEVICE_LOGICAL_UNIT_DEVICE_PATH *Lun;\r
+  DEVICE_LOGICAL_UNIT_DEVICE_PATH  *Lun;\r
 \r
-  ASSERT(DevicePathNode != NULL);\r
-  ASSERT(MappingItem != NULL);\r
+  ASSERT (DevicePathNode != NULL);\r
+  ASSERT (MappingItem != NULL);\r
 \r
-  Lun = (DEVICE_LOGICAL_UNIT_DEVICE_PATH *) DevicePathNode;\r
-  AppendCSDNum (MappingItem, Lun->Lun);\r
+  Lun = (DEVICE_LOGICAL_UNIT_DEVICE_PATH *)DevicePathNode;\r
+  return AppendCSDNum (MappingItem, Lun->Lun);\r
 }\r
 \r
 /**\r
@@ -694,24 +780,35 @@ DevPathSerialLun (
 \r
   @param[in] DevicePathNode   The node to get info on.\r
   @param[in] MappingItem      The info item to populate.\r
+  @param[in] DevicePath       Ignored.\r
+\r
+  @retval EFI_OUT_OF_RESOURCES    Out of resources.\r
+  @retval EFI_SUCCESS             The appending was successful.\r
 **/\r
-VOID\r
-EFIAPI\r
+EFI_STATUS\r
 DevPathSerialSata (\r
   IN EFI_DEVICE_PATH_PROTOCOL     *DevicePathNode,\r
   IN DEVICE_CONSIST_MAPPING_INFO  *MappingItem,\r
   IN EFI_DEVICE_PATH_PROTOCOL     *DevicePath\r
   )\r
 {\r
+  EFI_STATUS        Status;\r
   SATA_DEVICE_PATH  *Sata;\r
 \r
-  ASSERT(DevicePathNode != NULL);\r
-  ASSERT(MappingItem != NULL);\r
+  ASSERT (DevicePathNode != NULL);\r
+  ASSERT (MappingItem != NULL);\r
+\r
+  Sata   = (SATA_DEVICE_PATH  *)DevicePathNode;\r
+  Status = AppendCSDNum (MappingItem, Sata->HBAPortNumber);\r
+  if (!EFI_ERROR (Status)) {\r
+    Status = AppendCSDNum (MappingItem, Sata->PortMultiplierPortNumber);\r
+  }\r
+\r
+  if (!EFI_ERROR (Status)) {\r
+    Status = AppendCSDNum (MappingItem, Sata->Lun);\r
+  }\r
 \r
-  Sata = (SATA_DEVICE_PATH  *) DevicePathNode;\r
-  AppendCSDNum (MappingItem, Sata->HBAPortNumber);\r
-  AppendCSDNum (MappingItem, Sata->PortMultiplierPortNumber);\r
-  AppendCSDNum (MappingItem, Sata->Lun);\r
+  return Status;\r
 }\r
 \r
 /**\r
@@ -719,43 +816,67 @@ DevPathSerialSata (
 \r
   @param[in] DevicePathNode   The node to get info on.\r
   @param[in] MappingItem      The info item to populate.\r
+  @param[in] DevicePath       Ignored.\r
+\r
+  @retval EFI_OUT_OF_RESOURCES    Out of resources.\r
+  @retval EFI_SUCCESS             The appending was successful.\r
 **/\r
-VOID\r
-EFIAPI\r
+EFI_STATUS\r
 DevPathSerialIScsi (\r
   IN EFI_DEVICE_PATH_PROTOCOL     *DevicePathNode,\r
   IN DEVICE_CONSIST_MAPPING_INFO  *MappingItem,\r
   IN EFI_DEVICE_PATH_PROTOCOL     *DevicePath\r
   )\r
 {\r
+  EFI_STATUS         Status;\r
   ISCSI_DEVICE_PATH  *IScsi;\r
   UINT8              *IScsiTargetName;\r
   CHAR16             *TargetName;\r
   UINTN              TargetNameLength;\r
   UINTN              Index;\r
 \r
-  ASSERT(DevicePathNode != NULL);\r
-  ASSERT(MappingItem != NULL);\r
+  ASSERT (DevicePathNode != NULL);\r
+  ASSERT (MappingItem != NULL);\r
+\r
+  Status = EFI_SUCCESS;\r
+\r
+  if (PcdGetBool (PcdShellDecodeIScsiMapNames)) {\r
+    IScsi  = (ISCSI_DEVICE_PATH  *)DevicePathNode;\r
+    Status = AppendCSDNum (MappingItem, IScsi->NetworkProtocol);\r
+    if (!EFI_ERROR (Status)) {\r
+      Status = AppendCSDNum (MappingItem, IScsi->LoginOption);\r
+    }\r
+\r
+    if (!EFI_ERROR (Status)) {\r
+      Status = AppendCSDNum (MappingItem, IScsi->Lun);\r
+    }\r
+\r
+    if (!EFI_ERROR (Status)) {\r
+      Status = AppendCSDNum (MappingItem, IScsi->TargetPortalGroupTag);\r
+    }\r
+\r
+    if (EFI_ERROR (Status)) {\r
+      return Status;\r
+    }\r
 \r
-  if (PcdGetBool(PcdShellDecodeIScsiMapNames)) {\r
-    IScsi = (ISCSI_DEVICE_PATH  *) DevicePathNode;\r
-    AppendCSDNum (MappingItem, IScsi->NetworkProtocol);\r
-    AppendCSDNum (MappingItem, IScsi->LoginOption);\r
-    AppendCSDNum (MappingItem, IScsi->Lun);\r
-    AppendCSDNum (MappingItem, IScsi->TargetPortalGroupTag);\r
     TargetNameLength = DevicePathNodeLength (DevicePathNode) - sizeof (ISCSI_DEVICE_PATH);\r
     if (TargetNameLength > 0) {\r
       TargetName = AllocateZeroPool ((TargetNameLength + 1) * sizeof (CHAR16));\r
-      if (TargetName != NULL) {\r
-        IScsiTargetName = (UINT8 *) (IScsi + 1);\r
+      if (TargetName == NULL) {\r
+        Status = EFI_OUT_OF_RESOURCES;\r
+      } else {\r
+        IScsiTargetName = (UINT8 *)(IScsi + 1);\r
         for (Index = 0; Index < TargetNameLength; Index++) {\r
-          TargetName[Index] = (CHAR16) IScsiTargetName[Index];\r
+          TargetName[Index] = (CHAR16)IScsiTargetName[Index];\r
         }\r
-        AppendCSDStr (MappingItem, TargetName);\r
+\r
+        Status = AppendCSDStr (MappingItem, TargetName);\r
         FreePool (TargetName);\r
       }\r
     }\r
   }\r
+\r
+  return Status;\r
 }\r
 \r
 /**\r
@@ -763,22 +884,25 @@ DevPathSerialIScsi (
 \r
   @param[in] DevicePathNode   The node to get info on.\r
   @param[in] MappingItem      The info item to populate.\r
+  @param[in] DevicePath       Ignored.\r
+\r
+  @retval EFI_OUT_OF_RESOURCES    Out of resources.\r
+  @retval EFI_SUCCESS             The appending was successful.\r
 **/\r
-VOID\r
-EFIAPI\r
+EFI_STATUS\r
 DevPathSerialI2O (\r
   IN EFI_DEVICE_PATH_PROTOCOL     *DevicePathNode,\r
   IN DEVICE_CONSIST_MAPPING_INFO  *MappingItem,\r
   IN EFI_DEVICE_PATH_PROTOCOL     *DevicePath\r
   )\r
 {\r
-  I2O_DEVICE_PATH *DevicePath_I20;\r
+  I2O_DEVICE_PATH  *DevicePath_I20;\r
 \r
-  ASSERT(DevicePathNode != NULL);\r
-  ASSERT(MappingItem != NULL);\r
+  ASSERT (DevicePathNode != NULL);\r
+  ASSERT (MappingItem != NULL);\r
 \r
-  DevicePath_I20 = (I2O_DEVICE_PATH *) DevicePathNode;\r
-  AppendCSDNum (MappingItem, DevicePath_I20->Tid);\r
+  DevicePath_I20 = (I2O_DEVICE_PATH *)DevicePathNode;\r
+  return AppendCSDNum (MappingItem, DevicePath_I20->Tid);\r
 }\r
 \r
 /**\r
@@ -786,9 +910,12 @@ DevPathSerialI2O (
 \r
   @param[in] DevicePathNode   The node to get info on.\r
   @param[in] MappingItem      The info item to populate.\r
+  @param[in] DevicePath       Ignored.\r
+\r
+  @retval EFI_OUT_OF_RESOURCES    Out of resources.\r
+  @retval EFI_SUCCESS             The appending was successful.\r
 **/\r
-VOID\r
-EFIAPI\r
+EFI_STATUS\r
 DevPathSerialMacAddr (\r
   IN EFI_DEVICE_PATH_PROTOCOL     *DevicePathNode,\r
   IN DEVICE_CONSIST_MAPPING_INFO  *MappingItem,\r
@@ -801,21 +928,21 @@ DevPathSerialMacAddr (
   CHAR16                Buffer[64];\r
   CHAR16                *PBuffer;\r
 \r
-  ASSERT(DevicePathNode != NULL);\r
-  ASSERT(MappingItem != NULL);\r
+  ASSERT (DevicePathNode != NULL);\r
+  ASSERT (MappingItem != NULL);\r
 \r
-  Mac           = (MAC_ADDR_DEVICE_PATH *) DevicePathNode;\r
+  Mac = (MAC_ADDR_DEVICE_PATH *)DevicePathNode;\r
 \r
   HwAddressSize = sizeof (EFI_MAC_ADDRESS);\r
-  if (Mac->IfType == 0x01 || Mac->IfType == 0x00) {\r
+  if ((Mac->IfType == 0x01) || (Mac->IfType == 0x00)) {\r
     HwAddressSize = 6;\r
   }\r
 \r
   for (Index = 0, PBuffer = Buffer; Index < HwAddressSize; Index++, PBuffer += 2) {\r
-    UnicodeSPrint (PBuffer, 0, L"%02x", (UINTN) Mac->MacAddress.Addr[Index]);\r
+    UnicodeSPrint (PBuffer, 0, L"%02x", (UINTN)Mac->MacAddress.Addr[Index]);\r
   }\r
 \r
-  AppendCSDStr (MappingItem, Buffer);\r
+  return AppendCSDStr (MappingItem, Buffer);\r
 }\r
 \r
 /**\r
@@ -823,32 +950,46 @@ DevPathSerialMacAddr (
 \r
   @param[in] DevicePathNode   The node to get info on.\r
   @param[in] MappingItem      The info item to populate.\r
+  @param[in] DevicePath       Ignored.\r
+\r
+  @retval EFI_OUT_OF_RESOURCES    Out of resources.\r
+  @retval EFI_SUCCESS             The appending was successful.\r
 **/\r
-VOID\r
-EFIAPI\r
+EFI_STATUS\r
 DevPathSerialInfiniBand (\r
   IN EFI_DEVICE_PATH_PROTOCOL     *DevicePathNode,\r
   IN DEVICE_CONSIST_MAPPING_INFO  *MappingItem,\r
   IN EFI_DEVICE_PATH_PROTOCOL     *DevicePath\r
   )\r
 {\r
+  EFI_STATUS              Status;\r
   INFINIBAND_DEVICE_PATH  *InfiniBand;\r
   UINTN                   Index;\r
   CHAR16                  Buffer[64];\r
   CHAR16                  *PBuffer;\r
 \r
-  ASSERT(DevicePathNode != NULL);\r
-  ASSERT(MappingItem != NULL);\r
+  ASSERT (DevicePathNode != NULL);\r
+  ASSERT (MappingItem != NULL);\r
 \r
-  InfiniBand = (INFINIBAND_DEVICE_PATH *) DevicePathNode;\r
+  InfiniBand = (INFINIBAND_DEVICE_PATH *)DevicePathNode;\r
   for (Index = 0, PBuffer = Buffer; Index < 16; Index++, PBuffer += 2) {\r
-    UnicodeSPrint (PBuffer, 0, L"%02x", (UINTN) InfiniBand->PortGid[Index]);\r
+    UnicodeSPrint (PBuffer, 0, L"%02x", (UINTN)InfiniBand->PortGid[Index]);\r
+  }\r
+\r
+  Status = AppendCSDStr (MappingItem, Buffer);\r
+  if (!EFI_ERROR (Status)) {\r
+    Status = AppendCSDNum (MappingItem, InfiniBand->ServiceId);\r
+  }\r
+\r
+  if (!EFI_ERROR (Status)) {\r
+    Status = AppendCSDNum (MappingItem, InfiniBand->TargetPortId);\r
+  }\r
+\r
+  if (!EFI_ERROR (Status)) {\r
+    Status = AppendCSDNum (MappingItem, InfiniBand->DeviceId);\r
   }\r
 \r
-  AppendCSDStr (MappingItem, Buffer);\r
-  AppendCSDNum (MappingItem, InfiniBand->ServiceId);\r
-  AppendCSDNum (MappingItem, InfiniBand->TargetPortId);\r
-  AppendCSDNum (MappingItem, InfiniBand->DeviceId);\r
+  return Status;\r
 }\r
 \r
 /**\r
@@ -856,44 +997,58 @@ DevPathSerialInfiniBand (
 \r
   @param[in] DevicePathNode   The node to get info on.\r
   @param[in] MappingItem      The info item to populate.\r
+  @param[in] DevicePath       Ignored.\r
+\r
+  @retval EFI_OUT_OF_RESOURCES    Out of resources.\r
+  @retval EFI_SUCCESS             The appending was successful.\r
 **/\r
-VOID\r
-EFIAPI\r
+EFI_STATUS\r
 DevPathSerialIPv4 (\r
   IN EFI_DEVICE_PATH_PROTOCOL     *DevicePathNode,\r
   IN DEVICE_CONSIST_MAPPING_INFO  *MappingItem,\r
   IN EFI_DEVICE_PATH_PROTOCOL     *DevicePath\r
   )\r
 {\r
+  EFI_STATUS        Status;\r
   IPv4_DEVICE_PATH  *Ip;\r
   CHAR16            Buffer[10];\r
 \r
-  ASSERT(DevicePathNode != NULL);\r
-  ASSERT(MappingItem != NULL);\r
+  ASSERT (DevicePathNode != NULL);\r
+  ASSERT (MappingItem != NULL);\r
 \r
-  Ip = (IPv4_DEVICE_PATH *) DevicePathNode;\r
+  Ip = (IPv4_DEVICE_PATH *)DevicePathNode;\r
   UnicodeSPrint (\r
     Buffer,\r
     0,\r
     L"%02x%02x%02x%02x",\r
-    (UINTN) Ip->LocalIpAddress.Addr[0],\r
-    (UINTN) Ip->LocalIpAddress.Addr[1],\r
-    (UINTN) Ip->LocalIpAddress.Addr[2],\r
-    (UINTN) Ip->LocalIpAddress.Addr[3]\r
-   );\r
-  AppendCSDStr (MappingItem, Buffer);\r
-  AppendCSDNum (MappingItem, Ip->LocalPort);\r
-  UnicodeSPrint (\r
-    Buffer,\r
-    0,\r
-    L"%02x%02x%02x%02x",\r
-    (UINTN) Ip->RemoteIpAddress.Addr[0],\r
-    (UINTN) Ip->RemoteIpAddress.Addr[1],\r
-    (UINTN) Ip->RemoteIpAddress.Addr[2],\r
-    (UINTN) Ip->RemoteIpAddress.Addr[3]\r
-   );\r
-  AppendCSDStr (MappingItem, Buffer);\r
-  AppendCSDNum (MappingItem, Ip->RemotePort);\r
+    (UINTN)Ip->LocalIpAddress.Addr[0],\r
+    (UINTN)Ip->LocalIpAddress.Addr[1],\r
+    (UINTN)Ip->LocalIpAddress.Addr[2],\r
+    (UINTN)Ip->LocalIpAddress.Addr[3]\r
+    );\r
+  Status = AppendCSDStr (MappingItem, Buffer);\r
+  if (!EFI_ERROR (Status)) {\r
+    Status = AppendCSDNum (MappingItem, Ip->LocalPort);\r
+  }\r
+\r
+  if (!EFI_ERROR (Status)) {\r
+    UnicodeSPrint (\r
+      Buffer,\r
+      0,\r
+      L"%02x%02x%02x%02x",\r
+      (UINTN)Ip->RemoteIpAddress.Addr[0],\r
+      (UINTN)Ip->RemoteIpAddress.Addr[1],\r
+      (UINTN)Ip->RemoteIpAddress.Addr[2],\r
+      (UINTN)Ip->RemoteIpAddress.Addr[3]\r
+      );\r
+    Status = AppendCSDStr (MappingItem, Buffer);\r
+  }\r
+\r
+  if (!EFI_ERROR (Status)) {\r
+    Status = AppendCSDNum (MappingItem, Ip->RemotePort);\r
+  }\r
+\r
+  return Status;\r
 }\r
 \r
 /**\r
@@ -901,36 +1056,50 @@ DevPathSerialIPv4 (
 \r
   @param[in] DevicePathNode   The node to get info on.\r
   @param[in] MappingItem      The info item to populate.\r
+  @param[in] DevicePath       Ignored.\r
+\r
+  @retval EFI_OUT_OF_RESOURCES    Out of resources.\r
+  @retval EFI_SUCCESS             The appending was successful.\r
 **/\r
-VOID\r
-EFIAPI\r
+EFI_STATUS\r
 DevPathSerialIPv6 (\r
   IN EFI_DEVICE_PATH_PROTOCOL     *DevicePathNode,\r
   IN DEVICE_CONSIST_MAPPING_INFO  *MappingItem,\r
   IN EFI_DEVICE_PATH_PROTOCOL     *DevicePath\r
   )\r
 {\r
+  EFI_STATUS        Status;\r
   IPv6_DEVICE_PATH  *Ip;\r
   UINTN             Index;\r
   CHAR16            Buffer[64];\r
   CHAR16            *PBuffer;\r
 \r
-  ASSERT(DevicePathNode != NULL);\r
-  ASSERT(MappingItem != NULL);\r
+  ASSERT (DevicePathNode != NULL);\r
+  ASSERT (MappingItem != NULL);\r
 \r
-  Ip = (IPv6_DEVICE_PATH *) DevicePathNode;\r
+  Ip = (IPv6_DEVICE_PATH *)DevicePathNode;\r
   for (Index = 0, PBuffer = Buffer; Index < 16; Index++, PBuffer += 2) {\r
-    UnicodeSPrint (PBuffer, 0, L"%02x", (UINTN) Ip->LocalIpAddress.Addr[Index]);\r
+    UnicodeSPrint (PBuffer, 0, L"%02x", (UINTN)Ip->LocalIpAddress.Addr[Index]);\r
   }\r
 \r
-  AppendCSDStr (MappingItem, Buffer);\r
-  AppendCSDNum (MappingItem, Ip->LocalPort);\r
-  for (Index = 0, PBuffer = Buffer; Index < 16; Index++, PBuffer += 2) {\r
-    UnicodeSPrint (PBuffer, 0, L"%02x", (UINTN) Ip->RemoteIpAddress.Addr[Index]);\r
+  Status = AppendCSDStr (MappingItem, Buffer);\r
+  if (!EFI_ERROR (Status)) {\r
+    Status = AppendCSDNum (MappingItem, Ip->LocalPort);\r
   }\r
 \r
-  AppendCSDStr (MappingItem, Buffer);\r
-  AppendCSDNum (MappingItem, Ip->RemotePort);\r
+  if (!EFI_ERROR (Status)) {\r
+    for (Index = 0, PBuffer = Buffer; Index < 16; Index++, PBuffer += 2) {\r
+      UnicodeSPrint (PBuffer, 0, L"%02x", (UINTN)Ip->RemoteIpAddress.Addr[Index]);\r
+    }\r
+\r
+    Status = AppendCSDStr (MappingItem, Buffer);\r
+  }\r
+\r
+  if (!EFI_ERROR (Status)) {\r
+    Status = AppendCSDNum (MappingItem, Ip->RemotePort);\r
+  }\r
+\r
+  return Status;\r
 }\r
 \r
 /**\r
@@ -938,23 +1107,31 @@ DevPathSerialIPv6 (
 \r
   @param[in] DevicePathNode   The node to get info on.\r
   @param[in] MappingItem      The info item to populate.\r
+  @param[in] DevicePath       Ignored.\r
+\r
+  @retval EFI_OUT_OF_RESOURCES    Out of resources.\r
+  @retval EFI_SUCCESS             The appending was successful.\r
 **/\r
-VOID\r
-EFIAPI\r
+EFI_STATUS\r
 DevPathSerialScsi (\r
   IN EFI_DEVICE_PATH_PROTOCOL     *DevicePathNode,\r
   IN DEVICE_CONSIST_MAPPING_INFO  *MappingItem,\r
   IN EFI_DEVICE_PATH_PROTOCOL     *DevicePath\r
   )\r
 {\r
+  EFI_STATUS        Status;\r
   SCSI_DEVICE_PATH  *Scsi;\r
 \r
-  ASSERT(DevicePathNode != NULL);\r
-  ASSERT(MappingItem != NULL);\r
+  ASSERT (DevicePathNode != NULL);\r
+  ASSERT (MappingItem != NULL);\r
+\r
+  Scsi   = (SCSI_DEVICE_PATH *)DevicePathNode;\r
+  Status = AppendCSDNum (MappingItem, Scsi->Pun);\r
+  if (!EFI_ERROR (Status)) {\r
+    Status = AppendCSDNum (MappingItem, Scsi->Lun);\r
+  }\r
 \r
-  Scsi = (SCSI_DEVICE_PATH *) DevicePathNode;\r
-  AppendCSDNum (MappingItem, Scsi->Pun);\r
-  AppendCSDNum (MappingItem, Scsi->Lun);\r
+  return Status;\r
 }\r
 \r
 /**\r
@@ -962,24 +1139,27 @@ DevPathSerialScsi (
 \r
   @param[in] DevicePathNode   The node to get info on.\r
   @param[in] MappingItem      The info item to populate.\r
+  @param[in] DevicePath       Ignored.\r
+\r
+  @retval EFI_OUT_OF_RESOURCES    Out of resources.\r
+  @retval EFI_SUCCESS             The appending was successful.\r
 **/\r
-VOID\r
-EFIAPI\r
+EFI_STATUS\r
 DevPathSerial1394 (\r
   IN EFI_DEVICE_PATH_PROTOCOL     *DevicePathNode,\r
   IN DEVICE_CONSIST_MAPPING_INFO  *MappingItem,\r
   IN EFI_DEVICE_PATH_PROTOCOL     *DevicePath\r
   )\r
 {\r
-  F1394_DEVICE_PATH *DevicePath_F1394;\r
-  CHAR16            Buffer[20];\r
+  F1394_DEVICE_PATH  *DevicePath_F1394;\r
+  CHAR16             Buffer[20];\r
 \r
-  ASSERT(DevicePathNode != NULL);\r
-  ASSERT(MappingItem != NULL);\r
+  ASSERT (DevicePathNode != NULL);\r
+  ASSERT (MappingItem != NULL);\r
 \r
-  DevicePath_F1394 = (F1394_DEVICE_PATH *) DevicePathNode;\r
+  DevicePath_F1394 = (F1394_DEVICE_PATH *)DevicePathNode;\r
   UnicodeSPrint (Buffer, 0, L"%lx", DevicePath_F1394->Guid);\r
-  AppendCSDStr (MappingItem, Buffer);\r
+  return AppendCSDStr (MappingItem, Buffer);\r
 }\r
 \r
 /**\r
@@ -987,9 +1167,12 @@ DevPathSerial1394 (
 \r
   @param[in] DevicePathNode   The node to get info on.\r
   @param[in] MappingItem      The info item to populate.\r
+  @param[in] DevicePath       Ignored.\r
+\r
+  @retval EFI_OUT_OF_RESOURCES    Out of resources.\r
+  @retval EFI_SUCCESS             The appending was successful.\r
 **/\r
-VOID\r
-EFIAPI\r
+EFI_STATUS\r
 DevPathSerialAcpi (\r
   IN EFI_DEVICE_PATH_PROTOCOL     *DevicePathNode,\r
   IN DEVICE_CONSIST_MAPPING_INFO  *MappingItem,\r
@@ -998,16 +1181,18 @@ DevPathSerialAcpi (
 {\r
   ACPI_HID_DEVICE_PATH  *Acpi;\r
 \r
-  ASSERT(DevicePathNode != NULL);\r
-  ASSERT(MappingItem != NULL);\r
+  ASSERT (DevicePathNode != NULL);\r
+  ASSERT (MappingItem != NULL);\r
 \r
-  Acpi = (ACPI_HID_DEVICE_PATH *) DevicePathNode;\r
+  Acpi = (ACPI_HID_DEVICE_PATH *)DevicePathNode;\r
   if ((Acpi->HID & PNP_EISA_ID_MASK) == PNP_EISA_ID_CONST) {\r
     if (EISA_ID_TO_NUM (Acpi->HID) == 0x0604) {\r
       MappingItem->Mtd = MTDTypeFloppy;\r
-      AppendCSDNum (MappingItem, Acpi->UID);\r
+      return AppendCSDNum (MappingItem, Acpi->UID);\r
     }\r
   }\r
+\r
+  return EFI_SUCCESS;\r
 }\r
 \r
 /**\r
@@ -1015,18 +1200,19 @@ DevPathSerialAcpi (
 \r
   @param[in] DevicePathNode       Ignored.\r
   @param[in] MappingItem          Ignored.\r
+  @param[in] DevicePath           Ignored.\r
 \r
-  Does nothing.\r
+  @retval EFI_OUT_OF_RESOURCES    Out of resources.\r
+  @retval EFI_SUCCESS             The appending was successful.\r
 **/\r
-VOID\r
-EFIAPI\r
+EFI_STATUS\r
 DevPathSerialDefault (\r
   IN EFI_DEVICE_PATH_PROTOCOL     *DevicePathNode,\r
   IN DEVICE_CONSIST_MAPPING_INFO  *MappingItem,\r
   IN EFI_DEVICE_PATH_PROTOCOL     *DevicePath\r
   )\r
 {\r
-  return;\r
+  return EFI_SUCCESS;\r
 }\r
 \r
 DEV_PATH_CONSIST_MAPPING_TABLE  DevPathConsistMappingTable[] = {\r
@@ -1167,27 +1353,26 @@ DEV_PATH_CONSIST_MAPPING_TABLE  DevPathConsistMappingTable[] = {
   @retval FALSE   The node is not Hi.\r
 **/\r
 BOOLEAN\r
-EFIAPI\r
 IsHIDevicePathNode (\r
-  IN EFI_DEVICE_PATH_PROTOCOL *DevicePathNode\r
+  IN EFI_DEVICE_PATH_PROTOCOL  *DevicePathNode\r
   )\r
 {\r
   ACPI_HID_DEVICE_PATH  *Acpi;\r
 \r
-  ASSERT(DevicePathNode != NULL);\r
+  ASSERT (DevicePathNode != NULL);\r
 \r
   if (DevicePathNode->Type == HARDWARE_DEVICE_PATH) {\r
     return TRUE;\r
   }\r
 \r
   if (DevicePathNode->Type == ACPI_DEVICE_PATH) {\r
-    Acpi = (ACPI_HID_DEVICE_PATH *) DevicePathNode;\r
+    Acpi = (ACPI_HID_DEVICE_PATH *)DevicePathNode;\r
     switch (EISA_ID_TO_NUM (Acpi->HID)) {\r
-    case 0x0301:\r
-    case 0x0401:\r
-    case 0x0501:\r
-    case 0x0604:\r
-      return FALSE;\r
+      case 0x0301:\r
+      case 0x0401:\r
+      case 0x0501:\r
+      case 0x0604:\r
+        return FALSE;\r
     }\r
 \r
     return TRUE;\r
@@ -1204,9 +1389,8 @@ IsHIDevicePathNode (
   @return   the device path portion that is Hi.\r
 **/\r
 EFI_DEVICE_PATH_PROTOCOL *\r
-EFIAPI\r
 GetHIDevicePath (\r
-  IN EFI_DEVICE_PATH_PROTOCOL        *DevicePath\r
+  IN EFI_DEVICE_PATH_PROTOCOL  *DevicePath\r
   )\r
 {\r
   UINTN                     NonHIDevicePathNodeCount;\r
@@ -1215,17 +1399,17 @@ GetHIDevicePath (
   EFI_DEVICE_PATH_PROTOCOL  *HIDevicePath;\r
   EFI_DEVICE_PATH_PROTOCOL  *TempDevicePath;\r
 \r
-  ASSERT(DevicePath != NULL);\r
+  ASSERT (DevicePath != NULL);\r
 \r
-  NonHIDevicePathNodeCount  = 0;\r
+  NonHIDevicePathNodeCount = 0;\r
 \r
-  HIDevicePath              = AllocateZeroPool (sizeof (EFI_DEVICE_PATH_PROTOCOL));\r
+  HIDevicePath = AllocateZeroPool (sizeof (EFI_DEVICE_PATH_PROTOCOL));\r
   SetDevicePathEndNode (HIDevicePath);\r
 \r
-  Node.DevPath.Type       = END_DEVICE_PATH_TYPE;\r
-  Node.DevPath.SubType    = END_INSTANCE_DEVICE_PATH_SUBTYPE;\r
-  Node.DevPath.Length[0]  = (UINT8)sizeof (EFI_DEVICE_PATH_PROTOCOL);\r
-  Node.DevPath.Length[1]  = 0;\r
+  Node.DevPath.Type      = END_DEVICE_PATH_TYPE;\r
+  Node.DevPath.SubType   = END_INSTANCE_DEVICE_PATH_SUBTYPE;\r
+  Node.DevPath.Length[0] = (UINT8)sizeof (EFI_DEVICE_PATH_PROTOCOL);\r
+  Node.DevPath.Length[1] = 0;\r
 \r
   while (!IsDevicePathEnd (DevicePath)) {\r
     if (IsHIDevicePathNode (DevicePath)) {\r
@@ -1241,10 +1425,11 @@ GetHIDevicePath (
     } else {\r
       NonHIDevicePathNodeCount++;\r
     }\r
+\r
     //\r
     // Next device path node\r
     //\r
-    DevicePath = (EFI_DEVICE_PATH_PROTOCOL *) NextDevicePathNode (DevicePath);\r
+    DevicePath = (EFI_DEVICE_PATH_PROTOCOL *)NextDevicePathNode (DevicePath);\r
   }\r
 \r
   return HIDevicePath;\r
@@ -1259,18 +1444,18 @@ GetHIDevicePath (
   @return EFI_SUCCESS         Always returns success.\r
 **/\r
 EFI_STATUS\r
-EFIAPI\r
 GetDeviceConsistMappingInfo (\r
-  IN DEVICE_CONSIST_MAPPING_INFO    *MappingItem,\r
-  IN EFI_DEVICE_PATH_PROTOCOL       *DevicePath\r
+  IN DEVICE_CONSIST_MAPPING_INFO  *MappingItem,\r
+  IN EFI_DEVICE_PATH_PROTOCOL     *DevicePath\r
   )\r
 {\r
-  SerialDecodeFucntion      SerialFun;\r
+  EFI_STATUS                Status;\r
+  SERIAL_DECODE_FUNCTION    SerialFun;\r
   UINTN                     Index;\r
   EFI_DEVICE_PATH_PROTOCOL  *OriginalDevicePath;\r
 \r
-  ASSERT(DevicePath != NULL);\r
-  ASSERT(MappingItem != NULL);\r
+  ASSERT (DevicePath != NULL);\r
+  ASSERT (MappingItem != NULL);\r
 \r
   SetMem (&MappingItem->Csd, sizeof (POOL_PRINT), 0);\r
   OriginalDevicePath = DevicePath;\r
@@ -1281,21 +1466,25 @@ GetDeviceConsistMappingInfo (
     // initialize with generic function in case nothing is found\r
     //\r
     for (SerialFun = DevPathSerialDefault, Index = 0; DevPathConsistMappingTable[Index].SerialFun != NULL; Index += 1) {\r
-\r
-      if (DevicePathType (DevicePath) == DevPathConsistMappingTable[Index].Type &&\r
-          DevicePathSubType (DevicePath) == DevPathConsistMappingTable[Index].SubType\r
-         ) {\r
+      if ((DevicePathType (DevicePath) == DevPathConsistMappingTable[Index].Type) &&\r
+          (DevicePathSubType (DevicePath) == DevPathConsistMappingTable[Index].SubType)\r
+          )\r
+      {\r
         SerialFun = DevPathConsistMappingTable[Index].SerialFun;\r
         break;\r
       }\r
     }\r
 \r
-    SerialFun (DevicePath, MappingItem, OriginalDevicePath);\r
+    Status = SerialFun (DevicePath, MappingItem, OriginalDevicePath);\r
+    if (EFI_ERROR (Status)) {\r
+      SHELL_FREE_NON_NULL (MappingItem->Csd.Str);\r
+      return Status;\r
+    }\r
 \r
     //\r
     // Next device path node\r
     //\r
-    DevicePath = (EFI_DEVICE_PATH_PROTOCOL *) NextDevicePathNode (DevicePath);\r
+    DevicePath = (EFI_DEVICE_PATH_PROTOCOL *)NextDevicePathNode (DevicePath);\r
   }\r
 \r
   return EFI_SUCCESS;\r
@@ -1311,35 +1500,37 @@ GetDeviceConsistMappingInfo (
 EFI_STATUS\r
 EFIAPI\r
 ShellCommandConsistMappingInitialize (\r
-  OUT EFI_DEVICE_PATH_PROTOCOL           ***Table\r
+  OUT EFI_DEVICE_PATH_PROTOCOL  ***Table\r
   )\r
 {\r
-  EFI_HANDLE                *HandleBuffer;\r
-  UINTN                     HandleNum;\r
-  UINTN                     HandleLoop;\r
-  EFI_DEVICE_PATH_PROTOCOL  **TempTable;\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL  *HIDevicePath;\r
-  UINTN                     Index;\r
-  EFI_STATUS                Status;\r
-\r
-  HandleBuffer              = NULL;\r
+  EFI_HANDLE                       *HandleBuffer;\r
+  UINTN                            HandleNum;\r
+  UINTN                            HandleLoop;\r
+  EFI_DEVICE_PATH_PROTOCOL         **TempTable;\r
+  EFI_DEVICE_PATH_PROTOCOL         *DevicePath;\r
+  EFI_DEVICE_PATH_PROTOCOL         *HIDevicePath;\r
+  EFI_BLOCK_IO_PROTOCOL            *BlockIo;\r
+  EFI_SIMPLE_FILE_SYSTEM_PROTOCOL  *SimpleFileSystem;\r
+  UINTN                            Index;\r
+  EFI_STATUS                       Status;\r
+\r
+  HandleBuffer = NULL;\r
 \r
   Status = gBS->LocateHandleBuffer (\r
-              AllHandles,\r
-              NULL,\r
-              NULL,\r
-              &HandleNum,\r
-              &HandleBuffer\r
-             );\r
-  ASSERT_EFI_ERROR(Status);\r
-\r
-  TempTable     = AllocateZeroPool ((HandleNum + 1) * sizeof (EFI_DEVICE_PATH_PROTOCOL *));\r
+                  ByProtocol,\r
+                  &gEfiDevicePathProtocolGuid,\r
+                  NULL,\r
+                  &HandleNum,\r
+                  &HandleBuffer\r
+                  );\r
+  ASSERT_EFI_ERROR (Status);\r
+\r
+  TempTable = AllocateZeroPool ((HandleNum + 1) * sizeof (EFI_DEVICE_PATH_PROTOCOL *));\r
   if (TempTable == NULL) {\r
     return EFI_OUT_OF_RESOURCES;\r
   }\r
 \r
-  for (HandleLoop = 0 ; HandleLoop < HandleNum ; HandleLoop++) {\r
+  for (HandleLoop = 0; HandleLoop < HandleNum; HandleLoop++) {\r
     DevicePath = DevicePathFromHandle (HandleBuffer[HandleLoop]);\r
     if (DevicePath == NULL) {\r
       continue;\r
@@ -1350,6 +1541,23 @@ ShellCommandConsistMappingInitialize (
       continue;\r
     }\r
 \r
+    Status = gBS->HandleProtocol (\r
+                    HandleBuffer[HandleLoop],\r
+                    &gEfiBlockIoProtocolGuid,\r
+                    (VOID **)&BlockIo\r
+                    );\r
+    if (EFI_ERROR (Status)) {\r
+      Status = gBS->HandleProtocol (\r
+                      HandleBuffer[HandleLoop],\r
+                      &gEfiSimpleFileSystemProtocolGuid,\r
+                      (VOID **)&SimpleFileSystem\r
+                      );\r
+      if (EFI_ERROR (Status)) {\r
+        FreePool (HIDevicePath);\r
+        continue;\r
+      }\r
+    }\r
+\r
     for (Index = 0; TempTable[Index] != NULL; Index++) {\r
       if (DevicePathCompare (&TempTable[Index], &HIDevicePath) == 0) {\r
         FreePool (HIDevicePath);\r
@@ -1362,8 +1570,10 @@ ShellCommandConsistMappingInitialize (
     }\r
   }\r
 \r
-  for (Index = 0; TempTable[Index] != NULL; Index++);\r
-  PerformQuickSort(TempTable, Index, sizeof(EFI_DEVICE_PATH_PROTOCOL*), DevicePathCompare);\r
+  for (Index = 0; TempTable[Index] != NULL; Index++) {\r
+  }\r
+\r
+  PerformQuickSort (TempTable, Index, sizeof (EFI_DEVICE_PATH_PROTOCOL *), DevicePathCompare);\r
   *Table = TempTable;\r
 \r
   if (HandleBuffer != NULL) {\r
@@ -1385,12 +1595,12 @@ ShellCommandConsistMappingInitialize (
 EFI_STATUS\r
 EFIAPI\r
 ShellCommandConsistMappingUnInitialize (\r
-  EFI_DEVICE_PATH_PROTOCOL **Table\r
+  EFI_DEVICE_PATH_PROTOCOL  **Table\r
   )\r
 {\r
-  UINTN Index;\r
+  UINTN  Index;\r
 \r
-  ASSERT(Table  != NULL);\r
+  ASSERT (Table  != NULL);\r
 \r
   for (Index = 0; Table[Index] != NULL; Index++) {\r
     FreePool (Table[Index]);\r
@@ -1416,18 +1626,18 @@ ShellCommandConsistMappingUnInitialize (
 CHAR16 *\r
 EFIAPI\r
 ShellCommandConsistMappingGenMappingName (\r
-  IN EFI_DEVICE_PATH_PROTOCOL    *DevicePath,\r
-  IN EFI_DEVICE_PATH_PROTOCOL    **Table\r
+  IN EFI_DEVICE_PATH_PROTOCOL  *DevicePath,\r
+  IN EFI_DEVICE_PATH_PROTOCOL  **Table\r
   )\r
 {\r
-  POOL_PRINT                  Str;\r
-  DEVICE_CONSIST_MAPPING_INFO MappingInfo;\r
-  EFI_DEVICE_PATH_PROTOCOL    *HIDevicePath;\r
-  UINTN                       Index;\r
-  UINTN                       NewSize;\r
+  EFI_STATUS                   Status;\r
+  POOL_PRINT                   Str;\r
+  DEVICE_CONSIST_MAPPING_INFO  MappingInfo;\r
+  EFI_DEVICE_PATH_PROTOCOL     *HIDevicePath;\r
+  UINTN                        Index;\r
 \r
-  ASSERT(DevicePath         != NULL);\r
-  ASSERT(Table  != NULL);\r
+  ASSERT (DevicePath         != NULL);\r
+  ASSERT (Table  != NULL);\r
 \r
   HIDevicePath = GetHIDevicePath (DevicePath);\r
   if (HIDevicePath == NULL) {\r
@@ -1449,7 +1659,10 @@ ShellCommandConsistMappingGenMappingName (
   MappingInfo.Mtd     = MTDTypeUnknown;\r
   MappingInfo.Digital = FALSE;\r
 \r
-  GetDeviceConsistMappingInfo (&MappingInfo, DevicePath);\r
+  Status = GetDeviceConsistMappingInfo (&MappingInfo, DevicePath);\r
+  if (EFI_ERROR (Status)) {\r
+    return NULL;\r
+  }\r
 \r
   SetMem (&Str, sizeof (Str), 0);\r
   for (Index = 0; mMTDName[Index].MTDType != MTDTypeEnd; Index++) {\r
@@ -1459,25 +1672,27 @@ ShellCommandConsistMappingGenMappingName (
   }\r
 \r
   if (mMTDName[Index].MTDType != MTDTypeEnd) {\r
-    CatPrint (&Str, L"%s", mMTDName[Index].Name);\r
+    Status = CatPrint (&Str, L"%s", mMTDName[Index].Name);\r
+  }\r
+\r
+  if (!EFI_ERROR (Status)) {\r
+    Status = CatPrint (&Str, L"%d", (UINTN)MappingInfo.Hi);\r
   }\r
 \r
-  CatPrint (&Str, L"%d", (UINTN) MappingInfo.Hi);\r
-  if (MappingInfo.Csd.Str != NULL) {\r
-    CatPrint (&Str, L"%s", MappingInfo.Csd.Str);\r
+  if (!EFI_ERROR (Status) && (MappingInfo.Csd.Str != NULL)) {\r
+    Status = CatPrint (&Str, L"%s", MappingInfo.Csd.Str);\r
     FreePool (MappingInfo.Csd.Str);\r
   }\r
 \r
-  if (Str.Str != NULL) {\r
-    CatPrint (&Str, L":");\r
+  if (!EFI_ERROR (Status) && (Str.Str != NULL)) {\r
+    Status = CatPrint (&Str, L":");\r
   }\r
 \r
-  NewSize           = (Str.Len + 1) * sizeof (CHAR16);\r
-  Str.Str           = ReallocatePool (Str.Len, NewSize, Str.Str);\r
-  if (Str.Str == NULL) {\r
-    return (NULL);\r
+  if (EFI_ERROR (Status)) {\r
+    SHELL_FREE_NON_NULL (Str.Str);\r
+    return NULL;\r
   }\r
-  Str.Str[Str.Len]  = CHAR_NULL;\r
+\r
   return Str.Str;\r
 }\r
 \r
@@ -1491,20 +1706,20 @@ ShellCommandConsistMappingGenMappingName (
 SHELL_MAP_LIST *\r
 EFIAPI\r
 ShellCommandFindMapItem (\r
-  IN CONST CHAR16 *MapKey\r
+  IN CONST CHAR16  *MapKey\r
   )\r
 {\r
-  SHELL_MAP_LIST *MapListItem;\r
+  SHELL_MAP_LIST  *MapListItem;\r
 \r
-  for ( MapListItem = (SHELL_MAP_LIST *)GetFirstNode(&gShellMapList.Link)\r
-      ; !IsNull(&gShellMapList.Link, &MapListItem->Link)\r
-      ; MapListItem = (SHELL_MAP_LIST *)GetNextNode(&gShellMapList.Link, &MapListItem->Link)\r
-     ){\r
-    if (gUnicodeCollation->StriColl(gUnicodeCollation,MapListItem->MapName,(CHAR16*)MapKey) == 0) {\r
+  for ( MapListItem = (SHELL_MAP_LIST *)GetFirstNode (&gShellMapList.Link)\r
+        ; !IsNull (&gShellMapList.Link, &MapListItem->Link)\r
+        ; MapListItem = (SHELL_MAP_LIST *)GetNextNode (&gShellMapList.Link, &MapListItem->Link)\r
+        )\r
+  {\r
+    if (gUnicodeCollation->StriColl (gUnicodeCollation, MapListItem->MapName, (CHAR16 *)MapKey) == 0) {\r
       return (MapListItem);\r
     }\r
   }\r
+\r
   return (NULL);\r
 }\r
-\r
-\r