aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/mac80211/patches/376-0009-brcmfmac-Unify-methods-to-define-and-map-firmware-fi.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/kernel/mac80211/patches/376-0009-brcmfmac-Unify-methods-to-define-and-map-firmware-fi.patch')
-rw-r--r--package/kernel/mac80211/patches/376-0009-brcmfmac-Unify-methods-to-define-and-map-firmware-fi.patch664
1 files changed, 0 insertions, 664 deletions
diff --git a/package/kernel/mac80211/patches/376-0009-brcmfmac-Unify-methods-to-define-and-map-firmware-fi.patch b/package/kernel/mac80211/patches/376-0009-brcmfmac-Unify-methods-to-define-and-map-firmware-fi.patch
deleted file mode 100644
index 0ec9d10301..0000000000
--- a/package/kernel/mac80211/patches/376-0009-brcmfmac-Unify-methods-to-define-and-map-firmware-fi.patch
+++ /dev/null
@@ -1,664 +0,0 @@
-From: Hante Meuleman <meuleman@broadcom.com>
-Date: Wed, 25 Nov 2015 11:32:46 +0100
-Subject: [PATCH] brcmfmac: Unify methods to define and map firmware files.
-
-All bus drivers (sdio, usb and pcie) require firmware files which
-needs to be downloaded to the device, The definitions and mapping
-of device id and revision to firmware and nvram file is done by
-each bus driver. This patch creates common functions and defines
-to simplify and unify the definition of these firmware and nvram
-files and mapping.
-
-Reviewed-by: Arend Van Spriel <arend@broadcom.com>
-Reviewed-by: Franky (Zhenhui) Lin <frankyl@broadcom.com>
-Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com>
-Signed-off-by: Hante Meuleman <meuleman@broadcom.com>
-Signed-off-by: Arend van Spriel <arend@broadcom.com>
-Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
----
-
---- a/drivers/net/wireless/brcm80211/brcmfmac/firmware.c
-+++ b/drivers/net/wireless/brcm80211/brcmfmac/firmware.c
-@@ -27,9 +27,9 @@
- #define BRCMF_FW_NVRAM_DEVPATH_LEN 19 /* devpath0=pcie/1/4/ */
- #define BRCMF_FW_NVRAM_PCIEDEV_LEN 10 /* pcie/1/4/ + \0 */
-
--char brcmf_firmware_path[BRCMF_FW_PATH_LEN];
-+static char brcmf_firmware_path[BRCMF_FW_NAME_LEN];
- module_param_string(alternative_fw_path, brcmf_firmware_path,
-- BRCMF_FW_PATH_LEN, 0440);
-+ BRCMF_FW_NAME_LEN, 0440);
-
- enum nvram_parser_state {
- IDLE,
-@@ -531,3 +531,43 @@ int brcmf_fw_get_firmwares(struct device
- 0);
- }
-
-+int brcmf_fw_map_chip_to_name(u32 chip, u32 chiprev,
-+ struct brcmf_firmware_mapping mapping_table[],
-+ u32 table_size, char fw_name[BRCMF_FW_NAME_LEN],
-+ char nvram_name[BRCMF_FW_NAME_LEN])
-+{
-+ u32 i;
-+ char end;
-+
-+ for (i = 0; i < table_size; i++) {
-+ if (mapping_table[i].chipid == chip &&
-+ mapping_table[i].revmask & BIT(chiprev))
-+ break;
-+ }
-+
-+ if (i == table_size) {
-+ brcmf_err("Unknown chipid %d [%d]\n", chip, chiprev);
-+ return -ENODEV;
-+ }
-+
-+ /* check if firmware path is provided by module parameter */
-+ if (brcmf_firmware_path[0] != '\0') {
-+ strlcpy(fw_name, brcmf_firmware_path, BRCMF_FW_NAME_LEN);
-+ if ((nvram_name) && (mapping_table[i].nvram))
-+ strlcpy(nvram_name, brcmf_firmware_path,
-+ BRCMF_FW_NAME_LEN);
-+
-+ end = brcmf_firmware_path[strlen(brcmf_firmware_path) - 1];
-+ if (end != '/') {
-+ strlcat(fw_name, "/", BRCMF_FW_NAME_LEN);
-+ if ((nvram_name) && (mapping_table[i].nvram))
-+ strlcat(nvram_name, "/", BRCMF_FW_NAME_LEN);
-+ }
-+ }
-+ strlcat(fw_name, mapping_table[i].fw, BRCMF_FW_NAME_LEN);
-+ if ((nvram_name) && (mapping_table[i].nvram))
-+ strlcat(nvram_name, mapping_table[i].nvram, BRCMF_FW_NAME_LEN);
-+
-+ return 0;
-+}
-+
---- a/drivers/net/wireless/brcm80211/brcmfmac/firmware.h
-+++ b/drivers/net/wireless/brcm80211/brcmfmac/firmware.h
-@@ -21,11 +21,51 @@
- #define BRCMF_FW_REQ_FLAGS 0x00F0
- #define BRCMF_FW_REQ_NV_OPTIONAL 0x0010
-
--#define BRCMF_FW_PATH_LEN 256
--#define BRCMF_FW_NAME_LEN 32
-+#define BRCMF_FW_NAME_LEN 320
-
--extern char brcmf_firmware_path[];
-+#define BRCMF_FW_DEFAULT_PATH "brcm/"
-
-+/**
-+ * struct brcmf_firmware_mapping - Used to map chipid/revmask to firmware
-+ * filename and nvram filename. Each bus type implementation should create
-+ * a table of firmware mappings (using the macros defined below).
-+ *
-+ * @chipid: ID of chip.
-+ * @revmask: bitmask of revisions, e.g. 0x10 means rev 4 only, 0xf means rev 0-3
-+ * @fw: name of the firmware file.
-+ * @nvram: name of nvram file.
-+ */
-+struct brcmf_firmware_mapping {
-+ u32 chipid;
-+ u32 revmask;
-+ const char *fw;
-+ const char *nvram;
-+};
-+
-+#define BRCMF_FW_NVRAM_DEF(fw_nvram_name, fw, nvram) \
-+static const char BRCM_ ## fw_nvram_name ## _FIRMWARE_NAME[] = \
-+ BRCMF_FW_DEFAULT_PATH fw; \
-+static const char BRCM_ ## fw_nvram_name ## _NVRAM_NAME[] = \
-+ BRCMF_FW_DEFAULT_PATH nvram; \
-+MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH fw); \
-+MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH nvram)
-+
-+#define BRCMF_FW_DEF(fw_name, fw) \
-+static const char BRCM_ ## fw_name ## _FIRMWARE_NAME[] = \
-+ BRCMF_FW_DEFAULT_PATH fw; \
-+MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH fw) \
-+
-+#define BRCMF_FW_NVRAM_ENTRY(chipid, mask, name) \
-+ { chipid, mask, \
-+ BRCM_ ## name ## _FIRMWARE_NAME, BRCM_ ## name ## _NVRAM_NAME }
-+
-+#define BRCMF_FW_ENTRY(chipid, mask, name) \
-+ { chipid, mask, BRCM_ ## name ## _FIRMWARE_NAME, NULL }
-+
-+int brcmf_fw_map_chip_to_name(u32 chip, u32 chiprev,
-+ struct brcmf_firmware_mapping mapping_table[],
-+ u32 table_size, char fw_name[BRCMF_FW_NAME_LEN],
-+ char nvram_name[BRCMF_FW_NAME_LEN]);
- void brcmf_fw_nvram_free(void *nvram);
- /*
- * Request firmware(s) asynchronously. When the asynchronous request
---- a/drivers/net/wireless/brcm80211/brcmfmac/pcie.c
-+++ b/drivers/net/wireless/brcm80211/brcmfmac/pcie.c
-@@ -44,25 +44,29 @@ enum brcmf_pcie_state {
- BRCMFMAC_PCIE_STATE_UP
- };
-
--
--#define BRCMF_PCIE_43602_FW_NAME "brcm/brcmfmac43602-pcie.bin"
--#define BRCMF_PCIE_43602_NVRAM_NAME "brcm/brcmfmac43602-pcie.txt"
--#define BRCMF_PCIE_4350_FW_NAME "brcm/brcmfmac4350-pcie.bin"
--#define BRCMF_PCIE_4350_NVRAM_NAME "brcm/brcmfmac4350-pcie.txt"
--#define BRCMF_PCIE_4356_FW_NAME "brcm/brcmfmac4356-pcie.bin"
--#define BRCMF_PCIE_4356_NVRAM_NAME "brcm/brcmfmac4356-pcie.txt"
--#define BRCMF_PCIE_43570_FW_NAME "brcm/brcmfmac43570-pcie.bin"
--#define BRCMF_PCIE_43570_NVRAM_NAME "brcm/brcmfmac43570-pcie.txt"
--#define BRCMF_PCIE_4358_FW_NAME "brcm/brcmfmac4358-pcie.bin"
--#define BRCMF_PCIE_4358_NVRAM_NAME "brcm/brcmfmac4358-pcie.txt"
--#define BRCMF_PCIE_4359_FW_NAME "brcm/brcmfmac4359-pcie.bin"
--#define BRCMF_PCIE_4359_NVRAM_NAME "brcm/brcmfmac4359-pcie.txt"
--#define BRCMF_PCIE_4365_FW_NAME "brcm/brcmfmac4365b-pcie.bin"
--#define BRCMF_PCIE_4365_NVRAM_NAME "brcm/brcmfmac4365b-pcie.txt"
--#define BRCMF_PCIE_4366_FW_NAME "brcm/brcmfmac4366b-pcie.bin"
--#define BRCMF_PCIE_4366_NVRAM_NAME "brcm/brcmfmac4366b-pcie.txt"
--#define BRCMF_PCIE_4371_FW_NAME "brcm/brcmfmac4371-pcie.bin"
--#define BRCMF_PCIE_4371_NVRAM_NAME "brcm/brcmfmac4371-pcie.txt"
-+BRCMF_FW_NVRAM_DEF(43602, "brcmfmac43602-pcie.bin", "brcmfmac43602-pcie.txt");
-+BRCMF_FW_NVRAM_DEF(4350, "brcmfmac4350-pcie.bin", "brcmfmac4350-pcie.txt");
-+BRCMF_FW_NVRAM_DEF(4356, "brcmfmac4356-pcie.bin", "brcmfmac4356-pcie.txt");
-+BRCMF_FW_NVRAM_DEF(43570, "brcmfmac43570-pcie.bin", "brcmfmac43570-pcie.txt");
-+BRCMF_FW_NVRAM_DEF(4358, "brcmfmac4358-pcie.bin", "brcmfmac4358-pcie.txt");
-+BRCMF_FW_NVRAM_DEF(4359, "brcmfmac4359-pcie.bin", "brcmfmac4359-pcie.txt");
-+BRCMF_FW_NVRAM_DEF(4365B, "brcmfmac4365b-pcie.bin", "brcmfmac4365b-pcie.txt");
-+BRCMF_FW_NVRAM_DEF(4366B, "brcmfmac4366b-pcie.bin", "brcmfmac4366b-pcie.txt");
-+BRCMF_FW_NVRAM_DEF(4371, "brcmfmac4371-pcie.bin", "brcmfmac4371-pcie.txt");
-+
-+static struct brcmf_firmware_mapping brcmf_pcie_fwnames[] = {
-+ BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43602_CHIP_ID, 0xFFFFFFFF, 43602),
-+ BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4350_CHIP_ID, 0xFFFFFFFF, 4350),
-+ BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4356_CHIP_ID, 0xFFFFFFFF, 4356),
-+ BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43567_CHIP_ID, 0xFFFFFFFF, 43570),
-+ BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43569_CHIP_ID, 0xFFFFFFFF, 43570),
-+ BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43570_CHIP_ID, 0xFFFFFFFF, 43570),
-+ BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4358_CHIP_ID, 0xFFFFFFFF, 4358),
-+ BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4359_CHIP_ID, 0xFFFFFFFF, 4359),
-+ BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4365_CHIP_ID, 0xFFFFFFFF, 4365B),
-+ BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4366_CHIP_ID, 0xFFFFFFFF, 4366B),
-+ BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4371_CHIP_ID, 0xFFFFFFFF, 4371),
-+};
-
- #define BRCMF_PCIE_FW_UP_TIMEOUT 2000 /* msec */
-
-@@ -202,26 +206,6 @@ enum brcmf_pcie_state {
- #define BRCMF_PCIE_LINK_STATUS_CTRL_ASPM_ENAB 3
-
-
--MODULE_FIRMWARE(BRCMF_PCIE_43602_FW_NAME);
--MODULE_FIRMWARE(BRCMF_PCIE_43602_NVRAM_NAME);
--MODULE_FIRMWARE(BRCMF_PCIE_4350_FW_NAME);
--MODULE_FIRMWARE(BRCMF_PCIE_4350_NVRAM_NAME);
--MODULE_FIRMWARE(BRCMF_PCIE_4356_FW_NAME);
--MODULE_FIRMWARE(BRCMF_PCIE_4356_NVRAM_NAME);
--MODULE_FIRMWARE(BRCMF_PCIE_43570_FW_NAME);
--MODULE_FIRMWARE(BRCMF_PCIE_43570_NVRAM_NAME);
--MODULE_FIRMWARE(BRCMF_PCIE_4358_FW_NAME);
--MODULE_FIRMWARE(BRCMF_PCIE_4358_NVRAM_NAME);
--MODULE_FIRMWARE(BRCMF_PCIE_4359_FW_NAME);
--MODULE_FIRMWARE(BRCMF_PCIE_4359_NVRAM_NAME);
--MODULE_FIRMWARE(BRCMF_PCIE_4365_FW_NAME);
--MODULE_FIRMWARE(BRCMF_PCIE_4365_NVRAM_NAME);
--MODULE_FIRMWARE(BRCMF_PCIE_4366_FW_NAME);
--MODULE_FIRMWARE(BRCMF_PCIE_4366_NVRAM_NAME);
--MODULE_FIRMWARE(BRCMF_PCIE_4371_FW_NAME);
--MODULE_FIRMWARE(BRCMF_PCIE_4371_NVRAM_NAME);
--
--
- struct brcmf_pcie_console {
- u32 base_addr;
- u32 buf_addr;
-@@ -258,8 +242,8 @@ struct brcmf_pciedev_info {
- enum brcmf_pcie_state state;
- bool in_irq;
- struct pci_dev *pdev;
-- char fw_name[BRCMF_FW_PATH_LEN + BRCMF_FW_NAME_LEN];
-- char nvram_name[BRCMF_FW_PATH_LEN + BRCMF_FW_NAME_LEN];
-+ char fw_name[BRCMF_FW_NAME_LEN];
-+ char nvram_name[BRCMF_FW_NAME_LEN];
- void __iomem *regs;
- void __iomem *tcm;
- u32 tcm_size;
-@@ -1478,84 +1462,6 @@ brcmf_pcie_init_share_ram_info(struct br
- }
-
-
--static int brcmf_pcie_get_fwnames(struct brcmf_pciedev_info *devinfo)
--{
-- char *fw_name;
-- char *nvram_name;
-- uint fw_len, nv_len;
-- char end;
--
-- brcmf_dbg(PCIE, "Enter, chip 0x%04x chiprev %d\n", devinfo->ci->chip,
-- devinfo->ci->chiprev);
--
-- switch (devinfo->ci->chip) {
-- case BRCM_CC_43602_CHIP_ID:
-- fw_name = BRCMF_PCIE_43602_FW_NAME;
-- nvram_name = BRCMF_PCIE_43602_NVRAM_NAME;
-- break;
-- case BRCM_CC_4350_CHIP_ID:
-- fw_name = BRCMF_PCIE_4350_FW_NAME;
-- nvram_name = BRCMF_PCIE_4350_NVRAM_NAME;
-- break;
-- case BRCM_CC_4356_CHIP_ID:
-- fw_name = BRCMF_PCIE_4356_FW_NAME;
-- nvram_name = BRCMF_PCIE_4356_NVRAM_NAME;
-- break;
-- case BRCM_CC_43567_CHIP_ID:
-- case BRCM_CC_43569_CHIP_ID:
-- case BRCM_CC_43570_CHIP_ID:
-- fw_name = BRCMF_PCIE_43570_FW_NAME;
-- nvram_name = BRCMF_PCIE_43570_NVRAM_NAME;
-- break;
-- case BRCM_CC_4358_CHIP_ID:
-- fw_name = BRCMF_PCIE_4358_FW_NAME;
-- nvram_name = BRCMF_PCIE_4358_NVRAM_NAME;
-- break;
-- case BRCM_CC_4359_CHIP_ID:
-- fw_name = BRCMF_PCIE_4359_FW_NAME;
-- nvram_name = BRCMF_PCIE_4359_NVRAM_NAME;
-- break;
-- case BRCM_CC_4365_CHIP_ID:
-- fw_name = BRCMF_PCIE_4365_FW_NAME;
-- nvram_name = BRCMF_PCIE_4365_NVRAM_NAME;
-- break;
-- case BRCM_CC_4366_CHIP_ID:
-- fw_name = BRCMF_PCIE_4366_FW_NAME;
-- nvram_name = BRCMF_PCIE_4366_NVRAM_NAME;
-- break;
-- case BRCM_CC_4371_CHIP_ID:
-- fw_name = BRCMF_PCIE_4371_FW_NAME;
-- nvram_name = BRCMF_PCIE_4371_NVRAM_NAME;
-- break;
-- default:
-- brcmf_err("Unsupported chip 0x%04x\n", devinfo->ci->chip);
-- return -ENODEV;
-- }
--
-- fw_len = sizeof(devinfo->fw_name) - 1;
-- nv_len = sizeof(devinfo->nvram_name) - 1;
-- /* check if firmware path is provided by module parameter */
-- if (brcmf_firmware_path[0] != '\0') {
-- strncpy(devinfo->fw_name, brcmf_firmware_path, fw_len);
-- strncpy(devinfo->nvram_name, brcmf_firmware_path, nv_len);
-- fw_len -= strlen(devinfo->fw_name);
-- nv_len -= strlen(devinfo->nvram_name);
--
-- end = brcmf_firmware_path[strlen(brcmf_firmware_path) - 1];
-- if (end != '/') {
-- strncat(devinfo->fw_name, "/", fw_len);
-- strncat(devinfo->nvram_name, "/", nv_len);
-- fw_len--;
-- nv_len--;
-- }
-- }
-- strncat(devinfo->fw_name, fw_name, fw_len);
-- strncat(devinfo->nvram_name, nvram_name, nv_len);
--
-- return 0;
--}
--
--
- static int brcmf_pcie_download_fw_nvram(struct brcmf_pciedev_info *devinfo,
- const struct firmware *fw, void *nvram,
- u32 nvram_len)
-@@ -1891,7 +1797,10 @@ brcmf_pcie_probe(struct pci_dev *pdev, c
- bus->wowl_supported = pci_pme_capable(pdev, PCI_D3hot);
- dev_set_drvdata(&pdev->dev, bus);
-
-- ret = brcmf_pcie_get_fwnames(devinfo);
-+ ret = brcmf_fw_map_chip_to_name(devinfo->ci->chip, devinfo->ci->chiprev,
-+ brcmf_pcie_fwnames,
-+ ARRAY_SIZE(brcmf_pcie_fwnames),
-+ devinfo->fw_name, devinfo->nvram_name);
- if (ret)
- goto fail_bus;
-
---- a/drivers/net/wireless/brcm80211/brcmfmac/sdio.c
-+++ b/drivers/net/wireless/brcm80211/brcmfmac/sdio.c
-@@ -596,136 +596,41 @@ static const struct sdiod_drive_str sdio
- {4, 0x1}
- };
-
--#define BCM43143_FIRMWARE_NAME "brcm/brcmfmac43143-sdio.bin"
--#define BCM43143_NVRAM_NAME "brcm/brcmfmac43143-sdio.txt"
--#define BCM43241B0_FIRMWARE_NAME "brcm/brcmfmac43241b0-sdio.bin"
--#define BCM43241B0_NVRAM_NAME "brcm/brcmfmac43241b0-sdio.txt"
--#define BCM43241B4_FIRMWARE_NAME "brcm/brcmfmac43241b4-sdio.bin"
--#define BCM43241B4_NVRAM_NAME "brcm/brcmfmac43241b4-sdio.txt"
--#define BCM43241B5_FIRMWARE_NAME "brcm/brcmfmac43241b5-sdio.bin"
--#define BCM43241B5_NVRAM_NAME "brcm/brcmfmac43241b5-sdio.txt"
--#define BCM4329_FIRMWARE_NAME "brcm/brcmfmac4329-sdio.bin"
--#define BCM4329_NVRAM_NAME "brcm/brcmfmac4329-sdio.txt"
--#define BCM4330_FIRMWARE_NAME "brcm/brcmfmac4330-sdio.bin"
--#define BCM4330_NVRAM_NAME "brcm/brcmfmac4330-sdio.txt"
--#define BCM4334_FIRMWARE_NAME "brcm/brcmfmac4334-sdio.bin"
--#define BCM4334_NVRAM_NAME "brcm/brcmfmac4334-sdio.txt"
--#define BCM43340_FIRMWARE_NAME "brcm/brcmfmac43340-sdio.bin"
--#define BCM43340_NVRAM_NAME "brcm/brcmfmac43340-sdio.txt"
--#define BCM4335_FIRMWARE_NAME "brcm/brcmfmac4335-sdio.bin"
--#define BCM4335_NVRAM_NAME "brcm/brcmfmac4335-sdio.txt"
--#define BCM43362_FIRMWARE_NAME "brcm/brcmfmac43362-sdio.bin"
--#define BCM43362_NVRAM_NAME "brcm/brcmfmac43362-sdio.txt"
--#define BCM4339_FIRMWARE_NAME "brcm/brcmfmac4339-sdio.bin"
--#define BCM4339_NVRAM_NAME "brcm/brcmfmac4339-sdio.txt"
--#define BCM43430_FIRMWARE_NAME "brcm/brcmfmac43430-sdio.bin"
--#define BCM43430_NVRAM_NAME "brcm/brcmfmac43430-sdio.txt"
--#define BCM43455_FIRMWARE_NAME "brcm/brcmfmac43455-sdio.bin"
--#define BCM43455_NVRAM_NAME "brcm/brcmfmac43455-sdio.txt"
--#define BCM4354_FIRMWARE_NAME "brcm/brcmfmac4354-sdio.bin"
--#define BCM4354_NVRAM_NAME "brcm/brcmfmac4354-sdio.txt"
--
--MODULE_FIRMWARE(BCM43143_FIRMWARE_NAME);
--MODULE_FIRMWARE(BCM43143_NVRAM_NAME);
--MODULE_FIRMWARE(BCM43241B0_FIRMWARE_NAME);
--MODULE_FIRMWARE(BCM43241B0_NVRAM_NAME);
--MODULE_FIRMWARE(BCM43241B4_FIRMWARE_NAME);
--MODULE_FIRMWARE(BCM43241B4_NVRAM_NAME);
--MODULE_FIRMWARE(BCM43241B5_FIRMWARE_NAME);
--MODULE_FIRMWARE(BCM43241B5_NVRAM_NAME);
--MODULE_FIRMWARE(BCM4329_FIRMWARE_NAME);
--MODULE_FIRMWARE(BCM4329_NVRAM_NAME);
--MODULE_FIRMWARE(BCM4330_FIRMWARE_NAME);
--MODULE_FIRMWARE(BCM4330_NVRAM_NAME);
--MODULE_FIRMWARE(BCM4334_FIRMWARE_NAME);
--MODULE_FIRMWARE(BCM4334_NVRAM_NAME);
--MODULE_FIRMWARE(BCM43340_FIRMWARE_NAME);
--MODULE_FIRMWARE(BCM43340_NVRAM_NAME);
--MODULE_FIRMWARE(BCM4335_FIRMWARE_NAME);
--MODULE_FIRMWARE(BCM4335_NVRAM_NAME);
--MODULE_FIRMWARE(BCM43362_FIRMWARE_NAME);
--MODULE_FIRMWARE(BCM43362_NVRAM_NAME);
--MODULE_FIRMWARE(BCM4339_FIRMWARE_NAME);
--MODULE_FIRMWARE(BCM4339_NVRAM_NAME);
--MODULE_FIRMWARE(BCM43430_FIRMWARE_NAME);
--MODULE_FIRMWARE(BCM43430_NVRAM_NAME);
--MODULE_FIRMWARE(BCM43455_FIRMWARE_NAME);
--MODULE_FIRMWARE(BCM43455_NVRAM_NAME);
--MODULE_FIRMWARE(BCM4354_FIRMWARE_NAME);
--MODULE_FIRMWARE(BCM4354_NVRAM_NAME);
--
--struct brcmf_firmware_names {
-- u32 chipid;
-- u32 revmsk;
-- const char *bin;
-- const char *nv;
-+BRCMF_FW_NVRAM_DEF(43143, "brcmfmac43143-sdio.bin", "brcmfmac43143-sdio.txt");
-+BRCMF_FW_NVRAM_DEF(43241B0, "brcmfmac43241b0-sdio.bin",
-+ "brcmfmac43241b0-sdio.txt");
-+BRCMF_FW_NVRAM_DEF(43241B4, "brcmfmac43241b4-sdio.bin",
-+ "brcmfmac43241b4-sdio.txt");
-+BRCMF_FW_NVRAM_DEF(43241B5, "brcmfmac43241b5-sdio.bin",
-+ "brcmfmac43241b5-sdio.txt");
-+BRCMF_FW_NVRAM_DEF(4329, "brcmfmac4329-sdio.bin", "brcmfmac4329-sdio.txt");
-+BRCMF_FW_NVRAM_DEF(4330, "brcmfmac4330-sdio.bin", "brcmfmac4330-sdio.txt");
-+BRCMF_FW_NVRAM_DEF(4334, "brcmfmac4334-sdio.bin", "brcmfmac4334-sdio.txt");
-+BRCMF_FW_NVRAM_DEF(43340, "brcmfmac43340-sdio.bin", "brcmfmac43340-sdio.txt");
-+BRCMF_FW_NVRAM_DEF(4335, "brcmfmac4335-sdio.bin", "brcmfmac4335-sdio.txt");
-+BRCMF_FW_NVRAM_DEF(43362, "brcmfmac43362-sdio.bin", "brcmfmac43362-sdio.txt");
-+BRCMF_FW_NVRAM_DEF(4339, "brcmfmac4339-sdio.bin", "brcmfmac4339-sdio.txt");
-+BRCMF_FW_NVRAM_DEF(43430, "brcmfmac43430-sdio.bin", "brcmfmac43430-sdio.txt");
-+BRCMF_FW_NVRAM_DEF(43455, "brcmfmac43455-sdio.bin", "brcmfmac43455-sdio.txt");
-+BRCMF_FW_NVRAM_DEF(4354, "brcmfmac4354-sdio.bin", "brcmfmac4354-sdio.txt");
-+
-+static struct brcmf_firmware_mapping brcmf_sdio_fwnames[] = {
-+ BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43143_CHIP_ID, 0xFFFFFFFF, 43143),
-+ BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43241_CHIP_ID, 0x0000001F, 43241B0),
-+ BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43241_CHIP_ID, 0x00000020, 43241B4),
-+ BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43241_CHIP_ID, 0xFFFFFFC0, 43241B5),
-+ BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4329_CHIP_ID, 0xFFFFFFFF, 4329),
-+ BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4330_CHIP_ID, 0xFFFFFFFF, 4330),
-+ BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4334_CHIP_ID, 0xFFFFFFFF, 4334),
-+ BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43340_CHIP_ID, 0xFFFFFFFF, 43340),
-+ BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4335_CHIP_ID, 0xFFFFFFFF, 4335),
-+ BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43362_CHIP_ID, 0xFFFFFFFE, 43362),
-+ BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4339_CHIP_ID, 0xFFFFFFFF, 4339),
-+ BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43430_CHIP_ID, 0xFFFFFFFF, 43430),
-+ BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4345_CHIP_ID, 0xFFFFFFC0, 43455),
-+ BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4354_CHIP_ID, 0xFFFFFFFF, 4354)
- };
-
--enum brcmf_firmware_type {
-- BRCMF_FIRMWARE_BIN,
-- BRCMF_FIRMWARE_NVRAM
--};
--
--#define BRCMF_FIRMWARE_NVRAM(name) \
-- name ## _FIRMWARE_NAME, name ## _NVRAM_NAME
--
--static const struct brcmf_firmware_names brcmf_fwname_data[] = {
-- { BRCM_CC_43143_CHIP_ID, 0xFFFFFFFF, BRCMF_FIRMWARE_NVRAM(BCM43143) },
-- { BRCM_CC_43241_CHIP_ID, 0x0000001F, BRCMF_FIRMWARE_NVRAM(BCM43241B0) },
-- { BRCM_CC_43241_CHIP_ID, 0x00000020, BRCMF_FIRMWARE_NVRAM(BCM43241B4) },
-- { BRCM_CC_43241_CHIP_ID, 0xFFFFFFC0, BRCMF_FIRMWARE_NVRAM(BCM43241B5) },
-- { BRCM_CC_4329_CHIP_ID, 0xFFFFFFFF, BRCMF_FIRMWARE_NVRAM(BCM4329) },
-- { BRCM_CC_4330_CHIP_ID, 0xFFFFFFFF, BRCMF_FIRMWARE_NVRAM(BCM4330) },
-- { BRCM_CC_4334_CHIP_ID, 0xFFFFFFFF, BRCMF_FIRMWARE_NVRAM(BCM4334) },
-- { BRCM_CC_43340_CHIP_ID, 0xFFFFFFFF, BRCMF_FIRMWARE_NVRAM(BCM43340) },
-- { BRCM_CC_4335_CHIP_ID, 0xFFFFFFFF, BRCMF_FIRMWARE_NVRAM(BCM4335) },
-- { BRCM_CC_43362_CHIP_ID, 0xFFFFFFFE, BRCMF_FIRMWARE_NVRAM(BCM43362) },
-- { BRCM_CC_4339_CHIP_ID, 0xFFFFFFFF, BRCMF_FIRMWARE_NVRAM(BCM4339) },
-- { BRCM_CC_43430_CHIP_ID, 0xFFFFFFFF, BRCMF_FIRMWARE_NVRAM(BCM43430) },
-- { BRCM_CC_4345_CHIP_ID, 0xFFFFFFC0, BRCMF_FIRMWARE_NVRAM(BCM43455) },
-- { BRCM_CC_4354_CHIP_ID, 0xFFFFFFFF, BRCMF_FIRMWARE_NVRAM(BCM4354) }
--};
--
--static int brcmf_sdio_get_fwnames(struct brcmf_chip *ci,
-- struct brcmf_sdio_dev *sdiodev)
--{
-- int i;
-- char end;
--
-- for (i = 0; i < ARRAY_SIZE(brcmf_fwname_data); i++) {
-- if (brcmf_fwname_data[i].chipid == ci->chip &&
-- brcmf_fwname_data[i].revmsk & BIT(ci->chiprev))
-- break;
-- }
--
-- if (i == ARRAY_SIZE(brcmf_fwname_data)) {
-- brcmf_err("Unknown chipid %d [%d]\n", ci->chip, ci->chiprev);
-- return -ENODEV;
-- }
--
-- /* check if firmware path is provided by module parameter */
-- if (brcmf_firmware_path[0] != '\0') {
-- strlcpy(sdiodev->fw_name, brcmf_firmware_path,
-- sizeof(sdiodev->fw_name));
-- strlcpy(sdiodev->nvram_name, brcmf_firmware_path,
-- sizeof(sdiodev->nvram_name));
--
-- end = brcmf_firmware_path[strlen(brcmf_firmware_path) - 1];
-- if (end != '/') {
-- strlcat(sdiodev->fw_name, "/",
-- sizeof(sdiodev->fw_name));
-- strlcat(sdiodev->nvram_name, "/",
-- sizeof(sdiodev->nvram_name));
-- }
-- }
-- strlcat(sdiodev->fw_name, brcmf_fwname_data[i].bin,
-- sizeof(sdiodev->fw_name));
-- strlcat(sdiodev->nvram_name, brcmf_fwname_data[i].nv,
-- sizeof(sdiodev->nvram_name));
--
-- return 0;
--}
--
- static void pkt_align(struct sk_buff *p, int len, int align)
- {
- uint datalign;
-@@ -4252,7 +4157,10 @@ struct brcmf_sdio *brcmf_sdio_probe(stru
- brcmf_sdio_debugfs_create(bus);
- brcmf_dbg(INFO, "completed!!\n");
-
-- ret = brcmf_sdio_get_fwnames(bus->ci, sdiodev);
-+ ret = brcmf_fw_map_chip_to_name(bus->ci->chip, bus->ci->chiprev,
-+ brcmf_sdio_fwnames,
-+ ARRAY_SIZE(brcmf_sdio_fwnames),
-+ sdiodev->fw_name, sdiodev->nvram_name);
- if (ret)
- goto fail;
-
---- a/drivers/net/wireless/brcm80211/brcmfmac/sdio.h
-+++ b/drivers/net/wireless/brcm80211/brcmfmac/sdio.h
-@@ -195,8 +195,8 @@ struct brcmf_sdio_dev {
- uint max_segment_size;
- uint txglomsz;
- struct sg_table sgtable;
-- char fw_name[BRCMF_FW_PATH_LEN + BRCMF_FW_NAME_LEN];
-- char nvram_name[BRCMF_FW_PATH_LEN + BRCMF_FW_NAME_LEN];
-+ char fw_name[BRCMF_FW_NAME_LEN];
-+ char nvram_name[BRCMF_FW_NAME_LEN];
- bool wowl_enabled;
- enum brcmf_sdiod_state state;
- struct brcmf_sdiod_freezer *freezer;
---- a/drivers/net/wireless/brcm80211/brcmfmac/usb.c
-+++ b/drivers/net/wireless/brcm80211/brcmfmac/usb.c
-@@ -43,10 +43,20 @@
- #define BRCMF_USB_CBCTL_READ 1
- #define BRCMF_USB_MAX_PKT_SIZE 1600
-
--#define BRCMF_USB_43143_FW_NAME "brcm/brcmfmac43143.bin"
--#define BRCMF_USB_43236_FW_NAME "brcm/brcmfmac43236b.bin"
--#define BRCMF_USB_43242_FW_NAME "brcm/brcmfmac43242a.bin"
--#define BRCMF_USB_43569_FW_NAME "brcm/brcmfmac43569.bin"
-+BRCMF_FW_DEF(43143, "brcmfmac43143.bin");
-+BRCMF_FW_DEF(43236B, "brcmfmac43236b.bin");
-+BRCMF_FW_DEF(43242A, "brcmfmac43242a.bin");
-+BRCMF_FW_DEF(43569, "brcmfmac43569.bin");
-+
-+static struct brcmf_firmware_mapping brcmf_usb_fwnames[] = {
-+ BRCMF_FW_ENTRY(BRCM_CC_43143_CHIP_ID, 0xFFFFFFFF, 43143),
-+ BRCMF_FW_ENTRY(BRCM_CC_43235_CHIP_ID, 0x00000008, 43236B),
-+ BRCMF_FW_ENTRY(BRCM_CC_43236_CHIP_ID, 0x00000008, 43236B),
-+ BRCMF_FW_ENTRY(BRCM_CC_43238_CHIP_ID, 0x00000008, 43236B),
-+ BRCMF_FW_ENTRY(BRCM_CC_43242_CHIP_ID, 0xFFFFFFFF, 43242A),
-+ BRCMF_FW_ENTRY(BRCM_CC_43566_CHIP_ID, 0xFFFFFFFF, 43569),
-+ BRCMF_FW_ENTRY(BRCM_CC_43569_CHIP_ID, 0xFFFFFFFF, 43569)
-+};
-
- #define TRX_MAGIC 0x30524448 /* "HDR0" */
- #define TRX_MAX_OFFSET 3 /* Max number of file offsets */
-@@ -139,6 +149,7 @@ struct brcmf_usbdev_info {
- struct brcmf_usbreq *tx_reqs;
- struct brcmf_usbreq *rx_reqs;
-
-+ char fw_name[BRCMF_FW_NAME_LEN];
- const u8 *image; /* buffer for combine fw and nvram */
- int image_len;
-
-@@ -983,45 +994,15 @@ static int brcmf_usb_dlrun(struct brcmf_
- return 0;
- }
-
--static bool brcmf_usb_chip_support(int chipid, int chiprev)
--{
-- switch(chipid) {
-- case BRCM_CC_43143_CHIP_ID:
-- return true;
-- case BRCM_CC_43235_CHIP_ID:
-- case BRCM_CC_43236_CHIP_ID:
-- case BRCM_CC_43238_CHIP_ID:
-- return (chiprev == 3);
-- case BRCM_CC_43242_CHIP_ID:
-- return true;
-- case BRCM_CC_43566_CHIP_ID:
-- case BRCM_CC_43569_CHIP_ID:
-- return true;
-- default:
-- break;
-- }
-- return false;
--}
--
- static int
- brcmf_usb_fw_download(struct brcmf_usbdev_info *devinfo)
- {
-- int devid, chiprev;
- int err;
-
- brcmf_dbg(USB, "Enter\n");
- if (devinfo == NULL)
- return -ENODEV;
-
-- devid = devinfo->bus_pub.devid;
-- chiprev = devinfo->bus_pub.chiprev;
--
-- if (!brcmf_usb_chip_support(devid, chiprev)) {
-- brcmf_err("unsupported chip %d rev %d\n",
-- devid, chiprev);
-- return -EINVAL;
-- }
--
- if (!devinfo->image) {
- brcmf_err("No firmware!\n");
- return -ENOENT;
-@@ -1071,25 +1052,6 @@ static int check_file(const u8 *headers)
- return -1;
- }
-
--static const char *brcmf_usb_get_fwname(struct brcmf_usbdev_info *devinfo)
--{
-- switch (devinfo->bus_pub.devid) {
-- case BRCM_CC_43143_CHIP_ID:
-- return BRCMF_USB_43143_FW_NAME;
-- case BRCM_CC_43235_CHIP_ID:
-- case BRCM_CC_43236_CHIP_ID:
-- case BRCM_CC_43238_CHIP_ID:
-- return BRCMF_USB_43236_FW_NAME;
-- case BRCM_CC_43242_CHIP_ID:
-- return BRCMF_USB_43242_FW_NAME;
-- case BRCM_CC_43566_CHIP_ID:
-- case BRCM_CC_43569_CHIP_ID:
-- return BRCMF_USB_43569_FW_NAME;
-- default:
-- return NULL;
-- }
--}
--
-
- static
- struct brcmf_usbdev *brcmf_usb_attach(struct brcmf_usbdev_info *devinfo,
-@@ -1274,9 +1236,16 @@ static int brcmf_usb_probe_cb(struct brc
- bus->chip = bus_pub->devid;
- bus->chiprev = bus_pub->chiprev;
-
-+ ret = brcmf_fw_map_chip_to_name(bus_pub->devid, bus_pub->chiprev,
-+ brcmf_usb_fwnames,
-+ ARRAY_SIZE(brcmf_usb_fwnames),
-+ devinfo->fw_name, NULL);
-+ if (ret)
-+ goto fail;
-+
- /* request firmware here */
-- ret = brcmf_fw_get_firmwares(dev, 0, brcmf_usb_get_fwname(devinfo),
-- NULL, brcmf_usb_probe_phase2);
-+ ret = brcmf_fw_get_firmwares(dev, 0, devinfo->fw_name, NULL,
-+ brcmf_usb_probe_phase2);
- if (ret) {
- brcmf_err("firmware request failed: %d\n", ret);
- goto fail;
-@@ -1472,8 +1441,7 @@ static int brcmf_usb_reset_resume(struct
-
- brcmf_dbg(USB, "Enter\n");
-
-- return brcmf_fw_get_firmwares(&usb->dev, 0,
-- brcmf_usb_get_fwname(devinfo), NULL,
-+ return brcmf_fw_get_firmwares(&usb->dev, 0, devinfo->fw_name, NULL,
- brcmf_usb_probe_phase2);
- }
-
-@@ -1491,10 +1459,6 @@ static struct usb_device_id brcmf_usb_de
- };
-
- MODULE_DEVICE_TABLE(usb, brcmf_usb_devid_table);
--MODULE_FIRMWARE(BRCMF_USB_43143_FW_NAME);
--MODULE_FIRMWARE(BRCMF_USB_43236_FW_NAME);
--MODULE_FIRMWARE(BRCMF_USB_43242_FW_NAME);
--MODULE_FIRMWARE(BRCMF_USB_43569_FW_NAME);
-
- static struct usb_driver brcmf_usbdrvr = {
- .name = KBUILD_MODNAME,