mirror of https://github.com/acidanthera/audk.git
02b9a8343f
Add a library class, and a UEFI_DRIVER lib instance, that are layered on
top of PciCapLib, and allow clients to plug an EFI_PCI_IO_PROTOCOL backend
into PciCapLib, for config space access.
(Side note:
Although the UEFI spec says that EFI_PCI_IO_PROTOCOL_CONFIG() returns
EFI_UNSUPPORTED if "[t]he address range specified by Offset, Width, and
Count is not valid for the PCI configuration header of the PCI
controller", this patch doesn't directly document the EFI_UNSUPPORTED
error code, for ProtoDevTransferConfig() and its callers
ProtoDevReadConfig() and ProtoDevWriteConfig(). Instead, the patch refers
to "unspecified error codes". The reason is that in edk2, the
PciIoConfigRead() and PciIoConfigWrite() functions [1] can also return
EFI_INVALID_PARAMETER for the above situation.
Namely, PciIoConfigRead() and PciIoConfigWrite() first call
PciIoVerifyConfigAccess(), which indeed produces the standard
EFI_UNSUPPORTED error code, if the device's config space is exceeded.
However, if PciIoVerifyConfigAccess() passes, and we reach
RootBridgeIoPciRead() and RootBridgeIoPciWrite() [2], then
RootBridgeIoCheckParameter() can still fail, e.g. if the root bridge
doesn't support extended config space (see commit
|
||
---|---|---|
.. | ||
AcpiTimerLib | ||
BaseMemEncryptSevLib | ||
BasePciCapLib | ||
BasePciCapPciSegmentLib | ||
DxePciLibI440FxQ35 | ||
EmuVariableFvbLib | ||
LoadLinuxLib | ||
LockBoxLib | ||
NvVarsFileLib | ||
PciHostBridgeLib | ||
PlatformBootManagerLib | ||
PlatformDebugLibIoPort | ||
PlatformFvbLibNull | ||
PlatformHasIoMmuLib | ||
PlatformSecureLib | ||
QemuBootOrderLib | ||
QemuFwCfgLib | ||
QemuFwCfgS3Lib | ||
ResetSystemLib | ||
SerializeVariablesLib | ||
SmbiosVersionLib | ||
SmmCpuFeaturesLib | ||
Tcg2PhysicalPresenceLibNull | ||
Tcg2PhysicalPresenceLibQemu | ||
TlsAuthConfigLib | ||
UefiPciCapPciIoLib | ||
VirtioLib | ||
VirtioMmioDeviceLib | ||
XenConsoleSerialPortLib | ||
XenHypercallLib | ||
XenIoMmioLib |