From: Michael Brown Date: Tue, 11 Jan 2011 01:37:27 +0000 (+0000) Subject: [pci] Allow pci_vpd_init() return status to be ignored X-Git-Tag: v1.20.1~2341 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=267ef3179177cc345e5c1a550cd187a6e5cc8e69;p=thirdparty%2Fipxe.git [pci] Allow pci_vpd_init() return status to be ignored Most xxx_init() functions are void functions with no failure cases. Allow pci_vpd_init() to be used in the same way. (Subsequent calls to pci_vpd_read() etc. will fail if pci_vpd_init() fails.) Signed-off-by: Michael Brown --- diff --git a/src/drivers/bus/pcivpd.c b/src/drivers/bus/pcivpd.c index 1f7d832b9..1ee6c6415 100644 --- a/src/drivers/bus/pcivpd.c +++ b/src/drivers/bus/pcivpd.c @@ -73,6 +73,10 @@ static int pci_vpd_read_dword ( struct pci_vpd *vpd, int address, unsigned int retries; uint16_t flag; + /* Fail if no VPD present */ + if ( ! cap ) + return -ENOTTY; + /* Return cached value, if present */ if ( pci_vpd_cache_is_valid ( vpd ) && ( vpd->cache.address == address ) ) { @@ -127,6 +131,10 @@ static int pci_vpd_write_dword ( struct pci_vpd *vpd, int address, unsigned int retries; uint16_t flag; + /* Fail if no VPD present */ + if ( ! cap ) + return -ENOTTY; + /* Invalidate cache */ pci_vpd_invalidate_cache ( vpd ); diff --git a/src/include/ipxe/pcivpd.h b/src/include/ipxe/pcivpd.h index 8b973ea1c..469ec29f8 100644 --- a/src/include/ipxe/pcivpd.h +++ b/src/include/ipxe/pcivpd.h @@ -133,6 +133,17 @@ struct pci_vpd { struct pci_vpd_cache cache; }; +/** + * Check for presence of PCI VPD + * + * @v vpd PCI VPD + * @ret is_present VPD is present + */ +static inline __attribute__ (( always_inline )) int +pci_vpd_is_present ( struct pci_vpd *vpd ) { + return ( vpd->cap != 0 ); +} + /** * Check if PCI VPD read cache is valid *