mirror of https://github.com/acidanthera/audk.git
Fix bug in PciCfg to support PCI express address.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@3549 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
38d64b3250
commit
d8b61daacc
|
@ -53,7 +53,7 @@ PciCfgRead (
|
|||
{
|
||||
UINTN PciLibAddress;
|
||||
|
||||
PciLibAddress = COMMON_TO_PCILIB_ADDRESS (Address);
|
||||
PciLibAddress = PciCfgAddressConvert ((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &Address);
|
||||
switch (Width) {
|
||||
case EfiPeiPciCfgWidthUint8:
|
||||
* (UINT8 *) Buffer = PciRead8 (PciLibAddress);
|
||||
|
@ -103,7 +103,7 @@ PciCfgWrite (
|
|||
{
|
||||
UINTN PciLibAddress;
|
||||
|
||||
PciLibAddress = COMMON_TO_PCILIB_ADDRESS (Address);
|
||||
PciLibAddress = PciCfgAddressConvert ((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &Address);
|
||||
switch (Width) {
|
||||
case EfiPeiPciCfgWidthUint8:
|
||||
PciWrite8 (PciLibAddress, *(UINT8 *) Buffer);
|
||||
|
@ -153,7 +153,7 @@ PciCfgModify (
|
|||
{
|
||||
UINTN PciLibAddress;
|
||||
|
||||
PciLibAddress = COMMON_TO_PCILIB_ADDRESS (Address);
|
||||
PciLibAddress = PciCfgAddressConvert ((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &Address);
|
||||
switch (Width) {
|
||||
case EfiPeiPciCfgWidthUint8:
|
||||
PciAndThenOr8 (PciLibAddress, (UINT8)~ClearBits, (UINT8)SetBits);
|
||||
|
|
|
@ -71,6 +71,28 @@ EFI_PEI_PPI_DESCRIPTOR gPciCfgPpiList = {
|
|||
&gPciCfgPpi
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
Convert EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS to PCI_LIB_ADDRESS.
|
||||
|
||||
@param Address PCI address with
|
||||
EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS format.
|
||||
|
||||
@return The PCI address with PCI_LIB_ADDRESS format.
|
||||
|
||||
**/
|
||||
UINTN
|
||||
PciCfgAddressConvert (
|
||||
EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *Address
|
||||
)
|
||||
{
|
||||
if (Address->ExtendedRegister == 0) {
|
||||
return PCI_LIB_ADDRESS (Address->Bus, Address->Device, Address->Function, Address->Register);
|
||||
}
|
||||
|
||||
return PCI_LIB_ADDRESS (Address->Bus, Address->Device, Address->Function, Address->ExtendedRegister);
|
||||
}
|
||||
|
||||
/**
|
||||
Reads from a given location in the PCI configuration space.
|
||||
|
||||
|
@ -107,7 +129,7 @@ PciCfg2Read (
|
|||
{
|
||||
UINTN PciLibAddress;
|
||||
|
||||
PciLibAddress = COMMON_TO_PCILIB_ADDRESS (Address);
|
||||
PciLibAddress = PciCfgAddressConvert ((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &Address);
|
||||
|
||||
if (Width == EfiPeiPciCfgWidthUint8) {
|
||||
*((UINT8 *) Buffer) = PciRead8 (PciLibAddress);
|
||||
|
@ -158,7 +180,7 @@ PciCfg2Write (
|
|||
{
|
||||
UINTN PciLibAddress;
|
||||
|
||||
PciLibAddress = COMMON_TO_PCILIB_ADDRESS (Address);
|
||||
PciLibAddress = PciCfgAddressConvert ((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &Address);
|
||||
|
||||
if (Width == EfiPeiPciCfgWidthUint8) {
|
||||
PciWrite8 (PciLibAddress, *((UINT8 *) Buffer));
|
||||
|
@ -216,7 +238,7 @@ PciCfg2Modify (
|
|||
{
|
||||
UINTN PciLibAddress;
|
||||
|
||||
PciLibAddress = COMMON_TO_PCILIB_ADDRESS (Address);
|
||||
PciLibAddress = PciCfgAddressConvert ((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &Address);
|
||||
|
||||
if (Width == EfiPeiPciCfgWidthUint8) {
|
||||
PciAndThenOr8 (PciLibAddress, ~(*(UINT8 *)ClearBits), *((UINT8 *) SetBits));
|
||||
|
|
|
@ -28,12 +28,20 @@
|
|||
|
||||
#include <IndustryStandard\Pci.h>
|
||||
|
||||
#define COMMON_TO_PCILIB_ADDRESS(A) (UINTN)PCI_LIB_ADDRESS( \
|
||||
((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &A)->Bus, \
|
||||
((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &A)->Device, \
|
||||
((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &A)->Function, \
|
||||
((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &A)->Register \
|
||||
)
|
||||
|
||||
/**
|
||||
Convert EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS to PCI_LIB_ADDRESS.
|
||||
|
||||
@param Address PCI address with
|
||||
EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS format.
|
||||
|
||||
@return The PCI address with PCI_LIB_ADDRESS format.
|
||||
|
||||
**/
|
||||
UINTN
|
||||
PciCfgAddressConvert (
|
||||
EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *Address
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
@ -67,7 +67,6 @@
|
|||
BaseMemoryLib
|
||||
PeiServicesTablePointerLib
|
||||
CustomDecompressLib
|
||||
TianoDecompressLib
|
||||
UefiDecompressLib
|
||||
PeCoffLoaderLib
|
||||
CacheMaintenanceLib
|
||||
|
|
|
@ -79,7 +79,7 @@
|
|||
ReportStatusCodeLib|IntelFrameworkPkg/Library/PeiReportStatusCodeLib/PeiReportStatusCodeLib.inf
|
||||
PeiServicesTablePointerLib|MdePkg/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.inf
|
||||
PeiServicesTablePointerLib|MdePkg/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.inf
|
||||
SmBusLib|MdePkg/Library/PeiSmbusLibSmbus2Ppi/PeiSmbusLib.inf
|
||||
SmBusLib|MdePkg/Library/PeiSmbusLibSmbus2Ppi/PeiSmbusLibSmbus2Ppi.inf
|
||||
|
||||
[LibraryClasses.common.DXE_CORE]
|
||||
HobLib|MdePkg/Library/DxeCoreHobLib/DxeCoreHobLib.inf
|
||||
|
|
|
@ -22,13 +22,27 @@
|
|||
|
||||
#include <IndustryStandard\Pci.h>
|
||||
|
||||
#define COMMON_TO_PCILIB_ADDRESS(A) (UINTN)PCI_LIB_ADDRESS( \
|
||||
((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &A)->Bus, \
|
||||
((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &A)->Device, \
|
||||
((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &A)->Function, \
|
||||
((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &A)->Register \
|
||||
)
|
||||
/**
|
||||
Convert EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS to PCI_LIB_ADDRESS.
|
||||
|
||||
@param Address PCI address with
|
||||
EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS format.
|
||||
|
||||
@return The PCI address with PCI_LIB_ADDRESS format.
|
||||
|
||||
**/
|
||||
STATIC
|
||||
UINTN
|
||||
PciCfgAddressConvert (
|
||||
EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *Address
|
||||
)
|
||||
{
|
||||
if (Address->ExtendedRegister == 0) {
|
||||
return PCI_LIB_ADDRESS (Address->Bus, Address->Device, Address->Function, Address->Register);
|
||||
}
|
||||
|
||||
return PCI_LIB_ADDRESS (Address->Bus, Address->Device, Address->Function, Address->ExtendedRegister);
|
||||
}
|
||||
|
||||
/**
|
||||
Reads from a given location in the PCI configuration space.
|
||||
|
@ -206,7 +220,7 @@ PciCfg2Read (
|
|||
{
|
||||
UINTN PciLibAddress;
|
||||
|
||||
PciLibAddress = COMMON_TO_PCILIB_ADDRESS (Address);
|
||||
PciLibAddress = PciCfgAddressConvert ((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &Address);
|
||||
|
||||
if (Width == EfiPeiPciCfgWidthUint8) {
|
||||
*((UINT8 *) Buffer) = PciRead8 (PciLibAddress);
|
||||
|
@ -257,7 +271,7 @@ PciCfg2Write (
|
|||
{
|
||||
UINTN PciLibAddress;
|
||||
|
||||
PciLibAddress = COMMON_TO_PCILIB_ADDRESS (Address);
|
||||
PciLibAddress = PciCfgAddressConvert ((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &Address);
|
||||
|
||||
if (Width == EfiPeiPciCfgWidthUint8) {
|
||||
PciWrite8 (PciLibAddress, *((UINT8 *) Buffer));
|
||||
|
@ -315,7 +329,7 @@ PciCfg2Modify (
|
|||
{
|
||||
UINTN PciLibAddress;
|
||||
|
||||
PciLibAddress = COMMON_TO_PCILIB_ADDRESS (Address);
|
||||
PciLibAddress = PciCfgAddressConvert ((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &Address);
|
||||
|
||||
if (Width == EfiPeiPciCfgWidthUint8) {
|
||||
PciAndThenOr8 (PciLibAddress, ~(*(UINT8 *)ClearBits), *((UINT8 *) SetBits));
|
||||
|
|
|
@ -84,7 +84,7 @@
|
|||
MdePkg/Library/PeiResourcePublicationLib/PeiResourcePublicationLib.inf
|
||||
MdePkg/Library/PeiServicesLib/PeiServicesLib.inf
|
||||
MdePkg/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.inf
|
||||
MdePkg/Library/PeiSmbusLibSmbus2Ppi/PeiSmbusLib.inf
|
||||
MdePkg/Library/PeiSmbusLibSmbus2Ppi/PeiSmbusLibSmbus2Ppi.inf
|
||||
MdePkg/Library/SerialPortLibNull/SerialPortLibNull.inf
|
||||
MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf
|
||||
MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf
|
||||
|
|
|
@ -101,6 +101,7 @@
|
|||
PeCoffLoaderLib|MdeModulePkg/Library/DxePeCoffLoaderFromHobLib/DxePeCoffLoaderFromHobLib.inf
|
||||
UefiRuntimeServicesTableLib|MdePkg/Library/UefiRuntimeServicesTableLib/UefiRuntimeServicesTableLib.inf
|
||||
DebugLib|IntelFrameworkPkg/Library/PeiDxeDebugLibReportStatusCode/PeiDxeDebugLibReportStatusCode.inf
|
||||
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
|
||||
|
||||
|
||||
[LibraryClasses.common.DXE_SMM_DRIVER]
|
||||
|
@ -250,7 +251,6 @@
|
|||
PcdReportStatusCodePropertyMask|gEfiMdePkgTokenSpaceGuid|0x0f
|
||||
PcdDebugPropertyMask|gEfiMdePkgTokenSpaceGuid|0x1f
|
||||
PcdDebugClearMemoryValue|gEfiMdePkgTokenSpaceGuid|0xAF
|
||||
PcdDebugPrintErrorLevel|gEfiMdePkgTokenSpaceGuid|0x80000040
|
||||
PcdPerformanceLibraryPropertyMask|gEfiMdePkgTokenSpaceGuid|0
|
||||
PcdMaxPeiPcdCallBackNumberPerPcdEntry|gEfiMdeModulePkgTokenSpaceGuid|0x08
|
||||
PcdVpdBaseAddress|gEfiMdeModulePkgTokenSpaceGuid|0x0
|
||||
|
@ -349,6 +349,8 @@
|
|||
PcdFlashNvStorageFtwWorkingBase|gEfiMdeModulePkgTokenSpaceGuid|0
|
||||
PcdFlashNvStorageVariableBase|gEfiMdeModulePkgTokenSpaceGuid|0
|
||||
|
||||
|
||||
PcdDebugPrintErrorLevel|gEfiMdePkgTokenSpaceGuid|0x80000040
|
||||
################################################################################
|
||||
#
|
||||
# Components Section - list of all EDK II Modules needed by this Platform
|
||||
|
|
Loading…
Reference in New Issue