Index: ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c
===================================================================
--- ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c	(revision 16222)
+++ ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c	(working copy)
@@ -1,7 +1,7 @@
 /** @file
   Provides interface to advanced shell functionality for parsing both handle and protocol database.
 
-  Copyright (c) 2013 - 2014, Hewlett-Packard Development Company, L.P.
+  Copyright (c) 2013 - 2014, Hewlett-Packard Development Company, L.P.<BR>
   Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
   This program and the accompanying materials
   are licensed and made available under the terms and conditions of the BSD License
@@ -581,6 +581,167 @@
   return (Temp);
 }
 
+/**
+  Function to dump information about EfiAdapterInformation Protocol.
+
+  @param[in] TheHandle      The handle that has the protocol installed.
+  @param[in] Verbose        TRUE for additional information, FALSE otherwise.
+
+  @retval A pointer to a string containing the information.
+**/
+CHAR16*
+EFIAPI
+AdapterInformationDumpInformation (
+  IN CONST EFI_HANDLE TheHandle,
+  IN CONST BOOLEAN    Verbose
+  )
+{
+  EFI_STATUS                        Status;
+  EFI_ADAPTER_INFORMATION_PROTOCOL  *EfiAdptrInfoProtocol;
+  UINTN                             InfoTypesBufferCount;
+  UINTN                             GuidIndex;
+  EFI_GUID                          *InfoTypesBuffer;
+  CHAR16                            *GuidStr;
+  CHAR16                            *TempStr;
+  CHAR16                            *RetVal;
+  VOID                              *InformationBlock;
+  UINTN                             InformationBlockSize;
+   
+  if (!Verbose) {
+    return (CatSPrint(NULL, L"AdapterInfo"));
+  }
+
+  //
+  // Allocate print buffer to store data
+  //
+  RetVal = AllocateZeroPool (PcdGet16(PcdShellPrintBufferSize));
+  if (RetVal == NULL) {
+    return NULL;
+  }
+
+  Status = gBS->OpenProtocol (
+                  (EFI_HANDLE) (TheHandle),
+                  &gEfiAdapterInformationProtocolGuid,
+                  (VOID **) &EfiAdptrInfoProtocol,
+                  NULL,
+                  NULL,
+                  EFI_OPEN_PROTOCOL_GET_PROTOCOL
+                  );
+
+  if (EFI_ERROR (Status)) {
+    SHELL_FREE_NON_NULL (RetVal);
+    return NULL;
+  }
+
+  //
+  // Get a list of supported information types for this instance of the protocol.
+  //
+  Status = EfiAdptrInfoProtocol->GetSupportedTypes (
+                                   EfiAdptrInfoProtocol,
+                                   &InfoTypesBuffer, 
+                                   &InfoTypesBufferCount
+                                   );
+  if (EFI_ERROR (Status)) {
+    TempStr = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_GET_SUPP_TYPES_FAILED), NULL);
+    RetVal = CatSPrint (RetVal, TempStr, Status);
+  } else {
+    TempStr = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_SUPP_TYPE_HEADER), NULL);
+    RetVal = CatSPrint (RetVal, TempStr);
+    SHELL_FREE_NON_NULL (TempStr);
+
+    for (GuidIndex = 0; GuidIndex < InfoTypesBufferCount; GuidIndex++) {
+      TempStr = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_GUID_NUMBER), NULL);
+      RetVal = CatSPrint (RetVal, TempStr, (GuidIndex + 1), InfoTypesBuffer[GuidIndex]);
+      SHELL_FREE_NON_NULL (TempStr);
+
+      TempStr = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_GUID_STRING), NULL);
+
+      if (CompareGuid (&InfoTypesBuffer[GuidIndex], &gEfiAdapterInfoMediaStateGuid)) {
+        RetVal = CatSPrint (RetVal, TempStr, L"gEfiAdapterInfoMediaStateGuid");
+      } else if (CompareGuid (&InfoTypesBuffer[GuidIndex], &gEfiAdapterInfoNetworkBootGuid)) {
+        RetVal = CatSPrint (RetVal, TempStr, L"gEfiAdapterInfoNetworkBootGuid");
+      } else if (CompareGuid (&InfoTypesBuffer[GuidIndex], &gEfiAdapterInfoSanMacAddressGuid)) {
+        RetVal = CatSPrint (RetVal, TempStr, L"gEfiAdapterInfoSanMacAddressGuid");
+      } else {
+
+        GuidStr = GetStringNameFromGuid (&InfoTypesBuffer[GuidIndex], NULL);
+       
+        if (GuidStr != NULL) {
+          if (StrCmp(GuidStr, L"UnknownDevice") == 0) {
+            RetVal = CatSPrint (RetVal, TempStr, L"UnknownInfoType");
+            
+            SHELL_FREE_NON_NULL (TempStr);
+            SHELL_FREE_NON_NULL(GuidStr);
+            //
+            // So that we never have to pass this UnknownInfoType to the parsing function "GetInformation" service of AIP
+            //
+            continue; 
+          } else {
+            RetVal = CatSPrint (RetVal, TempStr, GuidStr);
+            SHELL_FREE_NON_NULL(GuidStr);
+          }
+        }
+      }
+      
+      SHELL_FREE_NON_NULL (TempStr);
+
+      Status = EfiAdptrInfoProtocol->GetInformation (
+                                       EfiAdptrInfoProtocol,
+                                       &InfoTypesBuffer[GuidIndex],
+                                       &InformationBlock,
+                                       &InformationBlockSize
+                                       );
+
+      if (EFI_ERROR (Status)) {
+        TempStr = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_GETINFO_FAILED), NULL);
+        RetVal = CatSPrint (RetVal, TempStr, Status);
+      } else {
+        if (CompareGuid (&InfoTypesBuffer[GuidIndex], &gEfiAdapterInfoMediaStateGuid)) {
+          TempStr = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_MEDIA_STATE), NULL);
+          RetVal = CatSPrint (
+                     RetVal,
+                     TempStr,
+                     ((EFI_ADAPTER_INFO_MEDIA_STATE *)InformationBlock)->MediaState,
+                     ((EFI_ADAPTER_INFO_MEDIA_STATE *)InformationBlock)->MediaState
+                     );
+        } else if (CompareGuid (&InfoTypesBuffer[GuidIndex], &gEfiAdapterInfoNetworkBootGuid)) {
+          TempStr = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_NETWORK_BOOT_INFO), NULL);
+          RetVal = CatSPrint (
+                     RetVal,
+                     TempStr,
+                     ((EFI_ADAPTER_INFO_NETWORK_BOOT *)InformationBlock)->iScsiIpv4BootCapablity,
+                     ((EFI_ADAPTER_INFO_NETWORK_BOOT *)InformationBlock)->iScsiIpv6BootCapablity, 
+                     ((EFI_ADAPTER_INFO_NETWORK_BOOT *)InformationBlock)->FCoeBootCapablity, 
+                     ((EFI_ADAPTER_INFO_NETWORK_BOOT *)InformationBlock)->OffloadCapability, 
+                     ((EFI_ADAPTER_INFO_NETWORK_BOOT *)InformationBlock)->iScsiMpioCapability, 
+                     ((EFI_ADAPTER_INFO_NETWORK_BOOT *)InformationBlock)->iScsiIpv4Boot, 
+                     ((EFI_ADAPTER_INFO_NETWORK_BOOT *)InformationBlock)->iScsiIpv6Boot,
+                     ((EFI_ADAPTER_INFO_NETWORK_BOOT *)InformationBlock)->FCoeBoot
+                     );
+        } else if (CompareGuid (&InfoTypesBuffer[GuidIndex], &gEfiAdapterInfoSanMacAddressGuid) == TRUE) { 
+          TempStr = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_SAN_MAC_ADDRESS_INFO), NULL);
+          RetVal = CatSPrint (
+                     RetVal,
+                     TempStr,
+                     ((EFI_ADAPTER_INFO_SAN_MAC_ADDRESS *)InformationBlock)->SanMacAddress.Addr[0], 
+                     ((EFI_ADAPTER_INFO_SAN_MAC_ADDRESS *)InformationBlock)->SanMacAddress.Addr[1], 
+                     ((EFI_ADAPTER_INFO_SAN_MAC_ADDRESS *)InformationBlock)->SanMacAddress.Addr[2],
+                     ((EFI_ADAPTER_INFO_SAN_MAC_ADDRESS *)InformationBlock)->SanMacAddress.Addr[3], 
+                     ((EFI_ADAPTER_INFO_SAN_MAC_ADDRESS *)InformationBlock)->SanMacAddress.Addr[4], 
+                     ((EFI_ADAPTER_INFO_SAN_MAC_ADDRESS *)InformationBlock)->SanMacAddress.Addr[5]
+                     );   
+        } else {
+          TempStr = HiiGetString (mHandleParsingHiiHandle, STRING_TOKEN(STR_UNKNOWN_INFO_TYPE), NULL);
+          RetVal = CatSPrint (RetVal, TempStr, &InfoTypesBuffer[GuidIndex]);
+        }
+      }
+      SHELL_FREE_NON_NULL (TempStr);
+      SHELL_FREE_NON_NULL (InformationBlock);
+    }
+  }
+
+  return RetVal;
+}
 //
 // Put the information on the NT32 protocol GUIDs here so we are not dependant on the Nt32Pkg
 //
@@ -713,6 +874,8 @@
   {STRING_TOKEN(STR_GPT_NBR),               &gEfiPartTypeLegacyMbrGuid,                       NULL},
   {STRING_TOKEN(STR_DRIVER_CONFIG),         &gEfiDriverConfigurationProtocolGuid,             NULL},
   {STRING_TOKEN(STR_DRIVER_CONFIG2),        &gEfiDriverConfiguration2ProtocolGuid,            NULL},
+  {STRING_TOKEN(STR_ISA_IO),                &gEfiIsaIoProtocolGuid,                           NULL},
+  {STRING_TOKEN(STR_ISA_ACPI),              &gEfiIsaAcpiProtocolGuid,                         NULL},
 
 //
 // the ones under this are GUID identified structs, not protocols
@@ -770,7 +933,7 @@
 // UEFI 2.4
 //
   {STRING_TOKEN(STR_DISK_IO2),              &gEfiDiskIo2ProtocolGuid,                         NULL},
-  {STRING_TOKEN(STR_ADAPTER_INFO),          &gEfiAdapterInformationProtocolGuid,              NULL},
+  {STRING_TOKEN(STR_ADAPTER_INFO),          &gEfiAdapterInformationProtocolGuid,              AdapterInformationDumpInformation},
 
 //
 // PI Spec ones
Index: ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.h
===================================================================
--- ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.h	(revision 16222)
+++ ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.h	(working copy)
@@ -1,7 +1,7 @@
 /** @file
   Provides interface to advanced shell functionality for parsing both handle and protocol database.
 
-  Copyright (c) 2013 - 2014, Hewlett-Packard Development Company, L.P.
+  Copyright (c) 2013 - 2014, Hewlett-Packard Development Company, L.P.<BR>
   Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.<BR>
   This program and the accompanying materials
   are licensed and made available under the terms and conditions of the BSD License
@@ -135,6 +135,8 @@
 #include <Protocol/DiskIo2.h>
 #include <Protocol/AdapterInformation.h>
 #include <Protocol/EfiShellDynamicCommand.h>
+#include <Protocol/IsaIo.h>
+#include <Protocol/IsaAcpi.h>
 
 #include <Library/HandleParsingLib.h>
 #include <Library/UefiBootServicesTableLib.h>
Index: ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.inf
===================================================================
--- ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.inf	(revision 16222)
+++ ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.inf	(working copy)
@@ -1,6 +1,6 @@
 ##  @file
 #  Provides interface to advanced shell functionality for parsing both handle and protocol database.
-#  Copyright (c) 2013 - 2014, Hewlett-Packard Development Company, L.P.
+#  Copyright (c) 2013 - 2014, Hewlett-Packard Development Company, L.P.<BR>
 #  Copyright (c) 2010 - 2013, Intel Corporation. All rights reserved. <BR>
 #
 #  This program and the accompanying materials
@@ -36,6 +36,7 @@
   MdePkg/MdePkg.dec
   MdeModulePkg/MdeModulePkg.dec
   ShellPkg/ShellPkg.dec
+  IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec
 
 [LibraryClasses]
   UefiBootServicesTableLib
@@ -172,6 +173,8 @@
   gEfiIdeControllerInitProtocolGuid                       ##UNDEFINED
   gEfiDiskIo2ProtocolGuid                                 ##UNDEFINED
   gEfiAdapterInformationProtocolGuid                      ##UNDEFINED
+  gEfiIsaIoProtocolGuid                                   ##UNDEFINED
+  gEfiIsaAcpiProtocolGuid                                 ##UNDEFINED
 
 [Guids]
   gEfiFileInfoGuid                                        ##CONSUMES
@@ -188,6 +191,9 @@
   gEfiPartTypeSystemPartGuid                              ##UNDEFINED
   gEfiPartTypeLegacyMbrGuid                               ##UNDEFINED
   gHandleParsingHiiGuid                                   ##UNDEFINED
+  gEfiAdapterInfoMediaStateGuid                           ##CONSUMES
+  gEfiAdapterInfoNetworkBootGuid                          ##CONSUMES
+  gEfiAdapterInfoSanMacAddressGuid                        ##CONSUMES
 
 [Pcd.common]
   gEfiShellPkgTokenSpaceGuid.PcdShellLibAutoInitialize    ##CONSUMES
Index: ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.uni
===================================================================
--- ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.uni	(revision 16222)
+++ ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.uni	(working copy)
@@ -2,7 +2,7 @@
  
  / /   
- / /   C o p y r i g h t   ( c )   2 0 1 3   -   2 0 1 4   H e w l e t t - P a c k a r d   D e v e l o p m e n t   C o m p a n y ,   L . P . + / /   C o p y r i g h t   ( c )   2 0 1 3   -   2 0 1 4   H e w l e t t - P a c k a r d   D e v e l o p m e n t   C o m p a n y ,   L . P . < B R >   
  / /   C o p y r i g h t   ( c )   2 0 1 0   -   2 0 1 4 ,   I n t e l   C o r p o r a t i o n .   A l l   r i g h t s   r e s e r v e d .   < B R >   
@@ -524,28 +524,40 @@
  
    
- + # s t r i n g   S T R _ G E T _ S U P P _ T Y P E S _ F A I L E D                   # l a n g u a g e   e n - U S   " U n a b l e   t o   g e t   s u p p o r t e d   t y p e s   -   % % H % r % % N \ r \ n "   
- + # s t r i n g   S T R _ S U P P _ T Y P E _ H E A D E R                             # l a n g u a g e   e n - U S   "     S u p p o r t e d   I n f o r m a t i o n   T y p e s :   \ r \ n "   
- + # s t r i n g   S T R _ G U I D _ N U M B E R                                       # l a n g u a g e   e n - U S   "         G u i d [ % % H % d % % N ]   :   % g "   
- + # s t r i n g   S T R _ G U I D _ S T R I N G                                       # l a n g u a g e   e n - U S   "   -   % % B % s % % N \ r \ n "   
- + # s t r i n g   S T R _ G E T I N F O _ F A I L E D                                 # l a n g u a g e   e n - U S   "             U n a b l e   t o   g e t   i n f o r m a t i o n   -   % % H % r % % N \ r \ n "   
- + # s t r i n g   S T R _ M E D I A _ S T A T E                                       # l a n g u a g e   e n - U S   "         M e d i a S t a t e :   % % H 0 x % 0 8 x   -   % r % % N \ r \ n "   
- + # s t r i n g   S T R _ N E T W O R K _ B O O T _ I N F O                           # l a n g u a g e   e n - U S   " "   
- +                                                                                                                     "         i S s c i I p v 4 B o o t C a p a b l i t y   :   % % H % d % % N \ r \ n "   
- +                                                                                                                     "         i S c s i I p v 6 B o o t C a p a b l i t y   :   % % H % d % % N \ r \ n "   
- +                                                                                                                     "         F C o e B o o t C a p a b l i t y             :   % % H % d % % N \ r \ n "   
- +                                                                                                                     "         O f f l o a d C a p a b i l i t y             :   % % H % d % % N \ r \ n "   
+                                                                                                                     "         i S c s i M p i o C a p a b i l i t y         :   % % H % d % % N \ r \ n " + 
+                                                                                                                     "         i S c s i I p v 4 B o o t                     :   % % H % d % % N \ r \ n " + 
+                                                                                                                     "         i S c s i I p v 6 B o o t                     :   % % H % d % % N \ r \ n " + 
+                                                                                                                     "         F C o e B o o t                               :   % % H % d % % N \ r \ n " + 
+ # s t r i n g   S T R _ S A N _ M A C _ A D D R E S S _ I N F O                     # l a n g u a g e   e n - U S   "         S a n M a c A d d r e s s :   % % H % 0 2 x - % 0 2 x - % 0 2 x - % 0 2 x - % 0 2 x - % 0 2 x % % N   \ r \ n " + 
+ # s t r i n g   S T R _ U N K N O W N _ I N F O _ T Y P E                           # l a n g u a g e   e n - U S   "         T h e   ' I n f o r m a t i o n T y p e '   -   % % H % g % % N   c a n ' t   b e   r e c o n g n i z e d \ r \ n " + 
    
  
\ No newline at end of file
