MdeModulePkg/NonDiscoverablePciDeviceDxe: expose unique B/D/F identifiers
Currently, the implementation of EFI_PCI_IO_PROTOCOL::GetLocation() in NonDiscoverablePciDeviceDxe returns the same set of dummy values for each instance of the NON_DISCOVERABLE_DEVICE protocol that it attaches itself to. However, this turns out to be causing problems in cases where software (such as the ARM Compliance Test Suite [ACS]) attempts to use these values to uniquely identify controllers, since the collisions create ambiguity in this regard. So let's modify GetLocation() to return an arbitrary bus/device tuple on segment 0xff instead. This is guaranteed not to clash with other non-discoverable PCI devices, and highly unlikely to clash with real PCIe devices. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Tested-by: Marcin Wojtas <mw@semihalf.com> Reviewed-by: Star Zeng <star.zeng@intel.com>
This commit is contained in:
@@ -100,6 +100,12 @@ typedef struct {
|
||||
// on behalf of this device
|
||||
//
|
||||
LIST_ENTRY UncachedAllocationList;
|
||||
//
|
||||
// Unique ID for this device instance: needed so that we can report unique
|
||||
// segment/bus/device number for each device instance. Note that this number
|
||||
// may change when disconnecting/reconnecting the driver.
|
||||
//
|
||||
UINTN UniqueId;
|
||||
} NON_DISCOVERABLE_PCI_DEVICE;
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user