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;
|
UINTN PciLibAddress;
|
||||||
|
|
||||||
PciLibAddress = COMMON_TO_PCILIB_ADDRESS (Address);
|
PciLibAddress = PciCfgAddressConvert ((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &Address);
|
||||||
switch (Width) {
|
switch (Width) {
|
||||||
case EfiPeiPciCfgWidthUint8:
|
case EfiPeiPciCfgWidthUint8:
|
||||||
* (UINT8 *) Buffer = PciRead8 (PciLibAddress);
|
* (UINT8 *) Buffer = PciRead8 (PciLibAddress);
|
||||||
|
@ -103,7 +103,7 @@ PciCfgWrite (
|
||||||
{
|
{
|
||||||
UINTN PciLibAddress;
|
UINTN PciLibAddress;
|
||||||
|
|
||||||
PciLibAddress = COMMON_TO_PCILIB_ADDRESS (Address);
|
PciLibAddress = PciCfgAddressConvert ((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &Address);
|
||||||
switch (Width) {
|
switch (Width) {
|
||||||
case EfiPeiPciCfgWidthUint8:
|
case EfiPeiPciCfgWidthUint8:
|
||||||
PciWrite8 (PciLibAddress, *(UINT8 *) Buffer);
|
PciWrite8 (PciLibAddress, *(UINT8 *) Buffer);
|
||||||
|
@ -153,7 +153,7 @@ PciCfgModify (
|
||||||
{
|
{
|
||||||
UINTN PciLibAddress;
|
UINTN PciLibAddress;
|
||||||
|
|
||||||
PciLibAddress = COMMON_TO_PCILIB_ADDRESS (Address);
|
PciLibAddress = PciCfgAddressConvert ((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &Address);
|
||||||
switch (Width) {
|
switch (Width) {
|
||||||
case EfiPeiPciCfgWidthUint8:
|
case EfiPeiPciCfgWidthUint8:
|
||||||
PciAndThenOr8 (PciLibAddress, (UINT8)~ClearBits, (UINT8)SetBits);
|
PciAndThenOr8 (PciLibAddress, (UINT8)~ClearBits, (UINT8)SetBits);
|
||||||
|
|
|
@ -71,6 +71,28 @@ EFI_PEI_PPI_DESCRIPTOR gPciCfgPpiList = {
|
||||||
&gPciCfgPpi
|
&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.
|
Reads from a given location in the PCI configuration space.
|
||||||
|
|
||||||
|
@ -107,7 +129,7 @@ PciCfg2Read (
|
||||||
{
|
{
|
||||||
UINTN PciLibAddress;
|
UINTN PciLibAddress;
|
||||||
|
|
||||||
PciLibAddress = COMMON_TO_PCILIB_ADDRESS (Address);
|
PciLibAddress = PciCfgAddressConvert ((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &Address);
|
||||||
|
|
||||||
if (Width == EfiPeiPciCfgWidthUint8) {
|
if (Width == EfiPeiPciCfgWidthUint8) {
|
||||||
*((UINT8 *) Buffer) = PciRead8 (PciLibAddress);
|
*((UINT8 *) Buffer) = PciRead8 (PciLibAddress);
|
||||||
|
@ -158,7 +180,7 @@ PciCfg2Write (
|
||||||
{
|
{
|
||||||
UINTN PciLibAddress;
|
UINTN PciLibAddress;
|
||||||
|
|
||||||
PciLibAddress = COMMON_TO_PCILIB_ADDRESS (Address);
|
PciLibAddress = PciCfgAddressConvert ((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &Address);
|
||||||
|
|
||||||
if (Width == EfiPeiPciCfgWidthUint8) {
|
if (Width == EfiPeiPciCfgWidthUint8) {
|
||||||
PciWrite8 (PciLibAddress, *((UINT8 *) Buffer));
|
PciWrite8 (PciLibAddress, *((UINT8 *) Buffer));
|
||||||
|
@ -216,7 +238,7 @@ PciCfg2Modify (
|
||||||
{
|
{
|
||||||
UINTN PciLibAddress;
|
UINTN PciLibAddress;
|
||||||
|
|
||||||
PciLibAddress = COMMON_TO_PCILIB_ADDRESS (Address);
|
PciLibAddress = PciCfgAddressConvert ((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &Address);
|
||||||
|
|
||||||
if (Width == EfiPeiPciCfgWidthUint8) {
|
if (Width == EfiPeiPciCfgWidthUint8) {
|
||||||
PciAndThenOr8 (PciLibAddress, ~(*(UINT8 *)ClearBits), *((UINT8 *) SetBits));
|
PciAndThenOr8 (PciLibAddress, ~(*(UINT8 *)ClearBits), *((UINT8 *) SetBits));
|
||||||
|
|
|
@ -28,12 +28,20 @@
|
||||||
|
|
||||||
#include <IndustryStandard\Pci.h>
|
#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, \
|
Convert EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS to PCI_LIB_ADDRESS.
|
||||||
((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &A)->Function, \
|
|
||||||
((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &A)->Register \
|
@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
|
BaseMemoryLib
|
||||||
PeiServicesTablePointerLib
|
PeiServicesTablePointerLib
|
||||||
CustomDecompressLib
|
CustomDecompressLib
|
||||||
TianoDecompressLib
|
|
||||||
UefiDecompressLib
|
UefiDecompressLib
|
||||||
PeCoffLoaderLib
|
PeCoffLoaderLib
|
||||||
CacheMaintenanceLib
|
CacheMaintenanceLib
|
||||||
|
|
|
@ -79,7 +79,7 @@
|
||||||
ReportStatusCodeLib|IntelFrameworkPkg/Library/PeiReportStatusCodeLib/PeiReportStatusCodeLib.inf
|
ReportStatusCodeLib|IntelFrameworkPkg/Library/PeiReportStatusCodeLib/PeiReportStatusCodeLib.inf
|
||||||
PeiServicesTablePointerLib|MdePkg/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.inf
|
PeiServicesTablePointerLib|MdePkg/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.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]
|
[LibraryClasses.common.DXE_CORE]
|
||||||
HobLib|MdePkg/Library/DxeCoreHobLib/DxeCoreHobLib.inf
|
HobLib|MdePkg/Library/DxeCoreHobLib/DxeCoreHobLib.inf
|
||||||
|
|
|
@ -22,13 +22,27 @@
|
||||||
|
|
||||||
#include <IndustryStandard\Pci.h>
|
#include <IndustryStandard\Pci.h>
|
||||||
|
|
||||||
#define COMMON_TO_PCILIB_ADDRESS(A) (UINTN)PCI_LIB_ADDRESS( \
|
/**
|
||||||
((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &A)->Bus, \
|
Convert EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS to PCI_LIB_ADDRESS.
|
||||||
((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 \
|
|
||||||
)
|
|
||||||
|
|
||||||
|
@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.
|
Reads from a given location in the PCI configuration space.
|
||||||
|
@ -206,7 +220,7 @@ PciCfg2Read (
|
||||||
{
|
{
|
||||||
UINTN PciLibAddress;
|
UINTN PciLibAddress;
|
||||||
|
|
||||||
PciLibAddress = COMMON_TO_PCILIB_ADDRESS (Address);
|
PciLibAddress = PciCfgAddressConvert ((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &Address);
|
||||||
|
|
||||||
if (Width == EfiPeiPciCfgWidthUint8) {
|
if (Width == EfiPeiPciCfgWidthUint8) {
|
||||||
*((UINT8 *) Buffer) = PciRead8 (PciLibAddress);
|
*((UINT8 *) Buffer) = PciRead8 (PciLibAddress);
|
||||||
|
@ -257,7 +271,7 @@ PciCfg2Write (
|
||||||
{
|
{
|
||||||
UINTN PciLibAddress;
|
UINTN PciLibAddress;
|
||||||
|
|
||||||
PciLibAddress = COMMON_TO_PCILIB_ADDRESS (Address);
|
PciLibAddress = PciCfgAddressConvert ((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &Address);
|
||||||
|
|
||||||
if (Width == EfiPeiPciCfgWidthUint8) {
|
if (Width == EfiPeiPciCfgWidthUint8) {
|
||||||
PciWrite8 (PciLibAddress, *((UINT8 *) Buffer));
|
PciWrite8 (PciLibAddress, *((UINT8 *) Buffer));
|
||||||
|
@ -315,7 +329,7 @@ PciCfg2Modify (
|
||||||
{
|
{
|
||||||
UINTN PciLibAddress;
|
UINTN PciLibAddress;
|
||||||
|
|
||||||
PciLibAddress = COMMON_TO_PCILIB_ADDRESS (Address);
|
PciLibAddress = PciCfgAddressConvert ((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &Address);
|
||||||
|
|
||||||
if (Width == EfiPeiPciCfgWidthUint8) {
|
if (Width == EfiPeiPciCfgWidthUint8) {
|
||||||
PciAndThenOr8 (PciLibAddress, ~(*(UINT8 *)ClearBits), *((UINT8 *) SetBits));
|
PciAndThenOr8 (PciLibAddress, ~(*(UINT8 *)ClearBits), *((UINT8 *) SetBits));
|
||||||
|
|
|
@ -84,7 +84,7 @@
|
||||||
MdePkg/Library/PeiResourcePublicationLib/PeiResourcePublicationLib.inf
|
MdePkg/Library/PeiResourcePublicationLib/PeiResourcePublicationLib.inf
|
||||||
MdePkg/Library/PeiServicesLib/PeiServicesLib.inf
|
MdePkg/Library/PeiServicesLib/PeiServicesLib.inf
|
||||||
MdePkg/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.inf
|
MdePkg/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.inf
|
||||||
MdePkg/Library/PeiSmbusLibSmbus2Ppi/PeiSmbusLib.inf
|
MdePkg/Library/PeiSmbusLibSmbus2Ppi/PeiSmbusLibSmbus2Ppi.inf
|
||||||
MdePkg/Library/SerialPortLibNull/SerialPortLibNull.inf
|
MdePkg/Library/SerialPortLibNull/SerialPortLibNull.inf
|
||||||
MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf
|
MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf
|
||||||
MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf
|
MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf
|
||||||
|
|
|
@ -101,6 +101,7 @@
|
||||||
PeCoffLoaderLib|MdeModulePkg/Library/DxePeCoffLoaderFromHobLib/DxePeCoffLoaderFromHobLib.inf
|
PeCoffLoaderLib|MdeModulePkg/Library/DxePeCoffLoaderFromHobLib/DxePeCoffLoaderFromHobLib.inf
|
||||||
UefiRuntimeServicesTableLib|MdePkg/Library/UefiRuntimeServicesTableLib/UefiRuntimeServicesTableLib.inf
|
UefiRuntimeServicesTableLib|MdePkg/Library/UefiRuntimeServicesTableLib/UefiRuntimeServicesTableLib.inf
|
||||||
DebugLib|IntelFrameworkPkg/Library/PeiDxeDebugLibReportStatusCode/PeiDxeDebugLibReportStatusCode.inf
|
DebugLib|IntelFrameworkPkg/Library/PeiDxeDebugLibReportStatusCode/PeiDxeDebugLibReportStatusCode.inf
|
||||||
|
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
|
||||||
|
|
||||||
|
|
||||||
[LibraryClasses.common.DXE_SMM_DRIVER]
|
[LibraryClasses.common.DXE_SMM_DRIVER]
|
||||||
|
@ -250,7 +251,6 @@
|
||||||
PcdReportStatusCodePropertyMask|gEfiMdePkgTokenSpaceGuid|0x0f
|
PcdReportStatusCodePropertyMask|gEfiMdePkgTokenSpaceGuid|0x0f
|
||||||
PcdDebugPropertyMask|gEfiMdePkgTokenSpaceGuid|0x1f
|
PcdDebugPropertyMask|gEfiMdePkgTokenSpaceGuid|0x1f
|
||||||
PcdDebugClearMemoryValue|gEfiMdePkgTokenSpaceGuid|0xAF
|
PcdDebugClearMemoryValue|gEfiMdePkgTokenSpaceGuid|0xAF
|
||||||
PcdDebugPrintErrorLevel|gEfiMdePkgTokenSpaceGuid|0x80000040
|
|
||||||
PcdPerformanceLibraryPropertyMask|gEfiMdePkgTokenSpaceGuid|0
|
PcdPerformanceLibraryPropertyMask|gEfiMdePkgTokenSpaceGuid|0
|
||||||
PcdMaxPeiPcdCallBackNumberPerPcdEntry|gEfiMdeModulePkgTokenSpaceGuid|0x08
|
PcdMaxPeiPcdCallBackNumberPerPcdEntry|gEfiMdeModulePkgTokenSpaceGuid|0x08
|
||||||
PcdVpdBaseAddress|gEfiMdeModulePkgTokenSpaceGuid|0x0
|
PcdVpdBaseAddress|gEfiMdeModulePkgTokenSpaceGuid|0x0
|
||||||
|
@ -349,6 +349,8 @@
|
||||||
PcdFlashNvStorageFtwWorkingBase|gEfiMdeModulePkgTokenSpaceGuid|0
|
PcdFlashNvStorageFtwWorkingBase|gEfiMdeModulePkgTokenSpaceGuid|0
|
||||||
PcdFlashNvStorageVariableBase|gEfiMdeModulePkgTokenSpaceGuid|0
|
PcdFlashNvStorageVariableBase|gEfiMdeModulePkgTokenSpaceGuid|0
|
||||||
|
|
||||||
|
|
||||||
|
PcdDebugPrintErrorLevel|gEfiMdePkgTokenSpaceGuid|0x80000040
|
||||||
################################################################################
|
################################################################################
|
||||||
#
|
#
|
||||||
# Components Section - list of all EDK II Modules needed by this Platform
|
# Components Section - list of all EDK II Modules needed by this Platform
|
||||||
|
|
Loading…
Reference in New Issue