mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-30 09:04:07 +02:00
OvmfPkg/IncompatiblePciDeviceSupportDxe: Refine the configuration
RFC: https://bugzilla.tianocore.org/show_bug.cgi?id=3429 MMIO64_PREFERENCE is a fixed length data structure which contains one AddressSpaceDesc and one EndDesc. This patch removes MMIO64_PREFERENCE and create AddressSpaceDesc and EndDesc respectively. This change gives the chance to add more AddressSpaceDesc when CheckDevice is called. Cc: Michael D Kinney <michael.d.kinney@intel.com> Cc: Brijesh Singh <brijesh.singh@amd.com> Cc: Erdem Aktas <erdemaktas@google.com> Cc: James Bottomley <jejb@linux.ibm.com> Cc: Jiewen Yao <jiewen.yao@intel.com> Cc: Tom Lendacky <thomas.lendacky@amd.com> Cc: Gerd Hoffmann <kraxel@redhat.com> Acked-by: Gerd Hoffmann <kraxel@redhat.com> Reviewed-by: Jiewen Yao <jiewen.yao@intel.com> Signed-off-by: Min Xu <min.m.xu@intel.com>
This commit is contained in:
parent
f674fa9cde
commit
149ed8e421
@ -9,6 +9,8 @@
|
|||||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||||
**/
|
**/
|
||||||
|
|
||||||
|
#include <Library/BaseLib.h>
|
||||||
|
#include <Library/BaseMemoryLib.h>
|
||||||
#include <IndustryStandard/Acpi10.h>
|
#include <IndustryStandard/Acpi10.h>
|
||||||
#include <IndustryStandard/Pci22.h>
|
#include <IndustryStandard/Pci22.h>
|
||||||
|
|
||||||
@ -40,49 +42,38 @@ STATIC EFI_INCOMPATIBLE_PCI_DEVICE_SUPPORT_PROTOCOL
|
|||||||
// This structure is interpreted by the UpdatePciInfo() function in the edk2
|
// This structure is interpreted by the UpdatePciInfo() function in the edk2
|
||||||
// PCI Bus UEFI_DRIVER.
|
// PCI Bus UEFI_DRIVER.
|
||||||
//
|
//
|
||||||
#pragma pack (1)
|
// This structure looks like:
|
||||||
typedef struct {
|
// AddressDesc-1 + AddressDesc-2 + ... + AddressDesc-n + EndDesc
|
||||||
EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR AddressSpaceDesc;
|
//
|
||||||
EFI_ACPI_END_TAG_DESCRIPTOR EndDesc;
|
STATIC CONST EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR mMmio64Configuration = {
|
||||||
} MMIO64_PREFERENCE;
|
ACPI_ADDRESS_SPACE_DESCRIPTOR, // Desc
|
||||||
#pragma pack ()
|
(UINT16)( // Len
|
||||||
|
|
||||||
STATIC CONST MMIO64_PREFERENCE mConfiguration = {
|
|
||||||
//
|
|
||||||
// AddressSpaceDesc
|
|
||||||
//
|
|
||||||
{
|
|
||||||
ACPI_ADDRESS_SPACE_DESCRIPTOR, // Desc
|
|
||||||
(UINT16)( // Len
|
|
||||||
sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) -
|
sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) -
|
||||||
OFFSET_OF (
|
OFFSET_OF (
|
||||||
EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR,
|
EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR,
|
||||||
ResType
|
ResType
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
ACPI_ADDRESS_SPACE_TYPE_MEM, // ResType
|
ACPI_ADDRESS_SPACE_TYPE_MEM, // ResType
|
||||||
0, // GenFlag
|
0, // GenFlag
|
||||||
0, // SpecificFlag
|
0, // SpecificFlag
|
||||||
64, // AddrSpaceGranularity:
|
64, // AddrSpaceGranularity:
|
||||||
// aperture selection hint
|
// aperture selection hint
|
||||||
// for BAR allocation
|
// for BAR allocation
|
||||||
0, // AddrRangeMin
|
0, // AddrRangeMin
|
||||||
0, // AddrRangeMax:
|
0, // AddrRangeMax:
|
||||||
// no special alignment
|
// no special alignment
|
||||||
// for affected BARs
|
// for affected BARs
|
||||||
MAX_UINT64, // AddrTranslationOffset:
|
MAX_UINT64, // AddrTranslationOffset:
|
||||||
// hint covers all
|
// hint covers all
|
||||||
// eligible BARs
|
// eligible BARs
|
||||||
0 // AddrLen:
|
0 // AddrLen:
|
||||||
// use probed BAR size
|
// use probed BAR size
|
||||||
},
|
};
|
||||||
//
|
|
||||||
// EndDesc
|
STATIC CONST EFI_ACPI_END_TAG_DESCRIPTOR mEndDesc = {
|
||||||
//
|
ACPI_END_TAG_DESCRIPTOR, // Desc
|
||||||
{
|
0 // Checksum: to be ignored
|
||||||
ACPI_END_TAG_DESCRIPTOR, // Desc
|
|
||||||
0 // Checksum: to be ignored
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -203,6 +194,8 @@ CheckDevice (
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
mCheckDeviceCalled = TRUE;
|
mCheckDeviceCalled = TRUE;
|
||||||
|
UINTN Length;
|
||||||
|
UINT8 *Ptr;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Unlike the general description of this protocol member suggests, there is
|
// Unlike the general description of this protocol member suggests, there is
|
||||||
@ -232,7 +225,10 @@ CheckDevice (
|
|||||||
// the edk2 PCI Bus UEFI_DRIVER actually handles error codes; see the
|
// the edk2 PCI Bus UEFI_DRIVER actually handles error codes; see the
|
||||||
// UpdatePciInfo() function.
|
// UpdatePciInfo() function.
|
||||||
//
|
//
|
||||||
*Configuration = AllocateCopyPool (sizeof mConfiguration, &mConfiguration);
|
Length = sizeof mMmio64Configuration + sizeof mEndDesc;
|
||||||
|
|
||||||
|
*Configuration = AllocateZeroPool (Length);
|
||||||
|
|
||||||
if (*Configuration == NULL) {
|
if (*Configuration == NULL) {
|
||||||
DEBUG ((
|
DEBUG ((
|
||||||
DEBUG_WARN,
|
DEBUG_WARN,
|
||||||
@ -245,6 +241,12 @@ CheckDevice (
|
|||||||
return EFI_OUT_OF_RESOURCES;
|
return EFI_OUT_OF_RESOURCES;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Ptr = (UINT8 *)(UINTN)*Configuration;
|
||||||
|
CopyMem (Ptr, &mMmio64Configuration, sizeof mMmio64Configuration);
|
||||||
|
Length = sizeof mMmio64Configuration;
|
||||||
|
|
||||||
|
CopyMem (Ptr + Length, &mEndDesc, sizeof mEndDesc);
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user