//\r
STATIC EFI_HANDLE mLegacyInterruptHandle = NULL;\r
\r
+//\r
+// Legacy Interrupt Device number (0x01 on piix4, 0x1f on q35/mch)\r
+//\r
+STATIC UINT8 mLegacyInterruptDevice;\r
+\r
//\r
// The Legacy Interrupt Protocol instance produced by this driver\r
//\r
)\r
{\r
*Bus = LEGACY_INT_BUS;\r
- *Device = LEGACY_INT_DEV;\r
+ *Device = mLegacyInterruptDevice;\r
*Function = LEGACY_INT_FUNC;\r
\r
return EFI_SUCCESS;\r
{\r
return PCI_LIB_ADDRESS(\r
LEGACY_INT_BUS,\r
- LEGACY_INT_DEV,\r
+ mLegacyInterruptDevice,\r
LEGACY_INT_FUNC,\r
PirqReg[PirqNumber]\r
);\r
VOID\r
)\r
{\r
+ UINT16 HostBridgeDevId;\r
EFI_STATUS Status;\r
\r
//\r
//\r
ASSERT_PROTOCOL_ALREADY_INSTALLED(NULL, &gEfiLegacyInterruptProtocolGuid);\r
\r
+ //\r
+ // Query Host Bridge DID to determine platform type, then set device number\r
+ //\r
+ HostBridgeDevId = PcdGet16 (PcdOvmfHostBridgePciDevId);\r
+ switch (HostBridgeDevId) {\r
+ case INTEL_82441_DEVICE_ID:\r
+ mLegacyInterruptDevice = LEGACY_INT_DEV_PIIX4;\r
+ break;\r
+ case INTEL_Q35_MCH_DEVICE_ID:\r
+ mLegacyInterruptDevice = LEGACY_INT_DEV_Q35;\r
+ break;\r
+ default:\r
+ DEBUG ((EFI_D_ERROR, "%a: Unknown Host Bridge Device ID: 0x%04x\n",\r
+ __FUNCTION__, HostBridgeDevId));\r
+ ASSERT (FALSE);\r
+ return EFI_UNSUPPORTED;\r
+ }\r
+\r
//\r
// Make a new handle and install the protocol\r
//\r