376-brcmfmac-simplify-check-finding-NVRAM-v1-device-path.patch 1.9 KB

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