old mode 100644new mode 100755.. | .. |
---|
1 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
---|
2 | | - |
---|
3 | 2 | #if defined(WL_ESCAN) |
---|
4 | 3 | #include <bcmendian.h> |
---|
5 | 4 | #include <linux/if_arp.h> |
---|
.. | .. |
---|
42 | 41 | #define dtohchanspec(i) (i) |
---|
43 | 42 | #define WL_EXTRA_BUF_MAX 2048 |
---|
44 | 43 | |
---|
45 | | -#define wl_escan_get_buf(a) ((wl_scan_results_v109_t *) (a)->escan_buf) |
---|
| 44 | +#define wl_escan_get_buf(a) ((wl_scan_results_t *) (a)->escan_buf) |
---|
46 | 45 | |
---|
47 | 46 | #if defined(WL_WIRELESS_EXT) |
---|
48 | 47 | extern int wl_iw_handle_scanresults_ies(char **event_p, char *end, |
---|
49 | | - struct iw_request_info *info, wl_bss_info_v109_t *bi); |
---|
| 48 | + struct iw_request_info *info, wl_bss_info_t *bi); |
---|
50 | 49 | #define for_each_bss_wext(list, bss, __i) \ |
---|
51 | 50 | for (__i = 0; __i < list->count && __i < IW_MAX_AP; __i++, bss = next_bss(list, bss)) |
---|
52 | 51 | #endif |
---|
.. | .. |
---|
206 | 205 | return wl_chspec_host_to_driver(ioctl_ver, chanspec); |
---|
207 | 206 | } |
---|
208 | 207 | |
---|
209 | | -static inline struct wl_bss_info *next_bss(wl_scan_results_v109_t *list, |
---|
| 208 | +static inline struct wl_bss_info *next_bss(wl_scan_results_t *list, |
---|
210 | 209 | struct wl_bss_info *bss) |
---|
211 | 210 | { |
---|
212 | 211 | return bss = bss ? |
---|
.. | .. |
---|
217 | 216 | #ifndef BSSCACHE |
---|
218 | 217 | static void |
---|
219 | 218 | wl_escan_dump_bss(struct net_device *dev, struct wl_escan_info *escan, |
---|
220 | | - wl_bss_info_v109_t *bi) |
---|
| 219 | + wl_bss_info_t *bi) |
---|
221 | 220 | { |
---|
222 | 221 | int16 rssi; |
---|
223 | 222 | int channel; |
---|
.. | .. |
---|
245 | 244 | static s32 |
---|
246 | 245 | wl_escan_inform_bss(struct net_device *dev, struct wl_escan_info *escan) |
---|
247 | 246 | { |
---|
248 | | - wl_scan_results_v109_t *bss_list; |
---|
| 247 | + wl_scan_results_t *bss_list; |
---|
249 | 248 | #ifndef BSSCACHE |
---|
250 | | - wl_bss_info_v109_t *bi = NULL; /* must be initialized */ |
---|
| 249 | + wl_bss_info_t *bi = NULL; /* must be initialized */ |
---|
251 | 250 | s32 i; |
---|
252 | 251 | #endif |
---|
253 | 252 | s32 err = 0; |
---|
.. | .. |
---|
284 | 283 | wl_reset_bss_cache(&escan->g_bss_cache_ctrl); |
---|
285 | 284 | if (escan->autochannel) |
---|
286 | 285 | wl_ext_get_best_channel(dev, &escan->g_bss_cache_ctrl, |
---|
287 | | - &escan->best_2g_ch, &escan->best_5g_ch, &escan->best_6g_ch); |
---|
| 286 | + escan->ioctl_ver, &escan->best_2g_ch, &escan->best_5g_ch, &escan->best_6g_ch); |
---|
288 | 287 | #else |
---|
289 | 288 | bi = next_bss(bss_list, bi); |
---|
290 | 289 | for_each_bss(bss_list, bi, i) { |
---|
291 | 290 | wl_escan_dump_bss(dev, escan, bi); |
---|
292 | 291 | } |
---|
293 | 292 | if (escan->autochannel) |
---|
294 | | - wl_ext_get_best_channel(dev, bss_list, |
---|
| 293 | + wl_ext_get_best_channel(dev, bss_list, escan->ioctl_ver, |
---|
295 | 294 | &escan->best_2g_ch, &escan->best_5g_ch, &escan->best_6g_ch); |
---|
296 | 295 | #endif |
---|
297 | 296 | |
---|
.. | .. |
---|
299 | 298 | } |
---|
300 | 299 | #endif /* ESCAN_RESULT_PATCH */ |
---|
301 | 300 | |
---|
302 | | -static wl_scan_params_v1_t * |
---|
| 301 | +static wl_scan_params_t * |
---|
303 | 302 | wl_escan_alloc_params(struct net_device *dev, struct wl_escan_info *escan, |
---|
304 | 303 | int channel, int nprobes, int *out_params_size) |
---|
305 | 304 | { |
---|
306 | | - wl_scan_params_v1_t *params; |
---|
| 305 | + wl_scan_params_t *params; |
---|
307 | 306 | int params_size; |
---|
308 | 307 | int num_chans; |
---|
309 | 308 | |
---|
310 | 309 | *out_params_size = 0; |
---|
311 | 310 | |
---|
312 | 311 | /* Our scan params only need space for 1 channel and 0 ssids */ |
---|
313 | | - params_size = WL_SCAN_PARAMS_V1_FIXED_SIZE + 1 * sizeof(uint16); |
---|
314 | | - params = (wl_scan_params_v1_t*) kzalloc(params_size, GFP_KERNEL); |
---|
| 312 | + params_size = WL_SCAN_PARAMS_FIXED_SIZE + 1 * sizeof(uint16); |
---|
| 313 | + params = (wl_scan_params_t*) kzalloc(params_size, GFP_KERNEL); |
---|
315 | 314 | if (params == NULL) { |
---|
316 | 315 | ESCAN_ERROR(dev->name, "mem alloc failed (%d bytes)\n", params_size); |
---|
317 | 316 | return params; |
---|
.. | .. |
---|
344 | 343 | static void |
---|
345 | 344 | wl_escan_abort(struct net_device *dev, struct wl_escan_info *escan) |
---|
346 | 345 | { |
---|
347 | | - wl_scan_params_v1_t *params = NULL; |
---|
| 346 | + wl_scan_params_t *params = NULL; |
---|
348 | 347 | s32 params_size = 0; |
---|
349 | 348 | s32 err = BCME_OK; |
---|
350 | 349 | if (!in_atomic()) { |
---|
.. | .. |
---|
417 | 416 | #ifdef ESCAN_BUF_OVERFLOW_MGMT |
---|
418 | 417 | static void |
---|
419 | 418 | wl_escan_find_removal_candidate(struct wl_escan_info *escan, |
---|
420 | | - wl_bss_info_v109_t *bss, removal_element_t *candidate) |
---|
| 419 | + wl_bss_info_t *bss, removal_element_t *candidate) |
---|
421 | 420 | { |
---|
422 | 421 | int idx; |
---|
423 | 422 | for (idx = 0; idx < BUF_OVERFLOW_MGMT_COUNT; idx++) { |
---|
.. | .. |
---|
436 | 435 | |
---|
437 | 436 | static void |
---|
438 | 437 | wl_escan_remove_lowRSSI_info(struct net_device *dev, struct wl_escan_info *escan, |
---|
439 | | - wl_scan_results_v109_t *list, removal_element_t *candidate, wl_bss_info_v109_t *bi) |
---|
| 438 | + wl_scan_results_t *list, removal_element_t *candidate, wl_bss_info_t *bi) |
---|
440 | 439 | { |
---|
441 | 440 | int idx1, idx2; |
---|
442 | 441 | int total_delete_len = 0; |
---|
443 | 442 | for (idx1 = 0; idx1 < BUF_OVERFLOW_MGMT_COUNT; idx1++) { |
---|
444 | | - int cur_len = WL_SCAN_RESULTS_V109_FIXED_SIZE; |
---|
445 | | - wl_bss_info_v109_t *bss = NULL; |
---|
| 443 | + int cur_len = WL_SCAN_RESULTS_FIXED_SIZE; |
---|
| 444 | + wl_bss_info_t *bss = NULL; |
---|
446 | 445 | if (candidate[idx1].RSSI >= bi->RSSI) |
---|
447 | 446 | continue; |
---|
448 | 447 | for (idx2 = 0; idx2 < list->count; idx2++) { |
---|
449 | | - bss = bss ? (wl_bss_info_v109_t *)((uintptr)bss + dtoh32(bss->length)) : |
---|
| 448 | + bss = bss ? (wl_bss_info_t *)((uintptr)bss + dtoh32(bss->length)) : |
---|
450 | 449 | list->bss_info; |
---|
451 | 450 | if (!bcmp(&candidate[idx1].BSSID, &bss->BSSID, ETHER_ADDR_LEN) && |
---|
452 | 451 | candidate[idx1].RSSI == bss->RSSI && |
---|
.. | .. |
---|
479 | 478 | { |
---|
480 | 479 | struct wl_escan_info *escan = (struct wl_escan_info *)argu; |
---|
481 | 480 | s32 status = ntoh32(e->status); |
---|
482 | | - wl_bss_info_v109_t *bi; |
---|
483 | | - wl_escan_result_v109_t *escan_result; |
---|
484 | | - wl_bss_info_v109_t *bss = NULL; |
---|
485 | | - wl_scan_results_v109_t *list; |
---|
| 481 | + wl_bss_info_t *bi; |
---|
| 482 | + wl_escan_result_t *escan_result; |
---|
| 483 | + wl_bss_info_t *bss = NULL; |
---|
| 484 | + wl_scan_results_t *list; |
---|
486 | 485 | u32 bi_length; |
---|
487 | 486 | u32 i; |
---|
488 | 487 | u16 channel; |
---|
489 | 488 | |
---|
490 | 489 | mutex_lock(&escan->usr_sync); |
---|
491 | | - escan_result = (wl_escan_result_v109_t *)data; |
---|
| 490 | + escan_result = (wl_escan_result_t *)data; |
---|
492 | 491 | |
---|
493 | 492 | if (escan->escan_state != ESCAN_STATE_SCANING) { |
---|
494 | 493 | ESCAN_DBG(dev->name, "Not my scan\n"); |
---|
.. | .. |
---|
515 | 514 | goto exit; |
---|
516 | 515 | } |
---|
517 | 516 | bi_length = dtoh32(bi->length); |
---|
518 | | - if (bi_length != (dtoh32(escan_result->buflen) - WL_ESCAN_RESULTS_V109_FIXED_SIZE)) { |
---|
| 517 | + if (bi_length != (dtoh32(escan_result->buflen) - WL_ESCAN_RESULTS_FIXED_SIZE)) { |
---|
519 | 518 | ESCAN_ERROR(dev->name, "Invalid bss_info length %d: ignoring\n", |
---|
520 | 519 | bi_length); |
---|
521 | 520 | goto exit; |
---|
.. | .. |
---|
530 | 529 | /* ----- terence 20130524: skip invalid bss */ |
---|
531 | 530 | |
---|
532 | 531 | { |
---|
533 | | - int cur_len = WL_SCAN_RESULTS_V109_FIXED_SIZE; |
---|
| 532 | + int cur_len = WL_SCAN_RESULTS_FIXED_SIZE; |
---|
534 | 533 | #ifdef ESCAN_BUF_OVERFLOW_MGMT |
---|
535 | 534 | removal_element_t candidate[BUF_OVERFLOW_MGMT_COUNT]; |
---|
536 | 535 | int remove_lower_rssi = FALSE; |
---|
.. | .. |
---|
547 | 546 | ESCAN_DBG(dev->name, "%s(%pM) RSSI %d flags 0x%x length %d\n", |
---|
548 | 547 | bi->SSID, &bi->BSSID, bi->RSSI, bi->flags, bi->length); |
---|
549 | 548 | for (i = 0; i < list->count; i++) { |
---|
550 | | - bss = bss ? (wl_bss_info_v109_t *)((uintptr)bss + dtoh32(bss->length)) |
---|
| 549 | + bss = bss ? (wl_bss_info_t *)((uintptr)bss + dtoh32(bss->length)) |
---|
551 | 550 | : list->bss_info; |
---|
552 | 551 | #ifdef ESCAN_BUF_OVERFLOW_MGMT |
---|
553 | 552 | ESCAN_DBG(dev->name, |
---|
.. | .. |
---|
691 | 690 | wl_uint32_list_t *list, void *scan_params, wl_scan_info_t *scan_info) |
---|
692 | 691 | { |
---|
693 | 692 | int err = 0; |
---|
694 | | - wl_scan_results_v109_t *results; |
---|
| 693 | + wl_scan_results_t *results; |
---|
695 | 694 | char *ptr; |
---|
696 | 695 | int i = 0, j = 0; |
---|
697 | 696 | wlc_ssid_t ssid_tmp; |
---|
698 | 697 | u32 n_channels = 0; |
---|
699 | 698 | chanspec_t chanspec; |
---|
700 | 699 | u32 n_ssids = 0; |
---|
701 | | - wl_scan_params_v1_t *params = NULL; |
---|
| 700 | + wl_scan_params_t *params = NULL; |
---|
702 | 701 | wl_scan_params_v2_t *params_v2 = NULL; |
---|
| 702 | + u32 scan_param_size = 0; |
---|
703 | 703 | u32 channel_offset = 0; |
---|
704 | 704 | u32 cur_offset; |
---|
705 | 705 | uint16 *chan_list = NULL; |
---|
.. | .. |
---|
707 | 707 | results = wl_escan_get_buf(escan); |
---|
708 | 708 | results->version = 0; |
---|
709 | 709 | results->count = 0; |
---|
710 | | - results->buflen = WL_SCAN_RESULTS_V109_FIXED_SIZE; |
---|
| 710 | + results->buflen = WL_SCAN_RESULTS_FIXED_SIZE; |
---|
711 | 711 | escan->escan_state = ESCAN_STATE_SCANING; |
---|
712 | 712 | |
---|
713 | 713 | /* Arm scan timeout timer */ |
---|
.. | .. |
---|
715 | 715 | |
---|
716 | 716 | if (escan->scan_params_v2) { |
---|
717 | 717 | params_v2 = (wl_scan_params_v2_t *)scan_params; |
---|
| 718 | + scan_param_size = sizeof(wl_scan_params_v2_t); |
---|
718 | 719 | channel_offset = offsetof(wl_scan_params_v2_t, channel_list); |
---|
719 | 720 | } else { |
---|
720 | | - params = (wl_scan_params_v1_t *)scan_params; |
---|
721 | | - channel_offset = offsetof(wl_scan_params_v1_t, channel_list); |
---|
| 721 | + params = (wl_scan_params_t *)scan_params; |
---|
| 722 | + scan_param_size = sizeof(wl_scan_params_t); |
---|
| 723 | + channel_offset = offsetof(wl_scan_params_t, channel_list); |
---|
722 | 724 | } |
---|
723 | 725 | |
---|
724 | 726 | if (params_v2) { |
---|
.. | .. |
---|
841 | 843 | { |
---|
842 | 844 | wl_event_msg_t msg; |
---|
843 | 845 | struct wl_escan_info *escan = (struct wl_escan_info *)data; |
---|
844 | | - wl_scan_results_v109_t *bss_list; |
---|
| 846 | + wl_scan_results_t *bss_list; |
---|
845 | 847 | struct wl_bss_info *bi = NULL; |
---|
846 | 848 | s32 i; |
---|
847 | 849 | u32 channel; |
---|
.. | .. |
---|
881 | 883 | struct dhd_pub *dhdp = dhd_get_pub(dev); |
---|
882 | 884 | struct wl_escan_info *escan = dhdp->escan; |
---|
883 | 885 | s32 err = BCME_OK; |
---|
884 | | - wl_escan_params_v1_t *eparams = NULL; |
---|
| 886 | + wl_escan_params_t *eparams = NULL; |
---|
885 | 887 | wl_escan_params_v2_t *eparams_v2 = NULL; |
---|
886 | | - u8 *scan_params = NULL, *params = NULL; |
---|
| 888 | + u8 *scan_params = NULL; |
---|
887 | 889 | s32 params_size; |
---|
| 890 | + wl_escan_params_t *params = NULL; |
---|
888 | 891 | u32 n_channels = 0; |
---|
889 | 892 | wl_uint32_list_t *list; |
---|
890 | 893 | u8 valid_chan_list[sizeof(u32)*(MAX_CTRL_CHANSPECS + 1)]; |
---|
.. | .. |
---|
915 | 918 | params_size = (WL_SCAN_PARAMS_V2_FIXED_SIZE + |
---|
916 | 919 | OFFSETOF(wl_escan_params_v2_t, params)); |
---|
917 | 920 | } else { |
---|
918 | | - params_size = (WL_SCAN_PARAMS_V1_FIXED_SIZE + |
---|
919 | | - OFFSETOF(wl_escan_params_v1_t, params)); |
---|
| 921 | + params_size = (WL_SCAN_PARAMS_FIXED_SIZE + |
---|
| 922 | + OFFSETOF(wl_escan_params_t, params)); |
---|
920 | 923 | } |
---|
921 | 924 | |
---|
922 | 925 | /* if scan request is not empty parse scan request paramters */ |
---|
.. | .. |
---|
934 | 937 | } |
---|
935 | 938 | |
---|
936 | 939 | n_channels = list->count; |
---|
937 | | - /* Allocate space for populating ssids in wl_escan_params_v1_t struct */ |
---|
| 940 | + /* Allocate space for populating ssids in wl_escan_params_t struct */ |
---|
938 | 941 | if (list->count % 2) |
---|
939 | 942 | /* If n_channels is odd, add a padd of u16 */ |
---|
940 | 943 | params_size += sizeof(u16) * (n_channels + 1); |
---|
.. | .. |
---|
944 | 947 | params_size += sizeof(struct wlc_ssid) * 2; |
---|
945 | 948 | } |
---|
946 | 949 | |
---|
947 | | - params = kzalloc(params_size, GFP_KERNEL); |
---|
| 950 | + params = (wl_escan_params_t *) kzalloc(params_size, GFP_KERNEL); |
---|
948 | 951 | if (params == NULL) { |
---|
949 | 952 | ESCAN_ERROR(dev->name, "kzalloc failed\n"); |
---|
950 | 953 | err = -ENOMEM; |
---|
.. | .. |
---|
956 | 959 | scan_params = (u8 *)&eparams_v2->params; |
---|
957 | 960 | eparams_v2->version = htod32(ESCAN_REQ_VERSION_V2); |
---|
958 | 961 | eparams_v2->action = htod16(WL_SCAN_ACTION_START); |
---|
959 | | - wl_escan_set_sync_id(eparams_v2->sync_id); |
---|
960 | 962 | } else { |
---|
961 | | - eparams = (wl_escan_params_v1_t *)params; |
---|
| 963 | + eparams = (wl_escan_params_t *)params; |
---|
962 | 964 | scan_params = (u8 *)&eparams->params; |
---|
963 | | - eparams->version = htod32(ESCAN_REQ_VERSION_V1); |
---|
| 965 | + eparams->version = htod32(ESCAN_REQ_VERSION); |
---|
964 | 966 | eparams->action = htod16(WL_SCAN_ACTION_START); |
---|
965 | | - wl_escan_set_sync_id(eparams->sync_id); |
---|
966 | 967 | } |
---|
| 968 | + wl_escan_set_sync_id(params->sync_id); |
---|
967 | 969 | |
---|
968 | 970 | wl_escan_prep(dev, escan, list, scan_params, scan_info); |
---|
969 | 971 | |
---|
.. | .. |
---|
1012 | 1014 | |
---|
1013 | 1015 | static int |
---|
1014 | 1016 | wl_escan_merge_scan_results(struct net_device *dev, struct wl_escan_info *escan, |
---|
1015 | | - struct iw_request_info *info, char *extra, wl_bss_info_v109_t *bi, int *len, int max_size) |
---|
| 1017 | + struct iw_request_info *info, char *extra, wl_bss_info_t *bi, int *len, int max_size) |
---|
1016 | 1018 | { |
---|
1017 | 1019 | s32 err = BCME_OK; |
---|
1018 | 1020 | struct iw_event iwe; |
---|
.. | .. |
---|
1135 | 1137 | s32 err = BCME_OK; |
---|
1136 | 1138 | int i = 0, cnt = 0; |
---|
1137 | 1139 | int len_prep = 0; |
---|
1138 | | - wl_bss_info_v109_t *bi = NULL; |
---|
1139 | | - wl_scan_results_v109_t *bss_list; |
---|
| 1140 | + wl_bss_info_t *bi = NULL; |
---|
| 1141 | + wl_scan_results_t *bss_list; |
---|
1140 | 1142 | __u16 buflen_from_user = dwrq->length; |
---|
1141 | 1143 | |
---|
1142 | 1144 | bss_list = escan->bss_list; |
---|
.. | .. |
---|
1172 | 1174 | s32 err = BCME_OK; |
---|
1173 | 1175 | int i = 0, cnt = 0; |
---|
1174 | 1176 | int len_prep = 0; |
---|
1175 | | - wl_bss_info_v109_t *bi = NULL; |
---|
1176 | | - wl_scan_results_v109_t *bss_list; |
---|
| 1177 | + wl_bss_info_t *bi = NULL; |
---|
| 1178 | + wl_scan_results_t *bss_list; |
---|
1177 | 1179 | __u16 buflen_from_user = dwrq->length; |
---|
1178 | 1180 | wl_bss_cache_t *node; |
---|
1179 | 1181 | |
---|
.. | .. |
---|
1217 | 1219 | int cache_cnt = 0; |
---|
1218 | 1220 | #endif |
---|
1219 | 1221 | int len_prep = 0, len_ret = 0; |
---|
1220 | | - wl_bss_info_v109_t *bi = NULL; |
---|
| 1222 | + wl_bss_info_t *bi = NULL; |
---|
1221 | 1223 | __u16 buflen_from_user = dwrq->length; |
---|
1222 | 1224 | char *buf = NULL; |
---|
1223 | 1225 | struct ether_addr cur_bssid; |
---|
.. | .. |
---|
1374 | 1376 | struct ether_addr *peer_bssid, struct wl_mesh_params *mesh_info) |
---|
1375 | 1377 | { |
---|
1376 | 1378 | int i = 0; |
---|
1377 | | - wl_bss_info_v109_t *bi = NULL; |
---|
1378 | | - wl_scan_results_v109_t *bss_list; |
---|
| 1379 | + wl_bss_info_t *bi = NULL; |
---|
| 1380 | + wl_scan_results_t *bss_list; |
---|
1379 | 1381 | int16 bi_rssi, bi_chan; |
---|
1380 | 1382 | wlc_ssid_t bi_meshid; |
---|
1381 | 1383 | bool is_mesh_peer = FALSE, found = FALSE; |
---|
.. | .. |
---|
1446 | 1448 | struct wl_mesh_params *mesh_info) |
---|
1447 | 1449 | { |
---|
1448 | 1450 | int i = 0; |
---|
1449 | | - wl_bss_info_v109_t *bi = NULL; |
---|
1450 | | - wl_scan_results_v109_t *bss_list; |
---|
| 1451 | + wl_bss_info_t *bi = NULL; |
---|
| 1452 | + wl_scan_results_t *bss_list; |
---|
1451 | 1453 | int16 bi_rssi, bi_chan, max_rssi = -100; |
---|
1452 | 1454 | uint min_hop_cnt = 255; |
---|
1453 | 1455 | wlc_ssid_t bi_meshid; |
---|