Lines Matching refs:cfg
163 static bool check_dev_role_integrity(struct bcm_cfg80211 *cfg, u32 dev_role);
185 wl_update_apchan_bwcap(struct bcm_cfg80211 *cfg, struct net_device *ndev, chanspec_t chanspec);
331 struct bcm_cfg80211 *cfg = wl_get_cfg(ndev); in wl_cfg80211_check_vif_in_use() local
332 dhd_pub_t *dhd = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_check_vif_in_use()
336 nan_enabled = wl_cfgnan_is_enabled(cfg); in wl_cfg80211_check_vif_in_use()
339 if (nan_enabled || (wl_cfgp2p_vif_created(cfg)) || in wl_cfg80211_check_vif_in_use()
342 __FUNCTION__, nan_enabled, wl_cfgp2p_vif_created(cfg), in wl_cfg80211_check_vif_in_use()
353 wl_cfg80211_is_policy_config_allowed(struct bcm_cfg80211 *cfg) in wl_cfg80211_is_policy_config_allowed() argument
361 mutex_lock(&cfg->if_sync); in wl_cfg80211_is_policy_config_allowed()
363 sta_assoc_state = (wl_get_drv_status(cfg, CONNECTED, bcmcfg_to_prmry_ndev(cfg)) || in wl_cfg80211_is_policy_config_allowed()
364 wl_get_drv_status(cfg, CONNECTING, bcmcfg_to_prmry_ndev(cfg))); in wl_cfg80211_is_policy_config_allowed()
365 active_sec_iface = wl_cfg80211_get_sec_iface(cfg); in wl_cfg80211_is_policy_config_allowed()
366 p2p_disc_on = wl_get_p2p_status(cfg, SCANNING); in wl_cfg80211_is_policy_config_allowed()
369 if (cfg->nancfg) { in wl_cfg80211_is_policy_config_allowed()
370 nan_init_state = cfg->nancfg->nan_init_state; in wl_cfg80211_is_policy_config_allowed()
383 mutex_unlock(&cfg->if_sync); in wl_cfg80211_is_policy_config_allowed()
392 struct bcm_cfg80211 *cfg = wl_get_cfg(ndev); in wl_cfg80211_set_iface_conc_disc() local
393 if (!cfg) { in wl_cfg80211_set_iface_conc_disc()
398 if (wl_cfg80211_is_policy_config_allowed(cfg) != BCME_OK) { in wl_cfg80211_set_iface_conc_disc()
404 cfg->conc_disc |= arg_val; in wl_cfg80211_set_iface_conc_disc()
406 cfg->conc_disc &= ~arg_val; in wl_cfg80211_set_iface_conc_disc()
414 struct bcm_cfg80211 *cfg = wl_get_cfg(ndev); in wl_cfg80211_get_iface_conc_disc() local
415 if (!cfg) { in wl_cfg80211_get_iface_conc_disc()
419 return cfg->conc_disc; in wl_cfg80211_get_iface_conc_disc()
431 struct bcm_cfg80211 *cfg = wl_get_cfg(ndev); in wl_cfg80211_set_iface_policy() local
432 if (!cfg) { in wl_cfg80211_set_iface_policy()
437 if (wl_cfg80211_is_policy_config_allowed(cfg) != BCME_OK) { in wl_cfg80211_set_iface_policy()
453 bzero(&cfg->iface_data, sizeof(iface_mgmt_data_t)); in wl_cfg80211_set_iface_policy()
454 ret = memcpy_s(&cfg->iface_data, sizeof(iface_mgmt_data_t), arg, len); in wl_cfg80211_set_iface_policy()
460 if (cfg->iface_data.policy == WL_IF_POLICY_ROLE_PRIORITY) { in wl_cfg80211_set_iface_policy()
463 wl_iftype_to_str(i), cfg->iface_data.priority[i])); in wl_cfg80211_set_iface_policy()
474 struct bcm_cfg80211 *cfg = wl_get_cfg(ndev); in wl_cfg80211_get_iface_policy() local
475 if (!cfg) { in wl_cfg80211_get_iface_policy()
480 return cfg->iface_data.policy; in wl_cfg80211_get_iface_policy()
488 wl_cfg80211_get_sec_iface(struct bcm_cfg80211 *cfg) in wl_cfg80211_get_sec_iface() argument
493 dhd_pub_t *dhd = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_get_sec_iface()
497 p2p_ndev = wl_to_p2p_bss_ndev(cfg, in wl_cfg80211_get_sec_iface()
501 static_if_ndev = wl_cfg80211_static_if_active(cfg); in wl_cfg80211_get_sec_iface()
532 if (wl_cfgnan_is_dp_active(bcmcfg_to_prmry_ndev(cfg))) { in wl_cfg80211_get_sec_iface()
545 wl_cfg80211_data_if_mgmt(struct bcm_cfg80211 *cfg, in wl_cfg80211_data_if_mgmt() argument
550 wl_iftype_t sec_wl_if_type = wl_cfg80211_get_sec_iface(cfg); in wl_cfg80211_data_if_mgmt()
567 switch (cfg->iface_data.policy) { in wl_cfg80211_data_if_mgmt()
589 cfg->iface_data.priority[sec_wl_if_type], in wl_cfg80211_data_if_mgmt()
591 cfg->iface_data.priority[new_wl_iftype])); in wl_cfg80211_data_if_mgmt()
592 if (cfg->iface_data.priority[new_wl_iftype] > in wl_cfg80211_data_if_mgmt()
593 cfg->iface_data.priority[sec_wl_if_type]) { in wl_cfg80211_data_if_mgmt()
604 cfg->iface_data.policy)); in wl_cfg80211_data_if_mgmt()
609 ret = wl_cfg80211_delete_iface(cfg, sec_wl_if_type); in wl_cfg80211_data_if_mgmt()
616 wl_cfg80211_disc_if_mgmt(struct bcm_cfg80211 *cfg, in wl_cfg80211_disc_if_mgmt() argument
621 wl_cfg80211_get_sec_iface(cfg); in wl_cfg80211_disc_if_mgmt()
637 switch (cfg->iface_data.policy) { in wl_cfg80211_disc_if_mgmt()
668 ret = wl_cfg80211_delete_iface(cfg, sec_wl_if_type); in wl_cfg80211_disc_if_mgmt()
682 ret = wl_cfg80211_delete_iface(cfg, in wl_cfg80211_disc_if_mgmt()
689 cfg->iface_data.priority[sec_wl_if_type], in wl_cfg80211_disc_if_mgmt()
691 cfg->iface_data.priority[new_wl_iftype])); in wl_cfg80211_disc_if_mgmt()
692 if (cfg->iface_data.priority[new_wl_iftype] > in wl_cfg80211_disc_if_mgmt()
693 cfg->iface_data.priority[sec_wl_if_type]) { in wl_cfg80211_disc_if_mgmt()
695 ret = wl_cfg80211_delete_iface(cfg, in wl_cfg80211_disc_if_mgmt()
715 if ((cfg->iface_data.policy == WL_IF_POLICY_CUSTOM) && in wl_cfg80211_disc_if_mgmt()
751 wl_cfg80211_is_associated_discovery(struct bcm_cfg80211 *cfg, in wl_cfg80211_is_associated_discovery() argument
755 p2p_ndev = wl_to_p2p_bss_ndev(cfg, P2PAPI_BSSCFG_CONNECTION1); in wl_cfg80211_is_associated_discovery()
764 (wl_cfgnan_is_dp_active(bcmcfg_to_prmry_ndev(cfg)))) { in wl_cfg80211_is_associated_discovery()
773 wl_cfg80211_handle_discovery_config(struct bcm_cfg80211 *cfg, in wl_cfg80211_handle_discovery_config() argument
781 wl_cfg80211_get_sec_iface(cfg); in wl_cfg80211_handle_discovery_config()
785 if (wl_cfg80211_is_associated_discovery(cfg, in wl_cfg80211_handle_discovery_config()
793 ret = wl_cfg80211_disc_if_mgmt(cfg, new_wl_iftype, in wl_cfg80211_handle_discovery_config()
802 if ((cfg->nan_p2p_supported == TRUE) && in wl_cfg80211_handle_discovery_config()
803 (cfg->conc_disc == WL_NANP2P_CONC_SUPPORT)) { in wl_cfg80211_handle_discovery_config()
814 ret = wl_cfgnan_check_nan_disable_pending(cfg, true, true); in wl_cfg80211_handle_discovery_config()
824 ret = wl_cfg80211_deinit_p2p_discovery(cfg); in wl_cfg80211_handle_discovery_config()
840 wl_cfg80211_handle_if_role_conflict(struct bcm_cfg80211 *cfg, in wl_cfg80211_handle_if_role_conflict() argument
845 dhd_pub_t *dhd = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_handle_if_role_conflict()
856 if (wl_cfg80211_get_sec_iface(cfg) == WL_IF_TYPE_AP && in wl_cfg80211_handle_if_role_conflict()
862 if (wl_cfg80211_get_sec_iface(cfg) != WL_IFACE_NOT_PRESENT) { in wl_cfg80211_handle_if_role_conflict()
864 ret = wl_cfg80211_data_if_mgmt(cfg, new_wl_iftype); in wl_cfg80211_handle_if_role_conflict()
872 ret = wl_cfg80211_handle_discovery_config(cfg, new_wl_iftype); in wl_cfg80211_handle_if_role_conflict()
878 wl_release_vif_macaddr(struct bcm_cfg80211 *cfg, u8 *mac_addr, u16 wl_iftype) in wl_release_vif_macaddr() argument
880 struct net_device *ndev = bcmcfg_to_prmry_ndev(cfg); in wl_release_vif_macaddr()
912 if (toggled_bit & cfg->vif_macaddr_mask) { in wl_release_vif_macaddr()
916 cfg->vif_macaddr_mask &= ~toggled_bit; in wl_release_vif_macaddr()
918 MAC2STRDBG(mac_addr), toggled_bit, cfg->vif_macaddr_mask)); in wl_release_vif_macaddr()
922 toggled_bit, cfg->vif_macaddr_mask)); in wl_release_vif_macaddr()
930 wl_get_vif_macaddr(struct bcm_cfg80211 *cfg, u16 wl_iftype, u8 *mac_addr) in wl_get_vif_macaddr() argument
932 struct ether_addr *p2p_dev_addr = wl_to_p2p_bss_macaddr(cfg, P2PAPI_BSSCFG_DEVICE); in wl_get_vif_macaddr()
933 struct net_device *ndev = bcmcfg_to_prmry_ndev(cfg); in wl_get_vif_macaddr()
977 toggle_mask = cfg->vif_macaddr_mask; in wl_get_vif_macaddr()
985 cfg->vif_macaddr_mask |= toggle_bit; in wl_get_vif_macaddr()
987 toggle_bit, toggle_bytes, cfg->vif_macaddr_mask)); in wl_get_vif_macaddr()
1028 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_add_virtual_iface() local
1032 if (!cfg) { in wl_cfg80211_add_virtual_iface()
1037 primary_ndev = bcmcfg_to_prmry_ndev(cfg); in wl_cfg80211_add_virtual_iface()
1038 if (unlikely(!wl_get_drv_status(cfg, READY, primary_ndev))) { in wl_cfg80211_add_virtual_iface()
1052 wdev = wl_cfg80211_add_if(cfg, primary_ndev, wl_iftype, name, NULL); in wl_cfg80211_add_virtual_iface()
1062 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_del_virtual_iface() local
1069 if (!cfg) { in wl_cfg80211_del_virtual_iface()
1073 primary_ndev = bcmcfg_to_prmry_ndev(cfg); in wl_cfg80211_del_virtual_iface()
1086 if ((ret = wl_cfg80211_del_if(cfg, primary_ndev, in wl_cfg80211_del_virtual_iface()
1103 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_change_p2prole() local
1106 dhd_pub_t *dhd = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_change_p2prole()
1114 if (!cfg->p2p || !wl_cfgp2p_vif_created(cfg)) { in wl_cfg80211_change_p2prole()
1125 wl_cfgscan_cancel_scan(cfg); in wl_cfg80211_change_p2prole()
1127 index = wl_get_bssidx_by_wdev(cfg, ndev->ieee80211_ptr); in wl_cfg80211_change_p2prole()
1132 if (wl_cfgp2p_find_type(cfg, index, &conn_idx) != BCME_OK) { in wl_cfg80211_change_p2prole()
1146 if ((cfg->p2p->p2p_go_count > 0) && (type == NL80211_IFTYPE_P2P_GO)) { in wl_cfg80211_change_p2prole()
1159 if (wl_get_mode_by_netdev(cfg, ndev) == WL_MODE_AP) { in wl_cfg80211_change_p2prole()
1162 cfg->p2p->p2p_go_count--; in wl_cfg80211_change_p2prole()
1164 err = wl_cfgp2p_ifdisable(cfg, &p2p_dev_addr); in wl_cfg80211_change_p2prole()
1170 wait_for_completion_timeout(&cfg->iface_disable, in wl_cfg80211_change_p2prole()
1178 wl_set_p2p_status(cfg, IF_CHANGING); in wl_cfg80211_change_p2prole()
1179 wl_clr_p2p_status(cfg, IF_CHANGED); in wl_cfg80211_change_p2prole()
1180 wl_cfgp2p_ifchange(cfg, &p2p_dev_addr, in wl_cfg80211_change_p2prole()
1182 wait_event_interruptible_timeout(cfg->netif_change_event, in wl_cfg80211_change_p2prole()
1183 (wl_get_p2p_status(cfg, IF_CHANGED) == true), in wl_cfg80211_change_p2prole()
1186 wl_clr_p2p_status(cfg, IF_CHANGING); in wl_cfg80211_change_p2prole()
1187 wl_clr_p2p_status(cfg, IF_CHANGED); in wl_cfg80211_change_p2prole()
1190 wl_set_drv_status(cfg, CONNECTED, ndev); in wl_cfg80211_change_p2prole()
1211 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_change_virtual_iface() local
1214 dhd_pub_t *dhd = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_change_virtual_iface()
1225 primary_ndev = bcmcfg_to_prmry_ndev(cfg); in wl_cfg80211_change_virtual_iface()
1232 mutex_lock(&cfg->if_sync); in wl_cfg80211_change_virtual_iface()
1233 netinfo = wl_get_netinfo_by_wdev(cfg, ndev->ieee80211_ptr); in wl_cfg80211_change_virtual_iface()
1236 if (wl_cfg80211_static_if(cfg, ndev)) { in wl_cfg80211_change_virtual_iface()
1283 if ((err = wl_cfg80211_add_del_bss(cfg, ndev, in wl_cfg80211_change_virtual_iface()
1294 if (!wl_get_drv_status(cfg, AP_CREATED, ndev) && in wl_cfg80211_change_virtual_iface()
1295 wl_get_drv_status(cfg, READY, ndev)) { in wl_cfg80211_change_virtual_iface()
1299 err = wl_cfg80211_set_ap_role(cfg, ndev); in wl_cfg80211_change_virtual_iface()
1325 if (wl_get_drv_status(cfg, READY, ndev)) { in wl_cfg80211_change_virtual_iface()
1358 mutex_unlock(&cfg->if_sync); in wl_cfg80211_change_virtual_iface()
1366 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_channel_to_chanspec() local
1376 buf = (u8 *)MALLOC(cfg->osh, LOCAL_BUF_SIZE); in wl_channel_to_chanspec()
1383 0, buf, LOCAL_BUF_SIZE, 0, &cfg->ioctl_buf_sync); in wl_channel_to_chanspec()
1415 MFREE(cfg->osh, buf, LOCAL_BUF_SIZE); in wl_channel_to_chanspec()
1424 wl_cfg80211_cleanup_virtual_ifaces(struct bcm_cfg80211 *cfg, bool rtnl_lock_reqd) in wl_cfg80211_cleanup_virtual_ifaces() argument
1434 primary_ndev = bcmcfg_to_prmry_ndev(cfg); in wl_cfg80211_cleanup_virtual_ifaces()
1437 for_each_ndev(cfg, iter, next) { in wl_cfg80211_cleanup_virtual_ifaces()
1443 if (!wl_cfg80211_static_if(cfg, iter->ndev)) in wl_cfg80211_cleanup_virtual_ifaces()
1553 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_set_channel() local
1555 dhd_pub_t *dhd = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_set_channel()
1559 dev = ndev_to_wlc_ndev(dev, cfg); in wl_cfg80211_set_channel()
1585 if (!(cfg->p2p_6g_enabled)) { in wl_cfg80211_set_channel()
1624 if (wl_get_mode_by_netdev(cfg, dev) == WL_MODE_AP && in wl_cfg80211_set_channel()
1626 wl_get_drv_status(cfg, CONNECTED, bcmcfg_to_prmry_ndev(cfg))) { in wl_cfg80211_set_channel()
1627 u32 *sta_chanspec = (u32 *)wl_read_prof(cfg, in wl_cfg80211_set_channel()
1628 bcmcfg_to_prmry_ndev(cfg), WL_PROF_CHAN); in wl_cfg80211_set_channel()
1662 if (cfg->acs_chspec && in wl_cfg80211_set_channel()
1663 CHSPEC_IS6G(cfg->acs_chspec) && in wl_cfg80211_set_channel()
1664 (wf_chspec_ctlchspec(cfg->acs_chspec) == wf_chspec_ctlchspec(cur_chspec))) { in wl_cfg80211_set_channel()
1665 WL_DBG(("using acs_chanspec %x\n", cfg->acs_chspec)); in wl_cfg80211_set_channel()
1666 cur_chspec = cfg->acs_chspec; in wl_cfg80211_set_channel()
1667 cfg->acs_chspec = 0; in wl_cfg80211_set_channel()
1692 if (wl_get_mode_by_netdev(cfg, dev) == WL_MODE_AP && in wl_cfg80211_set_channel()
1693 DHD_OPMODE_SUPPORTED(cfg->pub, DHD_FLAG_HOSTAP_MODE) && in wl_cfg80211_set_channel()
1695 !wl_get_drv_status(cfg, CONNECTED, in wl_cfg80211_set_channel()
1696 bcmcfg_to_prmry_ndev(cfg))) { in wl_cfg80211_set_channel()
1699 wl_cfg80211_set_frameburst(cfg, FALSE); in wl_cfg80211_set_channel()
1730 dev != bcmcfg_to_prmry_ndev(cfg)) { in wl_cfg80211_set_channel()
1741 if (!err && (wl_get_mode_by_netdev(cfg, dev) == WL_MODE_AP)) { in wl_cfg80211_set_channel()
1743 cfg->ap_oper_channel = wl_freq_to_chanspec(center_freq); in wl_cfg80211_set_channel()
1746 wl_flush_fw_log_buffer(bcmcfg_to_prmry_ndev(cfg), in wl_cfg80211_set_channel()
1800 struct bcm_cfg80211 *cfg = NULL; in wl_validate_fils_ind_ie() local
1810 cfg = wl_get_cfg(dev); in wl_validate_fils_ind_ie()
1811 if (!cfg) { in wl_validate_fils_ind_ie()
1817 iov_buf = MALLOCZ(cfg->osh, iov_buf_size); in wl_validate_fils_ind_ie()
1835 cfg->ioctl_buf, WLC_IOCTL_SMLEN, &cfg->ioctl_buf_sync); in wl_validate_fils_ind_ie()
1847 MFREE(cfg->osh, iov_buf, iov_buf_size); in wl_validate_fils_ind_ie()
1907 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_validate_wpa2ie() local
1908 struct wl_security *sec = wl_read_prof(cfg, dev, WL_PROF_SEC); in wl_validate_wpa2ie()
2071 cfg->bip_pos = in wl_validate_wpa2ie()
2074 cfg->bip_pos = NULL; in wl_validate_wpa2ie()
2093 cfg->mfp_mode = mfp; in wl_validate_wpa2ie()
2132 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_validate_wpaie() local
2133 struct wl_security *sec = wl_read_prof(cfg, dev, WL_PROF_SEC); in wl_validate_wpaie()
2378 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_validate_wpaie_wpa2ie() local
2379 struct wl_security *sec = wl_read_prof(cfg, dev, WL_PROF_SEC); in wl_validate_wpaie_wpa2ie()
2505 cfg->mfp_mode = mfp; in wl_validate_wpaie_wpa2ie()
2556 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_bcn_validate_sec() local
2557 wl_cfgbss_t *bss = wl_get_cfgbss_by_wdev(cfg, dev->ieee80211_ptr); in wl_cfg80211_bcn_validate_sec()
2558 struct wl_security *sec = wl_read_prof(cfg, dev, WL_PROF_SEC); in wl_cfg80211_bcn_validate_sec()
2600 MFREE(cfg->osh, bss->rsn_ie, bss->rsn_ie[1] in wl_cfg80211_bcn_validate_sec()
2605 MFREE(cfg->osh, bss->wpa_ie, bss->wpa_ie[1] in wl_cfg80211_bcn_validate_sec()
2610 MFREE(cfg->osh, bss->wps_ie, bss->wps_ie[1] + 2); in wl_cfg80211_bcn_validate_sec()
2614 MFREE(cfg->osh, bss->fils_ind_ie, bss->fils_ind_ie[1] in wl_cfg80211_bcn_validate_sec()
2621 bss->wpa_ie = MALLOCZ(cfg->osh, in wl_cfg80211_bcn_validate_sec()
2632 bss->rsn_ie = MALLOCZ(cfg->osh, in wl_cfg80211_bcn_validate_sec()
2643 bss->fils_ind_ie = MALLOCZ(cfg->osh, in wl_cfg80211_bcn_validate_sec()
2662 bss->wps_ie = MALLOCZ(cfg->osh, ies->wps_ie_len); in wl_cfg80211_bcn_validate_sec()
2682 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_bcn_set_params() local
2709 bzero(cfg->hostapd_ssid.SSID, DOT11_MAX_SSID_LEN); in wl_cfg80211_bcn_set_params()
2710 memcpy(cfg->hostapd_ssid.SSID, info->ssid, info->ssid_len); in wl_cfg80211_bcn_set_params()
2711 cfg->hostapd_ssid.SSID_len = (uint32)info->ssid_len; in wl_cfg80211_bcn_set_params()
2714 bzero(cfg->p2p->ssid.SSID, DOT11_MAX_SSID_LEN); in wl_cfg80211_bcn_set_params()
2715 memcpy(cfg->p2p->ssid.SSID, info->ssid, info->ssid_len); in wl_cfg80211_bcn_set_params()
2716 cfg->p2p->ssid.SSID_len = (uint32)info->ssid_len; in wl_cfg80211_bcn_set_params()
2765 struct bcm_cfg80211 *cfg, in wl_cfg80211_set_ap_role() argument
2776 dhd_pub_t *dhd = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_set_ap_role()
2779 new_chip = dhd_conf_new_chip_check(cfg->pub); in wl_cfg80211_set_ap_role()
2781 if ((bssidx = wl_get_bssidx_by_wdev(cfg, dev->ieee80211_ptr)) < 0) { in wl_cfg80211_set_ap_role()
2789 if ((err = wl_cfg80211_add_del_bss(cfg, dev, bssidx, in wl_cfg80211_set_ap_role()
2842 if (wl_get_drv_status_all(cfg, CONNECTED) > 0) { in wl_cfg80211_set_ap_role()
2930 wl_set_drv_status(cfg, AP_CREATING, dev); in wl_cfg80211_set_ap_role()
2938 struct bcm_cfg80211 *cfg = NULL; in wl_cfg80211_ap_timeout_work() local
2940 BCM_SET_CONTAINER_OF(cfg, work, struct bcm_cfg80211, ap_work.work); in wl_cfg80211_ap_timeout_work()
2943 dhdp = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_ap_timeout_work()
2962 net_os_send_hang_message(bcmcfg_to_prmry_ndev(cfg)); in wl_cfg80211_ap_timeout_work()
2975 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_bcn_bringup_ap() local
2989 dhd_pub_t *dhd = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_bcn_bringup_ap()
2994 is_rsdb_supported = DHD_OPMODE_SUPPORTED(cfg->pub, DHD_FLAG_RSDB_MODE); in wl_cfg80211_bcn_bringup_ap()
3002 wl_clr_drv_status(cfg, AP_CREATED, dev); in wl_cfg80211_bcn_bringup_ap()
3012 wl_cfgscan_cancel_scan(cfg); in wl_cfg80211_bcn_bringup_ap()
3018 if (schedule_delayed_work(&cfg->ap_work, in wl_cfg80211_bcn_bringup_ap()
3029 err = wldev_iovar_setbuf_bsscfg(dev, "ssid", &cfg->p2p->ssid, in wl_cfg80211_bcn_bringup_ap()
3030 sizeof(cfg->p2p->ssid), cfg->ioctl_buf, WLC_IOCTL_MAXLEN, in wl_cfg80211_bcn_bringup_ap()
3031 bssidx, &cfg->ioctl_buf_sync); in wl_cfg80211_bcn_bringup_ap()
3037 if ((err = wl_cfg80211_bss_up(cfg, dev, bssidx, 1)) < 0) { in wl_cfg80211_bcn_bringup_ap()
3041 wl_clr_drv_status(cfg, AP_CREATING, dev); in wl_cfg80211_bcn_bringup_ap()
3048 err = wl_cfg80211_set_ap_role(cfg, dev); in wl_cfg80211_bcn_bringup_ap()
3058 wl_clr_drv_status(cfg, AP_CREATING, dev); in wl_cfg80211_bcn_bringup_ap()
3082 err = wl_cfg80211_set_he_mode(dev, cfg, bssidx, WL_HE_FEATURES_HE_AP, FALSE); in wl_cfg80211_bcn_bringup_ap()
3090 cfg->ioctl_buf, WLC_IOCTL_SMLEN, bssidx, &cfg->ioctl_buf_sync); in wl_cfg80211_bcn_bringup_ap()
3111 if (cfg->bip_pos) { in wl_cfg80211_bcn_bringup_ap()
3113 (const void *)(cfg->bip_pos), WPA_SUITE_LEN, cfg->ioctl_buf, in wl_cfg80211_bcn_bringup_ap()
3114 WLC_IOCTL_SMLEN, bssidx, &cfg->ioctl_buf_sync); in wl_cfg80211_bcn_bringup_ap()
3119 if (wl_customer6_legacy_chip_check(cfg, in wl_cfg80211_bcn_bringup_ap()
3120 bcmcfg_to_prmry_ndev(cfg))) { in wl_cfg80211_bcn_bringup_ap()
3145 struct net_device *primary_ndev = bcmcfg_to_prmry_ndev(cfg); in wl_cfg80211_bcn_bringup_ap()
3163 if ((wsec == WEP_ENABLED) && cfg->wep_key.len) { in wl_cfg80211_bcn_bringup_ap()
3165 err = wldev_iovar_setbuf_bsscfg(dev, "wsec_key", &cfg->wep_key, in wl_cfg80211_bcn_bringup_ap()
3166 sizeof(struct wl_wsec_key), cfg->ioctl_buf, in wl_cfg80211_bcn_bringup_ap()
3167 WLC_IOCTL_MAXLEN, bssidx, &cfg->ioctl_buf_sync); in wl_cfg80211_bcn_bringup_ap()
3169 bzero(&cfg->wep_key, sizeof(struct wl_wsec_key)); in wl_cfg80211_bcn_bringup_ap()
3177 if (cfg->mfp_mode) { in wl_cfg80211_bcn_bringup_ap()
3181 err = wldev_iovar_setint_bsscfg(dev, "mfp", cfg->mfp_mode, bssidx); in wl_cfg80211_bcn_bringup_ap()
3195 join_params.ssid.SSID_len = MIN(cfg->hostapd_ssid.SSID_len, in wl_cfg80211_bcn_bringup_ap()
3197 memcpy(join_params.ssid.SSID, cfg->hostapd_ssid.SSID, in wl_cfg80211_bcn_bringup_ap()
3214 if ((err = wl_cfg80211_bss_up(cfg, dev, bssidx, 1)) < 0) { in wl_cfg80211_bcn_bringup_ap()
3228 if (cfg->wep_key.len) { in wl_cfg80211_bcn_bringup_ap()
3229 bzero(&cfg->wep_key, sizeof(struct wl_wsec_key)); in wl_cfg80211_bcn_bringup_ap()
3233 if (cfg->mfp_mode) { in wl_cfg80211_bcn_bringup_ap()
3234 cfg->mfp_mode = 0; in wl_cfg80211_bcn_bringup_ap()
3237 if (cfg->bip_pos) { in wl_cfg80211_bcn_bringup_ap()
3238 cfg->bip_pos = NULL; in wl_cfg80211_bcn_bringup_ap()
3245 if (delayed_work_pending(&cfg->ap_work)) { in wl_cfg80211_bcn_bringup_ap()
3246 cancel_delayed_work_sync(&cfg->ap_work); in wl_cfg80211_bcn_bringup_ap()
3262 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_parse_ap_ies() local
3263 dhd_pub_t *dhd = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_parse_ap_ies()
3276 if ((err = wl_cfg80211_config_rsnxe_ie(cfg, dev, in wl_cfg80211_parse_ap_ies()
3312 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_set_ies() local
3313 dhd_pub_t *dhd = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_set_ies()
3319 if ((err = wl_cfg80211_set_mgmt_vndr_ies(cfg, ndev_to_cfgdev(dev), bssidx, in wl_cfg80211_set_ies()
3342 if ((err = wl_cfg80211_set_mgmt_vndr_ies(cfg, ndev_to_cfgdev(dev), bssidx, in wl_cfg80211_set_ies()
3359 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_hostapd_sec() local
3360 wl_cfgbss_t *bss = wl_get_cfgbss_by_wdev(cfg, dev->ieee80211_ptr); in wl_cfg80211_hostapd_sec()
3374 MFREE(cfg->osh, bss->wps_ie, bss->wps_ie[1] + 2); in wl_cfg80211_hostapd_sec()
3375 bss->wps_ie = MALLOCZ(cfg->osh, ies->wps_ie_len); in wl_cfg80211_hostapd_sec()
3381 bss->wps_ie = MALLOCZ(cfg->osh, ies->wps_ie_len); in wl_cfg80211_hostapd_sec()
3393 bss->wpa_ie = MALLOCZ(cfg->osh, in wl_cfg80211_hostapd_sec()
3399 bss->rsn_ie = MALLOCZ(cfg->osh, in wl_cfg80211_hostapd_sec()
3411 MFREE(cfg->osh, bss->wpa_ie, in wl_cfg80211_hostapd_sec()
3414 bss->wpa_ie = MALLOCZ(cfg->osh, in wl_cfg80211_hostapd_sec()
3426 bss->wpa_ie = MALLOCZ(cfg->osh, in wl_cfg80211_hostapd_sec()
3439 MFREE(cfg->osh, bss->rsn_ie, in wl_cfg80211_hostapd_sec()
3441 bss->rsn_ie = MALLOCZ(cfg->osh, in wl_cfg80211_hostapd_sec()
3453 bss->rsn_ie = MALLOCZ(cfg->osh, in wl_cfg80211_hostapd_sec()
3466 wl_cfg80211_bss_up(cfg, dev, bssidx, 0); in wl_cfg80211_hostapd_sec()
3471 wl_cfg80211_bss_up(cfg, dev, bssidx, 1); in wl_cfg80211_hostapd_sec()
3482 bss->wpa_ie = MALLOCZ(cfg->osh, in wl_cfg80211_hostapd_sec()
3491 bss->rsn_ie = MALLOCZ(cfg->osh, in wl_cfg80211_hostapd_sec()
3504 MFREE(cfg->osh, bss->rsn_ie, in wl_cfg80211_hostapd_sec()
3507 bss->wpa_ie = MALLOCZ(cfg->osh, in wl_cfg80211_hostapd_sec()
3519 MFREE(cfg->osh, bss->rsn_ie, in wl_cfg80211_hostapd_sec()
3521 bss->rsn_ie = MALLOCZ(cfg->osh, in wl_cfg80211_hostapd_sec()
3534 wl_cfg80211_bss_up(cfg, dev, bssidx, 0); in wl_cfg80211_hostapd_sec()
3539 wl_cfg80211_bss_up(cfg, dev, bssidx, 1); in wl_cfg80211_hostapd_sec()
3550 struct bcm_cfg80211 *cfg, in wl_cfg80211_set_scb_timings() argument
3563 sizeof(wl_scb_probe_t), cfg->ioctl_buf, WLC_IOCTL_SMLEN, in wl_cfg80211_set_scb_timings()
3564 &cfg->ioctl_buf_sync); in wl_cfg80211_set_scb_timings()
3609 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_start_ap() local
3615 dhd_pub_t *dhd = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_start_ap()
3620 if ((bssidx = wl_get_bssidx_by_wdev(cfg, dev->ieee80211_ptr)) < 0) { in wl_cfg80211_start_ap()
3625 if (p2p_is_on(cfg) && (dev->ieee80211_ptr->iftype == NL80211_IFTYPE_P2P_GO)) { in wl_cfg80211_start_ap()
3629 if (!wl_get_drv_status(cfg, AP_CREATING, dev)) { in wl_cfg80211_start_ap()
3631 err = wl_cfg80211_set_ap_role(cfg, dev); in wl_cfg80211_start_ap()
3645 wl_wlfc_enable(cfg, TRUE); in wl_cfg80211_start_ap()
3672 wl_cfg80211_tdls_config(cfg, TDLS_STATE_AP_CREATE, false); in wl_cfg80211_start_ap()
3676 if (!check_dev_role_integrity(cfg, dev_role)) { in wl_cfg80211_start_ap()
3736 if ((err = wl_cfg80211_set_scb_timings(cfg, dev))) { in wl_cfg80211_start_ap()
3741 wl_set_drv_status(cfg, CONNECTED, dev); in wl_cfg80211_start_ap()
3757 if ((err = wl_cfg80211_set_mgmt_vndr_ies(cfg, ndev_to_cfgdev(dev), bssidx, in wl_cfg80211_start_ap()
3785 wl_cfg80211_init_ap_rps(cfg); in wl_cfg80211_start_ap()
3820 wl_cfg80211_set_frameburst(cfg, TRUE); in wl_cfg80211_start_ap()
3823 wl_wlfc_enable(cfg, FALSE); in wl_cfg80211_start_ap()
3831 wl_cfg80211_tdls_config(cfg, TDLS_STATE_AP_DELETE, false); in wl_cfg80211_start_ap()
3853 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_stop_ap() local
3856 dhd_pub_t *dhd = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_stop_ap()
3861 if (wl_cfg80211_get_bus_state(cfg)) { in wl_cfg80211_stop_ap()
3867 is_rsdb_supported = DHD_OPMODE_SUPPORTED(cfg->pub, DHD_FLAG_RSDB_MODE); in wl_cfg80211_stop_ap()
3872 wl_clr_drv_status(cfg, AP_CREATING, dev); in wl_cfg80211_stop_ap()
3873 wl_clr_drv_status(cfg, AP_CREATED, dev); in wl_cfg80211_stop_ap()
3874 cfg->ap_oper_channel = INVCHANSPEC; in wl_cfg80211_stop_ap()
3887 if ((bssidx = wl_get_bssidx_by_wdev(cfg, dev->ieee80211_ptr)) < 0) { in wl_cfg80211_stop_ap()
3892 if (!check_dev_role_integrity(cfg, dev_role)) { in wl_cfg80211_stop_ap()
3905 wl_clr_drv_status(cfg, CONNECTED, dev); in wl_cfg80211_stop_ap()
3906 if ((err = wl_cfg80211_bss_up(cfg, dev, bssidx, 0)) < 0) { in wl_cfg80211_stop_ap()
3913 wl_cfg80211_set_frameburst(cfg, TRUE); in wl_cfg80211_stop_ap()
3938 if (wl_cfg80211_set_he_mode(dev, cfg, bssidx, WL_HE_FEATURES_HE_AP, in wl_cfg80211_stop_ap()
3944 wl_cfg80211_clear_per_bss_ies(cfg, dev->ieee80211_ptr); in wl_cfg80211_stop_ap()
3947 wl_cfg80211_init_ap_rps(cfg); in wl_cfg80211_stop_ap()
3957 DHD_OS_WAKE_LOCK_CTRL_TIMEOUT_ENABLE((dhd_pub_t *)(cfg->pub), in wl_cfg80211_stop_ap()
3959 DHD_OS_WAKE_LOCK_TIMEOUT((dhd_pub_t *)(cfg->pub)); in wl_cfg80211_stop_ap()
3974 wl_cfg80211_tdls_config(cfg, TDLS_STATE_AP_DELETE, false); in wl_cfg80211_stop_ap()
3985 wl_wlfc_enable(cfg, FALSE); in wl_cfg80211_stop_ap()
4001 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_change_beacon() local
4009 if ((bssidx = wl_get_bssidx_by_wdev(cfg, dev->ieee80211_ptr)) < 0) { in wl_cfg80211_change_beacon()
4023 if (!check_dev_role_integrity(cfg, dev_role)) { in wl_cfg80211_change_beacon()
4028 if ((dev_role == NL80211_IFTYPE_P2P_GO) && (cfg->p2p_wdev == NULL)) { in wl_cfg80211_change_beacon()
4075 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_add_set_beacon() local
4085 dhd_pub_t *dhd = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_add_set_beacon()
4091 if (dev == bcmcfg_to_prmry_ndev(cfg)) { in wl_cfg80211_add_set_beacon()
4095 else if (dev == cfg->p2p_net) { in wl_cfg80211_add_set_beacon()
4097 dev = bcmcfg_to_prmry_ndev(cfg); in wl_cfg80211_add_set_beacon()
4102 if ((bssidx = wl_get_bssidx_by_wdev(cfg, dev->ieee80211_ptr)) < 0) { in wl_cfg80211_add_set_beacon()
4115 if (!check_dev_role_integrity(cfg, dev_role)) { in wl_cfg80211_add_set_beacon()
4120 if ((dev_role == NL80211_IFTYPE_P2P_GO) && (cfg->p2p_wdev == NULL)) { in wl_cfg80211_add_set_beacon()
4133 bzero(&cfg->hostapd_ssid.SSID[0], DOT11_MAX_SSID_LEN); in wl_cfg80211_add_set_beacon()
4134 cfg->hostapd_ssid.SSID_len = MIN(ssid_ie->len, DOT11_MAX_SSID_LEN); in wl_cfg80211_add_set_beacon()
4135 memcpy(&cfg->hostapd_ssid.SSID[0], ssid_ie->data, in wl_cfg80211_add_set_beacon()
4136 cfg->hostapd_ssid.SSID_len); in wl_cfg80211_add_set_beacon()
4139 bzero(&cfg->p2p->ssid.SSID[0], DOT11_MAX_SSID_LEN); in wl_cfg80211_add_set_beacon()
4140 cfg->p2p->ssid.SSID_len = MIN(ssid_ie->len, DOT11_MAX_SSID_LEN); in wl_cfg80211_add_set_beacon()
4141 memcpy(cfg->p2p->ssid.SSID, ssid_ie->data, in wl_cfg80211_add_set_beacon()
4142 cfg->p2p->ssid.SSID_len); in wl_cfg80211_add_set_beacon()
4153 if ((err = wl_cfg80211_set_mgmt_vndr_ies(cfg, ndev_to_cfgdev(dev), bssidx, in wl_cfg80211_add_set_beacon()
4163 if ((err = wl_cfg80211_set_mgmt_vndr_ies(cfg, ndev_to_cfgdev(dev), bssidx, in wl_cfg80211_add_set_beacon()
4213 if ((err = wl_cfg80211_set_scb_timings(cfg, dev))) { in wl_cfg80211_add_set_beacon()
4220 if (wl_get_drv_status(cfg, AP_CREATED, dev)) { in wl_cfg80211_add_set_beacon()
4238 wl_set_drv_status(cfg, CONNECTED, dev); in wl_cfg80211_add_set_beacon()
4267 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_del_beacon() local
4269 dhd_pub_t *dhd = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_del_beacon()
4283 wl_clr_drv_status(cfg, AP_CREATING, dev); in wl_cfg80211_del_beacon()
4284 wl_clr_drv_status(cfg, AP_CREATED, dev); in wl_cfg80211_del_beacon()
4287 wl_clr_drv_status(cfg, CONNECTED, dev); in wl_cfg80211_del_beacon()
4289 cfg->ap_oper_channel = INVCHANSPEC; in wl_cfg80211_del_beacon()
4291 if ((bssidx = wl_get_bssidx_by_wdev(cfg, dev->ieee80211_ptr)) < 0) { in wl_cfg80211_del_beacon()
4297 if ((err = wl_cfg80211_bss_up(cfg, dev, bssidx, 0)) < 0) { in wl_cfg80211_del_beacon()
4306 wl_cfg80211_clear_per_bss_ies(cfg, dev->ieee80211_ptr); in wl_cfg80211_del_beacon()
4326 wl_get_auth_assoc_status(struct bcm_cfg80211 *cfg, struct net_device *ndev, in wl_get_auth_assoc_status() argument
4331 struct wl_security *sec = wl_read_prof(cfg, ndev, WL_PROF_SEC); in wl_get_auth_assoc_status()
4334 (void)memcpy_s(&cfg->event_auth_assoc, sizeof(wl_event_msg_t), in wl_get_auth_assoc_status()
4337 ntoh32(cfg->event_auth_assoc.event_type), in wl_get_auth_assoc_status()
4338 ntoh32(cfg->event_auth_assoc.status), in wl_get_auth_assoc_status()
4339 ntoh32(cfg->event_auth_assoc.reason))); in wl_get_auth_assoc_status()
4364 wl_notify_connect_status_ap_legacy(struct bcm_cfg80211 *cfg, struct net_device *ndev in wl_notify_connect_status_ap_legacy() argument
4385 struct wiphy *wiphy = bcmcfg_to_wiphy(cfg); in wl_notify_connect_status_ap_legacy()
4395 body = (u8 *)MALLOCZ(cfg->osh, len); in wl_notify_connect_status_ap_legacy()
4403 if (wl_get_mode_by_netdev(cfg, ndev) == WL_INVALID) { in wl_notify_connect_status_ap_legacy()
4404 MFREE(cfg->osh, body, len); in wl_notify_connect_status_ap_legacy()
4437 MFREE(cfg->osh, body, len); in wl_notify_connect_status_ap_legacy()
4444 err = wl_frame_get_mgmt(cfg, fc, &da, &e->addr, &bssid, in wl_notify_connect_status_ap_legacy()
4467 MFREE(cfg->osh, mgmt_frame, len); in wl_notify_connect_status_ap_legacy()
4470 MFREE(cfg->osh, body, body_len); in wl_notify_connect_status_ap_legacy()
4477 wl_notify_connect_status_ap(struct bcm_cfg80211 *cfg, struct net_device *ndev, in wl_notify_connect_status_ap() argument
4499 err = wl_handle_auth_event(cfg, ndev, e, data); in wl_notify_connect_status_ap()
4509 wl_bss_handle_sae_auth(cfg, ndev, e, data); in wl_notify_connect_status_ap()
4512 wl_get_auth_assoc_status(cfg, ndev, e, data); in wl_notify_connect_status_ap()
4517 wl_get_p2p_status(cfg, IF_DELETING) && (ndev != bcmcfg_to_prmry_ndev(cfg))) { in wl_notify_connect_status_ap()
4520 complete(&cfg->iface_disable); in wl_notify_connect_status_ap()
4529 (wl_get_mode_by_netdev(cfg, ndev) == WL_MODE_AP)) { in wl_notify_connect_status_ap()
4530 if (!wl_get_drv_status(cfg, AP_CREATED, ndev)) { in wl_notify_connect_status_ap()
4535 wl_set_drv_status(cfg, AP_CREATED, ndev); in wl_notify_connect_status_ap()
4536 if (delayed_work_pending(&cfg->ap_work)) { in wl_notify_connect_status_ap()
4537 cancel_delayed_work_sync(&cfg->ap_work); in wl_notify_connect_status_ap()
4541 wl_ap_stainfo_init(cfg); in wl_notify_connect_status_ap()
4560 dhdp = (dhd_pub_t *)(cfg->pub); in wl_notify_connect_status_ap()
4562 dhd_schedule_gather_ap_stadata(cfg, ndev, e); in wl_notify_connect_status_ap()
4569 err = wl_notify_connect_status_ap_legacy(cfg, ndev, e, data); in wl_notify_connect_status_ap()
4635 wl_frame_get_mgmt(struct bcm_cfg80211 *cfg, u16 fc, in wl_frame_get_mgmt() argument
4658 *pheader = (u8 *)MALLOCZ(cfg->osh, totlen); in wl_frame_get_mgmt()
4706 wl_tdls_event_handler(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev, in wl_tdls_event_handler() argument
4713 ndev = cfgdev_to_wlc_ndev(cfgdev, cfg); in wl_tdls_event_handler()
4720 if (cfg->tdls_mgmt_frame) { in wl_tdls_event_handler()
4722 cfg80211_rx_mgmt(cfgdev, cfg->tdls_mgmt_freq, 0, in wl_tdls_event_handler()
4723 cfg->tdls_mgmt_frame, cfg->tdls_mgmt_frame_len, 0); in wl_tdls_event_handler()
4725 cfg80211_rx_mgmt(cfgdev, cfg->tdls_mgmt_freq, 0, in wl_tdls_event_handler()
4726 cfg->tdls_mgmt_frame, cfg->tdls_mgmt_frame_len, 0, in wl_tdls_event_handler()
4730 cfg80211_rx_mgmt(cfgdev, cfg->tdls_mgmt_freq, 0, in wl_tdls_event_handler()
4731 cfg->tdls_mgmt_frame, cfg->tdls_mgmt_frame_len, in wl_tdls_event_handler()
4734 cfg80211_rx_mgmt(cfgdev, cfg->tdls_mgmt_freq, in wl_tdls_event_handler()
4735 cfg->tdls_mgmt_frame, cfg->tdls_mgmt_frame_len, GFP_ATOMIC); in wl_tdls_event_handler()
4742 wl_cfg80211_set_cac(cfg, 0); in wl_tdls_event_handler()
4746 if (cfg->tdls_mgmt_frame) { in wl_tdls_event_handler()
4747 MFREE(cfg->osh, cfg->tdls_mgmt_frame, cfg->tdls_mgmt_frame_len); in wl_tdls_event_handler()
4748 cfg->tdls_mgmt_frame_len = 0; in wl_tdls_event_handler()
4749 cfg->tdls_mgmt_freq = 0; in wl_tdls_event_handler()
4754 wl_cfg80211_set_cac(cfg, 1); in wl_tdls_event_handler()
4760 (bcmcfg_to_prmry_ndev(cfg) == ndev) ? "primary" : "secondary")); in wl_tdls_event_handler()
4767 static void wl_tdls_enable(struct bcm_cfg80211 *cfg) in wl_tdls_enable() argument
4771 struct net_device *primary_dev = bcmcfg_to_prmry_ndev(cfg); in wl_tdls_enable()
4772 dhd_pub_t *dhd = (dhd_pub_t *)(cfg->pub); in wl_tdls_enable()
4777 if (cfg->vsdb_mode) in wl_tdls_enable()
4779 if (cfg->vsdb_mode || IS_P2P_OPERATING) in wl_tdls_enable()
4821 struct bcm_cfg80211 *cfg; in wl_cfg80211_tdls_mgmt() local
4824 cfg = wl_get_cfg(dev); in wl_cfg80211_tdls_mgmt()
4859 dhd_tdls_set_mode((dhd_pub_t *)(cfg->pub), true); in wl_cfg80211_tdls_mgmt()
4863 dhd_tdls_set_mode((dhd_pub_t *)(cfg->pub), false); in wl_cfg80211_tdls_mgmt()
4870 cfg->ioctl_buf, WLC_IOCTL_MAXLEN, &cfg->ioctl_buf_sync); in wl_cfg80211_tdls_mgmt()
4893 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_tdls_oper() local
4897 dhdp = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_tdls_oper()
4921 ret = wl_cfg80211_tdls_config(cfg, TDLS_STATE_TEARDOWN, tdls_auto_mode); in wl_cfg80211_tdls_oper()
4937 ret = wl_cfg80211_tdls_config(cfg, TDLS_STATE_SETUP, tdls_auto_mode); in wl_cfg80211_tdls_oper()
4943 cfg->ioctl_buf, WLC_IOCTL_MAXLEN, &cfg->ioctl_buf_sync); in wl_cfg80211_tdls_oper()
4959 static bool check_dev_role_integrity(struct bcm_cfg80211 *cfg, u32 dev_role) in check_dev_role_integrity() argument
4962 dhd_pub_t *dhd = (dhd_pub_t *)(cfg->pub); in check_dev_role_integrity()
5064 struct bcm_cfg80211 *cfg = wl_get_cfg(cfgdev); in wl_cfg80211_set_mac_acl() local
5091 list = (struct maclist *)MALLOC(cfg->osh, sizeof(int) + in wl_cfg80211_set_mac_acl()
5107 MFREE(cfg->osh, list, sizeof(int) + in wl_cfg80211_set_mac_acl()
5271 wl_ap_channel_ind(struct bcm_cfg80211 *cfg, in wl_ap_channel_ind() argument
5281 wl_update_apchan_bwcap(cfg, ndev, chanspec); in wl_ap_channel_ind()
5284 if (!(cfg->ap_oper_channel == INVCHANSPEC) && (cfg->ap_oper_channel != chanspec)) { in wl_ap_channel_ind()
5290 wl_cfg80211_ch_switch_notify(ndev, chanspec, bcmcfg_to_wiphy(cfg)); in wl_ap_channel_ind()
5292 cfg->ap_oper_channel = chanspec; in wl_ap_channel_ind()
5297 wl_ap_start_ind(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev, in wl_ap_start_ind() argument
5314 ndev = cfgdev_to_wlc_ndev(cfgdev, cfg); in wl_ap_start_ind()
5317 if (wl_get_mode_by_netdev(cfg, ndev) == WL_MODE_AP) { in wl_ap_start_ind()
5319 wl_ap_channel_ind(cfg, ndev, chanspec); in wl_ap_start_ind()
5327 wl_csa_complete_ind(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev, in wl_csa_complete_ind() argument
5342 ndev = cfgdev_to_wlc_ndev(cfgdev, cfg); in wl_csa_complete_ind()
5344 if (!((wl_get_mode_by_netdev(cfg, ndev)) == WL_MODE_AP)) { in wl_csa_complete_ind()
5360 if (wl_get_mode_by_netdev(cfg, ndev) == WL_MODE_AP) { in wl_csa_complete_ind()
5362 wl_ap_channel_ind(cfg, ndev, chanspec); in wl_csa_complete_ind()
5365 if (!wl_get_drv_status(cfg, CONNECTED, ndev)) { in wl_csa_complete_ind()
5370 wl_cfg80211_ch_switch_notify(ndev, chanspec, bcmcfg_to_wiphy(cfg)); in wl_csa_complete_ind()
5381 wl_cfg80211_tdls_config(struct bcm_cfg80211 *cfg, enum wl_tdls_config state, bool auto_mode) in wl_cfg80211_tdls_config() argument
5383 struct net_device *ndev = bcmcfg_to_prmry_ndev(cfg); in wl_cfg80211_tdls_config()
5389 dhdp = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_tdls_config()
5397 if (!cfg->tdls_supported) { in wl_cfg80211_tdls_config()
5403 mutex_lock(&cfg->tdls_sync); in wl_cfg80211_tdls_config()
5415 if (wl_get_drv_status_all(cfg, in wl_cfg80211_tdls_config()
5432 if (wl_get_drv_status_all(cfg, in wl_cfg80211_tdls_config()
5437 } else if (wl_get_drv_status_all(cfg, in wl_cfg80211_tdls_config()
5444 for_each_ndev(cfg, iter, next) { in wl_cfg80211_tdls_config()
5446 if ((iter->ndev) && (wl_get_drv_status(cfg, CONNECTED, ndev)) && in wl_cfg80211_tdls_config()
5502 mutex_unlock(&cfg->tdls_sync); in wl_cfg80211_tdls_config()
5507 struct net_device* wl_get_ap_netdev(struct bcm_cfg80211 *cfg, char *ifname) in wl_get_ap_netdev() argument
5513 for_each_ndev(cfg, iter, next) { in wl_get_ap_netdev()
5534 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_set_ap_beacon_rate() local
5540 dhdp = (dhd_pub_t *)(cfg->pub); in wl_set_ap_beacon_rate()
5547 ndev = wl_get_ap_netdev(cfg, ifname); in wl_set_ap_beacon_rate()
5592 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_get_ap_basic_rate() local
5599 dhdp = (dhd_pub_t *)(cfg->pub); in wl_get_ap_basic_rate()
5606 ndev = wl_get_ap_netdev(cfg, ifname); in wl_get_ap_basic_rate()
5649 struct bcm_cfg80211 *cfg = NULL; in _wl_update_ap_rps_params() local
5656 cfg = wl_get_cfg(dev); in _wl_update_ap_rps_params()
5665 iovar.param->level = cfg->ap_rps_info.level; in _wl_update_ap_rps_params()
5666 iovar.param->stas_assoc_check = cfg->ap_rps_info.sta_assoc_check; in _wl_update_ap_rps_params()
5667 iovar.param->pps = cfg->ap_rps_info.pps; in _wl_update_ap_rps_params()
5668 iovar.param->quiet_time = cfg->ap_rps_info.quiet_time; in _wl_update_ap_rps_params()
5682 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_get_ap_rps() local
5695 dhdp = (dhd_pub_t *)(cfg->pub); in wl_get_ap_rps()
5708 ndev = wl_get_ap_netdev(cfg, ifname); in wl_get_ap_rps()
5773 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_set_ap_rps() local
5780 dhdp = (dhd_pub_t *)(cfg->pub); in wl_set_ap_rps()
5793 ndev = wl_get_ap_netdev(cfg, ifname); in wl_set_ap_rps()
5801 if (cfg->ap_rps_info.enable != enable) { in wl_set_ap_rps()
5802 cfg->ap_rps_info.enable = enable; in wl_set_ap_rps()
5825 cfg->ap_rps_info.enable = enable; in wl_set_ap_rps()
5834 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_update_ap_rps_params() local
5838 dhdp = (dhd_pub_t *)(cfg->pub); in wl_update_ap_rps_params()
5848 ndev = wl_get_ap_netdev(cfg, ifname); in wl_update_ap_rps_params()
5872 cfg->ap_rps_info.pps = rps->pps; in wl_update_ap_rps_params()
5873 cfg->ap_rps_info.level = rps->level; in wl_update_ap_rps_params()
5874 cfg->ap_rps_info.quiet_time = rps->quiet_time; in wl_update_ap_rps_params()
5875 cfg->ap_rps_info.sta_assoc_check = rps->sta_assoc_check; in wl_update_ap_rps_params()
5877 if (cfg->ap_rps_info.enable) { in wl_update_ap_rps_params()
5888 wl_cfg80211_init_ap_rps(struct bcm_cfg80211 *cfg) in wl_cfg80211_init_ap_rps() argument
5890 cfg->ap_rps_info.enable = FALSE; in wl_cfg80211_init_ap_rps()
5891 cfg->ap_rps_info.sta_assoc_check = RADIO_PWRSAVE_STAS_ASSOC_CHECK; in wl_cfg80211_init_ap_rps()
5892 cfg->ap_rps_info.pps = RADIO_PWRSAVE_PPS; in wl_cfg80211_init_ap_rps()
5893 cfg->ap_rps_info.quiet_time = RADIO_PWRSAVE_QUIET_TIME; in wl_cfg80211_init_ap_rps()
5894 cfg->ap_rps_info.level = RADIO_PWRSAVE_LEVEL; in wl_cfg80211_init_ap_rps()
5901 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_iface_count() local
5909 for_each_ndev(cfg, iter, next) { in wl_cfg80211_iface_count()
5961 int wl_cfg80211_set_he_mode(struct net_device *dev, struct bcm_cfg80211 *cfg, in wl_cfg80211_set_he_mode() argument
5974 cfg->ioctl_buf, WLC_IOCTL_SMLEN, bssidx, NULL); in wl_cfg80211_set_he_mode()
5979 he_feature = *(int*)cfg->ioctl_buf; in wl_cfg80211_set_he_mode()
6000 cfg->ioctl_buf, WLC_IOCTL_SMLEN, bssidx, &cfg->ioctl_buf_sync); in wl_cfg80211_set_he_mode()
6019 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_channel_switch() local
6020 struct net_device *primary_dev = bcmcfg_to_prmry_ndev(cfg); in wl_cfg80211_channel_switch()
6022 dev = ndev_to_wlc_ndev(dev, cfg); in wl_cfg80211_channel_switch()
6029 if (wl_get_mode_by_netdev(cfg, dev) != WL_MODE_AP) { in wl_cfg80211_channel_switch()
6036 if (wl_get_drv_status(cfg, CONNECTING, primary_dev)) { in wl_cfg80211_channel_switch()
6041 if (chspec == cfg->ap_oper_channel) { in wl_cfg80211_channel_switch()
6067 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_channel_switch()
6068 chanspec_t *sta_chanspec = (chanspec_t *)wl_read_prof(cfg, in wl_cfg80211_channel_switch()
6076 wl_get_drv_status(cfg, CONNECTED, primary_dev) && in wl_cfg80211_channel_switch()
6114 cfg->ioctl_buf, WLC_IOCTL_SMLEN, &cfg->ioctl_buf_sync); in wl_cfg80211_channel_switch()
6127 struct bcm_cfg80211 *cfg = wl_get_cfg(ndev); in wl_set_ap_suspend_error_handler() local
6128 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wl_set_ap_suspend_error_handler()
6130 if (wl_get_drv_status(cfg, READY, ndev)) { in wl_set_ap_suspend_error_handler()
6161 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_set_ap_suspend() local
6170 dhdp = (dhd_pub_t *)(cfg->pub); in wl_set_ap_suspend()
6181 ndev = wl_get_ap_netdev(cfg, ifname); in wl_set_ap_suspend()
6188 if ((bssidx = wl_get_bssidx_by_wdev(cfg, ndev->ieee80211_ptr)) < 0) { in wl_set_ap_suspend()
6195 wl_clr_drv_status(cfg, AP_CREATED, ndev); in wl_set_ap_suspend()
6196 wl_clr_drv_status(cfg, CONNECTED, ndev); in wl_set_ap_suspend()
6198 if ((ret = wl_cfg80211_bss_up(cfg, ndev, bssidx, 0)) < 0) { in wl_set_ap_suspend()
6205 wl_cfgscan_cancel_scan(cfg); in wl_set_ap_suspend()
6207 if ((ret = wl_cfg80211_bss_up(cfg, ndev, bssidx, 1)) < 0) { in wl_set_ap_suspend()
6216 ret = wait_event_interruptible_timeout(cfg->netif_change_event, in wl_set_ap_suspend()
6217 wl_get_drv_status(cfg, AP_CREATED, ndev), in wl_set_ap_suspend()
6227 } else if (ret == 0 || !wl_get_drv_status(cfg, AP_CREATED, ndev)) { in wl_set_ap_suspend()
6232 wl_set_drv_status(cfg, CONNECTED, ndev); in wl_set_ap_suspend()
6233 wl_clr_drv_status(cfg, AP_CREATING, ndev); in wl_set_ap_suspend()
6246 wl_set_ap_suspend_error_handler(bcmcfg_to_prmry_ndev(cfg), suspend); in wl_set_ap_suspend()
6255 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_set_softap_elna_bypass() local
6264 ifdev = wl_get_netdev_by_name(cfg, ifname); in wl_set_softap_elna_bypass()
6288 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_get_softap_elna_bypass() local
6298 ifdev = wl_get_netdev_by_name(cfg, ifname); in wl_get_softap_elna_bypass()
6328 wl_get_ap_he_mode(struct net_device *ndev, struct bcm_cfg80211 *cfg, bool *he) in wl_get_ap_he_mode() argument
6341 cfg->ioctl_buf, WLC_IOCTL_SMLEN, NULL); in wl_get_ap_he_mode()
6351 he_enab = *(u8*)cfg->ioctl_buf; in wl_get_ap_he_mode()
6363 cfg->ioctl_buf, WLC_IOCTL_SMLEN, NULL); in wl_get_ap_he_mode()
6368 he_feature = *(int*)cfg->ioctl_buf; in wl_get_ap_he_mode()
6381 wl_update_apchan_bwcap(struct bcm_cfg80211 *cfg, struct net_device *ndev, chanspec_t chanspec) in wl_update_apchan_bwcap() argument
6383 struct net_device *dev = bcmcfg_to_prmry_ndev(cfg); in wl_update_apchan_bwcap()
6393 wl_update_prof(cfg, ndev, NULL, &chanspec, WL_PROF_CHAN); in wl_update_apchan_bwcap()
6400 ret = wl_get_bandwidth_cap(bcmcfg_to_prmry_ndev(cfg), in wl_update_apchan_bwcap()
6411 cfg->bw_cap_5g = bw2cap[chanbw >> WL_CHANSPEC_BW_SHIFT]; in wl_update_apchan_bwcap()
6412 WL_INFORM_MEM(("supported bw cap is:0x%x\n", cfg->bw_cap_5g)); in wl_update_apchan_bwcap()
6462 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_set_ap_bw() local
6469 dhdp = (dhd_pub_t *)(cfg->pub); in wl_set_ap_bw()
6480 ndev = wl_get_ap_netdev(cfg, ifname); in wl_set_ap_bw()
6492 chanspec = (chanspec_t *)wl_read_prof(cfg, ndev, WL_PROF_CHAN); in wl_set_ap_bw()
6500 wl_get_drv_status(cfg, CONNECTED, bcmcfg_to_prmry_ndev(cfg))) || in wl_set_ap_bw()
6501 wl_cfgnan_is_enabled(cfg)) { in wl_set_ap_bw()
6507 if (wl_get_drv_status_all(cfg, SCANNING)) { in wl_set_ap_bw()
6513 if (wl_get_drv_status_all(cfg, SCAN_ABORTING)) { in wl_set_ap_bw()
6519 if (wl_get_drv_status(cfg, CONNECTING, bcmcfg_to_prmry_ndev(cfg))) { in wl_set_ap_bw()
6525 ret = wl_get_ap_he_mode(ndev, cfg, &he); in wl_set_ap_bw()
6535 if ((!WL_BW_CAP_160MHZ(cfg->bw_cap_5g) && (bw == DOT11_OPER_MODE_160MHZ)) || in wl_set_ap_bw()
6536 (!WL_BW_CAP_80MHZ(cfg->bw_cap_5g) && (bw >= DOT11_OPER_MODE_80MHZ)) || in wl_set_ap_bw()
6537 (!WL_BW_CAP_40MHZ(cfg->bw_cap_5g) && (bw >= DOT11_OPER_MODE_40MHZ)) || in wl_set_ap_bw()
6538 (!WL_BW_CAP_20MHZ(cfg->bw_cap_5g))) { in wl_set_ap_bw()
6539 WL_ERR(("bw_cap %x does not support bw = %d\n", cfg->bw_cap_5g, bw)); in wl_set_ap_bw()
6559 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_get_ap_bw() local
6567 dhdp = (dhd_pub_t *)(cfg->pub); in wl_get_ap_bw()
6578 ndev = wl_get_ap_netdev(cfg, ifname); in wl_get_ap_bw()
6615 wl_restore_ap_bw(struct bcm_cfg80211 *cfg) in wl_restore_ap_bw() argument
6624 if (!cfg) { in wl_restore_ap_bw()
6629 for_each_ndev(cfg, iter, next) { in wl_restore_ap_bw()
6633 chanspec = (chanspec_t *)wl_read_prof(cfg, iter->ndev, in wl_restore_ap_bw()
6648 ret = wl_get_ap_he_mode(bcmcfg_to_prmry_ndev(cfg), cfg, &he); in wl_restore_ap_bw()
6657 if (WL_BW_CAP_160MHZ(cfg->bw_cap_5g)) { in wl_restore_ap_bw()
6659 } else if (WL_BW_CAP_80MHZ(cfg->bw_cap_5g)) { in wl_restore_ap_bw()
6661 } else if (WL_BW_CAP_40MHZ(cfg->bw_cap_5g)) { in wl_restore_ap_bw()