320-v5.0-0001-brcmfmac-Remove-firmware-loading-code-duplication.patch 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. From a1a3b762163868ad07a4499a73df324f40d5ab0b Mon Sep 17 00:00:00 2001
  2. From: Hans de Goede <[email protected]>
  3. Date: Wed, 10 Oct 2018 13:00:58 +0200
  4. Subject: [PATCH] brcmfmac: Remove firmware-loading code duplication
  5. brcmf_fw_request_next_item and brcmf_fw_request_done both have identical
  6. code to complete the fw-request depending on the item-type.
  7. This commit adds a new brcmf_fw_complete_request helper removing this code
  8. duplication.
  9. Signed-off-by: Hans de Goede <[email protected]>
  10. Signed-off-by: Kalle Valo <[email protected]>
  11. ---
  12. .../broadcom/brcm80211/brcmfmac/firmware.c | 62 +++++++++++-----------
  13. 1 file changed, 31 insertions(+), 31 deletions(-)
  14. --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
  15. +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
  16. @@ -504,6 +504,34 @@ fail:
  17. return -ENOENT;
  18. }
  19. +static int brcmf_fw_complete_request(const struct firmware *fw,
  20. + struct brcmf_fw *fwctx)
  21. +{
  22. + struct brcmf_fw_item *cur = &fwctx->req->items[fwctx->curpos];
  23. + int ret = 0;
  24. +
  25. + brcmf_dbg(TRACE, "firmware %s %sfound\n", cur->path, fw ? "" : "not ");
  26. +
  27. + switch (cur->type) {
  28. + case BRCMF_FW_TYPE_NVRAM:
  29. + ret = brcmf_fw_request_nvram_done(fw, fwctx);
  30. + break;
  31. + case BRCMF_FW_TYPE_BINARY:
  32. + if (fw)
  33. + cur->binary = fw;
  34. + else
  35. + ret = -ENOENT;
  36. + break;
  37. + default:
  38. + /* something fishy here so bail out early */
  39. + brcmf_err("unknown fw type: %d\n", cur->type);
  40. + release_firmware(fw);
  41. + ret = -EINVAL;
  42. + }
  43. +
  44. + return (cur->flags & BRCMF_FW_REQF_OPTIONAL) ? 0 : ret;
  45. +}
  46. +
  47. static int brcmf_fw_request_next_item(struct brcmf_fw *fwctx, bool async)
  48. {
  49. struct brcmf_fw_item *cur;
  50. @@ -525,15 +553,7 @@ static int brcmf_fw_request_next_item(st
  51. if (ret < 0) {
  52. brcmf_fw_request_done(NULL, fwctx);
  53. } else if (!async && fw) {
  54. - brcmf_dbg(TRACE, "firmware %s %sfound\n", cur->path,
  55. - fw ? "" : "not ");
  56. - if (cur->type == BRCMF_FW_TYPE_BINARY)
  57. - cur->binary = fw;
  58. - else if (cur->type == BRCMF_FW_TYPE_NVRAM)
  59. - brcmf_fw_request_nvram_done(fw, fwctx);
  60. - else
  61. - release_firmware(fw);
  62. -
  63. + brcmf_fw_complete_request(fw, fwctx);
  64. return -EAGAIN;
  65. }
  66. return 0;
  67. @@ -547,28 +567,8 @@ static void brcmf_fw_request_done(const
  68. cur = &fwctx->req->items[fwctx->curpos];
  69. - brcmf_dbg(TRACE, "enter: firmware %s %sfound\n", cur->path,
  70. - fw ? "" : "not ");
  71. -
  72. - if (!fw)
  73. - ret = -ENOENT;
  74. -
  75. - switch (cur->type) {
  76. - case BRCMF_FW_TYPE_NVRAM:
  77. - ret = brcmf_fw_request_nvram_done(fw, fwctx);
  78. - break;
  79. - case BRCMF_FW_TYPE_BINARY:
  80. - cur->binary = fw;
  81. - break;
  82. - default:
  83. - /* something fishy here so bail out early */
  84. - brcmf_err("unknown fw type: %d\n", cur->type);
  85. - release_firmware(fw);
  86. - ret = -EINVAL;
  87. - goto fail;
  88. - }
  89. -
  90. - if (ret < 0 && !(cur->flags & BRCMF_FW_REQF_OPTIONAL))
  91. + ret = brcmf_fw_complete_request(fw, fwctx);
  92. + if (ret < 0)
  93. goto fail;
  94. do {