Lines Matching refs:cfg
389 static int brcmf_vif_change_validate(struct brcmf_cfg80211_info *cfg, in brcmf_vif_change_validate() argument
397 list_for_each_entry(pos, &cfg->vif_list, list) in brcmf_vif_change_validate()
403 return cfg80211_check_combinations(cfg->wiphy, 1, 0, iftype_num); in brcmf_vif_change_validate()
406 static int brcmf_vif_add_validate(struct brcmf_cfg80211_info *cfg, in brcmf_vif_add_validate() argument
413 list_for_each_entry(pos, &cfg->vif_list, list) in brcmf_vif_add_validate()
417 return cfg80211_check_combinations(cfg->wiphy, 1, 0, iftype_num); in brcmf_vif_add_validate()
538 struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy); in brcmf_ap_add_vif() local
539 struct brcmf_if *ifp = netdev_priv(cfg_to_ndev(cfg)); in brcmf_ap_add_vif()
543 if (brcmf_cfg80211_vif_event_armed(cfg)) in brcmf_ap_add_vif()
548 vif = brcmf_alloc_vif(cfg, NL80211_IFTYPE_AP, false); in brcmf_ap_add_vif()
552 brcmf_cfg80211_arm_vif_event(cfg, vif); in brcmf_ap_add_vif()
556 brcmf_cfg80211_arm_vif_event(cfg, NULL); in brcmf_ap_add_vif()
561 err = brcmf_cfg80211_wait_vif_event_timeout(cfg, BRCMF_E_IF_ADD, in brcmf_ap_add_vif()
563 brcmf_cfg80211_arm_vif_event(cfg, NULL); in brcmf_ap_add_vif()
667 s32 brcmf_notify_escan_complete(struct brcmf_cfg80211_info *cfg, in brcmf_notify_escan_complete() argument
679 scan_request = cfg->scan_request; in brcmf_notify_escan_complete()
680 cfg->scan_request = NULL; in brcmf_notify_escan_complete()
682 if (timer_pending(&cfg->escan_timeout)) in brcmf_notify_escan_complete()
683 del_timer_sync(&cfg->escan_timeout); in brcmf_notify_escan_complete()
712 if (cfg->sched_escan) { in brcmf_notify_escan_complete()
714 cfg->sched_escan = false; in brcmf_notify_escan_complete()
716 cfg80211_sched_scan_results(cfg_to_wiphy(cfg)); in brcmf_notify_escan_complete()
722 if (!test_and_clear_bit(BRCMF_SCAN_STATUS_BUSY, &cfg->scan_status)) in brcmf_notify_escan_complete()
731 struct brcmf_cfg80211_info *cfg = wiphy_priv(wiphy); in brcmf_cfg80211_del_iface() local
735 if (brcmf_cfg80211_vif_event_armed(cfg)) in brcmf_cfg80211_del_iface()
739 if (test_bit(BRCMF_SCAN_STATUS_BUSY, &cfg->scan_status) && in brcmf_cfg80211_del_iface()
740 cfg->escan_info.ifp == netdev_priv(ndev)) in brcmf_cfg80211_del_iface()
741 brcmf_notify_escan_complete(cfg, netdev_priv(ndev), in brcmf_cfg80211_del_iface()
772 struct brcmf_cfg80211_info *cfg = wiphy_priv(wiphy); in brcmf_cfg80211_change_iface() local
806 if (cfg->p2p.p2pdev_dynamically) in brcmf_cfg80211_change_iface()
840 err = brcmf_p2p_ifchange(cfg, BRCMF_FIL_P2P_IF_GO); in brcmf_cfg80211_change_iface()
865 static void brcmf_escan_prep(struct brcmf_cfg80211_info *cfg, in brcmf_escan_prep() argument
898 chanspec = channel_to_chanspec(&cfg->d11inf, in brcmf_escan_prep()
947 brcmf_run_escan(struct brcmf_cfg80211_info *cfg, struct brcmf_if *ifp, in brcmf_run_escan() argument
971 brcmf_escan_prep(cfg, ¶ms->params_le, request); in brcmf_run_escan()
990 brcmf_do_escan(struct brcmf_cfg80211_info *cfg, struct wiphy *wiphy, in brcmf_do_escan() argument
996 struct escan_info *escan = &cfg->escan_info; in brcmf_do_escan()
1002 passive_scan = cfg->active_scan ? 0 : 1; in brcmf_do_escan()
1010 results = (struct brcmf_scan_results *)cfg->escan_info.escan_buf; in brcmf_do_escan()
1015 err = escan->run(cfg, ifp, request, WL_ESCAN_ACTION_START); in brcmf_do_escan()
1027 struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy); in brcmf_cfg80211_escan() local
1029 struct brcmf_cfg80211_scan_req *sr = &cfg->scan_req_int; in brcmf_cfg80211_escan()
1038 if (test_bit(BRCMF_SCAN_STATUS_BUSY, &cfg->scan_status)) { in brcmf_cfg80211_escan()
1039 brcmf_err("Scanning already: status (%lu)\n", cfg->scan_status); in brcmf_cfg80211_escan()
1042 if (test_bit(BRCMF_SCAN_STATUS_ABORT, &cfg->scan_status)) { in brcmf_cfg80211_escan()
1044 cfg->scan_status); in brcmf_cfg80211_escan()
1047 if (test_bit(BRCMF_SCAN_STATUS_SUPPRESS, &cfg->scan_status)) { in brcmf_cfg80211_escan()
1049 cfg->scan_status); in brcmf_cfg80211_escan()
1058 if (vif == cfg->p2p.bss_idx[P2PAPI_BSSCFG_DEVICE].vif) in brcmf_cfg80211_escan()
1059 vif = cfg->p2p.bss_idx[P2PAPI_BSSCFG_PRIMARY].vif; in brcmf_cfg80211_escan()
1072 cfg->scan_request = request; in brcmf_cfg80211_escan()
1073 set_bit(BRCMF_SCAN_STATUS_BUSY, &cfg->scan_status); in brcmf_cfg80211_escan()
1075 cfg->escan_info.run = brcmf_run_escan; in brcmf_cfg80211_escan()
1080 err = brcmf_do_escan(cfg, wiphy, vif->ifp, request); in brcmf_cfg80211_escan()
1097 passive_scan = cfg->active_scan ? 0 : 1; in brcmf_cfg80211_escan()
1120 mod_timer(&cfg->escan_timeout, jiffies + in brcmf_cfg80211_escan()
1126 clear_bit(BRCMF_SCAN_STATUS_BUSY, &cfg->scan_status); in brcmf_cfg80211_escan()
1127 cfg->scan_request = NULL; in brcmf_cfg80211_escan()
1190 struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy); in brcmf_cfg80211_set_wiphy_params() local
1191 struct net_device *ndev = cfg_to_ndev(cfg); in brcmf_cfg80211_set_wiphy_params()
1200 (cfg->conf->rts_threshold != wiphy->rts_threshold)) { in brcmf_cfg80211_set_wiphy_params()
1201 cfg->conf->rts_threshold = wiphy->rts_threshold; in brcmf_cfg80211_set_wiphy_params()
1202 err = brcmf_set_rts(ndev, cfg->conf->rts_threshold); in brcmf_cfg80211_set_wiphy_params()
1207 (cfg->conf->frag_threshold != wiphy->frag_threshold)) { in brcmf_cfg80211_set_wiphy_params()
1208 cfg->conf->frag_threshold = wiphy->frag_threshold; in brcmf_cfg80211_set_wiphy_params()
1209 err = brcmf_set_frag(ndev, cfg->conf->frag_threshold); in brcmf_cfg80211_set_wiphy_params()
1214 && (cfg->conf->retry_long != wiphy->retry_long)) { in brcmf_cfg80211_set_wiphy_params()
1215 cfg->conf->retry_long = wiphy->retry_long; in brcmf_cfg80211_set_wiphy_params()
1216 err = brcmf_set_retry(ndev, cfg->conf->retry_long, true); in brcmf_cfg80211_set_wiphy_params()
1221 && (cfg->conf->retry_short != wiphy->retry_short)) { in brcmf_cfg80211_set_wiphy_params()
1222 cfg->conf->retry_short = wiphy->retry_short; in brcmf_cfg80211_set_wiphy_params()
1223 err = brcmf_set_retry(ndev, cfg->conf->retry_short, false); in brcmf_cfg80211_set_wiphy_params()
1258 struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(vif->wdev.wiphy); in brcmf_link_down() local
1276 clear_bit(BRCMF_SCAN_STATUS_SUPPRESS, &cfg->scan_status); in brcmf_link_down()
1285 struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy); in brcmf_cfg80211_join_ibss() local
1392 cfg->channel = in brcmf_cfg80211_join_ibss()
1397 chanspec = chandef_to_chanspec(&cfg->d11inf, in brcmf_cfg80211_join_ibss()
1406 target_channel = cfg->channel; in brcmf_cfg80211_join_ibss()
1414 cfg->channel = 0; in brcmf_cfg80211_join_ibss()
1416 cfg->ibss_starter = false; in brcmf_cfg80211_join_ibss()
1729 struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy); in brcmf_cfg80211_connect() local
1752 if (ifp->vif == cfg->p2p.bss_idx[P2PAPI_BSSCFG_PRIMARY].vif) { in brcmf_cfg80211_connect()
1784 cfg->channel = in brcmf_cfg80211_connect()
1786 chanspec = channel_to_chanspec(&cfg->d11inf, chan); in brcmf_cfg80211_connect()
1788 cfg->channel, chan->center_freq, chanspec); in brcmf_cfg80211_connect()
1790 cfg->channel = 0; in brcmf_cfg80211_connect()
1841 if (cfg->channel) in brcmf_cfg80211_connect()
1861 if (cfg->channel) { in brcmf_cfg80211_connect()
1906 if (cfg->channel) { in brcmf_cfg80211_connect()
1955 struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy); in brcmf_cfg80211_set_tx_power() local
1956 struct net_device *ndev = cfg_to_ndev(cfg); in brcmf_cfg80211_set_tx_power()
2005 struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy); in brcmf_cfg80211_get_tx_power() local
2006 struct net_device *ndev = cfg_to_ndev(cfg); in brcmf_cfg80211_get_tx_power()
2527 struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy); in brcmf_cfg80211_dump_station() local
2534 cfg->assoclist.count = cpu_to_le32(BRCMF_MAX_ASSOCLIST); in brcmf_cfg80211_dump_station()
2536 &cfg->assoclist, in brcmf_cfg80211_dump_station()
2537 sizeof(cfg->assoclist)); in brcmf_cfg80211_dump_station()
2541 cfg->assoclist.count = 0; in brcmf_cfg80211_dump_station()
2545 if (idx < le32_to_cpu(cfg->assoclist.count)) { in brcmf_cfg80211_dump_station()
2546 memcpy(mac, cfg->assoclist.mac[idx], ETH_ALEN); in brcmf_cfg80211_dump_station()
2558 struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy); in brcmf_cfg80211_set_power_mgmt() local
2570 cfg->pwr_save = enabled; in brcmf_cfg80211_set_power_mgmt()
2597 static s32 brcmf_inform_single_bss(struct brcmf_cfg80211_info *cfg, in brcmf_inform_single_bss() argument
2600 struct wiphy *wiphy = cfg_to_wiphy(cfg); in brcmf_inform_single_bss()
2620 cfg->d11inf.decchspec(&ch); in brcmf_inform_single_bss()
2670 static s32 brcmf_inform_bss(struct brcmf_cfg80211_info *cfg) in brcmf_inform_bss() argument
2677 bss_list = (struct brcmf_scan_results *)cfg->escan_info.escan_buf; in brcmf_inform_bss()
2687 err = brcmf_inform_single_bss(cfg, bi); in brcmf_inform_bss()
2694 static s32 wl_inform_ibss(struct brcmf_cfg80211_info *cfg, in wl_inform_ibss() argument
2697 struct wiphy *wiphy = cfg_to_wiphy(cfg); in wl_inform_ibss()
2732 cfg->d11inf.decchspec(&ch); in wl_inform_ibss()
2775 static s32 brcmf_update_bss_info(struct brcmf_cfg80211_info *cfg, in brcmf_update_bss_info() argument
2794 *(__le32 *)cfg->extra_buf = cpu_to_le32(WL_EXTRA_BUF_MAX); in brcmf_update_bss_info()
2796 cfg->extra_buf, WL_EXTRA_BUF_MAX); in brcmf_update_bss_info()
2802 bi = (struct brcmf_bss_info_le *)(cfg->extra_buf + 4); in brcmf_update_bss_info()
2803 err = brcmf_inform_single_bss(cfg, bi); in brcmf_update_bss_info()
2834 void brcmf_abort_scanning(struct brcmf_cfg80211_info *cfg) in brcmf_abort_scanning() argument
2836 struct escan_info *escan = &cfg->escan_info; in brcmf_abort_scanning()
2838 set_bit(BRCMF_SCAN_STATUS_ABORT, &cfg->scan_status); in brcmf_abort_scanning()
2839 if (cfg->scan_request) { in brcmf_abort_scanning()
2841 brcmf_notify_escan_complete(cfg, escan->ifp, true, true); in brcmf_abort_scanning()
2843 clear_bit(BRCMF_SCAN_STATUS_BUSY, &cfg->scan_status); in brcmf_abort_scanning()
2844 clear_bit(BRCMF_SCAN_STATUS_ABORT, &cfg->scan_status); in brcmf_abort_scanning()
2849 struct brcmf_cfg80211_info *cfg = in brcmf_cfg80211_escan_timeout_worker() local
2853 brcmf_inform_bss(cfg); in brcmf_cfg80211_escan_timeout_worker()
2854 brcmf_notify_escan_complete(cfg, cfg->escan_info.ifp, true, true); in brcmf_cfg80211_escan_timeout_worker()
2859 struct brcmf_cfg80211_info *cfg = in brcmf_escan_timeout() local
2862 if (cfg->scan_request) { in brcmf_escan_timeout()
2864 schedule_work(&cfg->escan_timeout_work); in brcmf_escan_timeout()
2869 brcmf_compare_update_same_bss(struct brcmf_cfg80211_info *cfg, in brcmf_compare_update_same_bss() argument
2876 cfg->d11inf.decchspec(&ch_bss); in brcmf_compare_update_same_bss()
2878 cfg->d11inf.decchspec(&ch_bss_info_le); in brcmf_compare_update_same_bss()
2911 struct brcmf_cfg80211_info *cfg = ifp->drvr->config; in brcmf_cfg80211_escan_handler() local
2923 if (!test_bit(BRCMF_SCAN_STATUS_BUSY, &cfg->scan_status)) { in brcmf_cfg80211_escan_handler()
2942 if (brcmf_p2p_scan_finding_common_channel(cfg, bss_info_le)) in brcmf_cfg80211_escan_handler()
2945 if (!cfg->scan_request) { in brcmf_cfg80211_escan_handler()
2958 if (!(cfg_to_wiphy(cfg)->interface_modes & in brcmf_cfg80211_escan_handler()
2968 cfg->escan_info.escan_buf; in brcmf_cfg80211_escan_handler()
2978 if (brcmf_compare_update_same_bss(cfg, bss, in brcmf_cfg80211_escan_handler()
2982 memcpy(&(cfg->escan_info.escan_buf[list->buflen]), in brcmf_cfg80211_escan_handler()
2988 cfg->escan_info.escan_state = WL_ESCAN_STATE_IDLE; in brcmf_cfg80211_escan_handler()
2989 if (brcmf_p2p_scan_finding_common_channel(cfg, NULL)) in brcmf_cfg80211_escan_handler()
2991 if (cfg->scan_request) { in brcmf_cfg80211_escan_handler()
2992 brcmf_inform_bss(cfg); in brcmf_cfg80211_escan_handler()
2994 brcmf_notify_escan_complete(cfg, ifp, aborted, false); in brcmf_cfg80211_escan_handler()
3003 static void brcmf_init_escan(struct brcmf_cfg80211_info *cfg) in brcmf_init_escan() argument
3005 brcmf_fweh_register(cfg->pub, BRCMF_E_ESCAN_RESULT, in brcmf_init_escan()
3007 cfg->escan_info.escan_state = WL_ESCAN_STATE_IDLE; in brcmf_init_escan()
3009 init_timer(&cfg->escan_timeout); in brcmf_init_escan()
3010 cfg->escan_timeout.data = (unsigned long) cfg; in brcmf_init_escan()
3011 cfg->escan_timeout.function = brcmf_escan_timeout; in brcmf_init_escan()
3012 INIT_WORK(&cfg->escan_timeout_work, in brcmf_init_escan()
3066 struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy); in brcmf_cfg80211_resume() local
3067 struct net_device *ndev = cfg_to_ndev(cfg); in brcmf_cfg80211_resume()
3072 if (cfg->wowl_enabled) { in brcmf_cfg80211_resume()
3075 cfg->pre_wowl_pmmode); in brcmf_cfg80211_resume()
3078 cfg->wowl_enabled = false; in brcmf_cfg80211_resume()
3083 static void brcmf_configure_wowl(struct brcmf_cfg80211_info *cfg, in brcmf_configure_wowl() argument
3093 brcmf_fil_cmd_int_get(ifp, BRCMF_C_GET_PM, &cfg->pre_wowl_pmmode); in brcmf_configure_wowl()
3113 brcmf_bus_wowl_config(cfg->pub->bus_if, true); in brcmf_configure_wowl()
3114 cfg->wowl_enabled = true; in brcmf_configure_wowl()
3120 struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy); in brcmf_cfg80211_suspend() local
3121 struct net_device *ndev = cfg_to_ndev(cfg); in brcmf_cfg80211_suspend()
3134 if (test_bit(BRCMF_SCAN_STATUS_BUSY, &cfg->scan_status)) in brcmf_cfg80211_suspend()
3135 brcmf_abort_scanning(cfg); in brcmf_cfg80211_suspend()
3138 brcmf_bus_wowl_config(cfg->pub->bus_if, false); in brcmf_cfg80211_suspend()
3139 list_for_each_entry(vif, &cfg->vif_list, list) { in brcmf_cfg80211_suspend()
3158 brcmf_configure_wowl(cfg, ifp, wowl); in brcmf_cfg80211_suspend()
3164 cfg->scan_status = 0; in brcmf_cfg80211_suspend()
3197 struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy); in brcmf_cfg80211_set_pmksa() local
3199 struct pmkid_list *pmkids = &cfg->pmk_list->pmkids; in brcmf_cfg80211_set_pmksa()
3226 err = brcmf_update_pmklist(ndev, cfg->pmk_list, err); in brcmf_cfg80211_set_pmksa()
3236 struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy); in brcmf_cfg80211_del_pmksa() local
3254 pmkid_len = le32_to_cpu(cfg->pmk_list->pmkids.npmkid); in brcmf_cfg80211_del_pmksa()
3257 (pmksa->bssid, &cfg->pmk_list->pmkids.pmkid[i].BSSID, in brcmf_cfg80211_del_pmksa()
3263 memset(&cfg->pmk_list->pmkids.pmkid[i], 0, in brcmf_cfg80211_del_pmksa()
3266 memcpy(&cfg->pmk_list->pmkids.pmkid[i].BSSID, in brcmf_cfg80211_del_pmksa()
3267 &cfg->pmk_list->pmkids.pmkid[i + 1].BSSID, in brcmf_cfg80211_del_pmksa()
3269 memcpy(&cfg->pmk_list->pmkids.pmkid[i].PMKID, in brcmf_cfg80211_del_pmksa()
3270 &cfg->pmk_list->pmkids.pmkid[i + 1].PMKID, in brcmf_cfg80211_del_pmksa()
3273 cfg->pmk_list->pmkids.npmkid = cpu_to_le32(pmkid_len - 1); in brcmf_cfg80211_del_pmksa()
3277 err = brcmf_update_pmklist(ndev, cfg->pmk_list, err); in brcmf_cfg80211_del_pmksa()
3287 struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy); in brcmf_cfg80211_flush_pmksa() local
3295 memset(cfg->pmk_list, 0, sizeof(*cfg->pmk_list)); in brcmf_cfg80211_flush_pmksa()
3296 err = brcmf_update_pmklist(ndev, cfg->pmk_list, err); in brcmf_cfg80211_flush_pmksa()
3315 struct brcmf_cfg80211_info *cfg = ifp->drvr->config; in brcmf_notify_sched_scan_results() local
3320 struct wiphy *wiphy = cfg_to_wiphy(cfg); in brcmf_notify_sched_scan_results()
3393 if (test_bit(BRCMF_SCAN_STATUS_BUSY, &cfg->scan_status)) { in brcmf_notify_sched_scan_results()
3395 brcmf_abort_scanning(cfg); in brcmf_notify_sched_scan_results()
3398 set_bit(BRCMF_SCAN_STATUS_BUSY, &cfg->scan_status); in brcmf_notify_sched_scan_results()
3399 cfg->escan_info.run = brcmf_run_escan; in brcmf_notify_sched_scan_results()
3400 err = brcmf_do_escan(cfg, wiphy, ifp, request); in brcmf_notify_sched_scan_results()
3402 clear_bit(BRCMF_SCAN_STATUS_BUSY, &cfg->scan_status); in brcmf_notify_sched_scan_results()
3405 cfg->sched_escan = true; in brcmf_notify_sched_scan_results()
3406 cfg->scan_request = request; in brcmf_notify_sched_scan_results()
3467 struct brcmf_cfg80211_info *cfg = wiphy_priv(wiphy); in brcmf_cfg80211_sched_scan_start() local
3474 if (test_bit(BRCMF_SCAN_STATUS_BUSY, &cfg->scan_status)) { in brcmf_cfg80211_sched_scan_start()
3475 brcmf_err("Scanning already: status (%lu)\n", cfg->scan_status); in brcmf_cfg80211_sched_scan_start()
3478 if (test_bit(BRCMF_SCAN_STATUS_SUPPRESS, &cfg->scan_status)) { in brcmf_cfg80211_sched_scan_start()
3480 cfg->scan_status); in brcmf_cfg80211_sched_scan_start()
3557 struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy); in brcmf_cfg80211_sched_scan_stop() local
3561 if (cfg->sched_escan) in brcmf_cfg80211_sched_scan_stop()
3562 brcmf_notify_escan_complete(cfg, netdev_priv(ndev), true, true); in brcmf_cfg80211_sched_scan_stop()
4063 struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy); in brcmf_cfg80211_start_ap() local
4151 chanspec = chandef_to_chanspec(&cfg->d11inf, in brcmf_cfg80211_start_ap()
4342 struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy); in brcmf_cfg80211_del_station() local
4352 if (ifp->vif == cfg->p2p.bss_idx[P2PAPI_BSSCFG_DEVICE].vif) in brcmf_cfg80211_del_station()
4353 ifp = cfg->p2p.bss_idx[P2PAPI_BSSCFG_PRIMARY].vif->ifp; in brcmf_cfg80211_del_station()
4420 struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy); in brcmf_cfg80211_mgmt_tx() local
4463 if (vif == cfg->p2p.bss_idx[P2PAPI_BSSCFG_PRIMARY].vif) in brcmf_cfg80211_mgmt_tx()
4464 vif = cfg->p2p.bss_idx[P2PAPI_BSSCFG_DEVICE].vif; in brcmf_cfg80211_mgmt_tx()
4503 ack = brcmf_p2p_send_action_frame(cfg, cfg_to_ndev(cfg), in brcmf_cfg80211_mgmt_tx()
4524 struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy); in brcmf_cfg80211_cancel_remain_on_channel() local
4530 vif = cfg->p2p.bss_idx[P2PAPI_BSSCFG_DEVICE].vif; in brcmf_cfg80211_cancel_remain_on_channel()
4546 struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy); in brcmf_cfg80211_crit_proto_start() local
4556 set_bit(BRCMF_SCAN_STATUS_SUPPRESS, &cfg->scan_status); in brcmf_cfg80211_crit_proto_start()
4557 brcmf_abort_scanning(cfg); in brcmf_cfg80211_crit_proto_start()
4565 struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy); in brcmf_cfg80211_crit_proto_stop() local
4571 clear_bit(BRCMF_SCAN_STATUS_SUPPRESS, &cfg->scan_status); in brcmf_cfg80211_crit_proto_stop()
4685 struct brcmf_cfg80211_vif *brcmf_alloc_vif(struct brcmf_cfg80211_info *cfg, in brcmf_alloc_vif() argument
4699 vif->wdev.wiphy = cfg->wiphy; in brcmf_alloc_vif()
4709 list_for_each_entry(vif_walk, &cfg->vif_list, list) { in brcmf_alloc_vif()
4718 list_add_tail(&vif->list, &cfg->vif_list); in brcmf_alloc_vif()
4768 static bool brcmf_is_nonetwork(struct brcmf_cfg80211_info *cfg, in brcmf_is_nonetwork() argument
4788 static void brcmf_clear_assoc_ies(struct brcmf_cfg80211_info *cfg) in brcmf_clear_assoc_ies() argument
4790 struct brcmf_cfg80211_connect_info *conn_info = cfg_to_conn(cfg); in brcmf_clear_assoc_ies()
4800 static s32 brcmf_get_assoc_ies(struct brcmf_cfg80211_info *cfg, in brcmf_get_assoc_ies() argument
4804 struct brcmf_cfg80211_connect_info *conn_info = cfg_to_conn(cfg); in brcmf_get_assoc_ies()
4809 brcmf_clear_assoc_ies(cfg); in brcmf_get_assoc_ies()
4812 cfg->extra_buf, WL_ASSOC_INFO_MAX); in brcmf_get_assoc_ies()
4818 (struct brcmf_cfg80211_assoc_ielen_le *)cfg->extra_buf; in brcmf_get_assoc_ies()
4823 cfg->extra_buf, in brcmf_get_assoc_ies()
4831 kmemdup(cfg->extra_buf, conn_info->req_ie_len, in brcmf_get_assoc_ies()
4839 cfg->extra_buf, in brcmf_get_assoc_ies()
4847 kmemdup(cfg->extra_buf, conn_info->resp_ie_len, in brcmf_get_assoc_ies()
4860 brcmf_bss_roaming_done(struct brcmf_cfg80211_info *cfg, in brcmf_bss_roaming_done() argument
4866 struct brcmf_cfg80211_connect_info *conn_info = cfg_to_conn(cfg); in brcmf_bss_roaming_done()
4867 struct wiphy *wiphy = cfg_to_wiphy(cfg); in brcmf_bss_roaming_done()
4878 brcmf_get_assoc_ies(cfg, ifp); in brcmf_bss_roaming_done()
4880 brcmf_update_bss_info(cfg, ifp); in brcmf_bss_roaming_done()
4898 cfg->d11inf.decchspec(&ch); in brcmf_bss_roaming_done()
4921 brcmf_bss_connect_done(struct brcmf_cfg80211_info *cfg, in brcmf_bss_connect_done() argument
4927 struct brcmf_cfg80211_connect_info *conn_info = cfg_to_conn(cfg); in brcmf_bss_connect_done()
4934 brcmf_get_assoc_ies(cfg, ifp); in brcmf_bss_connect_done()
4936 brcmf_update_bss_info(cfg, ifp); in brcmf_bss_connect_done()
4957 brcmf_notify_connect_status_ap(struct brcmf_cfg80211_info *cfg, in brcmf_notify_connect_status_ap() argument
4969 ndev != cfg_to_ndev(cfg)) { in brcmf_notify_connect_status_ap()
4971 complete(&cfg->vif_disabled); in brcmf_notify_connect_status_ap()
5001 struct brcmf_cfg80211_info *cfg = ifp->drvr->config; in brcmf_notify_connect_status() local
5015 err = brcmf_notify_connect_status_ap(cfg, ndev, e, data); in brcmf_notify_connect_status()
5019 chan = ieee80211_get_channel(cfg->wiphy, cfg->channel); in brcmf_notify_connect_status()
5021 wl_inform_ibss(cfg, ndev, e->addr); in brcmf_notify_connect_status()
5028 brcmf_bss_connect_done(cfg, ndev, e, true); in brcmf_notify_connect_status()
5033 brcmf_bss_connect_done(cfg, ndev, e, false); in brcmf_notify_connect_status()
5037 if (ndev != cfg_to_ndev(cfg)) in brcmf_notify_connect_status()
5038 complete(&cfg->vif_disabled); in brcmf_notify_connect_status()
5040 } else if (brcmf_is_nonetwork(cfg, e)) { in brcmf_notify_connect_status()
5045 brcmf_bss_connect_done(cfg, ndev, e, false); in brcmf_notify_connect_status()
5055 struct brcmf_cfg80211_info *cfg = ifp->drvr->config; in brcmf_notify_roaming_status() local
5061 brcmf_bss_roaming_done(cfg, ifp->ndev, e); in brcmf_notify_roaming_status()
5063 brcmf_bss_connect_done(cfg, ifp->ndev, e, true); in brcmf_notify_roaming_status()
5090 struct brcmf_cfg80211_info *cfg = ifp->drvr->config; in brcmf_notify_vif_event() local
5092 struct brcmf_cfg80211_vif_event *event = &cfg->vif_event; in brcmf_notify_vif_event()
5106 if (!cfg->vif_event.vif) { in brcmf_notify_vif_event()
5116 SET_NETDEV_DEV(ifp->ndev, wiphy_dev(cfg->wiphy)); in brcmf_notify_vif_event()
5125 if (brcmf_cfg80211_vif_event_armed(cfg)) in brcmf_notify_vif_event()
5150 static void brcmf_register_event_handlers(struct brcmf_cfg80211_info *cfg) in brcmf_register_event_handlers() argument
5152 brcmf_fweh_register(cfg->pub, BRCMF_E_LINK, in brcmf_register_event_handlers()
5154 brcmf_fweh_register(cfg->pub, BRCMF_E_DEAUTH_IND, in brcmf_register_event_handlers()
5156 brcmf_fweh_register(cfg->pub, BRCMF_E_DEAUTH, in brcmf_register_event_handlers()
5158 brcmf_fweh_register(cfg->pub, BRCMF_E_DISASSOC_IND, in brcmf_register_event_handlers()
5160 brcmf_fweh_register(cfg->pub, BRCMF_E_ASSOC_IND, in brcmf_register_event_handlers()
5162 brcmf_fweh_register(cfg->pub, BRCMF_E_REASSOC_IND, in brcmf_register_event_handlers()
5164 brcmf_fweh_register(cfg->pub, BRCMF_E_ROAM, in brcmf_register_event_handlers()
5166 brcmf_fweh_register(cfg->pub, BRCMF_E_MIC_ERROR, in brcmf_register_event_handlers()
5168 brcmf_fweh_register(cfg->pub, BRCMF_E_SET_SSID, in brcmf_register_event_handlers()
5170 brcmf_fweh_register(cfg->pub, BRCMF_E_PFN_NET_FOUND, in brcmf_register_event_handlers()
5172 brcmf_fweh_register(cfg->pub, BRCMF_E_IF, in brcmf_register_event_handlers()
5174 brcmf_fweh_register(cfg->pub, BRCMF_E_P2P_PROBEREQ_MSG, in brcmf_register_event_handlers()
5176 brcmf_fweh_register(cfg->pub, BRCMF_E_P2P_DISC_LISTEN_COMPLETE, in brcmf_register_event_handlers()
5178 brcmf_fweh_register(cfg->pub, BRCMF_E_ACTION_FRAME_RX, in brcmf_register_event_handlers()
5180 brcmf_fweh_register(cfg->pub, BRCMF_E_ACTION_FRAME_COMPLETE, in brcmf_register_event_handlers()
5182 brcmf_fweh_register(cfg->pub, BRCMF_E_ACTION_FRAME_OFF_CHAN_COMPLETE, in brcmf_register_event_handlers()
5186 static void brcmf_deinit_priv_mem(struct brcmf_cfg80211_info *cfg) in brcmf_deinit_priv_mem() argument
5188 kfree(cfg->conf); in brcmf_deinit_priv_mem()
5189 cfg->conf = NULL; in brcmf_deinit_priv_mem()
5190 kfree(cfg->escan_ioctl_buf); in brcmf_deinit_priv_mem()
5191 cfg->escan_ioctl_buf = NULL; in brcmf_deinit_priv_mem()
5192 kfree(cfg->extra_buf); in brcmf_deinit_priv_mem()
5193 cfg->extra_buf = NULL; in brcmf_deinit_priv_mem()
5194 kfree(cfg->pmk_list); in brcmf_deinit_priv_mem()
5195 cfg->pmk_list = NULL; in brcmf_deinit_priv_mem()
5198 static s32 brcmf_init_priv_mem(struct brcmf_cfg80211_info *cfg) in brcmf_init_priv_mem() argument
5200 cfg->conf = kzalloc(sizeof(*cfg->conf), GFP_KERNEL); in brcmf_init_priv_mem()
5201 if (!cfg->conf) in brcmf_init_priv_mem()
5203 cfg->escan_ioctl_buf = kzalloc(BRCMF_DCMD_MEDLEN, GFP_KERNEL); in brcmf_init_priv_mem()
5204 if (!cfg->escan_ioctl_buf) in brcmf_init_priv_mem()
5206 cfg->extra_buf = kzalloc(WL_EXTRA_BUF_MAX, GFP_KERNEL); in brcmf_init_priv_mem()
5207 if (!cfg->extra_buf) in brcmf_init_priv_mem()
5209 cfg->pmk_list = kzalloc(sizeof(*cfg->pmk_list), GFP_KERNEL); in brcmf_init_priv_mem()
5210 if (!cfg->pmk_list) in brcmf_init_priv_mem()
5216 brcmf_deinit_priv_mem(cfg); in brcmf_init_priv_mem()
5221 static s32 wl_init_priv(struct brcmf_cfg80211_info *cfg) in wl_init_priv() argument
5225 cfg->scan_request = NULL; in wl_init_priv()
5226 cfg->pwr_save = true; in wl_init_priv()
5227 cfg->active_scan = true; /* we do active scan per default */ in wl_init_priv()
5228 cfg->dongle_up = false; /* dongle is not up yet */ in wl_init_priv()
5229 err = brcmf_init_priv_mem(cfg); in wl_init_priv()
5232 brcmf_register_event_handlers(cfg); in wl_init_priv()
5233 mutex_init(&cfg->usr_sync); in wl_init_priv()
5234 brcmf_init_escan(cfg); in wl_init_priv()
5235 brcmf_init_conf(cfg->conf); in wl_init_priv()
5236 init_completion(&cfg->vif_disabled); in wl_init_priv()
5240 static void wl_deinit_priv(struct brcmf_cfg80211_info *cfg) in wl_deinit_priv() argument
5242 cfg->dongle_up = false; /* dongle down */ in wl_deinit_priv()
5243 brcmf_abort_scanning(cfg); in wl_deinit_priv()
5244 brcmf_deinit_priv_mem(cfg); in wl_deinit_priv()
5366 static int brcmf_construct_chaninfo(struct brcmf_cfg80211_info *cfg, in brcmf_construct_chaninfo() argument
5369 struct brcmf_if *ifp = netdev_priv(cfg_to_ndev(cfg)); in brcmf_construct_chaninfo()
5396 wiphy = cfg_to_wiphy(cfg); in brcmf_construct_chaninfo()
5409 cfg->d11inf.decchspec(&ch); in brcmf_construct_chaninfo()
5455 cfg->d11inf.encchspec(&ch); in brcmf_construct_chaninfo()
5476 static int brcmf_enable_bw40_2g(struct brcmf_cfg80211_info *cfg) in brcmf_enable_bw40_2g() argument
5478 struct brcmf_if *ifp = netdev_priv(cfg_to_ndev(cfg)); in brcmf_enable_bw40_2g()
5516 cfg->d11inf.encchspec(&ch); in brcmf_enable_bw40_2g()
5529 band = cfg_to_wiphy(cfg)->bands[IEEE80211_BAND_2GHZ]; in brcmf_enable_bw40_2g()
5534 cfg->d11inf.decchspec(&ch); in brcmf_enable_bw40_2g()
5645 struct brcmf_cfg80211_info *cfg = wiphy_priv(wiphy); in brcmf_setup_wiphybands() local
5646 struct brcmf_if *ifp = netdev_priv(cfg_to_ndev(cfg)); in brcmf_setup_wiphybands()
5677 err = brcmf_construct_chaninfo(cfg, bw_cap); in brcmf_setup_wiphybands()
5683 wiphy = cfg_to_wiphy(cfg); in brcmf_setup_wiphybands()
5989 static s32 brcmf_config_dongle(struct brcmf_cfg80211_info *cfg) in brcmf_config_dongle() argument
5997 if (cfg->dongle_up) in brcmf_config_dongle()
6000 ndev = cfg_to_ndev(cfg); in brcmf_config_dongle()
6010 power_mode = cfg->pwr_save ? PM_FAST : PM_OFF; in brcmf_config_dongle()
6027 cfg->dongle_up = true; in brcmf_config_dongle()
6043 struct brcmf_cfg80211_info *cfg = ifp->drvr->config; in __brcmf_cfg80211_down() local
6059 brcmf_abort_scanning(cfg); in __brcmf_cfg80211_down()
6068 struct brcmf_cfg80211_info *cfg = ifp->drvr->config; in brcmf_cfg80211_up() local
6071 mutex_lock(&cfg->usr_sync); in brcmf_cfg80211_up()
6073 mutex_unlock(&cfg->usr_sync); in brcmf_cfg80211_up()
6081 struct brcmf_cfg80211_info *cfg = ifp->drvr->config; in brcmf_cfg80211_down() local
6084 mutex_lock(&cfg->usr_sync); in brcmf_cfg80211_down()
6086 mutex_unlock(&cfg->usr_sync); in brcmf_cfg80211_down()
6098 bool brcmf_get_vif_state_any(struct brcmf_cfg80211_info *cfg, in brcmf_get_vif_state_any() argument
6103 list_for_each_entry(vif, &cfg->vif_list, list) { in brcmf_get_vif_state_any()
6121 void brcmf_cfg80211_arm_vif_event(struct brcmf_cfg80211_info *cfg, in brcmf_cfg80211_arm_vif_event() argument
6124 struct brcmf_cfg80211_vif_event *event = &cfg->vif_event; in brcmf_cfg80211_arm_vif_event()
6132 bool brcmf_cfg80211_vif_event_armed(struct brcmf_cfg80211_info *cfg) in brcmf_cfg80211_vif_event_armed() argument
6134 struct brcmf_cfg80211_vif_event *event = &cfg->vif_event; in brcmf_cfg80211_vif_event_armed()
6143 int brcmf_cfg80211_wait_vif_event_timeout(struct brcmf_cfg80211_info *cfg, in brcmf_cfg80211_wait_vif_event_timeout() argument
6146 struct brcmf_cfg80211_vif_event *event = &cfg->vif_event; in brcmf_cfg80211_wait_vif_event_timeout()
6155 struct brcmf_cfg80211_info *cfg = wiphy_priv(wiphy); in brcmf_cfg80211_reg_notifier() local
6156 struct brcmf_if *ifp = netdev_priv(cfg_to_ndev(cfg)); in brcmf_cfg80211_reg_notifier()
6207 struct brcmf_cfg80211_info *cfg; in brcmf_cfg80211_attach() local
6229 cfg = wiphy_priv(wiphy); in brcmf_cfg80211_attach()
6230 cfg->wiphy = wiphy; in brcmf_cfg80211_attach()
6231 cfg->pub = drvr; in brcmf_cfg80211_attach()
6232 init_vif_event(&cfg->vif_event); in brcmf_cfg80211_attach()
6233 INIT_LIST_HEAD(&cfg->vif_list); in brcmf_cfg80211_attach()
6235 vif = brcmf_alloc_vif(cfg, NL80211_IFTYPE_STATION, false); in brcmf_cfg80211_attach()
6242 SET_NETDEV_DEV(ndev, wiphy_dev(cfg->wiphy)); in brcmf_cfg80211_attach()
6244 err = wl_init_priv(cfg); in brcmf_cfg80211_attach()
6258 cfg->d11inf.io_type = (u8)io_type; in brcmf_cfg80211_attach()
6259 brcmu_d11_attach(&cfg->d11inf); in brcmf_cfg80211_attach()
6288 err = brcmf_enable_bw40_2g(cfg); in brcmf_cfg80211_attach()
6300 drvr->config = cfg; in brcmf_cfg80211_attach()
6307 err = brcmf_p2p_attach(cfg, p2pdev_forced); in brcmf_cfg80211_attach()
6312 err = brcmf_btcoex_attach(cfg); in brcmf_cfg80211_attach()
6315 brcmf_p2p_detach(&cfg->p2p); in brcmf_cfg80211_attach()
6324 brcmf_fweh_register(cfg->pub, BRCMF_E_TDLS_PEER_EVENT, in brcmf_cfg80211_attach()
6335 return cfg; in brcmf_cfg80211_attach()
6338 wiphy_unregister(cfg->wiphy); in brcmf_cfg80211_attach()
6340 wl_deinit_priv(cfg); in brcmf_cfg80211_attach()
6348 void brcmf_cfg80211_detach(struct brcmf_cfg80211_info *cfg) in brcmf_cfg80211_detach() argument
6350 if (!cfg) in brcmf_cfg80211_detach()
6353 brcmf_btcoex_detach(cfg); in brcmf_cfg80211_detach()
6354 wiphy_unregister(cfg->wiphy); in brcmf_cfg80211_detach()
6355 wl_deinit_priv(cfg); in brcmf_cfg80211_detach()
6356 brcmf_free_wiphy(cfg->wiphy); in brcmf_cfg80211_detach()