diff options
author | Igor Mitsyanko <igor.mitsyanko.os@quantenna.com> | 2017-10-30 21:04:51 -0400 |
---|---|---|
committer | Kalle Valo <kvalo@codeaurora.org> | 2017-11-09 21:30:56 -0500 |
commit | 5face518d4467868e7a82a321955236b2bb65bdc (patch) | |
tree | 9d9927fd6c93e946f1af7486c2264dcf0dfa9190 | |
parent | 18b7470f92dfbea3e5ef82cab70edfc559d46735 (diff) |
qtnfmac: SCAN results: retreive frame type information from "IE set" TLV
"IE set" TLV carries the same information as
qlink_event_scan_result::frame_type. Convert the event to make use of
TLV and drop frame_type member.
While at it, make qlink_event_scan_result structure alignement-safe.
Signed-off-by: Igor Mitsyanko <igor.mitsyanko.os@quantenna.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
-rw-r--r-- | drivers/net/wireless/quantenna/qtnfmac/event.c | 25 | ||||
-rw-r--r-- | drivers/net/wireless/quantenna/qtnfmac/qlink.h | 11 |
2 files changed, 14 insertions, 22 deletions
diff --git a/drivers/net/wireless/quantenna/qtnfmac/event.c b/drivers/net/wireless/quantenna/qtnfmac/event.c index b67a082eed69..4abc6d9ed560 100644 --- a/drivers/net/wireless/quantenna/qtnfmac/event.c +++ b/drivers/net/wireless/quantenna/qtnfmac/event.c | |||
@@ -252,13 +252,12 @@ qtnf_event_handle_scan_results(struct qtnf_vif *vif, | |||
252 | struct cfg80211_bss *bss; | 252 | struct cfg80211_bss *bss; |
253 | struct ieee80211_channel *channel; | 253 | struct ieee80211_channel *channel; |
254 | struct wiphy *wiphy = priv_to_wiphy(vif->mac); | 254 | struct wiphy *wiphy = priv_to_wiphy(vif->mac); |
255 | enum cfg80211_bss_frame_type frame_type; | 255 | enum cfg80211_bss_frame_type frame_type = CFG80211_BSS_FTYPE_UNKNOWN; |
256 | size_t payload_len; | 256 | size_t payload_len; |
257 | u16 tlv_type; | 257 | u16 tlv_type; |
258 | u16 tlv_value_len; | 258 | u16 tlv_value_len; |
259 | size_t tlv_full_len; | 259 | size_t tlv_full_len; |
260 | const struct qlink_tlv_hdr *tlv; | 260 | const struct qlink_tlv_hdr *tlv; |
261 | |||
262 | const u8 *ies = NULL; | 261 | const u8 *ies = NULL; |
263 | size_t ies_len = 0; | 262 | size_t ies_len = 0; |
264 | 263 | ||
@@ -275,17 +274,6 @@ qtnf_event_handle_scan_results(struct qtnf_vif *vif, | |||
275 | return -EINVAL; | 274 | return -EINVAL; |
276 | } | 275 | } |
277 | 276 | ||
278 | switch (sr->frame_type) { | ||
279 | case QLINK_BSS_FTYPE_BEACON: | ||
280 | frame_type = CFG80211_BSS_FTYPE_BEACON; | ||
281 | break; | ||
282 | case QLINK_BSS_FTYPE_PRESP: | ||
283 | frame_type = CFG80211_BSS_FTYPE_PRESP; | ||
284 | break; | ||
285 | default: | ||
286 | frame_type = CFG80211_BSS_FTYPE_UNKNOWN; | ||
287 | } | ||
288 | |||
289 | payload_len = len - sizeof(*sr); | 277 | payload_len = len - sizeof(*sr); |
290 | tlv = (struct qlink_tlv_hdr *)sr->payload; | 278 | tlv = (struct qlink_tlv_hdr *)sr->payload; |
291 | 279 | ||
@@ -308,6 +296,17 @@ qtnf_event_handle_scan_results(struct qtnf_vif *vif, | |||
308 | ie_len = tlv_value_len - | 296 | ie_len = tlv_value_len - |
309 | (sizeof(*ie_set) - sizeof(ie_set->hdr)); | 297 | (sizeof(*ie_set) - sizeof(ie_set->hdr)); |
310 | 298 | ||
299 | switch (ie_set->type) { | ||
300 | case QLINK_IE_SET_BEACON_IES: | ||
301 | frame_type = CFG80211_BSS_FTYPE_BEACON; | ||
302 | break; | ||
303 | case QLINK_IE_SET_PROBE_RESP_IES: | ||
304 | frame_type = CFG80211_BSS_FTYPE_PRESP; | ||
305 | break; | ||
306 | default: | ||
307 | frame_type = CFG80211_BSS_FTYPE_UNKNOWN; | ||
308 | } | ||
309 | |||
311 | if (ie_len) { | 310 | if (ie_len) { |
312 | ies = ie_set->ie_data; | 311 | ies = ie_set->ie_data; |
313 | ies_len = ie_len; | 312 | ies_len = ie_len; |
diff --git a/drivers/net/wireless/quantenna/qtnfmac/qlink.h b/drivers/net/wireless/quantenna/qtnfmac/qlink.h index f491942eb6d0..81effd21075c 100644 --- a/drivers/net/wireless/quantenna/qtnfmac/qlink.h +++ b/drivers/net/wireless/quantenna/qtnfmac/qlink.h | |||
@@ -881,12 +881,6 @@ struct qlink_event_rxmgmt { | |||
881 | u8 frame_data[0]; | 881 | u8 frame_data[0]; |
882 | } __packed; | 882 | } __packed; |
883 | 883 | ||
884 | enum qlink_frame_type { | ||
885 | QLINK_BSS_FTYPE_UNKNOWN, | ||
886 | QLINK_BSS_FTYPE_BEACON, | ||
887 | QLINK_BSS_FTYPE_PRESP, | ||
888 | }; | ||
889 | |||
890 | /** | 884 | /** |
891 | * struct qlink_event_scan_result - data for QLINK_EVENT_SCAN_RESULTS event | 885 | * struct qlink_event_scan_result - data for QLINK_EVENT_SCAN_RESULTS event |
892 | * | 886 | * |
@@ -896,7 +890,6 @@ enum qlink_frame_type { | |||
896 | * @capab: capabilities field. | 890 | * @capab: capabilities field. |
897 | * @bintval: beacon interval announced by discovered BSS. | 891 | * @bintval: beacon interval announced by discovered BSS. |
898 | * @signal: signal strength. | 892 | * @signal: signal strength. |
899 | * @frame_type: frame type used to get scan result, see &enum qlink_frame_type. | ||
900 | * @bssid: BSSID announced by discovered BSS. | 893 | * @bssid: BSSID announced by discovered BSS. |
901 | * @ssid_len: length of SSID announced by BSS. | 894 | * @ssid_len: length of SSID announced by BSS. |
902 | * @ssid: SSID announced by discovered BSS. | 895 | * @ssid: SSID announced by discovered BSS. |
@@ -909,10 +902,10 @@ struct qlink_event_scan_result { | |||
909 | __le16 capab; | 902 | __le16 capab; |
910 | __le16 bintval; | 903 | __le16 bintval; |
911 | s8 signal; | 904 | s8 signal; |
912 | u8 frame_type; | ||
913 | u8 bssid[ETH_ALEN]; | ||
914 | u8 ssid_len; | 905 | u8 ssid_len; |
915 | u8 ssid[IEEE80211_MAX_SSID_LEN]; | 906 | u8 ssid[IEEE80211_MAX_SSID_LEN]; |
907 | u8 bssid[ETH_ALEN]; | ||
908 | u8 rsvd[2]; | ||
916 | u8 payload[0]; | 909 | u8 payload[0]; |
917 | } __packed; | 910 | } __packed; |
918 | 911 | ||