]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ShellPkg/Library/UefiShellDebug1CommandsLib/Pci.c
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / ShellPkg / Library / UefiShellDebug1CommandsLib / Pci.c
index d20093902cb7892293cc5bccaad3d2787c9584b3..7b11f49d0d5c914979f918701ce3ccdcd3f0117b 100644 (file)
@@ -1,15 +1,10 @@
 /** @file\r
   Main file for Pci shell Debug1 function.\r
 \r
-  Copyright (c) 2013 Hewlett-Packard Development Company, L.P.\r
-  Copyright (c) 2005 - 2011, Intel Corporation. All rights reserved.<BR>\r
-  This program and the accompanying materials\r
-  are licensed and made available under the terms and conditions of the BSD License\r
-  which accompanies this distribution.  The full text of the license may be found at\r
-  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 - 2021, Intel Corporation. All rights reserved.<BR>\r
+  (C) Copyright 2013-2015 Hewlett-Packard Development Company, L.P.<BR>\r
+  (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
 \r
 #include <IndustryStandard/Acpi.h>\r
 #include "Pci.h"\r
 \r
-#define PCI_CLASS_STRING_LIMIT  54\r
 //\r
 // Printable strings for Pci class code\r
 //\r
 typedef struct {\r
-  CHAR16  *BaseClass; // Pointer to the PCI base class string\r
-  CHAR16  *SubClass;  // Pointer to the PCI sub class string\r
-  CHAR16  *PIFClass;  // Pointer to the PCI programming interface string\r
+  CHAR16    *BaseClass; // Pointer to the PCI base class string\r
+  CHAR16    *SubClass;  // Pointer to the PCI sub class string\r
+  CHAR16    *PIFClass;  // Pointer to the PCI programming interface string\r
 } PCI_CLASS_STRINGS;\r
 \r
 //\r
@@ -35,53 +29,65 @@ typedef struct {
 // class\r
 //\r
 typedef struct PCI_CLASS_ENTRY_TAG {\r
-  UINT8                       Code;             // Class, subclass or I/F code\r
-  CHAR16                      *DescText;        // Description string\r
-  struct PCI_CLASS_ENTRY_TAG  *LowerLevelClass; // Subclass or I/F if any\r
+  UINT8                         Code;             // Class, subclass or I/F code\r
+  CHAR16                        *DescText;        // Description string\r
+  struct PCI_CLASS_ENTRY_TAG    *LowerLevelClass; // Subclass or I/F if any\r
 } PCI_CLASS_ENTRY;\r
 \r
 //\r
 // Declarations of entries which contain printable strings for class codes\r
 // in PCI configuration space\r
 //\r
-PCI_CLASS_ENTRY PCIBlankEntry[];\r
-PCI_CLASS_ENTRY PCISubClass_00[];\r
-PCI_CLASS_ENTRY PCISubClass_01[];\r
-PCI_CLASS_ENTRY PCISubClass_02[];\r
-PCI_CLASS_ENTRY PCISubClass_03[];\r
-PCI_CLASS_ENTRY PCISubClass_04[];\r
-PCI_CLASS_ENTRY PCISubClass_05[];\r
-PCI_CLASS_ENTRY PCISubClass_06[];\r
-PCI_CLASS_ENTRY PCISubClass_07[];\r
-PCI_CLASS_ENTRY PCISubClass_08[];\r
-PCI_CLASS_ENTRY PCISubClass_09[];\r
-PCI_CLASS_ENTRY PCISubClass_0a[];\r
-PCI_CLASS_ENTRY PCISubClass_0b[];\r
-PCI_CLASS_ENTRY PCISubClass_0c[];\r
-PCI_CLASS_ENTRY PCISubClass_0d[];\r
-PCI_CLASS_ENTRY PCISubClass_0e[];\r
-PCI_CLASS_ENTRY PCISubClass_0f[];\r
-PCI_CLASS_ENTRY PCISubClass_10[];\r
-PCI_CLASS_ENTRY PCISubClass_11[];\r
-PCI_CLASS_ENTRY PCIPIFClass_0101[];\r
-PCI_CLASS_ENTRY PCIPIFClass_0300[];\r
-PCI_CLASS_ENTRY PCIPIFClass_0604[];\r
-PCI_CLASS_ENTRY PCIPIFClass_0700[];\r
-PCI_CLASS_ENTRY PCIPIFClass_0701[];\r
-PCI_CLASS_ENTRY PCIPIFClass_0703[];\r
-PCI_CLASS_ENTRY PCIPIFClass_0800[];\r
-PCI_CLASS_ENTRY PCIPIFClass_0801[];\r
-PCI_CLASS_ENTRY PCIPIFClass_0802[];\r
-PCI_CLASS_ENTRY PCIPIFClass_0803[];\r
-PCI_CLASS_ENTRY PCIPIFClass_0904[];\r
-PCI_CLASS_ENTRY PCIPIFClass_0c00[];\r
-PCI_CLASS_ENTRY PCIPIFClass_0c03[];\r
-PCI_CLASS_ENTRY PCIPIFClass_0e00[];\r
+PCI_CLASS_ENTRY  PCIBlankEntry[];\r
+PCI_CLASS_ENTRY  PCISubClass_00[];\r
+PCI_CLASS_ENTRY  PCISubClass_01[];\r
+PCI_CLASS_ENTRY  PCISubClass_02[];\r
+PCI_CLASS_ENTRY  PCISubClass_03[];\r
+PCI_CLASS_ENTRY  PCISubClass_04[];\r
+PCI_CLASS_ENTRY  PCISubClass_05[];\r
+PCI_CLASS_ENTRY  PCISubClass_06[];\r
+PCI_CLASS_ENTRY  PCISubClass_07[];\r
+PCI_CLASS_ENTRY  PCISubClass_08[];\r
+PCI_CLASS_ENTRY  PCISubClass_09[];\r
+PCI_CLASS_ENTRY  PCISubClass_0a[];\r
+PCI_CLASS_ENTRY  PCISubClass_0b[];\r
+PCI_CLASS_ENTRY  PCISubClass_0c[];\r
+PCI_CLASS_ENTRY  PCISubClass_0d[];\r
+PCI_CLASS_ENTRY  PCISubClass_0e[];\r
+PCI_CLASS_ENTRY  PCISubClass_0f[];\r
+PCI_CLASS_ENTRY  PCISubClass_10[];\r
+PCI_CLASS_ENTRY  PCISubClass_11[];\r
+PCI_CLASS_ENTRY  PCISubClass_12[];\r
+PCI_CLASS_ENTRY  PCISubClass_13[];\r
+PCI_CLASS_ENTRY  PCIPIFClass_0100[];\r
+PCI_CLASS_ENTRY  PCIPIFClass_0101[];\r
+PCI_CLASS_ENTRY  PCIPIFClass_0105[];\r
+PCI_CLASS_ENTRY  PCIPIFClass_0106[];\r
+PCI_CLASS_ENTRY  PCIPIFClass_0107[];\r
+PCI_CLASS_ENTRY  PCIPIFClass_0108[];\r
+PCI_CLASS_ENTRY  PCIPIFClass_0109[];\r
+PCI_CLASS_ENTRY  PCIPIFClass_0300[];\r
+PCI_CLASS_ENTRY  PCIPIFClass_0604[];\r
+PCI_CLASS_ENTRY  PCIPIFClass_0609[];\r
+PCI_CLASS_ENTRY  PCIPIFClass_060b[];\r
+PCI_CLASS_ENTRY  PCIPIFClass_0700[];\r
+PCI_CLASS_ENTRY  PCIPIFClass_0701[];\r
+PCI_CLASS_ENTRY  PCIPIFClass_0703[];\r
+PCI_CLASS_ENTRY  PCIPIFClass_0800[];\r
+PCI_CLASS_ENTRY  PCIPIFClass_0801[];\r
+PCI_CLASS_ENTRY  PCIPIFClass_0802[];\r
+PCI_CLASS_ENTRY  PCIPIFClass_0803[];\r
+PCI_CLASS_ENTRY  PCIPIFClass_0904[];\r
+PCI_CLASS_ENTRY  PCIPIFClass_0c00[];\r
+PCI_CLASS_ENTRY  PCIPIFClass_0c03[];\r
+PCI_CLASS_ENTRY  PCIPIFClass_0c07[];\r
+PCI_CLASS_ENTRY  PCIPIFClass_0d01[];\r
+PCI_CLASS_ENTRY  PCIPIFClass_0e00[];\r
 \r
 //\r
 // Base class strings entries\r
 //\r
-PCI_CLASS_ENTRY gClassStringList[] = {\r
+PCI_CLASS_ENTRY  gClassStringList[] = {\r
   {\r
     0x00,\r
     L"Pre 2.0 device",\r
@@ -172,6 +178,16 @@ PCI_CLASS_ENTRY gClassStringList[] = {
     L"Data Acquisition & Signal Processing Controllers",\r
     PCISubClass_11\r
   },\r
+  {\r
+    0x12,\r
+    L"Processing Accelerators",\r
+    PCISubClass_12\r
+  },\r
+  {\r
+    0x13,\r
+    L"Non-Essential Instrumentation",\r
+    PCISubClass_13\r
+  },\r
   {\r
     0xff,\r
     L"Device does not fit in any defined classes",\r
@@ -180,14 +196,14 @@ PCI_CLASS_ENTRY gClassStringList[] = {
   {\r
     0x00,\r
     NULL,\r
-    /* null string ends the list */NULL\r
+    /* null string ends the list */ NULL\r
   }\r
 };\r
 \r
 //\r
 // Subclass strings entries\r
 //\r
-PCI_CLASS_ENTRY PCIBlankEntry[] = {\r
+PCI_CLASS_ENTRY  PCIBlankEntry[] = {\r
   {\r
     0x00,\r
     L"",\r
@@ -196,11 +212,11 @@ PCI_CLASS_ENTRY PCIBlankEntry[] = {
   {\r
     0x00,\r
     NULL,\r
-    /* null string ends the list */NULL\r
+    /* null string ends the list */ NULL\r
   }\r
 };\r
 \r
-PCI_CLASS_ENTRY PCISubClass_00[] = {\r
+PCI_CLASS_ENTRY  PCISubClass_00[] = {\r
   {\r
     0x00,\r
     L"All devices other than VGA",\r
@@ -214,15 +230,15 @@ PCI_CLASS_ENTRY PCISubClass_00[] = {
   {\r
     0x00,\r
     NULL,\r
-    /* null string ends the list */NULL\r
+    /* null string ends the list */ NULL\r
   }\r
 };\r
 \r
-PCI_CLASS_ENTRY PCISubClass_01[] = {\r
+PCI_CLASS_ENTRY  PCISubClass_01[] = {\r
   {\r
     0x00,\r
-    L"SCSI controller",\r
-    PCIBlankEntry\r
+    L"SCSI",\r
+    PCIPIFClass_0100\r
   },\r
   {\r
     0x01,\r
@@ -244,6 +260,31 @@ PCI_CLASS_ENTRY PCISubClass_01[] = {
     L"RAID controller",\r
     PCIBlankEntry\r
   },\r
+  {\r
+    0x05,\r
+    L"ATA controller with ADMA interface",\r
+    PCIPIFClass_0105\r
+  },\r
+  {\r
+    0x06,\r
+    L"Serial ATA controller",\r
+    PCIPIFClass_0106\r
+  },\r
+  {\r
+    0x07,\r
+    L"Serial Attached SCSI (SAS) controller ",\r
+    PCIPIFClass_0107\r
+  },\r
+  {\r
+    0x08,\r
+    L"Non-volatile memory subsystem",\r
+    PCIPIFClass_0108\r
+  },\r
+  {\r
+    0x09,\r
+    L"Universal Flash Storage (UFS) controller ",\r
+    PCIPIFClass_0109\r
+  },\r
   {\r
     0x80,\r
     L"Other mass storage controller",\r
@@ -252,11 +293,11 @@ PCI_CLASS_ENTRY PCISubClass_01[] = {
   {\r
     0x00,\r
     NULL,\r
-    /* null string ends the list */NULL\r
+    /* null string ends the list */ NULL\r
   }\r
 };\r
 \r
-PCI_CLASS_ENTRY PCISubClass_02[] = {\r
+PCI_CLASS_ENTRY  PCISubClass_02[] = {\r
   {\r
     0x00,\r
     L"Ethernet controller",\r
@@ -282,6 +323,21 @@ PCI_CLASS_ENTRY PCISubClass_02[] = {
     L"ISDN controller",\r
     PCIBlankEntry\r
   },\r
+  {\r
+    0x05,\r
+    L"WorldFip controller",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x06,\r
+    L"PICMG 2.14 Multi Computing",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x07,\r
+    L"InfiniBand controller",\r
+    PCIBlankEntry\r
+  },\r
   {\r
     0x80,\r
     L"Other network controller",\r
@@ -290,11 +346,11 @@ PCI_CLASS_ENTRY PCISubClass_02[] = {
   {\r
     0x00,\r
     NULL,\r
-    /* null string ends the list */NULL\r
+    /* null string ends the list */ NULL\r
   }\r
 };\r
 \r
-PCI_CLASS_ENTRY PCISubClass_03[] = {\r
+PCI_CLASS_ENTRY  PCISubClass_03[] = {\r
   {\r
     0x00,\r
     L"VGA/8514 controller",\r
@@ -318,11 +374,11 @@ PCI_CLASS_ENTRY PCISubClass_03[] = {
   {\r
     0x00,\r
     NULL,\r
-    /* null string ends the list */PCIBlankEntry\r
+    /* null string ends the list */ PCIBlankEntry\r
   }\r
 };\r
 \r
-PCI_CLASS_ENTRY PCISubClass_04[] = {\r
+PCI_CLASS_ENTRY  PCISubClass_04[] = {\r
   {\r
     0x00,\r
     L"Video device",\r
@@ -338,6 +394,11 @@ PCI_CLASS_ENTRY PCISubClass_04[] = {
     L"Computer Telephony device",\r
     PCIBlankEntry\r
   },\r
+  {\r
+    0x03,\r
+    L"Mixed mode device",\r
+    PCIBlankEntry\r
+  },\r
   {\r
     0x80,\r
     L"Other multimedia device",\r
@@ -346,11 +407,11 @@ PCI_CLASS_ENTRY PCISubClass_04[] = {
   {\r
     0x00,\r
     NULL,\r
-    /* null string ends the list */NULL\r
+    /* null string ends the list */ NULL\r
   }\r
 };\r
 \r
-PCI_CLASS_ENTRY PCISubClass_05[] = {\r
+PCI_CLASS_ENTRY  PCISubClass_05[] = {\r
   {\r
     0x00,\r
     L"RAM memory controller",\r
@@ -369,11 +430,11 @@ PCI_CLASS_ENTRY PCISubClass_05[] = {
   {\r
     0x00,\r
     NULL,\r
-    /* null string ends the list */NULL\r
+    /* null string ends the list */ NULL\r
   }\r
 };\r
 \r
-PCI_CLASS_ENTRY PCISubClass_06[] = {\r
+PCI_CLASS_ENTRY  PCISubClass_06[] = {\r
   {\r
     0x00,\r
     L"Host/PCI bridge",\r
@@ -419,6 +480,21 @@ PCI_CLASS_ENTRY PCISubClass_06[] = {
     L"RACEway bridge",\r
     PCIBlankEntry\r
   },\r
+  {\r
+    0x09,\r
+    L"Semi-transparent PCI-to-PCI bridge",\r
+    PCIPIFClass_0609\r
+  },\r
+  {\r
+    0x0A,\r
+    L"InfiniBand-to-PCI host bridge",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x0B,\r
+    L"Advanced Switching to PCI host bridge",\r
+    PCIPIFClass_060b\r
+  },\r
   {\r
     0x80,\r
     L"Other bridge type",\r
@@ -427,11 +503,11 @@ PCI_CLASS_ENTRY PCISubClass_06[] = {
   {\r
     0x00,\r
     NULL,\r
-    /* null string ends the list */NULL\r
+    /* null string ends the list */ NULL\r
   }\r
 };\r
 \r
-PCI_CLASS_ENTRY PCISubClass_07[] = {\r
+PCI_CLASS_ENTRY  PCISubClass_07[] = {\r
   {\r
     0x00,\r
     L"Serial controller",\r
@@ -452,6 +528,16 @@ PCI_CLASS_ENTRY PCISubClass_07[] = {
     L"Modem",\r
     PCIPIFClass_0703\r
   },\r
+  {\r
+    0x04,\r
+    L"GPIB (IEEE 488.1/2) controller",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x05,\r
+    L"Smart Card",\r
+    PCIBlankEntry\r
+  },\r
   {\r
     0x80,\r
     L"Other communication device",\r
@@ -460,11 +546,11 @@ PCI_CLASS_ENTRY PCISubClass_07[] = {
   {\r
     0x00,\r
     NULL,\r
-    /* null string ends the list */NULL\r
+    /* null string ends the list */ NULL\r
   }\r
 };\r
 \r
-PCI_CLASS_ENTRY PCISubClass_08[] = {\r
+PCI_CLASS_ENTRY  PCISubClass_08[] = {\r
   {\r
     0x00,\r
     L"PIC",\r
@@ -490,6 +576,21 @@ PCI_CLASS_ENTRY PCISubClass_08[] = {
     L"Generic PCI Hot-Plug controller",\r
     PCIBlankEntry\r
   },\r
+  {\r
+    0x05,\r
+    L"SD Host controller",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x06,\r
+    L"IOMMU",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x07,\r
+    L"Root Complex Event Collector",\r
+    PCIBlankEntry\r
+  },\r
   {\r
     0x80,\r
     L"Other system peripheral",\r
@@ -498,11 +599,11 @@ PCI_CLASS_ENTRY PCISubClass_08[] = {
   {\r
     0x00,\r
     NULL,\r
-    /* null string ends the list */NULL\r
+    /* null string ends the list */ NULL\r
   }\r
 };\r
 \r
-PCI_CLASS_ENTRY PCISubClass_09[] = {\r
+PCI_CLASS_ENTRY  PCISubClass_09[] = {\r
   {\r
     0x00,\r
     L"Keyboard controller",\r
@@ -536,11 +637,11 @@ PCI_CLASS_ENTRY PCISubClass_09[] = {
   {\r
     0x00,\r
     NULL,\r
-    /* null string ends the list */NULL\r
+    /* null string ends the list */ NULL\r
   }\r
 };\r
 \r
-PCI_CLASS_ENTRY PCISubClass_0a[] = {\r
+PCI_CLASS_ENTRY  PCISubClass_0a[] = {\r
   {\r
     0x00,\r
     L"Generic docking station",\r
@@ -554,11 +655,11 @@ PCI_CLASS_ENTRY PCISubClass_0a[] = {
   {\r
     0x00,\r
     NULL,\r
-    /* null string ends the list */NULL\r
+    /* null string ends the list */ NULL\r
   }\r
 };\r
 \r
-PCI_CLASS_ENTRY PCISubClass_0b[] = {\r
+PCI_CLASS_ENTRY  PCISubClass_0b[] = {\r
   {\r
     0x00,\r
     L"386",\r
@@ -602,15 +703,15 @@ PCI_CLASS_ENTRY PCISubClass_0b[] = {
   {\r
     0x00,\r
     NULL,\r
-    /* null string ends the list */NULL\r
+    /* null string ends the list */ NULL\r
   }\r
 };\r
 \r
-PCI_CLASS_ENTRY PCISubClass_0c[] = {\r
+PCI_CLASS_ENTRY  PCISubClass_0c[] = {\r
   {\r
     0x00,\r
-    L"Firewire(IEEE 1394)",\r
-    PCIPIFClass_0c03\r
+    L"IEEE 1394",\r
+    PCIPIFClass_0c00\r
   },\r
   {\r
     0x01,\r
@@ -625,7 +726,7 @@ PCI_CLASS_ENTRY PCISubClass_0c[] = {
   {\r
     0x03,\r
     L"USB",\r
-    PCIPIFClass_0c00\r
+    PCIPIFClass_0c03\r
   },\r
   {\r
     0x04,\r
@@ -637,6 +738,26 @@ PCI_CLASS_ENTRY PCISubClass_0c[] = {
     L"System Management Bus",\r
     PCIBlankEntry\r
   },\r
+  {\r
+    0x06,\r
+    L"InfiniBand",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x07,\r
+    L"IPMI",\r
+    PCIPIFClass_0c07\r
+  },\r
+  {\r
+    0x08,\r
+    L"SERCOS Interface Standard (IEC 61491)",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x09,\r
+    L"CANbus",\r
+    PCIBlankEntry\r
+  },\r
   {\r
     0x80,\r
     L"Other bus type",\r
@@ -645,11 +766,11 @@ PCI_CLASS_ENTRY PCISubClass_0c[] = {
   {\r
     0x00,\r
     NULL,\r
-    /* null string ends the list */NULL\r
+    /* null string ends the list */ NULL\r
   }\r
 };\r
 \r
-PCI_CLASS_ENTRY PCISubClass_0d[] = {\r
+PCI_CLASS_ENTRY  PCISubClass_0d[] = {\r
   {\r
     0x00,\r
     L"iRDA compatible controller",\r
@@ -657,14 +778,34 @@ PCI_CLASS_ENTRY PCISubClass_0d[] = {
   },\r
   {\r
     0x01,\r
-    L"Consumer IR controller",\r
-    PCIBlankEntry\r
+    L"",\r
+    PCIPIFClass_0d01\r
   },\r
   {\r
     0x10,\r
     L"RF controller",\r
     PCIBlankEntry\r
   },\r
+  {\r
+    0x11,\r
+    L"Bluetooth",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x12,\r
+    L"Broadband",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x20,\r
+    L"Ethernet (802.11a - 5 GHz)",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x21,\r
+    L"Ethernet (802.11b - 2.4 GHz)",\r
+    PCIBlankEntry\r
+  },\r
   {\r
     0x80,\r
     L"Other type of wireless controller",\r
@@ -673,11 +814,11 @@ PCI_CLASS_ENTRY PCISubClass_0d[] = {
   {\r
     0x00,\r
     NULL,\r
-    /* null string ends the list */NULL\r
+    /* null string ends the list */ NULL\r
   }\r
 };\r
 \r
-PCI_CLASS_ENTRY PCISubClass_0e[] = {\r
+PCI_CLASS_ENTRY  PCISubClass_0e[] = {\r
   {\r
     0x00,\r
     L"I2O Architecture",\r
@@ -686,39 +827,44 @@ PCI_CLASS_ENTRY PCISubClass_0e[] = {
   {\r
     0x00,\r
     NULL,\r
-    /* null string ends the list */NULL\r
+    /* null string ends the list */ NULL\r
   }\r
 };\r
 \r
-PCI_CLASS_ENTRY PCISubClass_0f[] = {\r
+PCI_CLASS_ENTRY  PCISubClass_0f[] = {\r
   {\r
-    0x00,\r
+    0x01,\r
     L"TV",\r
     PCIBlankEntry\r
   },\r
   {\r
-    0x01,\r
+    0x02,\r
     L"Audio",\r
     PCIBlankEntry\r
   },\r
   {\r
-    0x02,\r
+    0x03,\r
     L"Voice",\r
     PCIBlankEntry\r
   },\r
   {\r
-    0x03,\r
+    0x04,\r
     L"Data",\r
     PCIBlankEntry\r
   },\r
+  {\r
+    0x80,\r
+    L"Other satellite communication controller",\r
+    PCIBlankEntry\r
+  },\r
   {\r
     0x00,\r
     NULL,\r
-    /* null string ends the list */NULL\r
+    /* null string ends the list */ NULL\r
   }\r
 };\r
 \r
-PCI_CLASS_ENTRY PCISubClass_10[] = {\r
+PCI_CLASS_ENTRY  PCISubClass_10[] = {\r
   {\r
     0x00,\r
     L"Network & computing Encrypt/Decrypt",\r
@@ -737,16 +883,31 @@ PCI_CLASS_ENTRY PCISubClass_10[] = {
   {\r
     0x00,\r
     NULL,\r
-    /* null string ends the list */NULL\r
+    /* null string ends the list */ NULL\r
   }\r
 };\r
 \r
-PCI_CLASS_ENTRY PCISubClass_11[] = {\r
+PCI_CLASS_ENTRY  PCISubClass_11[] = {\r
   {\r
     0x00,\r
     L"DPIO modules",\r
     PCIBlankEntry\r
   },\r
+  {\r
+    0x01,\r
+    L"Performance Counters",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x10,\r
+    L"Communications synchronization plus time and frequency test/measurement ",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x20,\r
+    L"Management card",\r
+    PCIBlankEntry\r
+  },\r
   {\r
     0x80,\r
     L"Other DAQ & SP controllers",\r
@@ -755,14 +916,73 @@ PCI_CLASS_ENTRY PCISubClass_11[] = {
   {\r
     0x00,\r
     NULL,\r
-    /* null string ends the list */NULL\r
+    /* null string ends the list */ NULL\r
+  }\r
+};\r
+\r
+PCI_CLASS_ENTRY  PCISubClass_12[] = {\r
+  {\r
+    0x00,\r
+    L"Processing Accelerator",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x00,\r
+    NULL,\r
+    /* null string ends the list */ NULL\r
+  }\r
+};\r
+\r
+PCI_CLASS_ENTRY  PCISubClass_13[] = {\r
+  {\r
+    0x00,\r
+    L"Non-Essential Instrumentation Function",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x00,\r
+    NULL,\r
+    /* null string ends the list */ NULL\r
   }\r
 };\r
 \r
 //\r
 // Programming Interface entries\r
 //\r
-PCI_CLASS_ENTRY PCIPIFClass_0101[] = {\r
+PCI_CLASS_ENTRY  PCIPIFClass_0100[] = {\r
+  {\r
+    0x00,\r
+    L"SCSI controller",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x11,\r
+    L"SCSI storage device SOP using PQI",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x12,\r
+    L"SCSI controller SOP using PQI",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x13,\r
+    L"SCSI storage device and controller SOP using PQI",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x21,\r
+    L"SCSI storage device SOP using NVMe",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x00,\r
+    NULL,\r
+    /* null string ends the list */ NULL\r
+  }\r
+};\r
+\r
+PCI_CLASS_ENTRY  PCIPIFClass_0101[] = {\r
   {\r
     0x00,\r
     L"",\r
@@ -926,29 +1146,29 @@ PCI_CLASS_ENTRY PCIPIFClass_0101[] = {
   {\r
     0x00,\r
     NULL,\r
-    /* null string ends the list */NULL\r
+    /* null string ends the list */ NULL\r
   }\r
 };\r
 \r
-PCI_CLASS_ENTRY PCIPIFClass_0300[] = {\r
+PCI_CLASS_ENTRY  PCIPIFClass_0105[] = {\r
   {\r
-    0x00,\r
-    L"VGA compatible",\r
+    0x20,\r
+    L"Single stepping",\r
     PCIBlankEntry\r
   },\r
   {\r
-    0x01,\r
-    L"8514 compatible",\r
+    0x30,\r
+    L"Continuous operation",\r
     PCIBlankEntry\r
   },\r
   {\r
     0x00,\r
     NULL,\r
-    /* null string ends the list */NULL\r
+    /* null string ends the list */ NULL\r
   }\r
 };\r
 \r
-PCI_CLASS_ENTRY PCIPIFClass_0604[] = {\r
+PCI_CLASS_ENTRY  PCIPIFClass_0106[] = {\r
   {\r
     0x00,\r
     L"",\r
@@ -956,60 +1176,63 @@ PCI_CLASS_ENTRY PCIPIFClass_0604[] = {
   },\r
   {\r
     0x01,\r
-    L"Subtractive decode",\r
+    L"AHCI",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x02,\r
+    L"Serial Storage Bus",\r
     PCIBlankEntry\r
   },\r
   {\r
     0x00,\r
     NULL,\r
-    /* null string ends the list */NULL\r
+    /* null string ends the list */ NULL\r
   }\r
 };\r
 \r
-PCI_CLASS_ENTRY PCIPIFClass_0700[] = {\r
+PCI_CLASS_ENTRY  PCIPIFClass_0107[] = {\r
   {\r
     0x00,\r
-    L"Generic XT-compatible",\r
+    L"",\r
     PCIBlankEntry\r
   },\r
   {\r
     0x01,\r
-    L"16450-compatible",\r
-    PCIBlankEntry\r
-  },\r
-  {\r
-    0x02,\r
-    L"16550-compatible",\r
+    L"Obsolete",\r
     PCIBlankEntry\r
   },\r
   {\r
-    0x03,\r
-    L"16650-compatible",\r
-    PCIBlankEntry\r
-  },\r
+    0x00,\r
+    NULL,\r
+    /* null string ends the list */ NULL\r
+  }\r
+};\r
+\r
+PCI_CLASS_ENTRY  PCIPIFClass_0108[] = {\r
   {\r
-    0x04,\r
-    L"16750-compatible",\r
+    0x00,\r
+    L"",\r
     PCIBlankEntry\r
   },\r
   {\r
-    0x05,\r
-    L"16850-compatible",\r
+    0x01,\r
+    L"NVMHCI",\r
     PCIBlankEntry\r
   },\r
   {\r
-    0x06,\r
-    L"16950-compatible",\r
+    0x02,\r
+    L"NVM Express",\r
     PCIBlankEntry\r
   },\r
   {\r
     0x00,\r
     NULL,\r
-    /* null string ends the list */NULL\r
+    /* null string ends the list */ NULL\r
   }\r
 };\r
 \r
-PCI_CLASS_ENTRY PCIPIFClass_0701[] = {\r
+PCI_CLASS_ENTRY  PCIPIFClass_0109[] = {\r
   {\r
     0x00,\r
     L"",\r
@@ -1017,82 +1240,215 @@ PCI_CLASS_ENTRY PCIPIFClass_0701[] = {
   },\r
   {\r
     0x01,\r
-    L"Bi-directional",\r
+    L"UFSHCI",\r
     PCIBlankEntry\r
   },\r
   {\r
-    0x02,\r
-    L"ECP 1.X-compliant",\r
-    PCIBlankEntry\r
-  },\r
+    0x00,\r
+    NULL,\r
+    /* null string ends the list */ NULL\r
+  }\r
+};\r
+\r
+PCI_CLASS_ENTRY  PCIPIFClass_0300[] = {\r
   {\r
-    0x03,\r
-    L"IEEE 1284",\r
+    0x00,\r
+    L"VGA compatible",\r
     PCIBlankEntry\r
   },\r
   {\r
-    0xfe,\r
-    L"IEEE 1284 target (not a controller)",\r
+    0x01,\r
+    L"8514 compatible",\r
     PCIBlankEntry\r
   },\r
   {\r
     0x00,\r
     NULL,\r
-    /* null string ends the list */NULL\r
+    /* null string ends the list */ NULL\r
   }\r
 };\r
 \r
-PCI_CLASS_ENTRY PCIPIFClass_0703[] = {\r
+PCI_CLASS_ENTRY  PCIPIFClass_0604[] = {\r
   {\r
     0x00,\r
-    L"Generic",\r
+    L"",\r
     PCIBlankEntry\r
   },\r
   {\r
     0x01,\r
-    L"Hayes-compatible 16450",\r
+    L"Subtractive decode",\r
     PCIBlankEntry\r
   },\r
   {\r
-    0x02,\r
-    L"Hayes-compatible 16550",\r
-    PCIBlankEntry\r
-  },\r
+    0x00,\r
+    NULL,\r
+    /* null string ends the list */ NULL\r
+  }\r
+};\r
+\r
+PCI_CLASS_ENTRY  PCIPIFClass_0609[] = {\r
   {\r
-    0x03,\r
-    L"Hayes-compatible 16650",\r
+    0x40,\r
+    L"Primary PCI bus side facing the system host processor",\r
     PCIBlankEntry\r
   },\r
   {\r
-    0x04,\r
-    L"Hayes-compatible 16750",\r
+    0x80,\r
+    L"Secondary PCI bus side facing the system host processor",\r
     PCIBlankEntry\r
   },\r
   {\r
     0x00,\r
     NULL,\r
-    /* null string ends the list */NULL\r
+    /* null string ends the list */ NULL\r
   }\r
 };\r
 \r
-PCI_CLASS_ENTRY PCIPIFClass_0800[] = {\r
+PCI_CLASS_ENTRY  PCIPIFClass_060b[] = {\r
   {\r
     0x00,\r
-    L"Generic 8259",\r
+    L"Custom",\r
     PCIBlankEntry\r
   },\r
   {\r
     0x01,\r
-    L"ISA",\r
-    PCIBlankEntry\r
-  },\r
-  {\r
-    0x02,\r
-    L"EISA",\r
+    L"ASI-SIG Defined Portal",\r
     PCIBlankEntry\r
   },\r
   {\r
-    0x10,\r
+    0x00,\r
+    NULL,\r
+    /* null string ends the list */ NULL\r
+  }\r
+};\r
+\r
+PCI_CLASS_ENTRY  PCIPIFClass_0700[] = {\r
+  {\r
+    0x00,\r
+    L"Generic XT-compatible",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x01,\r
+    L"16450-compatible",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x02,\r
+    L"16550-compatible",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x03,\r
+    L"16650-compatible",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x04,\r
+    L"16750-compatible",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x05,\r
+    L"16850-compatible",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x06,\r
+    L"16950-compatible",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x00,\r
+    NULL,\r
+    /* null string ends the list */ NULL\r
+  }\r
+};\r
+\r
+PCI_CLASS_ENTRY  PCIPIFClass_0701[] = {\r
+  {\r
+    0x00,\r
+    L"",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x01,\r
+    L"Bi-directional",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x02,\r
+    L"ECP 1.X-compliant",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x03,\r
+    L"IEEE 1284",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0xfe,\r
+    L"IEEE 1284 target (not a controller)",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x00,\r
+    NULL,\r
+    /* null string ends the list */ NULL\r
+  }\r
+};\r
+\r
+PCI_CLASS_ENTRY  PCIPIFClass_0703[] = {\r
+  {\r
+    0x00,\r
+    L"Generic",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x01,\r
+    L"Hayes-compatible 16450",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x02,\r
+    L"Hayes-compatible 16550",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x03,\r
+    L"Hayes-compatible 16650",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x04,\r
+    L"Hayes-compatible 16750",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x00,\r
+    NULL,\r
+    /* null string ends the list */ NULL\r
+  }\r
+};\r
+\r
+PCI_CLASS_ENTRY  PCIPIFClass_0800[] = {\r
+  {\r
+    0x00,\r
+    L"Generic 8259",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x01,\r
+    L"ISA",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x02,\r
+    L"EISA",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x10,\r
     L"IO APIC",\r
     PCIBlankEntry\r
   },\r
@@ -1104,11 +1460,11 @@ PCI_CLASS_ENTRY PCIPIFClass_0800[] = {
   {\r
     0x00,\r
     NULL,\r
-    /* null string ends the list */NULL\r
+    /* null string ends the list */ NULL\r
   }\r
 };\r
 \r
-PCI_CLASS_ENTRY PCIPIFClass_0801[] = {\r
+PCI_CLASS_ENTRY  PCIPIFClass_0801[] = {\r
   {\r
     0x00,\r
     L"Generic 8237",\r
@@ -1127,11 +1483,11 @@ PCI_CLASS_ENTRY PCIPIFClass_0801[] = {
   {\r
     0x00,\r
     NULL,\r
-    /* null string ends the list */NULL\r
+    /* null string ends the list */ NULL\r
   }\r
 };\r
 \r
-PCI_CLASS_ENTRY PCIPIFClass_0802[] = {\r
+PCI_CLASS_ENTRY  PCIPIFClass_0802[] = {\r
   {\r
     0x00,\r
     L"Generic 8254",\r
@@ -1150,11 +1506,11 @@ PCI_CLASS_ENTRY PCIPIFClass_0802[] = {
   {\r
     0x00,\r
     NULL,\r
-    /* null string ends the list */NULL\r
+    /* null string ends the list */ NULL\r
   }\r
 };\r
 \r
-PCI_CLASS_ENTRY PCIPIFClass_0803[] = {\r
+PCI_CLASS_ENTRY  PCIPIFClass_0803[] = {\r
   {\r
     0x00,\r
     L"Generic",\r
@@ -1173,11 +1529,11 @@ PCI_CLASS_ENTRY PCIPIFClass_0803[] = {
   {\r
     0x00,\r
     NULL,\r
-    /* null string ends the list */NULL\r
+    /* null string ends the list */ NULL\r
   }\r
 };\r
 \r
-PCI_CLASS_ENTRY PCIPIFClass_0904[] = {\r
+PCI_CLASS_ENTRY  PCIPIFClass_0904[] = {\r
   {\r
     0x00,\r
     L"Generic",\r
@@ -1191,19 +1547,47 @@ PCI_CLASS_ENTRY PCIPIFClass_0904[] = {
   {\r
     0x00,\r
     NULL,\r
-    /* null string ends the list */NULL\r
+    /* null string ends the list */ NULL\r
+  }\r
+};\r
+\r
+PCI_CLASS_ENTRY  PCIPIFClass_0c00[] = {\r
+  {\r
+    0x00,\r
+    L"",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x10,\r
+    L"Using 1394 OpenHCI spec",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x00,\r
+    NULL,\r
+    /* null string ends the list */ NULL\r
   }\r
 };\r
 \r
-PCI_CLASS_ENTRY PCIPIFClass_0c00[] = {\r
+PCI_CLASS_ENTRY  PCIPIFClass_0c03[] = {\r
   {\r
     0x00,\r
-    L"Universal Host Controller spec",\r
+    L"UHCI",\r
     PCIBlankEntry\r
   },\r
   {\r
     0x10,\r
-    L"Open Host Controller spec",\r
+    L"OHCI",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x20,\r
+    L"EHCI",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x30,\r
+    L"xHCI",\r
     PCIBlankEntry\r
   },\r
   {\r
@@ -1219,29 +1603,52 @@ PCI_CLASS_ENTRY PCIPIFClass_0c00[] = {
   {\r
     0x00,\r
     NULL,\r
-    /* null string ends the list */NULL\r
+    /* null string ends the list */ NULL\r
   }\r
 };\r
 \r
-PCI_CLASS_ENTRY PCIPIFClass_0c03[] = {\r
+PCI_CLASS_ENTRY  PCIPIFClass_0c07[] = {\r
   {\r
     0x00,\r
-    L"",\r
+    L"SMIC",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x01,\r
+    L"Keyboard Controller Style",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x02,\r
+    L"Block Transfer",\r
+    PCIBlankEntry\r
+  },\r
+  {\r
+    0x00,\r
+    NULL,\r
+    /* null string ends the list */ NULL\r
+  }\r
+};\r
+\r
+PCI_CLASS_ENTRY  PCIPIFClass_0d01[] = {\r
+  {\r
+    0x00,\r
+    L"Consumer IR controller",\r
     PCIBlankEntry\r
   },\r
   {\r
     0x10,\r
-    L"Using 1394 OpenHCI spec",\r
+    L"UWB Radio controller",\r
     PCIBlankEntry\r
   },\r
   {\r
     0x00,\r
     NULL,\r
-    /* null string ends the list */NULL\r
+    /* null string ends the list */ NULL\r
   }\r
 };\r
 \r
-PCI_CLASS_ENTRY PCIPIFClass_0e00[] = {\r
+PCI_CLASS_ENTRY  PCIPIFClass_0e00[] = {\r
   {\r
     0x00,\r
     L"Message FIFO at offset 40h",\r
@@ -1255,11 +1662,10 @@ PCI_CLASS_ENTRY PCIPIFClass_0e00[] = {
   {\r
     0x00,\r
     NULL,\r
-    /* null string ends the list */NULL\r
+    /* null string ends the list */ NULL\r
   }\r
 };\r
 \r
-\r
 /**\r
   Generates printable Unicode strings that represent PCI device class,\r
   subclass and programmed I/F based on a value passed to the function.\r
@@ -1276,13 +1682,13 @@ PCI_CLASS_ENTRY PCIPIFClass_0e00[] = {
 **/\r
 VOID\r
 PciGetClassStrings (\r
-  IN      UINT32               ClassCode,\r
-  IN OUT  PCI_CLASS_STRINGS    *ClassStrings\r
+  IN      UINT32             ClassCode,\r
+  IN OUT  PCI_CLASS_STRINGS  *ClassStrings\r
   )\r
 {\r
-  INTN            Index;\r
-  UINT8           Code;\r
-  PCI_CLASS_ENTRY *CurrentClass;\r
+  INTN             Index;\r
+  UINT8            Code;\r
+  PCI_CLASS_ENTRY  *CurrentClass;\r
 \r
   //\r
   // Assume no strings found\r
@@ -1292,8 +1698,8 @@ PciGetClassStrings (
   ClassStrings->PIFClass  = L"UNDEFINED";\r
 \r
   CurrentClass = gClassStringList;\r
-  Code = (UINT8) (ClassCode >> 16);\r
-  Index = 0;\r
+  Code         = (UINT8)(ClassCode >> 16);\r
+  Index        = 0;\r
 \r
   //\r
   // Go through all entries of the base class, until the entry with a matching\r
@@ -1303,11 +1709,12 @@ PciGetClassStrings (
   //\r
   while (Code != CurrentClass[Index].Code) {\r
     if (NULL == CurrentClass[Index].DescText) {\r
-      return ;\r
+      return;\r
     }\r
 \r
     Index++;\r
   }\r
+\r
   //\r
   // A base class was found. Assign description, and check if this class has\r
   // sub-class defined. If sub-class defined, no more action is needed,\r
@@ -1315,14 +1722,15 @@ PciGetClassStrings (
   //\r
   ClassStrings->BaseClass = CurrentClass[Index].DescText;\r
   if (NULL == CurrentClass[Index].LowerLevelClass) {\r
-    return ;\r
+    return;\r
   }\r
+\r
   //\r
   // find Subclass entry\r
   //\r
-  CurrentClass  = CurrentClass[Index].LowerLevelClass;\r
-  Code          = (UINT8) (ClassCode >> 8);\r
-  Index         = 0;\r
+  CurrentClass = CurrentClass[Index].LowerLevelClass;\r
+  Code         = (UINT8)(ClassCode >> 8);\r
+  Index        = 0;\r
 \r
   //\r
   // Go through all entries of the sub-class, until the entry with a matching\r
@@ -1332,11 +1740,12 @@ PciGetClassStrings (
   //\r
   while (Code != CurrentClass[Index].Code) {\r
     if (NULL == CurrentClass[Index].DescText) {\r
-      return ;\r
+      return;\r
     }\r
 \r
     Index++;\r
   }\r
+\r
   //\r
   // A class was found for the sub-class code. Assign description, and check if\r
   // this sub-class has programming interface defined. If no, no more action is\r
@@ -1345,14 +1754,15 @@ PciGetClassStrings (
   //\r
   ClassStrings->SubClass = CurrentClass[Index].DescText;\r
   if (NULL == CurrentClass[Index].LowerLevelClass) {\r
-    return ;\r
+    return;\r
   }\r
+\r
   //\r
   // Find programming interface entry\r
   //\r
-  CurrentClass  = CurrentClass[Index].LowerLevelClass;\r
-  Code          = (UINT8) ClassCode;\r
-  Index         = 0;\r
+  CurrentClass = CurrentClass[Index].LowerLevelClass;\r
+  Code         = (UINT8)ClassCode;\r
+  Index        = 0;\r
 \r
   //\r
   // Go through all entries of the I/F entries, until the entry with a\r
@@ -1362,38 +1772,39 @@ PciGetClassStrings (
   //\r
   while (Code != CurrentClass[Index].Code) {\r
     if (NULL == CurrentClass[Index].DescText) {\r
-      return ;\r
+      return;\r
     }\r
 \r
     Index++;\r
   }\r
+\r
   //\r
   // A class was found for the I/F code. Assign description, done!\r
   //\r
   ClassStrings->PIFClass = CurrentClass[Index].DescText;\r
-  return ;\r
+  return;\r
 }\r
 \r
 /**\r
   Print strings that represent PCI device class, subclass and programmed I/F.\r
 \r
   @param[in] ClassCodePtr   Points to the memory which stores register Class Code in PCI\r
-                 configuation space.\r
+                            configuration space.\r
   @param[in] IncludePIF     If the printed string should include the programming I/F part\r
 **/\r
 VOID\r
 PciPrintClassCode (\r
-  IN      UINT8               *ClassCodePtr,\r
-  IN      BOOLEAN             IncludePIF\r
+  IN      UINT8    *ClassCodePtr,\r
+  IN      BOOLEAN  IncludePIF\r
   )\r
 {\r
-  UINT32            ClassCode;\r
-  PCI_CLASS_STRINGS ClassStrings;\r
+  UINT32             ClassCode;\r
+  PCI_CLASS_STRINGS  ClassStrings;\r
 \r
-  ClassCode = 0;\r
-  ClassCode |= ClassCodePtr[0];\r
-  ClassCode |= (ClassCodePtr[1] << 8);\r
-  ClassCode |= (ClassCodePtr[2] << 16);\r
+  ClassCode  = 0;\r
+  ClassCode |= (UINT32)ClassCodePtr[0];\r
+  ClassCode |= (UINT32)(ClassCodePtr[1] << 8);\r
+  ClassCode |= (UINT32)(ClassCodePtr[2] << 16);\r
 \r
   //\r
   // Get name from class code\r
@@ -1404,20 +1815,25 @@ PciPrintClassCode (
     //\r
     // Print base class, sub class, and programming inferface name\r
     //\r
-    ShellPrintEx (-1, -1, L"%s - %s - %s",\r
+    ShellPrintEx (\r
+      -1,\r
+      -1,\r
+      L"%s - %s - %s",\r
       ClassStrings.BaseClass,\r
       ClassStrings.SubClass,\r
       ClassStrings.PIFClass\r
-     );\r
-\r
+      );\r
   } else {\r
     //\r
     // Only print base class and sub class name\r
     //\r
-    ShellPrintEx (-1, -1, L"%s - %s",\r
+    ShellPrintEx (\r
+      -1,\r
+      -1,\r
+      L"%s - %s",\r
       ClassStrings.BaseClass,\r
       ClassStrings.SubClass\r
-    );\r
+      );\r
   }\r
 }\r
 \r
@@ -1439,11 +1855,11 @@ PciPrintClassCode (
 **/\r
 EFI_STATUS\r
 PciFindProtocolInterface (\r
-  IN  EFI_HANDLE                            *HandleBuf,\r
-  IN  UINTN                                 HandleCount,\r
-  IN  UINT16                                Segment,\r
-  IN  UINT16                                Bus,\r
-  OUT EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL       **IoDev\r
+  IN  EFI_HANDLE                       *HandleBuf,\r
+  IN  UINTN                            HandleCount,\r
+  IN  UINT16                           Segment,\r
+  IN  UINT16                           Bus,\r
+  OUT EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL  **IoDev\r
   );\r
 \r
 /**\r
@@ -1458,9 +1874,9 @@ PciFindProtocolInterface (
 **/\r
 EFI_STATUS\r
 PciGetProtocolAndResource (\r
-  IN  EFI_HANDLE                            Handle,\r
-  OUT EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL       **IoDev,\r
-  OUT EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR     **Descriptors\r
+  IN  EFI_HANDLE                         Handle,\r
+  OUT EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL    **IoDev,\r
+  OUT EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR  **Descriptors\r
   );\r
 \r
 /**\r
@@ -1492,14 +1908,12 @@ PciGetNextBusRange (
   @param[in] ConfigSpace     Data in PCI configuration space.\r
   @param[in] Address         Address used to access configuration space of this PCI device.\r
   @param[in] IoDev           Handle used to access configuration space of PCI device.\r
-\r
-  @retval EFI_SUCCESS     The command completed successfully.\r
 **/\r
-EFI_STATUS\r
-PciExplainData (\r
-  IN PCI_CONFIG_SPACE                       *ConfigSpace,\r
-  IN UINT64                                 Address,\r
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL        *IoDev\r
+VOID\r
+PciExplainPci (\r
+  IN PCI_CONFIG_SPACE                 *ConfigSpace,\r
+  IN UINT64                           Address,\r
+  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL  *IoDev\r
   );\r
 \r
 /**\r
@@ -1513,9 +1927,9 @@ PciExplainData (
 **/\r
 EFI_STATUS\r
 PciExplainDeviceData (\r
-  IN PCI_DEVICE_HEADER                      *Device,\r
-  IN UINT64                                 Address,\r
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL        *IoDev\r
+  IN PCI_DEVICE_HEADER_TYPE_REGION    *Device,\r
+  IN UINT64                           Address,\r
+  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL  *IoDev\r
   );\r
 \r
 /**\r
@@ -1529,9 +1943,9 @@ PciExplainDeviceData (
 **/\r
 EFI_STATUS\r
 PciExplainBridgeData (\r
-  IN  PCI_BRIDGE_HEADER                     *Bridge,\r
-  IN  UINT64                                Address,\r
-  IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL       *IoDev\r
+  IN  PCI_BRIDGE_CONTROL_REGISTER      *Bridge,\r
+  IN  UINT64                           Address,\r
+  IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL  *IoDev\r
   );\r
 \r
 /**\r
@@ -1547,11 +1961,11 @@ PciExplainBridgeData (
 **/\r
 EFI_STATUS\r
 PciExplainBar (\r
-  IN UINT32                                 *Bar,\r
-  IN UINT16                                 *Command,\r
-  IN UINT64                                 Address,\r
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL        *IoDev,\r
-  IN OUT UINTN                              *Index\r
+  IN UINT32                           *Bar,\r
+  IN UINT16                           *Command,\r
+  IN UINT64                           Address,\r
+  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL  *IoDev,\r
+  IN OUT UINTN                        *Index\r
   );\r
 \r
 /**\r
@@ -1565,9 +1979,9 @@ PciExplainBar (
 **/\r
 EFI_STATUS\r
 PciExplainCardBusData (\r
-  IN PCI_CARDBUS_HEADER                     *CardBus,\r
-  IN UINT64                                 Address,\r
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL        *IoDev\r
+  IN PCI_CARDBUS_CONTROL_REGISTER     *CardBus,\r
+  IN UINT64                           Address,\r
+  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL  *IoDev\r
   );\r
 \r
 /**\r
@@ -1583,9 +1997,9 @@ PciExplainCardBusData (
 **/\r
 EFI_STATUS\r
 PciExplainStatus (\r
-  IN UINT16                                 *Status,\r
-  IN BOOLEAN                                MainStatus,\r
-  IN PCI_HEADER_TYPE                        HeaderType\r
+  IN UINT16           *Status,\r
+  IN BOOLEAN          MainStatus,\r
+  IN PCI_HEADER_TYPE  HeaderType\r
   );\r
 \r
 /**\r
@@ -1597,7 +2011,7 @@ PciExplainStatus (
 **/\r
 EFI_STATUS\r
 PciExplainCommand (\r
-  IN UINT16                                 *Command\r
+  IN UINT16  *Command\r
   );\r
 \r
 /**\r
@@ -1610,38 +2024,38 @@ PciExplainCommand (
 **/\r
 EFI_STATUS\r
 PciExplainBridgeControl (\r
-  IN UINT16                                 *BridgeControl,\r
-  IN PCI_HEADER_TYPE                        HeaderType\r
+  IN UINT16           *BridgeControl,\r
+  IN PCI_HEADER_TYPE  HeaderType\r
   );\r
 \r
 /**\r
-  Print each capability structure.\r
+  Locate capability register block per capability ID.\r
 \r
-  @param[in] IoDev      The pointer to the deivce.\r
-  @param[in] Address    The address to start at.\r
-  @param[in] CapPtr     The offset from the address.\r
+  @param[in] ConfigSpace       Data in PCI configuration space.\r
+  @param[in] CapabilityId      The capability ID.\r
 \r
-  @retval EFI_SUCCESS     The operation was successful.\r
+  @return   The offset of the register block per capability ID.\r
 **/\r
-EFI_STATUS\r
-PciExplainCapabilityStruct (\r
-  IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL         *IoDev,\r
-  IN UINT64                                   Address,\r
-  IN  UINT8                                   CapPtr\r
+UINT8\r
+LocatePciCapability (\r
+  IN PCI_CONFIG_SPACE  *ConfigSpace,\r
+  IN UINT8             CapabilityId\r
   );\r
 \r
 /**\r
   Display Pcie device structure.\r
 \r
-  @param[in] IoDev          The pointer to the root pci protocol.\r
-  @param[in] Address        The Address to start at.\r
-  @param[in] CapabilityPtr  The offset from the address to start.\r
+  @param[in] PciExpressCap       PCI Express capability buffer.\r
+  @param[in] ExtendedConfigSpace PCI Express extended configuration space.\r
+  @param[in] ExtendedConfigSize  PCI Express extended configuration size.\r
+  @param[in] ExtendedCapability  PCI Express extended capability ID to explain.\r
 **/\r
-EFI_STATUS\r
+VOID\r
 PciExplainPciExpress (\r
-  IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL         *IoDev,\r
-  IN  UINT64                                  Address,\r
-  IN  UINT8                                   CapabilityPtr\r
+  IN  PCI_CAPABILITY_PCIEXP  *PciExpressCap,\r
+  IN  UINT8                  *ExtendedConfigSpace,\r
+  IN  UINTN                  ExtendedConfigSize,\r
+  IN CONST UINT16            ExtendedCapability\r
   );\r
 \r
 /**\r
@@ -1653,7 +2067,7 @@ PciExplainPciExpress (
 **/\r
 EFI_STATUS\r
 ExplainPcieCapReg (\r
-  IN PCIE_CAP_STURCTURE *PciExpressCap\r
+  IN PCI_CAPABILITY_PCIEXP  *PciExpressCap\r
   );\r
 \r
 /**\r
@@ -1665,7 +2079,7 @@ ExplainPcieCapReg (
 **/\r
 EFI_STATUS\r
 ExplainPcieDeviceCap (\r
-  IN PCIE_CAP_STURCTURE *PciExpressCap\r
+  IN PCI_CAPABILITY_PCIEXP  *PciExpressCap\r
   );\r
 \r
 /**\r
@@ -1677,7 +2091,7 @@ ExplainPcieDeviceCap (
 **/\r
 EFI_STATUS\r
 ExplainPcieDeviceControl (\r
-  IN PCIE_CAP_STURCTURE *PciExpressCap\r
+  IN PCI_CAPABILITY_PCIEXP  *PciExpressCap\r
   );\r
 \r
 /**\r
@@ -1689,7 +2103,7 @@ ExplainPcieDeviceControl (
 **/\r
 EFI_STATUS\r
 ExplainPcieDeviceStatus (\r
-  IN PCIE_CAP_STURCTURE *PciExpressCap\r
+  IN PCI_CAPABILITY_PCIEXP  *PciExpressCap\r
   );\r
 \r
 /**\r
@@ -1701,7 +2115,7 @@ ExplainPcieDeviceStatus (
 **/\r
 EFI_STATUS\r
 ExplainPcieLinkCap (\r
-  IN PCIE_CAP_STURCTURE *PciExpressCap\r
+  IN PCI_CAPABILITY_PCIEXP  *PciExpressCap\r
   );\r
 \r
 /**\r
@@ -1713,7 +2127,7 @@ ExplainPcieLinkCap (
 **/\r
 EFI_STATUS\r
 ExplainPcieLinkControl (\r
-  IN PCIE_CAP_STURCTURE *PciExpressCap\r
+  IN PCI_CAPABILITY_PCIEXP  *PciExpressCap\r
   );\r
 \r
 /**\r
@@ -1725,7 +2139,7 @@ ExplainPcieLinkControl (
 **/\r
 EFI_STATUS\r
 ExplainPcieLinkStatus (\r
-  IN PCIE_CAP_STURCTURE *PciExpressCap\r
+  IN PCI_CAPABILITY_PCIEXP  *PciExpressCap\r
   );\r
 \r
 /**\r
@@ -1737,7 +2151,7 @@ ExplainPcieLinkStatus (
 **/\r
 EFI_STATUS\r
 ExplainPcieSlotCap (\r
-  IN PCIE_CAP_STURCTURE *PciExpressCap\r
+  IN PCI_CAPABILITY_PCIEXP  *PciExpressCap\r
   );\r
 \r
 /**\r
@@ -1749,7 +2163,7 @@ ExplainPcieSlotCap (
 **/\r
 EFI_STATUS\r
 ExplainPcieSlotControl (\r
-  IN PCIE_CAP_STURCTURE *PciExpressCap\r
+  IN PCI_CAPABILITY_PCIEXP  *PciExpressCap\r
   );\r
 \r
 /**\r
@@ -1761,7 +2175,7 @@ ExplainPcieSlotControl (
 **/\r
 EFI_STATUS\r
 ExplainPcieSlotStatus (\r
-  IN PCIE_CAP_STURCTURE *PciExpressCap\r
+  IN PCI_CAPABILITY_PCIEXP  *PciExpressCap\r
   );\r
 \r
 /**\r
@@ -1773,7 +2187,7 @@ ExplainPcieSlotStatus (
 **/\r
 EFI_STATUS\r
 ExplainPcieRootControl (\r
-  IN PCIE_CAP_STURCTURE *PciExpressCap\r
+  IN PCI_CAPABILITY_PCIEXP  *PciExpressCap\r
   );\r
 \r
 /**\r
@@ -1785,7 +2199,7 @@ ExplainPcieRootControl (
 **/\r
 EFI_STATUS\r
 ExplainPcieRootCap (\r
-  IN PCIE_CAP_STURCTURE *PciExpressCap\r
+  IN PCI_CAPABILITY_PCIEXP  *PciExpressCap\r
   );\r
 \r
 /**\r
@@ -1797,10 +2211,12 @@ ExplainPcieRootCap (
 **/\r
 EFI_STATUS\r
 ExplainPcieRootStatus (\r
-  IN PCIE_CAP_STURCTURE *PciExpressCap\r
+  IN PCI_CAPABILITY_PCIEXP  *PciExpressCap\r
   );\r
 \r
-typedef EFI_STATUS (*PCIE_EXPLAIN_FUNCTION) (IN PCIE_CAP_STURCTURE *PciExpressCap);\r
+typedef EFI_STATUS (*PCIE_EXPLAIN_FUNCTION) (\r
+  IN PCI_CAPABILITY_PCIEXP  *PciExpressCap\r
+  );\r
 \r
 typedef enum {\r
   FieldWidthUINT8,\r
@@ -1817,16 +2233,15 @@ typedef enum {
   PcieExplainTypeMax\r
 } PCIE_EXPLAIN_TYPE;\r
 \r
-typedef struct\r
-{\r
-  UINT16                  Token;\r
-  UINTN                   Offset;\r
-  PCIE_CAPREG_FIELD_WIDTH Width;\r
-  PCIE_EXPLAIN_FUNCTION   Func;\r
-  PCIE_EXPLAIN_TYPE       Type;\r
+typedef struct {\r
+  UINT16                     Token;\r
+  UINTN                      Offset;\r
+  PCIE_CAPREG_FIELD_WIDTH    Width;\r
+  PCIE_EXPLAIN_FUNCTION      Func;\r
+  PCIE_EXPLAIN_TYPE          Type;\r
 } PCIE_EXPLAIN_STRUCT;\r
 \r
-PCIE_EXPLAIN_STRUCT PcieExplainList[] = {\r
+PCIE_EXPLAIN_STRUCT  PcieExplainList[] = {\r
   {\r
     STRING_TOKEN (STR_PCIEX_CAPABILITY_CAPID),\r
     0x00,\r
@@ -1944,14 +2359,15 @@ PCIE_EXPLAIN_STRUCT PcieExplainList[] = {
 //\r
 // Global Variables\r
 //\r
-PCI_CONFIG_SPACE  *mConfigSpace = NULL;\r
-STATIC CONST SHELL_PARAM_ITEM ParamList[] = {\r
-  {L"-s", TypeValue},\r
-  {L"-i", TypeFlag},\r
-  {NULL, TypeMax}\r
-  };\r
-\r
-CHAR16 *DevicePortTypeTable[] = {\r
+PCI_CONFIG_SPACE               *mConfigSpace = NULL;\r
+STATIC CONST SHELL_PARAM_ITEM  ParamList[]   = {\r
+  { L"-s",  TypeValue },\r
+  { L"-i",  TypeFlag  },\r
+  { L"-ec", TypeValue },\r
+  { NULL,   TypeMax   }\r
+};\r
+\r
+CHAR16  *DevicePortTypeTable[] = {\r
   L"PCI Express Endpoint",\r
   L"Legacy PCI Express Endpoint",\r
   L"Unknown Type",\r
@@ -1965,7 +2381,7 @@ CHAR16 *DevicePortTypeTable[] = {
   L"Root Complex Event Collector"\r
 };\r
 \r
-CHAR16 *L0sLatencyStrTable[] = {\r
+CHAR16  *L0sLatencyStrTable[] = {\r
   L"Less than 64ns",\r
   L"64ns to less than 128ns",\r
   L"128ns to less than 256ns",\r
@@ -1976,7 +2392,7 @@ CHAR16 *L0sLatencyStrTable[] = {
   L"More than 4us"\r
 };\r
 \r
-CHAR16 *L1LatencyStrTable[] = {\r
+CHAR16  *L1LatencyStrTable[] = {\r
   L"Less than 1us",\r
   L"1us to less than 2us",\r
   L"2us to less than 4us",\r
@@ -1987,28 +2403,27 @@ CHAR16 *L1LatencyStrTable[] = {
   L"More than 64us"\r
 };\r
 \r
-CHAR16 *ASPMCtrlStrTable[] = {\r
+CHAR16  *ASPMCtrlStrTable[] = {\r
   L"Disabled",\r
   L"L0s Entry Enabled",\r
   L"L1 Entry Enabled",\r
   L"L0s and L1 Entry Enabled"\r
 };\r
 \r
-CHAR16 *SlotPwrLmtScaleTable[] = {\r
+CHAR16  *SlotPwrLmtScaleTable[] = {\r
   L"1.0x",\r
   L"0.1x",\r
   L"0.01x",\r
   L"0.001x"\r
 };\r
 \r
-CHAR16 *IndicatorTable[] = {\r
+CHAR16  *IndicatorTable[] = {\r
   L"Reserved",\r
   L"On",\r
   L"Blink",\r
   L"Off"\r
 };\r
 \r
-\r
 /**\r
   Function for 'pci' command.\r
 \r
@@ -2022,121 +2437,132 @@ ShellCommandRunPci (
   IN EFI_SYSTEM_TABLE  *SystemTable\r
   )\r
 {\r
-  UINT16                            Segment;\r
-  UINT16                            Bus;\r
-  UINT16                            Device;\r
-  UINT16                            Func;\r
-  UINT64                            Address;\r
-  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL   *IoDev;\r
-  EFI_STATUS                        Status;\r
-  PCI_COMMON_HEADER                 PciHeader;\r
-  PCI_CONFIG_SPACE                  ConfigSpace;\r
-  UINTN                             ScreenCount;\r
-  UINTN                             TempColumn;\r
-  UINTN                             ScreenSize;\r
-  BOOLEAN                           ExplainData;\r
-  UINTN                             Index;\r
-  UINTN                             SizeOfHeader;\r
-  BOOLEAN                           PrintTitle;\r
-  UINTN                             HandleBufSize;\r
-  EFI_HANDLE                        *HandleBuf;\r
-  UINTN                             HandleCount;\r
-  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Descriptors;\r
-  UINT16                            MinBus;\r
-  UINT16                            MaxBus;\r
-  BOOLEAN                           IsEnd;\r
-  LIST_ENTRY                        *Package;\r
-  CHAR16                            *ProblemParam;\r
-  SHELL_STATUS                      ShellStatus;\r
-  CONST CHAR16                      *Temp;\r
-  UINT64                            RetVal;\r
-\r
-  ShellStatus         = SHELL_SUCCESS;\r
-  Status              = EFI_SUCCESS;\r
-  Address             = 0;\r
-  IoDev               = NULL;\r
-  HandleBuf           = NULL;\r
-  Package             = NULL;\r
+  UINT16                             Segment;\r
+  UINT16                             Bus;\r
+  UINT16                             Device;\r
+  UINT16                             Func;\r
+  UINT64                             Address;\r
+  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL    *IoDev;\r
+  EFI_STATUS                         Status;\r
+  PCI_DEVICE_INDEPENDENT_REGION      PciHeader;\r
+  PCI_CONFIG_SPACE                   ConfigSpace;\r
+  UINTN                              ScreenCount;\r
+  UINTN                              TempColumn;\r
+  UINTN                              ScreenSize;\r
+  BOOLEAN                            ExplainData;\r
+  UINTN                              Index;\r
+  UINTN                              SizeOfHeader;\r
+  BOOLEAN                            PrintTitle;\r
+  UINTN                              HandleBufSize;\r
+  EFI_HANDLE                         *HandleBuf;\r
+  UINTN                              HandleCount;\r
+  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR  *Descriptors;\r
+  UINT16                             MinBus;\r
+  UINT16                             MaxBus;\r
+  BOOLEAN                            IsEnd;\r
+  LIST_ENTRY                         *Package;\r
+  CHAR16                             *ProblemParam;\r
+  SHELL_STATUS                       ShellStatus;\r
+  CONST CHAR16                       *Temp;\r
+  UINT64                             RetVal;\r
+  UINT16                             ExtendedCapability;\r
+  UINT8                              PcieCapabilityPtr;\r
+  UINT8                              *ExtendedConfigSpace;\r
+  UINTN                              ExtendedConfigSize;\r
+\r
+  ShellStatus = SHELL_SUCCESS;\r
+  Status      = EFI_SUCCESS;\r
+  Address     = 0;\r
+  IoDev       = NULL;\r
+  HandleBuf   = NULL;\r
+  Package     = NULL;\r
 \r
   //\r
   // initialize the shell lib (we must be in non-auto-init...)\r
   //\r
-  Status = ShellInitialize();\r
-  ASSERT_EFI_ERROR(Status);\r
+  Status = ShellInitialize ();\r
+  ASSERT_EFI_ERROR (Status);\r
 \r
-  Status = CommandInit();\r
-  ASSERT_EFI_ERROR(Status);\r
+  Status = CommandInit ();\r
+  ASSERT_EFI_ERROR (Status);\r
 \r
   //\r
   // parse the command line\r
   //\r
   Status = ShellCommandLineParse (ParamList, &Package, &ProblemParam, TRUE);\r
-  if (EFI_ERROR(Status)) {\r
-    if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {\r
-      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, ProblemParam);\r
-      FreePool(ProblemParam);\r
+  if (EFI_ERROR (Status)) {\r
+    if ((Status == EFI_VOLUME_CORRUPTED) && (ProblemParam != NULL)) {\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, L"pci", ProblemParam);\r
+      FreePool (ProblemParam);\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
     } else {\r
-      ASSERT(FALSE);\r
+      ASSERT (FALSE);\r
     }\r
   } else {\r
+    if (ShellCommandLineGetCount (Package) == 2) {\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle, L"pci");\r
+      ShellStatus = SHELL_INVALID_PARAMETER;\r
+      goto Done;\r
+    }\r
 \r
-    if (ShellCommandLineGetCount(Package) == 2) {\r
-      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle);\r
+    if (ShellCommandLineGetCount (Package) > 4) {\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle, L"pci");\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
       goto Done;\r
     }\r
 \r
-    if (ShellCommandLineGetCount(Package) > 4) {\r
-      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle);\r
+    if (ShellCommandLineGetFlag (Package, L"-ec") && (ShellCommandLineGetValue (Package, L"-ec") == NULL)) {\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDebug1HiiHandle, L"pci", L"-ec");\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
       goto Done;\r
     }\r
-    if (ShellCommandLineGetFlag(Package, L"-s") && ShellCommandLineGetValue(Package, L"-s") == NULL) {\r
-      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDebug1HiiHandle, L"-s");\r
+\r
+    if (ShellCommandLineGetFlag (Package, L"-s") && (ShellCommandLineGetValue (Package, L"-s") == NULL)) {\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDebug1HiiHandle, L"pci", L"-s");\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
       goto Done;\r
     }\r
+\r
     //\r
     // Get all instances of PciRootBridgeIo. Allocate space for 1 EFI_HANDLE and\r
     // call LibLocateHandle(), if EFI_BUFFER_TOO_SMALL is returned, allocate enough\r
     // space for handles and call it again.\r
     //\r
     HandleBufSize = sizeof (EFI_HANDLE);\r
-    HandleBuf     = (EFI_HANDLE *) AllocateZeroPool (HandleBufSize);\r
+    HandleBuf     = (EFI_HANDLE *)AllocateZeroPool (HandleBufSize);\r
     if (HandleBuf == NULL) {\r
-      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_OUT_MEM), gShellDebug1HiiHandle);\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_OUT_MEM), gShellDebug1HiiHandle, L"pci");\r
       ShellStatus = SHELL_OUT_OF_RESOURCES;\r
       goto Done;\r
     }\r
 \r
     Status = gBS->LocateHandle (\r
-                  ByProtocol,\r
-                  &gEfiPciRootBridgeIoProtocolGuid,\r
-                  NULL,\r
-                  &HandleBufSize,\r
-                  HandleBuf\r
-                 );\r
+                    ByProtocol,\r
+                    &gEfiPciRootBridgeIoProtocolGuid,\r
+                    NULL,\r
+                    &HandleBufSize,\r
+                    HandleBuf\r
+                    );\r
 \r
     if (Status == EFI_BUFFER_TOO_SMALL) {\r
       HandleBuf = ReallocatePool (sizeof (EFI_HANDLE), HandleBufSize, HandleBuf);\r
       if (HandleBuf == NULL) {\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_OUT_MEM), gShellDebug1HiiHandle);\r
+        ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_OUT_MEM), gShellDebug1HiiHandle, L"pci");\r
         ShellStatus = SHELL_OUT_OF_RESOURCES;\r
         goto Done;\r
       }\r
 \r
       Status = gBS->LocateHandle (\r
-                    ByProtocol,\r
-                    &gEfiPciRootBridgeIoProtocolGuid,\r
-                    NULL,\r
-                    &HandleBufSize,\r
-                    HandleBuf\r
-                   );\r
+                      ByProtocol,\r
+                      &gEfiPciRootBridgeIoProtocolGuid,\r
+                      NULL,\r
+                      &HandleBufSize,\r
+                      HandleBuf\r
+                      );\r
     }\r
 \r
     if (EFI_ERROR (Status)) {\r
-      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PCIRBIO_NF), gShellDebug1HiiHandle);\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PCIRBIO_NF), gShellDebug1HiiHandle, L"pci");\r
       ShellStatus = SHELL_NOT_FOUND;\r
       goto Done;\r
     }\r
@@ -2145,13 +2571,13 @@ ShellCommandRunPci (
     //\r
     // Argument Count == 1(no other argument): enumerate all pci functions\r
     //\r
-    if (ShellCommandLineGetCount(Package) == 1) {\r
+    if (ShellCommandLineGetCount (Package) == 1) {\r
       gST->ConOut->QueryMode (\r
-                    gST->ConOut,\r
-                    gST->ConOut->Mode->Mode,\r
-                    &TempColumn,\r
-                    &ScreenSize\r
-                   );\r
+                     gST->ConOut,\r
+                     gST->ConOut->Mode->Mode,\r
+                     &TempColumn,\r
+                     &ScreenSize\r
+                     );\r
 \r
       ScreenCount = 0;\r
       ScreenSize -= 4;\r
@@ -2167,15 +2593,16 @@ ShellCommandRunPci (
       //\r
       for (Index = 0; Index < HandleCount; Index++) {\r
         Status = PciGetProtocolAndResource (\r
-                  HandleBuf[Index],\r
-                  &IoDev,\r
-                  &Descriptors\r
-                 );\r
+                   HandleBuf[Index],\r
+                   &IoDev,\r
+                   &Descriptors\r
+                   );\r
         if (EFI_ERROR (Status)) {\r
-          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_PCI_HANDLE_CFG_ERR), gShellDebug1HiiHandle, Status);\r
+          ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI_HANDLE_CFG_ERR), gShellDebug1HiiHandle, L"pci");\r
           ShellStatus = SHELL_NOT_FOUND;\r
           goto Done;\r
         }\r
+\r
         //\r
         // No document say it's impossible for a RootBridgeIo protocol handle\r
         // to have more than one address space descriptors, so find out every\r
@@ -2185,7 +2612,7 @@ ShellCommandRunPci (
           Status = PciGetNextBusRange (&Descriptors, &MinBus, &MaxBus, &IsEnd);\r
 \r
           if (EFI_ERROR (Status)) {\r
-            ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_PCI_BUS_RANGE_ERR), gShellDebug1HiiHandle, Status);\r
+            ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI_BUS_RANGE_ERR), gShellDebug1HiiHandle, L"pci");\r
             ShellStatus = SHELL_NOT_FOUND;\r
             goto Done;\r
           }\r
@@ -2207,14 +2634,15 @@ ShellCommandRunPci (
                   ShellStatus = SHELL_ABORTED;\r
                   goto Done;\r
                 }\r
-                Address = CALC_EFI_PCI_ADDRESS (Bus, Device, Func, 0);\r
+\r
+                Address = EFI_PCI_ADDRESS (Bus, Device, Func, 0);\r
                 IoDev->Pci.Read (\r
-                            IoDev,\r
-                            EfiPciWidthUint16,\r
-                            Address,\r
-                            1,\r
-                            &PciHeader.VendorId\r
-                           );\r
+                             IoDev,\r
+                             EfiPciWidthUint16,\r
+                             Address,\r
+                             1,\r
+                             &PciHeader.VendorId\r
+                             );\r
 \r
                 //\r
                 // If VendorId = 0xffff, there does not exist a device at this\r
@@ -2223,60 +2651,69 @@ ShellCommandRunPci (
                 // will be no more functions in the same device, so we can break\r
                 // loop to deal with the next device.\r
                 //\r
-                if (PciHeader.VendorId == 0xffff && Func == 0) {\r
+                if ((PciHeader.VendorId == 0xffff) && (Func == 0)) {\r
                   break;\r
                 }\r
 \r
                 if (PciHeader.VendorId != 0xffff) {\r
-\r
                   if (PrintTitle) {\r
-                    ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_PCI_TITLE), gShellDebug1HiiHandle);\r
+                    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI_TITLE), gShellDebug1HiiHandle);\r
                     PrintTitle = FALSE;\r
                   }\r
 \r
                   IoDev->Pci.Read (\r
-                              IoDev,\r
-                              EfiPciWidthUint32,\r
-                              Address,\r
-                              sizeof (PciHeader) / sizeof (UINT32),\r
-                              &PciHeader\r
-                             );\r
-\r
-                  ShellPrintHiiEx(\r
-                    -1, -1, NULL, STRING_TOKEN (STR_PCI_LINE_P1), gShellDebug1HiiHandle,\r
+                               IoDev,\r
+                               EfiPciWidthUint32,\r
+                               Address,\r
+                               sizeof (PciHeader) / sizeof (UINT32),\r
+                               &PciHeader\r
+                               );\r
+\r
+                  ShellPrintHiiEx (\r
+                    -1,\r
+                    -1,\r
+                    NULL,\r
+                    STRING_TOKEN (STR_PCI_LINE_P1),\r
+                    gShellDebug1HiiHandle,\r
                     IoDev->SegmentNumber,\r
                     Bus,\r
                     Device,\r
                     Func\r
-                   );\r
+                    );\r
 \r
                   PciPrintClassCode (PciHeader.ClassCode, FALSE);\r
-                  ShellPrintHiiEx(\r
-                    -1, -1, NULL, STRING_TOKEN (STR_PCI_LINE_P2), gShellDebug1HiiHandle,\r
+                  ShellPrintHiiEx (\r
+                    -1,\r
+                    -1,\r
+                    NULL,\r
+                    STRING_TOKEN (STR_PCI_LINE_P2),\r
+                    gShellDebug1HiiHandle,\r
                     PciHeader.VendorId,\r
                     PciHeader.DeviceId,\r
                     PciHeader.ClassCode[0]\r
-                   );\r
+                    );\r
 \r
                   ScreenCount += 2;\r
-                  if (ScreenCount >= ScreenSize && ScreenSize != 0) {\r
+                  if ((ScreenCount >= ScreenSize) && (ScreenSize != 0)) {\r
                     //\r
                     // If ScreenSize == 0 we have the console redirected so don't\r
                     //  block updates\r
                     //\r
                     ScreenCount = 0;\r
                   }\r
+\r
                   //\r
                   // If this is not a multi-function device, we can leave the loop\r
                   // to deal with the next device.\r
                   //\r
-                  if (Func == 0 && ((PciHeader.HeaderType & HEADER_TYPE_MULTI_FUNCTION) == 0x00)) {\r
+                  if ((Func == 0) && ((PciHeader.HeaderType & HEADER_TYPE_MULTI_FUNCTION) == 0x00)) {\r
                     break;\r
                   }\r
                 }\r
               }\r
             }\r
           }\r
+\r
           //\r
           // If Descriptor is NULL, Configuration() returns EFI_UNSUPPRORED,\r
           // we assume the bus range is 0~PCI_MAX_BUS. After enumerated all\r
@@ -2292,24 +2729,25 @@ ShellCommandRunPci (
       goto Done;\r
     }\r
 \r
-    ExplainData                   = FALSE;\r
-    Segment                       = 0;\r
-    Bus                           = 0;\r
-    Device                        = 0;\r
-    Func                          = 0;\r
-    if (ShellCommandLineGetFlag(Package, L"-i")) {\r
+    ExplainData        = FALSE;\r
+    Segment            = 0;\r
+    Bus                = 0;\r
+    Device             = 0;\r
+    Func               = 0;\r
+    ExtendedCapability = 0xFFFF;\r
+    if (ShellCommandLineGetFlag (Package, L"-i")) {\r
       ExplainData = TRUE;\r
     }\r
 \r
-    Temp = ShellCommandLineGetValue(Package, L"-s");\r
+    Temp = ShellCommandLineGetValue (Package, L"-s");\r
     if (Temp != NULL) {\r
       //\r
       // Input converted to hexadecimal number.\r
       //\r
       if (!EFI_ERROR (ShellConvertStringToUint64 (Temp, &RetVal, TRUE, TRUE))) {\r
-        Segment = (UINT16) RetVal;\r
+        Segment = (UINT16)RetVal;\r
       } else {\r
-        ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV_HEX), gShellDebug1HiiHandle);\r
+        ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV_HEX), gShellDebug1HiiHandle, L"pci", Temp);\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
         goto Done;\r
       }\r
@@ -2319,60 +2757,75 @@ ShellCommandRunPci (
     // The first Argument(except "-i") is assumed to be Bus number, second\r
     // to be Device number, and third to be Func number.\r
     //\r
-    Temp = ShellCommandLineGetRawValue(Package, 1);\r
+    Temp = ShellCommandLineGetRawValue (Package, 1);\r
     if (Temp != NULL) {\r
       //\r
       // Input converted to hexadecimal number.\r
       //\r
       if (!EFI_ERROR (ShellConvertStringToUint64 (Temp, &RetVal, TRUE, TRUE))) {\r
-        Bus = (UINT16) RetVal;\r
+        Bus = (UINT16)RetVal;\r
       } else {\r
-        ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV_HEX), gShellDebug1HiiHandle);\r
+        ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV_HEX), gShellDebug1HiiHandle, L"pci", Temp);\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
         goto Done;\r
       }\r
 \r
-      if (Bus > MAX_BUS_NUMBER) {\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, Temp);\r
+      if (Bus > PCI_MAX_BUS) {\r
+        ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellDebug1HiiHandle, L"pci", Temp);\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
         goto Done;\r
       }\r
     }\r
-    Temp = ShellCommandLineGetRawValue(Package, 2);\r
+\r
+    Temp = ShellCommandLineGetRawValue (Package, 2);\r
     if (Temp != NULL) {\r
       //\r
       // Input converted to hexadecimal number.\r
       //\r
       if (!EFI_ERROR (ShellConvertStringToUint64 (Temp, &RetVal, TRUE, TRUE))) {\r
-        Device = (UINT16) RetVal;\r
+        Device = (UINT16)RetVal;\r
       } else {\r
-        ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV_HEX), gShellDebug1HiiHandle);\r
+        ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV_HEX), gShellDebug1HiiHandle, L"pci", Temp);\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
         goto Done;\r
       }\r
 \r
-      if (Device > MAX_DEVICE_NUMBER){\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, Temp);\r
+      if (Device > PCI_MAX_DEVICE) {\r
+        ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellDebug1HiiHandle, L"pci", Temp);\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
         goto Done;\r
       }\r
     }\r
 \r
-    Temp = ShellCommandLineGetRawValue(Package, 3);\r
+    Temp = ShellCommandLineGetRawValue (Package, 3);\r
     if (Temp != NULL) {\r
       //\r
       // Input converted to hexadecimal number.\r
       //\r
       if (!EFI_ERROR (ShellConvertStringToUint64 (Temp, &RetVal, TRUE, TRUE))) {\r
-        Func = (UINT16) RetVal;\r
+        Func = (UINT16)RetVal;\r
       } else {\r
-        ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV_HEX), gShellDebug1HiiHandle);\r
+        ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV_HEX), gShellDebug1HiiHandle, L"pci", Temp);\r
+        ShellStatus = SHELL_INVALID_PARAMETER;\r
+        goto Done;\r
+      }\r
+\r
+      if (Func > PCI_MAX_FUNC) {\r
+        ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellDebug1HiiHandle, L"pci", Temp);\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
         goto Done;\r
       }\r
+    }\r
 \r
-      if (Func > MAX_FUNCTION_NUMBER){\r
-        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, Temp);\r
+    Temp = ShellCommandLineGetValue (Package, L"-ec");\r
+    if (Temp != NULL) {\r
+      //\r
+      // Input converted to hexadecimal number.\r
+      //\r
+      if (!EFI_ERROR (ShellConvertStringToUint64 (Temp, &RetVal, TRUE, TRUE))) {\r
+        ExtendedCapability = (UINT16)RetVal;\r
+      } else {\r
+        ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV_HEX), gShellDebug1HiiHandle, L"pci", Temp);\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
         goto Done;\r
       }\r
@@ -2383,40 +2836,45 @@ ShellCommandRunPci (
     // bus range covers the current bus\r
     //\r
     Status = PciFindProtocolInterface (\r
-              HandleBuf,\r
-              HandleCount,\r
-              Segment,\r
-              Bus,\r
-              &IoDev\r
-             );\r
+               HandleBuf,\r
+               HandleCount,\r
+               Segment,\r
+               Bus,\r
+               &IoDev\r
+               );\r
 \r
     if (EFI_ERROR (Status)) {\r
-      ShellPrintHiiEx(\r
-        -1, -1, NULL, STRING_TOKEN (STR_PCI_NO_FIND), gShellDebug1HiiHandle,\r
+      ShellPrintHiiEx (\r
+        -1,\r
+        -1,\r
+        NULL,\r
+        STRING_TOKEN (STR_PCI_NO_FIND),\r
+        gShellDebug1HiiHandle,\r
+        L"pci",\r
         Segment,\r
         Bus\r
-       );\r
+        );\r
       ShellStatus = SHELL_NOT_FOUND;\r
       goto Done;\r
     }\r
 \r
-    Address = CALC_EFI_PCI_ADDRESS (Bus, Device, Func, 0);\r
-    Status = IoDev->Pci.Read (\r
-                          IoDev,\r
-                          EfiPciWidthUint8,\r
-                          Address,\r
-                          sizeof (ConfigSpace),\r
-                          &ConfigSpace\r
-                         );\r
+    Address = EFI_PCI_ADDRESS (Bus, Device, Func, 0);\r
+    Status  = IoDev->Pci.Read (\r
+                           IoDev,\r
+                           EfiPciWidthUint8,\r
+                           Address,\r
+                           sizeof (ConfigSpace),\r
+                           &ConfigSpace\r
+                           );\r
 \r
     if (EFI_ERROR (Status)) {\r
-      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_PCI_NO_CFG), gShellDebug1HiiHandle, Status);\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI_NO_CFG), gShellDebug1HiiHandle, L"pci");\r
       ShellStatus = SHELL_ACCESS_DENIED;\r
       goto Done;\r
     }\r
 \r
     mConfigSpace = &ConfigSpace;\r
-    ShellPrintHiiEx(\r
+    ShellPrintHiiEx (\r
       -1,\r
       -1,\r
       NULL,\r
@@ -2430,7 +2888,7 @@ ShellCommandRunPci (
       Bus,\r
       Device,\r
       Func\r
-     );\r
+      );\r
 \r
     //\r
     // Dump standard header of configuration space\r
@@ -2438,7 +2896,7 @@ ShellCommandRunPci (
     SizeOfHeader = sizeof (ConfigSpace.Common) + sizeof (ConfigSpace.NonCommon);\r
 \r
     DumpHex (2, 0, SizeOfHeader, &ConfigSpace);\r
-    ShellPrintEx(-1,-1, L"\r\n");\r
+    ShellPrintEx (-1, -1, L"\r\n");\r
 \r
     //\r
     // Dump device dependent Part of configuration space\r
@@ -2448,22 +2906,67 @@ ShellCommandRunPci (
       SizeOfHeader,\r
       sizeof (ConfigSpace) - SizeOfHeader,\r
       ConfigSpace.Data\r
-     );\r
+      );\r
+\r
+    ExtendedConfigSpace = NULL;\r
+    ExtendedConfigSize  = 0;\r
+    PcieCapabilityPtr   = LocatePciCapability (&ConfigSpace, EFI_PCI_CAPABILITY_ID_PCIEXP);\r
+    if (PcieCapabilityPtr != 0) {\r
+      ExtendedConfigSize  = 0x1000 - EFI_PCIE_CAPABILITY_BASE_OFFSET;\r
+      ExtendedConfigSpace = AllocatePool (ExtendedConfigSize);\r
+      if (ExtendedConfigSpace != NULL) {\r
+        Status = IoDev->Pci.Read (\r
+                              IoDev,\r
+                              EfiPciWidthUint32,\r
+                              EFI_PCI_ADDRESS (Bus, Device, Func, EFI_PCIE_CAPABILITY_BASE_OFFSET),\r
+                              ExtendedConfigSize / sizeof (UINT32),\r
+                              ExtendedConfigSpace\r
+                              );\r
+        if (EFI_ERROR (Status)) {\r
+          SHELL_FREE_NON_NULL (ExtendedConfigSpace);\r
+        }\r
+      }\r
+    }\r
+\r
+    if ((ExtendedConfigSpace != NULL) && !ShellGetExecutionBreakFlag ()) {\r
+      //\r
+      // Print the PciEx extend space in raw bytes ( 0xFF-0xFFF)\r
+      //\r
+      ShellPrintEx (-1, -1, L"\r\n%HStart dumping PCIex extended configuration space (0x100 - 0xFFF).%N\r\n\r\n");\r
+\r
+      DumpHex (\r
+        2,\r
+        EFI_PCIE_CAPABILITY_BASE_OFFSET,\r
+        ExtendedConfigSize,\r
+        ExtendedConfigSpace\r
+        );\r
+    }\r
 \r
     //\r
     // If "-i" appears in command line, interpret data in configuration space\r
     //\r
     if (ExplainData) {\r
-      Status = PciExplainData (&ConfigSpace, Address, IoDev);\r
+      PciExplainPci (&ConfigSpace, Address, IoDev);\r
+      if ((ExtendedConfigSpace != NULL) && !ShellGetExecutionBreakFlag ()) {\r
+        PciExplainPciExpress (\r
+          (PCI_CAPABILITY_PCIEXP *)((UINT8 *)&ConfigSpace + PcieCapabilityPtr),\r
+          ExtendedConfigSpace,\r
+          ExtendedConfigSize,\r
+          ExtendedCapability\r
+          );\r
+      }\r
     }\r
   }\r
+\r
 Done:\r
   if (HandleBuf != NULL) {\r
     FreePool (HandleBuf);\r
   }\r
+\r
   if (Package != NULL) {\r
     ShellCommandLineFreeVarList (Package);\r
   }\r
+\r
   mConfigSpace = NULL;\r
   return ShellStatus;\r
 }\r
@@ -2486,19 +2989,19 @@ Done:
 **/\r
 EFI_STATUS\r
 PciFindProtocolInterface (\r
-  IN  EFI_HANDLE                            *HandleBuf,\r
-  IN  UINTN                                 HandleCount,\r
-  IN  UINT16                                Segment,\r
-  IN  UINT16                                Bus,\r
-  OUT EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL       **IoDev\r
+  IN  EFI_HANDLE                       *HandleBuf,\r
+  IN  UINTN                            HandleCount,\r
+  IN  UINT16                           Segment,\r
+  IN  UINT16                           Bus,\r
+  OUT EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL  **IoDev\r
   )\r
 {\r
-  UINTN                             Index;\r
-  EFI_STATUS                        Status;\r
-  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Descriptors;\r
-  UINT16                            MinBus;\r
-  UINT16                            MaxBus;\r
-  BOOLEAN                           IsEnd;\r
+  UINTN                              Index;\r
+  EFI_STATUS                         Status;\r
+  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR  *Descriptors;\r
+  UINT16                             MinBus;\r
+  UINT16                             MaxBus;\r
+  BOOLEAN                            IsEnd;\r
 \r
   //\r
   // Go through all handles, until the one meets the criteria is found\r
@@ -2508,11 +3011,12 @@ PciFindProtocolInterface (
     if (EFI_ERROR (Status)) {\r
       return Status;\r
     }\r
+\r
     //\r
     // When Descriptors == NULL, the Configuration() is not implemented,\r
     // so we only check the Segment number\r
     //\r
-    if (Descriptors == NULL && Segment == (*IoDev)->SegmentNumber) {\r
+    if ((Descriptors == NULL) && (Segment == (*IoDev)->SegmentNumber)) {\r
       return EFI_SUCCESS;\r
     }\r
 \r
@@ -2530,7 +3034,7 @@ PciFindProtocolInterface (
         break;\r
       }\r
 \r
-      if (MinBus <= Bus && MaxBus >= Bus) {\r
+      if ((MinBus <= Bus) && (MaxBus >= Bus)) {\r
         return EFI_SUCCESS;\r
       }\r
     }\r
@@ -2551,9 +3055,9 @@ PciFindProtocolInterface (
 **/\r
 EFI_STATUS\r
 PciGetProtocolAndResource (\r
-  IN  EFI_HANDLE                            Handle,\r
-  OUT EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL       **IoDev,\r
-  OUT EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR     **Descriptors\r
+  IN  EFI_HANDLE                         Handle,\r
+  OUT EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL    **IoDev,\r
+  OUT EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR  **Descriptors\r
   )\r
 {\r
   EFI_STATUS  Status;\r
@@ -2562,22 +3066,22 @@ PciGetProtocolAndResource (
   // Get inferface from protocol\r
   //\r
   Status = gBS->HandleProtocol (\r
-                Handle,\r
-                &gEfiPciRootBridgeIoProtocolGuid,\r
-                (VOID**)IoDev\r
-               );\r
+                  Handle,\r
+                  &gEfiPciRootBridgeIoProtocolGuid,\r
+                  (VOID **)IoDev\r
+                  );\r
 \r
   if (EFI_ERROR (Status)) {\r
     return Status;\r
   }\r
+\r
   //\r
   // Call Configuration() to get address space descriptors\r
   //\r
-  Status = (*IoDev)->Configuration (*IoDev, (VOID**)Descriptors);\r
+  Status = (*IoDev)->Configuration (*IoDev, (VOID **)Descriptors);\r
   if (Status == EFI_UNSUPPORTED) {\r
     *Descriptors = NULL;\r
     return EFI_SUCCESS;\r
-\r
   } else {\r
     return Status;\r
   }\r
@@ -2615,6 +3119,7 @@ PciGetNextBusRange (
     *MaxBus = PCI_MAX_BUS;\r
     return EFI_SUCCESS;\r
   }\r
+\r
   //\r
   // *Descriptors points to one or more address space descriptors, which\r
   // ends with a end tagged descriptor. Examine each of the descriptors,\r
@@ -2624,8 +3129,8 @@ PciGetNextBusRange (
 \r
   while ((*Descriptors)->Desc != ACPI_END_TAG_DESCRIPTOR) {\r
     if ((*Descriptors)->ResType == ACPI_ADDRESS_SPACE_TYPE_BUS) {\r
-      *MinBus = (UINT16) (*Descriptors)->AddrRangeMin;\r
-      *MaxBus = (UINT16) (*Descriptors)->AddrRangeMax;\r
+      *MinBus = (UINT16)(*Descriptors)->AddrRangeMin;\r
+      *MaxBus = (UINT16)(*Descriptors)->AddrRangeMax;\r
       (*Descriptors)++;\r
       return (EFI_SUCCESS);\r
     }\r
@@ -2648,20 +3153,16 @@ PciGetNextBusRange (
   @param[in] ConfigSpace     Data in PCI configuration space.\r
   @param[in] Address         Address used to access configuration space of this PCI device.\r
   @param[in] IoDev           Handle used to access configuration space of PCI device.\r
-\r
-  @retval EFI_SUCCESS     The command completed successfully.\r
 **/\r
-EFI_STATUS\r
-PciExplainData (\r
-  IN PCI_CONFIG_SPACE                       *ConfigSpace,\r
-  IN UINT64                                 Address,\r
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL        *IoDev\r
+VOID\r
+PciExplainPci (\r
+  IN PCI_CONFIG_SPACE                 *ConfigSpace,\r
+  IN UINT64                           Address,\r
+  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL  *IoDev\r
   )\r
 {\r
-  PCI_COMMON_HEADER *Common;\r
-  PCI_HEADER_TYPE   HeaderType;\r
-  EFI_STATUS        Status;\r
-  UINT8             CapPtr;\r
+  PCI_DEVICE_INDEPENDENT_REGION  *Common;\r
+  PCI_HEADER_TYPE                HeaderType;\r
 \r
   Common = &(ConfigSpace->Common);\r
 \r
@@ -2670,12 +3171,17 @@ PciExplainData (
   //\r
   // Print Vendor Id and Device Id\r
   //\r
-  ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_PCI_LINE_VID_DID), gShellDebug1HiiHandle,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
+    STRING_TOKEN (STR_PCI_LINE_VID_DID),\r
+    gShellDebug1HiiHandle,\r
     INDEX_OF (&(Common->VendorId)),\r
     Common->VendorId,\r
     INDEX_OF (&(Common->DeviceId)),\r
     Common->DeviceId\r
-   );\r
+    );\r
 \r
   //\r
   // Print register Command\r
@@ -2690,133 +3196,97 @@ PciExplainData (
   //\r
   // Print register Revision ID\r
   //\r
-  ShellPrintEx(-1, -1, L"\r\n");\r
-  ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_PCI_LINE_RID), gShellDebug1HiiHandle,\r
-    INDEX_OF (&(Common->RevisionId)),\r
-    Common->RevisionId\r
-   );\r
+  ShellPrintEx (-1, -1, L"\r\n");\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
+    STRING_TOKEN (STR_PCI_LINE_RID),\r
+    gShellDebug1HiiHandle,\r
+    INDEX_OF (&(Common->RevisionID)),\r
+    Common->RevisionID\r
+    );\r
 \r
   //\r
   // Print register BIST\r
   //\r
-  ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_PCI_LINE_BIST), gShellDebug1HiiHandle, INDEX_OF (&(Common->Bist)));\r
-  if ((Common->Bist & PCI_BIT_7) != 0) {\r
-    ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_PCI_LINE_CAP), gShellDebug1HiiHandle, 0x0f & Common->Bist);\r
+  ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI_LINE_BIST), gShellDebug1HiiHandle, INDEX_OF (&(Common->BIST)));\r
+  if ((Common->BIST & BIT7) != 0) {\r
+    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI_LINE_CAP), gShellDebug1HiiHandle, 0x0f & Common->BIST);\r
   } else {\r
-    ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_PCI_LINE_CAP_NO), gShellDebug1HiiHandle);\r
+    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI_LINE_CAP_NO), gShellDebug1HiiHandle);\r
   }\r
+\r
   //\r
   // Print register Cache Line Size\r
   //\r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_CACHE_LINE_SIZE),\r
     gShellDebug1HiiHandle,\r
     INDEX_OF (&(Common->CacheLineSize)),\r
     Common->CacheLineSize\r
-   );\r
+    );\r
 \r
   //\r
   // Print register Latency Timer\r
   //\r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_LATENCY_TIMER),\r
     gShellDebug1HiiHandle,\r
-    INDEX_OF (&(Common->PrimaryLatencyTimer)),\r
-    Common->PrimaryLatencyTimer\r
-   );\r
+    INDEX_OF (&(Common->LatencyTimer)),\r
+    Common->LatencyTimer\r
+    );\r
 \r
   //\r
   // Print register Header Type\r
   //\r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_HEADER_TYPE),\r
     gShellDebug1HiiHandle,\r
     INDEX_OF (&(Common->HeaderType)),\r
     Common->HeaderType\r
-   );\r
-\r
-  if ((Common->HeaderType & PCI_BIT_7) != 0) {\r
-    ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_MULTI_FUNCTION), gShellDebug1HiiHandle);\r
+    );\r
 \r
+  if ((Common->HeaderType & BIT7) != 0) {\r
+    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_MULTI_FUNCTION), gShellDebug1HiiHandle);\r
   } else {\r
-    ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_SINGLE_FUNCTION), gShellDebug1HiiHandle);\r
+    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_SINGLE_FUNCTION), gShellDebug1HiiHandle);\r
   }\r
 \r
-  HeaderType = (PCI_HEADER_TYPE)(UINT8) (Common->HeaderType & 0x7f);\r
+  HeaderType = (PCI_HEADER_TYPE)(UINT8)(Common->HeaderType & 0x7f);\r
   switch (HeaderType) {\r
-  case PciDevice:\r
-    ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_PCI_DEVICE), gShellDebug1HiiHandle);\r
-    break;\r
+    case PciDevice:\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_PCI_DEVICE), gShellDebug1HiiHandle);\r
+      break;\r
 \r
-  case PciP2pBridge:\r
-    ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_P2P_BRIDGE), gShellDebug1HiiHandle);\r
-    break;\r
+    case PciP2pBridge:\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_P2P_BRIDGE), gShellDebug1HiiHandle);\r
+      break;\r
 \r
-  case PciCardBusBridge:\r
-    ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_CARDBUS_BRIDGE), gShellDebug1HiiHandle);\r
-    break;\r
+    case PciCardBusBridge:\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_CARDBUS_BRIDGE), gShellDebug1HiiHandle);\r
+      break;\r
 \r
-  default:\r
-    ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_RESERVED), gShellDebug1HiiHandle);\r
-    HeaderType = PciUndefined;\r
+    default:\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_RESERVED), gShellDebug1HiiHandle);\r
+      HeaderType = PciUndefined;\r
   }\r
 \r
   //\r
   // Print register Class Code\r
   //\r
-  ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_CLASS), gShellDebug1HiiHandle);\r
-  PciPrintClassCode ((UINT8 *) Common->ClassCode, TRUE);\r
+  ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_CLASS), gShellDebug1HiiHandle);\r
+  PciPrintClassCode ((UINT8 *)Common->ClassCode, TRUE);\r
   ShellPrintEx (-1, -1, L"\r\n");\r
-\r
-  if (ShellGetExecutionBreakFlag()) {\r
-    return EFI_SUCCESS;\r
-  }\r
-\r
-  //\r
-  // Interpret remaining part of PCI configuration header depending on\r
-  // HeaderType\r
-  //\r
-  CapPtr  = 0;\r
-  Status  = EFI_SUCCESS;\r
-  switch (HeaderType) {\r
-  case PciDevice:\r
-    Status = PciExplainDeviceData (\r
-              &(ConfigSpace->NonCommon.Device),\r
-              Address,\r
-              IoDev\r
-             );\r
-    CapPtr = ConfigSpace->NonCommon.Device.CapabilitiesPtr;\r
-    break;\r
-\r
-  case PciP2pBridge:\r
-    Status = PciExplainBridgeData (\r
-              &(ConfigSpace->NonCommon.Bridge),\r
-              Address,\r
-              IoDev\r
-             );\r
-    CapPtr = ConfigSpace->NonCommon.Bridge.CapabilitiesPtr;\r
-    break;\r
-\r
-  case PciCardBusBridge:\r
-    Status = PciExplainCardBusData (\r
-              &(ConfigSpace->NonCommon.CardBus),\r
-              Address,\r
-              IoDev\r
-             );\r
-    CapPtr = ConfigSpace->NonCommon.CardBus.CapabilitiesPtr;\r
-    break;\r
-  case PciUndefined:\r
-  default:\r
-    break;\r
-  }\r
-  //\r
-  // If Status bit4 is 1, dump or explain capability structure\r
-  //\r
-  if ((Common->Status) & EFI_PCI_STATUS_CAPABILITY) {\r
-    PciExplainCapabilityStruct (IoDev, Address, CapPtr);\r
-  }\r
-\r
-  return Status;\r
 }\r
 \r
 /**\r
@@ -2830,9 +3300,9 @@ PciExplainData (
 **/\r
 EFI_STATUS\r
 PciExplainDeviceData (\r
-  IN PCI_DEVICE_HEADER                      *Device,\r
-  IN UINT64                                 Address,\r
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL        *IoDev\r
+  IN PCI_DEVICE_HEADER_TYPE_REGION    *Device,\r
+  IN UINT64                           Address,\r
+  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL  *IoDev\r
   )\r
 {\r
   UINTN       Index;\r
@@ -2845,10 +3315,10 @@ PciExplainDeviceData (
   // exist. If these no Bar for this function, print "none", otherwise\r
   // list detail information about this Bar.\r
   //\r
-  ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_BASE_ADDR), gShellDebug1HiiHandle, INDEX_OF (Device->Bar));\r
+  ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_BASE_ADDR), gShellDebug1HiiHandle, INDEX_OF (Device->Bar));\r
 \r
-  BarExist  = FALSE;\r
-  BarCount  = sizeof (Device->Bar) / sizeof (Device->Bar[0]);\r
+  BarExist = FALSE;\r
+  BarCount = sizeof (Device->Bar) / sizeof (Device->Bar[0]);\r
   for (Index = 0; Index < BarCount; Index++) {\r
     if (Device->Bar[Index] == 0) {\r
       continue;\r
@@ -2856,17 +3326,17 @@ PciExplainDeviceData (
 \r
     if (!BarExist) {\r
       BarExist = TRUE;\r
-      ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_START_TYPE), gShellDebug1HiiHandle);\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_START_TYPE), gShellDebug1HiiHandle);\r
       ShellPrintEx (-1, -1, L"  --------------------------------------------------------------------------");\r
     }\r
 \r
     Status = PciExplainBar (\r
-              &(Device->Bar[Index]),\r
-              &(mConfigSpace->Common.Command),\r
-              Address,\r
-              IoDev,\r
-              &Index\r
-             );\r
+               &(Device->Bar[Index]),\r
+               &(mConfigSpace->Common.Command),\r
+               Address,\r
+               IoDev,\r
+               &Index\r
+               );\r
 \r
     if (EFI_ERROR (Status)) {\r
       break;\r
@@ -2874,8 +3344,7 @@ PciExplainDeviceData (
   }\r
 \r
   if (!BarExist) {\r
-    ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_NONE), gShellDebug1HiiHandle);\r
-\r
+    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_NONE), gShellDebug1HiiHandle);\r
   } else {\r
     ShellPrintEx (-1, -1, L"\r\n  --------------------------------------------------------------------------");\r
   }\r
@@ -2883,87 +3352,114 @@ PciExplainDeviceData (
   //\r
   // Print register Expansion ROM Base Address\r
   //\r
-  if ((Device->ROMBar & PCI_BIT_0) == 0) {\r
-    ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_EXPANSION_ROM_DISABLED), gShellDebug1HiiHandle, INDEX_OF (&(Device->ROMBar)));\r
-\r
+  if ((Device->ExpansionRomBar & BIT0) == 0) {\r
+    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_EXPANSION_ROM_DISABLED), gShellDebug1HiiHandle, INDEX_OF (&(Device->ExpansionRomBar)));\r
   } else {\r
-    ShellPrintHiiEx(-1, -1, NULL,\r
+    ShellPrintHiiEx (\r
+      -1,\r
+      -1,\r
+      NULL,\r
       STRING_TOKEN (STR_PCI2_EXPANSION_ROM_BASE),\r
       gShellDebug1HiiHandle,\r
-      INDEX_OF (&(Device->ROMBar)),\r
-      Device->ROMBar\r
-     );\r
+      INDEX_OF (&(Device->ExpansionRomBar)),\r
+      Device->ExpansionRomBar\r
+      );\r
   }\r
+\r
   //\r
   // Print register Cardbus CIS ptr\r
   //\r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_CARDBUS_CIS),\r
     gShellDebug1HiiHandle,\r
-    INDEX_OF (&(Device->CardBusCISPtr)),\r
-    Device->CardBusCISPtr\r
-   );\r
+    INDEX_OF (&(Device->CISPtr)),\r
+    Device->CISPtr\r
+    );\r
 \r
   //\r
   // Print register Sub-vendor ID and subsystem ID\r
   //\r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_SUB_VENDOR_ID),\r
     gShellDebug1HiiHandle,\r
-    INDEX_OF (&(Device->SubVendorId)),\r
-    Device->SubVendorId\r
-   );\r
+    INDEX_OF (&(Device->SubsystemVendorID)),\r
+    Device->SubsystemVendorID\r
+    );\r
 \r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_SUBSYSTEM_ID),\r
     gShellDebug1HiiHandle,\r
-    INDEX_OF (&(Device->SubSystemId)),\r
-    Device->SubSystemId\r
-   );\r
+    INDEX_OF (&(Device->SubsystemID)),\r
+    Device->SubsystemID\r
+    );\r
 \r
   //\r
   // Print register Capabilities Ptr\r
   //\r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_CAPABILITIES_PTR),\r
     gShellDebug1HiiHandle,\r
-    INDEX_OF (&(Device->CapabilitiesPtr)),\r
-    Device->CapabilitiesPtr\r
-   );\r
+    INDEX_OF (&(Device->CapabilityPtr)),\r
+    Device->CapabilityPtr\r
+    );\r
 \r
   //\r
   // Print register Interrupt Line and interrupt pin\r
   //\r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_INTERRUPT_LINE),\r
     gShellDebug1HiiHandle,\r
     INDEX_OF (&(Device->InterruptLine)),\r
     Device->InterruptLine\r
-   );\r
+    );\r
 \r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_INTERRUPT_PIN),\r
     gShellDebug1HiiHandle,\r
     INDEX_OF (&(Device->InterruptPin)),\r
     Device->InterruptPin\r
-   );\r
+    );\r
 \r
   //\r
   // Print register Min_Gnt and Max_Lat\r
   //\r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_MIN_GNT),\r
     gShellDebug1HiiHandle,\r
     INDEX_OF (&(Device->MinGnt)),\r
     Device->MinGnt\r
-   );\r
+    );\r
 \r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_MAX_LAT),\r
     gShellDebug1HiiHandle,\r
     INDEX_OF (&(Device->MaxLat)),\r
     Device->MaxLat\r
-   );\r
+    );\r
 \r
   return EFI_SUCCESS;\r
 }\r
@@ -2979,9 +3475,9 @@ PciExplainDeviceData (
 **/\r
 EFI_STATUS\r
 PciExplainBridgeData (\r
-  IN  PCI_BRIDGE_HEADER                     *Bridge,\r
-  IN  UINT64                                Address,\r
-  IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL       *IoDev\r
+  IN  PCI_BRIDGE_CONTROL_REGISTER      *Bridge,\r
+  IN  UINT64                           Address,\r
+  IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL  *IoDev\r
   )\r
 {\r
   UINTN       Index;\r
@@ -2995,10 +3491,10 @@ PciExplainBridgeData (
   // exist. If these no Bar for this function, print "none", otherwise\r
   // list detail information about this Bar.\r
   //\r
-  ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_BASE_ADDRESS), gShellDebug1HiiHandle, INDEX_OF (&(Bridge->Bar)));\r
+  ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_BASE_ADDRESS), gShellDebug1HiiHandle, INDEX_OF (&(Bridge->Bar)));\r
 \r
-  BarExist  = FALSE;\r
-  BarCount  = sizeof (Bridge->Bar) / sizeof (Bridge->Bar[0]);\r
+  BarExist = FALSE;\r
+  BarCount = sizeof (Bridge->Bar) / sizeof (Bridge->Bar[0]);\r
 \r
   for (Index = 0; Index < BarCount; Index++) {\r
     if (Bridge->Bar[Index] == 0) {\r
@@ -3007,17 +3503,17 @@ PciExplainBridgeData (
 \r
     if (!BarExist) {\r
       BarExist = TRUE;\r
-      ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_START_TYPE_2), gShellDebug1HiiHandle);\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_START_TYPE_2), gShellDebug1HiiHandle);\r
       ShellPrintEx (-1, -1, L"  --------------------------------------------------------------------------");\r
     }\r
 \r
     Status = PciExplainBar (\r
-              &(Bridge->Bar[Index]),\r
-              &(mConfigSpace->Common.Command),\r
-              Address,\r
-              IoDev,\r
-              &Index\r
-             );\r
+               &(Bridge->Bar[Index]),\r
+               &(mConfigSpace->Common.Command),\r
+               Address,\r
+               IoDev,\r
+               &Index\r
+               );\r
 \r
     if (EFI_ERROR (Status)) {\r
       break;\r
@@ -3025,7 +3521,7 @@ PciExplainBridgeData (
   }\r
 \r
   if (!BarExist) {\r
-    ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_NONE), gShellDebug1HiiHandle);\r
+    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_NONE), gShellDebug1HiiHandle);\r
   } else {\r
     ShellPrintEx (-1, -1, L"\r\n  --------------------------------------------------------------------------");\r
   }\r
@@ -3033,43 +3529,52 @@ PciExplainBridgeData (
   //\r
   // Expansion register ROM Base Address\r
   //\r
-  if ((Bridge->ROMBar & PCI_BIT_0) == 0) {\r
-    ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_NO_EXPANSION_ROM), gShellDebug1HiiHandle, INDEX_OF (&(Bridge->ROMBar)));\r
-\r
+  if ((Bridge->ExpansionRomBAR & BIT0) == 0) {\r
+    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_NO_EXPANSION_ROM), gShellDebug1HiiHandle, INDEX_OF (&(Bridge->ExpansionRomBAR)));\r
   } else {\r
-    ShellPrintHiiEx(-1, -1, NULL,\r
+    ShellPrintHiiEx (\r
+      -1,\r
+      -1,\r
+      NULL,\r
       STRING_TOKEN (STR_PCI2_EXPANSION_ROM_BASE_2),\r
       gShellDebug1HiiHandle,\r
-      INDEX_OF (&(Bridge->ROMBar)),\r
-      Bridge->ROMBar\r
-     );\r
+      INDEX_OF (&(Bridge->ExpansionRomBAR)),\r
+      Bridge->ExpansionRomBAR\r
+      );\r
   }\r
+\r
   //\r
   // Print Bus Numbers(Primary, Secondary, and Subordinate\r
   //\r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_BUS_NUMBERS),\r
     gShellDebug1HiiHandle,\r
     INDEX_OF (&(Bridge->PrimaryBus)),\r
     INDEX_OF (&(Bridge->SecondaryBus)),\r
     INDEX_OF (&(Bridge->SubordinateBus))\r
-   );\r
+    );\r
 \r
   ShellPrintEx (-1, -1, L"               ------------------------------------------------------\r\n");\r
 \r
-  ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_BRIDGE), gShellDebug1HiiHandle, Bridge->PrimaryBus);\r
-  ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_BRIDGE), gShellDebug1HiiHandle, Bridge->SecondaryBus);\r
-  ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_BRIDGE), gShellDebug1HiiHandle, Bridge->SubordinateBus);\r
+  ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_BRIDGE), gShellDebug1HiiHandle, Bridge->PrimaryBus);\r
+  ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_BRIDGE), gShellDebug1HiiHandle, Bridge->SecondaryBus);\r
+  ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_BRIDGE), gShellDebug1HiiHandle, Bridge->SubordinateBus);\r
 \r
   //\r
   // Print register Secondary Latency Timer\r
   //\r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_SECONDARY_TIMER),\r
     gShellDebug1HiiHandle,\r
     INDEX_OF (&(Bridge->SecondaryLatencyTimer)),\r
     Bridge->SecondaryLatencyTimer\r
-   );\r
+    );\r
 \r
   //\r
   // Print register Secondary Status\r
@@ -3081,68 +3586,86 @@ PciExplainBridgeData (
   // types: I/O, memory, and pre-fetchable memory. For each resource type,\r
   // base and limit address are listed.\r
   //\r
-  ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_RESOURCE_TYPE), gShellDebug1HiiHandle);\r
+  ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_RESOURCE_TYPE), gShellDebug1HiiHandle);\r
   ShellPrintEx (-1, -1, L"----------------------------------------------------------------------\r\n");\r
 \r
   //\r
   // IO Base & Limit\r
   //\r
-  IoAddress32 = (Bridge->IoBaseUpper << 16 | Bridge->IoBase << 8);\r
+  IoAddress32  = (Bridge->IoBaseUpper16 << 16 | Bridge->IoBase << 8);\r
   IoAddress32 &= 0xfffff000;\r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_TWO_VARS),\r
     gShellDebug1HiiHandle,\r
     INDEX_OF (&(Bridge->IoBase)),\r
     IoAddress32\r
-   );\r
+    );\r
 \r
-  IoAddress32 = (Bridge->IoLimitUpper << 16 | Bridge->IoLimit << 8);\r
+  IoAddress32  = (Bridge->IoLimitUpper16 << 16 | Bridge->IoLimit << 8);\r
   IoAddress32 |= 0x00000fff;\r
-  ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_ONE_VAR), gShellDebug1HiiHandle, IoAddress32);\r
+  ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_ONE_VAR), gShellDebug1HiiHandle, IoAddress32);\r
 \r
   //\r
   // Memory Base & Limit\r
   //\r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_MEMORY),\r
     gShellDebug1HiiHandle,\r
     INDEX_OF (&(Bridge->MemoryBase)),\r
     (Bridge->MemoryBase << 16) & 0xfff00000\r
-   );\r
+    );\r
 \r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_ONE_VAR),\r
     gShellDebug1HiiHandle,\r
     (Bridge->MemoryLimit << 16) | 0x000fffff\r
-   );\r
+    );\r
 \r
   //\r
   // Pre-fetch-able Memory Base & Limit\r
   //\r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_PREFETCHABLE),\r
     gShellDebug1HiiHandle,\r
-    INDEX_OF (&(Bridge->PrefetchableMemBase)),\r
-    Bridge->PrefetchableBaseUpper,\r
-    (Bridge->PrefetchableMemBase << 16) & 0xfff00000\r
-   );\r
+    INDEX_OF (&(Bridge->PrefetchableMemoryBase)),\r
+    Bridge->PrefetchableBaseUpper32,\r
+    (Bridge->PrefetchableMemoryBase << 16) & 0xfff00000\r
+    );\r
 \r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_TWO_VARS_2),\r
     gShellDebug1HiiHandle,\r
-    Bridge->PrefetchableLimitUpper,\r
-    (Bridge->PrefetchableMemLimit << 16) | 0x000fffff\r
-   );\r
+    Bridge->PrefetchableLimitUpper32,\r
+    (Bridge->PrefetchableMemoryLimit << 16) | 0x000fffff\r
+    );\r
 \r
   //\r
   // Print register Capabilities Pointer\r
   //\r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_CAPABILITIES_PTR_2),\r
     gShellDebug1HiiHandle,\r
-    INDEX_OF (&(Bridge->CapabilitiesPtr)),\r
-    Bridge->CapabilitiesPtr\r
-   );\r
+    INDEX_OF (&(Bridge->CapabilityPtr)),\r
+    Bridge->CapabilityPtr\r
+    );\r
 \r
   //\r
   // Print register Bridge Control\r
@@ -3152,19 +3675,25 @@ PciExplainBridgeData (
   //\r
   // Print register Interrupt Line & PIN\r
   //\r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_INTERRUPT_LINE_2),\r
     gShellDebug1HiiHandle,\r
     INDEX_OF (&(Bridge->InterruptLine)),\r
     Bridge->InterruptLine\r
-   );\r
+    );\r
 \r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_INTERRUPT_PIN),\r
     gShellDebug1HiiHandle,\r
     INDEX_OF (&(Bridge->InterruptPin)),\r
     Bridge->InterruptPin\r
-   );\r
+    );\r
 \r
   return EFI_SUCCESS;\r
 }\r
@@ -3182,75 +3711,71 @@ PciExplainBridgeData (
 **/\r
 EFI_STATUS\r
 PciExplainBar (\r
-  IN UINT32                                 *Bar,\r
-  IN UINT16                                 *Command,\r
-  IN UINT64                                 Address,\r
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL        *IoDev,\r
-  IN OUT UINTN                              *Index\r
+  IN UINT32                           *Bar,\r
+  IN UINT16                           *Command,\r
+  IN UINT64                           Address,\r
+  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL  *IoDev,\r
+  IN OUT UINTN                        *Index\r
   )\r
 {\r
-  UINT16  OldCommand;\r
-  UINT16  NewCommand;\r
-  UINT64  Bar64;\r
-  UINT32  OldBar32;\r
-  UINT32  NewBar32;\r
-  UINT64  OldBar64;\r
-  UINT64  NewBar64;\r
-  BOOLEAN IsMem;\r
-  BOOLEAN IsBar32;\r
-  UINT64  RegAddress;\r
-\r
-  IsBar32   = TRUE;\r
-  Bar64     = 0;\r
-  NewBar32  = 0;\r
-  NewBar64  = 0;\r
+  UINT16   OldCommand;\r
+  UINT16   NewCommand;\r
+  UINT64   Bar64;\r
+  UINT32   OldBar32;\r
+  UINT32   NewBar32;\r
+  UINT64   OldBar64;\r
+  UINT64   NewBar64;\r
+  BOOLEAN  IsMem;\r
+  BOOLEAN  IsBar32;\r
+  UINT64   RegAddress;\r
+\r
+  IsBar32  = TRUE;\r
+  Bar64    = 0;\r
+  NewBar32 = 0;\r
+  NewBar64 = 0;\r
 \r
   //\r
   // According the bar type, list detail about this bar, for example: 32 or\r
   // 64 bits; pre-fetchable or not.\r
   //\r
-  if ((*Bar & PCI_BIT_0) == 0) {\r
+  if ((*Bar & BIT0) == 0) {\r
     //\r
     // This bar is of memory type\r
     //\r
     IsMem = TRUE;\r
 \r
-    if ((*Bar & PCI_BIT_1) == 0 && (*Bar & PCI_BIT_2) == 0) {\r
-      ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_BAR), gShellDebug1HiiHandle, *Bar & 0xfffffff0);\r
-      ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_MEM), gShellDebug1HiiHandle);\r
-      ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_32_BITS), gShellDebug1HiiHandle);\r
-\r
-    } else if ((*Bar & PCI_BIT_1) == 0 && (*Bar & PCI_BIT_2) != 0) {\r
+    if (((*Bar & BIT1) == 0) && ((*Bar & BIT2) == 0)) {\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_BAR), gShellDebug1HiiHandle, *Bar & 0xfffffff0);\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_MEM), gShellDebug1HiiHandle);\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_32_BITS), gShellDebug1HiiHandle);\r
+    } else if (((*Bar & BIT1) == 0) && ((*Bar & BIT2) != 0)) {\r
       Bar64 = 0x0;\r
       CopyMem (&Bar64, Bar, sizeof (UINT64));\r
-      ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_ONE_VAR_2), gShellDebug1HiiHandle, (UINT32) RShiftU64 ((Bar64 & 0xfffffffffffffff0ULL), 32));\r
-      ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_ONE_VAR_3), gShellDebug1HiiHandle, (UINT32) (Bar64 & 0xfffffffffffffff0ULL));\r
-      ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_MEM), gShellDebug1HiiHandle);\r
-      ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_64_BITS), gShellDebug1HiiHandle);\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_ONE_VAR_2), gShellDebug1HiiHandle, (UINT32)RShiftU64 ((Bar64 & 0xfffffffffffffff0ULL), 32));\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_ONE_VAR_3), gShellDebug1HiiHandle, (UINT32)(Bar64 & 0xfffffffffffffff0ULL));\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_MEM), gShellDebug1HiiHandle);\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_64_BITS), gShellDebug1HiiHandle);\r
       IsBar32 = FALSE;\r
       *Index += 1;\r
-\r
     } else {\r
       //\r
       // Reserved\r
       //\r
-      ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_BAR), gShellDebug1HiiHandle, *Bar & 0xfffffff0);\r
-      ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_MEM_2), gShellDebug1HiiHandle);\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_BAR), gShellDebug1HiiHandle, *Bar & 0xfffffff0);\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_MEM_2), gShellDebug1HiiHandle);\r
     }\r
 \r
-    if ((*Bar & PCI_BIT_3) == 0) {\r
-      ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_NO), gShellDebug1HiiHandle);\r
-\r
+    if ((*Bar & BIT3) == 0) {\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_NO), gShellDebug1HiiHandle);\r
     } else {\r
-      ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_YES), gShellDebug1HiiHandle);\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_YES), gShellDebug1HiiHandle);\r
     }\r
-\r
   } else {\r
     //\r
     // This bar is of io type\r
     //\r
     IsMem = FALSE;\r
-    ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_ONE_VAR_4), gShellDebug1HiiHandle, *Bar & 0xfffffffc);\r
+    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_ONE_VAR_4), gShellDebug1HiiHandle, *Bar & 0xfffffffc);\r
     ShellPrintEx (-1, -1, L"I/O                               ");\r
   }\r
 \r
@@ -3264,9 +3789,9 @@ PciExplainBar (
   //\r
   // Disable io & mem access\r
   //\r
-  OldCommand  = *Command;\r
-  NewCommand  = (UINT16) (OldCommand & 0xfffc);\r
-  RegAddress  = Address | INDEX_OF (Command);\r
+  OldCommand = *Command;\r
+  NewCommand = (UINT16)(OldCommand & 0xfffc);\r
+  RegAddress = Address | INDEX_OF (Command);\r
   IoDev->Pci.Write (IoDev, EfiPciWidthUint16, RegAddress, 1, &NewCommand);\r
 \r
   RegAddress = Address | INDEX_OF (Bar);\r
@@ -3275,24 +3800,22 @@ PciExplainBar (
   // Read after write the BAR to get the size\r
   //\r
   if (IsBar32) {\r
-    OldBar32  = *Bar;\r
-    NewBar32  = 0xffffffff;\r
+    OldBar32 = *Bar;\r
+    NewBar32 = 0xffffffff;\r
 \r
     IoDev->Pci.Write (IoDev, EfiPciWidthUint32, RegAddress, 1, &NewBar32);\r
     IoDev->Pci.Read (IoDev, EfiPciWidthUint32, RegAddress, 1, &NewBar32);\r
     IoDev->Pci.Write (IoDev, EfiPciWidthUint32, RegAddress, 1, &OldBar32);\r
 \r
     if (IsMem) {\r
-      NewBar32  = NewBar32 & 0xfffffff0;\r
-      NewBar32  = (~NewBar32) + 1;\r
-\r
+      NewBar32 = NewBar32 & 0xfffffff0;\r
+      NewBar32 = (~NewBar32) + 1;\r
     } else {\r
-      NewBar32  = NewBar32 & 0xfffffffc;\r
-      NewBar32  = (~NewBar32) + 1;\r
-      NewBar32  = NewBar32 & 0x0000ffff;\r
+      NewBar32 = NewBar32 & 0xfffffffc;\r
+      NewBar32 = (~NewBar32) + 1;\r
+      NewBar32 = NewBar32 & 0x0000ffff;\r
     }\r
   } else {\r
-\r
     OldBar64 = 0x0;\r
     CopyMem (&OldBar64, Bar, sizeof (UINT64));\r
     NewBar64 = 0xffffffffffffffffULL;\r
@@ -3302,15 +3825,15 @@ PciExplainBar (
     IoDev->Pci.Write (IoDev, EfiPciWidthUint32, RegAddress, 2, &OldBar64);\r
 \r
     if (IsMem) {\r
-      NewBar64  = NewBar64 & 0xfffffffffffffff0ULL;\r
-      NewBar64  = (~NewBar64) + 1;\r
-\r
+      NewBar64 = NewBar64 & 0xfffffffffffffff0ULL;\r
+      NewBar64 = (~NewBar64) + 1;\r
     } else {\r
-      NewBar64  = NewBar64 & 0xfffffffffffffffcULL;\r
-      NewBar64  = (~NewBar64) + 1;\r
-      NewBar64  = NewBar64 & 0x000000000000ffff;\r
+      NewBar64 = NewBar64 & 0xfffffffffffffffcULL;\r
+      NewBar64 = (~NewBar64) + 1;\r
+      NewBar64 = NewBar64 & 0x000000000000ffff;\r
     }\r
   }\r
+\r
   //\r
   // Enable io & mem access\r
   //\r
@@ -3319,24 +3842,25 @@ PciExplainBar (
 \r
   if (IsMem) {\r
     if (IsBar32) {\r
-      ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_NEWBAR_32), gShellDebug1HiiHandle, NewBar32);\r
-      ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_NEWBAR_32_2), gShellDebug1HiiHandle, NewBar32 + (*Bar & 0xfffffff0) - 1);\r
-\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_NEWBAR_32), gShellDebug1HiiHandle, NewBar32);\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_NEWBAR_32_2), gShellDebug1HiiHandle, NewBar32 + (*Bar & 0xfffffff0) - 1);\r
     } else {\r
-      ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_RSHIFT), gShellDebug1HiiHandle, (UINT32) RShiftU64 (NewBar64, 32));\r
-      ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_RSHIFT), gShellDebug1HiiHandle, (UINT32) NewBar64);\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_RSHIFT), gShellDebug1HiiHandle, (UINT32)RShiftU64 (NewBar64, 32));\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_RSHIFT), gShellDebug1HiiHandle, (UINT32)NewBar64);\r
       ShellPrintEx (-1, -1, L"  ");\r
-      ShellPrintHiiEx(-1, -1, NULL,\r
+      ShellPrintHiiEx (\r
+        -1,\r
+        -1,\r
+        NULL,\r
         STRING_TOKEN (STR_PCI2_RSHIFT),\r
         gShellDebug1HiiHandle,\r
-        (UINT32) RShiftU64 ((NewBar64 + (Bar64 & 0xfffffffffffffff0ULL) - 1), 32)\r
-       );\r
-      ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_RSHIFT), gShellDebug1HiiHandle, (UINT32) (NewBar64 + (Bar64 & 0xfffffffffffffff0ULL) - 1));\r
-\r
+        (UINT32)RShiftU64 ((NewBar64 + (Bar64 & 0xfffffffffffffff0ULL) - 1), 32)\r
+        );\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_RSHIFT), gShellDebug1HiiHandle, (UINT32)(NewBar64 + (Bar64 & 0xfffffffffffffff0ULL) - 1));\r
     }\r
   } else {\r
-    ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_NEWBAR_32_3), gShellDebug1HiiHandle, NewBar32);\r
-    ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_NEWBAR_32_4), gShellDebug1HiiHandle, NewBar32 + (*Bar & 0xfffffffc) - 1);\r
+    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_NEWBAR_32_3), gShellDebug1HiiHandle, NewBar32);\r
+    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_NEWBAR_32_4), gShellDebug1HiiHandle, NewBar32 + (*Bar & 0xfffffffc) - 1);\r
   }\r
 \r
   return EFI_SUCCESS;\r
@@ -3353,20 +3877,23 @@ PciExplainBar (
 **/\r
 EFI_STATUS\r
 PciExplainCardBusData (\r
-  IN PCI_CARDBUS_HEADER                     *CardBus,\r
-  IN UINT64                                 Address,\r
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL        *IoDev\r
+  IN PCI_CARDBUS_CONTROL_REGISTER     *CardBus,\r
+  IN UINT64                           Address,\r
+  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL  *IoDev\r
   )\r
 {\r
   BOOLEAN           Io32Bit;\r
   PCI_CARDBUS_DATA  *CardBusData;\r
 \r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_CARDBUS_SOCKET),\r
     gShellDebug1HiiHandle,\r
     INDEX_OF (&(CardBus->CardBusSocketReg)),\r
     CardBus->CardBusSocketReg\r
-   );\r
+    );\r
 \r
   //\r
   // Print Secondary Status\r
@@ -3377,85 +3904,106 @@ PciExplainCardBusData (
   // Print Bus Numbers(Primary bus number, CardBus bus number, and\r
   // Subordinate bus number\r
   //\r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_BUS_NUMBERS_2),\r
     gShellDebug1HiiHandle,\r
     INDEX_OF (&(CardBus->PciBusNumber)),\r
     INDEX_OF (&(CardBus->CardBusBusNumber)),\r
     INDEX_OF (&(CardBus->SubordinateBusNumber))\r
-   );\r
+    );\r
 \r
   ShellPrintEx (-1, -1, L"               ------------------------------------------------------\r\n");\r
 \r
-  ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_CARDBUS), gShellDebug1HiiHandle, CardBus->PciBusNumber);\r
-  ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_CARDBUS_2), gShellDebug1HiiHandle, CardBus->CardBusBusNumber);\r
-  ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_CARDBUS_3), gShellDebug1HiiHandle, CardBus->SubordinateBusNumber);\r
+  ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_CARDBUS), gShellDebug1HiiHandle, CardBus->PciBusNumber);\r
+  ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_CARDBUS_2), gShellDebug1HiiHandle, CardBus->CardBusBusNumber);\r
+  ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_CARDBUS_3), gShellDebug1HiiHandle, CardBus->SubordinateBusNumber);\r
 \r
   //\r
   // Print CardBus Latency Timer\r
   //\r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_CARDBUS_LATENCY),\r
     gShellDebug1HiiHandle,\r
     INDEX_OF (&(CardBus->CardBusLatencyTimer)),\r
     CardBus->CardBusLatencyTimer\r
-   );\r
+    );\r
 \r
   //\r
   // Print Memory/Io ranges this cardbus bridge forwards\r
   //\r
-  ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_RESOURCE_TYPE_2), gShellDebug1HiiHandle);\r
+  ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_RESOURCE_TYPE_2), gShellDebug1HiiHandle);\r
   ShellPrintEx (-1, -1, L"----------------------------------------------------------------------\r\n");\r
 \r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_MEM_3),\r
     gShellDebug1HiiHandle,\r
     INDEX_OF (&(CardBus->MemoryBase0)),\r
-    CardBus->BridgeControl & PCI_BIT_8 ? L"    Prefetchable" : L"Non-Prefetchable",\r
+    CardBus->BridgeControl & BIT8 ? L"    Prefetchable" : L"Non-Prefetchable",\r
     CardBus->MemoryBase0 & 0xfffff000,\r
     CardBus->MemoryLimit0 | 0x00000fff\r
-   );\r
+    );\r
 \r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_MEM_3),\r
     gShellDebug1HiiHandle,\r
     INDEX_OF (&(CardBus->MemoryBase1)),\r
-    CardBus->BridgeControl & PCI_BIT_9 ? L"    Prefetchable" : L"Non-Prefetchable",\r
+    CardBus->BridgeControl & BIT9 ? L"    Prefetchable" : L"Non-Prefetchable",\r
     CardBus->MemoryBase1 & 0xfffff000,\r
     CardBus->MemoryLimit1 | 0x00000fff\r
-   );\r
+    );\r
 \r
-  Io32Bit = (BOOLEAN) (CardBus->IoBase0 & PCI_BIT_0);\r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  Io32Bit = (BOOLEAN)(CardBus->IoBase0 & BIT0);\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_IO_2),\r
     gShellDebug1HiiHandle,\r
     INDEX_OF (&(CardBus->IoBase0)),\r
     Io32Bit ? L"          32 bit" : L"          16 bit",\r
     CardBus->IoBase0 & (Io32Bit ? 0xfffffffc : 0x0000fffc),\r
     (CardBus->IoLimit0 & (Io32Bit ? 0xffffffff : 0x0000ffff)) | 0x00000003\r
-   );\r
+    );\r
 \r
-  Io32Bit = (BOOLEAN) (CardBus->IoBase1 & PCI_BIT_0);\r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  Io32Bit = (BOOLEAN)(CardBus->IoBase1 & BIT0);\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_IO_2),\r
     gShellDebug1HiiHandle,\r
     INDEX_OF (&(CardBus->IoBase1)),\r
     Io32Bit ? L"          32 bit" : L"          16 bit",\r
     CardBus->IoBase1 & (Io32Bit ? 0xfffffffc : 0x0000fffc),\r
     (CardBus->IoLimit1 & (Io32Bit ? 0xffffffff : 0x0000ffff)) | 0x00000003\r
-   );\r
+    );\r
 \r
   //\r
   // Print register Interrupt Line & PIN\r
   //\r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_INTERRUPT_LINE_3),\r
     gShellDebug1HiiHandle,\r
     INDEX_OF (&(CardBus->InterruptLine)),\r
     CardBus->InterruptLine,\r
     INDEX_OF (&(CardBus->InterruptPin)),\r
     CardBus->InterruptPin\r
-   );\r
+    );\r
 \r
   //\r
   // Print register Bridge Control\r
@@ -3467,23 +4015,29 @@ PciExplainCardBusData (
   // bridge. Fields include: Sub VendorId, Subsystem ID, and Legacy Mode Base\r
   // Address.\r
   //\r
-  CardBusData = (PCI_CARDBUS_DATA *) ((UINT8 *) CardBus + sizeof (PCI_CARDBUS_HEADER));\r
+  CardBusData = (PCI_CARDBUS_DATA *)((UINT8 *)CardBus + sizeof (PCI_CARDBUS_CONTROL_REGISTER));\r
 \r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_SUB_VENDOR_ID_2),\r
     gShellDebug1HiiHandle,\r
     INDEX_OF (&(CardBusData->SubVendorId)),\r
     CardBusData->SubVendorId,\r
     INDEX_OF (&(CardBusData->SubSystemId)),\r
     CardBusData->SubSystemId\r
-   );\r
+    );\r
 \r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_OPTIONAL),\r
     gShellDebug1HiiHandle,\r
     INDEX_OF (&(CardBusData->LegacyBase)),\r
     CardBusData->LegacyBase\r
-   );\r
+    );\r
 \r
   return EFI_SUCCESS;\r
 }\r
@@ -3501,88 +4055,100 @@ PciExplainCardBusData (
 **/\r
 EFI_STATUS\r
 PciExplainStatus (\r
-  IN UINT16                                 *Status,\r
-  IN BOOLEAN                                MainStatus,\r
-  IN PCI_HEADER_TYPE                        HeaderType\r
+  IN UINT16           *Status,\r
+  IN BOOLEAN          MainStatus,\r
+  IN PCI_HEADER_TYPE  HeaderType\r
   )\r
 {\r
   if (MainStatus) {\r
-    ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_STATUS), gShellDebug1HiiHandle, INDEX_OF (Status), *Status);\r
-\r
+    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_STATUS), gShellDebug1HiiHandle, INDEX_OF (Status), *Status);\r
   } else {\r
-    ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_SECONDARY_STATUS), gShellDebug1HiiHandle, INDEX_OF (Status), *Status);\r
+    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_SECONDARY_STATUS), gShellDebug1HiiHandle, INDEX_OF (Status), *Status);\r
   }\r
 \r
-  ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_NEW_CAPABILITIES), gShellDebug1HiiHandle, (*Status & PCI_BIT_4) != 0);\r
+  ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_NEW_CAPABILITIES), gShellDebug1HiiHandle, (*Status & BIT4) != 0);\r
 \r
   //\r
   // Bit 5 is meaningless for CardBus Bridge\r
   //\r
   if (HeaderType == PciCardBusBridge) {\r
-    ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_66_CAPABLE), gShellDebug1HiiHandle, (*Status & PCI_BIT_5) != 0);\r
-\r
+    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_66_CAPABLE), gShellDebug1HiiHandle, (*Status & BIT5) != 0);\r
   } else {\r
-    ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_66_CAPABLE_2), gShellDebug1HiiHandle, (*Status & PCI_BIT_5) != 0);\r
+    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_66_CAPABLE_2), gShellDebug1HiiHandle, (*Status & BIT5) != 0);\r
   }\r
 \r
-  ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_FAST_BACK), gShellDebug1HiiHandle, (*Status & PCI_BIT_7) != 0);\r
+  ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_FAST_BACK), gShellDebug1HiiHandle, (*Status & BIT7) != 0);\r
 \r
-  ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_MASTER_DATA), gShellDebug1HiiHandle, (*Status & PCI_BIT_8) != 0);\r
+  ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_MASTER_DATA), gShellDebug1HiiHandle, (*Status & BIT8) != 0);\r
   //\r
   // Bit 9 and bit 10 together decides the DEVSEL timing\r
   //\r
-  ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_DEVSEL_TIMING), gShellDebug1HiiHandle);\r
-  if ((*Status & PCI_BIT_9) == 0 && (*Status & PCI_BIT_10) == 0) {\r
-    ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_FAST), gShellDebug1HiiHandle);\r
-\r
-  } else if ((*Status & PCI_BIT_9) != 0 && (*Status & PCI_BIT_10) == 0) {\r
-    ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_MEDIUM), gShellDebug1HiiHandle);\r
-\r
-  } else if ((*Status & PCI_BIT_9) == 0 && (*Status & PCI_BIT_10) != 0) {\r
-    ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_SLOW), gShellDebug1HiiHandle);\r
-\r
+  ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_DEVSEL_TIMING), gShellDebug1HiiHandle);\r
+  if (((*Status & BIT9) == 0) && ((*Status & BIT10) == 0)) {\r
+    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_FAST), gShellDebug1HiiHandle);\r
+  } else if (((*Status & BIT9) != 0) && ((*Status & BIT10) == 0)) {\r
+    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_MEDIUM), gShellDebug1HiiHandle);\r
+  } else if (((*Status & BIT9) == 0) && ((*Status & BIT10) != 0)) {\r
+    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_SLOW), gShellDebug1HiiHandle);\r
   } else {\r
-    ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_RESERVED_2), gShellDebug1HiiHandle);\r
+    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_RESERVED_2), gShellDebug1HiiHandle);\r
   }\r
 \r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_SIGNALED_TARGET),\r
     gShellDebug1HiiHandle,\r
-    (*Status & PCI_BIT_11) != 0\r
-   );\r
+    (*Status & BIT11) != 0\r
+    );\r
 \r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_RECEIVED_TARGET),\r
     gShellDebug1HiiHandle,\r
-    (*Status & PCI_BIT_12) != 0\r
-   );\r
+    (*Status & BIT12) != 0\r
+    );\r
 \r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_RECEIVED_MASTER),\r
     gShellDebug1HiiHandle,\r
-    (*Status & PCI_BIT_13) != 0\r
-   );\r
+    (*Status & BIT13) != 0\r
+    );\r
 \r
   if (MainStatus) {\r
-    ShellPrintHiiEx(-1, -1, NULL,\r
+    ShellPrintHiiEx (\r
+      -1,\r
+      -1,\r
+      NULL,\r
       STRING_TOKEN (STR_PCI2_SIGNALED_ERROR),\r
       gShellDebug1HiiHandle,\r
-      (*Status & PCI_BIT_14) != 0\r
-     );\r
-\r
+      (*Status & BIT14) != 0\r
+      );\r
   } else {\r
-    ShellPrintHiiEx(-1, -1, NULL,\r
+    ShellPrintHiiEx (\r
+      -1,\r
+      -1,\r
+      NULL,\r
       STRING_TOKEN (STR_PCI2_RECEIVED_ERROR),\r
       gShellDebug1HiiHandle,\r
-      (*Status & PCI_BIT_14) != 0\r
-     );\r
+      (*Status & BIT14) != 0\r
+      );\r
   }\r
 \r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_DETECTED_ERROR),\r
     gShellDebug1HiiHandle,\r
-    (*Status & PCI_BIT_15) != 0\r
-   );\r
+    (*Status & BIT15) != 0\r
+    );\r
 \r
   return EFI_SUCCESS;\r
 }\r
@@ -3596,76 +4162,106 @@ PciExplainStatus (
 **/\r
 EFI_STATUS\r
 PciExplainCommand (\r
-  IN UINT16                                 *Command\r
+  IN UINT16  *Command\r
   )\r
 {\r
   //\r
   // Print the binary value of register Command\r
   //\r
-  ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_PCI2_COMMAND), gShellDebug1HiiHandle, INDEX_OF (Command), *Command);\r
+  ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PCI2_COMMAND), gShellDebug1HiiHandle, INDEX_OF (Command), *Command);\r
 \r
   //\r
   // Explain register Command bit by bit\r
   //\r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_SPACE_ACCESS_DENIED),\r
     gShellDebug1HiiHandle,\r
-    (*Command & PCI_BIT_0) != 0\r
-   );\r
+    (*Command & BIT0) != 0\r
+    );\r
 \r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_MEMORY_SPACE),\r
     gShellDebug1HiiHandle,\r
-    (*Command & PCI_BIT_1) != 0\r
-   );\r
+    (*Command & BIT1) != 0\r
+    );\r
 \r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_BEHAVE_BUS_MASTER),\r
     gShellDebug1HiiHandle,\r
-    (*Command & PCI_BIT_2) != 0\r
-   );\r
+    (*Command & BIT2) != 0\r
+    );\r
 \r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_MONITOR_SPECIAL_CYCLE),\r
     gShellDebug1HiiHandle,\r
-    (*Command & PCI_BIT_3) != 0\r
-   );\r
+    (*Command & BIT3) != 0\r
+    );\r
 \r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_MEM_WRITE_INVALIDATE),\r
     gShellDebug1HiiHandle,\r
-    (*Command & PCI_BIT_4) != 0\r
-   );\r
+    (*Command & BIT4) != 0\r
+    );\r
 \r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_PALETTE_SNOOPING),\r
     gShellDebug1HiiHandle,\r
-    (*Command & PCI_BIT_5) != 0\r
-   );\r
+    (*Command & BIT5) != 0\r
+    );\r
 \r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_ASSERT_PERR),\r
     gShellDebug1HiiHandle,\r
-    (*Command & PCI_BIT_6) != 0\r
-   );\r
+    (*Command & BIT6) != 0\r
+    );\r
 \r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_DO_ADDR_STEPPING),\r
     gShellDebug1HiiHandle,\r
-    (*Command & PCI_BIT_7) != 0\r
-   );\r
+    (*Command & BIT7) != 0\r
+    );\r
 \r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_SERR_DRIVER),\r
     gShellDebug1HiiHandle,\r
-    (*Command & PCI_BIT_8) != 0\r
-   );\r
+    (*Command & BIT8) != 0\r
+    );\r
 \r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_FAST_BACK_2),\r
     gShellDebug1HiiHandle,\r
-    (*Command & PCI_BIT_9) != 0\r
-   );\r
+    (*Command & BIT9) != 0\r
+    );\r
 \r
   return EFI_SUCCESS;\r
 }\r
@@ -3680,146 +4276,201 @@ PciExplainCommand (
 **/\r
 EFI_STATUS\r
 PciExplainBridgeControl (\r
-  IN UINT16                                 *BridgeControl,\r
-  IN PCI_HEADER_TYPE                        HeaderType\r
+  IN UINT16           *BridgeControl,\r
+  IN PCI_HEADER_TYPE  HeaderType\r
   )\r
 {\r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_BRIDGE_CONTROL),\r
     gShellDebug1HiiHandle,\r
     INDEX_OF (BridgeControl),\r
     *BridgeControl\r
-   );\r
+    );\r
 \r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_PARITY_ERROR),\r
     gShellDebug1HiiHandle,\r
-    (*BridgeControl & PCI_BIT_0) != 0\r
-   );\r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+    (*BridgeControl & BIT0) != 0\r
+    );\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_SERR_ENABLE),\r
     gShellDebug1HiiHandle,\r
-    (*BridgeControl & PCI_BIT_1) != 0\r
-   );\r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+    (*BridgeControl & BIT1) != 0\r
+    );\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_ISA_ENABLE),\r
     gShellDebug1HiiHandle,\r
-    (*BridgeControl & PCI_BIT_2) != 0\r
-   );\r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+    (*BridgeControl & BIT2) != 0\r
+    );\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_VGA_ENABLE),\r
     gShellDebug1HiiHandle,\r
-    (*BridgeControl & PCI_BIT_3) != 0\r
-   );\r
-  ShellPrintHiiEx(-1, -1, NULL,\r
+    (*BridgeControl & BIT3) != 0\r
+    );\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
     STRING_TOKEN (STR_PCI2_MASTER_ABORT),\r
     gShellDebug1HiiHandle,\r
-    (*BridgeControl & PCI_BIT_5) != 0\r
-   );\r
+    (*BridgeControl & BIT5) != 0\r
+    );\r
 \r
   //\r
   // Register Bridge Control has some slight differences between P2P bridge\r
   // and Cardbus bridge from bit 6 to bit 11.\r
   //\r
   if (HeaderType == PciP2pBridge) {\r
-    ShellPrintHiiEx(-1, -1, NULL,\r
+    ShellPrintHiiEx (\r
+      -1,\r
+      -1,\r
+      NULL,\r
       STRING_TOKEN (STR_PCI2_SECONDARY_BUS_RESET),\r
       gShellDebug1HiiHandle,\r
-      (*BridgeControl & PCI_BIT_6) != 0\r
-     );\r
-    ShellPrintHiiEx(-1, -1, NULL,\r
+      (*BridgeControl & BIT6) != 0\r
+      );\r
+    ShellPrintHiiEx (\r
+      -1,\r
+      -1,\r
+      NULL,\r
       STRING_TOKEN (STR_PCI2_FAST_ENABLE),\r
       gShellDebug1HiiHandle,\r
-      (*BridgeControl & PCI_BIT_7) != 0\r
-     );\r
-    ShellPrintHiiEx(-1, -1, NULL,\r
+      (*BridgeControl & BIT7) != 0\r
+      );\r
+    ShellPrintHiiEx (\r
+      -1,\r
+      -1,\r
+      NULL,\r
       STRING_TOKEN (STR_PCI2_PRIMARY_DISCARD_TIMER),\r
       gShellDebug1HiiHandle,\r
-      (*BridgeControl & PCI_BIT_8)!=0 ? L"2^10" : L"2^15"\r
-     );\r
-    ShellPrintHiiEx(-1, -1, NULL,\r
+      (*BridgeControl & BIT8) != 0 ? L"2^10" : L"2^15"\r
+      );\r
+    ShellPrintHiiEx (\r
+      -1,\r
+      -1,\r
+      NULL,\r
       STRING_TOKEN (STR_PCI2_SECONDARY_DISCARD_TIMER),\r
       gShellDebug1HiiHandle,\r
-      (*BridgeControl & PCI_BIT_9)!=0 ? L"2^10" : L"2^15"\r
-     );\r
-    ShellPrintHiiEx(-1, -1, NULL,\r
+      (*BridgeControl & BIT9) != 0 ? L"2^10" : L"2^15"\r
+      );\r
+    ShellPrintHiiEx (\r
+      -1,\r
+      -1,\r
+      NULL,\r
       STRING_TOKEN (STR_PCI2_DISCARD_TIMER_STATUS),\r
       gShellDebug1HiiHandle,\r
-      (*BridgeControl & PCI_BIT_10) != 0\r
-     );\r
-    ShellPrintHiiEx(-1, -1, NULL,\r
+      (*BridgeControl & BIT10) != 0\r
+      );\r
+    ShellPrintHiiEx (\r
+      -1,\r
+      -1,\r
+      NULL,\r
       STRING_TOKEN (STR_PCI2_DISCARD_TIMER_SERR),\r
       gShellDebug1HiiHandle,\r
-      (*BridgeControl & PCI_BIT_11) != 0\r
-     );\r
-\r
+      (*BridgeControl & BIT11) != 0\r
+      );\r
   } else {\r
-    ShellPrintHiiEx(-1, -1, NULL,\r
+    ShellPrintHiiEx (\r
+      -1,\r
+      -1,\r
+      NULL,\r
       STRING_TOKEN (STR_PCI2_CARDBUS_RESET),\r
       gShellDebug1HiiHandle,\r
-      (*BridgeControl & PCI_BIT_6) != 0\r
-     );\r
-    ShellPrintHiiEx(-1, -1, NULL,\r
+      (*BridgeControl & BIT6) != 0\r
+      );\r
+    ShellPrintHiiEx (\r
+      -1,\r
+      -1,\r
+      NULL,\r
       STRING_TOKEN (STR_PCI2_IREQ_ENABLE),\r
       gShellDebug1HiiHandle,\r
-      (*BridgeControl & PCI_BIT_7) != 0\r
-     );\r
-    ShellPrintHiiEx(-1, -1, NULL,\r
+      (*BridgeControl & BIT7) != 0\r
+      );\r
+    ShellPrintHiiEx (\r
+      -1,\r
+      -1,\r
+      NULL,\r
       STRING_TOKEN (STR_PCI2_WRITE_POSTING_ENABLE),\r
       gShellDebug1HiiHandle,\r
-      (*BridgeControl & PCI_BIT_10) != 0\r
-     );\r
+      (*BridgeControl & BIT10) != 0\r
+      );\r
   }\r
 \r
   return EFI_SUCCESS;\r
 }\r
 \r
 /**\r
-  Print each capability structure.\r
+  Locate capability register block per capability ID.\r
 \r
-  @param[in] IoDev      The pointer to the deivce.\r
-  @param[in] Address    The address to start at.\r
-  @param[in] CapPtr     The offset from the address.\r
+  @param[in] ConfigSpace       Data in PCI configuration space.\r
+  @param[in] CapabilityId      The capability ID.\r
 \r
-  @retval EFI_SUCCESS     The operation was successful.\r
+  @return   The offset of the register block per capability ID,\r
+            or 0 if the register block cannot be found.\r
 **/\r
-EFI_STATUS\r
-PciExplainCapabilityStruct (\r
-  IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL         *IoDev,\r
-  IN UINT64                                   Address,\r
-  IN  UINT8                                   CapPtr\r
+UINT8\r
+LocatePciCapability (\r
+  IN PCI_CONFIG_SPACE  *ConfigSpace,\r
+  IN UINT8             CapabilityId\r
   )\r
 {\r
-  UINT8   CapabilityPtr;\r
-  UINT16  CapabilityEntry;\r
-  UINT8   CapabilityID;\r
-  UINT64  RegAddress;\r
-\r
-  CapabilityPtr = CapPtr;\r
+  UINT8                   CapabilityPtr;\r
+  EFI_PCI_CAPABILITY_HDR  *CapabilityEntry;\r
 \r
   //\r
-  // Go through the Capability list\r
+  // To check the cpability of this device supports\r
   //\r
-  while ((CapabilityPtr >= 0x40) && ((CapabilityPtr & 0x03) == 0x00)) {\r
-    RegAddress = Address + CapabilityPtr;\r
-    IoDev->Pci.Read (IoDev, EfiPciWidthUint16, RegAddress, 1, &CapabilityEntry);\r
+  if ((ConfigSpace->Common.Status & EFI_PCI_STATUS_CAPABILITY) == 0) {\r
+    return 0;\r
+  }\r
 \r
-    CapabilityID = (UINT8) CapabilityEntry;\r
+  switch ((PCI_HEADER_TYPE)(ConfigSpace->Common.HeaderType & 0x7f)) {\r
+    case PciDevice:\r
+      CapabilityPtr = ConfigSpace->NonCommon.Device.CapabilityPtr;\r
+      break;\r
+    case PciP2pBridge:\r
+      CapabilityPtr = ConfigSpace->NonCommon.Bridge.CapabilityPtr;\r
+      break;\r
+    case PciCardBusBridge:\r
+      CapabilityPtr = ConfigSpace->NonCommon.CardBus.Cap_Ptr;\r
+      break;\r
+    default:\r
+      return 0;\r
+  }\r
 \r
-    //\r
-    // Explain PciExpress data\r
-    //\r
-    if (EFI_PCI_CAPABILITY_ID_PCIEXP == CapabilityID) {\r
-      PciExplainPciExpress (IoDev, Address, CapabilityPtr);\r
-      return EFI_SUCCESS;\r
+  while ((CapabilityPtr >= 0x40) && ((CapabilityPtr & 0x03) == 0x00)) {\r
+    CapabilityEntry = (EFI_PCI_CAPABILITY_HDR *)((UINT8 *)ConfigSpace + CapabilityPtr);\r
+    if (CapabilityEntry->CapabilityID == CapabilityId) {\r
+      return CapabilityPtr;\r
     }\r
+\r
     //\r
-    // Explain other capabilities here\r
+    // Certain PCI device may incorrectly have capability pointing to itself,\r
+    // break to avoid dead loop.\r
     //\r
-    CapabilityPtr = (UINT8) (CapabilityEntry >> 8);\r
+    if (CapabilityPtr == CapabilityEntry->NextItemPtr) {\r
+      break;\r
+    }\r
+\r
+    CapabilityPtr = CapabilityEntry->NextItemPtr;\r
   }\r
 \r
-  return EFI_SUCCESS;\r
+  return 0;\r
 }\r
 \r
 /**\r
@@ -3831,42 +4482,51 @@ PciExplainCapabilityStruct (
 **/\r
 EFI_STATUS\r
 ExplainPcieCapReg (\r
-  IN PCIE_CAP_STURCTURE *PciExpressCap\r
+  IN PCI_CAPABILITY_PCIEXP  *PciExpressCap\r
   )\r
 {\r
-  UINT16 PcieCapReg;\r
-  CHAR16 *DevicePortType;\r
+  CHAR16  *DevicePortType;\r
 \r
-  PcieCapReg = PciExpressCap->PcieCapReg;\r
-  ShellPrintEx (-1, -1,\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Capability Version(3:0):          %E0x%04x%N\r\n",\r
-    PCIE_CAP_VERSION (PcieCapReg)\r
-   );\r
-  if ((UINT8) PCIE_CAP_DEVICEPORT_TYPE (PcieCapReg) < PCIE_DEVICE_PORT_TYPE_MAX) {\r
-    DevicePortType = DevicePortTypeTable[PCIE_CAP_DEVICEPORT_TYPE (PcieCapReg)];\r
+    PciExpressCap->Capability.Bits.Version\r
+    );\r
+  if (PciExpressCap->Capability.Bits.DevicePortType < ARRAY_SIZE (DevicePortTypeTable)) {\r
+    DevicePortType = DevicePortTypeTable[PciExpressCap->Capability.Bits.DevicePortType];\r
   } else {\r
     DevicePortType = L"Unknown Type";\r
   }\r
-  ShellPrintEx (-1, -1,\r
+\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Device/PortType(7:4):             %E%s%N\r\n",\r
     DevicePortType\r
-   );\r
+    );\r
   //\r
   // 'Slot Implemented' is only valid for:\r
   // a) Root Port of PCI Express Root Complex, or\r
   // b) Downstream Port of PCI Express Switch\r
   //\r
-  if (PCIE_CAP_DEVICEPORT_TYPE (PcieCapReg) == PCIE_ROOT_COMPLEX_ROOT_PORT ||\r
-      PCIE_CAP_DEVICEPORT_TYPE (PcieCapReg) == PCIE_SWITCH_DOWNSTREAM_PORT) {\r
-    ShellPrintEx (-1, -1,\r
+  if ((PciExpressCap->Capability.Bits.DevicePortType == PCIE_DEVICE_PORT_TYPE_ROOT_PORT) ||\r
+      (PciExpressCap->Capability.Bits.DevicePortType == PCIE_DEVICE_PORT_TYPE_DOWNSTREAM_PORT))\r
+  {\r
+    ShellPrintEx (\r
+      -1,\r
+      -1,\r
       L"  Slot Implemented(8):              %E%d%N\r\n",\r
-      PCIE_CAP_SLOT_IMPLEMENTED (PcieCapReg)\r
-     );\r
+      PciExpressCap->Capability.Bits.SlotImplemented\r
+      );\r
   }\r
-  ShellPrintEx (-1, -1,\r
+\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Interrupt Message Number(13:9):   %E0x%05x%N\r\n",\r
-    PCIE_CAP_INT_MSG_NUM (PcieCapReg)\r
-   );\r
+    PciExpressCap->Capability.Bits.InterruptMessageNumber\r
+    );\r
   return EFI_SUCCESS;\r
 }\r
 \r
@@ -3879,38 +4539,39 @@ ExplainPcieCapReg (
 **/\r
 EFI_STATUS\r
 ExplainPcieDeviceCap (\r
-  IN PCIE_CAP_STURCTURE *PciExpressCap\r
+  IN PCI_CAPABILITY_PCIEXP  *PciExpressCap\r
   )\r
 {\r
-  UINT16 PcieCapReg;\r
-  UINT32 PcieDeviceCap;\r
   UINT8  DevicePortType;\r
   UINT8  L0sLatency;\r
   UINT8  L1Latency;\r
 \r
-  PcieCapReg     = PciExpressCap->PcieCapReg;\r
-  PcieDeviceCap  = PciExpressCap->PcieDeviceCap;\r
-  DevicePortType = (UINT8) PCIE_CAP_DEVICEPORT_TYPE (PcieCapReg);\r
+  DevicePortType = (UINT8)PciExpressCap->Capability.Bits.DevicePortType;\r
   ShellPrintEx (-1, -1, L"  Max_Payload_Size Supported(2:0):          ");\r
-  if (PCIE_CAP_MAX_PAYLOAD (PcieDeviceCap) < 6) {\r
-    ShellPrintEx (-1, -1, L"%E%d bytes%N\r\n", 1 << (PCIE_CAP_MAX_PAYLOAD (PcieDeviceCap) + 7));\r
+  if (PciExpressCap->DeviceCapability.Bits.MaxPayloadSize < 6) {\r
+    ShellPrintEx (-1, -1, L"%E%d bytes%N\r\n", 1 << (PciExpressCap->DeviceCapability.Bits.MaxPayloadSize + 7));\r
   } else {\r
     ShellPrintEx (-1, -1, L"%EUnknown%N\r\n");\r
   }\r
-  ShellPrintEx (-1, -1,\r
+\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Phantom Functions Supported(4:3):         %E%d%N\r\n",\r
-    PCIE_CAP_PHANTOM_FUNC (PcieDeviceCap)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->DeviceCapability.Bits.PhantomFunctions\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Extended Tag Field Supported(5):          %E%d-bit Tag field supported%N\r\n",\r
-    PCIE_CAP_EXTENDED_TAG (PcieDeviceCap) ? 8 : 5\r
-   );\r
+    PciExpressCap->DeviceCapability.Bits.ExtendedTagField ? 8 : 5\r
+    );\r
   //\r
   // Endpoint L0s and L1 Acceptable Latency is only valid for Endpoint\r
   //\r
   if (IS_PCIE_ENDPOINT (DevicePortType)) {\r
-    L0sLatency = (UINT8) PCIE_CAP_L0SLATENCY (PcieDeviceCap);\r
-    L1Latency  = (UINT8) PCIE_CAP_L1LATENCY (PcieDeviceCap);\r
+    L0sLatency = (UINT8)PciExpressCap->DeviceCapability.Bits.EndpointL0sAcceptableLatency;\r
+    L1Latency  = (UINT8)PciExpressCap->DeviceCapability.Bits.EndpointL1AcceptableLatency;\r
     ShellPrintEx (-1, -1, L"  Endpoint L0s Acceptable Latency(8:6):     ");\r
     if (L0sLatency < 4) {\r
       ShellPrintEx (-1, -1, L"%EMaximum of %d ns%N\r\n", 1 << (L0sLatency + 6));\r
@@ -3921,6 +4582,7 @@ ExplainPcieDeviceCap (
         ShellPrintEx (-1, -1, L"%ENo limit%N\r\n");\r
       }\r
     }\r
+\r
     ShellPrintEx (-1, -1, L"  Endpoint L1 Acceptable Latency(11:9):     ");\r
     if (L1Latency < 7) {\r
       ShellPrintEx (-1, -1, L"%EMaximum of %d us%N\r\n", 1 << (L1Latency + 1));\r
@@ -3928,34 +4590,45 @@ ExplainPcieDeviceCap (
       ShellPrintEx (-1, -1, L"%ENo limit%N\r\n");\r
     }\r
   }\r
-  ShellPrintEx (-1, -1,\r
+\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Role-based Error Reporting(15):           %E%d%N\r\n",\r
-    PCIE_CAP_ERR_REPORTING (PcieDeviceCap)\r
-   );\r
+    PciExpressCap->DeviceCapability.Bits.RoleBasedErrorReporting\r
+    );\r
   //\r
   // Only valid for Upstream Port:\r
   // a) Captured Slot Power Limit Value\r
   // b) Captured Slot Power Scale\r
   //\r
-  if (DevicePortType == PCIE_SWITCH_UPSTREAM_PORT) {\r
-    ShellPrintEx (-1, -1,\r
+  if (DevicePortType == PCIE_DEVICE_PORT_TYPE_UPSTREAM_PORT) {\r
+    ShellPrintEx (\r
+      -1,\r
+      -1,\r
       L"  Captured Slot Power Limit Value(25:18):   %E0x%02x%N\r\n",\r
-      PCIE_CAP_SLOT_POWER_VALUE (PcieDeviceCap)\r
-     );\r
-    ShellPrintEx (-1, -1,\r
+      PciExpressCap->DeviceCapability.Bits.CapturedSlotPowerLimitValue\r
+      );\r
+    ShellPrintEx (\r
+      -1,\r
+      -1,\r
       L"  Captured Slot Power Limit Scale(27:26):   %E%s%N\r\n",\r
-      SlotPwrLmtScaleTable[PCIE_CAP_SLOT_POWER_SCALE (PcieDeviceCap)]\r
-     );\r
+      SlotPwrLmtScaleTable[PciExpressCap->DeviceCapability.Bits.CapturedSlotPowerLimitScale]\r
+      );\r
   }\r
+\r
   //\r
   // Function Level Reset Capability is only valid for Endpoint\r
   //\r
   if (IS_PCIE_ENDPOINT (DevicePortType)) {\r
-    ShellPrintEx (-1, -1,\r
+    ShellPrintEx (\r
+      -1,\r
+      -1,\r
       L"  Function Level Reset Capability(28):      %E%d%N\r\n",\r
-      PCIE_CAP_FUNC_LEVEL_RESET (PcieDeviceCap)\r
-     );\r
+      PciExpressCap->DeviceCapability.Bits.FunctionLevelReset\r
+      );\r
   }\r
+\r
   return EFI_SUCCESS;\r
 }\r
 \r
@@ -3968,71 +4641,89 @@ ExplainPcieDeviceCap (
 **/\r
 EFI_STATUS\r
 ExplainPcieDeviceControl (\r
-  IN PCIE_CAP_STURCTURE *PciExpressCap\r
+  IN PCI_CAPABILITY_PCIEXP  *PciExpressCap\r
   )\r
 {\r
-  UINT16 PcieCapReg;\r
-  UINT16 PcieDeviceControl;\r
-\r
-  PcieCapReg        = PciExpressCap->PcieCapReg;\r
-  PcieDeviceControl = PciExpressCap->DeviceControl;\r
-  ShellPrintEx (-1, -1,\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Correctable Error Reporting Enable(0):    %E%d%N\r\n",\r
-    PCIE_CAP_COR_ERR_REPORTING_ENABLE (PcieDeviceControl)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->DeviceControl.Bits.CorrectableError\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Non-Fatal Error Reporting Enable(1):      %E%d%N\r\n",\r
-    PCIE_CAP_NONFAT_ERR_REPORTING_ENABLE (PcieDeviceControl)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->DeviceControl.Bits.NonFatalError\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Fatal Error Reporting Enable(2):          %E%d%N\r\n",\r
-    PCIE_CAP_FATAL_ERR_REPORTING_ENABLE (PcieDeviceControl)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->DeviceControl.Bits.FatalError\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Unsupported Request Reporting Enable(3):  %E%d%N\r\n",\r
-    PCIE_CAP_UNSUP_REQ_REPORTING_ENABLE (PcieDeviceControl)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->DeviceControl.Bits.UnsupportedRequest\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Enable Relaxed Ordering(4):               %E%d%N\r\n",\r
-    PCIE_CAP_RELAXED_ORDERING_ENABLE (PcieDeviceControl)\r
-   );\r
+    PciExpressCap->DeviceControl.Bits.RelaxedOrdering\r
+    );\r
   ShellPrintEx (-1, -1, L"  Max_Payload_Size(7:5):                    ");\r
-  if (PCIE_CAP_MAX_PAYLOAD_SIZE (PcieDeviceControl) < 6) {\r
-    ShellPrintEx (-1, -1, L"%E%d bytes%N\r\n", 1 << (PCIE_CAP_MAX_PAYLOAD_SIZE (PcieDeviceControl) + 7));\r
+  if (PciExpressCap->DeviceControl.Bits.MaxPayloadSize < 6) {\r
+    ShellPrintEx (-1, -1, L"%E%d bytes%N\r\n", 1 << (PciExpressCap->DeviceControl.Bits.MaxPayloadSize + 7));\r
   } else {\r
     ShellPrintEx (-1, -1, L"%EUnknown%N\r\n");\r
   }\r
-  ShellPrintEx (-1, -1,\r
+\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Extended Tag Field Enable(8):             %E%d%N\r\n",\r
-    PCIE_CAP_EXTENDED_TAG_ENABLE (PcieDeviceControl)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->DeviceControl.Bits.ExtendedTagField\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Phantom Functions Enable(9):              %E%d%N\r\n",\r
-    PCIE_CAP_PHANTOM_FUNC_ENABLE (PcieDeviceControl)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->DeviceControl.Bits.PhantomFunctions\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Auxiliary (AUX) Power PM Enable(10):      %E%d%N\r\n",\r
-    PCIE_CAP_AUX_PM_ENABLE (PcieDeviceControl)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->DeviceControl.Bits.AuxPower\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Enable No Snoop(11):                      %E%d%N\r\n",\r
-    PCIE_CAP_NO_SNOOP_ENABLE (PcieDeviceControl)\r
-   );\r
+    PciExpressCap->DeviceControl.Bits.NoSnoop\r
+    );\r
   ShellPrintEx (-1, -1, L"  Max_Read_Request_Size(14:12):             ");\r
-  if (PCIE_CAP_MAX_READ_REQ_SIZE (PcieDeviceControl) < 6) {\r
-    ShellPrintEx (-1, -1, L"%E%d bytes%N\r\n", 1 << (PCIE_CAP_MAX_READ_REQ_SIZE (PcieDeviceControl) + 7));\r
+  if (PciExpressCap->DeviceControl.Bits.MaxReadRequestSize < 6) {\r
+    ShellPrintEx (-1, -1, L"%E%d bytes%N\r\n", 1 << (PciExpressCap->DeviceControl.Bits.MaxReadRequestSize + 7));\r
   } else {\r
     ShellPrintEx (-1, -1, L"%EUnknown%N\r\n");\r
   }\r
+\r
   //\r
   // Read operation is only valid for PCI Express to PCI/PCI-X Bridges\r
   //\r
-  if (PCIE_CAP_DEVICEPORT_TYPE (PcieCapReg) == PCIE_PCIE_TO_PCIX_BRIDGE) {\r
-    ShellPrintEx (-1, -1,\r
+  if (PciExpressCap->Capability.Bits.DevicePortType == PCIE_DEVICE_PORT_TYPE_PCIE_TO_PCI_BRIDGE) {\r
+    ShellPrintEx (\r
+      -1,\r
+      -1,\r
       L"  Bridge Configuration Retry Enable(15):  %E%d%N\r\n",\r
-      PCIE_CAP_BRG_CONF_RETRY (PcieDeviceControl)\r
-     );\r
+      PciExpressCap->DeviceControl.Bits.BridgeConfigurationRetryOrFunctionLevelReset\r
+      );\r
   }\r
+\r
   return EFI_SUCCESS;\r
 }\r
 \r
@@ -4045,36 +4736,45 @@ ExplainPcieDeviceControl (
 **/\r
 EFI_STATUS\r
 ExplainPcieDeviceStatus (\r
-  IN PCIE_CAP_STURCTURE *PciExpressCap\r
+  IN PCI_CAPABILITY_PCIEXP  *PciExpressCap\r
   )\r
 {\r
-  UINT16 PcieDeviceStatus;\r
-\r
-  PcieDeviceStatus = PciExpressCap->DeviceStatus;\r
-  ShellPrintEx (-1, -1,\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Correctable Error Detected(0):            %E%d%N\r\n",\r
-    PCIE_CAP_COR_ERR_DETECTED (PcieDeviceStatus)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->DeviceStatus.Bits.CorrectableError\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Non-Fatal Error Detected(1):              %E%d%N\r\n",\r
-    PCIE_CAP_NONFAT_ERR_DETECTED (PcieDeviceStatus)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->DeviceStatus.Bits.NonFatalError\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Fatal Error Detected(2):                  %E%d%N\r\n",\r
-    PCIE_CAP_FATAL_ERR_DETECTED (PcieDeviceStatus)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->DeviceStatus.Bits.FatalError\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Unsupported Request Detected(3):          %E%d%N\r\n",\r
-    PCIE_CAP_UNSUP_REQ_DETECTED (PcieDeviceStatus)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->DeviceStatus.Bits.UnsupportedRequest\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  AUX Power Detected(4):                    %E%d%N\r\n",\r
-    PCIE_CAP_AUX_POWER_DETECTED (PcieDeviceStatus)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->DeviceStatus.Bits.AuxPower\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Transactions Pending(5):                  %E%d%N\r\n",\r
-    PCIE_CAP_TRANSACTION_PENDING (PcieDeviceStatus)\r
-   );\r
+    PciExpressCap->DeviceStatus.Bits.TransactionsPending\r
+    );\r
   return EFI_SUCCESS;\r
 }\r
 \r
@@ -4087,15 +4787,13 @@ ExplainPcieDeviceStatus (
 **/\r
 EFI_STATUS\r
 ExplainPcieLinkCap (\r
-  IN PCIE_CAP_STURCTURE *PciExpressCap\r
+  IN PCI_CAPABILITY_PCIEXP  *PciExpressCap\r
   )\r
 {\r
-  UINT32 PcieLinkCap;\r
-  CHAR16 *MaxLinkSpeed;\r
-  CHAR16 *AspmValue;\r
+  CHAR16  *MaxLinkSpeed;\r
+  CHAR16  *AspmValue;\r
 \r
-  PcieLinkCap = PciExpressCap->LinkCap;\r
-  switch (PCIE_CAP_MAX_LINK_SPEED (PcieLinkCap)) {\r
+  switch (PciExpressCap->LinkCapability.Bits.MaxLinkSpeed) {\r
     case 1:\r
       MaxLinkSpeed = L"2.5 GT/s";\r
       break;\r
@@ -4105,19 +4803,30 @@ ExplainPcieLinkCap (
     case 3:\r
       MaxLinkSpeed = L"8.0 GT/s";\r
       break;\r
+    case 4:\r
+      MaxLinkSpeed = L"16.0 GT/s";\r
+      break;\r
+    case 5:\r
+      MaxLinkSpeed = L"32.0 GT/s";\r
+      break;\r
     default:\r
-      MaxLinkSpeed = L"Unknown";\r
+      MaxLinkSpeed = L"Reserved";\r
       break;\r
   }\r
-  ShellPrintEx (-1, -1,\r
+\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Maximum Link Speed(3:0):                            %E%s%N\r\n",\r
     MaxLinkSpeed\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Maximum Link Width(9:4):                            %Ex%d%N\r\n",\r
-    PCIE_CAP_MAX_LINK_WIDTH (PcieLinkCap)\r
-   );\r
-  switch (PCIE_CAP_ASPM_SUPPORT (PcieLinkCap)) {\r
+    PciExpressCap->LinkCapability.Bits.MaxLinkWidth\r
+    );\r
+  switch (PciExpressCap->LinkCapability.Bits.Aspm) {\r
     case 0:\r
       AspmValue = L"Not";\r
       break;\r
@@ -4134,38 +4843,55 @@ ExplainPcieLinkCap (
       AspmValue = L"Reserved";\r
       break;\r
   }\r
-  ShellPrintEx (-1, -1,\r
+\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Active State Power Management Support(11:10):       %E%s Supported%N\r\n",\r
     AspmValue\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  L0s Exit Latency(14:12):                            %E%s%N\r\n",\r
-    L0sLatencyStrTable[PCIE_CAP_L0S_LATENCY (PcieLinkCap)]\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    L0sLatencyStrTable[PciExpressCap->LinkCapability.Bits.L0sExitLatency]\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  L1 Exit Latency(17:15):                             %E%s%N\r\n",\r
-    L1LatencyStrTable[PCIE_CAP_L0S_LATENCY (PcieLinkCap)]\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    L1LatencyStrTable[PciExpressCap->LinkCapability.Bits.L1ExitLatency]\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Clock Power Management(18):                         %E%d%N\r\n",\r
-    PCIE_CAP_CLOCK_PM (PcieLinkCap)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->LinkCapability.Bits.ClockPowerManagement\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Surprise Down Error Reporting Capable(19):          %E%d%N\r\n",\r
-    PCIE_CAP_SUP_DOWN_ERR_REPORTING (PcieLinkCap)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->LinkCapability.Bits.SurpriseDownError\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Data Link Layer Link Active Reporting Capable(20):  %E%d%N\r\n",\r
-    PCIE_CAP_LINK_ACTIVE_REPORTING (PcieLinkCap)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->LinkCapability.Bits.DataLinkLayerLinkActive\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Link Bandwidth Notification Capability(21):         %E%d%N\r\n",\r
-    PCIE_CAP_LINK_BWD_NOTIF_CAP (PcieLinkCap)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->LinkCapability.Bits.LinkBandwidthNotification\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Port Number(31:24):                                 %E0x%02x%N\r\n",\r
-    PCIE_CAP_PORT_NUMBER (PcieLinkCap)\r
-   );\r
+    PciExpressCap->LinkCapability.Bits.PortNumber\r
+    );\r
   return EFI_SUCCESS;\r
 }\r
 \r
@@ -4178,27 +4904,30 @@ ExplainPcieLinkCap (
 **/\r
 EFI_STATUS\r
 ExplainPcieLinkControl (\r
-  IN PCIE_CAP_STURCTURE *PciExpressCap\r
+  IN PCI_CAPABILITY_PCIEXP  *PciExpressCap\r
   )\r
 {\r
-  UINT16 PcieLinkControl;\r
   UINT8  DevicePortType;\r
 \r
-  PcieLinkControl = PciExpressCap->LinkControl;\r
-  DevicePortType  = (UINT8) PCIE_CAP_DEVICEPORT_TYPE (PciExpressCap->PcieCapReg);\r
-  ShellPrintEx (-1, -1,\r
+  DevicePortType = (UINT8)PciExpressCap->Capability.Bits.DevicePortType;\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Active State Power Management Control(1:0):         %E%s%N\r\n",\r
-    ASPMCtrlStrTable[PCIE_CAP_ASPM_CONTROL (PcieLinkControl)]\r
-   );\r
+    ASPMCtrlStrTable[PciExpressCap->LinkControl.Bits.AspmControl]\r
+    );\r
   //\r
   // RCB is not applicable to switches\r
   //\r
-  if (!IS_PCIE_SWITCH(DevicePortType)) {\r
-    ShellPrintEx (-1, -1,\r
+  if (!IS_PCIE_SWITCH (DevicePortType)) {\r
+    ShellPrintEx (\r
+      -1,\r
+      -1,\r
       L"  Read Completion Boundary (RCB)(3):                  %E%d byte%N\r\n",\r
-      1 << (PCIE_CAP_RCB (PcieLinkControl) + 6)\r
-     );\r
+      1 << (PciExpressCap->LinkControl.Bits.ReadCompletionBoundary + 6)\r
+      );\r
   }\r
+\r
   //\r
   // Link Disable is reserved on\r
   // a) Endpoints\r
@@ -4206,37 +4935,53 @@ ExplainPcieLinkControl (
   // c) Upstream Ports of Switches\r
   //\r
   if (!IS_PCIE_ENDPOINT (DevicePortType) &&\r
-      DevicePortType != PCIE_SWITCH_UPSTREAM_PORT &&\r
-      DevicePortType != PCIE_PCIE_TO_PCIX_BRIDGE) {\r
-    ShellPrintEx (-1, -1,\r
+      (DevicePortType != PCIE_DEVICE_PORT_TYPE_UPSTREAM_PORT) &&\r
+      (DevicePortType != PCIE_DEVICE_PORT_TYPE_PCIE_TO_PCI_BRIDGE))\r
+  {\r
+    ShellPrintEx (\r
+      -1,\r
+      -1,\r
       L"  Link Disable(4):                                    %E%d%N\r\n",\r
-      PCIE_CAP_LINK_DISABLE (PcieLinkControl)\r
-     );\r
+      PciExpressCap->LinkControl.Bits.LinkDisable\r
+      );\r
   }\r
-  ShellPrintEx (-1, -1,\r
+\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Common Clock Configuration(6):                      %E%d%N\r\n",\r
-    PCIE_CAP_COMMON_CLK_CONF (PcieLinkControl)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->LinkControl.Bits.CommonClockConfiguration\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Extended Synch(7):                                  %E%d%N\r\n",\r
-    PCIE_CAP_EXT_SYNC (PcieLinkControl)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->LinkControl.Bits.ExtendedSynch\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Enable Clock Power Management(8):                   %E%d%N\r\n",\r
-    PCIE_CAP_CLK_PWR_MNG (PcieLinkControl)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->LinkControl.Bits.ClockPowerManagement\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Hardware Autonomous Width Disable(9):               %E%d%N\r\n",\r
-    PCIE_CAP_HW_AUTO_WIDTH_DISABLE (PcieLinkControl)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->LinkControl.Bits.HardwareAutonomousWidthDisable\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Link Bandwidth Management Interrupt Enable(10):     %E%d%N\r\n",\r
-    PCIE_CAP_LINK_BDW_MNG_INT_EN (PcieLinkControl)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->LinkControl.Bits.LinkBandwidthManagementInterrupt\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Link Autonomous Bandwidth Interrupt Enable(11):     %E%d%N\r\n",\r
-    PCIE_CAP_LINK_AUTO_BDW_INT_EN (PcieLinkControl)\r
-   );\r
+    PciExpressCap->LinkControl.Bits.LinkAutonomousBandwidthInterrupt\r
+    );\r
   return EFI_SUCCESS;\r
 }\r
 \r
@@ -4249,14 +4994,12 @@ ExplainPcieLinkControl (
 **/\r
 EFI_STATUS\r
 ExplainPcieLinkStatus (\r
-  IN PCIE_CAP_STURCTURE *PciExpressCap\r
+  IN PCI_CAPABILITY_PCIEXP  *PciExpressCap\r
   )\r
 {\r
-  UINT16 PcieLinkStatus;\r
-  CHAR16 *CurLinkSpeed;\r
+  CHAR16  *CurLinkSpeed;\r
 \r
-  PcieLinkStatus = PciExpressCap->LinkStatus;\r
-  switch (PCIE_CAP_CUR_LINK_SPEED (PcieLinkStatus)) {\r
+  switch (PciExpressCap->LinkStatus.Bits.CurrentLinkSpeed) {\r
     case 1:\r
       CurLinkSpeed = L"2.5 GT/s";\r
       break;\r
@@ -4266,38 +5009,59 @@ ExplainPcieLinkStatus (
     case 3:\r
       CurLinkSpeed = L"8.0 GT/s";\r
       break;\r
+    case 4:\r
+      CurLinkSpeed = L"16.0 GT/s";\r
+      break;\r
+    case 5:\r
+      CurLinkSpeed = L"32.0 GT/s";\r
+      break;\r
     default:\r
       CurLinkSpeed = L"Reserved";\r
       break;\r
   }\r
-  ShellPrintEx (-1, -1,\r
+\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Current Link Speed(3:0):                            %E%s%N\r\n",\r
     CurLinkSpeed\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Negotiated Link Width(9:4):                         %Ex%d%N\r\n",\r
-    PCIE_CAP_NEGO_LINK_WIDTH (PcieLinkStatus)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->LinkStatus.Bits.NegotiatedLinkWidth\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Link Training(11):                                  %E%d%N\r\n",\r
-    PCIE_CAP_LINK_TRAINING (PcieLinkStatus)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->LinkStatus.Bits.LinkTraining\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Slot Clock Configuration(12):                       %E%d%N\r\n",\r
-    PCIE_CAP_SLOT_CLK_CONF (PcieLinkStatus)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->LinkStatus.Bits.SlotClockConfiguration\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Data Link Layer Link Active(13):                    %E%d%N\r\n",\r
-    PCIE_CAP_DATA_LINK_ACTIVE (PcieLinkStatus)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->LinkStatus.Bits.DataLinkLayerLinkActive\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Link Bandwidth Management Status(14):               %E%d%N\r\n",\r
-    PCIE_CAP_LINK_BDW_MNG_STAT (PcieLinkStatus)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->LinkStatus.Bits.LinkBandwidthManagement\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Link Autonomous Bandwidth Status(15):               %E%d%N\r\n",\r
-    PCIE_CAP_LINK_AUTO_BDW_STAT (PcieLinkStatus)\r
-   );\r
+    PciExpressCap->LinkStatus.Bits.LinkAutonomousBandwidth\r
+    );\r
   return EFI_SUCCESS;\r
 }\r
 \r
@@ -4310,61 +5074,81 @@ ExplainPcieLinkStatus (
 **/\r
 EFI_STATUS\r
 ExplainPcieSlotCap (\r
-  IN PCIE_CAP_STURCTURE *PciExpressCap\r
+  IN PCI_CAPABILITY_PCIEXP  *PciExpressCap\r
   )\r
 {\r
-  UINT32 PcieSlotCap;\r
-\r
-  PcieSlotCap = PciExpressCap->SlotCap;\r
-\r
-  ShellPrintEx (-1, -1,\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Attention Button Present(0):                        %E%d%N\r\n",\r
-    PCIE_CAP_ATT_BUT_PRESENT (PcieSlotCap)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->SlotCapability.Bits.AttentionButton\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Power Controller Present(1):                        %E%d%N\r\n",\r
-    PCIE_CAP_PWR_CTRLLER_PRESENT (PcieSlotCap)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->SlotCapability.Bits.PowerController\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  MRL Sensor Present(2):                              %E%d%N\r\n",\r
-    PCIE_CAP_MRL_SENSOR_PRESENT (PcieSlotCap)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->SlotCapability.Bits.MrlSensor\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Attention Indicator Present(3):                     %E%d%N\r\n",\r
-    PCIE_CAP_ATT_IND_PRESENT (PcieSlotCap)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->SlotCapability.Bits.AttentionIndicator\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Power Indicator Present(4):                         %E%d%N\r\n",\r
-    PCIE_CAP_PWD_IND_PRESENT (PcieSlotCap)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->SlotCapability.Bits.PowerIndicator\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Hot-Plug Surprise(5):                               %E%d%N\r\n",\r
-    PCIE_CAP_HOTPLUG_SUPPRISE (PcieSlotCap)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->SlotCapability.Bits.HotPlugSurprise\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Hot-Plug Capable(6):                                %E%d%N\r\n",\r
-    PCIE_CAP_HOTPLUG_CAPABLE (PcieSlotCap)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->SlotCapability.Bits.HotPlugCapable\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Slot Power Limit Value(14:7):                       %E0x%02x%N\r\n",\r
-    PCIE_CAP_SLOT_PWR_LIMIT_VALUE (PcieSlotCap)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->SlotCapability.Bits.SlotPowerLimitValue\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Slot Power Limit Scale(16:15):                      %E%s%N\r\n",\r
-    SlotPwrLmtScaleTable[PCIE_CAP_SLOT_PWR_LIMIT_SCALE (PcieSlotCap)]\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    SlotPwrLmtScaleTable[PciExpressCap->SlotCapability.Bits.SlotPowerLimitScale]\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Electromechanical Interlock Present(17):            %E%d%N\r\n",\r
-    PCIE_CAP_ELEC_INTERLOCK_PRESENT (PcieSlotCap)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->SlotCapability.Bits.ElectromechanicalInterlock\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  No Command Completed Support(18):                   %E%d%N\r\n",\r
-    PCIE_CAP_NO_COMM_COMPLETED_SUP (PcieSlotCap)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->SlotCapability.Bits.NoCommandCompleted\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Physical Slot Number(31:19):                        %E%d%N\r\n",\r
-    PCIE_CAP_PHY_SLOT_NUM (PcieSlotCap)\r
-   );\r
+    PciExpressCap->SlotCapability.Bits.PhysicalSlotNumber\r
+    );\r
 \r
   return EFI_SUCCESS;\r
 }\r
@@ -4378,58 +5162,79 @@ ExplainPcieSlotCap (
 **/\r
 EFI_STATUS\r
 ExplainPcieSlotControl (\r
-  IN PCIE_CAP_STURCTURE *PciExpressCap\r
+  IN PCI_CAPABILITY_PCIEXP  *PciExpressCap\r
   )\r
 {\r
-  UINT16 PcieSlotControl;\r
-\r
-  PcieSlotControl = PciExpressCap->SlotControl;\r
-  ShellPrintEx (-1, -1,\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Attention Button Pressed Enable(0):                 %E%d%N\r\n",\r
-    PCIE_CAP_ATT_BUT_ENABLE (PcieSlotControl)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->SlotControl.Bits.AttentionButtonPressed\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Power Fault Detected Enable(1):                     %E%d%N\r\n",\r
-    PCIE_CAP_PWR_FLT_DETECT_ENABLE (PcieSlotControl)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->SlotControl.Bits.PowerFaultDetected\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  MRL Sensor Changed Enable(2):                       %E%d%N\r\n",\r
-    PCIE_CAP_MRL_SENSOR_CHANGE_ENABLE (PcieSlotControl)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->SlotControl.Bits.MrlSensorChanged\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Presence Detect Changed Enable(3):                  %E%d%N\r\n",\r
-    PCIE_CAP_PRES_DETECT_CHANGE_ENABLE (PcieSlotControl)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->SlotControl.Bits.PresenceDetectChanged\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Command Completed Interrupt Enable(4):              %E%d%N\r\n",\r
-    PCIE_CAP_COMM_CMPL_INT_ENABLE (PcieSlotControl)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->SlotControl.Bits.CommandCompletedInterrupt\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Hot-Plug Interrupt Enable(5):                       %E%d%N\r\n",\r
-    PCIE_CAP_HOTPLUG_INT_ENABLE (PcieSlotControl)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->SlotControl.Bits.HotPlugInterrupt\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Attention Indicator Control(7:6):                   %E%s%N\r\n",\r
-    IndicatorTable[PCIE_CAP_ATT_IND_CTRL (PcieSlotControl)]\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    IndicatorTable[\r
+                   PciExpressCap->SlotControl.Bits.AttentionIndicator]\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Power Indicator Control(9:8):                       %E%s%N\r\n",\r
-    IndicatorTable[PCIE_CAP_PWR_IND_CTRL (PcieSlotControl)]\r
-   );\r
+    IndicatorTable[PciExpressCap->SlotControl.Bits.PowerIndicator]\r
+    );\r
   ShellPrintEx (-1, -1, L"  Power Controller Control(10):                       %EPower ");\r
-  if (PCIE_CAP_PWR_CTRLLER_CTRL (PcieSlotControl)) {\r
+  if (\r
+      PciExpressCap->SlotControl.Bits.PowerController)\r
+  {\r
     ShellPrintEx (-1, -1, L"Off%N\r\n");\r
   } else {\r
     ShellPrintEx (-1, -1, L"On%N\r\n");\r
   }\r
-  ShellPrintEx (-1, -1,\r
+\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Electromechanical Interlock Control(11):            %E%d%N\r\n",\r
-    PCIE_CAP_ELEC_INTERLOCK_CTRL (PcieSlotControl)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->SlotControl.Bits.ElectromechanicalInterlock\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Data Link Layer State Changed Enable(12):           %E%d%N\r\n",\r
-    PCIE_CAP_DLINK_STAT_CHANGE_ENABLE (PcieSlotControl)\r
-   );\r
+    PciExpressCap->SlotControl.Bits.DataLinkLayerStateChanged\r
+    );\r
   return EFI_SUCCESS;\r
 }\r
 \r
@@ -4442,55 +5247,72 @@ ExplainPcieSlotControl (
 **/\r
 EFI_STATUS\r
 ExplainPcieSlotStatus (\r
-  IN PCIE_CAP_STURCTURE *PciExpressCap\r
+  IN PCI_CAPABILITY_PCIEXP  *PciExpressCap\r
   )\r
 {\r
-  UINT16 PcieSlotStatus;\r
-\r
-  PcieSlotStatus = PciExpressCap->SlotStatus;\r
-\r
-  ShellPrintEx (-1, -1,\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Attention Button Pressed(0):           %E%d%N\r\n",\r
-    PCIE_CAP_ATT_BUT_PRESSED (PcieSlotStatus)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->SlotStatus.Bits.AttentionButtonPressed\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Power Fault Detected(1):               %E%d%N\r\n",\r
-    PCIE_CAP_PWR_FLT_DETECTED (PcieSlotStatus)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->SlotStatus.Bits.PowerFaultDetected\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  MRL Sensor Changed(2):                 %E%d%N\r\n",\r
-    PCIE_CAP_MRL_SENSOR_CHANGED (PcieSlotStatus)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->SlotStatus.Bits.MrlSensorChanged\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Presence Detect Changed(3):            %E%d%N\r\n",\r
-    PCIE_CAP_PRES_DETECT_CHANGED (PcieSlotStatus)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->SlotStatus.Bits.PresenceDetectChanged\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Command Completed(4):                  %E%d%N\r\n",\r
-    PCIE_CAP_COMM_COMPLETED (PcieSlotStatus)\r
-   );\r
+    PciExpressCap->SlotStatus.Bits.CommandCompleted\r
+    );\r
   ShellPrintEx (-1, -1, L"  MRL Sensor State(5):                   %EMRL ");\r
-  if (PCIE_CAP_MRL_SENSOR_STATE (PcieSlotStatus)) {\r
+  if (\r
+      PciExpressCap->SlotStatus.Bits.MrlSensor)\r
+  {\r
     ShellPrintEx (-1, -1, L" Opened%N\r\n");\r
   } else {\r
     ShellPrintEx (-1, -1, L" Closed%N\r\n");\r
   }\r
+\r
   ShellPrintEx (-1, -1, L"  Presence Detect State(6):              ");\r
-  if (PCIE_CAP_PRES_DETECT_STATE (PcieSlotStatus)) {\r
+  if (\r
+      PciExpressCap->SlotStatus.Bits.PresenceDetect)\r
+  {\r
     ShellPrintEx (-1, -1, L"%ECard Present in slot%N\r\n");\r
   } else {\r
     ShellPrintEx (-1, -1, L"%ESlot Empty%N\r\n");\r
   }\r
+\r
   ShellPrintEx (-1, -1, L"  Electromechanical Interlock Status(7): %EElectromechanical Interlock ");\r
-  if (PCIE_CAP_ELEC_INTERLOCK_STATE (PcieSlotStatus)) {\r
+  if (\r
+      PciExpressCap->SlotStatus.Bits.ElectromechanicalInterlock)\r
+  {\r
     ShellPrintEx (-1, -1, L"Engaged%N\r\n");\r
   } else {\r
     ShellPrintEx (-1, -1, L"Disengaged%N\r\n");\r
   }\r
-  ShellPrintEx (-1, -1,\r
+\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  Data Link Layer State Changed(8):      %E%d%N\r\n",\r
-    PCIE_CAP_DLINK_STAT_CHANGED (PcieSlotStatus)\r
-   );\r
+    PciExpressCap->SlotStatus.Bits.DataLinkLayerStateChanged\r
+    );\r
   return EFI_SUCCESS;\r
 }\r
 \r
@@ -4503,33 +5325,39 @@ ExplainPcieSlotStatus (
 **/\r
 EFI_STATUS\r
 ExplainPcieRootControl (\r
-  IN PCIE_CAP_STURCTURE *PciExpressCap\r
+  IN PCI_CAPABILITY_PCIEXP  *PciExpressCap\r
   )\r
 {\r
-  UINT16 PcieRootControl;\r
-\r
-  PcieRootControl = PciExpressCap->RootControl;\r
-\r
-  ShellPrintEx (-1, -1,\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  System Error on Correctable Error Enable(0):  %E%d%N\r\n",\r
-    PCIE_CAP_SYSERR_ON_CORERR_EN (PcieRootControl)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->RootControl.Bits.SystemErrorOnCorrectableError\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  System Error on Non-Fatal Error Enable(1):    %E%d%N\r\n",\r
-    PCIE_CAP_SYSERR_ON_NONFATERR_EN (PcieRootControl)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->RootControl.Bits.SystemErrorOnNonFatalError\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  System Error on Fatal Error Enable(2):        %E%d%N\r\n",\r
-    PCIE_CAP_SYSERR_ON_FATERR_EN (PcieRootControl)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->RootControl.Bits.SystemErrorOnFatalError\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  PME Interrupt Enable(3):                      %E%d%N\r\n",\r
-    PCIE_CAP_PME_INT_ENABLE (PcieRootControl)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->RootControl.Bits.PmeInterrupt\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  CRS Software Visibility Enable(4):            %E%d%N\r\n",\r
-    PCIE_CAP_CRS_SW_VIS_ENABLE (PcieRootControl)\r
-   );\r
+    PciExpressCap->RootControl.Bits.CrsSoftwareVisibility\r
+    );\r
 \r
   return EFI_SUCCESS;\r
 }\r
@@ -4543,17 +5371,15 @@ ExplainPcieRootControl (
 **/\r
 EFI_STATUS\r
 ExplainPcieRootCap (\r
-  IN PCIE_CAP_STURCTURE *PciExpressCap\r
+  IN PCI_CAPABILITY_PCIEXP  *PciExpressCap\r
   )\r
 {\r
-  UINT16 PcieRootCap;\r
-\r
-  PcieRootCap = PciExpressCap->RsvdP;\r
-\r
-  ShellPrintEx (-1, -1,\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  CRS Software Visibility(0):                   %E%d%N\r\n",\r
-    PCIE_CAP_CRS_SW_VIS (PcieRootCap)\r
-   );\r
+    PciExpressCap->RootCapability.Bits.CrsSoftwareVisibility\r
+    );\r
 \r
   return EFI_SUCCESS;\r
 }\r
@@ -4567,98 +5393,857 @@ ExplainPcieRootCap (
 **/\r
 EFI_STATUS\r
 ExplainPcieRootStatus (\r
-  IN PCIE_CAP_STURCTURE *PciExpressCap\r
+  IN PCI_CAPABILITY_PCIEXP  *PciExpressCap\r
   )\r
 {\r
-  UINT32 PcieRootStatus;\r
-\r
-  PcieRootStatus = PciExpressCap->RootStatus;\r
-\r
-  ShellPrintEx (-1, -1,\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  PME Requester ID(15:0):                       %E0x%04x%N\r\n",\r
-    PCIE_CAP_PME_REQ_ID (PcieRootStatus)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->RootStatus.Bits.PmeRequesterId\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  PME Status(16):                               %E%d%N\r\n",\r
-    PCIE_CAP_PME_STATUS (PcieRootStatus)\r
-   );\r
-  ShellPrintEx (-1, -1,\r
+    PciExpressCap->RootStatus.Bits.PmeStatus\r
+    );\r
+  ShellPrintEx (\r
+    -1,\r
+    -1,\r
     L"  PME Pending(17):                              %E%d%N\r\n",\r
-    PCIE_CAP_PME_PENDING (PcieRootStatus)\r
-   );\r
+    PciExpressCap->RootStatus.Bits.PmePending\r
+    );\r
   return EFI_SUCCESS;\r
 }\r
 \r
 /**\r
-  Display Pcie device structure.\r
+  Function to interpret and print out the link control structure\r
+\r
+  @param[in] HeaderAddress        The Address of this capability header.\r
+  @param[in] HeadersBaseAddress   The address of all the extended capability headers.\r
+**/\r
+EFI_STATUS\r
+PrintInterpretedExtendedCompatibilityLinkControl (\r
+  IN CONST PCI_EXP_EXT_HDR  *HeaderAddress,\r
+  IN CONST PCI_EXP_EXT_HDR  *HeadersBaseAddress\r
+  )\r
+{\r
+  CONST PCI_EXPRESS_EXTENDED_CAPABILITIES_INTERNAL_LINK_CONTROL  *Header;\r
+\r
+  Header = (PCI_EXPRESS_EXTENDED_CAPABILITIES_INTERNAL_LINK_CONTROL *)HeaderAddress;\r
+\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
+    STRING_TOKEN (STR_PCI_EXT_CAP_LINK_CONTROL),\r
+    gShellDebug1HiiHandle,\r
+    Header->RootComplexLinkCapabilities,\r
+    Header->RootComplexLinkControl,\r
+    Header->RootComplexLinkStatus\r
+    );\r
+  DumpHex (\r
+    4,\r
+    EFI_PCIE_CAPABILITY_BASE_OFFSET + ((UINT8 *)HeaderAddress - (UINT8 *)HeadersBaseAddress),\r
+    sizeof (PCI_EXPRESS_EXTENDED_CAPABILITIES_INTERNAL_LINK_CONTROL),\r
+    (VOID *)(HeaderAddress)\r
+    );\r
+  return (EFI_SUCCESS);\r
+}\r
+\r
+/**\r
+  Function to interpret and print out the power budgeting structure\r
+\r
+  @param[in] HeaderAddress        The Address of this capability header.\r
+  @param[in] HeadersBaseAddress   The address of all the extended capability headers.\r
+**/\r
+EFI_STATUS\r
+PrintInterpretedExtendedCompatibilityPowerBudgeting (\r
+  IN CONST PCI_EXP_EXT_HDR  *HeaderAddress,\r
+  IN CONST PCI_EXP_EXT_HDR  *HeadersBaseAddress\r
+  )\r
+{\r
+  CONST PCI_EXPRESS_EXTENDED_CAPABILITIES_POWER_BUDGETING  *Header;\r
+\r
+  Header = (PCI_EXPRESS_EXTENDED_CAPABILITIES_POWER_BUDGETING *)HeaderAddress;\r
+\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
+    STRING_TOKEN (STR_PCI_EXT_CAP_POWER),\r
+    gShellDebug1HiiHandle,\r
+    Header->DataSelect,\r
+    Header->Data,\r
+    Header->PowerBudgetCapability\r
+    );\r
+  DumpHex (\r
+    4,\r
+    EFI_PCIE_CAPABILITY_BASE_OFFSET + ((UINT8 *)HeaderAddress - (UINT8 *)HeadersBaseAddress),\r
+    sizeof (PCI_EXPRESS_EXTENDED_CAPABILITIES_POWER_BUDGETING),\r
+    (VOID *)(HeaderAddress)\r
+    );\r
+  return (EFI_SUCCESS);\r
+}\r
+\r
+/**\r
+  Function to interpret and print out the ACS structure\r
+\r
+  @param[in] HeaderAddress        The Address of this capability header.\r
+  @param[in] HeadersBaseAddress   The address of all the extended capability headers.\r
+**/\r
+EFI_STATUS\r
+PrintInterpretedExtendedCompatibilityAcs (\r
+  IN CONST PCI_EXP_EXT_HDR  *HeaderAddress,\r
+  IN CONST PCI_EXP_EXT_HDR  *HeadersBaseAddress\r
+  )\r
+{\r
+  CONST PCI_EXPRESS_EXTENDED_CAPABILITIES_ACS_EXTENDED  *Header;\r
+  UINT16                                                VectorSize;\r
+  UINT16                                                LoopCounter;\r
+\r
+  Header     = (PCI_EXPRESS_EXTENDED_CAPABILITIES_ACS_EXTENDED *)HeaderAddress;\r
+  VectorSize = 0;\r
+\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
+    STRING_TOKEN (STR_PCI_EXT_CAP_ACS),\r
+    gShellDebug1HiiHandle,\r
+    Header->AcsCapability,\r
+    Header->AcsControl\r
+    );\r
+  if (PCI_EXPRESS_EXTENDED_CAPABILITY_ACS_EXTENDED_GET_EGRES_CONTROL (Header)) {\r
+    VectorSize = PCI_EXPRESS_EXTENDED_CAPABILITY_ACS_EXTENDED_GET_EGRES_VECTOR_SIZE (Header);\r
+    if (VectorSize == 0) {\r
+      VectorSize = 256;\r
+    }\r
+\r
+    for (LoopCounter = 0; LoopCounter * 8 < VectorSize; LoopCounter++) {\r
+      ShellPrintHiiEx (\r
+        -1,\r
+        -1,\r
+        NULL,\r
+        STRING_TOKEN (STR_PCI_EXT_CAP_ACS2),\r
+        gShellDebug1HiiHandle,\r
+        LoopCounter + 1,\r
+        Header->EgressControlVectorArray[LoopCounter]\r
+        );\r
+    }\r
+  }\r
+\r
+  DumpHex (\r
+    4,\r
+    EFI_PCIE_CAPABILITY_BASE_OFFSET + ((UINT8 *)HeaderAddress - (UINT8 *)HeadersBaseAddress),\r
+    sizeof (PCI_EXPRESS_EXTENDED_CAPABILITIES_ACS_EXTENDED) + (VectorSize / 8) - 1,\r
+    (VOID *)(HeaderAddress)\r
+    );\r
+  return (EFI_SUCCESS);\r
+}\r
+\r
+/**\r
+  Function to interpret and print out the latency tolerance reporting structure\r
+\r
+  @param[in] HeaderAddress        The Address of this capability header.\r
+  @param[in] HeadersBaseAddress   The address of all the extended capability headers.\r
+**/\r
+EFI_STATUS\r
+PrintInterpretedExtendedCompatibilityLatencyToleranceReporting (\r
+  IN CONST PCI_EXP_EXT_HDR  *HeaderAddress,\r
+  IN CONST PCI_EXP_EXT_HDR  *HeadersBaseAddress\r
+  )\r
+{\r
+  CONST PCI_EXPRESS_EXTENDED_CAPABILITIES_LATENCE_TOLERANCE_REPORTING  *Header;\r
+\r
+  Header = (PCI_EXPRESS_EXTENDED_CAPABILITIES_LATENCE_TOLERANCE_REPORTING *)HeaderAddress;\r
+\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
+    STRING_TOKEN (STR_PCI_EXT_CAP_LAT),\r
+    gShellDebug1HiiHandle,\r
+    Header->MaxSnoopLatency,\r
+    Header->MaxNoSnoopLatency\r
+    );\r
+  DumpHex (\r
+    4,\r
+    EFI_PCIE_CAPABILITY_BASE_OFFSET + ((UINT8 *)HeaderAddress - (UINT8 *)HeadersBaseAddress),\r
+    sizeof (PCI_EXPRESS_EXTENDED_CAPABILITIES_LATENCE_TOLERANCE_REPORTING),\r
+    (VOID *)(HeaderAddress)\r
+    );\r
+  return (EFI_SUCCESS);\r
+}\r
+\r
+/**\r
+  Function to interpret and print out the serial number structure\r
+\r
+  @param[in] HeaderAddress        The Address of this capability header.\r
+  @param[in] HeadersBaseAddress   The address of all the extended capability headers.\r
+**/\r
+EFI_STATUS\r
+PrintInterpretedExtendedCompatibilitySerialNumber (\r
+  IN CONST PCI_EXP_EXT_HDR  *HeaderAddress,\r
+  IN CONST PCI_EXP_EXT_HDR  *HeadersBaseAddress\r
+  )\r
+{\r
+  CONST PCI_EXPRESS_EXTENDED_CAPABILITIES_SERIAL_NUMBER  *Header;\r
+\r
+  Header = (PCI_EXPRESS_EXTENDED_CAPABILITIES_SERIAL_NUMBER *)HeaderAddress;\r
+\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
+    STRING_TOKEN (STR_PCI_EXT_CAP_SN),\r
+    gShellDebug1HiiHandle,\r
+    Header->SerialNumber\r
+    );\r
+  DumpHex (\r
+    4,\r
+    EFI_PCIE_CAPABILITY_BASE_OFFSET + ((UINT8 *)HeaderAddress - (UINT8 *)HeadersBaseAddress),\r
+    sizeof (PCI_EXPRESS_EXTENDED_CAPABILITIES_SERIAL_NUMBER),\r
+    (VOID *)(HeaderAddress)\r
+    );\r
+  return (EFI_SUCCESS);\r
+}\r
+\r
+/**\r
+  Function to interpret and print out the RCRB structure\r
+\r
+  @param[in] HeaderAddress        The Address of this capability header.\r
+  @param[in] HeadersBaseAddress   The address of all the extended capability headers.\r
+**/\r
+EFI_STATUS\r
+PrintInterpretedExtendedCompatibilityRcrb (\r
+  IN CONST PCI_EXP_EXT_HDR  *HeaderAddress,\r
+  IN CONST PCI_EXP_EXT_HDR  *HeadersBaseAddress\r
+  )\r
+{\r
+  CONST PCI_EXPRESS_EXTENDED_CAPABILITIES_RCRB_HEADER  *Header;\r
+\r
+  Header = (PCI_EXPRESS_EXTENDED_CAPABILITIES_RCRB_HEADER *)HeaderAddress;\r
+\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
+    STRING_TOKEN (STR_PCI_EXT_CAP_RCRB),\r
+    gShellDebug1HiiHandle,\r
+    Header->VendorId,\r
+    Header->DeviceId,\r
+    Header->RcrbCapabilities,\r
+    Header->RcrbControl\r
+    );\r
+  DumpHex (\r
+    4,\r
+    EFI_PCIE_CAPABILITY_BASE_OFFSET + ((UINT8 *)HeaderAddress - (UINT8 *)HeadersBaseAddress),\r
+    sizeof (PCI_EXPRESS_EXTENDED_CAPABILITIES_RCRB_HEADER),\r
+    (VOID *)(HeaderAddress)\r
+    );\r
+  return (EFI_SUCCESS);\r
+}\r
+\r
+/**\r
+  Function to interpret and print out the vendor specific structure\r
+\r
+  @param[in] HeaderAddress        The Address of this capability header.\r
+  @param[in] HeadersBaseAddress   The address of all the extended capability headers.\r
+**/\r
+EFI_STATUS\r
+PrintInterpretedExtendedCompatibilityVendorSpecific (\r
+  IN CONST PCI_EXP_EXT_HDR  *HeaderAddress,\r
+  IN CONST PCI_EXP_EXT_HDR  *HeadersBaseAddress\r
+  )\r
+{\r
+  CONST PCI_EXPRESS_EXTENDED_CAPABILITIES_VENDOR_SPECIFIC  *Header;\r
+\r
+  Header = (PCI_EXPRESS_EXTENDED_CAPABILITIES_VENDOR_SPECIFIC *)HeaderAddress;\r
+\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
+    STRING_TOKEN (STR_PCI_EXT_CAP_VEN),\r
+    gShellDebug1HiiHandle,\r
+    Header->VendorSpecificHeader\r
+    );\r
+  DumpHex (\r
+    4,\r
+    EFI_PCIE_CAPABILITY_BASE_OFFSET + ((UINT8 *)HeaderAddress - (UINT8 *)HeadersBaseAddress),\r
+    PCI_EXPRESS_EXTENDED_CAPABILITY_VENDOR_SPECIFIC_GET_SIZE (Header),\r
+    (VOID *)(HeaderAddress)\r
+    );\r
+  return (EFI_SUCCESS);\r
+}\r
+\r
+/**\r
+  Function to interpret and print out the Event Collector Endpoint Association structure\r
+\r
+  @param[in] HeaderAddress        The Address of this capability header.\r
+  @param[in] HeadersBaseAddress   The address of all the extended capability headers.\r
+**/\r
+EFI_STATUS\r
+PrintInterpretedExtendedCompatibilityECEA (\r
+  IN CONST PCI_EXP_EXT_HDR  *HeaderAddress,\r
+  IN CONST PCI_EXP_EXT_HDR  *HeadersBaseAddress\r
+  )\r
+{\r
+  CONST PCI_EXPRESS_EXTENDED_CAPABILITIES_EVENT_COLLECTOR_ENDPOINT_ASSOCIATION  *Header;\r
+\r
+  Header = (PCI_EXPRESS_EXTENDED_CAPABILITIES_EVENT_COLLECTOR_ENDPOINT_ASSOCIATION *)HeaderAddress;\r
 \r
-  @param[in] IoDev          The pointer to the root pci protocol.\r
-  @param[in] Address        The Address to start at.\r
-  @param[in] CapabilityPtr  The offset from the address to start.\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
+    STRING_TOKEN (STR_PCI_EXT_CAP_ECEA),\r
+    gShellDebug1HiiHandle,\r
+    Header->AssociationBitmap\r
+    );\r
+  DumpHex (\r
+    4,\r
+    EFI_PCIE_CAPABILITY_BASE_OFFSET + ((UINT8 *)HeaderAddress - (UINT8 *)HeadersBaseAddress),\r
+    sizeof (PCI_EXPRESS_EXTENDED_CAPABILITIES_EVENT_COLLECTOR_ENDPOINT_ASSOCIATION),\r
+    (VOID *)(HeaderAddress)\r
+    );\r
+  return (EFI_SUCCESS);\r
+}\r
+\r
+/**\r
+  Function to interpret and print out the ARI structure\r
+\r
+  @param[in] HeaderAddress        The Address of this capability header.\r
+  @param[in] HeadersBaseAddress   The address of all the extended capability headers.\r
+**/\r
+EFI_STATUS\r
+PrintInterpretedExtendedCompatibilityAri (\r
+  IN CONST PCI_EXP_EXT_HDR  *HeaderAddress,\r
+  IN CONST PCI_EXP_EXT_HDR  *HeadersBaseAddress\r
+  )\r
+{\r
+  CONST PCI_EXPRESS_EXTENDED_CAPABILITIES_ARI_CAPABILITY  *Header;\r
+\r
+  Header = (PCI_EXPRESS_EXTENDED_CAPABILITIES_ARI_CAPABILITY *)HeaderAddress;\r
+\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
+    STRING_TOKEN (STR_PCI_EXT_CAP_ARI),\r
+    gShellDebug1HiiHandle,\r
+    Header->AriCapability,\r
+    Header->AriControl\r
+    );\r
+  DumpHex (\r
+    4,\r
+    EFI_PCIE_CAPABILITY_BASE_OFFSET + ((UINT8 *)HeaderAddress - (UINT8 *)HeadersBaseAddress),\r
+    sizeof (PCI_EXPRESS_EXTENDED_CAPABILITIES_ARI_CAPABILITY),\r
+    (VOID *)(HeaderAddress)\r
+    );\r
+  return (EFI_SUCCESS);\r
+}\r
+\r
+/**\r
+  Function to interpret and print out the DPA structure\r
+\r
+  @param[in] HeaderAddress        The Address of this capability header.\r
+  @param[in] HeadersBaseAddress   The address of all the extended capability headers.\r
+**/\r
+EFI_STATUS\r
+PrintInterpretedExtendedCompatibilityDynamicPowerAllocation (\r
+  IN CONST PCI_EXP_EXT_HDR  *HeaderAddress,\r
+  IN CONST PCI_EXP_EXT_HDR  *HeadersBaseAddress\r
+  )\r
+{\r
+  CONST PCI_EXPRESS_EXTENDED_CAPABILITIES_DYNAMIC_POWER_ALLOCATION  *Header;\r
+  UINT8                                                             LinkCount;\r
+\r
+  Header = (PCI_EXPRESS_EXTENDED_CAPABILITIES_DYNAMIC_POWER_ALLOCATION *)HeaderAddress;\r
+\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
+    STRING_TOKEN (STR_PCI_EXT_CAP_DPA),\r
+    gShellDebug1HiiHandle,\r
+    Header->DpaCapability,\r
+    Header->DpaLatencyIndicator,\r
+    Header->DpaStatus,\r
+    Header->DpaControl\r
+    );\r
+  for (LinkCount = 0; LinkCount < PCI_EXPRESS_EXTENDED_CAPABILITY_DYNAMIC_POWER_ALLOCATION_GET_SUBSTATE_MAX (Header) + 1; LinkCount++) {\r
+    ShellPrintHiiEx (\r
+      -1,\r
+      -1,\r
+      NULL,\r
+      STRING_TOKEN (STR_PCI_EXT_CAP_DPA2),\r
+      gShellDebug1HiiHandle,\r
+      LinkCount+1,\r
+      Header->DpaPowerAllocationArray[LinkCount]\r
+      );\r
+  }\r
+\r
+  DumpHex (\r
+    4,\r
+    EFI_PCIE_CAPABILITY_BASE_OFFSET + ((UINT8 *)HeaderAddress - (UINT8 *)HeadersBaseAddress),\r
+    sizeof (PCI_EXPRESS_EXTENDED_CAPABILITIES_DYNAMIC_POWER_ALLOCATION) - 1 + PCI_EXPRESS_EXTENDED_CAPABILITY_DYNAMIC_POWER_ALLOCATION_GET_SUBSTATE_MAX (Header),\r
+    (VOID *)(HeaderAddress)\r
+    );\r
+  return (EFI_SUCCESS);\r
+}\r
+\r
+/**\r
+  Function to interpret and print out the link declaration structure\r
+\r
+  @param[in] HeaderAddress        The Address of this capability header.\r
+  @param[in] HeadersBaseAddress   The address of all the extended capability headers.\r
+**/\r
+EFI_STATUS\r
+PrintInterpretedExtendedCompatibilityLinkDeclaration (\r
+  IN CONST PCI_EXP_EXT_HDR  *HeaderAddress,\r
+  IN CONST PCI_EXP_EXT_HDR  *HeadersBaseAddress\r
+  )\r
+{\r
+  CONST PCI_EXPRESS_EXTENDED_CAPABILITIES_LINK_DECLARATION  *Header;\r
+  UINT8                                                     LinkCount;\r
+\r
+  Header = (PCI_EXPRESS_EXTENDED_CAPABILITIES_LINK_DECLARATION *)HeaderAddress;\r
+\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
+    STRING_TOKEN (STR_PCI_EXT_CAP_LINK_DECLAR),\r
+    gShellDebug1HiiHandle,\r
+    Header->ElementSelfDescription\r
+    );\r
+\r
+  for (LinkCount = 0; LinkCount < PCI_EXPRESS_EXTENDED_CAPABILITY_LINK_DECLARATION_GET_LINK_COUNT (Header); LinkCount++) {\r
+    ShellPrintHiiEx (\r
+      -1,\r
+      -1,\r
+      NULL,\r
+      STRING_TOKEN (STR_PCI_EXT_CAP_LINK_DECLAR2),\r
+      gShellDebug1HiiHandle,\r
+      LinkCount+1,\r
+      Header->LinkEntry[LinkCount]\r
+      );\r
+  }\r
+\r
+  DumpHex (\r
+    4,\r
+    EFI_PCIE_CAPABILITY_BASE_OFFSET + ((UINT8 *)HeaderAddress - (UINT8 *)HeadersBaseAddress),\r
+    sizeof (PCI_EXPRESS_EXTENDED_CAPABILITIES_LINK_DECLARATION) + (PCI_EXPRESS_EXTENDED_CAPABILITY_LINK_DECLARATION_GET_LINK_COUNT (Header)-1)*sizeof (UINT32),\r
+    (VOID *)(HeaderAddress)\r
+    );\r
+  return (EFI_SUCCESS);\r
+}\r
+\r
+/**\r
+  Function to interpret and print out the Advanced Error Reporting structure\r
+\r
+  @param[in] HeaderAddress        The Address of this capability header.\r
+  @param[in] HeadersBaseAddress   The address of all the extended capability headers.\r
+**/\r
+EFI_STATUS\r
+PrintInterpretedExtendedCompatibilityAer (\r
+  IN CONST PCI_EXP_EXT_HDR  *HeaderAddress,\r
+  IN CONST PCI_EXP_EXT_HDR  *HeadersBaseAddress\r
+  )\r
+{\r
+  CONST PCI_EXPRESS_EXTENDED_CAPABILITIES_ADVANCED_ERROR_REPORTING  *Header;\r
+\r
+  Header = (PCI_EXPRESS_EXTENDED_CAPABILITIES_ADVANCED_ERROR_REPORTING *)HeaderAddress;\r
+\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
+    STRING_TOKEN (STR_PCI_EXT_CAP_AER),\r
+    gShellDebug1HiiHandle,\r
+    Header->UncorrectableErrorStatus,\r
+    Header->UncorrectableErrorMask,\r
+    Header->UncorrectableErrorSeverity,\r
+    Header->CorrectableErrorStatus,\r
+    Header->CorrectableErrorMask,\r
+    Header->AdvancedErrorCapabilitiesAndControl,\r
+    Header->HeaderLog[0],\r
+    Header->HeaderLog[1],\r
+    Header->HeaderLog[2],\r
+    Header->HeaderLog[3],\r
+    Header->RootErrorCommand,\r
+    Header->RootErrorStatus,\r
+    Header->ErrorSourceIdentification,\r
+    Header->CorrectableErrorSourceIdentification,\r
+    Header->TlpPrefixLog[0],\r
+    Header->TlpPrefixLog[1],\r
+    Header->TlpPrefixLog[2],\r
+    Header->TlpPrefixLog[3]\r
+    );\r
+  DumpHex (\r
+    4,\r
+    EFI_PCIE_CAPABILITY_BASE_OFFSET + ((UINT8 *)HeaderAddress - (UINT8 *)HeadersBaseAddress),\r
+    sizeof (PCI_EXPRESS_EXTENDED_CAPABILITIES_ADVANCED_ERROR_REPORTING),\r
+    (VOID *)(HeaderAddress)\r
+    );\r
+  return (EFI_SUCCESS);\r
+}\r
+\r
+/**\r
+  Function to interpret and print out the multicast structure\r
+\r
+  @param[in] HeaderAddress        The Address of this capability header.\r
+  @param[in] HeadersBaseAddress   The address of all the extended capability headers.\r
+  @param[in] PciExpressCapPtr     The address of the PCIe capabilities structure.\r
+**/\r
+EFI_STATUS\r
+PrintInterpretedExtendedCompatibilityMulticast (\r
+  IN CONST PCI_EXP_EXT_HDR        *HeaderAddress,\r
+  IN CONST PCI_EXP_EXT_HDR        *HeadersBaseAddress,\r
+  IN CONST PCI_CAPABILITY_PCIEXP  *PciExpressCapPtr\r
+  )\r
+{\r
+  CONST PCI_EXPRESS_EXTENDED_CAPABILITIES_MULTICAST  *Header;\r
+\r
+  Header = (PCI_EXPRESS_EXTENDED_CAPABILITIES_MULTICAST *)HeaderAddress;\r
+\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
+    STRING_TOKEN (STR_PCI_EXT_CAP_MULTICAST),\r
+    gShellDebug1HiiHandle,\r
+    Header->MultiCastCapability,\r
+    Header->MulticastControl,\r
+    Header->McBaseAddress,\r
+    Header->McReceiveAddress,\r
+    Header->McBlockAll,\r
+    Header->McBlockUntranslated,\r
+    Header->McOverlayBar\r
+    );\r
+\r
+  DumpHex (\r
+    4,\r
+    EFI_PCIE_CAPABILITY_BASE_OFFSET + ((UINT8 *)HeaderAddress - (UINT8 *)HeadersBaseAddress),\r
+    sizeof (PCI_EXPRESS_EXTENDED_CAPABILITIES_MULTICAST),\r
+    (VOID *)(HeaderAddress)\r
+    );\r
+\r
+  return (EFI_SUCCESS);\r
+}\r
+\r
+/**\r
+  Function to interpret and print out the virtual channel and multi virtual channel structure\r
+\r
+  @param[in] HeaderAddress        The Address of this capability header.\r
+  @param[in] HeadersBaseAddress   The address of all the extended capability headers.\r
 **/\r
 EFI_STATUS\r
+PrintInterpretedExtendedCompatibilityVirtualChannel (\r
+  IN CONST PCI_EXP_EXT_HDR  *HeaderAddress,\r
+  IN CONST PCI_EXP_EXT_HDR  *HeadersBaseAddress\r
+  )\r
+{\r
+  CONST PCI_EXPRESS_EXTENDED_CAPABILITIES_VIRTUAL_CHANNEL_CAPABILITY  *Header;\r
+  CONST PCI_EXPRESS_EXTENDED_CAPABILITIES_VIRTUAL_CHANNEL_VC          *CapabilityItem;\r
+  UINT32                                                              ItemCount;\r
+\r
+  Header = (PCI_EXPRESS_EXTENDED_CAPABILITIES_VIRTUAL_CHANNEL_CAPABILITY *)HeaderAddress;\r
+\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
+    STRING_TOKEN (STR_PCI_EXT_CAP_VC_BASE),\r
+    gShellDebug1HiiHandle,\r
+    Header->ExtendedVcCount,\r
+    Header->PortVcCapability1,\r
+    Header->PortVcCapability2,\r
+    Header->VcArbTableOffset,\r
+    Header->PortVcControl,\r
+    Header->PortVcStatus\r
+    );\r
+  for (ItemCount = 0; ItemCount < Header->ExtendedVcCount; ItemCount++) {\r
+    CapabilityItem = &Header->Capability[ItemCount];\r
+    ShellPrintHiiEx (\r
+      -1,\r
+      -1,\r
+      NULL,\r
+      STRING_TOKEN (STR_PCI_EXT_CAP_VC_ITEM),\r
+      gShellDebug1HiiHandle,\r
+      ItemCount+1,\r
+      CapabilityItem->VcResourceCapability,\r
+      CapabilityItem->PortArbTableOffset,\r
+      CapabilityItem->VcResourceControl,\r
+      CapabilityItem->VcResourceStatus\r
+      );\r
+  }\r
+\r
+  DumpHex (\r
+    4,\r
+    EFI_PCIE_CAPABILITY_BASE_OFFSET + ((UINT8 *)HeaderAddress - (UINT8 *)HeadersBaseAddress),\r
+    sizeof (PCI_EXPRESS_EXTENDED_CAPABILITIES_VIRTUAL_CHANNEL_CAPABILITY)\r
+    + Header->ExtendedVcCount * sizeof (PCI_EXPRESS_EXTENDED_CAPABILITIES_VIRTUAL_CHANNEL_VC),\r
+    (VOID *)(HeaderAddress)\r
+    );\r
+\r
+  return (EFI_SUCCESS);\r
+}\r
+\r
+/**\r
+  Function to interpret and print out the resizeable bar structure\r
+\r
+  @param[in] HeaderAddress        The Address of this capability header.\r
+  @param[in] HeadersBaseAddress   The address of all the extended capability headers.\r
+**/\r
+EFI_STATUS\r
+PrintInterpretedExtendedCompatibilityResizeableBar (\r
+  IN CONST PCI_EXP_EXT_HDR  *HeaderAddress,\r
+  IN CONST PCI_EXP_EXT_HDR  *HeadersBaseAddress\r
+  )\r
+{\r
+  CONST PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR  *Header;\r
+  UINT32                                                 ItemCount;\r
+\r
+  Header = (PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR *)HeaderAddress;\r
+\r
+  for (ItemCount = 0; ItemCount < (UINT32)GET_NUMBER_RESIZABLE_BARS (Header); ItemCount++) {\r
+    ShellPrintHiiEx (\r
+      -1,\r
+      -1,\r
+      NULL,\r
+      STRING_TOKEN (STR_PCI_EXT_CAP_RESIZE_BAR),\r
+      gShellDebug1HiiHandle,\r
+      ItemCount+1,\r
+      Header->Capability[ItemCount].ResizableBarCapability.Uint32,\r
+      Header->Capability[ItemCount].ResizableBarControl.Uint32\r
+      );\r
+  }\r
+\r
+  DumpHex (\r
+    4,\r
+    EFI_PCIE_CAPABILITY_BASE_OFFSET + ((UINT8 *)HeaderAddress - (UINT8 *)HeadersBaseAddress),\r
+    (UINT32)GET_NUMBER_RESIZABLE_BARS (Header) * sizeof (PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_ENTRY),\r
+    (VOID *)(HeaderAddress)\r
+    );\r
+\r
+  return (EFI_SUCCESS);\r
+}\r
+\r
+/**\r
+  Function to interpret and print out the TPH structure\r
+\r
+  @param[in] HeaderAddress        The Address of this capability header.\r
+  @param[in] HeadersBaseAddress   The address of all the extended capability headers.\r
+**/\r
+EFI_STATUS\r
+PrintInterpretedExtendedCompatibilityTph (\r
+  IN CONST PCI_EXP_EXT_HDR  *HeaderAddress,\r
+  IN CONST PCI_EXP_EXT_HDR  *HeadersBaseAddress\r
+  )\r
+{\r
+  CONST PCI_EXPRESS_EXTENDED_CAPABILITIES_TPH  *Header;\r
+\r
+  Header = (PCI_EXPRESS_EXTENDED_CAPABILITIES_TPH *)HeaderAddress;\r
+\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
+    STRING_TOKEN (STR_PCI_EXT_CAP_TPH),\r
+    gShellDebug1HiiHandle,\r
+    Header->TphRequesterCapability,\r
+    Header->TphRequesterControl\r
+    );\r
+  DumpHex (\r
+    8,\r
+    EFI_PCIE_CAPABILITY_BASE_OFFSET + ((UINT8 *)Header->TphStTable - (UINT8 *)HeadersBaseAddress),\r
+    GET_TPH_TABLE_SIZE (Header),\r
+    (VOID *)Header->TphStTable\r
+    );\r
+\r
+  DumpHex (\r
+    4,\r
+    EFI_PCIE_CAPABILITY_BASE_OFFSET + ((UINT8 *)HeaderAddress - (UINT8 *)HeadersBaseAddress),\r
+    sizeof (PCI_EXPRESS_EXTENDED_CAPABILITIES_TPH) + GET_TPH_TABLE_SIZE (Header) - sizeof (UINT16),\r
+    (VOID *)(HeaderAddress)\r
+    );\r
+\r
+  return (EFI_SUCCESS);\r
+}\r
+\r
+/**\r
+  Function to interpret and print out the secondary PCIe capability structure\r
+\r
+  @param[in] HeaderAddress        The Address of this capability header.\r
+  @param[in] HeadersBaseAddress   The address of all the extended capability headers.\r
+  @param[in] PciExpressCapPtr     The address of the PCIe capabilities structure.\r
+**/\r
+EFI_STATUS\r
+PrintInterpretedExtendedCompatibilitySecondary (\r
+  IN CONST PCI_EXP_EXT_HDR        *HeaderAddress,\r
+  IN CONST PCI_EXP_EXT_HDR        *HeadersBaseAddress,\r
+  IN CONST PCI_CAPABILITY_PCIEXP  *PciExpressCap\r
+  )\r
+{\r
+  CONST PCI_EXPRESS_EXTENDED_CAPABILITIES_SECONDARY_PCIE  *Header;\r
+\r
+  Header = (PCI_EXPRESS_EXTENDED_CAPABILITIES_SECONDARY_PCIE *)HeaderAddress;\r
+\r
+  ShellPrintHiiEx (\r
+    -1,\r
+    -1,\r
+    NULL,\r
+    STRING_TOKEN (STR_PCI_EXT_CAP_SECONDARY),\r
+    gShellDebug1HiiHandle,\r
+    Header->LinkControl3.Uint32,\r
+    Header->LaneErrorStatus\r
+    );\r
+  DumpHex (\r
+    8,\r
+    EFI_PCIE_CAPABILITY_BASE_OFFSET + ((UINT8 *)Header->EqualizationControl - (UINT8 *)HeadersBaseAddress),\r
+    PciExpressCap->LinkCapability.Bits.MaxLinkWidth * sizeof (PCI_EXPRESS_REG_LANE_EQUALIZATION_CONTROL),\r
+    (VOID *)Header->EqualizationControl\r
+    );\r
+\r
+  DumpHex (\r
+    4,\r
+    EFI_PCIE_CAPABILITY_BASE_OFFSET + ((UINT8 *)HeaderAddress - (UINT8 *)HeadersBaseAddress),\r
+    sizeof (PCI_EXPRESS_EXTENDED_CAPABILITIES_SECONDARY_PCIE) - sizeof (Header->EqualizationControl)\r
+    + PciExpressCap->LinkCapability.Bits.MaxLinkWidth * sizeof (PCI_EXPRESS_REG_LANE_EQUALIZATION_CONTROL),\r
+    (VOID *)(HeaderAddress)\r
+    );\r
+\r
+  return (EFI_SUCCESS);\r
+}\r
+\r
+/**\r
+  Display Pcie extended capability details\r
+\r
+  @param[in] HeadersBaseAddress   The address of all the extended capability headers.\r
+  @param[in] HeaderAddress        The address of this capability header.\r
+  @param[in] PciExpressCapPtr     The address of the PCIe capabilities structure.\r
+**/\r
+EFI_STATUS\r
+PrintPciExtendedCapabilityDetails (\r
+  IN CONST PCI_EXP_EXT_HDR        *HeadersBaseAddress,\r
+  IN CONST PCI_EXP_EXT_HDR        *HeaderAddress,\r
+  IN CONST PCI_CAPABILITY_PCIEXP  *PciExpressCapPtr\r
+  )\r
+{\r
+  switch (HeaderAddress->CapabilityId) {\r
+    case PCI_EXPRESS_EXTENDED_CAPABILITY_ADVANCED_ERROR_REPORTING_ID:\r
+      return PrintInterpretedExtendedCompatibilityAer (HeaderAddress, HeadersBaseAddress);\r
+    case PCI_EXPRESS_EXTENDED_CAPABILITY_LINK_CONTROL_ID:\r
+      return PrintInterpretedExtendedCompatibilityLinkControl (HeaderAddress, HeadersBaseAddress);\r
+    case PCI_EXPRESS_EXTENDED_CAPABILITY_LINK_DECLARATION_ID:\r
+      return PrintInterpretedExtendedCompatibilityLinkDeclaration (HeaderAddress, HeadersBaseAddress);\r
+    case PCI_EXPRESS_EXTENDED_CAPABILITY_SERIAL_NUMBER_ID:\r
+      return PrintInterpretedExtendedCompatibilitySerialNumber (HeaderAddress, HeadersBaseAddress);\r
+    case PCI_EXPRESS_EXTENDED_CAPABILITY_POWER_BUDGETING_ID:\r
+      return PrintInterpretedExtendedCompatibilityPowerBudgeting (HeaderAddress, HeadersBaseAddress);\r
+    case PCI_EXPRESS_EXTENDED_CAPABILITY_ACS_EXTENDED_ID:\r
+      return PrintInterpretedExtendedCompatibilityAcs (HeaderAddress, HeadersBaseAddress);\r
+    case PCI_EXPRESS_EXTENDED_CAPABILITY_LATENCE_TOLERANCE_REPORTING_ID:\r
+      return PrintInterpretedExtendedCompatibilityLatencyToleranceReporting (HeaderAddress, HeadersBaseAddress);\r
+    case PCI_EXPRESS_EXTENDED_CAPABILITY_ARI_CAPABILITY_ID:\r
+      return PrintInterpretedExtendedCompatibilityAri (HeaderAddress, HeadersBaseAddress);\r
+    case PCI_EXPRESS_EXTENDED_CAPABILITY_RCRB_HEADER_ID:\r
+      return PrintInterpretedExtendedCompatibilityRcrb (HeaderAddress, HeadersBaseAddress);\r
+    case PCI_EXPRESS_EXTENDED_CAPABILITY_VENDOR_SPECIFIC_ID:\r
+      return PrintInterpretedExtendedCompatibilityVendorSpecific (HeaderAddress, HeadersBaseAddress);\r
+    case PCI_EXPRESS_EXTENDED_CAPABILITY_DYNAMIC_POWER_ALLOCATION_ID:\r
+      return PrintInterpretedExtendedCompatibilityDynamicPowerAllocation (HeaderAddress, HeadersBaseAddress);\r
+    case PCI_EXPRESS_EXTENDED_CAPABILITY_EVENT_COLLECTOR_ENDPOINT_ASSOCIATION_ID:\r
+      return PrintInterpretedExtendedCompatibilityECEA (HeaderAddress, HeadersBaseAddress);\r
+    case PCI_EXPRESS_EXTENDED_CAPABILITY_VIRTUAL_CHANNEL_ID:\r
+    case PCI_EXPRESS_EXTENDED_CAPABILITY_MULTI_FUNCTION_VIRTUAL_CHANNEL_ID:\r
+      return PrintInterpretedExtendedCompatibilityVirtualChannel (HeaderAddress, HeadersBaseAddress);\r
+    case PCI_EXPRESS_EXTENDED_CAPABILITY_MULTICAST_ID:\r
+      //\r
+      // should only be present if PCIE_CAP_DEVICEPORT_TYPE(PciExpressCapPtr->PcieCapReg) == 0100b, 0101b, or 0110b\r
+      //\r
+      return PrintInterpretedExtendedCompatibilityMulticast (HeaderAddress, HeadersBaseAddress, PciExpressCapPtr);\r
+    case PCI_EXPRESS_EXTENDED_CAPABILITY_RESIZABLE_BAR_ID:\r
+      return PrintInterpretedExtendedCompatibilityResizeableBar (HeaderAddress, HeadersBaseAddress);\r
+    case PCI_EXPRESS_EXTENDED_CAPABILITY_TPH_ID:\r
+      return PrintInterpretedExtendedCompatibilityTph (HeaderAddress, HeadersBaseAddress);\r
+    case PCI_EXPRESS_EXTENDED_CAPABILITY_SECONDARY_PCIE_ID:\r
+      return PrintInterpretedExtendedCompatibilitySecondary (HeaderAddress, HeadersBaseAddress, PciExpressCapPtr);\r
+    default:\r
+      ShellPrintEx (\r
+        -1,\r
+        -1,\r
+        L"Unknown PCIe extended capability ID (%04xh).  No interpretation available.\r\n",\r
+        HeaderAddress->CapabilityId\r
+        );\r
+      return EFI_SUCCESS;\r
+  }\r
+}\r
+\r
+/**\r
+  Display Pcie device structure.\r
+\r
+  @param[in] PciExpressCap       PCI Express capability buffer.\r
+  @param[in] ExtendedConfigSpace PCI Express extended configuration space.\r
+  @param[in] ExtendedConfigSize  PCI Express extended configuration size.\r
+  @param[in] ExtendedCapability  PCI Express extended capability ID to explain.\r
+**/\r
+VOID\r
 PciExplainPciExpress (\r
-  IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL         *IoDev,\r
-  IN  UINT64                                  Address,\r
-  IN  UINT8                                   CapabilityPtr\r
+  IN  PCI_CAPABILITY_PCIEXP  *PciExpressCap,\r
+  IN  UINT8                  *ExtendedConfigSpace,\r
+  IN  UINTN                  ExtendedConfigSize,\r
+  IN CONST UINT16            ExtendedCapability\r
   )\r
 {\r
+  UINT8            DevicePortType;\r
+  UINTN            Index;\r
+  UINT8            *RegAddr;\r
+  UINTN            RegValue;\r
+  PCI_EXP_EXT_HDR  *ExtHdr;\r
 \r
-  PCIE_CAP_STURCTURE  PciExpressCap;\r
-  EFI_STATUS          Status;\r
-  UINT64              CapRegAddress;\r
-  UINT8               Bus;\r
-  UINT8               Dev;\r
-  UINT8               Func;\r
-  UINT8               *ExRegBuffer;\r
-  UINTN               ExtendRegSize;\r
-  UINT64              Pciex_Address;\r
-  UINT8               DevicePortType;\r
-  UINTN               Index;\r
-  UINT8               *RegAddr;\r
-  UINTN               RegValue;\r
-\r
-  CapRegAddress = Address + CapabilityPtr;\r
-  IoDev->Pci.Read (\r
-              IoDev,\r
-              EfiPciWidthUint32,\r
-              CapRegAddress,\r
-              sizeof (PciExpressCap) / sizeof (UINT32),\r
-              &PciExpressCap\r
-             );\r
-\r
-  DevicePortType = (UINT8) PCIE_CAP_DEVICEPORT_TYPE (PciExpressCap.PcieCapReg);\r
+  DevicePortType = (UINT8)PciExpressCap->Capability.Bits.DevicePortType;\r
 \r
   ShellPrintEx (-1, -1, L"\r\nPci Express device capability structure:\r\n");\r
 \r
   for (Index = 0; PcieExplainList[Index].Type < PcieExplainTypeMax; Index++) {\r
-    if (ShellGetExecutionBreakFlag()) {\r
-      goto Done;\r
+    if (ShellGetExecutionBreakFlag ()) {\r
+      return;\r
     }\r
-    RegAddr = ((UINT8 *) &PciExpressCap) + PcieExplainList[Index].Offset;\r
+\r
+    RegAddr = (UINT8 *)PciExpressCap + PcieExplainList[Index].Offset;\r
     switch (PcieExplainList[Index].Width) {\r
       case FieldWidthUINT8:\r
-        RegValue = *(UINT8 *) RegAddr;\r
+        RegValue = *(UINT8 *)RegAddr;\r
         break;\r
       case FieldWidthUINT16:\r
-        RegValue = *(UINT16 *) RegAddr;\r
+        RegValue = *(UINT16 *)RegAddr;\r
         break;\r
       case FieldWidthUINT32:\r
-        RegValue = *(UINT32 *) RegAddr;\r
+        RegValue = *(UINT32 *)RegAddr;\r
         break;\r
       default:\r
         RegValue = 0;\r
         break;\r
     }\r
-    ShellPrintHiiEx(-1, -1, NULL,\r
+\r
+    ShellPrintHiiEx (\r
+      -1,\r
+      -1,\r
+      NULL,\r
       PcieExplainList[Index].Token,\r
       gShellDebug1HiiHandle,\r
       PcieExplainList[Index].Offset,\r
       RegValue\r
-     );\r
+      );\r
     if (PcieExplainList[Index].Func == NULL) {\r
       continue;\r
     }\r
+\r
     switch (PcieExplainList[Index].Type) {\r
       case PcieExplainTypeLink:\r
         //\r
@@ -4666,10 +6251,12 @@ PciExplainPciExpress (
         // a) Root Complex Integrated Endpoint\r
         // b) Root Complex Event Collector\r
         //\r
-        if (DevicePortType == PCIE_ROOT_COMPLEX_INTEGRATED_PORT ||\r
-            DevicePortType == PCIE_ROOT_COMPLEX_EVENT_COLLECTOR) {\r
+        if ((DevicePortType == PCIE_DEVICE_PORT_TYPE_ROOT_COMPLEX_INTEGRATED_ENDPOINT) ||\r
+            (DevicePortType == PCIE_DEVICE_PORT_TYPE_ROOT_COMPLEX_EVENT_COLLECTOR))\r
+        {\r
           continue;\r
         }\r
+\r
         break;\r
       case PcieExplainTypeSlot:\r
         //\r
@@ -4678,68 +6265,52 @@ PciExplainPciExpress (
         // b) Downstream Port of PCI Express Switch\r
         // and when SlotImplemented bit is set in PCIE cap register.\r
         //\r
-        if ((DevicePortType != PCIE_ROOT_COMPLEX_ROOT_PORT &&\r
-             DevicePortType != PCIE_SWITCH_DOWNSTREAM_PORT) ||\r
-            !PCIE_CAP_SLOT_IMPLEMENTED (PciExpressCap.PcieCapReg)) {\r
+        if (((DevicePortType != PCIE_DEVICE_PORT_TYPE_ROOT_PORT) &&\r
+             (DevicePortType != PCIE_DEVICE_PORT_TYPE_DOWNSTREAM_PORT)) ||\r
+            !PciExpressCap->Capability.Bits.SlotImplemented)\r
+        {\r
           continue;\r
         }\r
+\r
         break;\r
       case PcieExplainTypeRoot:\r
         //\r
         // Root registers are only valid for\r
         // Root Port of PCI Express Root Complex\r
         //\r
-        if (DevicePortType != PCIE_ROOT_COMPLEX_ROOT_PORT) {\r
+        if (DevicePortType != PCIE_DEVICE_PORT_TYPE_ROOT_PORT) {\r
           continue;\r
         }\r
+\r
         break;\r
       default:\r
         break;\r
     }\r
-    PcieExplainList[Index].Func (&PciExpressCap);\r
-  }\r
-\r
-  Bus           = (UINT8) (RShiftU64 (Address, 24));\r
-  Dev           = (UINT8) (RShiftU64 (Address, 16));\r
-  Func          = (UINT8) (RShiftU64 (Address, 8));\r
-\r
-  Pciex_Address = CALC_EFI_PCIEX_ADDRESS (Bus, Dev, Func, 0x100);\r
 \r
-  ExtendRegSize = 0x1000 - 0x100;\r
-\r
-  ExRegBuffer   = (UINT8 *) AllocateZeroPool (ExtendRegSize);\r
-\r
-  //\r
-  // PciRootBridgeIo protocol should support pci express extend space IO\r
-  // (Begins at offset 0x100)\r
-  //\r
-  Status = IoDev->Pci.Read (\r
-                        IoDev,\r
-                        EfiPciWidthUint32,\r
-                        Pciex_Address,\r
-                        (ExtendRegSize) / sizeof (UINT32),\r
-                        (VOID *) (ExRegBuffer)\r
-                       );\r
-  if (EFI_ERROR (Status)) {\r
-    FreePool ((VOID *) ExRegBuffer);\r
-    return EFI_UNSUPPORTED;\r
+    PcieExplainList[Index].Func (PciExpressCap);\r
   }\r
-  //\r
-  // Start outputing PciEx extend space( 0xFF-0xFFF)\r
-  //\r
-  ShellPrintEx (-1, -1, L"\r\n%HStart dumping PCIex extended configuration space (0x100 - 0xFFF).%N\r\n\r\n");\r
 \r
-  if (ExRegBuffer != NULL) {\r
-    DumpHex (\r
-      2,\r
-      0x100,\r
-      ExtendRegSize,\r
-      (VOID *) (ExRegBuffer)\r
-     );\r
+  ExtHdr = (PCI_EXP_EXT_HDR *)ExtendedConfigSpace;\r
+  while (ExtHdr->CapabilityId != 0 && ExtHdr->CapabilityVersion != 0 && ExtHdr->CapabilityId != 0xFFFF) {\r
+    //\r
+    // Process this item\r
+    //\r
+    if ((ExtendedCapability == 0xFFFF) || (ExtendedCapability == ExtHdr->CapabilityId)) {\r
+      //\r
+      // Print this item\r
+      //\r
+      PrintPciExtendedCapabilityDetails ((PCI_EXP_EXT_HDR *)ExtendedConfigSpace, ExtHdr, PciExpressCap);\r
+    }\r
 \r
-    FreePool ((VOID *) ExRegBuffer);\r
+    //\r
+    // Advance to the next item if it exists\r
+    //\r
+    if ((ExtHdr->NextCapabilityOffset != 0) &&\r
+        (ExtHdr->NextCapabilityOffset <= (UINT32)(ExtendedConfigSize + EFI_PCIE_CAPABILITY_BASE_OFFSET - sizeof (PCI_EXP_EXT_HDR))))\r
+    {\r
+      ExtHdr = (PCI_EXP_EXT_HDR *)(ExtendedConfigSpace + ExtHdr->NextCapabilityOffset - EFI_PCIE_CAPABILITY_BASE_OFFSET);\r
+    } else {\r
+      break;\r
+    }\r
   }\r
-\r
-Done:\r
-  return EFI_SUCCESS;\r
 }\r