mirror of https://github.com/acidanthera/audk.git
MdeModulePkg/PciBus: Restrict one VGA per HostBridge not Segment
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1109 Today's restriction of VGA device is to have only one VGA device enabled per PCI segment. It's not correct because several segments may share one IO / MMIO address space. We should restrict to have one VGA per Host Bridge because each Host Bridge has its only IO / MMIO address space. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com> Reviewed-by: Star Zeng <star.zeng@intel.com>
This commit is contained in:
parent
06da1e310b
commit
983f5abb9a
|
@ -979,33 +979,33 @@ PciDeviceExisted (
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Get the active VGA device on the same segment.
|
Get the active VGA device on the specified Host Bridge.
|
||||||
|
|
||||||
@param VgaDevice PCI IO instance for the VGA device.
|
@param HostBridgeHandle Host Bridge handle.
|
||||||
|
|
||||||
@return The active VGA device on the same segment.
|
@return The active VGA device on the specified Host Bridge.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
PCI_IO_DEVICE *
|
PCI_IO_DEVICE *
|
||||||
ActiveVGADeviceOnTheSameSegment (
|
LocateVgaDeviceOnHostBridge (
|
||||||
IN PCI_IO_DEVICE *VgaDevice
|
IN EFI_HANDLE HostBridgeHandle
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
LIST_ENTRY *CurrentLink;
|
LIST_ENTRY *CurrentLink;
|
||||||
PCI_IO_DEVICE *Temp;
|
PCI_IO_DEVICE *PciIoDevice;
|
||||||
|
|
||||||
CurrentLink = mPciDevicePool.ForwardLink;
|
CurrentLink = mPciDevicePool.ForwardLink;
|
||||||
|
|
||||||
while (CurrentLink != NULL && CurrentLink != &mPciDevicePool) {
|
while (CurrentLink != NULL && CurrentLink != &mPciDevicePool) {
|
||||||
|
|
||||||
Temp = PCI_IO_DEVICE_FROM_LINK (CurrentLink);
|
PciIoDevice = PCI_IO_DEVICE_FROM_LINK (CurrentLink);
|
||||||
|
|
||||||
if (Temp->PciRootBridgeIo->SegmentNumber == VgaDevice->PciRootBridgeIo->SegmentNumber) {
|
if (PciIoDevice->PciRootBridgeIo->ParentHandle== HostBridgeHandle) {
|
||||||
|
|
||||||
Temp = LocateVgaDevice (Temp);
|
PciIoDevice = LocateVgaDevice (PciIoDevice);
|
||||||
|
|
||||||
if (Temp != NULL) {
|
if (PciIoDevice != NULL) {
|
||||||
return Temp;
|
return PciIoDevice;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -230,16 +230,16 @@ PciDeviceExisted (
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Get the active VGA device on the same segment.
|
Get the active VGA device on the specified Host Bridge.
|
||||||
|
|
||||||
@param VgaDevice PCI IO instance for the VGA device.
|
@param HostBridgeHandle Host Bridge handle.
|
||||||
|
|
||||||
@return The active VGA device on the same segment.
|
@return The active VGA device on the specified Host Bridge.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
PCI_IO_DEVICE *
|
PCI_IO_DEVICE *
|
||||||
ActiveVGADeviceOnTheSameSegment (
|
LocateVgaDeviceOnHostBridge (
|
||||||
IN PCI_IO_DEVICE *VgaDevice
|
IN EFI_HANDLE HostBridgeHandle
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1413,9 +1413,9 @@ SupportPaletteSnoopAttributes (
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Get the boot VGA on the same segement
|
// Get the boot VGA on the same Host Bridge
|
||||||
//
|
//
|
||||||
Temp = ActiveVGADeviceOnTheSameSegment (PciIoDevice);
|
Temp = LocateVgaDeviceOnHostBridge (PciIoDevice->PciRootBridgeIo->ParentHandle);
|
||||||
|
|
||||||
if (Temp == NULL) {
|
if (Temp == NULL) {
|
||||||
//
|
//
|
||||||
|
@ -1668,9 +1668,9 @@ PciIoAttributes (
|
||||||
//
|
//
|
||||||
if (Operation == EfiPciIoAttributeOperationEnable) {
|
if (Operation == EfiPciIoAttributeOperationEnable) {
|
||||||
//
|
//
|
||||||
// Check if there have been an active VGA device on the same segment
|
// Check if there have been an active VGA device on the same Host Bridge
|
||||||
//
|
//
|
||||||
Temp = ActiveVGADeviceOnTheSameSegment (PciIoDevice);
|
Temp = LocateVgaDeviceOnHostBridge (PciIoDevice->PciRootBridgeIo->ParentHandle);
|
||||||
if (Temp != NULL && Temp != PciIoDevice) {
|
if (Temp != NULL && Temp != PciIoDevice) {
|
||||||
//
|
//
|
||||||
// An active VGA has been detected, so can not enable another
|
// An active VGA has been detected, so can not enable another
|
||||||
|
|
Loading…
Reference in New Issue