]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c
ShellPkg: Standardized HP Copyright Message String
[mirror_edk2.git] / ShellPkg / Library / UefiHandleParsingLib / UefiHandleParsingLib.c
index 0cd35b4fd07b7fa30d517b843c6777084bc025e6..b375e06fd38163c65a2d19013050cc863ed51d60 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Provides interface to advanced shell functionality for parsing both handle and protocol database.\r
 \r
-  Copyright (c) 2013 Hewlett-Packard Development Company, L.P.\r
+  (C) Copyright 2013-2014 Hewlett-Packard Development Company, L.P.<BR>\r
   Copyright (c) 2010 - 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
 #include "UefiHandleParsingLib.h"\r
 #include "IndustryStandard/Acpi10.h"\r
 \r
-EFI_HANDLE mHandleParsingHiiHandle;\r
+EFI_HANDLE        mHandleParsingHiiHandle = NULL;\r
 HANDLE_INDEX_LIST mHandleList = {{{NULL,NULL},0,0},0};\r
-\r
+GUID_INFO_BLOCK   *GuidList;\r
+UINTN             GuidListCount;\r
 /**\r
   Function to translate the EFI_MEMORY_TYPE into a string.\r
 \r
@@ -56,6 +57,33 @@ ConvertMemoryType (
   return (RetVal);\r
 }\r
 \r
+/**\r
+  Function to translate the EFI_GRAPHICS_PIXEL_FORMAT into a string.\r
+\r
+  @param[in] Fmt     The format type.\r
+\r
+  @retval               A string representation of the type allocated from BS Pool.\r
+**/\r
+CHAR16*\r
+EFIAPI\r
+ConvertPixelFormat (\r
+  IN CONST EFI_GRAPHICS_PIXEL_FORMAT Fmt\r
+  )\r
+{\r
+  CHAR16 *RetVal;\r
+  RetVal = NULL;\r
+\r
+  switch (Fmt) {\r
+  case PixelRedGreenBlueReserved8BitPerColor: StrnCatGrow(&RetVal, NULL, L"PixelRedGreenBlueReserved8BitPerColor", 0);  break;\r
+  case PixelBlueGreenRedReserved8BitPerColor: StrnCatGrow(&RetVal, NULL, L"PixelBlueGreenRedReserved8BitPerColor", 0);  break;\r
+  case PixelBitMask:                          StrnCatGrow(&RetVal, NULL, L"PixelBitMask", 0);                           break;\r
+  case PixelBltOnly:                          StrnCatGrow(&RetVal, NULL, L"PixelBltOnly", 0);                           break;\r
+  case PixelFormatMax:                        StrnCatGrow(&RetVal, NULL, L"PixelFormatMax", 0);                         break;\r
+  default: ASSERT(FALSE);\r
+  }\r
+  return (RetVal);\r
+}\r
+\r
 /**\r
   Constructor for the library.\r
 \r
@@ -71,14 +99,28 @@ HandleParsingLibConstructor (
   IN EFI_SYSTEM_TABLE  *SystemTable\r
   )\r
 {\r
-  mHandleParsingHiiHandle = HiiAddPackages (&gHandleParsingHiiGuid, gImageHandle, UefiHandleParsingLibStrings, NULL);\r
-  if (mHandleParsingHiiHandle == NULL) {\r
-    return (EFI_DEVICE_ERROR);\r
-  }\r
+  GuidListCount = 0;\r
+  GuidList      = NULL;\r
 \r
+  //\r
+  // Do nothing with mHandleParsingHiiHandle.  Initialize HII as needed.\r
+  //\r
   return (EFI_SUCCESS);\r
 }\r
 \r
+/** \r
+  Initialization function for HII packages.\r
\r
+**/\r
+VOID\r
+HandleParsingHiiInit (VOID)\r
+{\r
+  if (mHandleParsingHiiHandle == NULL) {\r
+    mHandleParsingHiiHandle = HiiAddPackages (&gHandleParsingHiiGuid, gImageHandle, UefiHandleParsingLibStrings, NULL);\r
+    ASSERT (mHandleParsingHiiHandle != NULL);\r
+  }\r
+}\r
+\r
 /**\r
   Destructor for the library.  free any resources.\r
 \r
@@ -94,6 +136,13 @@ HandleParsingLibDestructor (
   IN EFI_SYSTEM_TABLE  *SystemTable\r
   )\r
 {\r
+  UINTN                 LoopCount;\r
+\r
+  for (LoopCount = 0; GuidList != NULL && LoopCount < GuidListCount; LoopCount++) {\r
+    SHELL_FREE_NON_NULL(GuidList[LoopCount].GuidId);\r
+  }\r
+\r
+  SHELL_FREE_NON_NULL(GuidList);\r
   if (mHandleParsingHiiHandle != NULL) {\r
     HiiRemovePackages(mHandleParsingHiiHandle);\r
   }\r
@@ -128,6 +177,8 @@ LoadedImageProtocolDumpInformation(
     return (CatSPrint(NULL, L"LoadedImage"));\r
   }\r
 \r
+  HandleParsingHiiInit();\r
+\r
   Temp = HiiGetString(mHandleParsingHiiHandle, STRING_TOKEN(STR_LI_DUMP_MAIN), NULL);\r
   RetVal = AllocateZeroPool (PcdGet16 (PcdShellPrintBufferSize));\r
   if (Temp == NULL || RetVal == NULL) {\r
@@ -145,6 +196,12 @@ LoadedImageProtocolDumpInformation(
                 EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
                );\r
 \r
+  if (EFI_ERROR (Status)) {\r
+    SHELL_FREE_NON_NULL (Temp);\r
+    SHELL_FREE_NON_NULL (RetVal);\r
+    return NULL;\r
+  }\r
+\r
   DataType = ConvertMemoryType(LoadedImage->ImageDataType);\r
   CodeType = ConvertMemoryType(LoadedImage->ImageCodeType);\r
 \r
@@ -171,6 +228,83 @@ LoadedImageProtocolDumpInformation(
   return RetVal;\r
 }\r
 \r
+/**\r
+  Function to dump information about GOP.\r
+\r
+  This will allocate the return buffer from boot services pool.\r
+\r
+  @param[in] TheHandle      The handle that has LoadedImage installed.\r
+  @param[in] Verbose        TRUE for additional information, FALSE otherwise.\r
+\r
+  @retval A poitner to a string containing the information.\r
+**/\r
+CHAR16*\r
+EFIAPI\r
+GraphicsOutputProtocolDumpInformation(\r
+  IN CONST EFI_HANDLE TheHandle,\r
+  IN CONST BOOLEAN    Verbose\r
+  )\r
+{\r
+  EFI_GRAPHICS_OUTPUT_PROTOCOL      *GraphicsOutput;\r
+  EFI_STATUS                        Status;\r
+  CHAR16                            *RetVal;\r
+  CHAR16                            *Temp;\r
+  CHAR16                            *Fmt;\r
+\r
+  if (!Verbose) {\r
+    return (CatSPrint(NULL, L"GraphicsOutput"));\r
+  }\r
+\r
+  HandleParsingHiiInit();\r
+\r
+  Temp = HiiGetString(mHandleParsingHiiHandle, STRING_TOKEN(STR_GOP_DUMP_MAIN), NULL);\r
+  RetVal = AllocateZeroPool (PcdGet16 (PcdShellPrintBufferSize));\r
+  if (Temp == NULL || RetVal == NULL) {\r
+    SHELL_FREE_NON_NULL(Temp);\r
+    SHELL_FREE_NON_NULL(RetVal);\r
+    return NULL;\r
+  }\r
+\r
+  Status = gBS->OpenProtocol (\r
+                TheHandle,\r
+                &gEfiGraphicsOutputProtocolGuid,\r
+                (VOID**)&GraphicsOutput,\r
+                gImageHandle,\r
+                NULL,\r
+                EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
+               );\r
+\r
+  if (EFI_ERROR (Status)) {\r
+    SHELL_FREE_NON_NULL (Temp);\r
+    SHELL_FREE_NON_NULL (RetVal);\r
+    return NULL;\r
+  }\r
+\r
+  Fmt = ConvertPixelFormat(GraphicsOutput->Mode->Info->PixelFormat);\r
+\r
+  RetVal = CatSPrint(RetVal,\r
+                      Temp,\r
+                      GraphicsOutput->Mode->MaxMode,\r
+                      GraphicsOutput->Mode->Mode,\r
+                      GraphicsOutput->Mode->FrameBufferBase,\r
+                      (UINT64)GraphicsOutput->Mode->FrameBufferSize,\r
+                      (UINT64)GraphicsOutput->Mode->SizeOfInfo,\r
+                      GraphicsOutput->Mode->Info->Version,\r
+                      GraphicsOutput->Mode->Info->HorizontalResolution,\r
+                      GraphicsOutput->Mode->Info->VerticalResolution,\r
+                      Fmt,\r
+                      GraphicsOutput->Mode->Info->PixelsPerScanLine,\r
+                      GraphicsOutput->Mode->Info->PixelFormat!=PixelBitMask?0:GraphicsOutput->Mode->Info->PixelInformation.RedMask,\r
+                      GraphicsOutput->Mode->Info->PixelFormat!=PixelBitMask?0:GraphicsOutput->Mode->Info->PixelInformation.GreenMask,\r
+                      GraphicsOutput->Mode->Info->PixelFormat!=PixelBitMask?0:GraphicsOutput->Mode->Info->PixelInformation.BlueMask\r
+                      );\r
+  \r
+  SHELL_FREE_NON_NULL(Temp);\r
+  SHELL_FREE_NON_NULL(Fmt);\r
+\r
+  return RetVal;\r
+}\r
+\r
 /**\r
   Function to dump information about PciRootBridgeIo.\r
 \r
@@ -203,6 +337,8 @@ PciRootBridgeIoDumpInformation(
     return (CatSPrint(NULL, L"PciRootBridgeIo"));\r
   }\r
 \r
+  HandleParsingHiiInit();\r
+\r
   Status = gBS->HandleProtocol(\r
     TheHandle,\r
     &gEfiPciRootBridgeIoProtocolGuid,\r
@@ -213,14 +349,19 @@ PciRootBridgeIoDumpInformation(
   }\r
 \r
   Temp = HiiGetString(mHandleParsingHiiHandle, STRING_TOKEN(STR_PCIRB_DUMP_PH), NULL);\r
-  ASSERT (Temp != NULL);\r
+  if (Temp == NULL) {\r
+    return NULL;\r
+  }\r
   Temp2 = CatSPrint(L"\r\n", Temp, PciRootBridgeIo->ParentHandle);\r
   FreePool(Temp);\r
   RetVal = Temp2;\r
   Temp2 = NULL;\r
  \r
   Temp = HiiGetString(mHandleParsingHiiHandle, STRING_TOKEN(STR_PCIRB_DUMP_SEG), NULL);\r
-  ASSERT (Temp != NULL);\r
+  if (Temp == NULL) {\r
+    SHELL_FREE_NON_NULL(RetVal);\r
+    return NULL;\r
+  }\r
   Temp2 = CatSPrint(RetVal, Temp, PciRootBridgeIo->SegmentNumber);\r
   FreePool(Temp);\r
   FreePool(RetVal);\r
@@ -232,7 +373,10 @@ PciRootBridgeIoDumpInformation(
   Status = PciRootBridgeIo->GetAttributes (PciRootBridgeIo, &Supports, &Attributes);\r
   if (!EFI_ERROR(Status)) {\r
     Temp = HiiGetString(mHandleParsingHiiHandle, STRING_TOKEN(STR_PCIRB_DUMP_ATT), NULL);\r
-    ASSERT (Temp != NULL);    \r
+    if (Temp == NULL) {\r
+      SHELL_FREE_NON_NULL(RetVal);\r
+      return NULL;\r
+    }    \r
     Temp2 = CatSPrint(RetVal, Temp, Attributes);\r
     FreePool(Temp);\r
     FreePool(RetVal);\r
@@ -240,7 +384,10 @@ PciRootBridgeIoDumpInformation(
     Temp2 = NULL;\r
     \r
     Temp = HiiGetString(mHandleParsingHiiHandle, STRING_TOKEN(STR_PCIRB_DUMP_SUPPORTS), NULL);\r
-    ASSERT (Temp != NULL);\r
+    if (Temp == NULL) {\r
+      SHELL_FREE_NON_NULL(RetVal);\r
+      return NULL;\r
+    }\r
     Temp2 = CatSPrint(RetVal, Temp, Supports);\r
     FreePool(Temp);\r
     FreePool(RetVal);\r
@@ -252,7 +399,10 @@ PciRootBridgeIoDumpInformation(
   Status = PciRootBridgeIo->Configuration (PciRootBridgeIo, (VOID **) &Configuration);\r
   if (!EFI_ERROR(Status) && Configuration != NULL) {\r
     Temp = HiiGetString(mHandleParsingHiiHandle, STRING_TOKEN(STR_PCIRB_DUMP_TITLE), NULL);\r
-    ASSERT (Temp != NULL);\r
+    if (Temp == NULL) {\r
+      SHELL_FREE_NON_NULL(RetVal);\r
+      return NULL;\r
+    }\r
     Temp2 = CatSPrint(RetVal, Temp, Supports);\r
     FreePool(Temp);\r
     FreePool(RetVal);\r
@@ -326,6 +476,8 @@ TxtOutProtocolDumpInformation(
     return (NULL);\r
   }\r
 \r
+  HandleParsingHiiInit();\r
+\r
   RetVal  = NULL;\r
   Size    = 0;\r
 \r
@@ -443,6 +595,205 @@ DevicePathProtocolDumpInformation(
   return (Temp);\r
 }\r
 \r
+/**\r
+  Function to dump information about EfiAdapterInformation Protocol.\r
+\r
+  @param[in] TheHandle      The handle that has the protocol installed.\r
+  @param[in] Verbose        TRUE for additional information, FALSE otherwise.\r
+\r
+  @retval A pointer to a string containing the information.\r
+**/\r
+CHAR16*\r
+EFIAPI\r
+AdapterInformationDumpInformation (\r
+  IN CONST EFI_HANDLE TheHandle,\r
+  IN CONST BOOLEAN    Verbose\r
+  )\r
+{\r
+  EFI_STATUS                        Status;\r
+  EFI_ADAPTER_INFORMATION_PROTOCOL  *EfiAdptrInfoProtocol;\r
+  UINTN                             InfoTypesBufferCount;\r
+  UINTN                             GuidIndex;\r
+  EFI_GUID                          *InfoTypesBuffer;\r
+  CHAR16                            *GuidStr;\r
+  CHAR16                            *TempStr;\r
+  CHAR16                            *RetVal;\r
+  VOID                              *InformationBlock;\r
+  UINTN                             InformationBlockSize;\r
+   \r
+  if (!Verbose) {\r
+    return (CatSPrint(NULL, L"AdapterInfo"));\r
+  }\r
+\r
+  InfoTypesBuffer   = NULL;\r
+  InformationBlock  = NULL;\r
+  \r
+  //\r
+  // Allocate print buffer to store data\r
+  //\r
+  RetVal = AllocateZeroPool (PcdGet16(PcdShellPrintBufferSize));\r
+  if (RetVal == NULL) {\r
+    return NULL;\r
+  }\r
+\r
+  Status = gBS->OpenProtocol (\r
+                  (EFI_HANDLE) (TheHandle),\r
+                  &gEfiAdapterInformationProtocolGuid,\r
+                  (VOID **) &EfiAdptrInfoProtocol,\r
+                  NULL,\r
+                  NULL,\r
+                  EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
+                  );\r
+\r
+  if (EFI_ERROR (Status)) {\r
+    SHELL_FREE_NON_NULL (RetVal);\r
+    return NULL;\r
+  }\r
+\r
+  //\r
+  // Get a list of supported information types for this instance of the protocol.\r
+  //\r
+  Status = EfiAdptrInfoProtocol->GetSupportedTypes (\r
+                                   EfiAdptrInfoProtocol,\r
+                                   &InfoTypesBuffer, \r
+                                   &InfoTypesBufferCount\r
+                                   );\r
+  if (EFI_ERROR (Status)) {\r
+    TempStr = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_GET_SUPP_TYPES_FAILED), NULL);\r
+    if (TempStr != NULL) {\r
+      RetVal = CatSPrint (RetVal, TempStr, Status);\r
+    } else {\r
+      goto ERROR_EXIT;\r
+    }  \r
+  } else {\r
+    TempStr = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_SUPP_TYPE_HEADER), NULL);\r
+    if (TempStr == NULL) {\r
+      goto ERROR_EXIT;\r
+    }\r
+    RetVal = CatSPrint (RetVal, TempStr);\r
+    SHELL_FREE_NON_NULL (TempStr);\r
+\r
+    for (GuidIndex = 0; GuidIndex < InfoTypesBufferCount; GuidIndex++) {\r
+      TempStr = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_GUID_NUMBER), NULL);\r
+      if (TempStr == NULL) {\r
+        goto ERROR_EXIT;\r
+      }\r
+      RetVal = CatSPrint (RetVal, TempStr, (GuidIndex + 1), InfoTypesBuffer[GuidIndex]);\r
+      SHELL_FREE_NON_NULL (TempStr);\r
+\r
+      TempStr = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_GUID_STRING), NULL);\r
+      if (TempStr == NULL) {\r
+        goto ERROR_EXIT;\r
+      }\r
+\r
+      if (CompareGuid (&InfoTypesBuffer[GuidIndex], &gEfiAdapterInfoMediaStateGuid)) {\r
+        RetVal = CatSPrint (RetVal, TempStr, L"gEfiAdapterInfoMediaStateGuid");\r
+      } else if (CompareGuid (&InfoTypesBuffer[GuidIndex], &gEfiAdapterInfoNetworkBootGuid)) {\r
+        RetVal = CatSPrint (RetVal, TempStr, L"gEfiAdapterInfoNetworkBootGuid");\r
+      } else if (CompareGuid (&InfoTypesBuffer[GuidIndex], &gEfiAdapterInfoSanMacAddressGuid)) {\r
+        RetVal = CatSPrint (RetVal, TempStr, L"gEfiAdapterInfoSanMacAddressGuid");\r
+      } else {\r
+\r
+        GuidStr = GetStringNameFromGuid (&InfoTypesBuffer[GuidIndex], NULL);\r
+       \r
+        if (GuidStr != NULL) {\r
+          if (StrCmp(GuidStr, L"UnknownDevice") == 0) {\r
+            RetVal = CatSPrint (RetVal, TempStr, L"UnknownInfoType");\r
+            \r
+            SHELL_FREE_NON_NULL (TempStr);\r
+            SHELL_FREE_NON_NULL(GuidStr);\r
+            //\r
+            // So that we never have to pass this UnknownInfoType to the parsing function "GetInformation" service of AIP\r
+            //\r
+            continue; \r
+          } else {\r
+            RetVal = CatSPrint (RetVal, TempStr, GuidStr);\r
+            SHELL_FREE_NON_NULL(GuidStr);\r
+          }\r
+        }\r
+      }\r
+      \r
+      SHELL_FREE_NON_NULL (TempStr);\r
+\r
+      Status = EfiAdptrInfoProtocol->GetInformation (\r
+                                       EfiAdptrInfoProtocol,\r
+                                       &InfoTypesBuffer[GuidIndex],\r
+                                       &InformationBlock,\r
+                                       &InformationBlockSize\r
+                                       );\r
+\r
+      if (EFI_ERROR (Status)) {\r
+        TempStr = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_GETINFO_FAILED), NULL);\r
+        if (TempStr == NULL) {\r
+          goto ERROR_EXIT;\r
+        }\r
+        RetVal = CatSPrint (RetVal, TempStr, Status);\r
+      } else {\r
+        if (CompareGuid (&InfoTypesBuffer[GuidIndex], &gEfiAdapterInfoMediaStateGuid)) {\r
+          TempStr = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_MEDIA_STATE), NULL);\r
+          if (TempStr == NULL) {\r
+            goto ERROR_EXIT;\r
+          }\r
+          RetVal = CatSPrint (\r
+                     RetVal,\r
+                     TempStr,\r
+                     ((EFI_ADAPTER_INFO_MEDIA_STATE *)InformationBlock)->MediaState,\r
+                     ((EFI_ADAPTER_INFO_MEDIA_STATE *)InformationBlock)->MediaState\r
+                     );\r
+        } else if (CompareGuid (&InfoTypesBuffer[GuidIndex], &gEfiAdapterInfoNetworkBootGuid)) {\r
+          TempStr = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_NETWORK_BOOT_INFO), NULL);\r
+          if (TempStr == NULL) {\r
+            goto ERROR_EXIT;\r
+          }\r
+          RetVal = CatSPrint (\r
+                     RetVal,\r
+                     TempStr,\r
+                     ((EFI_ADAPTER_INFO_NETWORK_BOOT *)InformationBlock)->iScsiIpv4BootCapablity,\r
+                     ((EFI_ADAPTER_INFO_NETWORK_BOOT *)InformationBlock)->iScsiIpv6BootCapablity, \r
+                     ((EFI_ADAPTER_INFO_NETWORK_BOOT *)InformationBlock)->FCoeBootCapablity, \r
+                     ((EFI_ADAPTER_INFO_NETWORK_BOOT *)InformationBlock)->OffloadCapability, \r
+                     ((EFI_ADAPTER_INFO_NETWORK_BOOT *)InformationBlock)->iScsiMpioCapability, \r
+                     ((EFI_ADAPTER_INFO_NETWORK_BOOT *)InformationBlock)->iScsiIpv4Boot, \r
+                     ((EFI_ADAPTER_INFO_NETWORK_BOOT *)InformationBlock)->iScsiIpv6Boot,\r
+                     ((EFI_ADAPTER_INFO_NETWORK_BOOT *)InformationBlock)->FCoeBoot\r
+                     );\r
+        } else if (CompareGuid (&InfoTypesBuffer[GuidIndex], &gEfiAdapterInfoSanMacAddressGuid) == TRUE) { \r
+          TempStr = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_SAN_MAC_ADDRESS_INFO), NULL);\r
+          if (TempStr == NULL) {\r
+            goto ERROR_EXIT;\r
+          }\r
+          RetVal = CatSPrint (\r
+                     RetVal,\r
+                     TempStr,\r
+                     ((EFI_ADAPTER_INFO_SAN_MAC_ADDRESS *)InformationBlock)->SanMacAddress.Addr[0], \r
+                     ((EFI_ADAPTER_INFO_SAN_MAC_ADDRESS *)InformationBlock)->SanMacAddress.Addr[1], \r
+                     ((EFI_ADAPTER_INFO_SAN_MAC_ADDRESS *)InformationBlock)->SanMacAddress.Addr[2],\r
+                     ((EFI_ADAPTER_INFO_SAN_MAC_ADDRESS *)InformationBlock)->SanMacAddress.Addr[3], \r
+                     ((EFI_ADAPTER_INFO_SAN_MAC_ADDRESS *)InformationBlock)->SanMacAddress.Addr[4], \r
+                     ((EFI_ADAPTER_INFO_SAN_MAC_ADDRESS *)InformationBlock)->SanMacAddress.Addr[5]\r
+                     );   \r
+        } else {\r
+          TempStr = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_UNKNOWN_INFO_TYPE), NULL);\r
+          if (TempStr == NULL) {\r
+            goto ERROR_EXIT;\r
+          }\r
+          RetVal = CatSPrint (RetVal, TempStr, &InfoTypesBuffer[GuidIndex]);\r
+        }\r
+      }\r
+      SHELL_FREE_NON_NULL (TempStr);\r
+      SHELL_FREE_NON_NULL (InformationBlock);\r
+    }\r
+  }\r
+\r
+  SHELL_FREE_NON_NULL (InfoTypesBuffer);\r
+  return RetVal;\r
+\r
+ERROR_EXIT:\r
+  SHELL_FREE_NON_NULL (RetVal);\r
+  SHELL_FREE_NON_NULL (InfoTypesBuffer);\r
+  SHELL_FREE_NON_NULL (InformationBlock);\r
+  return NULL;\r
+}\r
 //\r
 // Put the information on the NT32 protocol GUIDs here so we are not dependant on the Nt32Pkg\r
 //\r
@@ -464,6 +815,21 @@ STATIC CONST EFI_GUID WinNtThunkProtocolGuid = LOCAL_EFI_WIN_NT_THUNK_PROTOCOL_G
 STATIC CONST EFI_GUID WinNtIoProtocolGuid    = LOCAL_EFI_WIN_NT_BUS_DRIVER_IO_PROTOCOL_GUID;\r
 STATIC CONST EFI_GUID WinNtSerialPortGuid    = LOCAL_EFI_WIN_NT_SERIAL_PORT_GUID;\r
 \r
+//\r
+// Deprecated protocols we dont want to link from IntelFrameworkModulePkg\r
+//\r
+#define LOCAL_EFI_ISA_IO_PROTOCOL_GUID \\r
+  { \\r
+  0x7ee2bd44, 0x3da0, 0x11d4, { 0x9a, 0x38, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } \\r
+  } \r
+#define LOCAL_EFI_ISA_ACPI_PROTOCOL_GUID \\r
+  { \\r
+  0x64a892dc, 0x5561, 0x4536, { 0x92, 0xc7, 0x79, 0x9b, 0xfc, 0x18, 0x33, 0x55 } \\r
+  }\r
+STATIC CONST EFI_GUID EfiIsaIoProtocolGuid = LOCAL_EFI_ISA_IO_PROTOCOL_GUID;\r
+STATIC CONST EFI_GUID EfiIsaAcpiProtocolGuid = LOCAL_EFI_ISA_ACPI_PROTOCOL_GUID;\r
+\r
+\r
 STATIC CONST GUID_INFO_BLOCK mGuidStringListNT[] = {\r
   {STRING_TOKEN(STR_WINNT_THUNK),           (EFI_GUID*)&WinNtThunkProtocolGuid,               NULL},\r
   {STRING_TOKEN(STR_WINNT_DRIVER_IO),       (EFI_GUID*)&WinNtIoProtocolGuid,                  NULL},\r
@@ -497,7 +863,7 @@ STATIC CONST GUID_INFO_BLOCK mGuidStringList[] = {
   {STRING_TOKEN(STR_SIM_POINTER),           &gEfiSimplePointerProtocolGuid,                   NULL},\r
   {STRING_TOKEN(STR_ABS_POINTER),           &gEfiAbsolutePointerProtocolGuid,                 NULL},\r
   {STRING_TOKEN(STR_SERIAL_IO),             &gEfiSerialIoProtocolGuid,                        NULL},\r
-  {STRING_TOKEN(STR_GRAPHICS_OUTPUT),       &gEfiGraphicsOutputProtocolGuid,                  NULL},\r
+  {STRING_TOKEN(STR_GRAPHICS_OUTPUT),       &gEfiGraphicsOutputProtocolGuid,                  GraphicsOutputProtocolDumpInformation},\r
   {STRING_TOKEN(STR_EDID_DISCOVERED),       &gEfiEdidDiscoveredProtocolGuid,                  NULL},\r
   {STRING_TOKEN(STR_EDID_ACTIVE),           &gEfiEdidActiveProtocolGuid,                      NULL},\r
   {STRING_TOKEN(STR_EDID_OVERRIDE),         &gEfiEdidOverrideProtocolGuid,                    NULL},\r
@@ -543,8 +909,6 @@ STATIC CONST GUID_INFO_BLOCK mGuidStringList[] = {
   {STRING_TOKEN(STR_IPV4_SB),               &gEfiIp4ServiceBindingProtocolGuid,               NULL},\r
   {STRING_TOKEN(STR_IPV4),                  &gEfiIp4ProtocolGuid,                             NULL},\r
   {STRING_TOKEN(STR_IPV4_CFG),              &gEfiIp4ConfigProtocolGuid,                       NULL},\r
-  {STRING_TOKEN(STR_SHELL_PARAMETERS),      &gEfiShellParametersProtocolGuid,                 NULL},\r
-  {STRING_TOKEN(STR_SHELL),                 &gEfiShellProtocolGuid,                           NULL},\r
   {STRING_TOKEN(STR_UDPV4_SB),              &gEfiUdp4ServiceBindingProtocolGuid,              NULL},\r
   {STRING_TOKEN(STR_UDPV4),                 &gEfiUdp4ProtocolGuid,                            NULL},\r
   {STRING_TOKEN(STR_MTFTPV4_SB),            &gEfiMtftp4ServiceBindingProtocolGuid,            NULL},\r
@@ -578,6 +942,12 @@ STATIC CONST GUID_INFO_BLOCK mGuidStringList[] = {
   {STRING_TOKEN(STR_DRIVER_CONFIG),         &gEfiDriverConfigurationProtocolGuid,             NULL},\r
   {STRING_TOKEN(STR_DRIVER_CONFIG2),        &gEfiDriverConfiguration2ProtocolGuid,            NULL},\r
 \r
+//\r
+// these are using local (non-global) definitions to reduce package dependancy.\r
+//\r
+  {STRING_TOKEN(STR_ISA_IO),                (EFI_GUID*)&EfiIsaIoProtocolGuid,                 NULL},\r
+  {STRING_TOKEN(STR_ISA_ACPI),              (EFI_GUID*)&EfiIsaAcpiProtocolGuid,               NULL},\r
+\r
 //\r
 // the ones under this are GUID identified structs, not protocols\r
 //\r
@@ -634,12 +1004,24 @@ STATIC CONST GUID_INFO_BLOCK mGuidStringList[] = {
 // UEFI 2.4\r
 //\r
   {STRING_TOKEN(STR_DISK_IO2),              &gEfiDiskIo2ProtocolGuid,                         NULL},\r
+  {STRING_TOKEN(STR_ADAPTER_INFO),          &gEfiAdapterInformationProtocolGuid,              AdapterInformationDumpInformation},\r
 \r
 //\r
 // PI Spec ones\r
 //\r
   {STRING_TOKEN(STR_IDE_CONT_INIT),         &gEfiIdeControllerInitProtocolGuid,               NULL},\r
 \r
+//\r
+// UEFI Shell Spec 2.0\r
+//\r
+  {STRING_TOKEN(STR_SHELL_PARAMETERS),      &gEfiShellParametersProtocolGuid,                 NULL},\r
+  {STRING_TOKEN(STR_SHELL),                 &gEfiShellProtocolGuid,                           NULL},\r
+\r
+//\r
+// UEFI Shell Spec 2.1\r
+//\r
+  {STRING_TOKEN(STR_SHELL_DYNAMIC),         &gEfiShellDynamicCommandProtocolGuid,             NULL},\r
+\r
 //\r
 // terminator\r
 //\r
@@ -662,9 +1044,16 @@ InternalShellGetNodeFromGuid(
   )\r
 {\r
   CONST GUID_INFO_BLOCK *ListWalker;\r
+  UINTN                 LoopCount;\r
 \r
   ASSERT(Guid != NULL);\r
 \r
+  for (LoopCount = 0, ListWalker = GuidList; GuidList != NULL && LoopCount < GuidListCount; LoopCount++, ListWalker++) {\r
+    if (CompareGuid(ListWalker->GuidId, Guid)) {\r
+      return (ListWalker);\r
+    }\r
+  }\r
+\r
   if (PcdGetBool(PcdShellIncludeNtGuids)) {\r
     for (ListWalker = mGuidStringListNT ; ListWalker != NULL && ListWalker->GuidId != NULL ; ListWalker++) {\r
       if (CompareGuid(ListWalker->GuidId, Guid)) {\r
@@ -677,7 +1066,90 @@ InternalShellGetNodeFromGuid(
       return (ListWalker);\r
     }\r
   }\r
-  return (ListWalker);\r
+  return (NULL);\r
+}\r
+\r
+/**\r
+Function to add a new GUID/Name mapping.\r
+\r
+@param[in] Guid       The Guid\r
+@param[in] NameID     The STRING id of the HII string to use\r
+@param[in] DumpFunc   The pointer to the dump function\r
+\r
+\r
+@retval EFI_SUCCESS           The operation was sucessful\r
+@retval EFI_OUT_OF_RESOURCES  A memory allocation failed\r
+@retval EFI_INVALID_PARAMETER Guid NameId was invalid\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+InsertNewGuidNameMapping(\r
+  IN CONST EFI_GUID           *Guid,\r
+  IN CONST EFI_STRING_ID      NameID,\r
+  IN CONST DUMP_PROTOCOL_INFO DumpFunc OPTIONAL\r
+  )\r
+{\r
+  ASSERT(Guid   != NULL);\r
+  ASSERT(NameID != 0);\r
+\r
+  GuidList = ReallocatePool(GuidListCount * sizeof(GUID_INFO_BLOCK), GuidListCount+1 * sizeof(GUID_INFO_BLOCK), GuidList);\r
+  if (GuidList == NULL) {\r
+    GuidListCount = 0;\r
+    return (EFI_OUT_OF_RESOURCES);\r
+  }\r
+  GuidListCount++;\r
+\r
+  GuidList[GuidListCount - 1].GuidId   = AllocateCopyPool(sizeof(EFI_GUID), Guid);\r
+  GuidList[GuidListCount - 1].StringId = NameID;\r
+  GuidList[GuidListCount - 1].DumpInfo = DumpFunc;\r
+\r
+  if (GuidList[GuidListCount - 1].GuidId == NULL) {\r
+    return (EFI_OUT_OF_RESOURCES);\r
+  }\r
+\r
+  return (EFI_SUCCESS);\r
+}\r
+\r
+/**\r
+  Function to add a new GUID/Name mapping.\r
+\r
+  This cannot overwrite an existing mapping.\r
+\r
+  @param[in] Guid       The Guid\r
+  @param[in] TheName    The Guid's name\r
+  @param[in] Lang       RFC4646 language code list or NULL\r
+\r
+  @retval EFI_SUCCESS           The operation was sucessful\r
+  @retval EFI_ACCESS_DENIED     There was a duplicate\r
+  @retval EFI_OUT_OF_RESOURCES  A memory allocation failed\r
+  @retval EFI_INVALID_PARAMETER Guid or TheName was NULL\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+AddNewGuidNameMapping(\r
+  IN CONST EFI_GUID *Guid,\r
+  IN CONST CHAR16   *TheName,\r
+  IN CONST CHAR8    *Lang OPTIONAL\r
+  )\r
+{\r
+  EFI_STRING_ID         NameID;\r
+\r
+  HandleParsingHiiInit();\r
+\r
+  if (Guid == NULL || TheName == NULL){\r
+    return (EFI_INVALID_PARAMETER);\r
+  }\r
+\r
+  if ((InternalShellGetNodeFromGuid(Guid)) != NULL) {\r
+    return (EFI_ACCESS_DENIED);\r
+  }\r
+\r
+  NameID = HiiSetString(mHandleParsingHiiHandle, 0, (CHAR16*)TheName, Lang);\r
+  if (NameID == 0) {\r
+    return (EFI_OUT_OF_RESOURCES);\r
+  }\r
+\r
+  return (InsertNewGuidNameMapping(Guid, NameID, NULL));\r
 }\r
 \r
 /**\r
@@ -700,8 +1172,10 @@ GetStringNameFromGuid(
 {\r
   CONST GUID_INFO_BLOCK *Id;\r
 \r
+  HandleParsingHiiInit();\r
+\r
   Id = InternalShellGetNodeFromGuid(Guid);\r
-  return (HiiGetString(mHandleParsingHiiHandle, Id->StringId, Lang));\r
+  return (HiiGetString(mHandleParsingHiiHandle, Id==NULL?STRING_TOKEN(STR_UNKNOWN_DEVICE):Id->StringId, Lang));\r
 }\r
 \r
 /**\r
@@ -747,9 +1221,11 @@ GetProtocolInformationDump(
 /**\r
   Function to get the Guid for a protocol or struct based on it's string name.\r
 \r
+  do not modify the returned Guid.\r
+\r
   @param[in] Name           The pointer to the string name.\r
   @param[in] Lang           The pointer to the language code.\r
-  @param[in] Guid           The pointer to the Guid.\r
+  @param[out] Guid          The pointer to the Guid.\r
 \r
   @retval EFI_SUCCESS       The operation was sucessful.\r
 **/\r
@@ -758,11 +1234,14 @@ EFIAPI
 GetGuidFromStringName(\r
   IN CONST CHAR16 *Name,\r
   IN CONST CHAR8  *Lang OPTIONAL,\r
-  IN EFI_GUID     **Guid\r
+  OUT EFI_GUID    **Guid\r
   )\r
 {\r
   CONST GUID_INFO_BLOCK  *ListWalker;\r
   CHAR16                     *String;\r
+  UINTN                  LoopCount;\r
+\r
+  HandleParsingHiiInit();\r
 \r
   ASSERT(Guid != NULL);\r
   if (Guid == NULL) {\r
@@ -792,6 +1271,18 @@ GetGuidFromStringName(
       return (EFI_SUCCESS);\r
     }\r
   }\r
+\r
+  for (LoopCount = 0, ListWalker = GuidList; GuidList != NULL && LoopCount < GuidListCount; LoopCount++, ListWalker++) {\r
+    String = HiiGetString(mHandleParsingHiiHandle, ListWalker->StringId, Lang);\r
+    if (Name != NULL && String != NULL && StringNoCaseCompare (&Name, &String) == 0) {\r
+      *Guid = ListWalker->GuidId;\r
+    }\r
+    SHELL_FREE_NON_NULL(String);\r
+    if (*Guid != NULL) {\r
+      return (EFI_SUCCESS);\r
+    }\r
+  }\r
+\r
   return (EFI_NOT_FOUND);\r
 }\r
 \r
@@ -1160,23 +1651,23 @@ ParseHandleDatabaseByRelationshipWithType (
       // Set the bit describing what this handle has\r
       //\r
       if        (CompareGuid (ProtocolGuidArray[ProtocolIndex], &gEfiLoadedImageProtocolGuid)         ) {\r
-        (*HandleType)[HandleIndex] |= HR_IMAGE_HANDLE;\r
+        (*HandleType)[HandleIndex] |= (UINTN)HR_IMAGE_HANDLE;\r
       } else if (CompareGuid (ProtocolGuidArray[ProtocolIndex], &gEfiDriverBindingProtocolGuid)       ) {\r
-        (*HandleType)[HandleIndex] |= HR_DRIVER_BINDING_HANDLE;\r
+        (*HandleType)[HandleIndex] |= (UINTN)HR_DRIVER_BINDING_HANDLE;\r
       } else if (CompareGuid (ProtocolGuidArray[ProtocolIndex], &gEfiDriverConfiguration2ProtocolGuid)) {\r
-        (*HandleType)[HandleIndex] |= HR_DRIVER_CONFIGURATION_HANDLE;\r
+        (*HandleType)[HandleIndex] |= (UINTN)HR_DRIVER_CONFIGURATION_HANDLE;\r
       } else if (CompareGuid (ProtocolGuidArray[ProtocolIndex], &gEfiDriverConfigurationProtocolGuid) ) {\r
-        (*HandleType)[HandleIndex] |= HR_DRIVER_CONFIGURATION_HANDLE;\r
+        (*HandleType)[HandleIndex] |= (UINTN)HR_DRIVER_CONFIGURATION_HANDLE;\r
       } else if (CompareGuid (ProtocolGuidArray[ProtocolIndex], &gEfiDriverDiagnostics2ProtocolGuid)  ) {\r
-        (*HandleType)[HandleIndex] |= HR_DRIVER_DIAGNOSTICS_HANDLE;\r
+        (*HandleType)[HandleIndex] |= (UINTN)HR_DRIVER_DIAGNOSTICS_HANDLE;\r
       } else if (CompareGuid (ProtocolGuidArray[ProtocolIndex], &gEfiDriverDiagnosticsProtocolGuid)   ) {\r
-        (*HandleType)[HandleIndex] |= HR_DRIVER_DIAGNOSTICS_HANDLE;\r
+        (*HandleType)[HandleIndex] |= (UINTN)HR_DRIVER_DIAGNOSTICS_HANDLE;\r
       } else if (CompareGuid (ProtocolGuidArray[ProtocolIndex], &gEfiComponentName2ProtocolGuid)      ) {\r
-        (*HandleType)[HandleIndex] |= HR_COMPONENT_NAME_HANDLE;\r
+        (*HandleType)[HandleIndex] |= (UINTN)HR_COMPONENT_NAME_HANDLE;\r
       } else if (CompareGuid (ProtocolGuidArray[ProtocolIndex], &gEfiComponentNameProtocolGuid)       ) {\r
-        (*HandleType)[HandleIndex] |= HR_COMPONENT_NAME_HANDLE;\r
+        (*HandleType)[HandleIndex] |= (UINTN)HR_COMPONENT_NAME_HANDLE;\r
       } else if (CompareGuid (ProtocolGuidArray[ProtocolIndex], &gEfiDevicePathProtocolGuid)          ) {\r
-        (*HandleType)[HandleIndex] |= HR_DEVICE_HANDLE;\r
+        (*HandleType)[HandleIndex] |= (UINTN)HR_DEVICE_HANDLE;\r
       } else {\r
         DEBUG_CODE_BEGIN();\r
         ASSERT((*HandleType)[HandleIndex] == (*HandleType)[HandleIndex]);\r
@@ -1202,19 +1693,19 @@ ParseHandleDatabaseByRelationshipWithType (
         //\r
         for (OpenInfoIndex = 0; OpenInfoIndex < OpenInfoCount; OpenInfoIndex++) {\r
           if (OpenInfo[OpenInfoIndex].AgentHandle == DriverBindingHandle && (OpenInfo[OpenInfoIndex].Attributes & EFI_OPEN_PROTOCOL_BY_DRIVER) != 0) {\r
-            (*HandleType)[HandleIndex] |= (HR_DEVICE_HANDLE | HR_CONTROLLER_HANDLE);\r
+            (*HandleType)[HandleIndex] |= (UINTN)(HR_DEVICE_HANDLE | HR_CONTROLLER_HANDLE);\r
             if (DriverBindingHandleIndex != -1) {\r
-              (*HandleType)[DriverBindingHandleIndex] |= HR_DEVICE_DRIVER;\r
+              (*HandleType)[DriverBindingHandleIndex] |= (UINTN)HR_DEVICE_DRIVER;\r
             }\r
           }\r
           if (OpenInfo[OpenInfoIndex].AgentHandle == DriverBindingHandle && (OpenInfo[OpenInfoIndex].Attributes & EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER) != 0) {\r
-            (*HandleType)[HandleIndex] |= (HR_DEVICE_HANDLE | HR_CONTROLLER_HANDLE);\r
+            (*HandleType)[HandleIndex] |= (UINTN)(HR_DEVICE_HANDLE | HR_CONTROLLER_HANDLE);\r
             if (DriverBindingHandleIndex != -1) {\r
-              (*HandleType)[DriverBindingHandleIndex] |= (HR_BUS_DRIVER | HR_DEVICE_DRIVER);\r
+              (*HandleType)[DriverBindingHandleIndex] |= (UINTN)(HR_BUS_DRIVER | HR_DEVICE_DRIVER);\r
             }\r
             for (ChildIndex = 0; ChildIndex < *HandleCount; ChildIndex++) {\r
               if (OpenInfo[OpenInfoIndex].ControllerHandle == (*HandleBuffer)[ChildIndex]) {\r
-                (*HandleType)[ChildIndex] |= (HR_DEVICE_HANDLE | HR_CHILD_HANDLE);\r
+                (*HandleType)[ChildIndex] |= (UINTN)(HR_DEVICE_HANDLE | HR_CHILD_HANDLE);\r
               }\r
             }\r
           }\r
@@ -1222,22 +1713,22 @@ ParseHandleDatabaseByRelationshipWithType (
       }\r
       if (DriverBindingHandle == NULL && ControllerHandle != NULL) {\r
         if (ControllerHandle == (*HandleBuffer)[HandleIndex]) {\r
-          (*HandleType)[HandleIndex] |= (HR_DEVICE_HANDLE | HR_CONTROLLER_HANDLE);\r
+          (*HandleType)[HandleIndex] |= (UINTN)(HR_DEVICE_HANDLE | HR_CONTROLLER_HANDLE);\r
           for (OpenInfoIndex = 0; OpenInfoIndex < OpenInfoCount; OpenInfoIndex++) {\r
             if ((OpenInfo[OpenInfoIndex].Attributes & EFI_OPEN_PROTOCOL_BY_DRIVER) != 0) {\r
               for (ChildIndex = 0; ChildIndex < *HandleCount; ChildIndex++) {\r
                 if (OpenInfo[OpenInfoIndex].AgentHandle == (*HandleBuffer)[ChildIndex]) {\r
-                  (*HandleType)[ChildIndex] |= HR_DEVICE_DRIVER;\r
+                  (*HandleType)[ChildIndex] |= (UINTN)HR_DEVICE_DRIVER;\r
                 }\r
               }\r
             }\r
             if ((OpenInfo[OpenInfoIndex].Attributes & EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER) != 0) {\r
               for (ChildIndex = 0; ChildIndex < *HandleCount; ChildIndex++) {\r
                 if (OpenInfo[OpenInfoIndex].AgentHandle == (*HandleBuffer)[ChildIndex]) {\r
-                  (*HandleType)[ChildIndex] |= (HR_BUS_DRIVER | HR_DEVICE_DRIVER);\r
+                  (*HandleType)[ChildIndex] |= (UINTN)(HR_BUS_DRIVER | HR_DEVICE_DRIVER);\r
                 }\r
                 if (OpenInfo[OpenInfoIndex].ControllerHandle == (*HandleBuffer)[ChildIndex]) {\r
-                  (*HandleType)[ChildIndex] |= (HR_DEVICE_HANDLE | HR_CHILD_HANDLE);\r
+                  (*HandleType)[ChildIndex] |= (UINTN)(HR_DEVICE_HANDLE | HR_CHILD_HANDLE);\r
                 }\r
               }\r
             }\r
@@ -1246,7 +1737,7 @@ ParseHandleDatabaseByRelationshipWithType (
           for (OpenInfoIndex = 0; OpenInfoIndex < OpenInfoCount; OpenInfoIndex++) {\r
             if ((OpenInfo[OpenInfoIndex].Attributes & EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER) != 0) {\r
               if (OpenInfo[OpenInfoIndex].ControllerHandle == ControllerHandle) {\r
-                (*HandleType)[HandleIndex] |= (HR_DEVICE_HANDLE | HR_PARENT_HANDLE);\r
+                (*HandleType)[HandleIndex] |= (UINTN)(HR_DEVICE_HANDLE | HR_PARENT_HANDLE);\r
               }\r
             }\r
           }\r
@@ -1254,12 +1745,12 @@ ParseHandleDatabaseByRelationshipWithType (
       }\r
       if (DriverBindingHandle != NULL && ControllerHandle != NULL) {\r
         if (ControllerHandle == (*HandleBuffer)[HandleIndex]) {\r
-          (*HandleType)[HandleIndex] |= (HR_DEVICE_HANDLE | HR_CONTROLLER_HANDLE);\r
+          (*HandleType)[HandleIndex] |= (UINTN)(HR_DEVICE_HANDLE | HR_CONTROLLER_HANDLE);\r
           for (OpenInfoIndex = 0; OpenInfoIndex < OpenInfoCount; OpenInfoIndex++) {\r
             if ((OpenInfo[OpenInfoIndex].Attributes & EFI_OPEN_PROTOCOL_BY_DRIVER) != 0) {\r
               if (OpenInfo[OpenInfoIndex].AgentHandle == DriverBindingHandle) {\r
                 if (DriverBindingHandleIndex != -1) {\r
-                  (*HandleType)[DriverBindingHandleIndex] |= HR_DEVICE_DRIVER;\r
+                  (*HandleType)[DriverBindingHandleIndex] |= (UINTN)HR_DEVICE_DRIVER;\r
                 }\r
               }\r
             }\r
@@ -1267,14 +1758,14 @@ ParseHandleDatabaseByRelationshipWithType (
               if (OpenInfo[OpenInfoIndex].AgentHandle == DriverBindingHandle) {\r
                 for (ChildIndex = 0; ChildIndex < *HandleCount; ChildIndex++) {\r
                   if (OpenInfo[OpenInfoIndex].ControllerHandle == (*HandleBuffer)[ChildIndex]) {\r
-                    (*HandleType)[ChildIndex] |= (HR_DEVICE_HANDLE | HR_CHILD_HANDLE);\r
+                    (*HandleType)[ChildIndex] |= (UINTN)(HR_DEVICE_HANDLE | HR_CHILD_HANDLE);\r
                   }\r
                 }\r
               }\r
 \r
               for (ChildIndex = 0; ChildIndex < *HandleCount; ChildIndex++) {\r
                 if (OpenInfo[OpenInfoIndex].AgentHandle == (*HandleBuffer)[ChildIndex]) {\r
-                  (*HandleType)[ChildIndex] |= (HR_BUS_DRIVER | HR_DEVICE_DRIVER);\r
+                  (*HandleType)[ChildIndex] |= (UINTN)(HR_BUS_DRIVER | HR_DEVICE_DRIVER);\r
                 }\r
               }\r
             }\r
@@ -1283,7 +1774,7 @@ ParseHandleDatabaseByRelationshipWithType (
           for (OpenInfoIndex = 0; OpenInfoIndex < OpenInfoCount; OpenInfoIndex++) {\r
             if ((OpenInfo[OpenInfoIndex].Attributes & EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER) != 0) {\r
               if (OpenInfo[OpenInfoIndex].ControllerHandle == ControllerHandle) {\r
-                (*HandleType)[HandleIndex] |= (HR_DEVICE_HANDLE | HR_PARENT_HANDLE);\r
+                (*HandleType)[HandleIndex] |= (UINTN)(HR_DEVICE_HANDLE | HR_PARENT_HANDLE);\r
               }\r
             }\r
           }\r