aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/drivers/bus/ecam.c6
-rw-r--r--src/include/ipxe/ecam.h2
2 files changed, 6 insertions, 2 deletions
diff --git a/src/drivers/bus/ecam.c b/src/drivers/bus/ecam.c
index dd3e1e5..62baebe 100644
--- a/src/drivers/bus/ecam.c
+++ b/src/drivers/bus/ecam.c
@@ -127,7 +127,7 @@ static int ecam_access ( struct pci_device *pci ) {
/* Reuse mapping if possible */
if ( ( pci->busdevfn - ecam.range.start ) < ecam.range.count )
- return 0;
+ return ecam.rc;
/* Clear any existing mapping */
if ( ecam.regs ) {
@@ -145,6 +145,7 @@ static int ecam_access ( struct pci_device *pci ) {
if ( ecam.range.start > pci->busdevfn ) {
DBGC ( &ecam, "ECAM found no allocation for " PCI_FMT "\n",
PCI_ARGS ( pci ) );
+ rc = -ENOENT;
goto err_find;
}
@@ -165,12 +166,13 @@ static int ecam_access ( struct pci_device *pci ) {
DBGC ( &ecam, "ECAM %04x:[%02x-%02x] mapped [%08llx,%08llx) -> %p\n",
le16_to_cpu ( ecam.alloc.segment ), ecam.alloc.start,
ecam.alloc.end, base, ( base + len ), ecam.regs );
+ ecam.rc = 0;
return 0;
iounmap ( ecam.regs );
err_ioremap:
err_find:
- ecam.range.count = 0;
+ ecam.rc = rc;
return rc;
}
diff --git a/src/include/ipxe/ecam.h b/src/include/ipxe/ecam.h
index 683d613..ff08aee 100644
--- a/src/include/ipxe/ecam.h
+++ b/src/include/ipxe/ecam.h
@@ -50,6 +50,8 @@ struct ecam_mapping {
struct pci_range range;
/** MMIO base address */
void *regs;
+ /** Mapping result */
+ int rc;
};
extern struct pci_api ecam_api;