]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFrameworkModulePkg/Bus/Pci/PciBusDxe/PciIo.c
sync filename exactly.
[mirror_edk2.git] / IntelFrameworkModulePkg / Bus / Pci / PciBusDxe / PciIo.c
index 63ab8e551a77c45a29b4307db17d9683bb41d584..ddf2ea8f12e007eae60f17f9471866ea33cef4a3 100644 (file)
@@ -1,6 +1,7 @@
 /**@file\r
-\r
-Copyright (c) 2006, Intel Corporation                                                         \r
+  Implement all interfaces for EFI_PCI_IO_PROTOCOL.\r
+  \r
+Copyright (c) 2006 - 2008, 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
@@ -12,7 +13,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 **/\r
 \r
 \r
-#include "pcibus.h"\r
+#include "PciBus.h"\r
 \r
 //\r
 // Internal use only\r
@@ -60,27 +61,18 @@ static EFI_PCI_IO_PROTOCOL  PciIoInterface = {
   NULL\r
 };\r
 \r
+/**\r
+  report a error Status code of PCI bus driver controller\r
+  \r
+  @param PciIoDevice Pci device instance\r
+  @param Code        status code\r
+**/\r
 STATIC\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
@@ -89,30 +81,36 @@ Returns:
           );\r
 }\r
 \r
+/**\r
+  Initializes a PCI I/O Instance\r
+  \r
+  @param PciIoDevice  Pci device instance\r
+  \r
+  @retval EFI_SUCCESS  Success operation\r
+**/\r
 EFI_STATUS\r
 InitializePciIoInstance (\r
   PCI_IO_DEVICE  *PciIoDevice\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Initializes a PCI I/O Instance\r
-\r
-Arguments:\r
-  \r
-Returns:\r
-\r
-  None\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
 \r
+/**\r
+  Verifies access to a PCI Base Address Register (BAR)\r
+  \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
+  @retval EFI_INVALID_PARAMETER Invalid Width/BarIndex or Bar type.\r
+  @retval EFI_SUCCESS           Success Operation.\r
+**/\r
 EFI_STATUS\r
 PciIoVerifyBarAccess (\r
   PCI_IO_DEVICE                   *PciIoDevice,\r
@@ -122,31 +120,6 @@ PciIoVerifyBarAccess (
   IN UINTN                        Count,\r
   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
@@ -186,6 +159,18 @@ Returns:
   return EFI_SUCCESS;\r
 }\r
 \r
+/**\r
+  Verifies access to a PCI Config 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 overflow\r
+  @retval EFI_SUCCESS            Success operation\r
+**/\r
 EFI_STATUS\r
 PciIoVerifyConfigAccess (\r
   PCI_IO_DEVICE                 *PciIoDevice,\r
@@ -193,27 +178,6 @@ PciIoVerifyConfigAccess (
   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
@@ -246,6 +210,25 @@ Returns:
   return EFI_SUCCESS;\r
 }\r
 \r
+/**\r
+  Reads from the I/O space of a PCI Root Bridge. Returns when either the polling exit criteria is\r
+  satisfied or after a defined duration.\r
+  \r
+  @param This       Pointer to protocol instance of EFI_PCI_IO_PROTOCOL\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 PCI configuration space for the PCI controller.\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_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
 EFI_STATUS\r
 EFIAPI\r
 PciIoPollMem (\r
@@ -258,30 +241,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
@@ -318,6 +277,24 @@ Returns:
   return Status;\r
 }\r
 \r
+/**                                                                 \r
+  Reads from the I/O space of a PCI Root Bridge. Returns when either the polling exit criteria is\r
+  satisfied or after a defined duration.\r
+          \r
+  @param  This                  A pointer to the EFI_PCI_IO_PROTOCOL.\r
+  @param  Width                 Signifies the width of the memory or I/O operations.\r
+  @param  Address               The base address of the memory or I/O operations.  \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_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
@@ -330,30 +307,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
@@ -386,6 +339,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
@@ -396,27 +369,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
@@ -427,6 +379,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
@@ -447,6 +403,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
@@ -457,27 +433,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
@@ -488,6 +443,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
@@ -508,6 +467,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
@@ -518,27 +497,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
@@ -549,6 +507,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
@@ -569,6 +531,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
@@ -579,27 +561,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
@@ -610,6 +571,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
@@ -630,6 +595,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
@@ -639,24 +622,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
@@ -685,6 +650,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
@@ -694,24 +677,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
@@ -740,6 +705,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
@@ -751,30 +744,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
@@ -821,6 +790,25 @@ Returns:
   return Status;\r
 }\r
 \r
+/**                                                                 \r
+  Provides the PCI controller-Cspecific 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
@@ -831,27 +819,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
@@ -886,27 +853,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
@@ -925,6 +887,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
@@ -935,26 +917,6 @@ 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
@@ -986,6 +948,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
@@ -993,22 +967,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
@@ -1028,25 +986,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
@@ -1063,6 +1018,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
@@ -1072,26 +1040,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
@@ -1109,28 +1057,22 @@ Returns:
   return EFI_SUCCESS;\r
 }\r
 \r
+/**\r
+  Check BAR type for PCI resource.\r
+  \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
+  @return whether Pci device's bar type is same with input BarType.\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
-  Sets a PCI controllers attributes on a resource range\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:    BarType - add argument and description to function comment\r
 {\r
   switch (BarType) {\r
 \r
@@ -1160,31 +1102,22 @@ 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      Success operation.\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
@@ -1239,35 +1172,20 @@ Returns:
 \r
 }\r
 \r
+/**\r
+  Check whether this device can be enable/disable to snoop\r
+  \r
+  @param PciIoDevice  Pci device instance\r
+  @param Operation    Enable/Disable\r
+  \r
+  @retval EFI_UNSUPPORTED  Pci device is not GFX device or not support snoop\r
+  @retval EFI_SUCCESS      Snoop can be supported.\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
-Arguments:\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
   PCI_IO_DEVICE *Temp;\r
   UINT16        VGACommand;\r
@@ -1364,6 +1282,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
@@ -1372,33 +1309,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
@@ -1464,19 +1374,20 @@ Returns:
   // 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
-  //\r
-  //    //\r
-  //    // Raise the EFI_P_PC_ENABLE Status code\r
-  //    //\r
-  //    REPORT_STATUS_CODE_WITH_DEVICE_PATH (\r
-  //      EFI_PROGRESS_CODE,\r
-  //      EFI_IO_BUS_PCI | EFI_P_PC_ENABLE,\r
-  //      PciIoDevice->DevicePath\r
-  //      );\r
-  //  }\r
+  if ((Attributes & EFI_PCI_DEVICE_ENABLE) == EFI_PCI_DEVICE_ENABLE) {\r
+    Attributes &= (PciIoDevice->Supports);\r
+\r
+    //\r
+    // Raise the EFI_P_PC_ENABLE Status code\r
+    //\r
+    REPORT_STATUS_CODE_WITH_DEVICE_PATH (\r
+      EFI_PROGRESS_CODE,\r
+      EFI_IO_BUS_PCI | EFI_P_PC_ENABLE,\r
+      PciIoDevice->DevicePath\r
+      );\r
+  }\r
 \r
   //\r
   // If no attributes can be supported, then return.\r
@@ -1657,6 +1568,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
@@ -1665,26 +1598,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
@@ -1820,6 +1733,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
@@ -1829,28 +1766,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
@@ -1898,27 +1813,27 @@ Returns:
   return EFI_SUCCESS;\r
 }\r
 \r
+/**\r
+  Program parent bridge's attribute recurrently.\r
+  \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
+  @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
 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
-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:    Attributes - add argument and description to function comment\r
-// TODO:    EFI_SUCCESS - add return value to function comment\r
 {\r
   PCI_IO_DEVICE       *Parent;\r
   EFI_PCI_IO_PROTOCOL *PciIo;\r
@@ -1940,24 +1855,19 @@ Returns:
   return EFI_SUCCESS;\r
 }\r
 \r
+/**\r
+  Test whether two Pci device has same parent bridge.\r
+  \r
+  @param PciDevice1  the frist pci device for testing\r
+  @param PciDevice2  the second pci device for testing\r
+  \r
+  @return whether two Pci device has same parent bridge.\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
@@ -1971,3 +1881,4 @@ Returns:
 \r
   return (BOOLEAN) (Existed1 || Existed2);\r
 }\r
+\r