broadcom-wl: fix band reporting
authorhauke <hauke@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Mon, 11 Nov 2013 21:58:19 +0000 (21:58 +0000)
committerhauke <hauke@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Mon, 11 Nov 2013 21:58:19 +0000 (21:58 +0000)
Modify the band reporting for broadcom devices to correctly report
HW capability.  Currently, 802.11na devices report "bgn"; but should be
reporting "an".

Signed-off-by: Nathan Hintz <nlhintz@hotmail.com>
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@38749 3c298f89-4303-0410-b956-a3cf2f4a3e73

package/kernel/broadcom-wl/patches/014-fix-band-reporting.patch [new file with mode: 0644]

diff --git a/package/kernel/broadcom-wl/patches/014-fix-band-reporting.patch b/package/kernel/broadcom-wl/patches/014-fix-band-reporting.patch
new file mode 100644 (file)
index 0000000..f1305a4
--- /dev/null
@@ -0,0 +1,41 @@
+--- a/driver/wl_iw.c
++++ b/driver/wl_iw.c
+@@ -314,7 +314,7 @@
+ )
+ {
+       int phytype, err;
+-      uint band[3];
++      uint i, band[3], bands;
+       char cap[5];
+       WL_TRACE(("%s: SIOCGIWNAME\n", dev->name));
+@@ -335,16 +335,20 @@
+                       break;
+               case WLC_PHY_TYPE_LP:
+               case WLC_PHY_TYPE_G:
+-                      if (band[0] >= 2)
+-                              strcpy(cap, "abg");
+-                      else
+-                              strcpy(cap, "bg");
+-                      break;
+               case WLC_PHY_TYPE_N:
+-                      if (band[0] >= 2)
+-                              strcpy(cap, "abgn");
+-                      else
+-                              strcpy(cap, "bgn");
++                      bands = 0;
++                      for (i = 1; i <= band[0]; i++) {
++                              bands |= dtoh32(band[i]);
++                      }
++                      strcpy(cap, "");
++                      if (bands & WLC_BAND_5G)
++                              strcat(cap, "a");
++                      if (bands & WLC_BAND_2G)
++                              strcat(cap, "bg");
++                      if (phytype == WLC_PHY_TYPE_N)
++                              strcat(cap, "n");
++                      break;
++              default:
+                       break;
+       }
+ done: