mirror of https://github.com/acidanthera/audk.git
OvmfPkg: CsmSupportLib: Set/use platform specific legacy interrupt device
Use a PCD set from PEI to determine the legacy interrupt device number appropriate for the underlying platform type during protocol initialization. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Gabriel Somlo <somlo@cmu.edu> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Gerd Hoffmann <kraxel@redhat.com> Reviewed-by: Laszlo Ersek <lersek@redhat.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16375 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
d55004dac9
commit
72a1100171
|
@ -38,6 +38,9 @@
|
|||
MdePkg/MdePkg.dec
|
||||
IntelFrameworkPkg/IntelFrameworkPkg.dec
|
||||
|
||||
[Pcd]
|
||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfHostBridgePciDevId
|
||||
|
||||
[Protocols]
|
||||
gEfiDevicePathProtocolGuid # PROTOCOL ALWAYS_CONSUMED
|
||||
gEfiDiskInfoProtocolGuid # PROTOCOL ALWAYS_CONSUMED
|
||||
|
|
|
@ -20,6 +20,11 @@
|
|||
//
|
||||
STATIC EFI_HANDLE mLegacyInterruptHandle = NULL;
|
||||
|
||||
//
|
||||
// Legacy Interrupt Device number (0x01 on piix4, 0x1f on q35/mch)
|
||||
//
|
||||
STATIC UINT8 mLegacyInterruptDevice;
|
||||
|
||||
//
|
||||
// The Legacy Interrupt Protocol instance produced by this driver
|
||||
//
|
||||
|
@ -77,7 +82,7 @@ GetLocation (
|
|||
)
|
||||
{
|
||||
*Bus = LEGACY_INT_BUS;
|
||||
*Device = LEGACY_INT_DEV;
|
||||
*Device = mLegacyInterruptDevice;
|
||||
*Function = LEGACY_INT_FUNC;
|
||||
|
||||
return EFI_SUCCESS;
|
||||
|
@ -98,7 +103,7 @@ GetAddress (
|
|||
{
|
||||
return PCI_LIB_ADDRESS(
|
||||
LEGACY_INT_BUS,
|
||||
LEGACY_INT_DEV,
|
||||
mLegacyInterruptDevice,
|
||||
LEGACY_INT_FUNC,
|
||||
PirqReg[PirqNumber]
|
||||
);
|
||||
|
@ -173,6 +178,7 @@ LegacyInterruptInstall (
|
|||
VOID
|
||||
)
|
||||
{
|
||||
UINT16 HostBridgeDevId;
|
||||
EFI_STATUS Status;
|
||||
|
||||
//
|
||||
|
@ -180,6 +186,24 @@ LegacyInterruptInstall (
|
|||
//
|
||||
ASSERT_PROTOCOL_ALREADY_INSTALLED(NULL, &gEfiLegacyInterruptProtocolGuid);
|
||||
|
||||
//
|
||||
// Query Host Bridge DID to determine platform type, then set device number
|
||||
//
|
||||
HostBridgeDevId = PcdGet16 (PcdOvmfHostBridgePciDevId);
|
||||
switch (HostBridgeDevId) {
|
||||
case INTEL_82441_DEVICE_ID:
|
||||
mLegacyInterruptDevice = LEGACY_INT_DEV_PIIX4;
|
||||
break;
|
||||
case INTEL_Q35_MCH_DEVICE_ID:
|
||||
mLegacyInterruptDevice = LEGACY_INT_DEV_Q35;
|
||||
break;
|
||||
default:
|
||||
DEBUG ((EFI_D_ERROR, "%a: Unknown Host Bridge Device ID: 0x%04x\n",
|
||||
__FUNCTION__, HostBridgeDevId));
|
||||
ASSERT (FALSE);
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
|
||||
//
|
||||
// Make a new handle and install the protocol
|
||||
//
|
||||
|
|
|
@ -20,12 +20,16 @@
|
|||
|
||||
#include <Protocol/LegacyInterrupt.h>
|
||||
|
||||
#include <Library/PcdLib.h>
|
||||
#include <Library/PciLib.h>
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/UefiBootServicesTableLib.h>
|
||||
#include <OvmfPlatforms.h>
|
||||
|
||||
|
||||
#define LEGACY_INT_BUS 0
|
||||
#define LEGACY_INT_DEV 1
|
||||
#define LEGACY_INT_DEV_PIIX4 0x01
|
||||
#define LEGACY_INT_DEV_Q35 0x1f
|
||||
#define LEGACY_INT_FUNC 0
|
||||
|
||||
#define PIRQN 0x00 // PIRQ Null
|
||||
|
|
Loading…
Reference in New Issue