123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <[email protected]>
- Date: Wed, 20 May 2015 11:01:08 +0200
- Subject: [PATCH] brcmfmac: simplify check finding NVRAM v1 device path
- MIME-Version: 1.0
- Content-Type: text/plain; charset=UTF-8
- Content-Transfer-Encoding: 8bit
- With a simple use of snprintf and small buffer we can compare NVRAM
- entry value with a full string. This way we avoid checking random chars
- at magic offsets.
- Tested on BCM43602 with NVRAM hacked to use v1 format.
- Signed-off-by: Rafał Miłecki <[email protected]>
- Signed-off-by: Kalle Valo <[email protected]>
- ---
- --- a/drivers/net/wireless/brcm80211/brcmfmac/firmware.c
- +++ b/drivers/net/wireless/brcm80211/brcmfmac/firmware.c
- @@ -222,6 +222,10 @@ static int brcmf_init_nvram_parser(struc
- static void brcmf_fw_strip_multi_v1(struct nvram_parser *nvp, u16 domain_nr,
- u16 bus_nr)
- {
- + /* Device path with a leading '=' key-value separator */
- + char pcie_path[] = "=pcie/?/?";
- + size_t pcie_len;
- +
- u32 i, j;
- bool found;
- u8 *nvram;
- @@ -238,6 +242,9 @@ static void brcmf_fw_strip_multi_v1(stru
- /* First search for the devpathX and see if it is the configuration
- * for domain_nr/bus_nr. Search complete nvp
- */
- + snprintf(pcie_path, sizeof(pcie_path), "=pcie/%d/%d", domain_nr,
- + bus_nr);
- + pcie_len = strlen(pcie_path);
- found = false;
- i = 0;
- while (i < nvp->nvram_len - BRCMF_FW_NVRAM_DEVPATH_LEN) {
- @@ -245,13 +252,10 @@ static void brcmf_fw_strip_multi_v1(stru
- * Y = domain_nr, Z = bus_nr, X = virtual ID
- */
- if ((strncmp(&nvp->nvram[i], "devpath", 7) == 0) &&
- - (strncmp(&nvp->nvram[i + 8], "=pcie/", 6) == 0)) {
- - if (((nvp->nvram[i + 14] - '0') == domain_nr) &&
- - ((nvp->nvram[i + 16] - '0') == bus_nr)) {
- - id = nvp->nvram[i + 7] - '0';
- - found = true;
- - break;
- - }
- + (strncmp(&nvp->nvram[i + 8], pcie_path, pcie_len) == 0)) {
- + id = nvp->nvram[i + 7] - '0';
- + found = true;
- + break;
- }
- while (nvp->nvram[i] != 0)
- i++;
|