]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFrameworkModulePkg/Bus/Pci/PciBusDxe/PciIo.c
Retired PciIncompatibleDeviceSupportLib from IntelFrameworkModulePkg.
[mirror_edk2.git] / IntelFrameworkModulePkg / Bus / Pci / PciBusDxe / PciIo.c
index a636d4ff2c1e7bc17b9bd4cb8921840dbddf25e0..5cc59672458faba94090a945ceb9e639a8e851e8 100644 (file)
@@ -1,46 +1,23 @@
-/*++\r
\r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. 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
+/** @file\r
+  EFI PCI IO protocol functions implementation for PCI Bus module.\r
 \r
-Module Name:\r
+Copyright (c) 2006 - 2009, Intel Corporation\r
+All rights reserved. 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
-  PciIo.c\r
-  \r
-Abstract:\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
 \r
-  PCI I/O Abstraction Driver\r
+**/\r
 \r
-Revision History\r
-\r
---*/\r
-\r
-#include "pcibus.h"\r
-\r
-//\r
-// Internal use only\r
-//\r
-STATIC\r
-EFI_STATUS\r
-ReportErrorStatusCode (\r
-  IN PCI_IO_DEVICE               *PciIoDevice,\r
-  IN EFI_STATUS_CODE_VALUE       Code\r
-  );\r
+#include "PciBus.h"\r
 \r
-//\r
-// PCI I/O Support Function Prototypes\r
-//\r
-//\r
 //\r
 // Pci Io Protocol Interface\r
 //\r
-static EFI_PCI_IO_PROTOCOL  PciIoInterface = {\r
+EFI_PCI_IO_PROTOCOL  mPciIoInterface = {\r
   PciIoPollMem,\r
   PciIoPollIo,\r
   {\r
@@ -69,27 +46,18 @@ static EFI_PCI_IO_PROTOCOL  PciIoInterface = {
   NULL\r
 };\r
 \r
-STATIC\r
+/**\r
+  Report a error Status code of PCI bus driver controller.\r
+\r
+  @param PciIoDevice Pci device instance.\r
+  @param Code        Status code value.\r
+\r
+**/\r
 EFI_STATUS\r
 ReportErrorStatusCode (\r
   IN PCI_IO_DEVICE               *PciIoDevice,\r
   IN EFI_STATUS_CODE_VALUE       Code\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  report a error Status code of PCI bus driver controller\r
-\r
-Arguments:\r
-  \r
-Returns:\r
-\r
-  None\r
-\r
---*/\r
-// TODO:    PciIoDevice - add argument and description to function comment\r
-// TODO:    Code - add argument and description to function comment\r
 {\r
   return REPORT_STATUS_CODE_WITH_DEVICE_PATH (\r
           EFI_ERROR_CODE | EFI_ERROR_MINOR,\r
@@ -98,64 +66,44 @@ Returns:
           );\r
 }\r
 \r
-EFI_STATUS\r
-InitializePciIoInstance (\r
-  PCI_IO_DEVICE  *PciIoDevice\r
-  )\r
-/*++\r
+/**\r
+  Initializes a PCI I/O Instance.\r
 \r
-Routine Description:\r
+  @param PciIoDevice    Pci device instance.\r
 \r
-  Initializes a PCI I/O Instance\r
+**/\r
+VOID\r
+InitializePciIoInstance (\r
+  IN PCI_IO_DEVICE               *PciIoDevice\r
+  )\r
+{\r
+  CopyMem (&PciIoDevice->PciIo, &mPciIoInterface, sizeof (EFI_PCI_IO_PROTOCOL));\r
+}\r
 \r
-Arguments:\r
-  \r
-Returns:\r
+/**\r
+  Verifies access to a PCI Base Address Register (BAR).\r
 \r
-  None\r
+  @param PciIoDevice  Pci device instance.\r
+  @param BarIndex     The BAR index of the standard PCI Configuration header to use as the\r
+                      base address for the memory or I/O operation to perform.\r
+  @param Type         Operation type could be memory or I/O.\r
+  @param Width        Signifies the width of the memory or I/O operations.\r
+  @param Count        The number of memory or I/O operations to perform.\r
+  @param Offset       The offset within the PCI configuration space for the PCI controller.\r
 \r
---*/\r
-// TODO:    PciIoDevice - add argument and description to function comment\r
-// TODO:    EFI_SUCCESS - add return value to function comment\r
-{\r
-  CopyMem (&PciIoDevice->PciIo, &PciIoInterface, sizeof (EFI_PCI_IO_PROTOCOL));\r
-  return EFI_SUCCESS;\r
-}\r
+  @retval EFI_INVALID_PARAMETER Invalid Width/BarIndex or Bar type.\r
+  @retval EFI_SUCCESS           Successfully verified.\r
 \r
+**/\r
 EFI_STATUS\r
 PciIoVerifyBarAccess (\r
-  PCI_IO_DEVICE                   *PciIoDevice,\r
-  UINT8                           BarIndex,\r
-  PCI_BAR_TYPE                    Type,\r
-  IN EFI_PCI_IO_PROTOCOL_WIDTH    Width,\r
-  IN UINTN                        Count,\r
-  UINT64                          *Offset\r
+  IN PCI_IO_DEVICE                   *PciIoDevice,\r
+  IN UINT8                           BarIndex,\r
+  IN PCI_BAR_TYPE                    Type,\r
+  IN IN EFI_PCI_IO_PROTOCOL_WIDTH    Width,\r
+  IN IN UINTN                        Count,\r
+  IN UINT64                          *Offset\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Verifies access to a PCI Base Address Register (BAR)\r
-\r
-Arguments:\r
-\r
-Returns:\r
-\r
-  None\r
-\r
---*/\r
-// TODO:    PciIoDevice - add argument and description to function comment\r
-// TODO:    BarIndex - add argument and description to function comment\r
-// TODO:    Type - add argument and description to function comment\r
-// TODO:    Width - add argument and description to function comment\r
-// TODO:    Count - add argument and description to function comment\r
-// TODO:    Offset - add argument and description to function comment\r
-// TODO:    EFI_INVALID_PARAMETER - add return value to function comment\r
-// TODO:    EFI_SUCCESS - add return value to function comment\r
-// TODO:    EFI_INVALID_PARAMETER - add return value to function comment\r
-// TODO:    EFI_INVALID_PARAMETER - add return value to function comment\r
-// TODO:    EFI_INVALID_PARAMETER - add return value to function comment\r
-// TODO:    EFI_SUCCESS - add return value to function comment\r
 {\r
   if (Width < 0 || Width >= EfiPciIoWidthMaximum) {\r
     return EFI_INVALID_PARAMETER;\r
@@ -195,34 +143,26 @@ Returns:
   return EFI_SUCCESS;\r
 }\r
 \r
+/**\r
+  Verifies access to a PCI Configuration Header.\r
+\r
+  @param PciIoDevice  Pci device instance.\r
+  @param Width        Signifies the width of the memory or I/O operations.\r
+  @param Count        The number of memory or I/O operations to perform.\r
+  @param Offset       The offset within the PCI configuration space for the PCI controller.\r
+\r
+  @retval EFI_INVALID_PARAMETER  Invalid Width\r
+  @retval EFI_UNSUPPORTED        Offset overflowed.\r
+  @retval EFI_SUCCESS            Successfully verified.\r
+\r
+**/\r
 EFI_STATUS\r
 PciIoVerifyConfigAccess (\r
-  PCI_IO_DEVICE                 *PciIoDevice,\r
+  IN PCI_IO_DEVICE              *PciIoDevice,\r
   IN EFI_PCI_IO_PROTOCOL_WIDTH  Width,\r
   IN UINTN                      Count,\r
   IN UINT64                     *Offset\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Verifies access to a PCI Config Header\r
-\r
-Arguments:\r
-\r
-Returns:\r
-\r
-  None\r
-\r
---*/\r
-// TODO:    PciIoDevice - add argument and description to function comment\r
-// TODO:    Width - add argument and description to function comment\r
-// TODO:    Count - add argument and description to function comment\r
-// TODO:    Offset - add argument and description to function comment\r
-// TODO:    EFI_INVALID_PARAMETER - add return value to function comment\r
-// TODO:    EFI_UNSUPPORTED - add return value to function comment\r
-// TODO:    EFI_UNSUPPORTED - add return value to function comment\r
-// TODO:    EFI_SUCCESS - add return value to function comment\r
 {\r
   UINT64  ExtendOffset;\r
 \r
@@ -255,6 +195,28 @@ Returns:
   return EFI_SUCCESS;\r
 }\r
 \r
+/**\r
+  Reads from the memory space of a PCI controller. Returns either when the polling exit criteria is\r
+  satisfied or after a defined duration.\r
+\r
+  @param  This                  A pointer to the EFI_PCI_IO_PROTOCOL instance.\r
+  @param  Width                 Signifies the width of the memory or I/O operations.\r
+  @param  BarIndex              The BAR index of the standard PCI Configuration header to use as the\r
+                                base address for the memory operation to perform.\r
+  @param  Offset                The offset within the selected BAR to start the memory operation.\r
+  @param  Mask                  Mask used for the polling criteria.\r
+  @param  Value                 The comparison value used for the polling exit criteria.\r
+  @param  Delay                 The number of 100 ns units to poll.\r
+  @param  Result                Pointer to the last value read from the memory location.\r
+\r
+  @retval EFI_SUCCESS           The last data returned from the access matched the poll exit criteria.\r
+  @retval EFI_UNSUPPORTED       BarIndex not valid for this PCI controller.\r
+  @retval EFI_UNSUPPORTED       Offset is not valid for the BarIndex of this PCI controller.\r
+  @retval EFI_TIMEOUT           Delay expired before a match occurred.\r
+  @retval EFI_OUT_OF_RESOURCES  The request could not be completed due to a lack of resources.\r
+  @retval EFI_INVALID_PARAMETER One or more parameters are invalid.\r
+\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 PciIoPollMem (\r
@@ -267,30 +229,6 @@ PciIoPollMem (
   IN  UINT64                     Delay,\r
   OUT UINT64                     *Result\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Poll PCI Memmory\r
-\r
-Arguments:\r
-\r
-Returns:\r
-\r
-  None\r
-\r
---*/\r
-// TODO:    This - add argument and description to function comment\r
-// TODO:    Width - add argument and description to function comment\r
-// TODO:    BarIndex - add argument and description to function comment\r
-// TODO:    Offset - add argument and description to function comment\r
-// TODO:    Mask - add argument and description to function comment\r
-// TODO:    Value - add argument and description to function comment\r
-// TODO:    Delay - add argument and description to function comment\r
-// TODO:    Result - add argument and description to function comment\r
-// TODO:    EFI_INVALID_PARAMETER - add return value to function comment\r
-// TODO:    EFI_UNSUPPORTED - add return value to function comment\r
-// TODO:    EFI_INVALID_PARAMETER - add return value to function comment\r
 {\r
   EFI_STATUS    Status;\r
   PCI_IO_DEVICE *PciIoDevice;\r
@@ -311,14 +249,14 @@ Returns:
   }\r
 \r
   Status = PciIoDevice->PciRootBridgeIo->PollMem (\r
-                                          PciIoDevice->PciRootBridgeIo,\r
-                                          (EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH) Width,\r
-                                          Offset,\r
-                                          Mask,\r
-                                          Value,\r
-                                          Delay,\r
-                                          Result\r
-                                          );\r
+                                           PciIoDevice->PciRootBridgeIo,\r
+                                           (EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH) Width,\r
+                                           Offset,\r
+                                           Mask,\r
+                                           Value,\r
+                                           Delay,\r
+                                           Result\r
+                                           );\r
 \r
   if (EFI_ERROR (Status)) {\r
     ReportErrorStatusCode (PciIoDevice, EFI_IO_BUS_PCI | EFI_IOB_EC_CONTROLLER_ERROR);\r
@@ -327,6 +265,28 @@ Returns:
   return Status;\r
 }\r
 \r
+/**\r
+  Reads from the memory space of a PCI controller. Returns either when the polling exit criteria is\r
+  satisfied or after a defined duration.\r
+\r
+  @param  This                  A pointer to the EFI_PCI_IO_PROTOCOL instance.\r
+  @param  Width                 Signifies the width of the memory or I/O operations.\r
+  @param  BarIndex              The BAR index of the standard PCI Configuration header to use as the\r
+                                base address for the memory operation to perform.\r
+  @param  Offset                The offset within the selected BAR to start the memory operation.\r
+  @param  Mask                  Mask used for the polling criteria.\r
+  @param  Value                 The comparison value used for the polling exit criteria.\r
+  @param  Delay                 The number of 100 ns units to poll.\r
+  @param  Result                Pointer to the last value read from the memory location.\r
+\r
+  @retval EFI_SUCCESS           The last data returned from the access matched the poll exit criteria.\r
+  @retval EFI_UNSUPPORTED       BarIndex not valid for this PCI controller.\r
+  @retval EFI_UNSUPPORTED       Offset is not valid for the BarIndex of this PCI controller.\r
+  @retval EFI_TIMEOUT           Delay expired before a match occurred.\r
+  @retval EFI_OUT_OF_RESOURCES  The request could not be completed due to a lack of resources.\r
+  @retval EFI_INVALID_PARAMETER One or more parameters are invalid.\r
+\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 PciIoPollIo (\r
@@ -339,30 +299,6 @@ PciIoPollIo (
   IN  UINT64                     Delay,\r
   OUT UINT64                     *Result\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Poll PCI IO\r
-\r
-Arguments:\r
-\r
-Returns:\r
-\r
-  None\r
-\r
---*/\r
-// TODO:    This - add argument and description to function comment\r
-// TODO:    Width - add argument and description to function comment\r
-// TODO:    BarIndex - add argument and description to function comment\r
-// TODO:    Offset - add argument and description to function comment\r
-// TODO:    Mask - add argument and description to function comment\r
-// TODO:    Value - add argument and description to function comment\r
-// TODO:    Delay - add argument and description to function comment\r
-// TODO:    Result - add argument and description to function comment\r
-// TODO:    EFI_INVALID_PARAMETER - add return value to function comment\r
-// TODO:    EFI_UNSUPPORTED - add return value to function comment\r
-// TODO:    EFI_INVALID_PARAMETER - add return value to function comment\r
 {\r
   EFI_STATUS    Status;\r
   PCI_IO_DEVICE *PciIoDevice;\r
@@ -379,14 +315,14 @@ Returns:
   }\r
 \r
   Status = PciIoDevice->PciRootBridgeIo->PollIo (\r
-                                          PciIoDevice->PciRootBridgeIo,\r
-                                          (EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH) Width,\r
-                                          Offset,\r
-                                          Mask,\r
-                                          Value,\r
-                                          Delay,\r
-                                          Result\r
-                                          );\r
+                                           PciIoDevice->PciRootBridgeIo,\r
+                                           (EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH) Width,\r
+                                           Offset,\r
+                                           Mask,\r
+                                           Value,\r
+                                           Delay,\r
+                                           Result\r
+                                           );\r
 \r
   if (EFI_ERROR (Status)) {\r
     ReportErrorStatusCode (PciIoDevice, EFI_IO_BUS_PCI | EFI_IOB_EC_CONTROLLER_ERROR);\r
@@ -395,6 +331,26 @@ Returns:
   return Status;\r
 }\r
 \r
+/**\r
+  Enable a PCI driver to access PCI controller registers in the PCI memory or I/O space.\r
+\r
+  @param  This                  A pointer to the EFI_PCI_IO_PROTOCOL instance.\r
+  @param  Width                 Signifies the width of the memory or I/O operations.\r
+  @param  BarIndex              The BAR index of the standard PCI Configuration header to use as the\r
+                                base address for the memory or I/O operation to perform.\r
+  @param  Offset                The offset within the selected BAR to start the memory or I/O operation.\r
+  @param  Count                 The number of memory or I/O operations to perform.\r
+  @param  Buffer                For read operations, the destination buffer to store the results. For write\r
+                                operations, the source buffer to write data from.\r
+\r
+  @retval EFI_SUCCESS           The data was read from or written to the PCI controller.\r
+  @retval EFI_UNSUPPORTED       BarIndex not valid for this PCI controller.\r
+  @retval EFI_UNSUPPORTED       The address range specified by Offset, Width, and Count is not\r
+                                valid for the PCI BAR specified by BarIndex.\r
+  @retval EFI_OUT_OF_RESOURCES  The request could not be completed due to a lack of resources.\r
+  @retval EFI_INVALID_PARAMETER One or more parameters are invalid.\r
+\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 PciIoMemRead (\r
@@ -405,27 +361,6 @@ PciIoMemRead (
   IN     UINTN                      Count,\r
   IN OUT VOID                       *Buffer\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Performs a PCI Memory Read Cycle\r
-\r
-Arguments:\r
-\r
-Returns:\r
-\r
-  None\r
-\r
---*/\r
-// TODO:    This - add argument and description to function comment\r
-// TODO:    Width - add argument and description to function comment\r
-// TODO:    BarIndex - add argument and description to function comment\r
-// TODO:    Offset - add argument and description to function comment\r
-// TODO:    Count - add argument and description to function comment\r
-// TODO:    Buffer - add argument and description to function comment\r
-// TODO:    EFI_INVALID_PARAMETER - add return value to function comment\r
-// TODO:    EFI_UNSUPPORTED - add return value to function comment\r
 {\r
   EFI_STATUS    Status;\r
   PCI_IO_DEVICE *PciIoDevice;\r
@@ -436,6 +371,10 @@ Returns:
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
+  if (Buffer == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
   Status = PciIoVerifyBarAccess (PciIoDevice, BarIndex, PciBarTypeMem, Width, Count, &Offset);\r
   if (EFI_ERROR (Status)) {\r
     return EFI_UNSUPPORTED;\r
@@ -456,6 +395,26 @@ Returns:
   return Status;\r
 }\r
 \r
+/**\r
+  Enable a PCI driver to access PCI controller registers in the PCI memory or I/O space.\r
+\r
+  @param  This                  A pointer to the EFI_PCI_IO_PROTOCOL instance.\r
+  @param  Width                 Signifies the width of the memory or I/O operations.\r
+  @param  BarIndex              The BAR index of the standard PCI Configuration header to use as the\r
+                                base address for the memory or I/O operation to perform.\r
+  @param  Offset                The offset within the selected BAR to start the memory or I/O operation.\r
+  @param  Count                 The number of memory or I/O operations to perform.\r
+  @param  Buffer                For read operations, the destination buffer to store the results. For write\r
+                                operations, the source buffer to write data from.\r
+\r
+  @retval EFI_SUCCESS           The data was read from or written to the PCI controller.\r
+  @retval EFI_UNSUPPORTED       BarIndex not valid for this PCI controller.\r
+  @retval EFI_UNSUPPORTED       The address range specified by Offset, Width, and Count is not\r
+                                valid for the PCI BAR specified by BarIndex.\r
+  @retval EFI_OUT_OF_RESOURCES  The request could not be completed due to a lack of resources.\r
+  @retval EFI_INVALID_PARAMETER One or more parameters are invalid.\r
+\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 PciIoMemWrite (\r
@@ -466,27 +425,6 @@ PciIoMemWrite (
   IN     UINTN                      Count,\r
   IN OUT VOID                       *Buffer\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Performs a PCI Memory Write Cycle\r
-\r
-Arguments:\r
-\r
-Returns:\r
-\r
-  None\r
-\r
---*/\r
-// TODO:    This - add argument and description to function comment\r
-// TODO:    Width - add argument and description to function comment\r
-// TODO:    BarIndex - add argument and description to function comment\r
-// TODO:    Offset - add argument and description to function comment\r
-// TODO:    Count - add argument and description to function comment\r
-// TODO:    Buffer - add argument and description to function comment\r
-// TODO:    EFI_INVALID_PARAMETER - add return value to function comment\r
-// TODO:    EFI_UNSUPPORTED - add return value to function comment\r
 {\r
   EFI_STATUS    Status;\r
   PCI_IO_DEVICE *PciIoDevice;\r
@@ -497,6 +435,10 @@ Returns:
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
+  if (Buffer == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
   Status = PciIoVerifyBarAccess (PciIoDevice, BarIndex, PciBarTypeMem, Width, Count, &Offset);\r
   if (EFI_ERROR (Status)) {\r
     return EFI_UNSUPPORTED;\r
@@ -517,6 +459,26 @@ Returns:
   return Status;\r
 }\r
 \r
+/**\r
+  Enable a PCI driver to access PCI controller registers in the PCI memory or I/O space.\r
+\r
+  @param  This                  A pointer to the EFI_PCI_IO_PROTOCOL instance.\r
+  @param  Width                 Signifies the width of the memory or I/O operations.\r
+  @param  BarIndex              The BAR index of the standard PCI Configuration header to use as the\r
+                                base address for the memory or I/O operation to perform.\r
+  @param  Offset                The offset within the selected BAR to start the memory or I/O operation.\r
+  @param  Count                 The number of memory or I/O operations to perform.\r
+  @param  Buffer                For read operations, the destination buffer to store the results. For write\r
+                                operations, the source buffer to write data from.\r
+\r
+  @retval EFI_SUCCESS           The data was read from or written to the PCI controller.\r
+  @retval EFI_UNSUPPORTED       BarIndex not valid for this PCI controller.\r
+  @retval EFI_UNSUPPORTED       The address range specified by Offset, Width, and Count is not\r
+                                valid for the PCI BAR specified by BarIndex.\r
+  @retval EFI_OUT_OF_RESOURCES  The request could not be completed due to a lack of resources.\r
+  @retval EFI_INVALID_PARAMETER One or more parameters are invalid.\r
+\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 PciIoIoRead (\r
@@ -527,27 +489,6 @@ PciIoIoRead (
   IN     UINTN                      Count,\r
   IN OUT VOID                       *Buffer\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Performs a PCI I/O Read Cycle\r
-\r
-Arguments:\r
-\r
-Returns:\r
-\r
-  None\r
-\r
---*/\r
-// TODO:    This - add argument and description to function comment\r
-// TODO:    Width - add argument and description to function comment\r
-// TODO:    BarIndex - add argument and description to function comment\r
-// TODO:    Offset - add argument and description to function comment\r
-// TODO:    Count - add argument and description to function comment\r
-// TODO:    Buffer - add argument and description to function comment\r
-// TODO:    EFI_INVALID_PARAMETER - add return value to function comment\r
-// TODO:    EFI_UNSUPPORTED - add return value to function comment\r
 {\r
   EFI_STATUS    Status;\r
   PCI_IO_DEVICE *PciIoDevice;\r
@@ -558,6 +499,10 @@ Returns:
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
+  if (Buffer == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
   Status = PciIoVerifyBarAccess (PciIoDevice, BarIndex, PciBarTypeIo, Width, Count, &Offset);\r
   if (EFI_ERROR (Status)) {\r
     return EFI_UNSUPPORTED;\r
@@ -578,6 +523,26 @@ Returns:
   return Status;\r
 }\r
 \r
+/**\r
+  Enable a PCI driver to access PCI controller registers in the PCI memory or I/O space.\r
+\r
+  @param  This                  A pointer to the EFI_PCI_IO_PROTOCOL instance.\r
+  @param  Width                 Signifies the width of the memory or I/O operations.\r
+  @param  BarIndex              The BAR index of the standard PCI Configuration header to use as the\r
+                                base address for the memory or I/O operation to perform.\r
+  @param  Offset                The offset within the selected BAR to start the memory or I/O operation.\r
+  @param  Count                 The number of memory or I/O operations to perform.\r
+  @param  Buffer                For read operations, the destination buffer to store the results. For write\r
+                                operations, the source buffer to write data from.\r
+\r
+  @retval EFI_SUCCESS           The data was read from or written to the PCI controller.\r
+  @retval EFI_UNSUPPORTED       BarIndex not valid for this PCI controller.\r
+  @retval EFI_UNSUPPORTED       The address range specified by Offset, Width, and Count is not\r
+                                valid for the PCI BAR specified by BarIndex.\r
+  @retval EFI_OUT_OF_RESOURCES  The request could not be completed due to a lack of resources.\r
+  @retval EFI_INVALID_PARAMETER One or more parameters are invalid.\r
+\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 PciIoIoWrite (\r
@@ -588,27 +553,6 @@ PciIoIoWrite (
   IN     UINTN                      Count,\r
   IN OUT VOID                       *Buffer\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Performs a PCI I/O Write Cycle\r
-\r
-Arguments:\r
-\r
-Returns:\r
-\r
-  None\r
-\r
---*/\r
-// TODO:    This - add argument and description to function comment\r
-// TODO:    Width - add argument and description to function comment\r
-// TODO:    BarIndex - add argument and description to function comment\r
-// TODO:    Offset - add argument and description to function comment\r
-// TODO:    Count - add argument and description to function comment\r
-// TODO:    Buffer - add argument and description to function comment\r
-// TODO:    EFI_INVALID_PARAMETER - add return value to function comment\r
-// TODO:    EFI_UNSUPPORTED - add return value to function comment\r
 {\r
   EFI_STATUS    Status;\r
   PCI_IO_DEVICE *PciIoDevice;\r
@@ -619,6 +563,10 @@ Returns:
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
+  if (Buffer == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
   Status = PciIoVerifyBarAccess (PciIoDevice, BarIndex, PciBarTypeIo, Width, Count, &Offset);\r
   if (EFI_ERROR (Status)) {\r
     return EFI_UNSUPPORTED;\r
@@ -639,6 +587,24 @@ Returns:
   return Status;\r
 }\r
 \r
+/**\r
+  Enable a PCI driver to access PCI controller registers in PCI configuration space.\r
+\r
+  @param  This                  A pointer to the EFI_PCI_IO_PROTOCOL instance.\r
+  @param  Width                 Signifies the width of the memory operations.\r
+  @param  Offset                The offset within the PCI configuration space for the PCI controller.\r
+  @param  Count                 The number of PCI configuration operations to perform.\r
+  @param  Buffer                For read operations, the destination buffer to store the results. For write\r
+                                operations, the source buffer to write data from.\r
+\r
+\r
+  @retval EFI_SUCCESS           The data was read from or written to the PCI controller.\r
+  @retval EFI_UNSUPPORTED       The address range specified by Offset, Width, and Count is not\r
+                                valid for the PCI configuration header of the PCI controller.\r
+  @retval EFI_OUT_OF_RESOURCES  The request could not be completed due to a lack of resources.\r
+  @retval EFI_INVALID_PARAMETER Buffer is NULL or Width is invalid.\r
+\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 PciIoConfigRead (\r
@@ -648,24 +614,6 @@ PciIoConfigRead (
   IN     UINTN                      Count,\r
   IN OUT VOID                       *Buffer\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Performs a PCI Configuration Read Cycle\r
-\r
-Arguments:\r
-\r
-Returns:\r
-\r
-  None\r
-\r
---*/\r
-// TODO:    This - add argument and description to function comment\r
-// TODO:    Width - add argument and description to function comment\r
-// TODO:    Offset - add argument and description to function comment\r
-// TODO:    Count - add argument and description to function comment\r
-// TODO:    Buffer - add argument and description to function comment\r
 {\r
   EFI_STATUS    Status;\r
   PCI_IO_DEVICE *PciIoDevice;\r
@@ -680,12 +628,12 @@ Returns:
   }\r
 \r
   Status = PciIoDevice->PciRootBridgeIo->Pci.Read (\r
-                                              PciIoDevice->PciRootBridgeIo,\r
-                                              (EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH) Width,\r
-                                              Address,\r
-                                              Count,\r
-                                              Buffer\r
-                                              );\r
+                                               PciIoDevice->PciRootBridgeIo,\r
+                                               (EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH) Width,\r
+                                               Address,\r
+                                               Count,\r
+                                               Buffer\r
+                                               );\r
 \r
   if (EFI_ERROR (Status)) {\r
     ReportErrorStatusCode (PciIoDevice, EFI_IO_BUS_PCI | EFI_IOB_EC_READ_ERROR);\r
@@ -694,6 +642,24 @@ Returns:
   return Status;\r
 }\r
 \r
+/**\r
+  Enable a PCI driver to access PCI controller registers in PCI configuration space.\r
+\r
+  @param  This                  A pointer to the EFI_PCI_IO_PROTOCOL instance.\r
+  @param  Width                 Signifies the width of the memory operations.\r
+  @param  Offset                The offset within the PCI configuration space for the PCI controller.\r
+  @param  Count                 The number of PCI configuration operations to perform.\r
+  @param  Buffer                For read operations, the destination buffer to store the results. For write\r
+                                operations, the source buffer to write data from.\r
+\r
+\r
+  @retval EFI_SUCCESS           The data was read from or written to the PCI controller.\r
+  @retval EFI_UNSUPPORTED       The address range specified by Offset, Width, and Count is not\r
+                                valid for the PCI configuration header of the PCI controller.\r
+  @retval EFI_OUT_OF_RESOURCES  The request could not be completed due to a lack of resources.\r
+  @retval EFI_INVALID_PARAMETER Buffer is NULL or Width is invalid.\r
+\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 PciIoConfigWrite (\r
@@ -703,24 +669,6 @@ PciIoConfigWrite (
   IN     UINTN                      Count,\r
   IN OUT VOID                       *Buffer\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Performs a PCI Configuration Write Cycle\r
-\r
-Arguments:\r
-\r
-Returns:\r
-\r
-  None\r
-\r
---*/\r
-// TODO:    This - add argument and description to function comment\r
-// TODO:    Width - add argument and description to function comment\r
-// TODO:    Offset - add argument and description to function comment\r
-// TODO:    Count - add argument and description to function comment\r
-// TODO:    Buffer - add argument and description to function comment\r
 {\r
   EFI_STATUS    Status;\r
   PCI_IO_DEVICE *PciIoDevice;\r
@@ -749,6 +697,34 @@ Returns:
   return Status;\r
 }\r
 \r
+/**\r
+  Enables a PCI driver to copy one region of PCI memory space to another region of PCI\r
+  memory space.\r
+\r
+  @param  This                  A pointer to the EFI_PCI_IO_PROTOCOL instance.\r
+  @param  Width                 Signifies the width of the memory operations.\r
+  @param  DestBarIndex          The BAR index in the standard PCI Configuration header to use as the\r
+                                base address for the memory operation to perform.\r
+  @param  DestOffset            The destination offset within the BAR specified by DestBarIndex to\r
+                                start the memory writes for the copy operation.\r
+  @param  SrcBarIndex           The BAR index in the standard PCI Configuration header to use as the\r
+                                base address for the memory operation to perform.\r
+  @param  SrcOffset             The source offset within the BAR specified by SrcBarIndex to start\r
+                                the memory reads for the copy operation.\r
+  @param  Count                 The number of memory operations to perform. Bytes moved is Width\r
+                                size * Count, starting at DestOffset and SrcOffset.\r
+\r
+  @retval EFI_SUCCESS           The data was copied from one memory region to another memory region.\r
+  @retval EFI_UNSUPPORTED       DestBarIndex not valid for this PCI controller.\r
+  @retval EFI_UNSUPPORTED       SrcBarIndex not valid for this PCI controller.\r
+  @retval EFI_UNSUPPORTED       The address range specified by DestOffset, Width, and Count\r
+                                is not valid for the PCI BAR specified by DestBarIndex.\r
+  @retval EFI_UNSUPPORTED       The address range specified by SrcOffset, Width, and Count is\r
+                                not valid for the PCI BAR specified by SrcBarIndex.\r
+  @retval EFI_INVALID_PARAMETER Width is invalid.\r
+  @retval EFI_OUT_OF_RESOURCES  The request could not be completed due to a lack of resources.\r
+\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 PciIoCopyMem (\r
@@ -760,30 +736,6 @@ PciIoCopyMem (
   IN     UINT64                       SrcOffset,\r
   IN     UINTN                        Count\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Copy PCI Memory\r
-\r
-Arguments:\r
-\r
-Returns:\r
-\r
-  None\r
-\r
---*/\r
-// TODO:    This - add argument and description to function comment\r
-// TODO:    Width - add argument and description to function comment\r
-// TODO:    DestBarIndex - add argument and description to function comment\r
-// TODO:    DestOffset - add argument and description to function comment\r
-// TODO:    SrcBarIndex - add argument and description to function comment\r
-// TODO:    SrcOffset - add argument and description to function comment\r
-// TODO:    Count - add argument and description to function comment\r
-// TODO:    EFI_INVALID_PARAMETER - add return value to function comment\r
-// TODO:    EFI_INVALID_PARAMETER - add return value to function comment\r
-// TODO:    EFI_UNSUPPORTED - add return value to function comment\r
-// TODO:    EFI_UNSUPPORTED - add return value to function comment\r
 {\r
   EFI_STATUS    Status;\r
   PCI_IO_DEVICE *PciIoDevice;\r
@@ -830,6 +782,25 @@ Returns:
   return Status;\r
 }\r
 \r
+/**\r
+  Provides the PCI controller-specific addresses needed to access system memory.\r
+\r
+  @param  This                  A pointer to the EFI_PCI_IO_PROTOCOL instance.\r
+  @param  Operation             Indicates if the bus master is going to read or write to system memory.\r
+  @param  HostAddress           The system memory address to map to the PCI controller.\r
+  @param  NumberOfBytes         On input the number of bytes to map. On output the number of bytes\r
+                                that were mapped.\r
+  @param  DeviceAddress         The resulting map address for the bus master PCI controller to use to\r
+                                access the hosts HostAddress.\r
+  @param  Mapping               A resulting value to pass to Unmap().\r
+\r
+  @retval EFI_SUCCESS           The range was mapped for the returned NumberOfBytes.\r
+  @retval EFI_UNSUPPORTED       The HostAddress cannot be mapped as a common buffer.\r
+  @retval EFI_INVALID_PARAMETER One or more parameters are invalid.\r
+  @retval EFI_OUT_OF_RESOURCES  The request could not be completed due to a lack of resources.\r
+  @retval EFI_DEVICE_ERROR      The system hardware could not map the requested address.\r
+\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 PciIoMap (\r
@@ -840,27 +811,6 @@ PciIoMap (
   OUT    EFI_PHYSICAL_ADDRESS           *DeviceAddress,\r
   OUT    VOID                           **Mapping\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Maps a memory region for DMA\r
-\r
-Arguments:\r
-\r
-Returns:\r
-\r
-  None\r
-\r
---*/\r
-// TODO:    This - add argument and description to function comment\r
-// TODO:    Operation - add argument and description to function comment\r
-// TODO:    HostAddress - add argument and description to function comment\r
-// TODO:    NumberOfBytes - add argument and description to function comment\r
-// TODO:    DeviceAddress - add argument and description to function comment\r
-// TODO:    Mapping - add argument and description to function comment\r
-// TODO:    EFI_INVALID_PARAMETER - add return value to function comment\r
-// TODO:    EFI_INVALID_PARAMETER - add return value to function comment\r
 {\r
   EFI_STATUS    Status;\r
   PCI_IO_DEVICE *PciIoDevice;\r
@@ -875,7 +825,7 @@ Returns:
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
-  if (PciIoDevice->Attributes & EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE) {\r
+  if ((PciIoDevice->Attributes & EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE) != 0) {\r
     Operation = (EFI_PCI_IO_PROTOCOL_OPERATION) (Operation + EfiPciOperationBusMasterRead64);\r
   }\r
 \r
@@ -895,27 +845,22 @@ Returns:
   return Status;\r
 }\r
 \r
+/**\r
+  Completes the Map() operation and releases any corresponding resources.\r
+\r
+  @param  This                  A pointer to the EFI_PCI_IO_PROTOCOL instance.\r
+  @param  Mapping               The mapping value returned from Map().\r
+\r
+  @retval EFI_SUCCESS           The range was unmapped.\r
+  @retval EFI_DEVICE_ERROR      The data was not committed to the target system memory.\r
+\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 PciIoUnmap (\r
   IN  EFI_PCI_IO_PROTOCOL  *This,\r
   IN  VOID                 *Mapping\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Unmaps a memory region for DMA\r
-\r
-Arguments:\r
-\r
-Returns:\r
-\r
-  None\r
-\r
---*/\r
-// TODO:    This - add argument and description to function comment\r
-// TODO:    Mapping - add argument and description to function comment\r
 {\r
   EFI_STATUS    Status;\r
   PCI_IO_DEVICE *PciIoDevice;\r
@@ -934,6 +879,26 @@ Returns:
   return Status;\r
 }\r
 \r
+/**\r
+  Allocates pages that are suitable for an EfiPciIoOperationBusMasterCommonBuffer\r
+  mapping.\r
+\r
+  @param  This                  A pointer to the EFI_PCI_IO_PROTOCOL instance.\r
+  @param  Type                  This parameter is not used and must be ignored.\r
+  @param  MemoryType            The type of memory to allocate, EfiBootServicesData or\r
+                                EfiRuntimeServicesData.\r
+  @param  Pages                 The number of pages to allocate.\r
+  @param  HostAddress           A pointer to store the base system memory address of the\r
+                                allocated range.\r
+  @param  Attributes            The requested bit mask of attributes for the allocated range.\r
+\r
+  @retval EFI_SUCCESS           The requested memory pages were allocated.\r
+  @retval EFI_UNSUPPORTED       Attributes is unsupported. The only legal attribute bits are\r
+                                MEMORY_WRITE_COMBINE and MEMORY_CACHED.\r
+  @retval EFI_INVALID_PARAMETER One or more parameters are invalid.\r
+  @retval EFI_OUT_OF_RESOURCES  The memory pages could not be allocated.\r
+\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 PciIoAllocateBuffer (\r
@@ -944,38 +909,18 @@ PciIoAllocateBuffer (
   OUT VOID                  **HostAddress,\r
   IN  UINT64                Attributes\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Allocates a common buffer for DMA\r
-\r
-Arguments:\r
-\r
-Returns:\r
-\r
-  None\r
-\r
---*/\r
-// TODO:    This - add argument and description to function comment\r
-// TODO:    Type - add argument and description to function comment\r
-// TODO:    MemoryType - add argument and description to function comment\r
-// TODO:    Pages - add argument and description to function comment\r
-// TODO:    HostAddress - add argument and description to function comment\r
-// TODO:    Attributes - add argument and description to function comment\r
-// TODO:    EFI_UNSUPPORTED - add return value to function comment\r
 {\r
   EFI_STATUS    Status;\r
   PCI_IO_DEVICE *PciIoDevice;\r
 \r
-  if (Attributes &\r
-      (~(EFI_PCI_ATTRIBUTE_MEMORY_WRITE_COMBINE | EFI_PCI_ATTRIBUTE_MEMORY_CACHED))) {\r
+  if ((Attributes &\r
+      (~(EFI_PCI_ATTRIBUTE_MEMORY_WRITE_COMBINE | EFI_PCI_ATTRIBUTE_MEMORY_CACHED))) != 0){\r
     return EFI_UNSUPPORTED;\r
   }\r
 \r
   PciIoDevice = PCI_IO_DEVICE_FROM_PCI_IO_THIS (This);\r
 \r
-  if (PciIoDevice->Attributes & EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE) {\r
+  if ((PciIoDevice->Attributes & EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE) != 0) {\r
     Attributes |= EFI_PCI_ATTRIBUTE_DUAL_ADDRESS_CYCLE;\r
   }\r
 \r
@@ -995,6 +940,18 @@ Returns:
   return Status;\r
 }\r
 \r
+/**\r
+  Frees memory that was allocated with AllocateBuffer().\r
+\r
+  @param  This                  A pointer to the EFI_PCI_IO_PROTOCOL instance.\r
+  @param  Pages                 The number of pages to free.\r
+  @param  HostAddress           The base system memory address of the allocated range.\r
+\r
+  @retval EFI_SUCCESS           The requested memory pages were freed.\r
+  @retval EFI_INVALID_PARAMETER The memory range specified by HostAddress and Pages\r
+                                was not allocated with AllocateBuffer().\r
+\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 PciIoFreeBuffer (\r
@@ -1002,22 +959,6 @@ PciIoFreeBuffer (
   IN  UINTN                 Pages,\r
   IN  VOID                  *HostAddress\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Frees a common buffer \r
-\r
-Arguments:\r
-\r
-Returns:\r
-\r
-  None\r
-\r
---*/\r
-// TODO:    This - add argument and description to function comment\r
-// TODO:    Pages - add argument and description to function comment\r
-// TODO:    HostAddress - add argument and description to function comment\r
 {\r
   EFI_STATUS    Status;\r
   PCI_IO_DEVICE *PciIoDevice;\r
@@ -1037,25 +978,22 @@ Returns:
   return Status;\r
 }\r
 \r
+/**\r
+  Flushes all PCI posted write transactions from a PCI host bridge to system memory.\r
+\r
+  @param  This                  A pointer to the EFI_PCI_IO_PROTOCOL instance.\r
+\r
+  @retval EFI_SUCCESS           The PCI posted write transactions were flushed from the PCI host\r
+                                bridge to system memory.\r
+  @retval EFI_DEVICE_ERROR      The PCI posted write transactions were not flushed from the PCI\r
+                                host bridge due to a hardware error.\r
+\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 PciIoFlush (\r
   IN  EFI_PCI_IO_PROTOCOL  *This\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Flushes a DMA buffer\r
-\r
-Arguments:\r
-\r
-Returns:\r
-\r
-  None\r
-\r
---*/\r
-// TODO:    This - add argument and description to function comment\r
 {\r
   EFI_STATUS    Status;\r
   PCI_IO_DEVICE *PciIoDevice;\r
@@ -1072,6 +1010,19 @@ Returns:
   return Status;\r
 }\r
 \r
+/**\r
+  Retrieves this PCI controller's current PCI bus number, device number, and function number.\r
+\r
+  @param  This                  A pointer to the EFI_PCI_IO_PROTOCOL instance.\r
+  @param  SegmentNumber         The PCI controller's current PCI segment number.\r
+  @param  BusNumber             The PCI controller's current PCI bus number.\r
+  @param  DeviceNumber          The PCI controller's current PCI device number.\r
+  @param  FunctionNumber        The PCI controller's current PCI function number.\r
+\r
+  @retval EFI_SUCCESS           The PCI controller location was returned.\r
+  @retval EFI_INVALID_PARAMETER One or more parameters are invalid.\r
+\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 PciIoGetLocation (\r
@@ -1081,26 +1032,6 @@ PciIoGetLocation (
   OUT UINTN                *Device,\r
   OUT UINTN                *Function\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Gets a PCI device's current bus number, device number, and function number.\r
-\r
-Arguments:\r
-\r
-Returns:\r
-\r
-  None\r
-\r
---*/\r
-// TODO:    This - add argument and description to function comment\r
-// TODO:    Segment - add argument and description to function comment\r
-// TODO:    Bus - add argument and description to function comment\r
-// TODO:    Device - add argument and description to function comment\r
-// TODO:    Function - add argument and description to function comment\r
-// TODO:    EFI_INVALID_PARAMETER - add return value to function comment\r
-// TODO:    EFI_SUCCESS - add return value to function comment\r
 {\r
   PCI_IO_DEVICE *PciIoDevice;\r
 \r
@@ -1118,28 +1049,24 @@ Returns:
   return EFI_SUCCESS;\r
 }\r
 \r
-BOOLEAN\r
-CheckBarType (\r
-  IN PCI_IO_DEVICE       *PciIoDevice,\r
-  UINT8                  BarIndex,\r
-  PCI_BAR_TYPE           BarType\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
+/**\r
+  Check BAR type for PCI resource.\r
 \r
-  Sets a PCI controllers attributes on a resource range\r
+  @param PciIoDevice   PCI device instance.\r
+  @param BarIndex      The BAR index of the standard PCI Configuration header to use as the\r
+                       base address for the memory or I/O operation to perform.\r
+  @param BarType       Memory or I/O.\r
 \r
-Arguments:\r
+  @retval TRUE         Pci device's bar type is same with input BarType.\r
+  @retval TRUE         Pci device's bar type is not same with input BarType.\r
 \r
-Returns:\r
-\r
-  None\r
-\r
---*/\r
-// TODO:    PciIoDevice - add argument and description to function comment\r
-// TODO:    BarIndex - add argument and description to function comment\r
-// TODO:    BarType - add argument and description to function comment\r
+**/\r
+BOOLEAN\r
+CheckBarType (\r
+  IN PCI_IO_DEVICE          *PciIoDevice,\r
+  IN UINT8                  BarIndex,\r
+  IN PCI_BAR_TYPE           BarType\r
+  )\r
 {\r
   switch (BarType) {\r
 \r
@@ -1169,31 +1096,23 @@ Returns:
   return FALSE;\r
 }\r
 \r
+/**\r
+  Set/Disable new attributes to a Root Bridge.\r
+\r
+  @param  PciIoDevice  Pci device instance.\r
+  @param  Attributes   New attribute want to be set.\r
+  @param  Operation    Set or Disable.\r
+\r
+  @retval  EFI_UNSUPPORTED  If root bridge does not support change attribute.\r
+  @retval  EFI_SUCCESS      Successfully set new attributs.\r
+\r
+**/\r
 EFI_STATUS\r
 ModifyRootBridgeAttributes (\r
   IN  PCI_IO_DEVICE                            *PciIoDevice,\r
   IN  UINT64                                   Attributes,\r
   IN  EFI_PCI_IO_PROTOCOL_ATTRIBUTE_OPERATION  Operation\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Set new attributes to a Root Bridge\r
-\r
-Arguments:\r
-\r
-Returns:\r
-\r
-  None\r
-\r
---*/\r
-// TODO:    PciIoDevice - add argument and description to function comment\r
-// TODO:    Attributes - add argument and description to function comment\r
-// TODO:    Operation - add argument and description to function comment\r
-// TODO:    EFI_UNSUPPORTED - add return value to function comment\r
-// TODO:    EFI_UNSUPPORTED - add return value to function comment\r
-// TODO:    EFI_SUCCESS - add return value to function comment\r
 {\r
   UINT64      PciRootBridgeSupports;\r
   UINT64      PciRootBridgeAttributes;\r
@@ -1211,7 +1130,7 @@ Returns:
   if (EFI_ERROR (Status)) {\r
     return EFI_UNSUPPORTED;\r
   }\r
-  \r
+\r
   //\r
   // Record the new attribute of the Root Bridge\r
   //\r
@@ -1220,11 +1139,11 @@ Returns:
   } else {\r
     NewPciRootBridgeAttributes = PciRootBridgeAttributes & (~Attributes);\r
   }\r
\r
+\r
   //\r
   // Call the PCI Root Bridge to attempt to modify the attributes\r
   //\r
-  if (NewPciRootBridgeAttributes ^ PciRootBridgeAttributes) {\r
+  if ((NewPciRootBridgeAttributes ^ PciRootBridgeAttributes) != 0) {\r
 \r
     Status = PciIoDevice->PciRootBridgeIo->SetAttributes (\r
                                             PciIoDevice->PciRootBridgeIo,\r
@@ -1239,44 +1158,30 @@ Returns:
       return EFI_UNSUPPORTED;\r
     }\r
   }\r
-    \r
+\r
   //\r
   // Also update the attributes for this Root Bridge structure\r
   //\r
   PciIoDevice->Attributes = NewPciRootBridgeAttributes;\r
-  return EFI_SUCCESS;\r
 \r
+  return EFI_SUCCESS;\r
 }\r
 \r
-EFI_STATUS\r
-SupportPaletteSnoopAttributes (\r
-  IN  PCI_IO_DEVICE                            *PciIoDevice,\r
-  IN  EFI_PCI_IO_PROTOCOL_ATTRIBUTE_OPERATION  Operation\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
+/**\r
+  Check whether this device can be enable/disable to snoop.\r
 \r
-  Check whether this device can be enable/disable to snoop\r
+  @param PciIoDevice  Pci device instance.\r
+  @param Operation    Enable/Disable.\r
 \r
-Arguments:\r
+  @retval EFI_UNSUPPORTED  Pci device is not GFX device or not support snoop.\r
+  @retval EFI_SUCCESS      Snoop can be supported.\r
 \r
-Returns:\r
-\r
-  None\r
-\r
---*/\r
-// TODO:    PciIoDevice - add argument and description to function comment\r
-// TODO:    Operation - add argument and description to function comment\r
-// TODO:    EFI_UNSUPPORTED - add return value to function comment\r
-// TODO:    EFI_SUCCESS - add return value to function comment\r
-// TODO:    EFI_SUCCESS - add return value to function comment\r
-// TODO:    EFI_UNSUPPORTED - add return value to function comment\r
-// TODO:    EFI_UNSUPPORTED - add return value to function comment\r
-// TODO:    EFI_SUCCESS - add return value to function comment\r
-// TODO:    EFI_UNSUPPORTED - add return value to function comment\r
-// TODO:    EFI_UNSUPPORTED - add return value to function comment\r
-// TODO:    EFI_SUCCESS - add return value to function comment\r
+**/\r
+EFI_STATUS\r
+SupportPaletteSnoopAttributes (\r
+  IN PCI_IO_DEVICE                            *PciIoDevice,\r
+  IN EFI_PCI_IO_PROTOCOL_ATTRIBUTE_OPERATION  Operation\r
+  )\r
 {\r
   PCI_IO_DEVICE *Temp;\r
   UINT16        VGACommand;\r
@@ -1293,14 +1198,14 @@ Returns:
   //\r
   Temp = ActiveVGADeviceOnTheSameSegment (PciIoDevice);\r
 \r
-  if (!Temp) {\r
+  if (Temp == NULL) {\r
     //\r
     // If there is no VGA device on the segement, set\r
     // this graphics card to decode the palette range\r
     //\r
     return EFI_SUCCESS;\r
   }\r
-  \r
+\r
   //\r
   // Check these two agents are on the same path\r
   //\r
@@ -1315,13 +1220,13 @@ Returns:
   //\r
   if (Temp->Parent == PciIoDevice->Parent) {\r
 \r
-    PciReadCommandRegister (Temp, &VGACommand);\r
+    PCI_READ_COMMAND_REGISTER (Temp, &VGACommand);\r
 \r
     //\r
     // If they are on the same bus, either one can\r
     // be set to snoop, the other set to decode\r
     //\r
-    if (VGACommand & EFI_PCI_COMMAND_VGA_PALETTE_SNOOP) {\r
+    if ((VGACommand & EFI_PCI_COMMAND_VGA_PALETTE_SNOOP) != 0) {\r
       //\r
       // VGA has set to snoop, so GFX can be only set to disable snoop\r
       //\r
@@ -1339,19 +1244,19 @@ Returns:
 \r
     return EFI_SUCCESS;\r
   }\r
-  \r
+\r
   //\r
   // If they are on  the same path but on the different bus\r
   // The first agent is set to snoop, the second one set to\r
   // decode\r
   //\r
-            \r
+\r
   if (Temp->BusNumber < PciIoDevice->BusNumber) {\r
     //\r
     // GFX should be set to decode\r
     //\r
     if (Operation == EfiPciIoAttributeOperationDisable) {\r
-      PciEnableCommandRegister (Temp, EFI_PCI_COMMAND_VGA_PALETTE_SNOOP);\r
+      PCI_ENABLE_COMMAND_REGISTER (Temp, EFI_PCI_COMMAND_VGA_PALETTE_SNOOP);\r
       Temp->Attributes |= EFI_PCI_COMMAND_VGA_PALETTE_SNOOP;\r
     } else {\r
       return EFI_UNSUPPORTED;\r
@@ -1362,7 +1267,7 @@ Returns:
     // GFX should be set to snoop\r
     //\r
     if (Operation == EfiPciIoAttributeOperationEnable) {\r
-      PciDisableCommandRegister (Temp, EFI_PCI_COMMAND_VGA_PALETTE_SNOOP);\r
+      PCI_DISABLE_COMMAND_REGISTER (Temp, EFI_PCI_COMMAND_VGA_PALETTE_SNOOP);\r
       Temp->Attributes &= (~EFI_PCI_COMMAND_VGA_PALETTE_SNOOP);\r
     } else {\r
       return EFI_UNSUPPORTED;\r
@@ -1373,6 +1278,25 @@ Returns:
   return EFI_SUCCESS;\r
 }\r
 \r
+/**\r
+  Performs an operation on the attributes that this PCI controller supports. The operations include\r
+  getting the set of supported attributes, retrieving the current attributes, setting the current\r
+  attributes, enabling attributes, and disabling attributes.\r
+\r
+  @param  This                  A pointer to the EFI_PCI_IO_PROTOCOL instance.\r
+  @param  Operation             The operation to perform on the attributes for this PCI controller.\r
+  @param  Attributes            The mask of attributes that are used for Set, Enable, and Disable\r
+                                operations.\r
+  @param  Result                A pointer to the result mask of attributes that are returned for the Get\r
+                                and Supported operations.\r
+\r
+  @retval EFI_SUCCESS           The operation on the PCI controller's attributes was completed.\r
+  @retval EFI_INVALID_PARAMETER One or more parameters are invalid.\r
+  @retval EFI_UNSUPPORTED       one or more of the bits set in\r
+                                Attributes are not supported by this PCI controller or one of\r
+                                its parent bridges when Operation is Set, Enable or Disable.\r
+\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 PciIoAttributes (\r
@@ -1381,33 +1305,6 @@ PciIoAttributes (
   IN  UINT64                                   Attributes,\r
   OUT UINT64                                   *Result OPTIONAL\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-\r
-Arguments:\r
-\r
-Returns:\r
-\r
-  None\r
-\r
---*/\r
-// TODO:    This - add argument and description to function comment\r
-// TODO:    Operation - add argument and description to function comment\r
-// TODO:    Attributes - add argument and description to function comment\r
-// TODO:    Result - add argument and description to function comment\r
-// TODO:    EFI_INVALID_PARAMETER - add return value to function comment\r
-// TODO:    EFI_SUCCESS - add return value to function comment\r
-// TODO:    EFI_INVALID_PARAMETER - add return value to function comment\r
-// TODO:    EFI_SUCCESS - add return value to function comment\r
-// TODO:    EFI_UNSUPPORTED - add return value to function comment\r
-// TODO:    EFI_UNSUPPORTED - add return value to function comment\r
-// TODO:    EFI_SUCCESS - add return value to function comment\r
-// TODO:    EFI_INVALID_PARAMETER - add return value to function comment\r
-// TODO:    EFI_UNSUPPORTED - add return value to function comment\r
-// TODO:    EFI_UNSUPPORTED - add return value to function comment\r
-// TODO:    EFI_UNSUPPORTED - add return value to function comment\r
 {\r
   EFI_STATUS    Status;\r
 \r
@@ -1471,6 +1368,9 @@ Returns:
   }\r
   //\r
   // Just a trick for ENABLE attribute\r
+  // EFI_PCI_DEVICE_ENABLE is not defined in UEFI spec, which is the internal usage.\r
+  // So, this logic doesn't confrom to UEFI spec, which should be removed.\r
+  // But this trick logic is still kept for some binary drivers that depend on it.\r
   //\r
   if ((Attributes & EFI_PCI_DEVICE_ENABLE) == EFI_PCI_DEVICE_ENABLE) {\r
     Attributes &= (PciIoDevice->Supports);\r
@@ -1493,11 +1393,11 @@ Returns:
   if (Supports != Attributes) {\r
     return EFI_UNSUPPORTED;\r
   }\r
-   \r
+\r
   //\r
   // For Root Bridge, just call RootBridgeIo to set attributes;\r
   //\r
-  if (!PciIoDevice->Parent) {\r
+  if (PciIoDevice->Parent == NULL) {\r
     Status = ModifyRootBridgeAttributes (PciIoDevice, Attributes, Operation);\r
     return Status;\r
   }\r
@@ -1508,14 +1408,14 @@ Returns:
   //\r
   // Check VGA and VGA16, they can not be set at the same time\r
   //\r
-  if (((Attributes & EFI_PCI_IO_ATTRIBUTE_VGA_IO)         &&\r
-       (Attributes & EFI_PCI_IO_ATTRIBUTE_VGA_IO_16))         ||\r
-      ((Attributes & EFI_PCI_IO_ATTRIBUTE_VGA_IO)         &&\r
-       (Attributes & EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO_16)) ||\r
-      ((Attributes & EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO) &&\r
-       (Attributes & EFI_PCI_IO_ATTRIBUTE_VGA_IO_16))         ||\r
-      ((Attributes & EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO) &&\r
-       (Attributes & EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO_16)) ) {\r
+  if (((Attributes & EFI_PCI_IO_ATTRIBUTE_VGA_IO) != 0         &&\r
+       (Attributes & EFI_PCI_IO_ATTRIBUTE_VGA_IO_16) != 0)         ||\r
+      ((Attributes & EFI_PCI_IO_ATTRIBUTE_VGA_IO) != 0         &&\r
+       (Attributes & EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO_16) != 0) ||\r
+      ((Attributes & EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO) != 0 &&\r
+       (Attributes & EFI_PCI_IO_ATTRIBUTE_VGA_IO_16) != 0)         ||\r
+      ((Attributes & EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO) != 0 &&\r
+       (Attributes & EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO_16) != 0) ) {\r
     return EFI_UNSUPPORTED;\r
   }\r
 \r
@@ -1524,19 +1424,19 @@ Returns:
   //\r
   if (IS_PCI_BRIDGE (&PciIoDevice->Pci) || IS_CARDBUS_BRIDGE (&PciIoDevice->Pci)) {\r
 \r
-    if (Attributes & (EFI_PCI_IO_ATTRIBUTE_VGA_IO | EFI_PCI_IO_ATTRIBUTE_VGA_IO_16)) {\r
+    if ((Attributes & (EFI_PCI_IO_ATTRIBUTE_VGA_IO | EFI_PCI_IO_ATTRIBUTE_VGA_IO_16)) != 0) {\r
       BridgeControl |= EFI_PCI_BRIDGE_CONTROL_VGA;\r
     }\r
 \r
-    if (Attributes & EFI_PCI_IO_ATTRIBUTE_ISA_IO) {\r
+    if ((Attributes & EFI_PCI_IO_ATTRIBUTE_ISA_IO) != 0) {\r
       BridgeControl |= EFI_PCI_BRIDGE_CONTROL_ISA;\r
     }\r
 \r
-    if (Attributes & (EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO | EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO_16)) {\r
+    if ((Attributes & (EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO | EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO_16)) != 0) {\r
       Command |= EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO;\r
     }\r
 \r
-    if (Attributes & (EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO_16 | EFI_PCI_IO_ATTRIBUTE_VGA_IO_16)) {\r
+    if ((Attributes & (EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO_16 | EFI_PCI_IO_ATTRIBUTE_VGA_IO_16)) != 0) {\r
       BridgeControl |= EFI_PCI_BRIDGE_CONTROL_VGA_16;\r
     }\r
 \r
@@ -1545,10 +1445,10 @@ Returns:
     // Do with the attributes on VGA\r
     // Only for VGA's legacy resource, we just can enable once.\r
     //\r
-    if (Attributes &\r
+    if ((Attributes &\r
         (EFI_PCI_IO_ATTRIBUTE_VGA_IO    |\r
          EFI_PCI_IO_ATTRIBUTE_VGA_IO_16 |\r
-         EFI_PCI_IO_ATTRIBUTE_VGA_MEMORY)) {\r
+         EFI_PCI_IO_ATTRIBUTE_VGA_MEMORY)) != 0) {\r
       //\r
       // Check if a VGA has been enabled before enabling a new one\r
       //\r
@@ -1557,7 +1457,7 @@ Returns:
         // Check if there have been an active VGA device on the same segment\r
         //\r
         Temp = ActiveVGADeviceOnTheSameSegment (PciIoDevice);\r
-        if (Temp && Temp != PciIoDevice) {\r
+        if (Temp != NULL && Temp != PciIoDevice) {\r
           //\r
           // An active VGA has been detected, so can not enable another\r
           //\r
@@ -1565,11 +1465,11 @@ Returns:
         }\r
       }\r
     }\r
-    \r
+\r
     //\r
     // Do with the attributes on GFX\r
     //\r
-    if (Attributes & (EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO | EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO_16)) {\r
+    if ((Attributes & (EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO | EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO_16)) != 0) {\r
 \r
       if (Operation == EfiPciIoAttributeOperationEnable) {\r
         //\r
@@ -1578,7 +1478,7 @@ Returns:
         Status = SupportPaletteSnoopAttributes (PciIoDevice, Operation);\r
 \r
         if (EFI_ERROR (Status)) {\r
-        \r
+\r
           //\r
           // Enable operation is forbidden, so mask the bit in attributes\r
           // so as to keep consistent with the actual Status\r
@@ -1599,22 +1499,22 @@ Returns:
     }\r
   }\r
 \r
-  if (Attributes & EFI_PCI_IO_ATTRIBUTE_IO) {\r
+  if ((Attributes & EFI_PCI_IO_ATTRIBUTE_IO) != 0) {\r
     Command |= EFI_PCI_COMMAND_IO_SPACE;\r
   }\r
 \r
-  if (Attributes & EFI_PCI_IO_ATTRIBUTE_MEMORY) {\r
+  if ((Attributes & EFI_PCI_IO_ATTRIBUTE_MEMORY) != 0) {\r
     Command |= EFI_PCI_COMMAND_MEMORY_SPACE;\r
   }\r
 \r
-  if (Attributes & EFI_PCI_IO_ATTRIBUTE_BUS_MASTER) {\r
+  if ((Attributes & EFI_PCI_IO_ATTRIBUTE_BUS_MASTER) != 0) {\r
     Command |= EFI_PCI_COMMAND_BUS_MASTER;\r
   }\r
   //\r
   // The upstream bridge should be also set to revelant attribute\r
   // expect for IO, Mem and BusMaster\r
   //\r
-  UpStreamAttributes = Attributes & \r
+  UpStreamAttributes = Attributes &\r
                        (~(EFI_PCI_IO_ATTRIBUTE_IO     |\r
                           EFI_PCI_IO_ATTRIBUTE_MEMORY |\r
                           EFI_PCI_IO_ATTRIBUTE_BUS_MASTER\r
@@ -1626,9 +1526,9 @@ Returns:
     //\r
     // Enable relevant attributes to command register and bridge control register\r
     //\r
-    Status = PciEnableCommandRegister (PciIoDevice, Command);\r
-    if (BridgeControl) {\r
-      Status = PciEnableBridgeControlRegister (PciIoDevice, BridgeControl);\r
+    Status = PCI_ENABLE_COMMAND_REGISTER (PciIoDevice, Command);\r
+    if (BridgeControl != 0) {\r
+      Status = PCI_ENABLE_BRIDGE_CONTROL_REGISTER (PciIoDevice, BridgeControl);\r
     }\r
 \r
     PciIoDevice->Attributes |= Attributes;\r
@@ -1643,13 +1543,13 @@ Returns:
                                     NULL\r
                                     );\r
   } else {\r
-    \r
+\r
     //\r
     // Disable relevant attributes to command register and bridge control register\r
     //\r
-    Status = PciDisableCommandRegister (PciIoDevice, Command);\r
-    if (BridgeControl) {\r
-      Status = PciDisableBridgeControlRegister (PciIoDevice, BridgeControl);\r
+    Status = PCI_DISABLE_COMMAND_REGISTER (PciIoDevice, Command);\r
+    if (BridgeControl != 0) {\r
+      Status = PCI_DISABLE_BRIDGE_CONTROL_REGISTER (PciIoDevice, BridgeControl);\r
     }\r
 \r
     PciIoDevice->Attributes &= (~Attributes);\r
@@ -1664,6 +1564,28 @@ Returns:
   return Status;\r
 }\r
 \r
+/**\r
+  Gets the attributes that this PCI controller supports setting on a BAR using\r
+  SetBarAttributes(), and retrieves the list of resource descriptors for a BAR.\r
+\r
+  @param  This                  A pointer to the EFI_PCI_IO_PROTOCOL instance.\r
+  @param  BarIndex              The BAR index of the standard PCI Configuration header to use as the\r
+                                base address for resource range. The legal range for this field is 0..5.\r
+  @param  Supports              A pointer to the mask of attributes that this PCI controller supports\r
+                                setting for this BAR with SetBarAttributes().\r
+  @param  Resources             A pointer to the ACPI 2.0 resource descriptors that describe the current\r
+                                configuration of this BAR of the PCI controller.\r
+\r
+  @retval EFI_SUCCESS           If Supports is not NULL, then the attributes that the PCI\r
+                                controller supports are returned in Supports. If Resources\r
+                                is not NULL, then the ACPI 2.0 resource descriptors that the PCI\r
+                                controller is currently using are returned in Resources.\r
+  @retval EFI_INVALID_PARAMETER Both Supports and Attributes are NULL.\r
+  @retval EFI_UNSUPPORTED       BarIndex not valid for this PCI controller.\r
+  @retval EFI_OUT_OF_RESOURCES  There are not enough resources available to allocate\r
+                                Resources.\r
+\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 PciIoGetBarAttributes (\r
@@ -1672,26 +1594,6 @@ PciIoGetBarAttributes (
   OUT UINT64                         *Supports, OPTIONAL\r
   OUT VOID                           **Resources OPTIONAL\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-\r
-Arguments:\r
-\r
-Returns:\r
-\r
-  None\r
-\r
---*/\r
-// TODO:    This - add argument and description to function comment\r
-// TODO:    BarIndex - add argument and description to function comment\r
-// TODO:    Supports - add argument and description to function comment\r
-// TODO:    Resources - add argument and description to function comment\r
-// TODO:    EFI_INVALID_PARAMETER - add return value to function comment\r
-// TODO:    EFI_UNSUPPORTED - add return value to function comment\r
-// TODO:    EFI_OUT_OF_RESOURCES - add return value to function comment\r
-// TODO:    EFI_SUCCESS - add return value to function comment\r
 {\r
 \r
   UINT8                             *Configuration;\r
@@ -1726,16 +1628,11 @@ Returns:
       NumConfig = 1;\r
     }\r
 \r
-    Configuration = AllocatePool (sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) * NumConfig + sizeof (EFI_ACPI_END_TAG_DESCRIPTOR));\r
+    Configuration = AllocateZeroPool (sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) * NumConfig + sizeof (EFI_ACPI_END_TAG_DESCRIPTOR));\r
     if (Configuration == NULL) {\r
       return EFI_OUT_OF_RESOURCES;\r
     }\r
 \r
-    ZeroMem (\r
-      Configuration,\r
-      sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) * NumConfig + sizeof (EFI_ACPI_END_TAG_DESCRIPTOR)\r
-      );\r
-\r
     Ptr = (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *) Configuration;\r
 \r
     if (NumConfig == 1) {\r
@@ -1813,7 +1710,7 @@ Returns:
 \r
       Ptr = (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *) ((UINT8 *) Ptr + sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR));\r
     }\r
-    \r
+\r
     //\r
     // put the checksum\r
     //\r
@@ -1827,6 +1724,30 @@ Returns:
   return EFI_SUCCESS;\r
 }\r
 \r
+/**\r
+  Sets the attributes for a range of a BAR on a PCI controller.\r
+\r
+  @param  This                  A pointer to the EFI_PCI_IO_PROTOCOL instance.\r
+  @param  Attributes            The mask of attributes to set for the resource range specified by\r
+                                BarIndex, Offset, and Length.\r
+  @param  BarIndex              The BAR index of the standard PCI Configuration header to use as the\r
+                                base address for resource range. The legal range for this field is 0..5.\r
+  @param  Offset                A pointer to the BAR relative base address of the resource range to be\r
+                                modified by the attributes specified by Attributes.\r
+  @param  Length                A pointer to the length of the resource range to be modified by the\r
+                                attributes specified by Attributes.\r
+\r
+  @retval EFI_SUCCESS           The set of attributes specified by Attributes for the resource\r
+                                range specified by BarIndex, Offset, and Length were\r
+                                set on the PCI controller, and the actual resource range is returned\r
+                                in Offset and Length.\r
+  @retval EFI_INVALID_PARAMETER Offset or Length is NULL.\r
+  @retval EFI_UNSUPPORTED       BarIndex not valid for this PCI controller.\r
+  @retval EFI_OUT_OF_RESOURCES  There are not enough resources to set the attributes on the\r
+                                resource range specified by BarIndex, Offset, and\r
+                                Length.\r
+\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 PciIoSetBarAttributes (\r
@@ -1836,28 +1757,6 @@ PciIoSetBarAttributes (
   IN OUT UINT64                       *Offset,\r
   IN OUT UINT64                       *Length\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-\r
-Arguments:\r
-\r
-Returns:\r
-\r
-  None\r
-\r
---*/\r
-// TODO:    This - add argument and description to function comment\r
-// TODO:    Attributes - add argument and description to function comment\r
-// TODO:    BarIndex - add argument and description to function comment\r
-// TODO:    Offset - add argument and description to function comment\r
-// TODO:    Length - add argument and description to function comment\r
-// TODO:    EFI_INVALID_PARAMETER - add return value to function comment\r
-// TODO:    EFI_UNSUPPORTED - add return value to function comment\r
-// TODO:    EFI_UNSUPPORTED - add return value to function comment\r
-// TODO:    EFI_UNSUPPORTED - add return value to function comment\r
-// TODO:    EFI_SUCCESS - add return value to function comment\r
 {\r
   EFI_STATUS    Status;\r
   PCI_IO_DEVICE *PciIoDevice;\r
@@ -1905,34 +1804,34 @@ Returns:
   return EFI_SUCCESS;\r
 }\r
 \r
-EFI_STATUS\r
-UpStreamBridgesAttributes (\r
-  IN  PCI_IO_DEVICE                            *PciIoDevice,\r
-  IN  EFI_PCI_IO_PROTOCOL_ATTRIBUTE_OPERATION  Operation,\r
-  IN  UINT64                                   Attributes\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-Arguments:\r
+/**\r
+  Program parent bridge's attribute recurrently.\r
 \r
-Returns:\r
+  @param PciIoDevice  Child Pci device instance\r
+  @param Operation    The operation to perform on the attributes for this PCI controller.\r
+  @param Attributes   The mask of attributes that are used for Set, Enable, and Disable\r
+                      operations.\r
 \r
-  None\r
+  @retval EFI_SUCCESS           The operation on the PCI controller's attributes was completed.\r
+  @retval EFI_INVALID_PARAMETER One or more parameters are invalid.\r
+  @retval EFI_UNSUPPORTED       one or more of the bits set in\r
+                                Attributes are not supported by this PCI controller or one of\r
+                                its parent bridges when Operation is Set, Enable or Disable.\r
 \r
---*/\r
-// TODO:    PciIoDevice - add argument and description to function comment\r
-// TODO:    Operation - add argument and description to function comment\r
-// TODO:    Attributes - add argument and description to function comment\r
-// TODO:    EFI_SUCCESS - add return value to function comment\r
+**/\r
+EFI_STATUS\r
+UpStreamBridgesAttributes (\r
+  IN PCI_IO_DEVICE                            *PciIoDevice,\r
+  IN EFI_PCI_IO_PROTOCOL_ATTRIBUTE_OPERATION  Operation,\r
+  IN UINT64                                   Attributes\r
+  )\r
 {\r
   PCI_IO_DEVICE       *Parent;\r
   EFI_PCI_IO_PROTOCOL *PciIo;\r
 \r
   Parent = PciIoDevice->Parent;\r
 \r
-  while (Parent && IS_PCI_BRIDGE (&Parent->Pci)) {\r
+  while (Parent != NULL && IS_PCI_BRIDGE (&Parent->Pci)) {\r
 \r
     //\r
     // Get the PciIo Protocol\r
@@ -1947,24 +1846,21 @@ Returns:
   return EFI_SUCCESS;\r
 }\r
 \r
+/**\r
+  Test whether two Pci devices has same parent bridge.\r
+\r
+  @param PciDevice1  The first pci device for testing.\r
+  @param PciDevice2  The second pci device for testing.\r
+\r
+  @retval TRUE       Two Pci device has the same parent bridge.\r
+  @retval FALSE      Two Pci device has not the same parent bridge.\r
+\r
+**/\r
 BOOLEAN\r
 PciDevicesOnTheSamePath (\r
   IN PCI_IO_DEVICE        *PciDevice1,\r
   IN PCI_IO_DEVICE        *PciDevice2\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-Arguments:\r
-\r
-Returns:\r
-\r
-  None\r
-\r
---*/\r
-// TODO:    PciDevice1 - add argument and description to function comment\r
-// TODO:    PciDevice2 - add argument and description to function comment\r
 {\r
   BOOLEAN   Existed1;\r
   BOOLEAN   Existed2;\r
@@ -1978,3 +1874,4 @@ Returns:
 \r
   return (BOOLEAN) (Existed1 || Existed2);\r
 }\r
+\r