Lines Matching full:cfg

130 void wl_cfg80211_cancel_p2plo(struct bcm_cfg80211 *cfg);
132 static void _wl_notify_scan_done(struct bcm_cfg80211 *cfg, bool aborted);
133 static s32 wl_notify_escan_complete(struct bcm_cfg80211 *cfg,
135 void wl_cfgscan_scan_abort(struct bcm_cfg80211 *cfg);
136 static void _wl_cfgscan_cancel_scan(struct bcm_cfg80211 *cfg);
139 void reset_roam_cache(struct bcm_cfg80211 *cfg);
140 void add_roam_cache(struct bcm_cfg80211 *cfg, wl_bss_info_t *bi);
141 int get_roam_channel_list(struct bcm_cfg80211 *cfg, chanspec_t target_chan, chanspec_t *channels,
147 void print_roam_cache(struct bcm_cfg80211 *cfg);
154 wl_escan_get_buf(struct bcm_cfg80211 *cfg, bool aborted) in wl_escan_get_buf() argument
158 if (cfg->escan_info.escan_type[0] == cfg->escan_info.escan_type[1]) { in wl_escan_get_buf()
159 index = (cfg->escan_info.cur_sync_id + 1)%SCAN_BUF_CNT; in wl_escan_get_buf()
161 index = (cfg->escan_info.cur_sync_id)%SCAN_BUF_CNT; in wl_escan_get_buf()
164 index = (cfg->escan_info.cur_sync_id)%SCAN_BUF_CNT; in wl_escan_get_buf()
167 return (wl_scan_results_t *)cfg->escan_info.escan_buf[index]; in wl_escan_get_buf()
170 wl_escan_check_sync_id(struct bcm_cfg80211 *cfg, s32 status, u16 result_id, u16 wl_id) in wl_escan_check_sync_id() argument
177 if (cfg->escan_info.prev_escan_aborted == FALSE) { in wl_escan_check_sync_id()
178 wl_cfg80211_handle_hang_event(bcmcfg_to_prmry_ndev(cfg), in wl_escan_check_sync_id()
199 static void wl_rst_ie(struct bcm_cfg80211 *cfg) in wl_rst_ie() argument
201 struct wl_ie *ie = wl_to_ie(cfg); in wl_rst_ie()
272 static s32 wl_mrg_ie(struct bcm_cfg80211 *cfg, u8 *ie_stream, u16 ie_size) in wl_mrg_ie() argument
274 struct wl_ie *ie = wl_to_ie(cfg); in wl_mrg_ie()
287 static s32 wl_cp_ie(struct bcm_cfg80211 *cfg, u8 *dst, u16 dst_size) in wl_cp_ie() argument
289 struct wl_ie *ie = wl_to_ie(cfg); in wl_cp_ie()
301 static u32 wl_get_ielen(struct bcm_cfg80211 *cfg) in wl_get_ielen() argument
303 struct wl_ie *ie = wl_to_ie(cfg); in wl_get_ielen()
308 s32 wl_inform_single_bss(struct bcm_cfg80211 *cfg, wl_bss_info_t *bi, bool update_ssid) in wl_inform_single_bss() argument
310 struct wiphy *wiphy = bcmcfg_to_wiphy(cfg); in wl_inform_single_bss()
314 struct wl_scan_req *sr = wl_to_sr(cfg); in wl_inform_single_bss()
317 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wl_inform_single_bss()
341 notif_bss_info = (struct wl_cfg80211_bss_info *)MALLOCZ(cfg->osh, in wl_inform_single_bss()
354 MFREE(cfg->osh, notif_bss_info, sizeof(*notif_bss_info) in wl_inform_single_bss()
365 notif_bss_info->rssi = wl_get_avg_rssi(&cfg->g_rssi_cache_ctrl, &bi->BSSID); in wl_inform_single_bss()
370 notif_bss_info->rssi = wl_update_rssi_offset(bcmcfg_to_prmry_ndev(cfg), notif_bss_info->rssi); in wl_inform_single_bss()
377 mgmt_type = cfg->active_scan ? in wl_inform_single_bss()
382 beacon_proberesp = cfg->active_scan ? in wl_inform_single_bss()
388 wl_rst_ie(cfg); in wl_inform_single_bss()
390 wl_mrg_ie(cfg, ((u8 *) bi) + bi->ie_offset, bi->ie_length); in wl_inform_single_bss()
391 wl_cp_ie(cfg, beacon_proberesp->variable, WL_BSS_INFO_MAX - in wl_inform_single_bss()
394 u.beacon.variable) + wl_get_ielen(cfg); in wl_inform_single_bss()
398 MFREE(cfg->osh, notif_bss_info, sizeof(*notif_bss_info) in wl_inform_single_bss()
416 MFREE(cfg->osh, notif_bss_info, sizeof(*notif_bss_info) in wl_inform_single_bss()
448 (cfg->sched_scan_req && !cfg->scan_request)) { in wl_inform_single_bss()
490 MFREE(cfg->osh, notif_bss_info, sizeof(*notif_bss_info) in wl_inform_single_bss()
495 struct wireless_dev * wl_get_scan_wdev(struct bcm_cfg80211 *cfg);
497 wl_get_scan_ndev(struct bcm_cfg80211 *cfg) in wl_get_scan_ndev() argument
502 wdev = wl_get_scan_wdev(cfg); in wl_get_scan_ndev()
508 ndev = wdev_to_wlc_ndev(wdev, cfg); in wl_get_scan_ndev()
517 void wl_cfg80211_update_bss_cache(struct bcm_cfg80211 *cfg) in wl_cfg80211_update_bss_cache() argument
520 struct net_device *ndev = wl_get_scan_ndev(cfg); in wl_cfg80211_update_bss_cache()
523 wl_scan_results_t *bss_list = cfg->bss_list; in wl_cfg80211_update_bss_cache()
526 if (p2p_is_on(cfg) && p2p_scan(cfg)) { in wl_cfg80211_update_bss_cache()
528 wl_free_rssi_cache(&cfg->g_rssi_cache_ctrl); in wl_cfg80211_update_bss_cache()
531 wl_free_bss_cache(&cfg->g_bss_cache_ctrl); in wl_cfg80211_update_bss_cache()
537 wl_update_rssi_cache(&cfg->g_rssi_cache_ctrl, bss_list); in wl_cfg80211_update_bss_cache()
539 wl_update_connected_rssi_cache(ndev, &cfg->g_rssi_cache_ctrl, &rssi); in wl_cfg80211_update_bss_cache()
543 wl_update_bss_cache(&cfg->g_bss_cache_ctrl, in wl_cfg80211_update_bss_cache()
545 &cfg->g_rssi_cache_ctrl, in wl_cfg80211_update_bss_cache()
552 wl_delete_dirty_rssi_cache(&cfg->g_rssi_cache_ctrl); in wl_cfg80211_update_bss_cache()
553 wl_reset_rssi_cache(&cfg->g_rssi_cache_ctrl); in wl_cfg80211_update_bss_cache()
556 wl_delete_dirty_bss_cache(&cfg->g_bss_cache_ctrl); in wl_cfg80211_update_bss_cache()
557 wl_reset_bss_cache(&cfg->g_bss_cache_ctrl); in wl_cfg80211_update_bss_cache()
564 s32 wl_inform_bss_cache(struct bcm_cfg80211 *cfg) in wl_inform_bss_cache() argument
566 wl_scan_results_t *bss_list = cfg->bss_list; in wl_inform_bss_cache()
573 bss_list = cfg->bss_list; in wl_inform_bss_cache()
577 err = wl_inform_single_bss(cfg, bi, false); in wl_inform_bss_cache()
584 node = cfg->g_bss_cache_ctrl.m_cache_head; in wl_inform_bss_cache()
585 WL_SCAN(("cached AP count (%d)\n", wl_bss_cache_size(&cfg->g_bss_cache_ctrl))); in wl_inform_bss_cache()
589 err = wl_inform_single_bss(cfg, bi, false); in wl_inform_bss_cache()
600 wl_inform_bss(struct bcm_cfg80211 *cfg) in wl_inform_bss() argument
607 struct net_device *ndev = wl_get_scan_ndev(cfg); in wl_inform_bss()
616 wl_cfg80211_update_bss_cache(cfg); in wl_inform_bss()
620 err = wl_inform_bss_cache(cfg); in wl_inform_bss()
622 bss_list = cfg->bss_list; in wl_inform_bss()
625 reset_roam_cache(cfg); in wl_inform_bss()
631 add_roam_cache(cfg, bi); in wl_inform_bss()
633 err = wl_inform_single_bss(cfg, bi, false); in wl_inform_bss()
641 if (cfg->autochannel && ndev) { in wl_inform_bss()
643 wl_ext_get_best_channel(ndev, &cfg->g_bss_cache_ctrl, in wl_inform_bss()
644 &cfg->best_2g_ch, &cfg->best_5g_ch, &cfg->best_6g_ch); in wl_inform_bss()
647 &cfg->best_2g_ch, &cfg->best_5g_ch, &cfg->best_6g_ch); in wl_inform_bss()
654 update_roam_cache(cfg, ioctl_version); in wl_inform_bss()
677 wl_cfg80211_clear_iw_ie(struct bcm_cfg80211 *cfg, struct net_device *ndev, s32 bssidx) in wl_cfg80211_clear_iw_ie() argument
690 cfg->ioctl_buf, WLC_IOCTL_MAXLEN, bssidx, &cfg->ioctl_buf_sync); in wl_cfg80211_clear_iw_ie()
694 wl_cfg80211_add_iw_ie(struct bcm_cfg80211 *cfg, struct net_device *ndev, s32 bssidx, s32 pktflag, in wl_cfg80211_add_iw_ie() argument
727 sizeof(ie_getbufp), getbuf, WLC_IOCTL_SMLEN, bssidx, &cfg->ioctl_buf_sync) in wl_cfg80211_add_iw_ie()
736 if (cfg->wl11u) { in wl_cfg80211_add_iw_ie()
737 if ((err = wl_cfg80211_clear_iw_ie(cfg, ndev, bssidx)) != BCME_OK) { in wl_cfg80211_add_iw_ie()
742 ie_setbuf = (ie_setbuf_t *)MALLOCZ(cfg->osh, buf_len); in wl_cfg80211_add_iw_ie()
762 cfg->ioctl_buf, WLC_IOCTL_MAXLEN, bssidx, &cfg->ioctl_buf_sync)) in wl_cfg80211_add_iw_ie()
765 cfg->wl11u = TRUE; in wl_cfg80211_add_iw_ie()
769 MFREE(cfg->osh, ie_setbuf, buf_len); in wl_cfg80211_add_iw_ie()
777 wl_bcnrecv_result_handler(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev, in wl_bcnrecv_result_handler() argument
795 wiphy = cfg->wdev->wiphy; in wl_bcnrecv_result_handler()
801 bcn_recv = (wl_bcnrecv_result_t *)MALLOCZ(cfg->osh, sizeof(*bcn_recv)); in wl_bcnrecv_result_handler()
821 if ((err = wl_android_bcnrecv_event(cfgdev_to_wlc_ndev(cfgdev, cfg), in wl_bcnrecv_result_handler()
832 MFREE(cfg->osh, bcn_recv, sizeof(*bcn_recv)); in wl_bcnrecv_result_handler()
908 wl_escan_handler(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev, in wl_escan_handler() argument
930 ndev = cfgdev_to_wlc_ndev(cfgdev, cfg); in wl_escan_handler()
932 mutex_lock(&cfg->scan_sync); in wl_escan_handler()
934 if (cfg->loc.in_progress) { in wl_escan_handler()
937 if (delayed_work_pending(&cfg->loc.work)) { in wl_escan_handler()
938 cancel_delayed_work_sync(&cfg->loc.work); in wl_escan_handler()
940 err = wl_cfgscan_notify_listen_complete(cfg); in wl_escan_handler()
948 if (wl_get_p2p_status(cfg, SCANNING)) { in wl_escan_handler()
949 if (wl_get_drv_status_all(cfg, SENDING_ACT_FRM)) in wl_escan_handler()
950 ndev = cfg->afx_hdl->dev; in wl_escan_handler()
952 ndev = cfg->escan_info.ndev; in wl_escan_handler()
961 if (cfg->bcnrecv_info.bcnrecv_state == BEACON_RECV_STARTED) { in wl_escan_handler()
965 err = wl_bcnrecv_result_handler(cfg, cfgdev, bi_info, status); in wl_escan_handler()
968 cfg->bcnrecv_info.bcnrecv_state)); in wl_escan_handler()
973 if (!ndev || (!wl_get_drv_status(cfg, SCANNING, ndev) && !cfg->sched_scan_running)) { in wl_escan_handler()
976 wl_get_drv_status(cfg, SCANNING, ndev), in wl_escan_handler()
982 if (wl_escan_check_sync_id(cfg, status, escan_result->sync_id, in wl_escan_handler()
983 cfg->escan_info.cur_sync_id) < 0) { in wl_escan_handler()
989 DBG_EVENT_LOG((dhd_pub_t *)cfg->pub, WIFI_EVENT_DRIVER_SCAN_RESULT_FOUND); in wl_escan_handler()
1014 band = bcmcfg_to_wiphy(cfg)->bands[IEEE80211_BAND_2GHZ]; in wl_escan_handler()
1016 band = bcmcfg_to_wiphy(cfg)->bands[IEEE80211_BAND_5GHZ]; in wl_escan_handler()
1021 if (!dhd_conf_match_channel(cfg->pub, channel)) in wl_escan_handler()
1025 if (!(bcmcfg_to_wiphy(cfg)->interface_modes & BIT(NL80211_IFTYPE_ADHOC))) { in wl_escan_handler()
1032 if (wl_get_drv_status_all(cfg, FINDING_COMMON_CHANNEL)) { in wl_escan_handler()
1035 cfg->afx_hdl->tx_dst_addr.octet, ETHER_ADDR_LEN)) { in wl_escan_handler()
1044 MAC2STRDBG(cfg->afx_hdl->tx_dst_addr.octet), in wl_escan_handler()
1047 wl_clr_p2p_status(cfg, SCANNING); in wl_escan_handler()
1048 cfg->afx_hdl->peer_chan = channel; in wl_escan_handler()
1049 complete(&cfg->act_frm_scan); in wl_escan_handler()
1062 list = wl_escan_get_buf(cfg, FALSE); in wl_escan_handler()
1063 if (scan_req_match(cfg)) { in wl_escan_handler()
1069 if ((cfg->p2p->search_state != WL_P2P_DISC_ST_SCAN) && in wl_escan_handler()
1084 (cfg->curr_band == WLC_BAND_6G) || in wl_escan_handler()
1086 (cfg->curr_band == WLC_BAND_5G)) && in wl_escan_handler()
1236 if (wl_cfgp2p_is_p2p_specific_scan(cfg->scan_request)) { in wl_escan_handler()
1238 wl_cfgscan_scan_abort(cfg); in wl_escan_handler()
1239 wl_notify_escan_complete(cfg, cfg->escan_info.ndev, false); in wl_escan_handler()
1245 cfg->escan_info.escan_state = WL_ESCAN_STATE_IDLE; in wl_escan_handler()
1247 cfg->escan_info.prev_escan_aborted = FALSE; in wl_escan_handler()
1249 if (wl_get_drv_status_all(cfg, FINDING_COMMON_CHANNEL)) { in wl_escan_handler()
1251 wl_clr_p2p_status(cfg, SCANNING); in wl_escan_handler()
1252 wl_clr_drv_status(cfg, SCANNING, cfg->afx_hdl->dev); in wl_escan_handler()
1253 if (cfg->afx_hdl->peer_chan == WL_INVALID) in wl_escan_handler()
1254 complete(&cfg->act_frm_scan); in wl_escan_handler()
1255 } else if ((likely(cfg->scan_request)) || (cfg->sched_scan_running)) { in wl_escan_handler()
1257 DBG_EVENT_LOG((dhd_pub_t *)cfg->pub, WIFI_EVENT_DRIVER_SCAN_COMPLETE); in wl_escan_handler()
1258 cfg->bss_list = wl_escan_get_buf(cfg, FALSE); in wl_escan_handler()
1259 if (!scan_req_match(cfg)) { in wl_escan_handler()
1261 cfg->bss_list->count)); in wl_escan_handler()
1263 wl_inform_bss(cfg); in wl_escan_handler()
1264 wl_notify_escan_complete(cfg, ndev, false); in wl_escan_handler()
1266 wl_escan_increment_sync_id(cfg, SCAN_BUF_NEXT); in wl_escan_handler()
1279 cfg->escan_info.escan_state = WL_ESCAN_STATE_IDLE; in wl_escan_handler()
1281 if (wl_get_drv_status_all(cfg, FINDING_COMMON_CHANNEL)) { in wl_escan_handler()
1283 wl_clr_drv_status(cfg, SCANNING, cfg->afx_hdl->dev); in wl_escan_handler()
1284 wl_clr_p2p_status(cfg, SCANNING); in wl_escan_handler()
1285 if (cfg->afx_hdl->peer_chan == WL_INVALID) in wl_escan_handler()
1286 complete(&cfg->act_frm_scan); in wl_escan_handler()
1287 } else if ((likely(cfg->scan_request)) || (cfg->sched_scan_running)) { in wl_escan_handler()
1291 if (p2p_scan(cfg) && cfg->scan_request && in wl_escan_handler()
1292 (cfg->scan_request->flags & NL80211_SCAN_FLAG_FLUSH)) { in wl_escan_handler()
1294 cfg->bss_list = wl_escan_get_buf(cfg, FALSE); in wl_escan_handler()
1297 cfg->bss_list = wl_escan_get_buf(cfg, TRUE); in wl_escan_handler()
1299 if (!scan_req_match(cfg)) { in wl_escan_handler()
1301 cfg->bss_list->count)); in wl_escan_handler()
1304 if (escan_result->sync_id != cfg->escan_info.cur_sync_id) { in wl_escan_handler()
1312 escan_result->sync_id, cfg->escan_info.cur_sync_id)); in wl_escan_handler()
1317 cfg->escan_info.cur_sync_id)); in wl_escan_handler()
1318 wl_inform_bss(cfg); in wl_escan_handler()
1319 wl_notify_escan_complete(cfg, ndev, true); in wl_escan_handler()
1322 wl_inform_bss(cfg); in wl_escan_handler()
1323 wl_notify_escan_complete(cfg, ndev, true); in wl_escan_handler()
1330 wl_escan_increment_sync_id(cfg, SCAN_BUF_CNT); in wl_escan_handler()
1332 WL_ERR(("WLC_E_STATUS_TIMEOUT : scan_request[%p]\n", cfg->scan_request)); in wl_escan_handler()
1336 bss_list = wl_escan_get_buf(cfg, FALSE); in wl_escan_handler()
1348 _wl_cfgscan_cancel_scan(cfg); in wl_escan_handler()
1352 cfg->escan_info.escan_state = WL_ESCAN_STATE_IDLE; in wl_escan_handler()
1353 if (wl_get_drv_status_all(cfg, FINDING_COMMON_CHANNEL)) { in wl_escan_handler()
1355 wl_clr_p2p_status(cfg, SCANNING); in wl_escan_handler()
1356 wl_clr_drv_status(cfg, SCANNING, cfg->afx_hdl->dev); in wl_escan_handler()
1357 if (cfg->afx_hdl->peer_chan == WL_INVALID) in wl_escan_handler()
1358 complete(&cfg->act_frm_scan); in wl_escan_handler()
1359 } else if ((likely(cfg->scan_request)) || (cfg->sched_scan_running)) { in wl_escan_handler()
1360 cfg->bss_list = wl_escan_get_buf(cfg, TRUE); in wl_escan_handler()
1361 if (!scan_req_match(cfg)) { in wl_escan_handler()
1364 cfg->bss_list->count)); in wl_escan_handler()
1366 wl_inform_bss(cfg); in wl_escan_handler()
1367 wl_notify_escan_complete(cfg, ndev, true); in wl_escan_handler()
1370 wl_escan_increment_sync_id(cfg, 2); in wl_escan_handler()
1373 err = wl_escan_without_scan_cache(cfg, escan_result, ndev, e, status); in wl_escan_handler()
1376 mutex_unlock(&cfg->scan_sync); in wl_escan_handler()
1434 static s32 wl_find_listen_channel(struct bcm_cfg80211 *cfg, in wl_find_listen_channel() argument
1497 wl_cfgscan_map_nl80211_scan_type(struct bcm_cfg80211 *cfg, struct cfg80211_scan_request *request) in wl_cfgscan_map_nl80211_scan_type() argument
1577 wl_cfgscan_populate_scan_channel(struct bcm_cfg80211 *cfg, in wl_cfgscan_populate_scan_channel() argument
1606 wl_cfgscan_populate_scan_channels(struct bcm_cfg80211 *cfg, in wl_cfgscan_populate_scan_channels() argument
1624 wdev = GET_SCAN_WDEV(cfg->scan_request); in wl_cfgscan_populate_scan_channels()
1626 (wdev->netdev != bcmcfg_to_prmry_ndev(cfg))) { in wl_cfgscan_populate_scan_channels()
1632 is_p2p_scan = p2p_is_on(cfg) && p2p_scan(cfg); in wl_cfgscan_populate_scan_channels()
1641 if (!dhd_conf_match_channel(cfg->pub, channel)) in wl_cfgscan_populate_scan_channels()
1658 if ((cfg->curr_band == WLC_BAND_5G) || in wl_cfgscan_populate_scan_channels()
1659 (cfg->curr_band == WLC_BAND_6G)) { in wl_cfgscan_populate_scan_channels()
1667 if (cfg->curr_band == WLC_BAND_2G) { in wl_cfgscan_populate_scan_channels()
1676 if (!(cfg->p2p_6g_enabled)) { in wl_cfgscan_populate_scan_channels()
1714 wl_cfgscan_populate_scan_ssids(struct bcm_cfg80211 *cfg, u8 *buf_ptr, u32 buf_len, in wl_cfgscan_populate_scan_ssids() argument
1762 wl_scan_prep(struct bcm_cfg80211 *cfg, struct net_device *ndev, void *scan_params, u32 len, in wl_scan_prep() argument
1783 if (cfg->active_scan == PASSIVE_SCAN) { in wl_scan_prep()
1789 if (cfg->scan_params_v2) { in wl_scan_prep()
1802 scan_type += wl_cfgscan_map_nl80211_scan_type(cfg, request); in wl_scan_prep()
1846 channel = wl_ext_scan_suppress(ndev, scan_params, cfg->scan_params_v2, &chan_info); in wl_scan_prep()
1851 wl_cfgscan_populate_scan_channel(cfg, in wl_scan_prep()
1861 wl_cfgscan_populate_scan_channels(cfg, in wl_scan_prep()
1873 wl_cfgscan_populate_scan_ssids(cfg, in wl_scan_prep()
1905 wl_config_scan_macaddr(struct bcm_cfg80211 *cfg, in wl_config_scan_macaddr() argument
1911 if (!cfg->scanmac_enabled) { in wl_config_scan_macaddr()
1930 if (cfg->scanmac_config) { in wl_config_scan_macaddr()
1936 } else if (!randmac_enable && cfg->scanmac_enabled) { in wl_config_scan_macaddr()
1961 wl_run_escan(struct bcm_cfg80211 *cfg, struct net_device *ndev, in wl_run_escan() argument
1986 if (!cfg || !request) { in wl_run_escan()
1991 if (cfg->scan_params_v2) { in wl_run_escan()
1998 if (!cfg->p2p_supported || !p2p_scan(cfg)) { in wl_run_escan()
2008 if ((err = wl_config_scan_macaddr(cfg, ndev, randmac_enable, in wl_run_escan()
2017 if (ndev == bcmcfg_to_prmry_ndev(cfg) && g_first_broadcast_scan == true) { in wl_run_escan()
2073 params = MALLOCZ(cfg->osh, params_size); in wl_run_escan()
2079 wl_escan_set_sync_id(sync_id, cfg); in wl_run_escan()
2080 if (cfg->scan_params_v2) { in wl_run_escan()
2094 if (wl_scan_prep(cfg, ndev, scan_params, params_size, request) < 0) { in wl_run_escan()
2111 wl_escan_set_type(cfg, WL_SCANTYPE_LEGACY); in wl_run_escan()
2114 MFREE(cfg->osh, params, params_size); in wl_run_escan()
2119 bssidx = wl_get_bssidx_by_wdev(cfg, ndev->ieee80211_ptr); in wl_run_escan()
2122 cfg->escan_ioctl_buf, WLC_IOCTL_MEDLEN, NULL); in wl_run_escan()
2130 DBG_EVENT_LOG((dhd_pub_t *)cfg->pub, WIFI_EVENT_DRIVER_SCAN_REQUESTED); in wl_run_escan()
2132 MFREE(cfg->osh, params, params_size); in wl_run_escan()
2134 else if (p2p_is_on(cfg) && p2p_scan(cfg)) { in wl_run_escan()
2140 default_chan_list = MALLOCZ(cfg->osh, chan_mem); in wl_run_escan()
2147 wl_cfgscan_populate_scan_channels(cfg, in wl_run_escan()
2162 } else if (((dev = wl_to_p2p_bss_ndev(cfg, P2PAPI_BSSCFG_CONNECTION1)) && in wl_run_escan()
2163 (wl_get_mode_by_netdev(cfg, dev) == WL_MODE_AP)) || in wl_run_escan()
2164 ((dev = wl_to_p2p_bss_ndev(cfg, P2PAPI_BSSCFG_CONNECTION2)) && in wl_run_escan()
2165 (wl_get_mode_by_netdev(cfg, dev) == WL_MODE_AP))) { in wl_run_escan()
2187 err = wl_cfgp2p_escan(cfg, ndev, ACTIVE_SCAN, num_chans, default_chan_list, in wl_run_escan()
2189 wl_to_p2p_bss_bssidx(cfg, P2PAPI_BSSCFG_DEVICE), NULL, in wl_run_escan()
2193 cfg->p2p->search_state = search_state; in wl_run_escan()
2195 MFREE(cfg->osh, default_chan_list, chan_mem); in wl_run_escan()
2200 if ((err == BCME_EPERM) && cfg->scan_suppressed) in wl_run_escan()
2209 wl_do_escan(struct bcm_cfg80211 *cfg, struct wiphy *wiphy, struct net_device *ndev, in wl_do_escan() argument
2219 results = wl_escan_get_buf(cfg, FALSE); in wl_do_escan()
2224 cfg->escan_info.ndev = ndev; in wl_do_escan()
2225 cfg->escan_info.wiphy = wiphy; in wl_do_escan()
2226 cfg->escan_info.escan_state = WL_ESCAN_STATE_SCANING; in wl_do_escan()
2227 passive_scan = cfg->active_scan ? 0 : 1; in wl_do_escan()
2258 err = wl_run_escan(cfg, ndev, request, WL_SCAN_ACTION_START); in wl_do_escan()
2277 wl_get_scan_timeout_val(struct bcm_cfg80211 *cfg) in wl_get_scan_timeout_val() argument
2283 if ((cfg->custom_scan_channel_time > DHD_SCAN_ASSOC_ACTIVE_TIME) | in wl_get_scan_timeout_val()
2284 (cfg->custom_scan_unassoc_time > DHD_SCAN_UNASSOC_ACTIVE_TIME) | in wl_get_scan_timeout_val()
2285 (cfg->custom_scan_passive_time > DHD_SCAN_PASSIVE_TIME) | in wl_get_scan_timeout_val()
2286 (cfg->custom_scan_home_time > DHD_SCAN_HOME_TIME) | in wl_get_scan_timeout_val()
2287 (cfg->custom_scan_home_away_time > DHD_SCAN_HOME_AWAY_TIME)) { in wl_get_scan_timeout_val()
2295 if (wl_cfgnan_is_enabled(cfg)) { in wl_get_scan_timeout_val()
2301 if (cfg->band_6g_supported) { in wl_get_scan_timeout_val()
2311 wl_cfgscan_handle_scanbusy(struct bcm_cfg80211 *cfg, struct net_device *ndev, s32 err) in wl_cfgscan_handle_scanbusy() argument
2323 } else if ((err == BCME_EPERM) && cfg->scan_suppressed) { in wl_cfgscan_handle_scanbusy()
2343 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wl_cfgscan_handle_scanbusy()
2351 wl_get_drv_status(cfg, SCANNING, ndev), in wl_cfgscan_handle_scanbusy()
2352 wl_get_drv_status(cfg, SCAN_ABORTING, ndev), in wl_cfgscan_handle_scanbusy()
2353 wl_get_drv_status(cfg, CONNECTING, ndev), in wl_cfgscan_handle_scanbusy()
2354 wl_get_drv_status(cfg, CONNECTED, ndev), in wl_cfgscan_handle_scanbusy()
2355 wl_get_drv_status(cfg, DISCONNECTING, ndev), in wl_cfgscan_handle_scanbusy()
2356 wl_get_drv_status(cfg, AP_CREATING, ndev), in wl_cfgscan_handle_scanbusy()
2357 wl_get_drv_status(cfg, AP_CREATED, ndev), in wl_cfgscan_handle_scanbusy()
2358 wl_get_drv_status(cfg, SENDING_ACT_FRM, ndev), in wl_cfgscan_handle_scanbusy()
2359 wl_get_drv_status(cfg, SENDING_ACT_FRM, ndev))); in wl_cfgscan_handle_scanbusy()
2392 wl_cfgscan_cancel_scan(cfg); in wl_cfgscan_handle_scanbusy()
2414 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in __wl_cfg80211_scan() local
2447 ndev = ndev_to_wlc_ndev(ndev, cfg); in __wl_cfg80211_scan()
2449 if (WL_DRV_STATUS_SENDING_AF_FRM_EXT(cfg)) { in __wl_cfg80211_scan()
2455 mutex_lock(&cfg->scan_sync); in __wl_cfg80211_scan()
2456 if (wl_get_drv_status_all(cfg, SCANNING)) { in __wl_cfg80211_scan()
2457 if (cfg->scan_request == NULL) { in __wl_cfg80211_scan()
2458 wl_clr_drv_status_all(cfg, SCANNING); in __wl_cfg80211_scan()
2462 mutex_unlock(&cfg->scan_sync); in __wl_cfg80211_scan()
2466 if (wl_get_drv_status(cfg, SCAN_ABORTING, ndev)) { in __wl_cfg80211_scan()
2468 mutex_unlock(&cfg->scan_sync); in __wl_cfg80211_scan()
2472 if (cfg->loc.in_progress) { in __wl_cfg80211_scan()
2474 mutex_unlock(&cfg->scan_sync); in __wl_cfg80211_scan()
2477 mutex_unlock(&cfg->scan_sync); in __wl_cfg80211_scan()
2485 mutex_lock(&cfg->scan_sync); in __wl_cfg80211_scan()
2486 remain_on_channel_ndev = wl_cfg80211_get_remain_on_channel_ndev(cfg); in __wl_cfg80211_scan()
2489 _wl_cfgscan_cancel_scan(cfg); in __wl_cfg80211_scan()
2491 mutex_unlock(&cfg->scan_sync); in __wl_cfg80211_scan()
2495 wl_cfg80211_cancel_p2plo(cfg); in __wl_cfg80211_scan()
2499 if (wl_get_p2p_status(cfg, DISC_IN_PROGRESS)) { in __wl_cfg80211_scan()
2500 wl_cfg80211_pause_sdo(ndev, cfg); in __wl_cfg80211_scan()
2523 if (cfg->p2p_supported) { in __wl_cfg80211_scan()
2525 if (p2p_on(cfg) == false) { in __wl_cfg80211_scan()
2527 p2p_on(cfg) = true; in __wl_cfg80211_scan()
2528 wl_cfgp2p_set_firm_p2p(cfg); in __wl_cfg80211_scan()
2530 cfg->p2p_prb_noti = false; in __wl_cfg80211_scan()
2533 wl_clr_p2p_status(cfg, GO_NEG_PHASE); in __wl_cfg80211_scan()
2535 p2p_scan(cfg) = true; in __wl_cfg80211_scan()
2541 if (cfg->p2p_supported) { in __wl_cfg80211_scan()
2542 p2p_scan(cfg) = false; in __wl_cfg80211_scan()
2547 if (p2p_scan(cfg) == false) { in __wl_cfg80211_scan()
2548 if (wl_get_p2p_status(cfg, DISCOVERY_ON)) { in __wl_cfg80211_scan()
2549 err = wl_cfgp2p_discover_enable_search(cfg, in __wl_cfg80211_scan()
2558 if (!cfg->p2p_supported || !p2p_scan(cfg)) { in __wl_cfg80211_scan()
2559 if ((bssidx = wl_get_bssidx_by_wdev(cfg, in __wl_cfg80211_scan()
2569 if ((err = wl_cfg80211_add_iw_ie(cfg, ndev, bssidx, in __wl_cfg80211_scan()
2575 } else if (cfg->wl11u) { in __wl_cfg80211_scan()
2577 wl_cfg80211_clear_iw_ie(cfg, ndev, bssidx); in __wl_cfg80211_scan()
2587 cfg->wl11u = FALSE; in __wl_cfg80211_scan()
2591 err = wl_cfg80211_set_mgmt_vndr_ies(cfg, in __wl_cfg80211_scan()
2610 DHD_OS_SCAN_WAKE_LOCK_TIMEOUT((dhd_pub_t *)(cfg->pub), in __wl_cfg80211_scan()
2611 wl_get_scan_timeout_val(cfg) + SCAN_WAKE_LOCK_MARGIN_MS); in __wl_cfg80211_scan()
2612 DHD_DISABLE_RUNTIME_PM((dhd_pub_t *)(cfg->pub)); in __wl_cfg80211_scan()
2615 if (cfg->p2p_supported) { in __wl_cfg80211_scan()
2616 if (request && p2p_on(cfg) && p2p_scan(cfg)) { in __wl_cfg80211_scan()
2619 if (wl_get_p2p_status(cfg, DISC_IN_PROGRESS)) { in __wl_cfg80211_scan()
2630 cfg->afx_hdl->my_listen_chan = in __wl_cfg80211_scan()
2631 wl_find_listen_channel(cfg, request->ie, in __wl_cfg80211_scan()
2633 err = wl_cfgp2p_enable_discovery(cfg, ndev, in __wl_cfg80211_scan()
2646 mutex_lock(&cfg->scan_sync); in __wl_cfg80211_scan()
2654 mutex_lock(&cfg->scan_sync); in __wl_cfg80211_scan()
2655 err = wl_do_escan(cfg, wiphy, ndev, request); in __wl_cfg80211_scan()
2664 wl_cfgscan_handle_scanbusy(cfg, ndev, BCME_OK); in __wl_cfg80211_scan()
2665 cfg->scan_request = request; in __wl_cfg80211_scan()
2666 LOG_TS(cfg, scan_start); in __wl_cfg80211_scan()
2667 wl_set_drv_status(cfg, SCANNING, ndev); in __wl_cfg80211_scan()
2669 mod_timer(&cfg->scan_timeout, in __wl_cfg80211_scan()
2670 jiffies + msecs_to_jiffies(wl_get_scan_timeout_val(cfg))); in __wl_cfg80211_scan()
2671 mutex_unlock(&cfg->scan_sync); in __wl_cfg80211_scan()
2676 WL_CFG_DRV_LOCK(&cfg->cfgdrv_lock, flags); in __wl_cfg80211_scan()
2677 cfg->scan_request = NULL; in __wl_cfg80211_scan()
2678 WL_CFG_DRV_UNLOCK(&cfg->cfgdrv_lock, flags); in __wl_cfg80211_scan()
2679 mutex_unlock(&cfg->scan_sync); in __wl_cfg80211_scan()
2681 scanbusy_err = wl_cfgscan_handle_scanbusy(cfg, ndev, err); in __wl_cfg80211_scan()
2686 DHD_OS_SCAN_WAKE_UNLOCK((dhd_pub_t *)(cfg->pub)); in __wl_cfg80211_scan()
2687 DHD_ENABLE_RUNTIME_PM((dhd_pub_t *)(cfg->pub)); in __wl_cfg80211_scan()
2696 DHD_OS_SCAN_WAKE_UNLOCK((dhd_pub_t *)(cfg->pub)); in __wl_cfg80211_scan()
2697 DHD_ENABLE_RUNTIME_PM((dhd_pub_t *)(cfg->pub)); in __wl_cfg80211_scan()
2701 if (wl_get_p2p_status(cfg, DISC_IN_PROGRESS)) { in __wl_cfg80211_scan()
2702 wl_cfg80211_resume_sdo(ndev, cfg); in __wl_cfg80211_scan()
2717 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_scan() local
2719 struct net_device *ndev = wdev_to_wlc_ndev(request->wdev, cfg); in wl_cfg80211_scan()
2723 RETURN_EIO_IF_NOT_UP(cfg); in wl_cfg80211_scan()
2733 if (ndev == bcmcfg_to_prmry_ndev(cfg)) { in wl_cfg80211_scan()
2734 if (wl_cfg_multip2p_operational(cfg)) { in wl_cfg80211_scan()
2740 err = wl_ext_in4way_sync(ndev_to_wlc_ndev(ndev, cfg), STA_NO_SCAN_IN4WAY, in wl_cfg80211_scan()
2756 reset_roam_cache(cfg); in wl_cfg80211_scan()
2768 wl_get_scan_wdev(struct bcm_cfg80211 *cfg) in wl_get_scan_wdev() argument
2772 if (!cfg) { in wl_get_scan_wdev()
2773 WL_ERR(("cfg ptr null\n")); in wl_get_scan_wdev()
2777 if (!cfg->scan_request && !cfg->sched_scan_req) { in wl_get_scan_wdev()
2783 if (cfg->scan_request) { in wl_get_scan_wdev()
2784 wdev = GET_SCAN_WDEV(cfg->scan_request); in wl_get_scan_wdev()
2786 } else if (cfg->sched_scan_req) { in wl_get_scan_wdev()
2787 wdev = GET_SCHED_SCAN_WDEV(cfg->sched_scan_req); in wl_get_scan_wdev()
2796 static void _wl_cfgscan_cancel_scan(struct bcm_cfg80211 *cfg) in _wl_cfgscan_cancel_scan() argument
2801 if (!cfg->scan_request && !cfg->sched_scan_req) { in _wl_cfgscan_cancel_scan()
2807 wdev = wl_get_scan_wdev(cfg); in _wl_cfgscan_cancel_scan()
2813 ndev = wdev_to_wlc_ndev(wdev, cfg); in _wl_cfgscan_cancel_scan()
2816 if (wl_get_drv_status_all(cfg, SCANNING)) { in _wl_cfgscan_cancel_scan()
2817 wl_cfgscan_scan_abort(cfg); in _wl_cfgscan_cancel_scan()
2820 wl_notify_escan_complete(cfg, ndev, true); in _wl_cfgscan_cancel_scan()
2826 void wl_cfgscan_cancel_scan(struct bcm_cfg80211 *cfg) in wl_cfgscan_cancel_scan() argument
2828 mutex_lock(&cfg->scan_sync); in wl_cfgscan_cancel_scan()
2829 _wl_cfgscan_cancel_scan(cfg); in wl_cfgscan_cancel_scan()
2830 mutex_unlock(&cfg->scan_sync); in wl_cfgscan_cancel_scan()
2837 void wl_cfgscan_scan_abort(struct bcm_cfg80211 *cfg) in wl_cfgscan_scan_abort() argument
2842 struct net_device *dev = bcmcfg_to_prmry_ndev(cfg); in wl_cfgscan_scan_abort()
2846 if (cfg->scan_params_v2) { in wl_cfgscan_scan_abort()
2852 params = MALLOCZ(cfg->osh, params_size); in wl_cfgscan_scan_abort()
2862 if (cfg->scan_params_v2) { in wl_cfgscan_scan_abort()
2873 cfg->escan_info.prev_escan_aborted = TRUE; in wl_cfgscan_scan_abort()
2881 MFREE(cfg->osh, params, params_size); in wl_cfgscan_scan_abort()
2883 if (cfg->tdls_mgmt_frame) { in wl_cfgscan_scan_abort()
2884 MFREE(cfg->osh, cfg->tdls_mgmt_frame, cfg->tdls_mgmt_frame_len); in wl_cfgscan_scan_abort()
2885 cfg->tdls_mgmt_frame = NULL; in wl_cfgscan_scan_abort()
2886 cfg->tdls_mgmt_frame_len = 0; in wl_cfgscan_scan_abort()
2892 wl_notify_escan_complete(struct bcm_cfg80211 *cfg, in wl_notify_escan_complete() argument
2898 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wl_notify_escan_complete()
2909 if (cfg->escan_info.ndev != ndev) { in wl_notify_escan_complete()
2911 cfg->escan_info.ndev, ndev)); in wl_notify_escan_complete()
2918 if (cfg->scanmac_enabled) { in wl_notify_escan_complete()
2922 if (cfg->scan_request) { in wl_notify_escan_complete()
2923 dev = bcmcfg_to_prmry_ndev(cfg); in wl_notify_escan_complete()
2925 if (cfg->scan_request->dev != cfg->p2p_net) in wl_notify_escan_complete()
2926 dev = cfg->scan_request->dev; in wl_notify_escan_complete()
2928 if (cfg->scan_request->wdev->iftype != NL80211_IFTYPE_P2P_DEVICE) in wl_notify_escan_complete()
2929 dev = cfg->scan_request->wdev->netdev; in wl_notify_escan_complete()
2933 WL_DBG(("cfg->scan_request is NULL. Internal scan scenario." in wl_notify_escan_complete()
2935 ndev, bcmcfg_to_prmry_ndev(cfg))); in wl_notify_escan_complete()
2939 del_timer_sync(&cfg->scan_timeout); in wl_notify_escan_complete()
2941 CLR_TS(cfg, scan_enq); in wl_notify_escan_complete()
2942 CLR_TS(cfg, scan_start); in wl_notify_escan_complete()
2944 if (likely(cfg->scan_request)) { in wl_notify_escan_complete()
2946 if (aborted && cfg->p2p && p2p_scan(cfg) && in wl_notify_escan_complete()
2947 (cfg->scan_request->flags & NL80211_SCAN_FLAG_FLUSH)) { in wl_notify_escan_complete()
2949 cfg->bss_list = wl_escan_get_buf(cfg, !aborted); in wl_notify_escan_complete()
2952 cfg->bss_list = wl_escan_get_buf(cfg, aborted); in wl_notify_escan_complete()
2954 wl_inform_bss(cfg); in wl_notify_escan_complete()
2958 WL_CFG_DRV_LOCK(&cfg->cfgdrv_lock, flags); in wl_notify_escan_complete()
2959 if (likely(cfg->scan_request)) { in wl_notify_escan_complete()
2962 _wl_notify_scan_done(cfg, aborted); in wl_notify_escan_complete()
2963 cfg->scan_request = NULL; in wl_notify_escan_complete()
2965 if (p2p_is_on(cfg)) in wl_notify_escan_complete()
2966 wl_clr_p2p_status(cfg, SCANNING); in wl_notify_escan_complete()
2967 wl_clr_drv_status(cfg, SCANNING, dev); in wl_notify_escan_complete()
2968 CLR_TS(cfg, scan_start); in wl_notify_escan_complete()
2969 WL_CFG_DRV_UNLOCK(&cfg->cfgdrv_lock, flags); in wl_notify_escan_complete()
2972 if (cfg->sched_scan_running && cfg->sched_scan_req) { in wl_notify_escan_complete()
2973 struct wiphy *wiphy = cfg->sched_scan_req->wiphy; in wl_notify_escan_complete()
2978 cfg->sched_scan_req->reqid); in wl_notify_escan_complete()
2986 cfg->sched_scan_running = FALSE; in wl_notify_escan_complete()
2988 if (cfg->bss_list && (cfg->bss_list->count == 0)) { in wl_notify_escan_complete()
2993 CFG80211_SCHED_SCAN_STOPPED(wiphy, cfg->sched_scan_req); in wl_notify_escan_complete()
2994 cfg->sched_scan_req = NULL; in wl_notify_escan_complete()
3001 DHD_OS_SCAN_WAKE_UNLOCK((dhd_pub_t *)(cfg->pub)); in wl_notify_escan_complete()
3002 DHD_ENABLE_RUNTIME_PM((dhd_pub_t *)(cfg->pub)); in wl_notify_escan_complete()
3006 if (wl_get_p2p_status(cfg, DISC_IN_PROGRESS) && !in_atomic()) { in wl_notify_escan_complete()
3010 wl_cfg80211_resume_sdo(ndev, cfg); in wl_notify_escan_complete()
3022 struct bcm_cfg80211 *cfg; in wl_cfg80211_abort_scan() local
3025 cfg = wiphy_priv(wdev->wiphy); in wl_cfg80211_abort_scan()
3028 if (wl_get_drv_status_all(cfg, SCANNING)) { in wl_cfg80211_abort_scan()
3029 wl_cfgscan_scan_abort(cfg); in wl_cfg80211_abort_scan()
3043 struct bcm_cfg80211 *cfg = (struct bcm_cfg80211 *)data; in wl_cfg80211_scan_supp_timerfunc() local
3046 schedule_work(&cfg->wlan_work); in wl_cfg80211_scan_supp_timerfunc()
3053 struct bcm_cfg80211 *cfg; in wl_cfg80211_scan_suppress() local
3063 cfg = (struct bcm_cfg80211 *)wiphy_priv(wdev->wiphy); in wl_cfg80211_scan_suppress()
3064 if (!cfg) { in wl_cfg80211_scan_suppress()
3069 if (suppress == cfg->scan_suppressed) { in wl_cfg80211_scan_suppress()
3074 del_timer_sync(&cfg->scan_supp_timer); in wl_cfg80211_scan_suppress()
3081 cfg->scan_suppressed = suppress; in wl_cfg80211_scan_suppress()
3085 if (cfg->scan_suppressed) { in wl_cfg80211_scan_suppress()
3088 mod_timer(&cfg->scan_supp_timer, in wl_cfg80211_scan_suppress()
3092 mod_timer(&cfg->scan_supp_timer, in wl_cfg80211_scan_suppress()
3101 int wl_cfg80211_scan_stop(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev) in wl_cfg80211_scan_stop() argument
3107 if (!cfg || !cfgdev) { in wl_cfg80211_scan_stop()
3112 wl_cfgscan_cancel_scan(cfg); in wl_cfg80211_scan_stop()
3122 _wl_notify_scan_done(struct bcm_cfg80211 *cfg, bool aborted) in _wl_notify_scan_done() argument
3128 if (!cfg->scan_request) { in _wl_notify_scan_done()
3135 cfg80211_scan_done(cfg->scan_request, &info); in _wl_notify_scan_done()
3137 cfg80211_scan_done(cfg->scan_request, aborted); in _wl_notify_scan_done()
3139 cfg->scan_request = NULL; in _wl_notify_scan_done()
3143 static u32 wl_p2p_find_peer_channel(struct bcm_cfg80211 *cfg, s32 status, wl_bss_info_t *bi, in wl_p2p_find_peer_channel() argument
3149 ret = wl_get_drv_status_all(cfg, FINDING_COMMON_CHANNEL); in wl_p2p_find_peer_channel()
3156 cfg->afx_hdl->tx_dst_addr.octet, ETHER_ADDR_LEN)) { in wl_p2p_find_peer_channel()
3165 MAC2STRDBG(cfg->afx_hdl->tx_dst_addr.octet), in wl_p2p_find_peer_channel()
3168 wl_clr_p2p_status(cfg, SCANNING); in wl_p2p_find_peer_channel()
3169 cfg->afx_hdl->peer_chan = channel; in wl_p2p_find_peer_channel()
3170 complete(&cfg->act_frm_scan); in wl_p2p_find_peer_channel()
3174 wl_clr_p2p_status(cfg, SCANNING); in wl_p2p_find_peer_channel()
3175 wl_clr_drv_status(cfg, SCANNING, cfg->afx_hdl->dev); in wl_p2p_find_peer_channel()
3176 if (cfg->afx_hdl->peer_chan == WL_INVALID) in wl_p2p_find_peer_channel()
3177 complete(&cfg->act_frm_scan); in wl_p2p_find_peer_channel()
3183 static s32 wl_escan_without_scan_cache(struct bcm_cfg80211 *cfg, wl_escan_result_t *escan_result, in wl_escan_without_scan_cache() argument
3193 if (wl_escan_check_sync_id(cfg, status, escan_result->sync_id, in wl_escan_without_scan_cache()
3194 cfg->escan_info.cur_sync_id) < 0) { in wl_escan_without_scan_cache()
3199 cfg->escan_info.escan_state = WL_ESCAN_STATE_IDLE; in wl_escan_without_scan_cache()
3202 if ((likely(cfg->scan_request)) || (cfg->sched_scan_running)) { in wl_escan_without_scan_cache()
3208 DBG_EVENT_LOG((dhd_pub_t *)cfg->pub, WIFI_EVENT_DRIVER_SCAN_RESULT_FOUND); in wl_escan_without_scan_cache()
3223 if (!(bcmcfg_to_wiphy(cfg)->interface_modes & BIT(NL80211_IFTYPE_ADHOC))) { in wl_escan_without_scan_cache()
3230 if (wl_p2p_find_peer_channel(cfg, status, bi, bi_length)) { in wl_escan_without_scan_cache()
3233 if (scan_req_match(cfg)) { in wl_escan_without_scan_cache()
3235 if ((cfg->p2p->search_state != WL_P2P_DISC_ST_SCAN) && in wl_escan_without_scan_cache()
3240 add_roam_cache(cfg, bi); in wl_escan_without_scan_cache()
3242 err = wl_inform_single_bss(cfg, bi, false); in wl_escan_without_scan_cache()
3245 update_roam_cache(cfg, ioctl_version); in wl_escan_without_scan_cache()
3252 if (wl_cfgp2p_is_p2p_specific_scan(cfg->scan_request)) { in wl_escan_without_scan_cache()
3263 if (wl_p2p_find_peer_channel(cfg, status, NULL, 0)) { in wl_escan_without_scan_cache()
3267 DBG_EVENT_LOG((dhd_pub_t *)cfg->pub, WIFI_EVENT_DRIVER_SCAN_COMPLETE); in wl_escan_without_scan_cache()
3283 if (wl_p2p_find_peer_channel(cfg, status, NULL, 0)) { in wl_escan_without_scan_cache()
3293 WL_ERR(("WLC_E_STATUS_TIMEOUT : scan_request[%p]\n", cfg->scan_request)); in wl_escan_without_scan_cache()
3303 if (wl_p2p_find_peer_channel(cfg, status, NULL, 0)) { in wl_escan_without_scan_cache()
3314 wl_cfgscan_cancel_scan(cfg); in wl_escan_without_scan_cache()
3316 wl_notify_escan_complete(cfg, ndev, aborted); in wl_escan_without_scan_cache()
3327 wl_notify_scan_status(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev, in wl_notify_scan_status() argument
3338 if (!wl_get_drv_status(cfg, SCANNING, ndev)) { in wl_notify_scan_status()
3342 ndev = cfgdev_to_wlc_ndev(cfgdev, cfg); in wl_notify_scan_status()
3344 mutex_lock(&cfg->scan_sync); in wl_notify_scan_status()
3345 wl_clr_drv_status(cfg, SCANNING, ndev); in wl_notify_scan_status()
3359 cfg->bss_list = cfg->scan_results; in wl_notify_scan_status()
3360 bss_list = cfg->bss_list; in wl_notify_scan_status()
3364 if (unlikely(err) && unlikely(!cfg->scan_suppressed)) { in wl_notify_scan_status()
3373 err = wl_inform_bss(cfg); in wl_notify_scan_status()
3376 del_timer_sync(&cfg->scan_timeout); in wl_notify_scan_status()
3377 WL_CFG_DRV_LOCK(&cfg->cfgdrv_lock, flags); in wl_notify_scan_status()
3378 if (cfg->scan_request) { in wl_notify_scan_status()
3379 _wl_notify_scan_done(cfg, false); in wl_notify_scan_status()
3380 cfg->scan_request = NULL; in wl_notify_scan_status()
3382 WL_CFG_DRV_UNLOCK(&cfg->cfgdrv_lock, flags); in wl_notify_scan_status()
3384 mutex_unlock(&cfg->scan_sync); in wl_notify_scan_status()
3388 void wl_notify_scan_done(struct bcm_cfg80211 *cfg, bool aborted) in wl_notify_scan_done() argument
3399 cfg80211_scan_done(cfg->scan_request, &info); in wl_notify_scan_done()
3401 cfg80211_scan_done(cfg->scan_request, aborted); in wl_notify_scan_done()
3405 ndev = bcmcfg_to_prmry_ndev(cfg); in wl_notify_scan_done()
3417 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_set_random_mac() local
3420 if (cfg->random_mac_enabled == enable) { in wl_cfg80211_set_random_mac()
3432 cfg->random_mac_enabled = enable; in wl_cfg80211_set_random_mac()
3444 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_random_mac_enable() local
3453 if (wl_get_drv_status_all(cfg, CONNECTED) || wl_get_drv_status_all(cfg, CONNECTING) || in wl_cfg80211_random_mac_enable()
3454 wl_get_drv_status_all(cfg, AP_CREATED) || wl_get_drv_status_all(cfg, AP_CREATING)) { in wl_cfg80211_random_mac_enable()
3459 (void)memcpy_s(random_mac, ETH_ALEN, bcmcfg_to_prmry_ndev(cfg)->dev_addr, ETH_ALEN); in wl_cfg80211_random_mac_enable()
3472 err = wldev_iovar_setbuf_bsscfg(bcmcfg_to_prmry_ndev(cfg), "cur_etheraddr", in wl_cfg80211_random_mac_enable()
3473 random_mac, ETH_ALEN, cfg->ioctl_buf, WLC_IOCTL_SMLEN, 0, &cfg->ioctl_buf_sync); in wl_cfg80211_random_mac_enable()
3479 MAC2STRDBG((const u8 *)bcmcfg_to_prmry_ndev(cfg)->dev_addr), in wl_cfg80211_random_mac_enable()
3493 sm, len, cfg->ioctl_buf, WLC_IOCTL_SMLEN, 0, &cfg->ioctl_buf_sync); in wl_cfg80211_random_mac_enable()
3507 err = wldev_iovar_setbuf_bsscfg(bcmcfg_to_prmry_ndev(cfg), "cur_etheraddr", in wl_cfg80211_random_mac_enable()
3508 random_mac, ETH_ALEN, cfg->ioctl_buf, in wl_cfg80211_random_mac_enable()
3509 WLC_IOCTL_SMLEN, 0, &cfg->ioctl_buf_sync); in wl_cfg80211_random_mac_enable()
3514 MAC2STRDBG((const u8 *)bcmcfg_to_prmry_ndev(cfg)->dev_addr), in wl_cfg80211_random_mac_enable()
3544 sm, len, cfg->ioctl_buf, WLC_IOCTL_SMLEN, 0, &cfg->ioctl_buf_sync); in wl_cfg80211_random_mac_enable()
3566 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_random_mac_disable() local
3576 MAC2STRDBG((const u8 *)bcmcfg_to_prmry_ndev(cfg)->dev_addr))); in wl_cfg80211_random_mac_disable()
3578 err = wldev_iovar_setbuf_bsscfg(bcmcfg_to_prmry_ndev(cfg), "cur_etheraddr", in wl_cfg80211_random_mac_disable()
3579 bcmcfg_to_prmry_ndev(cfg)->dev_addr, ETH_ALEN, in wl_cfg80211_random_mac_disable()
3580 cfg->ioctl_buf, WLC_IOCTL_SMLEN, 0, &cfg->ioctl_buf_sync); in wl_cfg80211_random_mac_disable()
3598 sm, len, cfg->ioctl_buf, WLC_IOCTL_SMLEN, 0, &cfg->ioctl_buf_sync); in wl_cfg80211_random_mac_disable()
3605 cfg->scanmac_enabled = 0; in wl_cfg80211_random_mac_disable()
3614 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_scan_mac_enable() local
3630 sm, len, cfg->ioctl_buf, WLC_IOCTL_SMLEN, 0, &cfg->ioctl_buf_sync); in wl_cfg80211_scan_mac_enable()
3635 cfg->scanmac_enabled = 1; in wl_cfg80211_scan_mac_enable()
3652 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_scan_mac_config() local
3715 sm, len, cfg->ioctl_buf, WLC_IOCTL_SMLEN, 0, &cfg->ioctl_buf_sync); in wl_cfg80211_scan_mac_config()
3724 cfg->scanmac_config = true; in wl_cfg80211_scan_mac_config()
3773 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_sched_scan_start() local
3774 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_sched_scan_start()
3822 wl_cfgscan_populate_scan_channels(cfg, in wl_cfg80211_sched_scan_start()
3829 event_data = (log_conn_event_t *)MALLOCZ(cfg->osh, alloc_len); in wl_cfg80211_sched_scan_start()
3896 WL_CFG_DRV_LOCK(&cfg->cfgdrv_lock, flags); in wl_cfg80211_sched_scan_start()
3897 cfg->sched_scan_req = request; in wl_cfg80211_sched_scan_start()
3898 WL_CFG_DRV_UNLOCK(&cfg->cfgdrv_lock, flags); in wl_cfg80211_sched_scan_start()
3904 if ((ret = wl_config_scan_macaddr(cfg, dev, in wl_cfg80211_sched_scan_start()
3912 WL_CFG_DRV_LOCK(&cfg->cfgdrv_lock, flags); in wl_cfg80211_sched_scan_start()
3913 cfg->sched_scan_req = NULL; in wl_cfg80211_sched_scan_start()
3914 cfg->sched_scan_running = FALSE; in wl_cfg80211_sched_scan_start()
3915 WL_CFG_DRV_UNLOCK(&cfg->cfgdrv_lock, flags); in wl_cfg80211_sched_scan_start()
3922 MFREE(cfg->osh, event_data, alloc_len); in wl_cfg80211_sched_scan_start()
3934 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_sched_scan_stop() local
3935 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_sched_scan_stop()
3952 mutex_lock(&cfg->scan_sync); in wl_cfg80211_sched_scan_stop()
3953 if (cfg->sched_scan_req) { in wl_cfg80211_sched_scan_stop()
3955 _wl_cfgscan_cancel_scan(cfg); in wl_cfg80211_sched_scan_stop()
3957 cfg->sched_scan_req = NULL; in wl_cfg80211_sched_scan_stop()
3958 cfg->sched_scan_running = FALSE; in wl_cfg80211_sched_scan_stop()
3959 mutex_unlock(&cfg->scan_sync); in wl_cfg80211_sched_scan_stop()
3970 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_custom_scan_time() local
3972 if (cfg == NULL) { in wl_cfg80211_custom_scan_time()
3979 cfg->custom_scan_channel_time = time; in wl_cfg80211_custom_scan_time()
3983 cfg->custom_scan_unassoc_time = time; in wl_cfg80211_custom_scan_time()
3987 cfg->custom_scan_passive_time = time; in wl_cfg80211_custom_scan_time()
3991 cfg->custom_scan_home_time = time; in wl_cfg80211_custom_scan_time()
3995 cfg->custom_scan_home_away_time = time; in wl_cfg80211_custom_scan_time()
4034 struct bcm_cfg80211 *cfg = (struct bcm_cfg80211 *)data; in wl_scan_timeout() local
4045 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wl_scan_timeout()
4054 WL_CFG_DRV_LOCK(&cfg->cfgdrv_lock, flags); in wl_scan_timeout()
4055 if (!(cfg->scan_request)) { in wl_scan_timeout()
4057 WL_CFG_DRV_UNLOCK(&cfg->cfgdrv_lock, flags); in wl_scan_timeout()
4061 wdev = GET_SCAN_WDEV(cfg->scan_request); in wl_scan_timeout()
4062 WL_CFG_DRV_UNLOCK(&cfg->cfgdrv_lock, flags); in wl_scan_timeout()
4084 ((cfg->tsinfo.scan_deq < cfg->tsinfo.scan_enq) || in wl_scan_timeout()
4096 "\ncurrent_time:"SEC_USEC_FMT"\n", work_busy(&cfg->event_work), in wl_scan_timeout()
4097 GET_SEC_USEC(cfg->tsinfo.scan_enq), in wl_scan_timeout()
4098 GET_SEC_USEC(cfg->tsinfo.wl_evt_hdlr_entry), in wl_scan_timeout()
4099 GET_SEC_USEC(cfg->tsinfo.wl_evt_deq), in wl_scan_timeout()
4100 GET_SEC_USEC(cfg->tsinfo.scan_deq), in wl_scan_timeout()
4101 GET_SEC_USEC(cfg->tsinfo.scan_hdlr_cmplt), in wl_scan_timeout()
4102 GET_SEC_USEC(cfg->tsinfo.scan_cmplt), in wl_scan_timeout()
4103 GET_SEC_USEC(cfg->tsinfo.wl_evt_hdlr_exit), GET_SEC_USEC(cur_time))); in wl_scan_timeout()
4104 if (cfg->tsinfo.scan_enq) { in wl_scan_timeout()
4105 WL_ERR(("Elapsed time(ns): %llu\n", (cur_time - cfg->tsinfo.scan_enq))); in wl_scan_timeout()
4108 mutex_is_locked(&cfg->if_sync), in wl_scan_timeout()
4109 mutex_is_locked(&cfg->usr_sync), in wl_scan_timeout()
4110 mutex_is_locked(&cfg->pm_sync), in wl_scan_timeout()
4111 mutex_is_locked(&cfg->scan_sync), in wl_scan_timeout()
4112 spin_is_locked(&cfg->cfgdrv_lock), in wl_scan_timeout()
4113 spin_is_locked(&cfg->eq_lock))); in wl_scan_timeout()
4119 mutex_is_locked(&cfg->nancfg->nan_sync), in wl_scan_timeout()
4137 bss_list = wl_escan_get_buf(cfg, FALSE); in wl_scan_timeout()
4152 ndev = wdev_to_wlc_ndev(wdev, cfg); in wl_scan_timeout()
4198 s32 wl_init_scan(struct bcm_cfg80211 *cfg) in wl_init_scan() argument
4202 cfg->evt_handler[WLC_E_ESCAN_RESULT] = wl_escan_handler; in wl_init_scan()
4203 cfg->escan_info.escan_state = WL_ESCAN_STATE_IDLE; in wl_init_scan()
4204 wl_escan_init_sync_id(cfg); in wl_init_scan()
4207 init_timer_compat(&cfg->scan_timeout, wl_scan_timeout, cfg); in wl_init_scan()
4209 wl_cfg80211_set_bcmcfg(cfg); in wl_init_scan()
4216 wl_cfgscan_init_pno_escan(struct bcm_cfg80211 *cfg, struct net_device *ndev, in wl_cfgscan_init_pno_escan() argument
4219 struct wiphy *wiphy = bcmcfg_to_wiphy(cfg); in wl_cfgscan_init_pno_escan()
4220 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wl_cfgscan_init_pno_escan()
4223 mutex_lock(&cfg->scan_sync); in wl_cfgscan_init_pno_escan()
4224 LOG_TS(cfg, scan_start); in wl_cfgscan_init_pno_escan()
4226 if (wl_get_drv_status_all(cfg, SCANNING)) { in wl_cfgscan_init_pno_escan()
4227 _wl_cfgscan_cancel_scan(cfg); in wl_cfgscan_init_pno_escan()
4230 wl_set_drv_status(cfg, SCANNING, ndev); in wl_cfgscan_init_pno_escan()
4233 err = wl_do_escan(cfg, wiphy, ndev, request); in wl_cfgscan_init_pno_escan()
4235 wl_clr_drv_status(cfg, SCANNING, ndev); in wl_cfgscan_init_pno_escan()
4236 mutex_unlock(&cfg->scan_sync); in wl_cfgscan_init_pno_escan()
4243 cfg->sched_scan_running = TRUE; in wl_cfgscan_init_pno_escan()
4244 mutex_unlock(&cfg->scan_sync); in wl_cfgscan_init_pno_escan()
4250 wl_cfgscan_update_v3_schedscan_results(struct bcm_cfg80211 *cfg, struct net_device *ndev, in wl_cfgscan_update_v3_schedscan_results() argument
4258 struct wiphy *wiphy = bcmcfg_to_wiphy(cfg); in wl_cfgscan_update_v3_schedscan_results()
4259 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wl_cfgscan_update_v3_schedscan_results()
4283 request = (struct cfg80211_scan_request *)MALLOCZ(cfg->osh, in wl_cfgscan_update_v3_schedscan_results()
4285 channel = (struct ieee80211_channel *)MALLOCZ(cfg->osh, in wl_cfgscan_update_v3_schedscan_results()
4298 event_data = (log_conn_event_t *)MALLOCZ(cfg->osh, alloc_len); in wl_cfgscan_update_v3_schedscan_results()
4382 if (wl_get_p2p_status(cfg, DISCOVERY_ON)) { in wl_cfgscan_update_v3_schedscan_results()
4384 err = wl_cfgp2p_discover_enable_search(cfg, false); in wl_cfgscan_update_v3_schedscan_results()
4386 wl_clr_drv_status(cfg, SCANNING, ndev); in wl_cfgscan_update_v3_schedscan_results()
4389 p2p_scan(cfg) = false; in wl_cfgscan_update_v3_schedscan_results()
4392 err = wl_cfgscan_init_pno_escan(cfg, ndev, request); in wl_cfgscan_update_v3_schedscan_results()
4403 MFREE(cfg->osh, request, in wl_cfgscan_update_v3_schedscan_results()
4407 MFREE(cfg->osh, channel, in wl_cfgscan_update_v3_schedscan_results()
4412 MFREE(cfg->osh, event_data, alloc_len); in wl_cfgscan_update_v3_schedscan_results()
4421 wl_notify_sched_scan_results(struct bcm_cfg80211 *cfg, struct net_device *ndev, in wl_notify_sched_scan_results() argument
4426 struct wiphy *wiphy = bcmcfg_to_wiphy(cfg); in wl_notify_sched_scan_results()
4427 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wl_notify_sched_scan_results()
4470 request = (struct cfg80211_scan_request *)MALLOCZ(cfg->osh, in wl_notify_sched_scan_results()
4472 channel = (struct ieee80211_channel *)MALLOCZ(cfg->osh, in wl_notify_sched_scan_results()
4485 event_data = (log_conn_event_t *)MALLOCZ(cfg->osh, alloc_len); in wl_notify_sched_scan_results()
4579 if (wl_get_p2p_status(cfg, DISCOVERY_ON)) { in wl_notify_sched_scan_results()
4581 err = wl_cfgp2p_discover_enable_search(cfg, false); in wl_notify_sched_scan_results()
4583 wl_clr_drv_status(cfg, SCANNING, ndev); in wl_notify_sched_scan_results()
4586 p2p_scan(cfg) = false; in wl_notify_sched_scan_results()
4588 err = wl_cfgscan_init_pno_escan(cfg, ndev, request); in wl_notify_sched_scan_results()
4616 request = (struct cfg80211_scan_request *)MALLOCZ(cfg->osh, in wl_notify_sched_scan_results()
4618 channel = (struct ieee80211_channel *)MALLOCZ(cfg->osh, in wl_notify_sched_scan_results()
4631 event_data = (log_conn_event_t *)MALLOC(cfg->osh, alloc_len); in wl_notify_sched_scan_results()
4714 if (wl_get_p2p_status(cfg, DISCOVERY_ON)) { in wl_notify_sched_scan_results()
4716 err = wl_cfgp2p_discover_enable_search(cfg, false); in wl_notify_sched_scan_results()
4718 wl_clr_drv_status(cfg, SCANNING, ndev); in wl_notify_sched_scan_results()
4721 p2p_scan(cfg) = false; in wl_notify_sched_scan_results()
4724 err = wl_cfgscan_init_pno_escan(cfg, ndev, request); in wl_notify_sched_scan_results()
4733 err = wl_cfgscan_update_v3_schedscan_results(cfg, ndev, in wl_notify_sched_scan_results()
4746 mutex_lock(&cfg->scan_sync); in wl_notify_sched_scan_results()
4751 if (cfg->sched_scan_req) { in wl_notify_sched_scan_results()
4754 cfg80211_sched_scan_stopped(wiphy, cfg->sched_scan_req->reqid); in wl_notify_sched_scan_results()
4758 cfg->sched_scan_req = NULL; in wl_notify_sched_scan_results()
4762 cfg->sched_scan_running = FALSE; in wl_notify_sched_scan_results()
4763 CLR_TS(cfg, scan_start); in wl_notify_sched_scan_results()
4765 mutex_unlock(&cfg->scan_sync); in wl_notify_sched_scan_results()
4768 MFREE(cfg->osh, request, in wl_notify_sched_scan_results()
4772 MFREE(cfg->osh, channel, in wl_notify_sched_scan_results()
4777 MFREE(cfg->osh, event_data, alloc_len); in wl_notify_sched_scan_results()
4785 wl_notify_pfn_status(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev, in wl_notify_pfn_status() argument
4793 struct wiphy *wiphy = bcmcfg_to_wiphy(cfg); in wl_notify_pfn_status()
4803 ndev = cfgdev_to_wlc_ndev(cfgdev, cfg); in wl_notify_pfn_status()
4809 MFREE(cfg->osh, ptr, send_evt_bytes); in wl_notify_pfn_status()
4817 mutex_lock(&cfg->usr_sync); in wl_notify_pfn_status()
4821 mutex_unlock(&cfg->usr_sync); in wl_notify_pfn_status()
4826 wl_notify_sched_scan_results(cfg, ndev, e, data); in wl_notify_pfn_status()
4834 wl_notify_gscan_event(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev, in wl_notify_gscan_event() argument
4842 struct net_device *ndev = cfgdev_to_wlc_ndev(cfgdev, cfg); in wl_notify_gscan_event()
4843 struct wiphy *wiphy = bcmcfg_to_wiphy(cfg); in wl_notify_gscan_event()
4875 MFREE(cfg->osh, ptr, send_evt_bytes); in wl_notify_gscan_event()
4891 MFREE(cfg->osh, ptr, send_evt_bytes); in wl_notify_gscan_event()
4904 MFREE(cfg->osh, ptr, send_evt_bytes); in wl_notify_gscan_event()
4914 MFREE(cfg->osh, ptr, send_evt_bytes); in wl_notify_gscan_event()
4929 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_set_passive_scan() local
4932 cfg->active_scan = 1; in wl_cfg80211_set_passive_scan()
4934 cfg->active_scan = 0; in wl_cfg80211_set_passive_scan()
4943 struct bcm_cfg80211 *cfg = NULL; in wl_cfgscan_listen_complete_work() local
4944 BCM_SET_CONTAINER_OF(cfg, work, struct bcm_cfg80211, loc.work.work); in wl_cfgscan_listen_complete_work()
4948 if (!cfg->loc.in_progress) { in wl_cfgscan_listen_complete_work()
4952 wl_cfgscan_notify_listen_complete(cfg); in wl_cfgscan_listen_complete_work()
4956 wl_cfgscan_notify_listen_complete(struct bcm_cfg80211 *cfg) in wl_cfgscan_notify_listen_complete() argument
4958 WL_DBG(("listen on channel complete! cookie:%llu\n", cfg->last_roc_id)); in wl_cfgscan_notify_listen_complete()
4959 if (cfg->loc.wdev && cfg->loc.in_progress) { in wl_cfgscan_notify_listen_complete()
4961 cfg80211_remain_on_channel_expired(cfg->loc.wdev, cfg->last_roc_id, in wl_cfgscan_notify_listen_complete()
4962 &cfg->remain_on_chan, GFP_KERNEL); in wl_cfgscan_notify_listen_complete()
4964 cfg80211_remain_on_channel_expired(cfg->loc.wdev->netdev, cfg->last_roc_id, in wl_cfgscan_notify_listen_complete()
4965 &cfg->remain_on_chan, cfg->remain_on_chan_type, GFP_KERNEL); in wl_cfgscan_notify_listen_complete()
4967 cfg->loc.in_progress = false; in wl_cfgscan_notify_listen_complete()
4968 cfg->loc.wdev = NULL; in wl_cfgscan_notify_listen_complete()
4974 wl_init_scan_params(struct bcm_cfg80211 *cfg, u8 *params, u16 params_size, in wl_init_scan_params() argument
4983 wl_escan_set_sync_id(sync_id, cfg); in wl_init_scan_params()
4984 if (cfg->scan_params_v2) { in wl_init_scan_params()
5021 wl_cfgscan_cancel_listen_on_channel(struct bcm_cfg80211 *cfg, bool notify_user) in wl_cfgscan_cancel_listen_on_channel() argument
5025 mutex_lock(&cfg->scan_sync); in wl_cfgscan_cancel_listen_on_channel()
5026 if (!cfg->loc.in_progress) { in wl_cfgscan_cancel_listen_on_channel()
5031 if (delayed_work_pending(&cfg->loc.work)) { in wl_cfgscan_cancel_listen_on_channel()
5032 cancel_delayed_work_sync(&cfg->loc.work); in wl_cfgscan_cancel_listen_on_channel()
5036 _wl_cfgscan_cancel_scan(cfg); in wl_cfgscan_cancel_listen_on_channel()
5039 wl_cfgscan_notify_listen_complete(cfg); in wl_cfgscan_cancel_listen_on_channel()
5041 cfg->loc.in_progress = false; in wl_cfgscan_cancel_listen_on_channel()
5042 cfg->loc.wdev = NULL; in wl_cfgscan_cancel_listen_on_channel()
5044 mutex_unlock(&cfg->scan_sync); in wl_cfgscan_cancel_listen_on_channel()
5049 wl_cfgscan_listen_on_channel(struct bcm_cfg80211 *cfg, struct wireless_dev *wdev, in wl_cfgscan_listen_on_channel() argument
5072 mutex_lock(&cfg->scan_sync); in wl_cfgscan_listen_on_channel()
5073 if (wl_get_drv_status_all(cfg, SCANNING)) { in wl_cfgscan_listen_on_channel()
5078 if (cfg->loc.in_progress == true) { in wl_cfgscan_listen_on_channel()
5083 bssidx = wl_get_bssidx_by_wdev(cfg, wdev); in wl_cfgscan_listen_on_channel()
5091 ndev = wdev->netdev ? wdev->netdev : bcmcfg_to_prmry_ndev(cfg); in wl_cfgscan_listen_on_channel()
5093 if (cfg->scan_params_v2) { in wl_cfgscan_listen_on_channel()
5107 params = MALLOCZ(cfg->osh, params_size); in wl_cfgscan_listen_on_channel()
5116 wl_init_scan_params(cfg, params, params_size, in wl_cfgscan_listen_on_channel()
5120 if (cfg->scan_params_v2) { in wl_cfgscan_listen_on_channel()
5137 cfg->escan_ioctl_buf, WLC_IOCTL_MEDLEN, bssidx, &cfg->ioctl_buf_sync); in wl_cfgscan_listen_on_channel()
5149 cfg->loc.in_progress = true; in wl_cfgscan_listen_on_channel()
5150 cfg->loc.wdev = wdev; in wl_cfgscan_listen_on_channel()
5152 if (schedule_delayed_work(&cfg->loc.work, in wl_cfgscan_listen_on_channel()
5156 DHD_PM_WAKE_LOCK_TIMEOUT(cfg->pub, listen_timeout); in wl_cfgscan_listen_on_channel()
5166 MFREE(cfg->osh, params, params_size); in wl_cfgscan_listen_on_channel()
5168 mutex_unlock(&cfg->scan_sync); in wl_cfgscan_listen_on_channel()
5175 wl_priortize_scan_over_listen(struct bcm_cfg80211 *cfg, in wl_priortize_scan_over_listen() argument
5179 wl_set_drv_status(cfg, FAKE_REMAINING_ON_CHANNEL, ndev); in wl_priortize_scan_over_listen()
5182 del_timer_sync(&cfg->p2p->listen_timer); in wl_priortize_scan_over_listen()
5184 wl_clr_p2p_status(cfg, LISTEN_EXPIRED); in wl_priortize_scan_over_listen()
5186 INIT_TIMER(&cfg->p2p->listen_timer, in wl_priortize_scan_over_listen()
5207 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfgscan_remain_on_channel() local
5210 RETURN_EIO_IF_NOT_UP(cfg); in wl_cfgscan_remain_on_channel()
5212 mutex_lock(&cfg->usr_sync); in wl_cfgscan_remain_on_channel()
5213 ndev = cfgdev_to_wlc_ndev(cfgdev, cfg); in wl_cfgscan_remain_on_channel()
5229 (wl_get_drv_status(cfg, SCANNING, ndev)) ? TRUE : FALSE)); in wl_cfgscan_remain_on_channel()
5239 if (cfg->p2p) in wl_cfgscan_remain_on_channel()
5243 if (!cfg->p2p) { in wl_cfgscan_remain_on_channel()
5244 WL_ERR(("cfg->p2p is not initialized\n")); in wl_cfgscan_remain_on_channel()
5250 if (wl_get_p2p_status(cfg, DISC_IN_PROGRESS)) { in wl_cfgscan_remain_on_channel()
5257 if (wl_get_drv_status_all(cfg, SCANNING)) { in wl_cfgscan_remain_on_channel()
5260 wl_cfgscan_cancel_scan(cfg); in wl_cfgscan_remain_on_channel()
5262 wl_priortize_scan_over_listen(cfg, ndev, duration); in wl_cfgscan_remain_on_channel()
5267 wl_cfgscan_cancel_scan(cfg); in wl_cfgscan_remain_on_channel()
5272 if (wl_get_drv_status_all(cfg, WAITING_NEXT_ACT_FRM_LISTEN)) { in wl_cfgscan_remain_on_channel()
5278 wl_set_drv_status(cfg, FAKE_REMAINING_ON_CHANNEL, ndev); in wl_cfgscan_remain_on_channel()
5280 wl_set_drv_status(cfg, REMAINING_ON_CHANNEL, ndev); in wl_cfgscan_remain_on_channel()
5286 if (!cfg->p2p->on) { in wl_cfgscan_remain_on_channel()
5290 p2p_on(cfg) = true; in wl_cfgscan_remain_on_channel()
5293 err = wl_cfgp2p_enable_discovery(cfg, ndev, NULL, 0); in wl_cfgscan_remain_on_channel()
5297 err = wl_cfgp2p_discover_listen(cfg, target_channel, duration); in wl_cfgscan_remain_on_channel()
5299 wl_set_drv_status(cfg, REMAINING_ON_CHANNEL, ndev); in wl_cfgscan_remain_on_channel()
5306 wl_set_drv_status(cfg, FAKE_REMAINING_ON_CHANNEL, ndev); in wl_cfgscan_remain_on_channel()
5317 err = wl_cfgscan_listen_on_channel(cfg, wdev, channel, duration); in wl_cfgscan_remain_on_channel()
5323 (void)memcpy_s(&cfg->remain_on_chan, sizeof(struct ieee80211_channel), in wl_cfgscan_remain_on_channel()
5326 cfg->remain_on_chan_type = channel_type; in wl_cfgscan_remain_on_channel()
5328 id = ++cfg->last_roc_id; in wl_cfgscan_remain_on_channel()
5330 id = ++cfg->last_roc_id; in wl_cfgscan_remain_on_channel()
5342 mutex_unlock(&cfg->usr_sync); in wl_cfgscan_remain_on_channel()
5351 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfgscan_cancel_remain_on_channel() local
5356 RETURN_EIO_IF_NOT_UP(cfg); in wl_cfgscan_cancel_remain_on_channel()
5362 mutex_lock(&cfg->usr_sync); in wl_cfgscan_cancel_remain_on_channel()
5368 err = wl_cfgscan_cancel_listen_on_channel(cfg, false); in wl_cfgscan_cancel_remain_on_channel()
5376 if (cfg && cfg->p2p_resp_apchn_status) { in wl_cfgscan_cancel_remain_on_channel()
5377 dev = bcmcfg_to_prmry_ndev(cfg); in wl_cfgscan_cancel_remain_on_channel()
5379 cfg->p2p_resp_apchn_status = false; in wl_cfgscan_cancel_remain_on_channel()
5384 if (cfg->last_roc_id == cookie) { in wl_cfgscan_cancel_remain_on_channel()
5386 wl_cfgp2p_set_p2p_mode(cfg, WL_P2P_DISC_ST_SCAN, 0, 0, in wl_cfgscan_cancel_remain_on_channel()
5387 wl_to_p2p_bss_bssidx(cfg, P2PAPI_BSSCFG_DEVICE)); in wl_cfgscan_cancel_remain_on_channel()
5391 cookie, cfg->last_roc_id)); in wl_cfgscan_cancel_remain_on_channel()
5397 mutex_unlock(&cfg->usr_sync); in wl_cfgscan_cancel_remain_on_channel()
5403 wl_android_get_roam_scan_chanlist(struct bcm_cfg80211 *cfg) in wl_android_get_roam_scan_chanlist() argument
5416 ndev = bcmcfg_to_prmry_ndev(cfg); in wl_android_get_roam_scan_chanlist()
5417 wiphy = bcmcfg_to_wiphy(cfg); in wl_android_get_roam_scan_chanlist()
5429 ssid = (struct wlc_ssid *)wl_read_prof(cfg, ndev, WL_PROF_SSID); in wl_android_get_roam_scan_chanlist()
5497 wl_get_assoc_channels(struct bcm_cfg80211 *cfg, in wl_get_assoc_channels() argument
5513 if (cfg->rcc_enabled) { in wl_get_assoc_channels()
5535 rcc_chan_cnt = get_roam_channel_list(cfg, target_chspec, chanspecs, in wl_get_assoc_channels()
5588 wl_cfgscan_get_band_freq_list(struct bcm_cfg80211 *cfg, int band, in wl_cfgscan_get_band_freq_list() argument
5593 struct net_device *dev = bcmcfg_to_prmry_ndev(cfg); in wl_cfgscan_get_band_freq_list()
5599 0, list, CHANINFO_LIST_BUF_SIZE, 0, &cfg->ioctl_buf_sync); in wl_cfgscan_get_band_freq_list()