brcmfmac: simplify check stripping v2 NVRAM
authorRafał Miłecki <zajec5@gmail.com>
Wed, 20 May 2015 07:34:21 +0000 (09:34 +0200)
committerKalle Valo <kvalo@codeaurora.org>
Thu, 28 May 2015 08:49:07 +0000 (11:49 +0300)
Comparing NVRAM entry with a full filtering string is simpler than
comparing it with a short prefix and then checking random chars at magic
offsets. The cost of snprintf relatively low, we execute it just once.
Tested on BCM43602 with NVRAM hacked to use V2 format.

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/brcm80211/brcmfmac/firmware.c

index 8ff31ffa4a412ecb630baee5898a355df5ffb959..181a0e84858228ced2c74672b1465de2daf359b4 100644 (file)
@@ -25,7 +25,7 @@
 
 #define BRCMF_FW_MAX_NVRAM_SIZE                        64000
 #define BRCMF_FW_NVRAM_DEVPATH_LEN             19      /* devpath0=pcie/1/4/ */
-#define BRCMF_FW_NVRAM_PCIEDEV_LEN             9       /* pcie/1/4/ */
+#define BRCMF_FW_NVRAM_PCIEDEV_LEN             10      /* pcie/1/4/ + \0 */
 
 char brcmf_firmware_path[BRCMF_FW_PATH_LEN];
 module_param_string(firmware_path, brcmf_firmware_path,
@@ -297,6 +297,8 @@ fail:
 static void brcmf_fw_strip_multi_v2(struct nvram_parser *nvp, u16 domain_nr,
                                    u16 bus_nr)
 {
+       char prefix[BRCMF_FW_NVRAM_PCIEDEV_LEN];
+       size_t len;
        u32 i, j;
        u8 *nvram;
 
@@ -308,14 +310,13 @@ static void brcmf_fw_strip_multi_v2(struct nvram_parser *nvp, u16 domain_nr,
         * Valid entries are of type pcie/X/Y/ where X = domain_nr and
         * Y = bus_nr.
         */
+       snprintf(prefix, sizeof(prefix), "pcie/%d/%d/", domain_nr, bus_nr);
+       len = strlen(prefix);
        i = 0;
        j = 0;
-       while (i < nvp->nvram_len - BRCMF_FW_NVRAM_PCIEDEV_LEN) {
-               if ((strncmp(&nvp->nvram[i], "pcie/", 5) == 0) &&
-                   (nvp->nvram[i + 6] == '/') && (nvp->nvram[i + 8] == '/') &&
-                   ((nvp->nvram[i + 5] - '0') == domain_nr) &&
-                   ((nvp->nvram[i + 7] - '0') == bus_nr)) {
-                       i += BRCMF_FW_NVRAM_PCIEDEV_LEN;
+       while (i < nvp->nvram_len - len) {
+               if (strncmp(&nvp->nvram[i], prefix, len) == 0) {
+                       i += len;
                        while (nvp->nvram[i] != 0) {
                                nvram[j] = nvp->nvram[i];
                                i++;