diff options
Diffstat (limited to 'arch/mips')
-rw-r--r-- | arch/mips/bcm47xx/nvram.c | 35 |
1 files changed, 20 insertions, 15 deletions
diff --git a/arch/mips/bcm47xx/nvram.c b/arch/mips/bcm47xx/nvram.c index e19fc2600b76..80e352e0c995 100644 --- a/arch/mips/bcm47xx/nvram.c +++ b/arch/mips/bcm47xx/nvram.c @@ -23,7 +23,7 @@ static char nvram_buf[NVRAM_SPACE]; -static void nvram_find_and_copy(u32 base, u32 lim) +static int nvram_find_and_copy(u32 base, u32 lim) { struct nvram_header *header; int i; @@ -49,7 +49,7 @@ static void nvram_find_and_copy(u32 base, u32 lim) if (header->magic == NVRAM_HEADER) goto found; - return; + return -ENXIO; found: src = (u32 *) header; @@ -58,10 +58,12 @@ found: *dst++ = *src++; for (; i < header->len && i < NVRAM_SPACE; i += 4) *dst++ = le32_to_cpu(*src++); + + return 0; } #ifdef CONFIG_BCM47XX_SSB -static void nvram_init_ssb(void) +static int nvram_init_ssb(void) { struct ssb_mipscore *mcore = &bcm47xx_bus.ssb.mipscore; u32 base; @@ -72,15 +74,15 @@ static void nvram_init_ssb(void) lim = mcore->pflash.window_size; } else { pr_err("Couldn't find supported flash memory\n"); - return; + return -ENXIO; } - nvram_find_and_copy(base, lim); + return nvram_find_and_copy(base, lim); } #endif #ifdef CONFIG_BCM47XX_BCMA -static void nvram_init_bcma(void) +static int nvram_init_bcma(void) { struct bcma_drv_cc *cc = &bcm47xx_bus.bcma.bus.drv_cc; u32 base; @@ -96,38 +98,41 @@ static void nvram_init_bcma(void) #endif } else { pr_err("Couldn't find supported flash memory\n"); - return; + return -ENXIO; } - nvram_find_and_copy(base, lim); + return nvram_find_and_copy(base, lim); } #endif -static void early_nvram_init(void) +static int early_nvram_init(void) { switch (bcm47xx_bus_type) { #ifdef CONFIG_BCM47XX_SSB case BCM47XX_BUS_TYPE_SSB: - nvram_init_ssb(); - break; + return nvram_init_ssb(); #endif #ifdef CONFIG_BCM47XX_BCMA case BCM47XX_BUS_TYPE_BCMA: - nvram_init_bcma(); - break; + return nvram_init_bcma(); #endif } + return -ENXIO; } int nvram_getenv(char *name, char *val, size_t val_len) { char *var, *value, *end, *eq; + int err; if (!name) return -EINVAL; - if (!nvram_buf[0]) - early_nvram_init(); + if (!nvram_buf[0]) { + err = early_nvram_init(); + if (err) + return err; + } /* Look for name=value and return value */ var = &nvram_buf[sizeof(struct nvram_header)]; |