123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- From a1a3b762163868ad07a4499a73df324f40d5ab0b Mon Sep 17 00:00:00 2001
- From: Hans de Goede <[email protected]>
- Date: Wed, 10 Oct 2018 13:00:58 +0200
- Subject: [PATCH] brcmfmac: Remove firmware-loading code duplication
- brcmf_fw_request_next_item and brcmf_fw_request_done both have identical
- code to complete the fw-request depending on the item-type.
- This commit adds a new brcmf_fw_complete_request helper removing this code
- duplication.
- Signed-off-by: Hans de Goede <[email protected]>
- Signed-off-by: Kalle Valo <[email protected]>
- ---
- .../broadcom/brcm80211/brcmfmac/firmware.c | 62 +++++++++++-----------
- 1 file changed, 31 insertions(+), 31 deletions(-)
- --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
- +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
- @@ -504,6 +504,34 @@ fail:
- return -ENOENT;
- }
-
- +static int brcmf_fw_complete_request(const struct firmware *fw,
- + struct brcmf_fw *fwctx)
- +{
- + struct brcmf_fw_item *cur = &fwctx->req->items[fwctx->curpos];
- + int ret = 0;
- +
- + brcmf_dbg(TRACE, "firmware %s %sfound\n", cur->path, fw ? "" : "not ");
- +
- + switch (cur->type) {
- + case BRCMF_FW_TYPE_NVRAM:
- + ret = brcmf_fw_request_nvram_done(fw, fwctx);
- + break;
- + case BRCMF_FW_TYPE_BINARY:
- + if (fw)
- + cur->binary = fw;
- + else
- + ret = -ENOENT;
- + break;
- + default:
- + /* something fishy here so bail out early */
- + brcmf_err("unknown fw type: %d\n", cur->type);
- + release_firmware(fw);
- + ret = -EINVAL;
- + }
- +
- + return (cur->flags & BRCMF_FW_REQF_OPTIONAL) ? 0 : ret;
- +}
- +
- static int brcmf_fw_request_next_item(struct brcmf_fw *fwctx, bool async)
- {
- struct brcmf_fw_item *cur;
- @@ -525,15 +553,7 @@ static int brcmf_fw_request_next_item(st
- if (ret < 0) {
- brcmf_fw_request_done(NULL, fwctx);
- } else if (!async && fw) {
- - brcmf_dbg(TRACE, "firmware %s %sfound\n", cur->path,
- - fw ? "" : "not ");
- - if (cur->type == BRCMF_FW_TYPE_BINARY)
- - cur->binary = fw;
- - else if (cur->type == BRCMF_FW_TYPE_NVRAM)
- - brcmf_fw_request_nvram_done(fw, fwctx);
- - else
- - release_firmware(fw);
- -
- + brcmf_fw_complete_request(fw, fwctx);
- return -EAGAIN;
- }
- return 0;
- @@ -547,28 +567,8 @@ static void brcmf_fw_request_done(const
-
- cur = &fwctx->req->items[fwctx->curpos];
-
- - brcmf_dbg(TRACE, "enter: firmware %s %sfound\n", cur->path,
- - fw ? "" : "not ");
- -
- - if (!fw)
- - ret = -ENOENT;
- -
- - switch (cur->type) {
- - case BRCMF_FW_TYPE_NVRAM:
- - ret = brcmf_fw_request_nvram_done(fw, fwctx);
- - break;
- - case BRCMF_FW_TYPE_BINARY:
- - cur->binary = fw;
- - break;
- - default:
- - /* something fishy here so bail out early */
- - brcmf_err("unknown fw type: %d\n", cur->type);
- - release_firmware(fw);
- - ret = -EINVAL;
- - goto fail;
- - }
- -
- - if (ret < 0 && !(cur->flags & BRCMF_FW_REQF_OPTIONAL))
- + ret = brcmf_fw_complete_request(fw, fwctx);
- + if (ret < 0)
- goto fail;
-
- do {
|