-----Original Message-----
From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Marcello 
Sylvester Bauer
Sent: 2020年7月22日 21:16
To: devel@edk2.groups.io
Cc: Patrick Rudolph <patrick.rudo...@9elements.com>; Christian Walter 
<christian.wal...@9elements.com>; Kinney, Michael D 
<michael.d.kin...@intel.com>; Gao, Liming <liming....@intel.com>
Subject: [edk2-devel] [PATCH v3 2/3] MdePkg/BasePciExpressLib: Support variable 
size MMCONF

Add support for arbitrary sized MMCONF by introducing a new PCD.

Signed-off-by: Patrick Rudolph <patrick.rudo...@9elements.com>
Signed-off-by: Marcello Sylvester Bauer <marcello.ba...@9elements.com>
Cc: Patrick Rudolph <patrick.rudo...@9elements.com>
Cc: Christian Walter <christian.wal...@9elements.com>
Cc: Michael D Kinney <michael.d.kin...@intel.com>
Cc: Liming Gao <liming....@intel.com>
---
 MdePkg/MdePkg.dec                                      |   4 +
 MdePkg/Library/BasePciExpressLib/BasePciExpressLib.inf |   6 +-
 MdePkg/Include/Library/PciExpressLib.h                 |   5 +-
 MdePkg/Library/BasePciExpressLib/PciExpressLib.c       | 216 
+++++++++++++++++---
 4 files changed, 193 insertions(+), 38 deletions(-)

diff --git a/MdePkg/MdePkg.dec b/MdePkg/MdePkg.dec index 
73f6c2407357..02e736a01126 100644
--- a/MdePkg/MdePkg.dec
+++ b/MdePkg/MdePkg.dec
@@ -2274,6 +2274,10 @@ [PcdsFixedAtBuild, PcdsPatchableInModule, PcdsDynamic, 
PcdsDynamicEx]
   # @Prompt PCI Express Base Address.   
gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress|0xE0000000|UINT64|0x0000000a 
+  ## This value is used to set the size of PCI express hierarchy. The default 
is 256 MB.+  # @Prompt PCI Express Base Size.+  
gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseSize|0x0FFFFFFF|UINT64|0x0000000f+   
## Default current ISO 639-2 language: English & French.   # @Prompt Default 
Value of LangCodes Variable.   
gEfiMdePkgTokenSpaceGuid.PcdUefiVariableDefaultLangCodes|"engfraengfra"|VOID*|0x0000001cdiff
 --git a/MdePkg/Library/BasePciExpressLib/BasePciExpressLib.inf 
b/MdePkg/Library/BasePciExpressLib/BasePciExpressLib.inf

[Liming] 256M is 0x10000000. PCD value is 0x0FFFFFFF. Does it mean that the 
default value is 256M - 1?

Thanks
Liming

index a7edb74cde71..12734b022ac7 100644
--- a/MdePkg/Library/BasePciExpressLib/BasePciExpressLib.inf
+++ b/MdePkg/Library/BasePciExpressLib/BasePciExpressLib.inf
@@ -1,7 +1,7 @@
 ## @file-#  Instance of PCI Express Library using the 256 MB PCI Express MMIO 
window.+#  Instance of PCI Express Library using the variable size PCI Express 
MMIO window. #-#  PCI Express Library that uses the 256 MB PCI Express MMIO 
window to perform+#  PCI Express Library that uses the variable size PCI 
Express MMIO window to perform #  PCI Configuration cycles. Layers on top of an 
I/O Library instance. # #  Copyright (c) 2007 - 2018, Intel Corporation. All 
rights reserved.<BR>@@ -38,4 +38,4 @@ [LibraryClasses]
  [Pcd]   gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress  ## CONSUMES-+  
gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseSize  ## CONSUMESdiff --git 
a/MdePkg/Include/Library/PciExpressLib.h 
b/MdePkg/Include/Library/PciExpressLib.h
index 826fdcf7db6c..d78193a0a352 100644
--- a/MdePkg/Include/Library/PciExpressLib.h
+++ b/MdePkg/Include/Library/PciExpressLib.h
@@ -2,8 +2,9 @@
   Provides services to access PCI Configuration Space using the MMIO PCI 
Express window.    This library is identical to the PCI Library, except the 
access method for performing PCI-  configuration cycles must be through the 256 
MB PCI Express MMIO window whose base address-  is defined by 
PcdPciExpressBaseAddress.+  configuration cycles must be through the PCI 
Express MMIO window whose base address+  is defined by PcdPciExpressBaseAddress 
and size defined by PcdPciExpressBaseSize.+  Copyright (c) 2006 - 2018, Intel 
Corporation. All rights reserved.<BR> SPDX-License-Identifier: 
BSD-2-Clause-Patentdiff --git 
a/MdePkg/Library/BasePciExpressLib/PciExpressLib.c 
b/MdePkg/Library/BasePciExpressLib/PciExpressLib.c
index 99a166c3609b..0311ecb3025f 100644
--- a/MdePkg/Library/BasePciExpressLib/PciExpressLib.c
+++ b/MdePkg/Library/BasePciExpressLib/PciExpressLib.c
@@ -22,7 +22,8 @@
  /**   Assert the validity of a PCI address. A valid PCI address should 
contain 1's-  only in the low 28 bits.+  only in the low 28 bits. 
PcdPciExpressBaseSize limits the size to the real+  number of PCI busses in 
this segment.    @param  A The address to validate. @@ -79,6 +80,24 @@ 
GetPciExpressBaseAddress (
   return (VOID*)(UINTN) PcdGet64 (PcdPciExpressBaseAddress); } +/**+  Gets the 
size of PCI Express.++  This internal functions retrieves PCI Express Base Size 
via a PCD entry+  PcdPciExpressBaseSize.++  @return The base size of PCI 
Express.++**/+STATIC+UINTN+PcdPciExpressBaseSize (+  VOID+  )+{+  return 
(UINTN) PcdGet64 (PcdPciExpressBaseSize);+}+ /**   Reads an 8-bit PCI 
configuration register. @@ -91,7 +110,8 @@ GetPciExpressBaseAddress (
   @param  Address The address that encodes the PCI Bus, Device, Function and   
                Register. -  @return The read value from the PCI configuration 
register.+  @retval 0xFF  Invalid PCI address.+  @retval other The read value 
from the PCI configuration register.  **/ UINT8@@ -101,6 +121,9 @@ 
PciExpressRead8 (
   ) {   ASSERT_INVALID_PCI_ADDRESS (Address);+  if (Address >= 
PcdPciExpressBaseSize()) {+    return (UINT8) ~0;+  }   return MmioRead8 
((UINTN) GetPciExpressBaseAddress () + Address); } @@ -117,7 +140,8 @@ 
PciExpressRead8 (
                   Register.   @param  Value   The value to write. -  @return 
The value written to the PCI configuration register.+  @retval 0xFF  Invalid 
PCI address.+  @retval other The value written to the PCI configuration 
register.  **/ UINT8@@ -128,6 +152,9 @@ PciExpressWrite8 (
   ) {   ASSERT_INVALID_PCI_ADDRESS (Address);+  if (Address >= 
PcdPciExpressBaseSize()) {+    return (UINT8) ~0;+  }   return MmioWrite8 
((UINTN) GetPciExpressBaseAddress () + Address, Value); } @@ -148,7 +175,8 @@ 
PciExpressWrite8 (
                   Register.   @param  OrData  The value to OR with the PCI 
configuration register. -  @return The value written back to the PCI 
configuration register.+  @retval 0xFF  Invalid PCI address.+  @retval other 
The value written to the PCI configuration register.  **/ UINT8@@ -159,6 +187,9 
@@ PciExpressOr8 (
   ) {   ASSERT_INVALID_PCI_ADDRESS (Address);+  if (Address >= 
PcdPciExpressBaseSize()) {+    return (UINT8) ~0;+  }   return MmioOr8 ((UINTN) 
GetPciExpressBaseAddress () + Address, OrData); } @@ -179,7 +210,8 @@ 
PciExpressOr8 (
                   Register.   @param  AndData The value to AND with the PCI 
configuration register. -  @return The value written back to the PCI 
configuration register.+  @retval 0xFF  Invalid PCI address.+  @retval other 
The value written back to the PCI configuration register.  **/ UINT8@@ -190,6 
+222,9 @@ PciExpressAnd8 (
   ) {   ASSERT_INVALID_PCI_ADDRESS (Address);+  if (Address >= 
PcdPciExpressBaseSize()) {+    return (UINT8) ~0;+  }   return MmioAnd8 
((UINTN) GetPciExpressBaseAddress () + Address, AndData); } @@ -212,7 +247,8 @@ 
PciExpressAnd8 (
   @param  AndData The value to AND with the PCI configuration register.   
@param  OrData  The value to OR with the result of the AND operation. -  
@return The value written back to the PCI configuration register.+  @retval 
0xFF  Invalid PCI address.+  @retval other The value written back to the PCI 
configuration register.  **/ UINT8@@ -224,6 +260,9 @@ PciExpressAndThenOr8 (
   ) {   ASSERT_INVALID_PCI_ADDRESS (Address);+  if (Address >= 
PcdPciExpressBaseSize()) {+    return (UINT8) ~0;+  }   return MmioAndThenOr8 ( 
           (UINTN) GetPciExpressBaseAddress () + Address,            AndData,@@ 
-249,7 +288,9 @@ PciExpressAndThenOr8 (
   @param  EndBit    The ordinal of the most significant bit in the bit field.  
                   Range 0..7. -  @return The value of the bit field read from 
the PCI configuration register.+  @retval 0xFF  Invalid PCI address.+  @retval 
other The value of the bit field read from the PCI configuration+               
 register.  **/ UINT8@@ -261,6 +302,9 @@ PciExpressBitFieldRead8 (
   ) {   ASSERT_INVALID_PCI_ADDRESS (Address);+  if (Address >= 
PcdPciExpressBaseSize()) {+    return (UINT8) ~0;+  }   return 
MmioBitFieldRead8 (            (UINTN) GetPciExpressBaseAddress () + Address,   
         StartBit,@@ -289,7 +333,8 @@ PciExpressBitFieldRead8 (
                     Range 0..7.   @param  Value     The new value of the bit 
field. -  @return The value written back to the PCI configuration register.+  
@retval 0xFF  Invalid PCI address.+  @retval other The value written back to 
the PCI configuration register.  **/ UINT8@@ -302,6 +347,9 @@ 
PciExpressBitFieldWrite8 (
   ) {   ASSERT_INVALID_PCI_ADDRESS (Address);+  if (Address >= 
PcdPciExpressBaseSize()) {+    return (UINT8) ~0;+  }   return 
MmioBitFieldWrite8 (            (UINTN) GetPciExpressBaseAddress () + Address,  
          StartBit,@@ -334,7 +382,8 @@ PciExpressBitFieldWrite8 (
                     Range 0..7.   @param  OrData    The value to OR with the 
PCI configuration register. -  @return The value written back to the PCI 
configuration register.+  @retval 0xFF  Invalid PCI address.+  @retval other 
The value written back to the PCI configuration register.  **/ UINT8@@ -347,6 
+396,9 @@ PciExpressBitFieldOr8 (
   ) {   ASSERT_INVALID_PCI_ADDRESS (Address);+  if (Address >= 
PcdPciExpressBaseSize()) {+    return (UINT8) ~0;+  }   return MmioBitFieldOr8 
(            (UINTN) GetPciExpressBaseAddress () + Address,            
StartBit,@@ -379,7 +431,8 @@ PciExpressBitFieldOr8 (
                     Range 0..7.   @param  AndData   The value to AND with the 
PCI configuration register. -  @return The value written back to the PCI 
configuration register.+  @retval 0xFF  Invalid PCI address.+  @retval other 
The value written back to the PCI configuration register.  **/ UINT8@@ -392,6 
+445,9 @@ PciExpressBitFieldAnd8 (
   ) {   ASSERT_INVALID_PCI_ADDRESS (Address);+  if (Address >= 
PcdPciExpressBaseSize()) {+    return (UINT8) ~0;+  }   return MmioBitFieldAnd8 
(            (UINTN) GetPciExpressBaseAddress () + Address,            
StartBit,@@ -428,7 +484,8 @@ PciExpressBitFieldAnd8 (
   @param  AndData   The value to AND with the PCI configuration register.   
@param  OrData    The value to OR with the result of the AND operation. -  
@return The value written back to the PCI configuration register.+  @retval 
0xFF  Invalid PCI address.+  @retval other The value written back to the PCI 
configuration register.  **/ UINT8@@ -442,6 +499,9 @@ 
PciExpressBitFieldAndThenOr8 (
   ) {   ASSERT_INVALID_PCI_ADDRESS (Address);+  if (Address >= 
PcdPciExpressBaseSize()) {+    return (UINT8) ~0;+  }   return 
MmioBitFieldAndThenOr8 (            (UINTN) GetPciExpressBaseAddress () + 
Address,            StartBit,@@ -464,7 +524,8 @@ PciExpressBitFieldAndThenOr8 (
   @param  Address The address that encodes the PCI Bus, Device, Function and   
                Register. -  @return The read value from the PCI configuration 
register.+  @retval 0xFF  Invalid PCI address.+  @retval other The read value 
from the PCI configuration register.  **/ UINT16@@ -474,6 +535,9 @@ 
PciExpressRead16 (
   ) {   ASSERT_INVALID_PCI_ADDRESS (Address);+  if (Address >= 
PcdPciExpressBaseSize()) {+    return (UINT16) ~0;+  }   return MmioRead16 
((UINTN) GetPciExpressBaseAddress () + Address); } @@ -491,7 +555,8 @@ 
PciExpressRead16 (
                   Register.   @param  Value   The value to write. -  @return 
The value written to the PCI configuration register.+  @retval 0xFFFF  Invalid 
PCI address.+  @retval other   The value written to the PCI configuration 
register.  **/ UINT16@@ -502,6 +567,9 @@ PciExpressWrite16 (
   ) {   ASSERT_INVALID_PCI_ADDRESS (Address);+  if (Address >= 
PcdPciExpressBaseSize()) {+    return (UINT16) ~0;+  }   return MmioWrite16 
((UINTN) GetPciExpressBaseAddress () + Address, Value); } @@ -523,7 +591,8 @@ 
PciExpressWrite16 (
                   Register.   @param  OrData  The value to OR with the PCI 
configuration register. -  @return The value written back to the PCI 
configuration register.+  @retval 0xFFFF  Invalid PCI address.+  @retval other  
 The value written back to the PCI configuration register.  **/ UINT16@@ -534,6 
+603,9 @@ PciExpressOr16 (
   ) {   ASSERT_INVALID_PCI_ADDRESS (Address);+  if (Address >= 
PcdPciExpressBaseSize()) {+    return (UINT16) ~0;+  }   return MmioOr16 
((UINTN) GetPciExpressBaseAddress () + Address, OrData); } @@ -555,7 +627,8 @@ 
PciExpressOr16 (
                   Register.   @param  AndData The value to AND with the PCI 
configuration register. -  @return The value written back to the PCI 
configuration register.+  @retval 0xFFFF  Invalid PCI address.+  @retval other  
 The value written back to the PCI configuration register.  **/ UINT16@@ -566,6 
+639,9 @@ PciExpressAnd16 (
   ) {   ASSERT_INVALID_PCI_ADDRESS (Address);+  if (Address >= 
PcdPciExpressBaseSize()) {+    return (UINT16) ~0;+  }   return MmioAnd16 
((UINTN) GetPciExpressBaseAddress () + Address, AndData); } @@ -589,7 +665,8 @@ 
PciExpressAnd16 (
   @param  AndData The value to AND with the PCI configuration register.   
@param  OrData  The value to OR with the result of the AND operation. -  
@return The value written back to the PCI configuration register.+  @retval 
0xFFFF  Invalid PCI address.+  @retval other   The value written back to the 
PCI configuration register.  **/ UINT16@@ -601,6 +678,9 @@ 
PciExpressAndThenOr16 (
   ) {   ASSERT_INVALID_PCI_ADDRESS (Address);+  if (Address >= 
PcdPciExpressBaseSize()) {+    return (UINT16) ~0;+  }   return MmioAndThenOr16 
(            (UINTN) GetPciExpressBaseAddress () + Address,            
AndData,@@ -627,7 +707,9 @@ PciExpressAndThenOr16 (
   @param  EndBit    The ordinal of the most significant bit in the bit field.  
                   Range 0..15. -  @return The value of the bit field read from 
the PCI configuration register.+  @retval 0xFFFF  Invalid PCI address.+  
@retval other   The value of the bit field read from the PCI configuration+     
             register.  **/ UINT16@@ -639,6 +721,9 @@ PciExpressBitFieldRead16 (
   ) {   ASSERT_INVALID_PCI_ADDRESS (Address);+  if (Address >= 
PcdPciExpressBaseSize()) {+    return (UINT16) ~0;+  }   return 
MmioBitFieldRead16 (            (UINTN) GetPciExpressBaseAddress () + Address,  
          StartBit,@@ -668,7 +753,8 @@ PciExpressBitFieldRead16 (
                     Range 0..15.   @param  Value     The new value of the bit 
field. -  @return The value written back to the PCI configuration register.+  
@retval 0xFFFF  Invalid PCI address.+  @retval other   The value written back 
to the PCI configuration register.  **/ UINT16@@ -681,6 +767,9 @@ 
PciExpressBitFieldWrite16 (
   ) {   ASSERT_INVALID_PCI_ADDRESS (Address);+  if (Address >= 
PcdPciExpressBaseSize()) {+    return (UINT16) ~0;+  }   return 
MmioBitFieldWrite16 (            (UINTN) GetPciExpressBaseAddress () + Address, 
           StartBit,@@ -714,7 +803,8 @@ PciExpressBitFieldWrite16 (
                     Range 0..15.   @param  OrData    The value to OR with the 
PCI configuration register. -  @return The value written back to the PCI 
configuration register.+  @retval 0xFFFF  Invalid PCI address.+  @retval other  
 The value written back to the PCI configuration register.  **/ UINT16@@ -727,6 
+817,9 @@ PciExpressBitFieldOr16 (
   ) {   ASSERT_INVALID_PCI_ADDRESS (Address);+  if (Address >= 
PcdPciExpressBaseSize()) {+    return (UINT16) ~0;+  }   return 
MmioBitFieldOr16 (            (UINTN) GetPciExpressBaseAddress () + Address,    
        StartBit,@@ -760,7 +853,8 @@ PciExpressBitFieldOr16 (
                     Range 0..15.   @param  AndData   The value to AND with the 
PCI configuration register. -  @return The value written back to the PCI 
configuration register.+  @retval 0xFFFF  Invalid PCI address.+  @retval other  
 The value written back to the PCI configuration register.  **/ UINT16@@ -773,6 
+867,9 @@ PciExpressBitFieldAnd16 (
   ) {   ASSERT_INVALID_PCI_ADDRESS (Address);+  if (Address >= 
PcdPciExpressBaseSize()) {+    return (UINT16) ~0;+  }   return 
MmioBitFieldAnd16 (            (UINTN) GetPciExpressBaseAddress () + Address,   
         StartBit,@@ -810,7 +907,8 @@ PciExpressBitFieldAnd16 (
   @param  AndData   The value to AND with the PCI configuration register.   
@param  OrData    The value to OR with the result of the AND operation. -  
@return The value written back to the PCI configuration register.+  @retval 
0xFFFF  Invalid PCI address.+  @retval other   The value written back to the 
PCI configuration register.  **/ UINT16@@ -824,6 +922,9 @@ 
PciExpressBitFieldAndThenOr16 (
   ) {   ASSERT_INVALID_PCI_ADDRESS (Address);+  if (Address >= 
PcdPciExpressBaseSize()) {+    return (UINT16) ~0;+  }   return 
MmioBitFieldAndThenOr16 (            (UINTN) GetPciExpressBaseAddress () + 
Address,            StartBit,@@ -846,7 +947,8 @@ PciExpressBitFieldAndThenOr16 (
   @param  Address The address that encodes the PCI Bus, Device, Function and   
                Register. -  @return The read value from the PCI configuration 
register.+  @retval 0xFFFF  Invalid PCI address.+  @retval other   The read 
value from the PCI configuration register.  **/ UINT32@@ -856,6 +958,9 @@ 
PciExpressRead32 (
   ) {   ASSERT_INVALID_PCI_ADDRESS (Address);+  if (Address >= 
PcdPciExpressBaseSize()) {+    return (UINT32) ~0;+  }   return MmioRead32 
((UINTN) GetPciExpressBaseAddress () + Address); } @@ -873,7 +978,8 @@ 
PciExpressRead32 (
                   Register.   @param  Value   The value to write. -  @return 
The value written to the PCI configuration register.+  @retval 0xFFFFFFFF  
Invalid PCI address.+  @retval other       The value written to the PCI 
configuration register.  **/ UINT32@@ -884,6 +990,9 @@ PciExpressWrite32 (
   ) {   ASSERT_INVALID_PCI_ADDRESS (Address);+  if (Address >= 
PcdPciExpressBaseSize()) {+    return (UINT32) ~0;+  }   return MmioWrite32 
((UINTN) GetPciExpressBaseAddress () + Address, Value); } @@ -905,7 +1014,8 @@ 
PciExpressWrite32 (
                   Register.   @param  OrData  The value to OR with the PCI 
configuration register. -  @return The value written back to the PCI 
configuration register.+  @retval 0xFFFFFFFF  Invalid PCI address.+  @retval 
other       The value written back to the PCI configuration register.  **/ 
UINT32@@ -916,6 +1026,9 @@ PciExpressOr32 (
   ) {   ASSERT_INVALID_PCI_ADDRESS (Address);+  if (Address >= 
PcdPciExpressBaseSize()) {+    return (UINT32) ~0;+  }   return MmioOr32 
((UINTN) GetPciExpressBaseAddress () + Address, OrData); } @@ -937,7 +1050,8 @@ 
PciExpressOr32 (
                   Register.   @param  AndData The value to AND with the PCI 
configuration register. -  @return The value written back to the PCI 
configuration register.+  @retval 0xFFFFFFFF  Invalid PCI address.+  @retval 
other       The value written back to the PCI configuration register.  **/ 
UINT32@@ -948,6 +1062,9 @@ PciExpressAnd32 (
   ) {   ASSERT_INVALID_PCI_ADDRESS (Address);+  if (Address >= 
PcdPciExpressBaseSize()) {+    return (UINT32) ~0;+  }   return MmioAnd32 
((UINTN) GetPciExpressBaseAddress () + Address, AndData); } @@ -971,7 +1088,8 
@@ PciExpressAnd32 (
   @param  AndData The value to AND with the PCI configuration register.   
@param  OrData  The value to OR with the result of the AND operation. -  
@return The value written back to the PCI configuration register.+  @retval 
0xFFFFFFFF  Invalid PCI address.+  @retval other       The value written back 
to the PCI configuration register.  **/ UINT32@@ -983,6 +1101,9 @@ 
PciExpressAndThenOr32 (
   ) {   ASSERT_INVALID_PCI_ADDRESS (Address);+  if (Address >= 
PcdPciExpressBaseSize()) {+    return (UINT32) ~0;+  }   return MmioAndThenOr32 
(            (UINTN) GetPciExpressBaseAddress () + Address,            
AndData,@@ -1009,7 +1130,9 @@ PciExpressAndThenOr32 (
   @param  EndBit    The ordinal of the most significant bit in the bit field.  
                   Range 0..31. -  @return The value of the bit field read from 
the PCI configuration register.+  @retval 0xFFFFFFFF  Invalid PCI address.+  
@retval other       The value of the bit field read from the PCI+               
       configuration register.  **/ UINT32@@ -1021,6 +1144,9 @@ 
PciExpressBitFieldRead32 (
   ) {   ASSERT_INVALID_PCI_ADDRESS (Address);+  if (Address >= 
PcdPciExpressBaseSize()) {+    return (UINT32) ~0;+  }   return 
MmioBitFieldRead32 (            (UINTN) GetPciExpressBaseAddress () + Address,  
          StartBit,@@ -1050,7 +1176,8 @@ PciExpressBitFieldRead32 (
                     Range 0..31.   @param  Value     The new value of the bit 
field. -  @return The value written back to the PCI configuration register.+  
@retval 0xFFFFFFFF  Invalid PCI address.+  @retval other       The value 
written back to the PCI configuration register.  **/ UINT32@@ -1063,6 +1190,9 
@@ PciExpressBitFieldWrite32 (
   ) {   ASSERT_INVALID_PCI_ADDRESS (Address);+  if (Address >= 
PcdPciExpressBaseSize()) {+    return (UINT32) ~0;+  }   return 
MmioBitFieldWrite32 (            (UINTN) GetPciExpressBaseAddress () + Address, 
           StartBit,@@ -1096,7 +1226,8 @@ PciExpressBitFieldWrite32 (
                     Range 0..31.   @param  OrData    The value to OR with the 
PCI configuration register. -  @return The value written back to the PCI 
configuration register.+  @retval 0xFFFFFFFF  Invalid PCI address.+  @retval 
other       The value written back to the PCI configuration register.  **/ 
UINT32@@ -1109,6 +1240,9 @@ PciExpressBitFieldOr32 (
   ) {   ASSERT_INVALID_PCI_ADDRESS (Address);+  if (Address >= 
PcdPciExpressBaseSize()) {+    return (UINT32) ~0;+  }   return 
MmioBitFieldOr32 (            (UINTN) GetPciExpressBaseAddress () + Address,    
        StartBit,@@ -1142,7 +1276,8 @@ PciExpressBitFieldOr32 (
                     Range 0..31.   @param  AndData   The value to AND with the 
PCI configuration register. -  @return The value written back to the PCI 
configuration register.+  @retval 0xFFFFFFFF  Invalid PCI address.+  @retval 
other       The value written back to the PCI configuration register.  **/ 
UINT32@@ -1155,6 +1290,9 @@ PciExpressBitFieldAnd32 (
   ) {   ASSERT_INVALID_PCI_ADDRESS (Address);+  if (Address >= 
PcdPciExpressBaseSize()) {+    return (UINT32) ~0;+  }   return 
MmioBitFieldAnd32 (            (UINTN) GetPciExpressBaseAddress () + Address,   
         StartBit,@@ -1192,7 +1330,8 @@ PciExpressBitFieldAnd32 (
   @param  AndData   The value to AND with the PCI configuration register.   
@param  OrData    The value to OR with the result of the AND operation. -  
@return The value written back to the PCI configuration register.+  @retval 
0xFFFFFFFF  Invalid PCI address.+  @retval other       The value written back 
to the PCI configuration register.  **/ UINT32@@ -1206,6 +1345,9 @@ 
PciExpressBitFieldAndThenOr32 (
   ) {   ASSERT_INVALID_PCI_ADDRESS (Address);+  if (Address >= 
PcdPciExpressBaseSize()) {+    return (UINT32) ~0;+  }   return 
MmioBitFieldAndThenOr32 (            (UINTN) GetPciExpressBaseAddress () + 
Address,            StartBit,@@ -1235,7 +1377,8 @@ 
PciExpressBitFieldAndThenOr32 (
   @param  Size          The size in bytes of the transfer.   @param  Buffer    
    The pointer to a buffer receiving the data read. -  @return Size read data 
from StartAddress.+  @retval (UINTN)~0  Invalid PCI address.+  @retval other    
  Size read data from StartAddress.  **/ UINTN@@ -1249,6 +1392,9 @@ 
PciExpressReadBuffer (
   UINTN   ReturnValue;    ASSERT_INVALID_PCI_ADDRESS (StartAddress);+  if 
(StartAddress >= PcdPciExpressBaseSize()) {+    return (UINTN) ~0;+  }   ASSERT 
(((StartAddress & 0xFFF) + Size) <= 0x1000);    if (Size == 0) {@@ -1335,7 
+1481,8 @@ PciExpressReadBuffer (
   @param  Size          The size in bytes of the transfer.   @param  Buffer    
    The pointer to a buffer containing the data to write. -  @return Size 
written to StartAddress.+  @retval (UINTN)~0  Invalid PCI address.+  @retval 
other      Size written to StartAddress.  **/ UINTN@@ -1349,6 +1496,9 @@ 
PciExpressWriteBuffer (
   UINTN                             ReturnValue;    ASSERT_INVALID_PCI_ADDRESS 
(StartAddress);+  if (StartAddress >= PcdPciExpressBaseSize()) {+    return 
(UINTN) ~0;+  }   ASSERT (((StartAddress & 0xFFF) + Size) <= 0x1000);    if 
(Size == 0) {-- 
2.27.0


-=-=-=-=-=-=
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#63115): https://edk2.groups.io/g/devel/message/63115
Mute This Topic: https://groups.io/mt/75724107/1759384
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [liming....@intel.com] 
-=-=-=-=-=-=


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#63184): https://edk2.groups.io/g/devel/message/63184
Mute This Topic: https://groups.io/mt/75724107/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to