mirror of https://github.com/ipxe/ipxe.git
[efi] Avoid returning uninitialised data from PCI configuration space reads
Under UEFI, reads from PCI configuration space may fail. If this happens, we should return all-ones (which will mimic the behaviour of an absent PCI device). Signed-off-by: Michael Brown <mcb30@ipxe.org>pull/27/merge
parent
4c5b7945c3
commit
f94d651632
|
@ -55,6 +55,7 @@ static inline __always_inline int
|
||||||
PCIAPI_INLINE ( efi, pci_read_config_byte ) ( struct pci_device *pci,
|
PCIAPI_INLINE ( efi, pci_read_config_byte ) ( struct pci_device *pci,
|
||||||
unsigned int where,
|
unsigned int where,
|
||||||
uint8_t *value ) {
|
uint8_t *value ) {
|
||||||
|
*value = 0xff;
|
||||||
return efipci_read ( pci,
|
return efipci_read ( pci,
|
||||||
EFIPCI_LOCATION ( where, EFIPCI_WIDTH_BYTE ),
|
EFIPCI_LOCATION ( where, EFIPCI_WIDTH_BYTE ),
|
||||||
value );
|
value );
|
||||||
|
@ -72,6 +73,7 @@ static inline __always_inline int
|
||||||
PCIAPI_INLINE ( efi, pci_read_config_word ) ( struct pci_device *pci,
|
PCIAPI_INLINE ( efi, pci_read_config_word ) ( struct pci_device *pci,
|
||||||
unsigned int where,
|
unsigned int where,
|
||||||
uint16_t *value ) {
|
uint16_t *value ) {
|
||||||
|
*value = 0xffff;
|
||||||
return efipci_read ( pci,
|
return efipci_read ( pci,
|
||||||
EFIPCI_LOCATION ( where, EFIPCI_WIDTH_WORD ),
|
EFIPCI_LOCATION ( where, EFIPCI_WIDTH_WORD ),
|
||||||
value );
|
value );
|
||||||
|
@ -89,6 +91,7 @@ static inline __always_inline int
|
||||||
PCIAPI_INLINE ( efi, pci_read_config_dword ) ( struct pci_device *pci,
|
PCIAPI_INLINE ( efi, pci_read_config_dword ) ( struct pci_device *pci,
|
||||||
unsigned int where,
|
unsigned int where,
|
||||||
uint32_t *value ) {
|
uint32_t *value ) {
|
||||||
|
*value = 0xffffffffUL;
|
||||||
return efipci_read ( pci,
|
return efipci_read ( pci,
|
||||||
EFIPCI_LOCATION ( where, EFIPCI_WIDTH_DWORD ),
|
EFIPCI_LOCATION ( where, EFIPCI_WIDTH_DWORD ),
|
||||||
value );
|
value );
|
||||||
|
|
Loading…
Reference in New Issue