aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHauke Mehrtens <hauke@hauke-m.de>2013-11-11 21:54:25 +0000
committerHauke Mehrtens <hauke@hauke-m.de>2013-11-11 21:54:25 +0000
commite3a5401fb20a17ea3749dedac2219e8f0ca44a4b (patch)
treebb72b2c973aea04729f73a19f3e26faf45b92bac
parent091e3fde4c2fb8d230c2ff2cf1e61ca4a1d03d3d (diff)
downloadupstream-e3a5401fb20a17ea3749dedac2219e8f0ca44a4b.tar.gz
upstream-e3a5401fb20a17ea3749dedac2219e8f0ca44a4b.tar.bz2
upstream-e3a5401fb20a17ea3749dedac2219e8f0ca44a4b.zip
iwinfo: fix hwmodelist reporting for broadcom wl
Modify the hwmodelist reporting for broadcom devices to include proper reporting of 802.11n support. Signed-off-by: Nathan Hintz <nlhintz@hotmail.com> SVN-Revision: 38745
-rw-r--r--package/network/utils/iwinfo/src/include/iwinfo/api/broadcom.h23
-rw-r--r--package/network/utils/iwinfo/src/iwinfo_wl.c41
2 files changed, 59 insertions, 5 deletions
diff --git a/package/network/utils/iwinfo/src/include/iwinfo/api/broadcom.h b/package/network/utils/iwinfo/src/include/iwinfo/api/broadcom.h
index 50eedd9e49..c7aa33e415 100644
--- a/package/network/utils/iwinfo/src/include/iwinfo/api/broadcom.h
+++ b/package/network/utils/iwinfo/src/include/iwinfo/api/broadcom.h
@@ -26,7 +26,7 @@
#define WLC_IOCTL_MAGIC 0x14e46c77
#define WLC_IOCTL_MAXLEN 8192
-#define WLC_CNTRY_BUF_SZ 4
+#define WLC_CNTRY_BUF_SZ 4
#define WLC_GET_MAGIC 0
#define WLC_GET_RATE 12
@@ -35,18 +35,30 @@
#define WLC_GET_BSSID 23
#define WLC_GET_SSID 25
#define WLC_GET_CHANNEL 29
+#define WLC_GET_PHYTYPE 39
#define WLC_GET_PASSIVE 48
#define WLC_GET_COUNTRY 83
#define WLC_GET_REVINFO 98
-#define WLC_GET_AP 117
+#define WLC_GET_AP 117
#define WLC_GET_RSSI 127
#define WLC_GET_WSEC 133
#define WLC_GET_PHY_NOISE 135
#define WLC_GET_BSS_INFO 136
+#define WLC_GET_BANDLIST 140
#define WLC_GET_ASSOCLIST 159
#define WLC_GET_WPA_AUTH 164
-#define WLC_GET_COUNTRY_LIST 261
-#define WLC_GET_VAR 262
+#define WLC_GET_COUNTRY_LIST 261
+#define WLC_GET_VAR 262
+
+#define WLC_PHY_TYPE_A 0
+#define WLC_PHY_TYPE_B 1
+#define WLC_PHY_TYPE_G 2
+#define WLC_PHY_TYPE_N 4
+#define WLC_PHY_TYPE_LP 5
+
+#define WLC_BAND_5G 1
+#define WLC_BAND_2G 2
+#define WLC_BAND_ALL 3
struct wl_ether_addr {
@@ -117,6 +129,9 @@ typedef struct wlc_rev_info {
uint ucoderev; /* microcode version */
uint bus; /* bus type */
uint chipnum; /* chip number */
+ uint phytype; /* phy type */
+ uint phyrev; /* phy revision */
+ uint anarev; /* anacore rev */
} wlc_rev_info_t;
typedef struct wl_country_list {
diff --git a/package/network/utils/iwinfo/src/iwinfo_wl.c b/package/network/utils/iwinfo/src/iwinfo_wl.c
index 0a1439bb89..f5f0d4be78 100644
--- a/package/network/utils/iwinfo/src/iwinfo_wl.c
+++ b/package/network/utils/iwinfo/src/iwinfo_wl.c
@@ -583,7 +583,46 @@ int wl_get_countrylist(const char *ifname, char *buf, int *len)
int wl_get_hwmodelist(const char *ifname, int *buf)
{
- return wext_get_hwmodelist(ifname, buf);
+ int phytype;
+ uint i, band[WLC_BAND_ALL], bands;
+
+ if (!wl_ioctl(ifname, WLC_GET_PHYTYPE, &phytype, sizeof(phytype)) &&
+ !wl_ioctl(ifname, WLC_GET_BANDLIST, band, sizeof(band)))
+ {
+ switch (phytype)
+ {
+ case WLC_PHY_TYPE_A:
+ *buf = IWINFO_80211_A;
+ break;
+ case WLC_PHY_TYPE_B:
+ *buf = IWINFO_80211_B;
+ break;
+ case WLC_PHY_TYPE_LP:
+ case WLC_PHY_TYPE_G:
+ case WLC_PHY_TYPE_N:
+ bands = 0;
+ for (i = 1; i <= band[0]; i++)
+ {
+ bands |= band[i];
+ }
+ *buf = 0;
+ if (bands & WLC_BAND_5G)
+ *buf |= IWINFO_80211_A;
+ if (bands & WLC_BAND_2G)
+ {
+ *buf |= IWINFO_80211_B;
+ *buf |= IWINFO_80211_G;
+ }
+ if (phytype == WLC_PHY_TYPE_N)
+ *buf |= IWINFO_80211_N;
+ break;
+ default:
+ return -1;
+ break;
+ }
+ return 0;
+ }
+ return -1;
}
int wl_get_mbssid_support(const char *ifname, int *buf)