diff options
author | Alwin Beukers <alwin@broadcom.com> | 2011-10-12 14:51:28 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-10-14 14:48:19 -0400 |
commit | f8e4b412c9df596557baf36f9d9635fd4f55a2a0 (patch) | |
tree | 50738dc11f1ff895c8383c41ee1fd9667375f952 /drivers/net/wireless | |
parent | b0551fb7e01d76165367ce77ddfcb80009b31427 (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.c | 39 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmutil/utils.c | 30 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/include/brcmu_utils.h | 10 |
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 */ | ||
251 | struct 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 | */ | ||
2166 | static 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 | |||
2154 | static s32 brcmf_update_bss_info(struct brcmf_cfg80211_priv *cfg_priv) | 2189 | static 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) | |||
364 | EXPORT_SYMBOL(brcmu_prpkt); | 364 | EXPORT_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 | */ | ||
372 | struct 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 | } | ||
394 | EXPORT_SYMBOL(brcmu_parse_tlvs); | ||
395 | |||
396 | |||
397 | #if defined(BCMDBG) | 367 | #if defined(BCMDBG) |
398 | int | 368 | int |
399 | brcmu_format_flags(const struct brcmu_bit_desc *bd, u32 flags, char *buf, | 369 | brcmu_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 */ | ||
196 | struct 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, | |||
207 | extern int brcmu_format_hex(char *str, const void *bytes, int len); | 200 | extern int brcmu_format_hex(char *str, const void *bytes, int len); |
208 | #endif | 201 | #endif |
209 | 202 | ||
210 | extern struct brcmu_tlv *brcmu_parse_tlvs(void *buf, int buflen, | ||
211 | uint key); | ||
212 | |||
213 | extern uint brcmu_mkiovar(char *name, char *data, uint datalen, | 203 | extern uint brcmu_mkiovar(char *name, char *data, uint datalen, |
214 | char *buf, uint len); | 204 | char *buf, uint len); |
215 | 205 | ||