diff options
author | Michael Brown | 2014-09-04 17:00:11 +0200 |
---|---|---|
committer | Michael Brown | 2014-09-04 17:00:11 +0200 |
commit | f94d6516326ba05928602ab1de2e4e713cbe35ee (patch) | |
tree | c31f452620a9519fe9514ae82c61795e2d3973ba /src/include | |
parent | [efi] Use the SNP protocol instance to match the SNP chainloading device (diff) | |
download | ipxe-f94d6516326ba05928602ab1de2e4e713cbe35ee.tar.gz ipxe-f94d6516326ba05928602ab1de2e4e713cbe35ee.tar.xz ipxe-f94d6516326ba05928602ab1de2e4e713cbe35ee.zip |
[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>
Diffstat (limited to 'src/include')
-rw-r--r-- | src/include/ipxe/efi/efi_pci_api.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/include/ipxe/efi/efi_pci_api.h b/src/include/ipxe/efi/efi_pci_api.h index 1bc43e30..498a0388 100644 --- a/src/include/ipxe/efi/efi_pci_api.h +++ b/src/include/ipxe/efi/efi_pci_api.h @@ -55,6 +55,7 @@ static inline __always_inline int PCIAPI_INLINE ( efi, pci_read_config_byte ) ( struct pci_device *pci, unsigned int where, uint8_t *value ) { + *value = 0xff; return efipci_read ( pci, EFIPCI_LOCATION ( where, EFIPCI_WIDTH_BYTE ), value ); @@ -72,6 +73,7 @@ static inline __always_inline int PCIAPI_INLINE ( efi, pci_read_config_word ) ( struct pci_device *pci, unsigned int where, uint16_t *value ) { + *value = 0xffff; return efipci_read ( pci, EFIPCI_LOCATION ( where, EFIPCI_WIDTH_WORD ), value ); @@ -89,6 +91,7 @@ static inline __always_inline int PCIAPI_INLINE ( efi, pci_read_config_dword ) ( struct pci_device *pci, unsigned int where, uint32_t *value ) { + *value = 0xffffffffUL; return efipci_read ( pci, EFIPCI_LOCATION ( where, EFIPCI_WIDTH_DWORD ), value ); |