aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless
diff options
context:
space:
mode:
authorAlwin Beukers <alwin@broadcom.com>2011-10-12 14:51:28 -0400
committerJohn W. Linville <linville@tuxdriver.com>2011-10-14 14:48:19 -0400
commitf8e4b412c9df596557baf36f9d9635fd4f55a2a0 (patch)
tree50738dc11f1ff895c8383c41ee1fd9667375f952 /drivers/net/wireless
parentb0551fb7e01d76165367ce77ddfcb80009b31427 (diff)
brcm80211: moved function brcmu_parse_tlvs
Moved the brcmu_parse_tlvs function and brcmu_tlv structure into the only file using them. Names were adjusted accordingly. Reported-by: Johannes Berg <johannes@sipsolutions.net> Reviewed-by: Roland Vossen <rvossen@broadcom.com> Reviewed-by: Arend van Spriel <arend@broadcom.com> Signed-off-by: Arend van Spriel <arend@broadcom.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c39
-rw-r--r--drivers/net/wireless/brcm80211/brcmutil/utils.c30
-rw-r--r--drivers/net/wireless/brcm80211/include/brcmu_utils.h10
3 files changed, 37 insertions, 42 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c b/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c
index db9176d2d86..857b3287e04 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c
@@ -247,6 +247,13 @@ static const u32 __wl_cipher_suites[] = {
247 WLAN_CIPHER_SUITE_AES_CMAC, 247 WLAN_CIPHER_SUITE_AES_CMAC,
248}; 248};
249 249
250/* tag_ID/length/value_buffer tuple */
251struct brcmf_tlv {
252 u8 id;
253 u8 len;
254 u8 data[1];
255};
256
250/* Quarter dBm units to mW 257/* Quarter dBm units to mW
251 * Table starts at QDBM_OFFSET, so the first entry is mW for qdBm=153 258 * Table starts at QDBM_OFFSET, so the first entry is mW for qdBm=153
252 * Table is offset so the last entry is largest mW value that fits in 259 * Table is offset so the last entry is largest mW value that fits in
@@ -2151,11 +2158,39 @@ static bool brcmf_is_ibssmode(struct brcmf_cfg80211_priv *cfg_priv)
2151 return cfg_priv->conf->mode == WL_MODE_IBSS; 2158 return cfg_priv->conf->mode == WL_MODE_IBSS;
2152} 2159}
2153 2160
2161/*
2162 * Traverse a string of 1-byte tag/1-byte length/variable-length value
2163 * triples, returning a pointer to the substring whose first element
2164 * matches tag
2165 */
2166static struct brcmf_tlv *brcmf_parse_tlvs(void *buf, int buflen, uint key)
2167{
2168 struct brcmf_tlv *elt;
2169 int totlen;
2170
2171 elt = (struct brcmf_tlv *) buf;
2172 totlen = buflen;
2173
2174 /* find tagged parameter */
2175 while (totlen >= 2) {
2176 int len = elt->len;
2177
2178 /* validate remaining totlen */
2179 if ((elt->id == key) && (totlen >= (len + 2)))
2180 return elt;
2181
2182 elt = (struct brcmf_tlv *) ((u8 *) elt + (len + 2));
2183 totlen -= (len + 2);
2184 }
2185
2186 return NULL;
2187}
2188
2154static s32 brcmf_update_bss_info(struct brcmf_cfg80211_priv *cfg_priv) 2189static s32 brcmf_update_bss_info(struct brcmf_cfg80211_priv *cfg_priv)
2155{ 2190{
2156 struct brcmf_bss_info *bi; 2191 struct brcmf_bss_info *bi;
2157 struct brcmf_ssid *ssid; 2192 struct brcmf_ssid *ssid;
2158 struct brcmu_tlv *tim; 2193 struct brcmf_tlv *tim;
2159 u16 beacon_interval; 2194 u16 beacon_interval;
2160 u8 dtim_period; 2195 u8 dtim_period;
2161 size_t ie_len; 2196 size_t ie_len;
@@ -2185,7 +2220,7 @@ static s32 brcmf_update_bss_info(struct brcmf_cfg80211_priv *cfg_priv)
2185 ie_len = le32_to_cpu(bi->ie_length); 2220 ie_len = le32_to_cpu(bi->ie_length);
2186 beacon_interval = le16_to_cpu(bi->beacon_period); 2221 beacon_interval = le16_to_cpu(bi->beacon_period);
2187 2222
2188 tim = brcmu_parse_tlvs(ie, ie_len, WLAN_EID_TIM); 2223 tim = brcmf_parse_tlvs(ie, ie_len, WLAN_EID_TIM);
2189 if (tim) 2224 if (tim)
2190 dtim_period = tim->data[1]; 2225 dtim_period = tim->data[1];
2191 else { 2226 else {
diff --git a/drivers/net/wireless/brcm80211/brcmutil/utils.c b/drivers/net/wireless/brcm80211/brcmutil/utils.c
index 74eb1e6f060..b612742ad5c 100644
--- a/drivers/net/wireless/brcm80211/brcmutil/utils.c
+++ b/drivers/net/wireless/brcm80211/brcmutil/utils.c
@@ -364,36 +364,6 @@ void brcmu_prpkt(const char *msg, struct sk_buff *p0)
364EXPORT_SYMBOL(brcmu_prpkt); 364EXPORT_SYMBOL(brcmu_prpkt);
365#endif /* defined(BCMDBG) */ 365#endif /* defined(BCMDBG) */
366 366
367/*
368 * Traverse a string of 1-byte tag/1-byte length/variable-length value
369 * triples, returning a pointer to the substring whose first element
370 * matches tag
371 */
372struct brcmu_tlv *brcmu_parse_tlvs(void *buf, int buflen, uint key)
373{
374 struct brcmu_tlv *elt;
375 int totlen;
376
377 elt = (struct brcmu_tlv *) buf;
378 totlen = buflen;
379
380 /* find tagged parameter */
381 while (totlen >= 2) {
382 int len = elt->len;
383
384 /* validate remaining totlen */
385 if ((elt->id == key) && (totlen >= (len + 2)))
386 return elt;
387
388 elt = (struct brcmu_tlv *) ((u8 *) elt + (len + 2));
389 totlen -= (len + 2);
390 }
391
392 return NULL;
393}
394EXPORT_SYMBOL(brcmu_parse_tlvs);
395
396
397#if defined(BCMDBG) 367#if defined(BCMDBG)
398int 368int
399brcmu_format_flags(const struct brcmu_bit_desc *bd, u32 flags, char *buf, 369brcmu_format_flags(const struct brcmu_bit_desc *bd, u32 flags, char *buf,
diff --git a/drivers/net/wireless/brcm80211/include/brcmu_utils.h b/drivers/net/wireless/brcm80211/include/brcmu_utils.h
index e53883c3f44..c19490c138d 100644
--- a/drivers/net/wireless/brcm80211/include/brcmu_utils.h
+++ b/drivers/net/wireless/brcm80211/include/brcmu_utils.h
@@ -192,13 +192,6 @@ struct brcmu_bit_desc {
192 const char *name; 192 const char *name;
193}; 193};
194 194
195/* tag_ID/length/value_buffer tuple */
196struct brcmu_tlv {
197 u8 id;
198 u8 len;
199 u8 data[1];
200};
201
202/* externs */ 195/* externs */
203/* format/print */ 196/* format/print */
204#if defined(BCMDBG) 197#if defined(BCMDBG)
@@ -207,9 +200,6 @@ extern int brcmu_format_flags(const struct brcmu_bit_desc *bd, u32 flags,
207extern int brcmu_format_hex(char *str, const void *bytes, int len); 200extern int brcmu_format_hex(char *str, const void *bytes, int len);
208#endif 201#endif
209 202
210extern struct brcmu_tlv *brcmu_parse_tlvs(void *buf, int buflen,
211 uint key);
212
213extern uint brcmu_mkiovar(char *name, char *data, uint datalen, 203extern uint brcmu_mkiovar(char *name, char *data, uint datalen,
214 char *buf, uint len); 204 char *buf, uint len);
215 205