summaryrefslogtreecommitdiffstats
path: root/drivers/staging/brcm80211/brcmsmac/wl_ucode_loader.c
diff options
context:
space:
mode:
authorRoland Vossen <rvossen@broadcom.com>2011-02-15 12:35:40 +0100
committerGreg Kroah-Hartman <gregkh@suse.de>2011-02-18 13:04:55 -0800
commit7249e6a17bacbb18c4baf1b0d5ca70925409120d (patch)
treefb1a88198473c938e758c16a5d64b0bfc9fa40b4 /drivers/staging/brcm80211/brcmsmac/wl_ucode_loader.c
parent490e00f68534cd724ba8e486ff6cd6b10d1891b1 (diff)
downloadop-kernel-dev-7249e6a17bacbb18c4baf1b0d5ca70925409120d.zip
op-kernel-dev-7249e6a17bacbb18c4baf1b0d5ca70925409120d.tar.gz
staging: brcm80211: improved checks on incompatible firmware
The return status of wl_ucode_init_buf() is now being used. Also a bug in firmware validation, which could lead to incompatible firmware not being rejected by the driver, has been fixed. Comment from Dan Carpenter on using negative error values has been incorporated in this commit. Signed-off-by: Roland Vossen <rvossen@broadcom.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/brcm80211/brcmsmac/wl_ucode_loader.c')
-rw-r--r--drivers/staging/brcm80211/brcmsmac/wl_ucode_loader.c56
1 files changed, 31 insertions, 25 deletions
diff --git a/drivers/staging/brcm80211/brcmsmac/wl_ucode_loader.c b/drivers/staging/brcm80211/brcmsmac/wl_ucode_loader.c
index 23e10f3..c84e6a7 100644
--- a/drivers/staging/brcm80211/brcmsmac/wl_ucode_loader.c
+++ b/drivers/staging/brcm80211/brcmsmac/wl_ucode_loader.c
@@ -41,32 +41,38 @@ int wl_ucode_data_init(struct wl_info *wl)
{
int rc;
rc = wl_check_firmwares(wl);
- if (rc < 0)
- return rc;
- wl_ucode_init_buf(wl, (void **)&d11lcn0bsinitvals24,
- D11LCN0BSINITVALS24);
- wl_ucode_init_buf(wl, (void **)&d11lcn0initvals24, D11LCN0INITVALS24);
- wl_ucode_init_buf(wl, (void **)&d11lcn1bsinitvals24,
- D11LCN1BSINITVALS24);
- wl_ucode_init_buf(wl, (void **)&d11lcn1initvals24, D11LCN1INITVALS24);
- wl_ucode_init_buf(wl, (void **)&d11lcn2bsinitvals24,
- D11LCN2BSINITVALS24);
- wl_ucode_init_buf(wl, (void **)&d11lcn2initvals24, D11LCN2INITVALS24);
- wl_ucode_init_buf(wl, (void **)&d11n0absinitvals16, D11N0ABSINITVALS16);
- wl_ucode_init_buf(wl, (void **)&d11n0bsinitvals16, D11N0BSINITVALS16);
- wl_ucode_init_buf(wl, (void **)&d11n0initvals16, D11N0INITVALS16);
- wl_ucode_init_buf(wl, (void **)&bcm43xx_16_mimo,
- D11UCODE_OVERSIGHT16_MIMO);
- wl_ucode_init_uint(wl, &bcm43xx_16_mimosz, D11UCODE_OVERSIGHT16_MIMOSZ);
- wl_ucode_init_buf(wl, (void **)&bcm43xx_24_lcn,
- D11UCODE_OVERSIGHT24_LCN);
- wl_ucode_init_uint(wl, &bcm43xx_24_lcnsz, D11UCODE_OVERSIGHT24_LCNSZ);
- wl_ucode_init_buf(wl, (void **)&bcm43xx_bommajor,
- D11UCODE_OVERSIGHT_BOMMAJOR);
- wl_ucode_init_buf(wl, (void **)&bcm43xx_bomminor,
- D11UCODE_OVERSIGHT_BOMMINOR);
- return 0;
+ rc = rc < 0 ? rc : wl_ucode_init_buf(wl, (void **)&d11lcn0bsinitvals24,
+ D11LCN0BSINITVALS24);
+ rc = rc < 0 ? rc : wl_ucode_init_buf(wl, (void **)&d11lcn0initvals24,
+ D11LCN0INITVALS24);
+ rc = rc < 0 ? rc : wl_ucode_init_buf(wl, (void **)&d11lcn1bsinitvals24,
+ D11LCN1BSINITVALS24);
+ rc = rc < 0 ? rc : wl_ucode_init_buf(wl, (void **)&d11lcn1initvals24,
+ D11LCN1INITVALS24);
+ rc = rc < 0 ? rc : wl_ucode_init_buf(wl, (void **)&d11lcn2bsinitvals24,
+ D11LCN2BSINITVALS24);
+ rc = rc < 0 ? rc : wl_ucode_init_buf(wl, (void **)&d11lcn2initvals24,
+ D11LCN2INITVALS24);
+ rc = rc < 0 ? rc : wl_ucode_init_buf(wl, (void **)&d11n0absinitvals16,
+ D11N0ABSINITVALS16);
+ rc = rc < 0 ? rc : wl_ucode_init_buf(wl, (void **)&d11n0bsinitvals16,
+ D11N0BSINITVALS16);
+ rc = rc < 0 ? rc : wl_ucode_init_buf(wl, (void **)&d11n0initvals16,
+ D11N0INITVALS16);
+ rc = rc < 0 ? rc : wl_ucode_init_buf(wl, (void **)&bcm43xx_16_mimo,
+ D11UCODE_OVERSIGHT16_MIMO);
+ rc = rc < 0 ? rc : wl_ucode_init_uint(wl, &bcm43xx_16_mimosz,
+ D11UCODE_OVERSIGHT16_MIMOSZ);
+ rc = rc < 0 ? rc : wl_ucode_init_buf(wl, (void **)&bcm43xx_24_lcn,
+ D11UCODE_OVERSIGHT24_LCN);
+ rc = rc < 0 ? rc : wl_ucode_init_uint(wl, &bcm43xx_24_lcnsz,
+ D11UCODE_OVERSIGHT24_LCNSZ);
+ rc = rc < 0 ? rc : wl_ucode_init_buf(wl, (void **)&bcm43xx_bommajor,
+ D11UCODE_OVERSIGHT_BOMMAJOR);
+ rc = rc < 0 ? rc : wl_ucode_init_buf(wl, (void **)&bcm43xx_bomminor,
+ D11UCODE_OVERSIGHT_BOMMINOR);
+ return rc;
}
void wl_ucode_data_free(void)
OpenPOWER on IntegriCloud