Lines Matching refs:cfg

163 #define WL_AF_TX_KEEP_PRI_CONNECTION_VSDB(cfg)	\  argument
165 if (wl_get_drv_status(cfg, CONNECTED, bcmcfg_to_prmry_ndev(cfg)) || \
166 wl_get_drv_status(cfg, CONNECTING, bcmcfg_to_prmry_ndev(cfg))) { \
172 #define WL_AF_TX_KEEP_PRI_CONNECTION_VSDB(cfg) argument
337 static void wl_cfg80211_wbtext_reset_conf(struct bcm_cfg80211 *cfg, struct net_device *ndev);
338 static void wl_cfg80211_wbtext_update_rcc(struct bcm_cfg80211 *cfg, struct net_device *dev);
339 static bool wl_cfg80211_wbtext_check_bssid_list(struct bcm_cfg80211 *cfg, struct ether_addr *ea);
340 static bool wl_cfg80211_wbtext_add_bssid_list(struct bcm_cfg80211 *cfg, struct ether_addr *ea);
341 static void wl_cfg80211_wbtext_clear_bssid_list(struct bcm_cfg80211 *cfg);
342 static bool wl_cfg80211_wbtext_send_nbr_req(struct bcm_cfg80211 *cfg, struct net_device *dev,
344 static bool wl_cfg80211_wbtext_send_btm_query(struct bcm_cfg80211 *cfg, struct net_device *dev,
346 static void wl_cfg80211_wbtext_set_wnm_maxidle(struct bcm_cfg80211 *cfg, struct net_device *dev);
351 static s32 wl_cfg80211_rtt_event_handler(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev,
355 static s32 wl_cfg80211_bssload_report_event_handler(struct bcm_cfg80211 *cfg,
394 static int wl_vndr_ies_get_vendor_oui(struct bcm_cfg80211 *cfg,
396 static void wl_vndr_ies_clear_vendor_oui_list(struct bcm_cfg80211 *cfg);
398 static bool wl_vndr_ies_find_vendor_oui(struct bcm_cfg80211 *cfg,
536 static void wl_cfg80211_spmk_pmkdb_change_pmk_type(struct bcm_cfg80211 *cfg,
538 static void wl_cfg80211_spmk_pmkdb_del_spmk(struct bcm_cfg80211 *cfg,
547 s32 wl_cfg80211_interface_ops(struct bcm_cfg80211 *cfg,
550 s32 wl_cfg80211_add_del_bss(struct bcm_cfg80211 *cfg,
561 static void wl_cfg80211_wait_for_disconnection(struct bcm_cfg80211 *cfg, struct net_device *dev);
579 static s32 wl_create_event_handler(struct bcm_cfg80211 *cfg);
580 static void wl_destroy_event_handler(struct bcm_cfg80211 *cfg);
582 static void wl_init_eq(struct bcm_cfg80211 *cfg);
583 static void wl_flush_eq(struct bcm_cfg80211 *cfg);
584 static unsigned long wl_lock_eq(struct bcm_cfg80211 *cfg);
585 static void wl_unlock_eq(struct bcm_cfg80211 *cfg, unsigned long flags);
586 static void wl_init_eq_lock(struct bcm_cfg80211 *cfg);
587 static void wl_init_event_handler(struct bcm_cfg80211 *cfg);
588 static struct wl_event_q *wl_deq_event(struct bcm_cfg80211 *cfg);
589 static s32 wl_enq_event(struct bcm_cfg80211 *cfg, struct net_device *ndev, u32 type,
591 static void wl_put_event(struct bcm_cfg80211 *cfg, struct wl_event_q *e);
592 static s32 wl_notify_connect_status(struct bcm_cfg80211 *cfg,
594 static s32 wl_notify_roaming_status(struct bcm_cfg80211 *cfg,
596 static s32 wl_bss_connect_done(struct bcm_cfg80211 *cfg, struct net_device *ndev,
598 static s32 wl_bss_roaming_done(struct bcm_cfg80211 *cfg, struct net_device *ndev,
600 static s32 wl_notify_mic_status(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev,
603 static s32 wl_notify_bt_wifi_handover_req(struct bcm_cfg80211 *cfg,
614 static s32 wl_notifier_change_state(struct bcm_cfg80211 *cfg, struct net_info *_net_info,
617 static s32 wl_check_pmstatus(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev,
621 static s32 wl_notify_roam_prep_status(struct bcm_cfg80211 *cfg,
625 static void wl_del_roam_timeout(struct bcm_cfg80211 *cfg);
628 static s32 wl_svc_resp_handler(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev,
630 static s32 wl_notify_device_discovery(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev,
636 wl_mbo_event_handler(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev,
642 wl_notify_twt_event(struct bcm_cfg80211 *cfg,
648 static s32 wl_notify_start_auth(struct bcm_cfg80211 *cfg,
654 struct bcm_cfg80211 *cfg, const u8 *buf, size_t len, s32 bssidx, u64 *cookie);
675 static void wl_init_prof(struct bcm_cfg80211 *cfg, struct net_device *ndev);
703 static s32 wl_get_assoc_ies(struct bcm_cfg80211 *cfg, struct net_device *ndev);
704 void wl_cfg80211_clear_security(struct bcm_cfg80211 *cfg);
709 static __used s32 wl_add_ie(struct bcm_cfg80211 *cfg, u8 t, u8 l, u8 *v);
716 static void wl_free_wdev(struct bcm_cfg80211 *cfg);
726 static s32 wl_update_bss_info(struct bcm_cfg80211 *cfg, struct net_device *ndev, bool update_ssid);
740 static s32 wl_init_priv_mem(struct bcm_cfg80211 *cfg);
741 static void wl_deinit_priv_mem(struct bcm_cfg80211 *cfg);
748 static __used bool wl_is_ibssstarter(struct bcm_cfg80211 *cfg);
753 static s32 __wl_cfg80211_up(struct bcm_cfg80211 *cfg);
754 static s32 __wl_cfg80211_down(struct bcm_cfg80211 *cfg);
756 static void wl_link_up(struct bcm_cfg80211 *cfg);
757 static s32 wl_handle_link_down(struct bcm_cfg80211 *cfg, wl_assoc_status_t *as);
758 static s32 wl_post_linkup_ops(struct bcm_cfg80211 *cfg, wl_assoc_status_t *as);
759 static void wl_link_down(struct bcm_cfg80211 *cfg);
760 static s32 wl_config_infra(struct bcm_cfg80211 *cfg, struct net_device *ndev, u16 iftype);
772 static int wl_setup_rfkill(struct bcm_cfg80211 *cfg, bool setup);
785 int init_roam_cache(struct bcm_cfg80211 *cfg, int ioctl_ver);
789 s32 wl_cfg80211_p2plo_deinit(struct bcm_cfg80211 *cfg);
800 static int wl_cfg80211_delayed_roam(struct bcm_cfg80211 *cfg, struct net_device *ndev,
802 static s32 __wl_update_wiphybands(struct bcm_cfg80211 *cfg, bool notify);
805 s32 wl_cfg80211_sdo_init(struct bcm_cfg80211 *cfg);
806 s32 wl_cfg80211_sdo_deinit(struct bcm_cfg80211 *cfg);
818 static void wl_init_wps_reauth_sm(struct bcm_cfg80211 *cfg);
819 static void wl_deinit_wps_reauth_sm(struct bcm_cfg80211 *cfg);
821 static s32 wl_get_free_wps_inst(struct bcm_cfg80211 *cfg);
822 static s32 wl_get_wps_inst_match(struct bcm_cfg80211 *cfg, struct net_device *ndev);
834 static s32 wl_bcnrecv_aborted_event_handler(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev,
839 static s32 wl_cfg80211_cac_event_handler(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev,
844 static s32 wl_bssid_prune_event_handler(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev,
847 static void wl_cfg80211_handle_set_ssid_complete(struct bcm_cfg80211 *cfg, wl_assoc_status_t *as,
909 #define WL_SET_EIDX_IN_PROGRESS(cfg, id, type) \ argument
910 { cfg->eidx.in_progress = id; \
911 cfg->eidx.event_type = type; }
912 #define WL_CLR_EIDX_STATES(cfg) \ argument
913 cfg->eidx.in_progress = WL_EIDX_INVALID;
1287 static void wl_add_remove_pm_enable_work(struct bcm_cfg80211 *cfg, in wl_add_remove_pm_enable_work() argument
1296 if (cfg == NULL) in wl_add_remove_pm_enable_work()
1300 dhd = (dhd_pub_t *)(cfg->pub); in wl_add_remove_pm_enable_work()
1303 mutex_lock(&cfg->pm_sync); in wl_add_remove_pm_enable_work()
1309 if (delayed_work_pending(&cfg->pm_enable_work)) { in wl_add_remove_pm_enable_work()
1310 cancel_delayed_work(&cfg->pm_enable_work); in wl_add_remove_pm_enable_work()
1313 DHD_PM_WAKE_UNLOCK(cfg->pub); in wl_add_remove_pm_enable_work()
1330 if (schedule_delayed_work(&cfg->pm_enable_work, in wl_add_remove_pm_enable_work()
1334 DHD_PM_WAKE_LOCK_TIMEOUT(cfg->pub, wq_duration); in wl_add_remove_pm_enable_work()
1341 mutex_unlock(&cfg->pm_sync); in wl_add_remove_pm_enable_work()
1431 bool wl_cfg80211_is_hal_started(struct bcm_cfg80211 *cfg) in wl_cfg80211_is_hal_started() argument
1433 return cfg->hal_started; in wl_cfg80211_is_hal_started()
1737 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_set_tx_power() local
1758 sizeof(txpwrqdbm), cfg->ioctl_buf, WLC_IOCTL_SMLEN, 0, in wl_set_tx_power()
1759 &cfg->ioctl_buf_sync); in wl_set_tx_power()
1794 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_get_shared_freq() local
1795 struct net_device *dev = bcmcfg_to_prmry_ndev(cfg); in wl_cfg80211_get_shared_freq()
1818 buf = (char *)MALLOCZ(cfg->osh, WL_EXTRA_BUF_MAX); in wl_cfg80211_get_shared_freq()
1843 MFREE(cfg->osh, buf, WL_EXTRA_BUF_MAX); in wl_cfg80211_get_shared_freq()
1848 wl_wlfc_enable(struct bcm_cfg80211 *cfg, bool enable) in wl_wlfc_enable() argument
1855 struct net_device *primary_ndev = bcmcfg_to_prmry_ndev(cfg); in wl_wlfc_enable()
1857 dhd = (dhd_pub_t *)(cfg->pub); in wl_wlfc_enable()
1863 if (!cfg->wlfc_on && !disable_proptx) { in wl_wlfc_enable()
1872 cfg->wlfc_on = true; in wl_wlfc_enable()
1873 WL_DBG(("wlfc_on:%d \n", cfg->wlfc_on)); in wl_wlfc_enable()
1877 cfg->wlfc_on = false; in wl_wlfc_enable()
1884 wl_cfg80211_p2p_if_add(struct bcm_cfg80211 *cfg, in wl_cfg80211_p2p_if_add() argument
1895 struct wiphy *wiphy = bcmcfg_to_wiphy(cfg); in wl_cfg80211_p2p_if_add()
1899 if (!cfg->p2p) { in wl_cfg80211_p2p_if_add()
1907 return wl_cfgp2p_add_p2p_disc_if(cfg); in wl_cfg80211_p2p_if_add()
1921 if ((cfg->p2p->p2p_go_count > 0) && (wl_iftype == WL_IF_TYPE_P2P_GO)) { in wl_cfg80211_p2p_if_add()
1926 if (!cfg->p2p->on) { in wl_cfg80211_p2p_if_add()
1927 p2p_on(cfg) = true; in wl_cfg80211_p2p_if_add()
1928 wl_cfgp2p_set_firm_p2p(cfg); in wl_cfg80211_p2p_if_add()
1929 wl_cfgp2p_init_discovery(cfg); in wl_cfg80211_p2p_if_add()
1932 strlcpy(cfg->p2p->vir_ifname, name, sizeof(cfg->p2p->vir_ifname)); in wl_cfg80211_p2p_if_add()
1942 wl_set_p2p_status(cfg, IF_ADDING); in wl_cfg80211_p2p_if_add()
1943 bzero(&cfg->if_event_info, sizeof(cfg->if_event_info)); in wl_cfg80211_p2p_if_add()
1944 cfg_type = wl_cfgp2p_get_conn_idx(cfg); in wl_cfg80211_p2p_if_add()
1946 wl_clr_p2p_status(cfg, IF_ADDING); in wl_cfg80211_p2p_if_add()
1952 p2p_addr = wl_to_p2p_bss_macaddr(cfg, cfg_type); in wl_cfg80211_p2p_if_add()
1955 err = wl_cfgp2p_ifadd(cfg, p2p_addr, in wl_cfg80211_p2p_if_add()
1958 wl_clr_p2p_status(cfg, IF_ADDING); in wl_cfg80211_p2p_if_add()
1964 timeout = wait_event_interruptible_timeout(cfg->netif_change_event, in wl_cfg80211_p2p_if_add()
1965 ((wl_get_p2p_status(cfg, IF_ADDING) == false) && in wl_cfg80211_p2p_if_add()
1966 (cfg->if_event_info.valid)), in wl_cfg80211_p2p_if_add()
1968 if (timeout > 0 && !wl_get_p2p_status(cfg, IF_ADDING) && cfg->if_event_info.valid) { in wl_cfg80211_p2p_if_add()
1969 wl_if_event_info *event = &cfg->if_event_info; in wl_cfg80211_p2p_if_add()
1970 new_ndev = wl_cfg80211_post_ifcreate(bcmcfg_to_prmry_ndev(cfg), event, in wl_cfg80211_p2p_if_add()
1971 event->mac, cfg->p2p->vir_ifname, false); in wl_cfg80211_p2p_if_add()
1977 cfg->p2p->p2p_go_count++; in wl_cfg80211_p2p_if_add()
1980 wl_to_p2p_bss_ndev(cfg, cfg_type) = new_ndev; in wl_cfg80211_p2p_if_add()
1981 wl_to_p2p_bss_bssidx(cfg, cfg_type) = event->bssidx; in wl_cfg80211_p2p_if_add()
1984 "created net attach done\n", cfg->p2p->vir_ifname)); in wl_cfg80211_p2p_if_add()
1988 DNGL_FUNC(dhd_cfg80211_set_p2p_info, (cfg, dhd_mode)); in wl_cfg80211_p2p_if_add()
1992 INIT_COMPLETION(cfg->iface_disable); in wl_cfg80211_p2p_if_add()
1994 init_completion(&cfg->iface_disable); in wl_cfg80211_p2p_if_add()
2010 struct bcm_cfg80211 *cfg; in wl_cfg80211_iface_state_ops() local
2031 cfg = wiphy_priv(wdev->wiphy); in wl_cfg80211_iface_state_ops()
2033 dhd = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_iface_state_ops()
2035 bssidx = wl_get_bssidx_by_wdev(cfg, wdev); in wl_cfg80211_iface_state_ops()
2047 wl_cfgscan_cancel_scan(cfg); in wl_cfg80211_iface_state_ops()
2048 wl_wlfc_enable(cfg, true); in wl_cfg80211_iface_state_ops()
2051 wl_cfg80211_tdls_config(cfg, TDLS_STATE_IF_CREATE, false); in wl_cfg80211_iface_state_ops()
2058 if (wl_get_drv_status(cfg, SCANNING, ndev)) { in wl_cfg80211_iface_state_ops()
2060 wl_cfgscan_cancel_scan(cfg); in wl_cfg80211_iface_state_ops()
2069 wl_add_remove_pm_enable_work(cfg, WL_PM_WORKQ_DEL); in wl_cfg80211_iface_state_ops()
2100 wl_cfg80211_tdls_config(cfg, TDLS_STATE_IF_DELETE, false); in wl_cfg80211_iface_state_ops()
2102 wl_wlfc_enable(cfg, false); in wl_cfg80211_iface_state_ops()
2106 wl_cfg80211_clear_per_bss_ies(cfg, wdev); in wl_cfg80211_iface_state_ops()
2127 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_p2p_if_del() local
2135 if (unlikely(!wl_get_drv_status(cfg, READY, bcmcfg_to_prmry_ndev(cfg)))) { in wl_cfg80211_p2p_if_del()
2143 return wl_cfgp2p_del_p2p_disc_if(wdev, cfg); in wl_cfg80211_p2p_if_del()
2148 bssidx = wl_get_bssidx_by_wdev(cfg, wdev); in wl_cfg80211_p2p_if_del()
2153 if (wl_cfgp2p_find_type(cfg, bssidx, &cfg_type) != BCME_OK) { in wl_cfg80211_p2p_if_del()
2163 wl_clr_p2p_status(cfg, GO_NEG_PHASE); in wl_cfg80211_p2p_if_del()
2164 wl_clr_p2p_status(cfg, IF_ADDING); in wl_cfg80211_p2p_if_del()
2167 if (wl_get_mode_by_netdev(cfg, ndev) == WL_MODE_AP) { in wl_cfg80211_p2p_if_del()
2169 cfg->p2p->p2p_go_count--; in wl_cfg80211_p2p_if_del()
2171 err = wl_cfgp2p_ifdisable(cfg, &p2p_dev_addr); in wl_cfg80211_p2p_if_del()
2177 wait_for_completion_timeout(&cfg->iface_disable, in wl_cfg80211_p2p_if_del()
2184 if (wl_get_drv_status(cfg, DISCONNECTING, ndev)) { in wl_cfg80211_p2p_if_del()
2187 (&cfg->iface_disable, msecs_to_jiffies(500)); in wl_cfg80211_p2p_if_del()
2191 if (wl_get_drv_status(cfg, CONNECTED, ndev)) { in wl_cfg80211_p2p_if_del()
2194 wl_clr_drv_status(cfg, AUTHORIZED, ndev); in wl_cfg80211_p2p_if_del()
2198 bzero(&cfg->if_event_info, sizeof(cfg->if_event_info)); in wl_cfg80211_p2p_if_del()
2199 wl_set_p2p_status(cfg, IF_DELETING); in wl_cfg80211_p2p_if_del()
2200 DNGL_FUNC(dhd_cfg80211_clean_p2p_info, (cfg)); in wl_cfg80211_p2p_if_del()
2202 err = wl_cfgp2p_ifdel(cfg, &p2p_dev_addr); in wl_cfg80211_p2p_if_del()
2209 timeout = wait_event_interruptible_timeout(cfg->netif_change_event, in wl_cfg80211_p2p_if_del()
2210 ((wl_get_p2p_status(cfg, IF_DELETING) == false) && in wl_cfg80211_p2p_if_del()
2211 (cfg->if_event_info.valid)), in wl_cfg80211_p2p_if_del()
2213 if (timeout > 0 && !wl_get_p2p_status(cfg, IF_DELETING) && in wl_cfg80211_p2p_if_del()
2214 cfg->if_event_info.valid) { in wl_cfg80211_p2p_if_del()
2228 bzero(cfg->p2p->vir_ifname, IFNAMSIZ); in wl_cfg80211_p2p_if_del()
2229 wl_to_p2p_bss_bssidx(cfg, cfg_type) = -1; in wl_cfg80211_p2p_if_del()
2230 wl_to_p2p_bss_ndev(cfg, cfg_type) = NULL; in wl_cfg80211_p2p_if_del()
2231 wl_clr_drv_status(cfg, CONNECTED, wl_to_p2p_bss_ndev(cfg, cfg_type)); in wl_cfg80211_p2p_if_del()
2234 wl_cfg80211_clear_p2p_disc_ies(cfg); in wl_cfg80211_p2p_if_del()
2238 if (cfg->if_event_info.ifidx) { in wl_cfg80211_p2p_if_del()
2240 wl_cfg80211_remove_if(cfg, cfg->if_event_info.ifidx, ndev, FALSE); in wl_cfg80211_p2p_if_del()
2293 _wl_cfg80211_check_axi_error(struct bcm_cfg80211 *cfg) in _wl_cfg80211_check_axi_error() argument
2296 dhd_pub_t *dhd = (dhd_pub_t *)(cfg->pub); in _wl_cfg80211_check_axi_error()
2359 net_os_send_hang_message(bcmcfg_to_prmry_ndev(cfg)); in _wl_cfg80211_check_axi_error()
2369 wl_cfg80211_add_if(struct bcm_cfg80211 *cfg, in wl_cfg80211_add_if() argument
2385 if (!cfg || !primary_ndev || !name) { in wl_cfg80211_add_if()
2389 if (wl_cfg80211_get_wdev_from_ifname(cfg, name)) { in wl_cfg80211_add_if()
2394 wiphy = bcmcfg_to_wiphy(cfg); in wl_cfg80211_add_if()
2396 dhd = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_add_if()
2410 mutex_lock(&cfg->if_sync); in wl_cfg80211_add_if()
2426 (err = wl_cfg80211_handle_if_role_conflict(cfg, wl_iftype)) < 0) { in wl_cfg80211_add_if()
2427 mutex_unlock(&cfg->if_sync); in wl_cfg80211_add_if()
2433 if ((err = _wl_cfg80211_check_axi_error(cfg)) < 0) { in wl_cfg80211_add_if()
2434 mutex_unlock(&cfg->if_sync); in wl_cfg80211_add_if()
2450 } else if ((wl_get_vif_macaddr(cfg, macaddr_iftype, mac_addr) != BCME_OK)) { in wl_cfg80211_add_if()
2466 if (cfg->iface_cnt >= (IFACE_MAX_CNT - 1)) { in wl_cfg80211_add_if()
2468 cfg->iface_cnt)); in wl_cfg80211_add_if()
2472 wdev = wl_cfg80211_create_iface(cfg->wdev->wiphy, in wl_cfg80211_add_if()
2479 if (cfg->p2p_supported) { in wl_cfg80211_add_if()
2480 wdev = wl_cfg80211_p2p_if_add(cfg, wl_iftype, in wl_cfg80211_add_if()
2502 cfg->vif_count++; in wl_cfg80211_add_if()
2510 wdev->iftype, cfg->vif_count)); in wl_cfg80211_add_if()
2511 mutex_unlock(&cfg->if_sync); in wl_cfg80211_add_if()
2546 net_os_send_hang_message(bcmcfg_to_prmry_ndev(cfg)); in wl_cfg80211_add_if()
2551 mutex_unlock(&cfg->if_sync); in wl_cfg80211_add_if()
2569 wl_cfg80211_del_if(struct bcm_cfg80211 *cfg, struct net_device *primary_ndev, in wl_cfg80211_del_if() argument
2573 mutex_lock(&cfg->if_sync); in wl_cfg80211_del_if()
2574 ret = _wl_cfg80211_del_if(cfg, primary_ndev, wdev, ifname); in wl_cfg80211_del_if()
2575 mutex_unlock(&cfg->if_sync); in wl_cfg80211_del_if()
2580 _wl_cfg80211_del_if(struct bcm_cfg80211 *cfg, struct net_device *primary_ndev, in _wl_cfg80211_del_if() argument
2594 if (!cfg) { in _wl_cfg80211_del_if()
2599 dhd = (dhd_pub_t *)(cfg->pub); in _wl_cfg80211_del_if()
2606 wdev = wl_cfg80211_get_wdev_from_ifname(cfg, ifname); in _wl_cfg80211_del_if()
2630 if (cfg->vif_count) { in _wl_cfg80211_del_if()
2631 cfg->vif_count--; in _wl_cfg80211_del_if()
2638 if ((netinfo = wl_get_netinfo_by_wdev(cfg, wdev)) == NULL) { in _wl_cfg80211_del_if()
2685 if (cfg->vif_count) { in _wl_cfg80211_del_if()
2686 cfg->vif_count--; in _wl_cfg80211_del_if()
2691 if (!((cfg->nancfg->mac_rand) && (wl_iftype == WL_IF_TYPE_NAN))) in _wl_cfg80211_del_if()
2694 wl_release_vif_macaddr(cfg, wdev->netdev->dev_addr, wl_iftype); in _wl_cfg80211_del_if()
2696 WL_INFORM_MEM(("vif deleted. vif_count:%d\n", cfg->vif_count)); in _wl_cfg80211_del_if()
2708 if (wl_get_drv_status(cfg, READY, bcmcfg_to_prmry_ndev(cfg))) { in _wl_cfg80211_del_if()
2734 net_os_send_hang_message(bcmcfg_to_prmry_ndev(cfg)); in _wl_cfg80211_del_if()
2748 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_notify_ifadd() local
2754 if (wl_get_p2p_status(cfg, IF_CHANGING)) in wl_cfg80211_notify_ifadd()
2758 if (wl_get_p2p_status(cfg, IF_ADDING)) { in wl_cfg80211_notify_ifadd()
2760 wl_clr_p2p_status(cfg, IF_ADDING); in wl_cfg80211_notify_ifadd()
2761 } else if (cfg->bss_pending_op) { in wl_cfg80211_notify_ifadd()
2767 wl_if_event_info *if_event_info = &cfg->if_event_info; in wl_cfg80211_notify_ifadd()
2779 cfg->bss_pending_op = FALSE; in wl_cfg80211_notify_ifadd()
2785 wake_up_interruptible(&cfg->netif_change_event); in wl_cfg80211_notify_ifadd()
2796 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_notify_ifdel() local
2797 wl_if_event_info *if_event_info = &cfg->if_event_info; in wl_cfg80211_notify_ifdel()
2800 if (wl_get_p2p_status(cfg, IF_DELETING)) { in wl_cfg80211_notify_ifdel()
2802 wl_clr_p2p_status(cfg, IF_DELETING); in wl_cfg80211_notify_ifdel()
2803 } else if (cfg->bss_pending_op) { in wl_cfg80211_notify_ifdel()
2813 cfg->bss_pending_op = FALSE; in wl_cfg80211_notify_ifdel()
2818 wake_up_interruptible(&cfg->netif_change_event); in wl_cfg80211_notify_ifdel()
2829 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_notify_ifchange() local
2831 if (wl_get_p2p_status(cfg, IF_CHANGING)) { in wl_cfg80211_notify_ifchange()
2832 wl_set_p2p_status(cfg, IF_CHANGED); in wl_cfg80211_notify_ifchange()
2834 wake_up_interruptible(&cfg->netif_change_event); in wl_cfg80211_notify_ifchange()
2889 struct bcm_cfg80211 *cfg = (struct bcm_cfg80211 *)wiphy_priv(wiphy); in wl_cfg80211_set_wiphy_params() local
2890 struct net_device *ndev = bcmcfg_to_prmry_ndev(cfg); in wl_cfg80211_set_wiphy_params()
2893 RETURN_EIO_IF_NOT_UP(cfg); in wl_cfg80211_set_wiphy_params()
2896 (cfg->conf->rts_threshold != wiphy->rts_threshold)) { in wl_cfg80211_set_wiphy_params()
2897 cfg->conf->rts_threshold = wiphy->rts_threshold; in wl_cfg80211_set_wiphy_params()
2898 err = wl_set_rts(ndev, cfg->conf->rts_threshold); in wl_cfg80211_set_wiphy_params()
2903 (cfg->conf->frag_threshold != wiphy->frag_threshold)) { in wl_cfg80211_set_wiphy_params()
2904 cfg->conf->frag_threshold = wiphy->frag_threshold; in wl_cfg80211_set_wiphy_params()
2905 err = wl_set_frag(ndev, cfg->conf->frag_threshold); in wl_cfg80211_set_wiphy_params()
2910 (cfg->conf->retry_long != wiphy->retry_long)) { in wl_cfg80211_set_wiphy_params()
2911 cfg->conf->retry_long = wiphy->retry_long; in wl_cfg80211_set_wiphy_params()
2912 err = wl_set_retry(ndev, cfg->conf->retry_long, true); in wl_cfg80211_set_wiphy_params()
2917 (cfg->conf->retry_short != wiphy->retry_short)) { in wl_cfg80211_set_wiphy_params()
2918 cfg->conf->retry_short = wiphy->retry_short; in wl_cfg80211_set_wiphy_params()
2919 err = wl_set_retry(ndev, cfg->conf->retry_short, false); in wl_cfg80211_set_wiphy_params()
2932 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_ibss_vsie_set_buffer() local
2934 if (cfg != NULL && ibss_vsie != NULL) { in wl_cfg80211_ibss_vsie_set_buffer()
2935 if (cfg->ibss_vsie != NULL) { in wl_cfg80211_ibss_vsie_set_buffer()
2936 MFREE(cfg->osh, cfg->ibss_vsie, cfg->ibss_vsie_len); in wl_cfg80211_ibss_vsie_set_buffer()
2938 cfg->ibss_vsie = ibss_vsie; in wl_cfg80211_ibss_vsie_set_buffer()
2939 cfg->ibss_vsie_len = ibss_vsie_len; in wl_cfg80211_ibss_vsie_set_buffer()
2944 wl_cfg80211_ibss_vsie_free(struct bcm_cfg80211 *cfg) in wl_cfg80211_ibss_vsie_free() argument
2947 if (cfg->ibss_vsie != NULL) { in wl_cfg80211_ibss_vsie_free()
2948 MFREE(cfg->osh, cfg->ibss_vsie, cfg->ibss_vsie_len); in wl_cfg80211_ibss_vsie_free()
2949 cfg->ibss_vsie_len = 0; in wl_cfg80211_ibss_vsie_free()
2956 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_ibss_vsie_delete() local
2960 if (cfg != NULL && cfg->ibss_vsie != NULL) { in wl_cfg80211_ibss_vsie_delete()
2961 ioctl_buf = (char *)MALLOC(cfg->osh, WLC_IOCTL_MEDLEN); in wl_cfg80211_ibss_vsie_delete()
2966 if ((bssidx = wl_get_bssidx_by_wdev(cfg, dev->ieee80211_ptr)) < 0) { in wl_cfg80211_ibss_vsie_delete()
2972 strlcpy(cfg->ibss_vsie->cmd, "del", sizeof(cfg->ibss_vsie->cmd)); in wl_cfg80211_ibss_vsie_delete()
2975 cfg->ibss_vsie, cfg->ibss_vsie_len, in wl_cfg80211_ibss_vsie_delete()
2981 MFREE(cfg->osh, cfg->ibss_vsie, cfg->ibss_vsie_len); in wl_cfg80211_ibss_vsie_delete()
2982 cfg->ibss_vsie_len = 0; in wl_cfg80211_ibss_vsie_delete()
2986 MFREE(cfg->osh, ioctl_buf, WLC_IOCTL_MEDLEN); in wl_cfg80211_ibss_vsie_delete()
2998 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in bcm_cfg80211_add_ibss_if() local
3006 if (cfg->ibss_cfgdev != NULL) { in bcm_cfg80211_add_ibss_if()
3012 primary_ndev = bcmcfg_to_prmry_ndev(cfg); in bcm_cfg80211_add_ibss_if()
3014 get_primary_mac(cfg, &cfg->ibss_if_addr); in bcm_cfg80211_add_ibss_if()
3015 cfg->ibss_if_addr.octet[4] ^= 0x40; in bcm_cfg80211_add_ibss_if()
3017 memcpy(&aibss_if.addr, &cfg->ibss_if_addr, sizeof(aibss_if.addr)); in bcm_cfg80211_add_ibss_if()
3021 cfg->bss_pending_op = TRUE; in bcm_cfg80211_add_ibss_if()
3022 bzero(&cfg->if_event_info, sizeof(cfg->if_event_info)); in bcm_cfg80211_add_ibss_if()
3024 sizeof(aibss_if), cfg->ioctl_buf, WLC_IOCTL_MAXLEN, &cfg->ioctl_buf_sync); in bcm_cfg80211_add_ibss_if()
3029 timeout = wait_event_interruptible_timeout(cfg->netif_change_event, in bcm_cfg80211_add_ibss_if()
3030 !cfg->bss_pending_op, msecs_to_jiffies(MAX_WAIT_TIME)); in bcm_cfg80211_add_ibss_if()
3031 if (timeout <= 0 || cfg->bss_pending_op) in bcm_cfg80211_add_ibss_if()
3034 event = &cfg->if_event_info; in bcm_cfg80211_add_ibss_if()
3041 new_ndev = wl_cfg80211_allocate_if(cfg, event->ifidx, event->name, in bcm_cfg80211_add_ibss_if()
3045 wdev = (struct wireless_dev *)MALLOCZ(cfg->osh, sizeof(*wdev)); in bcm_cfg80211_add_ibss_if()
3058 if (wl_cfg80211_register_if(cfg, event->ifidx, new_ndev, FALSE) != BCME_OK) in bcm_cfg80211_add_ibss_if()
3061 wl_alloc_netinfo(cfg, new_ndev, wdev, WL_IF_TYPE_IBSS, in bcm_cfg80211_add_ibss_if()
3063 cfg->ibss_cfgdev = ndev_to_cfgdev(new_ndev); in bcm_cfg80211_add_ibss_if()
3065 return cfg->ibss_cfgdev; in bcm_cfg80211_add_ibss_if()
3069 cfg->bss_pending_op = FALSE; in bcm_cfg80211_add_ibss_if()
3071 wl_cfg80211_remove_if(cfg, event->ifidx, new_ndev, FALSE); in bcm_cfg80211_add_ibss_if()
3073 MFREE(cfg->osh, wdev, sizeof(*wdev)); in bcm_cfg80211_add_ibss_if()
3082 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in bcm_cfg80211_del_ibss_if() local
3087 if (!cfgdev || cfg->ibss_cfgdev != cfgdev || ETHER_ISNULLADDR(&cfg->ibss_if_addr.octet)) in bcm_cfg80211_del_ibss_if()
3089 ndev = (struct net_device *)cfgdev_to_ndev(cfg->ibss_cfgdev); in bcm_cfg80211_del_ibss_if()
3090 primary_ndev = bcmcfg_to_prmry_ndev(cfg); in bcm_cfg80211_del_ibss_if()
3092 cfg->bss_pending_op = TRUE; in bcm_cfg80211_del_ibss_if()
3093 bzero(&cfg->if_event_info, sizeof(cfg->if_event_info)); in bcm_cfg80211_del_ibss_if()
3094 err = wldev_iovar_setbuf(primary_ndev, "aibss_ifdel", &cfg->ibss_if_addr, in bcm_cfg80211_del_ibss_if()
3095 sizeof(cfg->ibss_if_addr), cfg->ioctl_buf, WLC_IOCTL_MAXLEN, &cfg->ioctl_buf_sync); in bcm_cfg80211_del_ibss_if()
3100 timeout = wait_event_interruptible_timeout(cfg->netif_change_event, in bcm_cfg80211_del_ibss_if()
3101 !cfg->bss_pending_op, msecs_to_jiffies(MAX_WAIT_TIME)); in bcm_cfg80211_del_ibss_if()
3102 if (timeout <= 0 || cfg->bss_pending_op) { in bcm_cfg80211_del_ibss_if()
3107 wl_cfg80211_remove_if(cfg, cfg->if_event_info.ifidx, ndev, FALSE); in bcm_cfg80211_del_ibss_if()
3108 cfg->ibss_cfgdev = NULL; in bcm_cfg80211_del_ibss_if()
3112 cfg->bss_pending_op = FALSE; in bcm_cfg80211_del_ibss_if()
3158 wl_cfg80211_interface_ops(struct bcm_cfg80211 *cfg, in wl_cfg80211_interface_ops() argument
3174 dhd_pub_t *dhd = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_interface_ops()
3199 if (dhd_conf_legacy_chip_check(cfg->pub)) { in wl_cfg80211_interface_ops()
3212 if (dhd_conf_legacy_chip_check(cfg->pub)) { in wl_cfg80211_interface_ops()
3299 wl_customer6_legacy_chip_check(struct bcm_cfg80211 *cfg, in wl_customer6_legacy_chip_check() argument
3340 wl_cfg80211_add_del_bss(struct bcm_cfg80211 *cfg, in wl_cfg80211_add_del_bss() argument
3348 s32 cfg; in wl_cfg80211_add_del_bss() member
3377 bss_setbuf.cfg = htod32(bsscfg_idx); in wl_cfg80211_add_del_bss()
3386 cfg->ioctl_buf, WLC_IOCTL_MAXLEN, &cfg->ioctl_buf_sync); in wl_cfg80211_add_del_bss()
3394 wl_cfg80211_bss_up(struct bcm_cfg80211 *cfg, struct net_device *ndev, s32 bsscfg_idx, s32 bss_up) in wl_cfg80211_bss_up() argument
3400 s32 cfg; in wl_cfg80211_bss_up() member
3404 bss_setbuf.cfg = htod32(bsscfg_idx); in wl_cfg80211_bss_up()
3409 cfg->ioctl_buf, WLC_IOCTL_MAXLEN, &cfg->ioctl_buf_sync); in wl_cfg80211_bss_up()
3608 struct bcm_cfg80211 *cfg; in wl_cfg80211_post_ifcreate() local
3626 cfg = wl_get_cfg(ndev); in wl_cfg80211_post_ifcreate()
3627 if (!cfg) { in wl_cfg80211_post_ifcreate()
3666 primary_ndev = bcmcfg_to_prmry_ndev(cfg); in wl_cfg80211_post_ifcreate()
3677 s16 cfg_type = wl_cfgp2p_get_conn_idx(cfg); in wl_cfg80211_post_ifcreate()
3683 p2p_addr = wl_to_p2p_bss_macaddr(cfg, cfg_type); in wl_cfg80211_post_ifcreate()
3691 primary_ndev = bcmcfg_to_prmry_ndev(cfg); in wl_cfg80211_post_ifcreate()
3700 static_ifidx = wl_cfg80211_static_if_name(cfg, name); in wl_cfg80211_post_ifcreate()
3702 new_ndev = wl_cfg80211_post_static_ifcreate(cfg, event, addr, iface_type, in wl_cfg80211_post_ifcreate()
3712 new_ndev = wl_cfg80211_allocate_if(cfg, event->ifidx, in wl_cfg80211_post_ifcreate()
3722 wdev = (struct wireless_dev *)MALLOCZ(cfg->osh, sizeof(*wdev)); in wl_cfg80211_post_ifcreate()
3725 wl_cfg80211_remove_if(cfg, event->ifidx, new_ndev, rtnl_lock_reqd); in wl_cfg80211_post_ifcreate()
3729 wdev->wiphy = bcmcfg_to_wiphy(cfg); in wl_cfg80211_post_ifcreate()
3736 struct dhd_if *ifp = dhd_get_ifp(cfg->pub, event->ifidx); in wl_cfg80211_post_ifcreate()
3750 if (wl_cfg80211_register_if(cfg, event->ifidx, new_ndev, rtnl_lock_reqd) in wl_cfg80211_post_ifcreate()
3756 MFREE(cfg->osh, wdev, sizeof(*wdev)); in wl_cfg80211_post_ifcreate()
3757 wl_cfg80211_remove_if(cfg, event->ifidx, new_ndev, rtnl_lock_reqd); in wl_cfg80211_post_ifcreate()
3763 ret = wl_alloc_netinfo(cfg, new_ndev, wdev, wl_iftype, in wl_cfg80211_post_ifcreate()
3771 if ((ret = wl_config_infra(cfg, new_ndev, wl_iftype)) < 0) { in wl_cfg80211_post_ifcreate()
3777 wl_set_drv_status(cfg, AP_CREATING, new_ndev); in wl_cfg80211_post_ifcreate()
3788 wl_cfg80211_set_cac(cfg, 0); in wl_cfg80211_post_ifcreate()
3796 static_ifidx = wl_cfg80211_static_if_name(cfg, name); in wl_cfg80211_post_ifcreate()
3798 cfg->static_ndev_state[static_ifidx] = NDEV_STATE_FW_IF_FAILED; in wl_cfg80211_post_ifcreate()
3799 wl_cfg80211_update_iflist_info(cfg, new_ndev, WL_STATIC_IFIDX+static_ifidx, addr, in wl_cfg80211_post_ifcreate()
3805 wl_cfg80211_remove_if(cfg, event->ifidx, new_ndev, rtnl_lock_reqd); in wl_cfg80211_post_ifcreate()
3812 wl_cfg80211_delete_iface(struct bcm_cfg80211 *cfg, in wl_cfg80211_delete_iface() argument
3828 primary_ndev = bcmcfg_to_prmry_ndev(cfg); in wl_cfg80211_delete_iface()
3832 for_each_ndev(cfg, iter, next) { in wl_cfg80211_delete_iface()
3841 ret = _wl_cfg80211_del_if(cfg, in wl_cfg80211_delete_iface()
3847 if (wl_cfgnan_is_enabled(cfg) == false) { in wl_cfg80211_delete_iface()
3851 ret = wl_cfgnan_delete_ndp(cfg, iter->ndev); in wl_cfg80211_delete_iface()
3860 if (wl_cfg80211_static_if(cfg, iter->ndev)) { in wl_cfg80211_delete_iface()
3866 ret = _wl_cfg80211_del_if(cfg, iter->ndev, in wl_cfg80211_delete_iface()
3887 struct bcm_cfg80211 *cfg; in wl_cfg80211_post_ifdel() local
3896 cfg = wl_get_cfg(ndev); in wl_cfg80211_post_ifdel()
3897 if (!cfg) { in wl_cfg80211_post_ifdel()
3906 ifidx = dhd_net2idx(((struct dhd_pub *)(cfg->pub))->info, ndev); in wl_cfg80211_post_ifdel()
3916 if ((netinfo = wl_get_netinfo_by_wdev(cfg, ndev_to_wdev(ndev))) == NULL) { in wl_cfg80211_post_ifdel()
3923 if (wl_cfg80211_static_if(cfg, ndev)) { in wl_cfg80211_post_ifdel()
3924 ret = wl_cfg80211_post_static_ifdel(cfg, ndev); in wl_cfg80211_post_ifdel()
3929 ndev->name, ifidx, cfg->vif_count)); in wl_cfg80211_post_ifdel()
3930 wl_cfg80211_remove_if(cfg, ifidx, ndev, rtnl_lock_reqd); in wl_cfg80211_post_ifdel()
3931 cfg->bss_pending_op = FALSE; in wl_cfg80211_post_ifdel()
3935 wl_cfg80211_set_cac(cfg, 1); in wl_cfg80211_post_ifdel()
3942 wl_cfg80211_deinit_p2p_discovery(struct bcm_cfg80211 *cfg) in wl_cfg80211_deinit_p2p_discovery() argument
3947 if (cfg->p2p) { in wl_cfg80211_deinit_p2p_discovery()
3951 cfgdev = bcmcfg_to_p2p_wdev(cfg); in wl_cfg80211_deinit_p2p_discovery()
3953 cfgdev = cfg->p2p_net; in wl_cfg80211_deinit_p2p_discovery()
3956 ret = wl_cfg80211_scan_stop(cfg, cfgdev); in wl_cfg80211_deinit_p2p_discovery()
3962 wl_cfgp2p_disable_discovery(cfg); in wl_cfg80211_deinit_p2p_discovery()
3963 wl_to_p2p_bss_bssidx(cfg, P2PAPI_BSSCFG_DEVICE) = 0; in wl_cfg80211_deinit_p2p_discovery()
3964 p2p_on(cfg) = false; in wl_cfg80211_deinit_p2p_discovery()
3977 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_create_iface() local
3994 for_each_ndev(cfg, iter, next) { in wl_cfg80211_create_iface()
4004 primary_ndev = bcmcfg_to_prmry_ndev(cfg); in wl_cfg80211_create_iface()
4016 cfg->bss_pending_op = TRUE; in wl_cfg80211_create_iface()
4017 bzero(&cfg->if_event_info, sizeof(cfg->if_event_info)); in wl_cfg80211_create_iface()
4024 if (wl_customer6_legacy_chip_check(cfg, primary_ndev)) { in wl_cfg80211_create_iface()
4031 ret = wl_cfg80211_interface_ops(cfg, primary_ndev, bsscfg_idx, in wl_cfg80211_create_iface()
4037 if ((ret = wl_cfg80211_add_del_bss(cfg, primary_ndev, in wl_cfg80211_create_iface()
4054 timeout = wait_event_interruptible_timeout(cfg->netif_change_event, in wl_cfg80211_create_iface()
4055 !cfg->bss_pending_op, msecs_to_jiffies(MAX_WAIT_TIME)); in wl_cfg80211_create_iface()
4056 if (timeout <= 0 || cfg->bss_pending_op) { in wl_cfg80211_create_iface()
4058 timeout, cfg->bss_pending_op)); in wl_cfg80211_create_iface()
4065 event = &cfg->if_event_info; in wl_cfg80211_create_iface()
4079 cfg->bss_pending_op = FALSE; in wl_cfg80211_create_iface()
4086 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_del_iface() local
4097 if (wl_get_drv_status_all(cfg, SCANNING)) { in wl_cfg80211_del_iface()
4099 wl_cfgscan_cancel_scan(cfg); in wl_cfg80211_del_iface()
4102 bsscfg_idx = wl_get_bssidx_by_wdev(cfg, wdev); in wl_cfg80211_del_iface()
4113 wl_cfg80211_set_cac(cfg, 1); in wl_cfg80211_del_iface()
4124 memset(&cfg->if_event_info, 0, sizeof(cfg->if_event_info)); in wl_cfg80211_del_iface()
4136 if (wl_cfg80211_get_bus_state(cfg)) { in wl_cfg80211_del_iface()
4142 cfg->bss_pending_op = true; in wl_cfg80211_del_iface()
4143 ret = wl_cfg80211_interface_ops(cfg, ndev, bsscfg_idx, in wl_cfg80211_del_iface()
4146 if ((ret = wl_cfg80211_add_del_bss(cfg, ndev, in wl_cfg80211_del_iface()
4164 timeout = wait_event_interruptible_timeout(cfg->netif_change_event, in wl_cfg80211_del_iface()
4165 !cfg->bss_pending_op, msecs_to_jiffies(MAX_WAIT_TIME)); in wl_cfg80211_del_iface()
4166 if (timeout <= 0 || cfg->bss_pending_op) { in wl_cfg80211_del_iface()
4177 if (wl_cfg80211_static_if(cfg, ndev)) { in wl_cfg80211_del_iface()
4183 wl_cfg80211_post_static_ifdel(cfg, ndev); in wl_cfg80211_del_iface()
4187 ret = wl_cfg80211_post_ifdel(ndev, false, cfg->if_event_info.ifidx); in wl_cfg80211_del_iface()
4193 cfg->bss_pending_op = false; in wl_cfg80211_del_iface()
4201 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_join_ibss() local
4214 RETURN_EIO_IF_NOT_UP(cfg); in wl_cfg80211_join_ibss()
4232 cfg->channel = chanspec; in wl_cfg80211_join_ibss()
4234 if (wl_get_drv_status(cfg, CONNECTED, dev)) { in wl_cfg80211_join_ibss()
4235 struct wlc_ssid *lssid = (struct wlc_ssid *)wl_read_prof(cfg, dev, WL_PROF_SSID); in wl_cfg80211_join_ibss()
4236 u8 *bssid = (u8 *)wl_read_prof(cfg, dev, WL_PROF_BSSID); in wl_cfg80211_join_ibss()
4237 u32 *channel = (u32 *)wl_read_prof(cfg, dev, WL_PROF_CHAN); in wl_cfg80211_join_ibss()
4240 (*channel == cfg->channel))) { in wl_cfg80211_join_ibss()
4242 MAC2STRDBG((u8 *)wl_read_prof(cfg, dev, WL_PROF_BSSID)))); in wl_cfg80211_join_ibss()
4275 if (!wl_get_drv_status_all(cfg, SCANNING)) { in wl_cfg80211_join_ibss()
4288 cfg->ibss_starter = false; in wl_cfg80211_join_ibss()
4291 cfg->ibss_starter = true; in wl_cfg80211_join_ibss()
4300 err = wl_get_bandwidth_cap(dev, CHSPEC_BAND(cfg->channel), &bw_cap); in wl_cfg80211_join_ibss()
4305 chanspec = wf_create_chspec_from_primary(wf_chspec_primary20_chan(cfg->channel), in wl_cfg80211_join_ibss()
4306 bw_cap, CHSPEC_BAND(cfg->channel)); in wl_cfg80211_join_ibss()
4369 wl_update_prof(cfg, dev, NULL, &join_params.ssid, WL_PROF_SSID); in wl_cfg80211_join_ibss()
4370 wl_update_prof(cfg, dev, NULL, &cfg->channel, WL_PROF_CHAN); in wl_cfg80211_join_ibss()
4372 cfg->aibss_txfail_seq = 0; /* initialize the sequence */ in wl_cfg80211_join_ibss()
4375 cfg->rmc_event_seq = 0; /* initialize rmcfail sequence */ in wl_cfg80211_join_ibss()
4382 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_leave_ibss() local
4387 RETURN_EIO_IF_NOT_UP(cfg); in wl_cfg80211_leave_ibss()
4388 wl_link_down(cfg); in wl_cfg80211_leave_ibss()
4391 curbssid = wl_read_prof(cfg, dev, WL_PROF_BSSID); in wl_cfg80211_leave_ibss()
4392 wl_set_drv_status(cfg, DISCONNECTING, dev); in wl_cfg80211_leave_ibss()
4398 wl_clr_drv_status(cfg, DISCONNECTING, dev); in wl_cfg80211_leave_ibss()
4467 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_set_wpa_version() local
4473 if ((bssidx = wl_get_bssidx_by_wdev(cfg, dev->ieee80211_ptr)) < 0) { in wl_set_wpa_version()
4496 sec = wl_read_prof(cfg, dev, WL_PROF_SEC); in wl_set_wpa_version()
4505 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_set_set_wapi_ie() local
4510 if ((bssidx = wl_get_bssidx_by_wdev(cfg, dev->ieee80211_ptr)) < 0) { in wl_set_set_wapi_ie()
4516 cfg->ioctl_buf, WLC_IOCTL_MAXLEN, bssidx, &cfg->ioctl_buf_sync); in wl_set_set_wapi_ie()
4529 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_set_auth_type() local
4535 if ((bssidx = wl_get_bssidx_by_wdev(cfg, dev->ieee80211_ptr)) < 0) { in wl_set_auth_type()
4596 sec = wl_read_prof(cfg, dev, WL_PROF_SEC); in wl_set_auth_type()
4644 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_set_set_cipher() local
4661 if ((bssidx = wl_get_bssidx_by_wdev(cfg, dev->ieee80211_ptr)) < 0) { in wl_set_set_cipher()
4719 if (cfg->wdev->wiphy->features & NL80211_FEATURE_FW_4WAY_HANDSHAKE) { in wl_set_set_cipher()
4794 sec = wl_read_prof(cfg, dev, WL_PROF_SEC); in wl_set_set_cipher()
4804 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_set_wsec_info_algos() local
4815 if (!cfg) { in wl_set_wsec_info_algos()
4818 if ((bssidx = wl_get_bssidx_by_wdev(cfg, dev->ieee80211_ptr)) < 0) { in wl_set_wsec_info_algos()
4823 buf = MALLOCZ(cfg->osh, sizeof(wl_wsec_info_t) + sizeof(tlv_data)); in wl_set_wsec_info_algos()
4842 cfg->ioctl_buf, WLC_IOCTL_MAXLEN, bssidx, &cfg->ioctl_buf_sync); in wl_set_wsec_info_algos()
4844 MFREE(cfg->osh, buf, sizeof(wl_wsec_info_t) + sizeof(tlv_data)); in wl_set_wsec_info_algos()
4854 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_set_wsec_info() local
4862 if (!cfg) { in wl_cfg80211_set_wsec_info()
4871 if ((bssidx = wl_get_bssidx_by_wdev(cfg, dev->ieee80211_ptr)) < 0) { in wl_cfg80211_set_wsec_info()
4877 buf = MALLOCZ(cfg->osh, sizeof(wl_wsec_info_t) + data_len); in wl_cfg80211_set_wsec_info()
4895 cfg->ioctl_buf, WLC_IOCTL_MAXLEN, bssidx, &cfg->ioctl_buf_sync); in wl_cfg80211_set_wsec_info()
4902 MFREE(cfg->osh, buf, sizeof(wl_wsec_info_t) + data_len); in wl_cfg80211_set_wsec_info()
4909 wl_cfg80211_set_mfp(struct bcm_cfg80211 *cfg, in wl_cfg80211_set_mfp() argument
4922 struct wl_security *sec = wl_read_prof(cfg, dev, WL_PROF_SEC); in wl_cfg80211_set_mfp()
5014 group_mgmt_cs, WPA_SUITE_LEN, cfg->ioctl_buf, in wl_cfg80211_set_mfp()
5015 WLC_IOCTL_SMLEN, &cfg->ioctl_buf_sync); in wl_cfg80211_set_mfp()
5024 if (wl_customer6_legacy_chip_check(cfg, in wl_cfg80211_set_mfp()
5025 bcmcfg_to_prmry_ndev(cfg))) { in wl_cfg80211_set_mfp()
5048 wl_flush_fw_log_buffer(bcmcfg_to_prmry_ndev(cfg), in wl_cfg80211_set_mfp()
5080 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_set_fils_params() local
5107 iov_buf = MALLOCZ(cfg->osh, WLC_IOCTL_SMLEN); in wl_set_fils_params()
5155 sizeof(uint16), cfg->ioctl_buf, WLC_IOCTL_SMLEN, &cfg->ioctl_buf_sync); in wl_set_fils_params()
5169 MFREE(cfg->osh, iov_buf, WLC_IOCTL_SMLEN); in wl_set_fils_params()
5196 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_fils_toggle_roaming() local
5198 if (WPA2_AUTH_IS_FILS(auth_type) && !cfg->fils_info.fils_roam_disabled) { in wl_fils_toggle_roaming()
5199 err = wl_get_bcn_timeout(dev, &cfg->fils_info.fils_bcn_timeout_cache); in wl_fils_toggle_roaming()
5204 cfg->fils_info.fils_roam_disabled = true; in wl_fils_toggle_roaming()
5206 } else if (cfg->fils_info.fils_roam_disabled) { in wl_fils_toggle_roaming()
5208 wl_dongle_roam(dev, WL_ROAM_ENABLE, cfg->fils_info.fils_bcn_timeout_cache); in wl_fils_toggle_roaming()
5209 cfg->fils_info.fils_roam_disabled = false; in wl_fils_toggle_roaming()
5220 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_set_key_mgmt() local
5226 if ((bssidx = wl_get_bssidx_by_wdev(cfg, dev->ieee80211_ptr)) < 0) { in wl_set_key_mgmt()
5258 if (wl_customer6_legacy_chip_check(cfg, dev)) { in wl_set_key_mgmt()
5265 if (wl_customer6_legacy_chip_check(cfg, dev)) { in wl_set_key_mgmt()
5347 if ((err = wl_cfg80211_set_mfp(cfg, dev, sme)) < 0) { in wl_set_key_mgmt()
5360 sec = wl_read_prof(cfg, dev, WL_PROF_SEC); in wl_set_key_mgmt()
5371 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_set_set_sharedkey() local
5378 if ((bssidx = wl_get_bssidx_by_wdev(cfg, dev->ieee80211_ptr)) < 0) { in wl_set_set_sharedkey()
5385 sec = wl_read_prof(cfg, dev, WL_PROF_SEC); in wl_set_set_sharedkey()
5421 cfg->ioctl_buf, WLC_IOCTL_MAXLEN, bssidx, &cfg->ioctl_buf_sync); in wl_set_set_sharedkey()
5457 int wl_cfg80211_cleanup_mismatch_status(struct net_device *dev, struct bcm_cfg80211 *cfg, in wl_cfg80211_cleanup_mismatch_status() argument
5466 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_cleanup_mismatch_status()
5472 wl_set_drv_status(cfg, DISCONNECTING, dev); in wl_cfg80211_cleanup_mismatch_status()
5479 wl_clr_drv_status(cfg, DISCONNECTING, dev); in wl_cfg80211_cleanup_mismatch_status()
5487 if (wl_get_drv_status(cfg, DISCONNECTING, dev)) { in wl_cfg80211_cleanup_mismatch_status()
5488 wl_clr_drv_status(cfg, DISCONNECTING, dev); in wl_cfg80211_cleanup_mismatch_status()
5492 while (wl_get_drv_status(cfg, DISCONNECTING, dev) && wait_cnt) { in wl_cfg80211_cleanup_mismatch_status()
5504 wl_clr_drv_status(cfg, DISCONNECTING, dev); in wl_cfg80211_cleanup_mismatch_status()
5505 wl_clr_drv_status(cfg, CONNECTED, dev); in wl_cfg80211_cleanup_mismatch_status()
5513 wl_fils_add_hlp_container(struct bcm_cfg80211 *cfg, struct net_device *dev, in wl_fils_add_hlp_container() argument
5536 iov_buf = MALLOCZ(cfg->osh, iov_buf_len); in wl_fils_add_hlp_container()
5556 cfg->ioctl_buf, WLC_IOCTL_MAXLEN, &cfg->ioctl_buf_sync); in wl_fils_add_hlp_container()
5563 MFREE(cfg->osh, iov_buf, iov_buf_len); in wl_fils_add_hlp_container()
5618 wl_config_roam_env_detection(struct bcm_cfg80211 *cfg, struct net_device *dev) in wl_config_roam_env_detection() argument
5621 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wl_config_roam_env_detection()
5626 if (dhdp->roam_env_detection && (dev == bcmcfg_to_prmry_ndev(cfg))) { in wl_config_roam_env_detection()
5653 wl_do_preassoc_ops(struct bcm_cfg80211 *cfg, in wl_do_preassoc_ops() argument
5657 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wl_do_preassoc_ops()
5669 if (wl_get_drv_status(cfg, SCANNING, dev)) { in wl_do_preassoc_ops()
5670 wl_cfgscan_cancel_scan(cfg); in wl_do_preassoc_ops()
5677 if (cfg->sched_scan_req) { in wl_do_preassoc_ops()
5680 wl_cfg80211_sched_scan_stop(wdev->wiphy, bcmcfg_to_prmry_ndev(cfg), in wl_do_preassoc_ops()
5681 cfg->sched_scan_req->reqid); in wl_do_preassoc_ops()
5683 wl_cfg80211_sched_scan_stop(wdev->wiphy, bcmcfg_to_prmry_ndev(cfg)); in wl_do_preassoc_ops()
5689 cfg->block_gon_req_tx_count = 0; in wl_do_preassoc_ops()
5690 cfg->block_gon_req_rx_count = 0; in wl_do_preassoc_ops()
5698 if (wl_config_roam_env_detection(cfg, dev) != BCME_OK) { in wl_do_preassoc_ops()
5705 wl_cfg80211_tdls_config(cfg, TDLS_STATE_CONNECT, false); in wl_do_preassoc_ops()
5710 wl_restore_ap_bw(cfg); in wl_do_preassoc_ops()
5729 wl_set_drv_status(cfg, CFG80211_CONNECT, dev); in wl_do_preassoc_ops()
5734 wl_config_assoc_security(struct bcm_cfg80211 *cfg, in wl_config_assoc_security() argument
5753 err = wl_fils_add_hlp_container(cfg, dev, sme->ie, sme->ie_len); in wl_config_assoc_security()
5792 wl_config_assoc_ies(struct bcm_cfg80211 *cfg, struct net_device *dev, in wl_config_assoc_ies() argument
5803 wl_cfg80211_set_mgmt_vndr_ies(cfg, ndev_to_cfgdev(dev), bssidx, in wl_config_assoc_ies()
5807 if ((err = wl_cfg80211_config_rsnxe_ie(cfg, dev, in wl_config_assoc_ies()
5835 cfg->ioctl_buf, WLC_IOCTL_MAXLEN, &cfg->ioctl_buf_sync); in wl_config_assoc_ies()
5844 wl_cfg80211_config_rsnxe_ie(struct bcm_cfg80211 *cfg, struct net_device *dev, in wl_cfg80211_config_rsnxe_ie() argument
5873 wl_fillup_assoc_params_v1(struct bcm_cfg80211 *cfg, struct net_device *dev, in wl_fillup_assoc_params_v1() argument
5901 wl_update_prof(cfg, dev, NULL, &ext_join_params->ssid, WL_PROF_SSID); in wl_fillup_assoc_params_v1()
5935 wl_fillup_assoc_params_v0(struct bcm_cfg80211 *cfg, struct net_device *dev, in wl_fillup_assoc_params_v0() argument
5957 wl_update_prof(cfg, dev, NULL, &ext_join_params->ssid, WL_PROF_SSID); in wl_fillup_assoc_params_v0()
5991 wl_config_assoc_params(struct bcm_cfg80211 *cfg, struct net_device *dev, in wl_config_assoc_params() argument
5996 if (!cfg->join_iovar_ver) { in wl_config_assoc_params()
5997 ret = wl_fillup_assoc_params_v0(cfg, dev, params, buf_len, info); in wl_config_assoc_params()
5999 ret = wl_fillup_assoc_params_v1(cfg, dev, params, buf_len, info); in wl_config_assoc_params()
6005 wl_handle_assoc_hints(struct bcm_cfg80211 *cfg, struct net_device *dev, in wl_handle_assoc_hints() argument
6042 if (!(cfg->p2p_6g_enabled)) { in wl_handle_assoc_hints()
6073 if (cfg->join_iovar_ver) { in wl_handle_assoc_hints()
6103 wl_sync_fw_assoc_states(struct bcm_cfg80211 *cfg, in wl_sync_fw_assoc_states() argument
6109 if (wl_get_drv_status(cfg, CONNECTED, dev) && wl_reassoc_support) { in wl_sync_fw_assoc_states()
6114 wl_update_prof(cfg, dev, NULL, info->bssid, WL_PROF_LATEST_BSSID); in wl_sync_fw_assoc_states()
6134 if (wl_get_drv_status(cfg, CONNECTING, dev) || in wl_sync_fw_assoc_states()
6135 wl_get_drv_status(cfg, CONNECTED, dev)) { in wl_sync_fw_assoc_states()
6137 wl_set_drv_status(cfg, NESTED_CONNECT, dev); in wl_sync_fw_assoc_states()
6139 wl_cfg80211_cleanup_mismatch_status(dev, cfg, TRUE); in wl_sync_fw_assoc_states()
6140 } else if (wl_get_drv_status(cfg, DISCONNECTING, dev)) { in wl_sync_fw_assoc_states()
6142 wl_cfg80211_cleanup_mismatch_status(dev, cfg, false); in wl_sync_fw_assoc_states()
6143 } else if (!wl_get_drv_status(cfg, CONNECTED, dev)) { in wl_sync_fw_assoc_states()
6147 wl_set_drv_status(cfg, NESTED_CONNECT, dev); in wl_sync_fw_assoc_states()
6148 wl_cfg80211_cleanup_mismatch_status(dev, cfg, true); in wl_sync_fw_assoc_states()
6158 if (!info->reassoc && !wl_get_drv_status(cfg, DISCONNECTING, dev)) { in wl_sync_fw_assoc_states()
6159 wl_update_prof(cfg, dev, NULL, (void *)&bssid, WL_PROF_BSSID); in wl_sync_fw_assoc_states()
6162 LOG_TS(cfg, conn_start); in wl_sync_fw_assoc_states()
6163 CLR_TS(cfg, authorize_start); in wl_sync_fw_assoc_states()
6165 wl_clr_drv_status(cfg, NESTED_CONNECT, dev); in wl_sync_fw_assoc_states()
6169 wl_set_drv_status(cfg, CONNECTING, dev); in wl_sync_fw_assoc_states()
6177 wl_pkt_mon_start(struct bcm_cfg80211 *cfg, struct net_device *dev) in wl_pkt_mon_start() argument
6179 if (dev == bcmcfg_to_prmry_ndev(cfg)) { in wl_pkt_mon_start()
6180 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wl_pkt_mon_start()
6187 wl_ext_get_rssi(struct bcm_cfg80211 *cfg, u8 *bssid) in wl_ext_get_rssi() argument
6193 mutex_lock(&cfg->scan_sync); in wl_ext_get_rssi()
6194 bss_list = cfg->bss_list; in wl_ext_get_rssi()
6200 mutex_unlock(&cfg->scan_sync); in wl_ext_get_rssi()
6206 wl_conn_debug_info(struct bcm_cfg80211 *cfg, struct net_device *dev, wlcfg_assoc_info_t *info) in wl_conn_debug_info() argument
6208 struct wl_security *sec = wl_read_prof(cfg, dev, WL_PROF_SEC); in wl_conn_debug_info()
6221 target_rssi = wl_ext_get_rssi(cfg, info->bssid); in wl_conn_debug_info()
6256 wl_handle_join(struct bcm_cfg80211 *cfg, in wl_handle_join() argument
6263 if (!cfg->join_iovar_ver) { in wl_handle_join()
6266 } else if (cfg->join_iovar_ver == WL_EXTJOIN_VERSION_V1) { in wl_handle_join()
6275 join_params = MALLOCZ(cfg->osh, join_params_size); in wl_handle_join()
6283 err = wl_config_assoc_params(cfg, dev, join_params, join_params_size, in wl_handle_join()
6294 wl_conn_debug_info(cfg, dev, assoc_info); in wl_handle_join()
6296 cfg->ioctl_buf, WLC_IOCTL_MAXLEN, assoc_info->bssidx, &cfg->ioctl_buf_sync); in wl_handle_join()
6303 MFREE(cfg->osh, join_params, join_params_size); in wl_handle_join()
6309 wl_handle_reassoc(struct bcm_cfg80211 *cfg, struct net_device *dev, in wl_handle_reassoc() argument
6319 if (!cfg->join_iovar_ver) { in wl_handle_reassoc()
6322 } else if (cfg->join_iovar_ver == WL_EXTJOIN_VERSION_V1) { in wl_handle_reassoc()
6331 reassoc_params = MALLOCZ(cfg->osh, reassoc_params_size); in wl_handle_reassoc()
6347 wl_conn_debug_info(cfg, dev, info); in wl_handle_reassoc()
6356 MFREE(cfg->osh, reassoc_params, reassoc_params_size); in wl_handle_reassoc()
6366 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_connect() local
6370 RETURN_EIO_IF_NOT_UP(cfg); in wl_cfg80211_connect()
6373 mutex_lock(&cfg->connect_sync); in wl_cfg80211_connect()
6376 if ((assoc_info.bssidx = wl_get_bssidx_by_wdev(cfg, dev->ieee80211_ptr)) < 0) { in wl_cfg80211_connect()
6381 err = wl_do_preassoc_ops(cfg, dev, sme); in wl_cfg80211_connect()
6387 err = wl_handle_assoc_hints(cfg, dev, sme, &assoc_info); in wl_cfg80211_connect()
6393 if (wl_sync_fw_assoc_states(cfg, dev, &assoc_info) != BCME_OK) { in wl_cfg80211_connect()
6403 if ((err = wl_handle_reassoc(cfg, dev, &assoc_info)) != BCME_OK) { in wl_cfg80211_connect()
6407 err = wl_config_assoc_security(cfg, dev, sme); in wl_cfg80211_connect()
6413 err = wl_get_assoc_channels(cfg, dev, &assoc_info); in wl_cfg80211_connect()
6419 err = wl_config_assoc_ies(cfg, dev, sme, &assoc_info); in wl_cfg80211_connect()
6425 if ((err = wl_handle_join(cfg, dev, &assoc_info)) != BCME_OK) { in wl_cfg80211_connect()
6430 cfg->eidx.min_connect_idx = cfg->eidx.enqd; in wl_cfg80211_connect()
6435 wl_clr_drv_status(cfg, CONNECTING, dev); in wl_cfg80211_connect()
6436 CLR_TS(cfg, conn_start); in wl_cfg80211_connect()
6441 wl_cfg80211_tdls_config(cfg, TDLS_STATE_DISCONNECT, false); in wl_cfg80211_connect()
6446 wl_pkt_mon_start(cfg, dev); in wl_cfg80211_connect()
6455 mutex_unlock(&cfg->connect_sync); in wl_cfg80211_connect()
6459 static void wl_cfg80211_wait_for_disconnection(struct bcm_cfg80211 *cfg, struct net_device *dev) in wl_cfg80211_wait_for_disconnection() argument
6465 while ((status = wl_get_drv_status(cfg, DISCONNECTING, dev)) && wait_cnt) { in wl_cfg80211_wait_for_disconnection()
6472 if (!wait_cnt && wl_get_drv_status(cfg, DISCONNECTING, dev)) { in wl_cfg80211_wait_for_disconnection()
6476 if (wl_get_drv_status(cfg, CONNECTING, dev)) { in wl_cfg80211_wait_for_disconnection()
6486 CLR_TS(cfg, conn_start); in wl_cfg80211_wait_for_disconnection()
6487 CLR_TS(cfg, authorize_start); in wl_cfg80211_wait_for_disconnection()
6488 wl_clr_drv_status(cfg, DISCONNECTING, dev); in wl_cfg80211_wait_for_disconnection()
6497 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_disconnect() local
6508 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_disconnect()
6511 RETURN_EIO_IF_NOT_UP(cfg); in wl_cfg80211_disconnect()
6522 connected = wl_get_drv_status(cfg, CONNECTED, dev); in wl_cfg80211_disconnect()
6523 conn_in_progress = wl_get_drv_status(cfg, CONNECTING, dev); in wl_cfg80211_disconnect()
6524 curbssid = wl_read_prof(cfg, dev, WL_PROF_BSSID); in wl_cfg80211_disconnect()
6525 act = *(bool *) wl_read_prof(cfg, dev, WL_PROF_ACT); in wl_cfg80211_disconnect()
6545 if (dev == bcmcfg_to_prmry_ndev(cfg)) { in wl_cfg80211_disconnect()
6553 if (cfg->scan_request) { in wl_cfg80211_disconnect()
6555 wl_cfgscan_cancel_scan(cfg); in wl_cfg80211_disconnect()
6574 wl_set_drv_status(cfg, DISCONNECTING, dev); in wl_cfg80211_disconnect()
6578 wl_clr_drv_status(cfg, DISCONNECTING, dev); in wl_cfg80211_disconnect()
6595 wl_clr_drv_status(cfg, DISCONNECTING, dev); in wl_cfg80211_disconnect()
6598 wl_clr_drv_status(cfg, CONNECTED, dev); in wl_cfg80211_disconnect()
6604 wl_cfg80211_wait_for_disconnection(cfg, dev); in wl_cfg80211_disconnect()
6625 if (dev == bcmcfg_to_prmry_ndev(cfg)) { in wl_cfg80211_disconnect()
6632 cfg->rssi = 0; /* reset backup of rssi */ in wl_cfg80211_disconnect()
6635 CLR_TS(cfg, conn_start); in wl_cfg80211_disconnect()
6636 CLR_TS(cfg, authorize_start); in wl_cfg80211_disconnect()
6639 if ((bssidx = wl_get_bssidx_by_wdev(cfg, dev->ieee80211_ptr)) >= 0) { in wl_cfg80211_disconnect()
6641 err = wl_cfg80211_set_mgmt_vndr_ies(cfg, in wl_cfg80211_disconnect()
6661 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_set_tx_power() local
6662 struct net_device *ndev = bcmcfg_to_prmry_ndev(cfg); in wl_cfg80211_set_tx_power()
6671 RETURN_EIO_IF_NOT_UP(cfg); in wl_cfg80211_set_tx_power()
6695 cfg->conf->tx_power = dbm; in wl_cfg80211_set_tx_power()
6708 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_get_tx_power() local
6709 struct net_device *ndev = bcmcfg_to_prmry_ndev(cfg); in wl_cfg80211_get_tx_power()
6712 RETURN_EIO_IF_NOT_UP(cfg); in wl_cfg80211_get_tx_power()
6727 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_config_default_key() local
6733 if ((bssidx = wl_get_bssidx_by_wdev(cfg, dev->ieee80211_ptr)) < 0) { in wl_cfg80211_config_default_key()
6739 RETURN_EIO_IF_NOT_UP(cfg); in wl_cfg80211_config_default_key()
6763 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_add_keyext() local
6767 s32 mode = wl_get_mode_by_netdev(cfg, dev); in wl_add_keyext()
6770 if ((bssidx = wl_get_bssidx_by_wdev(cfg, dev->ieee80211_ptr)) < 0) { in wl_add_keyext()
6786 cfg->ioctl_buf, WLC_IOCTL_MAXLEN, bssidx, &cfg->ioctl_buf_sync); in wl_add_keyext()
6828 cfg->ioctl_buf, WLC_IOCTL_MAXLEN, bssidx, &cfg->ioctl_buf_sync); in wl_add_keyext()
6843 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_enable_roam_offload() local
6845 if (dev != bcmcfg_to_prmry_ndev(cfg)) { in wl_cfg80211_enable_roam_offload()
6862 err = wl_cfg80211_apply_eventbuffer(dev, cfg, &ev_buf); in wl_cfg80211_enable_roam_offload()
6864 cfg->roam_offload = enable; in wl_cfg80211_enable_roam_offload()
6870 wl_cfg80211_get_wdev_from_ifname(struct bcm_cfg80211 *cfg, const char *name) in wl_cfg80211_get_wdev_from_ifname() argument
6880 for_each_ndev(cfg, iter, next) { in wl_cfg80211_get_wdev_from_ifname()
6897 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_block_arp() local
6898 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_block_arp()
6909 if (!wl_get_drv_status(cfg, CONNECTED, dev)) { in wl_cfg80211_block_arp()
6948 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_add_key() local
6949 s32 mode = wl_get_mode_by_netdev(cfg, dev); in wl_cfg80211_add_key()
6958 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_add_key()
6971 RETURN_EIO_IF_NOT_UP(cfg); in wl_cfg80211_add_key()
6973 if ((bssidx = wl_get_bssidx_by_wdev(cfg, dev->ieee80211_ptr)) < 0) { in wl_cfg80211_add_key()
6992 bzero(&cfg->wep_key, sizeof(struct wl_wsec_key)); in wl_cfg80211_add_key()
7035 sec = wl_read_prof(cfg, dev, WL_PROF_SEC); in wl_cfg80211_add_key()
7056 cfg->ioctl_buf, WLC_IOCTL_SMLEN, bssidx, &cfg->ioctl_buf_sync); in wl_cfg80211_add_key()
7105 memcpy(&cfg->wep_key, &key, sizeof(struct wl_wsec_key)); in wl_cfg80211_add_key()
7107 err = wldev_iovar_setbuf_bsscfg(dev, "wsec_key", &key, sizeof(key), cfg->ioctl_buf, in wl_cfg80211_add_key()
7108 WLC_IOCTL_MAXLEN, bssidx, &cfg->ioctl_buf_sync); in wl_cfg80211_add_key()
7144 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_del_key() local
7148 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_del_key()
7160 if ((bssidx = wl_get_bssidx_by_wdev(cfg, dev->ieee80211_ptr)) < 0) { in wl_cfg80211_del_key()
7171 RETURN_EIO_IF_NOT_UP(cfg); in wl_cfg80211_del_key()
7185 err = wldev_iovar_setbuf_bsscfg(dev, "wsec_key", &key, sizeof(key), cfg->ioctl_buf, in wl_cfg80211_del_key()
7186 WLC_IOCTL_MAXLEN, bssidx, &cfg->ioctl_buf_sync); in wl_cfg80211_del_key()
7212 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_get_key() local
7218 if ((bssidx = wl_get_bssidx_by_wdev(cfg, dev->ieee80211_ptr)) < 0) { in wl_cfg80211_get_key()
7223 RETURN_EIO_IF_NOT_UP(cfg); in wl_cfg80211_get_key()
7238 sec = wl_read_prof(cfg, dev, WL_PROF_SEC); in wl_cfg80211_get_key()
7300 wl_check_assoc_state(struct bcm_cfg80211 *cfg, struct net_device *dev) in wl_check_assoc_state() argument
7307 NULL, 0, cfg->ioctl_buf, WLC_IOCTL_MEDLEN, 0, &cfg->ioctl_buf_sync); in wl_check_assoc_state()
7312 memcpy(&asinfo, cfg->ioctl_buf, sizeof(wl_assoc_info_t)); in wl_check_assoc_state()
7321 wl_cfg80211_get_rssi(struct net_device *dev, struct bcm_cfg80211 *cfg, s32 *rssi) in wl_cfg80211_get_rssi() argument
7329 if (dev == NULL || cfg == NULL) { in wl_cfg80211_get_rssi()
7348 cfg->rssi_sum_report = TRUE; in wl_cfg80211_get_rssi()
7356 if (cfg->rssi_sum_report == FALSE) { in wl_cfg80211_get_rssi()
7374 DHD_OS_WAKE_LOCK((dhd_pub_t *)(cfg->pub)); in wl_cfg80211_get_rssi()
7375 if (wl_get_drv_status(cfg, CONNECTED, dev) && wl_check_assoc_state(cfg, dev)) { in wl_cfg80211_get_rssi()
7376 *rssi = cfg->rssi; /* use previous RSSI */ in wl_cfg80211_get_rssi()
7377 WL_DBG(("use previous RSSI %d dBm\n", cfg->rssi)); in wl_cfg80211_get_rssi()
7381 DHD_OS_WAKE_UNLOCK((dhd_pub_t *)(cfg->pub)); in wl_cfg80211_get_rssi()
7384 cfg->rssi = *rssi; in wl_cfg80211_get_rssi()
7422 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_ifstats_counters() local
7423 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_ifstats_counters()
7501 bsscfg_idx = wl_get_bssidx_by_wdev(cfg, dev->ieee80211_ptr); in wl_cfg80211_ifstats_counters()
7506 &cfg->ioctl_buf_sync); in wl_cfg80211_ifstats_counters()
7577 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_get_station() local
7596 dhd_pub_t *dhd = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_get_station()
7602 RETURN_EIO_IF_NOT_UP(cfg); in wl_cfg80211_get_station()
7608 buf = MALLOC(cfg->osh, WLC_IOCTL_MEDLEN); in wl_cfg80211_get_station()
7617 if (cfg->roam_offload) { in wl_cfg80211_get_station()
7626 err = wl_cfg80211_delayed_roam(cfg, dev, &bssid); in wl_cfg80211_get_station()
7635 dhd_assoc_state = wl_get_drv_status(cfg, CONNECTED, dev); in wl_cfg80211_get_station()
7640 if (wl_check_assoc_state(cfg, dev)) { in wl_cfg80211_get_station()
7650 if (!wl_get_drv_status(cfg, CONNECTED, dev)) in wl_cfg80211_get_station()
7691 curmacp = wl_read_prof(cfg, dev, WL_PROF_BSSID); in wl_cfg80211_get_station()
7717 if ((err = wl_cfg80211_get_rssi(dev, cfg, &rssi)) != BCME_OK) { in wl_cfg80211_get_station()
7721 err = wl_update_connected_rssi_cache(dev, &cfg->g_connected_rssi_cache_ctrl, &rssi); in wl_cfg80211_get_station()
7726 wl_delete_dirty_rssi_cache(&cfg->g_connected_rssi_cache_ctrl); in wl_cfg80211_get_station()
7727 wl_reset_rssi_cache(&cfg->g_connected_rssi_cache_ctrl); in wl_cfg80211_get_station()
7806 (char*)&maxrxpktglom, 4, cfg->ioctl_buf, in wl_cfg80211_get_station()
7807 WLC_IOCTL_MAXLEN, &cfg->ioctl_buf_sync); in wl_cfg80211_get_station()
7883 wl_clr_drv_status(cfg, CONNECTED, dev); in wl_cfg80211_get_station()
7889 wl_link_down(cfg); in wl_cfg80211_get_station()
7925 WL_ERR(("Invalid device mode %d\n", wl_get_mode_by_netdev(cfg, dev))); in wl_cfg80211_get_station()
7929 MFREE(cfg->osh, buf, WLC_IOCTL_MEDLEN); in wl_cfg80211_get_station()
7939 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_dump_station() local
7940 struct maclist *assoc_maclist = (struct maclist *)&(cfg->assoclist); in wl_cfg80211_dump_station()
7948 assoc_maclist, sizeof(cfg->assoclist)); in wl_cfg80211_dump_station()
7951 cfg->assoclist.count = 0; in wl_cfg80211_dump_station()
7956 if (idx < le32_to_cpu(cfg->assoclist.count)) { in wl_cfg80211_dump_station()
7957 (void)memcpy_s(mac, ETH_ALEN, cfg->assoclist.mac[idx], ETH_ALEN); in wl_cfg80211_dump_station()
7970 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_set_power_mgmt() local
7971 struct net_info *_net_info = wl_get_netinfo_by_netdev(cfg, dev); in wl_cfg80211_set_power_mgmt()
7976 dhd_pub_t *dhd = cfg->pub; in wl_cfg80211_set_power_mgmt()
7977 RETURN_EIO_IF_NOT_UP(cfg); in wl_cfg80211_set_power_mgmt()
7980 mode = wl_get_mode_by_netdev(cfg, dev); in wl_cfg80211_set_power_mgmt()
7981 if (cfg->p2p_net == dev || _net_info == NULL || in wl_cfg80211_set_power_mgmt()
7982 !wl_get_drv_status(cfg, CONNECTED, dev) || in wl_cfg80211_set_power_mgmt()
7989 wl_add_remove_pm_enable_work(cfg, WL_PM_WORKQ_LONG); in wl_cfg80211_set_power_mgmt()
8068 wl_cfg80211_resume(struct bcm_cfg80211 *cfg) in wl_cfg80211_resume() argument
8070 struct net_device *ndev = bcmcfg_to_prmry_ndev(cfg); in wl_cfg80211_resume()
8074 if (unlikely(!wl_get_drv_status(cfg, READY, ndev))) { in wl_cfg80211_resume()
8082 sizeof(pkt_filter_id), cfg->ioctl_buf, WLC_IOCTL_SMLEN, in wl_cfg80211_resume()
8083 &cfg->ioctl_buf_sync); in wl_cfg80211_resume()
8107 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_wowlan_config() local
8108 struct net_device *ndev = bcmcfg_to_prmry_ndev(cfg); in wl_wowlan_config()
8127 pkt_filterp = (wl_pkt_filter_t *)MALLOCZ(cfg->osh, max_buf_size); in wl_wowlan_config()
8183 cfg->ioctl_buf, WLC_IOCTL_MEDLEN, &cfg->ioctl_buf_sync); in wl_wowlan_config()
8195 cfg->ioctl_buf, WLC_IOCTL_SMLEN, &cfg->ioctl_buf_sync); in wl_wowlan_config()
8208 MFREE(cfg->osh, pkt_filterp, max_buf_size); in wl_wowlan_config()
8222 wl_cfg80211_suspend(struct bcm_cfg80211 *cfg) in wl_cfg80211_suspend() argument
8227 struct wiphy *wiphy = bcmcfg_to_wiphy(cfg); in wl_cfg80211_suspend()
8232 struct net_device *ndev = bcmcfg_to_prmry_ndev(cfg); in wl_cfg80211_suspend()
8235 if (unlikely(!wl_get_drv_status(cfg, READY, ndev))) { in wl_cfg80211_suspend()
8237 (int)cfg->status)); in wl_cfg80211_suspend()
8240 for_each_ndev(cfg, iter, next) { in wl_cfg80211_suspend()
8243 wl_set_drv_status(cfg, SCAN_ABORTING, iter->ndev); in wl_cfg80211_suspend()
8245 WL_CFG_DRV_LOCK(&cfg->cfgdrv_lock, flags); in wl_cfg80211_suspend()
8246 if (cfg->scan_request) { in wl_cfg80211_suspend()
8247 cfg80211_scan_done(cfg->scan_request, true); in wl_cfg80211_suspend()
8248 cfg->scan_request = NULL; in wl_cfg80211_suspend()
8250 for_each_ndev(cfg, iter, next) { in wl_cfg80211_suspend()
8252 wl_clr_drv_status(cfg, SCANNING, iter->ndev); in wl_cfg80211_suspend()
8253 wl_clr_drv_status(cfg, SCAN_ABORTING, iter->ndev); in wl_cfg80211_suspend()
8256 WL_CFG_DRV_UNLOCK(&cfg->cfgdrv_lock, flags); in wl_cfg80211_suspend()
8257 for_each_ndev(cfg, iter, next) { in wl_cfg80211_suspend()
8259 if (wl_get_drv_status(cfg, CONNECTING, iter->ndev)) { in wl_cfg80211_suspend()
8260 wl_bss_connect_done(cfg, iter->ndev, NULL, NULL, false); in wl_cfg80211_suspend()
8280 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_update_pmklist() local
8281 struct net_device *primary_dev = bcmcfg_to_prmry_ndev(cfg); in wl_update_pmklist()
8282 int npmkids = cfg->pmk_list->pmkids.count; in wl_update_pmklist()
8284 ASSERT(cfg->pmk_list->pmkids.length >= (sizeof(u16)*2)); in wl_update_pmklist()
8306 if (cfg->wlc_ver.wlc_ver_major >= MIN_PMKID_LIST_V3_FW_MAJOR) { in wl_update_pmklist()
8309 sizeof(*pmk_list), cfg->ioctl_buf, in wl_update_pmklist()
8310 WLC_IOCTL_MAXLEN, &cfg->ioctl_buf_sync); in wl_update_pmklist()
8312 else if (cfg->wlc_ver.wlc_ver_major == MIN_PMKID_LIST_V2_FW_MAJOR) { in wl_update_pmklist()
8314 pmkid_list_v2_t *pmkid_v2_list = (pmkid_list_v2_t *)MALLOCZ(cfg->osh, v2_list_size); in wl_update_pmklist()
8315 pmkid_list_v3_t *spmk_list = &cfg->spmk_info_list->pmkids; in wl_update_pmklist()
8380 v2_list_size, cfg->ioctl_buf, in wl_update_pmklist()
8381 WLC_IOCTL_MAXLEN, &cfg->ioctl_buf_sync); in wl_update_pmklist()
8386 MFREE(cfg->osh, pmkid_v2_list, v2_list_size); in wl_update_pmklist()
8390 pmkid_list_v1_t *pmkid_v1_list = (pmkid_list_v1_t *)MALLOCZ(cfg->osh, v1_list_size); in wl_update_pmklist()
8406 v1_list_size, cfg->ioctl_buf, in wl_update_pmklist()
8407 WLC_IOCTL_MAXLEN, &cfg->ioctl_buf_sync); in wl_update_pmklist()
8412 MFREE(cfg->osh, pmkid_v1_list, v1_list_size); in wl_update_pmklist()
8424 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_set_pmksa() local
8427 int npmkids = cfg->pmk_list->pmkids.count; in wl_cfg80211_set_pmksa()
8429 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_set_pmksa()
8432 if (cfg->wlc_ver.wlc_ver_major >= PMKDB_WLC_VER) { in wl_cfg80211_set_pmksa()
8440 RETURN_EIO_IF_NOT_UP(cfg); in wl_cfg80211_set_pmksa()
8448 if (!memcmp(pmksa->bssid, &cfg->pmk_list->pmkids.pmkid[i].bssid, in wl_cfg80211_set_pmksa()
8454 if (!memcmp(pmksa->ssid, &cfg->pmk_list->pmkids.pmkid[i].ssid, in wl_cfg80211_set_pmksa()
8462 memcpy(&cfg->pmk_list->pmkids.pmkid[i].bssid, pmksa->bssid, in wl_cfg80211_set_pmksa()
8467 cfg->pmk_list->pmkids.pmkid[i].ssid_len = pmksa->ssid_len; in wl_cfg80211_set_pmksa()
8468 memcpy(&cfg->pmk_list->pmkids.pmkid[i].ssid, pmksa->ssid, in wl_cfg80211_set_pmksa()
8470 memcpy(&cfg->pmk_list->pmkids.pmkid[i].fils_cache_id, pmksa->cache_id, in wl_cfg80211_set_pmksa()
8477 if (memcpy_s(&cfg->pmk_list->pmkids.pmkid[i].pmk, PMK_LEN_MAX, pmksa->pmk, in wl_cfg80211_set_pmksa()
8481 cfg->pmk_list->pmkids.pmkid[i].pmk_len = pmksa->pmk_len; in wl_cfg80211_set_pmksa()
8486 (void)memcpy_s(cfg->pmk_list->pmkids.pmkid[i].pmkid, WPA2_PMKID_LEN, pmksa->pmkid, in wl_cfg80211_set_pmksa()
8488 cfg->pmk_list->pmkids.pmkid[i].pmkid_len = WPA2_PMKID_LEN; in wl_cfg80211_set_pmksa()
8495 cfg->pmk_list->pmkids.pmkid[i].time_left = KEY_PERM_PMK; in wl_cfg80211_set_pmksa()
8497 cfg->pmk_list->pmkids.length += sizeof(pmkid_v3_t); in wl_cfg80211_set_pmksa()
8498 cfg->pmk_list->pmkids.count++; in wl_cfg80211_set_pmksa()
8507 &cfg->pmk_list->pmkids.pmkid[npmkids - 1].bssid)); in wl_cfg80211_set_pmksa()
8511 cfg->pmk_list->pmkids.pmkid[npmkids - 1]. in wl_cfg80211_set_pmksa()
8516 err = wl_update_pmklist(dev, cfg->pmk_list, err); in wl_cfg80211_set_pmksa()
8530 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_update_pmksa() local
8535 RETURN_EIO_IF_NOT_UP(cfg); in wl_cfg80211_update_pmksa()
8537 if (cfg->wlc_ver.wlc_ver_major < MIN_PMKID_LIST_V3_FW_MAJOR) { in wl_cfg80211_update_pmksa()
8538 WL_DBG(("wlc_ver_major not supported:%d\n", cfg->wlc_ver.wlc_ver_major)); in wl_cfg80211_update_pmksa()
8543 pmk_list = (pmkid_list_v3_t *)MALLOCZ(cfg->osh, alloc_len); in wl_cfg80211_update_pmksa()
8595 wl_cfg80211_spmk_pmkdb_change_pmk_type(cfg, pmk_list); in wl_cfg80211_update_pmksa()
8603 alloc_len, cfg->ioctl_buf, in wl_cfg80211_update_pmksa()
8604 WLC_IOCTL_MAXLEN, &cfg->ioctl_buf_sync); in wl_cfg80211_update_pmksa()
8610 MFREE(cfg->osh, pmk_list, alloc_len); in wl_cfg80211_update_pmksa()
8622 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_del_pmksa() local
8625 int npmkids = cfg->pmk_list->pmkids.count; in wl_cfg80211_del_pmksa()
8626 RETURN_EIO_IF_NOT_UP(cfg); in wl_cfg80211_del_pmksa()
8632 if (cfg->wlc_ver.wlc_ver_major >= PMKDB_WLC_VER) { in wl_cfg80211_del_pmksa()
8637 wl_cfg80211_spmk_pmkdb_del_spmk(cfg, pmksa); in wl_cfg80211_del_pmksa()
8671 (pmksa->bssid, &cfg->pmk_list->pmkids.pmkid[i].bssid, in wl_cfg80211_del_pmksa()
8679 (pmksa->ssid, &cfg->pmk_list->pmkids.pmkid[i].ssid, in wl_cfg80211_del_pmksa()
8687 bzero(&cfg->pmk_list->pmkids.pmkid[i], sizeof(pmkid_v3_t)); in wl_cfg80211_del_pmksa()
8689 (void)memcpy_s(&cfg->pmk_list->pmkids.pmkid[i], in wl_cfg80211_del_pmksa()
8691 &cfg->pmk_list->pmkids.pmkid[i + 1], in wl_cfg80211_del_pmksa()
8695 cfg->pmk_list->pmkids.length -= sizeof(pmkid_v3_t); in wl_cfg80211_del_pmksa()
8696 cfg->pmk_list->pmkids.count--; in wl_cfg80211_del_pmksa()
8711 err = wl_update_pmklist(dev, cfg->pmk_list, err); in wl_cfg80211_del_pmksa()
8723 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_flush_pmksa() local
8725 RETURN_EIO_IF_NOT_UP(cfg); in wl_cfg80211_flush_pmksa()
8726 if (cfg->wlc_ver.wlc_ver_major >= PMKDB_WLC_VER) { in wl_cfg80211_flush_pmksa()
8734 bzero(cfg->pmk_list, sizeof(*cfg->pmk_list)); in wl_cfg80211_flush_pmksa()
8735 cfg->pmk_list->pmkids.length = OFFSETOF(pmkid_list_v3_t, pmkid); in wl_cfg80211_flush_pmksa()
8736 cfg->pmk_list->pmkids.count = 0; in wl_cfg80211_flush_pmksa()
8737 cfg->pmk_list->pmkids.version = PMKID_LIST_VER_3; in wl_cfg80211_flush_pmksa()
8738 err = wl_update_pmklist(dev, cfg->pmk_list, err); in wl_cfg80211_flush_pmksa()
8746 struct bcm_cfg80211 *cfg; in wl_cfg80211_afx_handler() local
8751 cfg = wl_get_cfg(afx_instance->dev); in wl_cfg80211_afx_handler()
8752 if (cfg != NULL && cfg->afx_hdl->is_active) { in wl_cfg80211_afx_handler()
8753 if (cfg->afx_hdl->is_listen && cfg->afx_hdl->my_listen_chan) { in wl_cfg80211_afx_handler()
8754 ret = wl_cfgp2p_discover_listen(cfg, cfg->afx_hdl->my_listen_chan, in wl_cfg80211_afx_handler()
8757 ret = wl_cfgp2p_act_frm_search(cfg, cfg->afx_hdl->dev, in wl_cfg80211_afx_handler()
8758 cfg->afx_hdl->bssidx, cfg->afx_hdl->peer_listen_chan, in wl_cfg80211_afx_handler()
8763 if (wl_get_drv_status_all(cfg, FINDING_COMMON_CHANNEL)) in wl_cfg80211_afx_handler()
8764 complete(&cfg->act_frm_scan); in wl_cfg80211_afx_handler()
8771 wl_cfg80211_af_searching_channel(struct bcm_cfg80211 *cfg, struct net_device *dev) in wl_cfg80211_af_searching_channel() argument
8781 wl_set_drv_status(cfg, FINDING_COMMON_CHANNEL, dev); in wl_cfg80211_af_searching_channel()
8782 cfg->afx_hdl->is_active = TRUE; in wl_cfg80211_af_searching_channel()
8784 if (cfg->afx_hdl->pending_tx_act_frm) { in wl_cfg80211_af_searching_channel()
8786 action_frame = &(cfg->afx_hdl->pending_tx_act_frm->action_frame); in wl_cfg80211_af_searching_channel()
8794 while ((cfg->afx_hdl->retry < max_retry) && in wl_cfg80211_af_searching_channel()
8795 (cfg->afx_hdl->peer_chan == WL_INVALID)) { in wl_cfg80211_af_searching_channel()
8796 cfg->afx_hdl->is_listen = FALSE; in wl_cfg80211_af_searching_channel()
8797 wl_set_drv_status(cfg, SCANNING, dev); in wl_cfg80211_af_searching_channel()
8799 cfg->afx_hdl->retry)); in wl_cfg80211_af_searching_channel()
8801 schedule_work(&cfg->afx_hdl->work); in wl_cfg80211_af_searching_channel()
8802 wait_for_completion_timeout(&cfg->act_frm_scan, in wl_cfg80211_af_searching_channel()
8805 if ((cfg->afx_hdl->peer_chan != WL_INVALID) || in wl_cfg80211_af_searching_channel()
8806 !(wl_get_drv_status(cfg, FINDING_COMMON_CHANNEL, dev))) in wl_cfg80211_af_searching_channel()
8812 if (cfg->afx_hdl->my_listen_chan) { in wl_cfg80211_af_searching_channel()
8814 cfg->afx_hdl->my_listen_chan)); in wl_cfg80211_af_searching_channel()
8816 cfg->afx_hdl->is_listen = TRUE; in wl_cfg80211_af_searching_channel()
8817 schedule_work(&cfg->afx_hdl->work); in wl_cfg80211_af_searching_channel()
8818 wait_for_completion_timeout(&cfg->act_frm_scan, in wl_cfg80211_af_searching_channel()
8821 if ((cfg->afx_hdl->peer_chan != WL_INVALID) || in wl_cfg80211_af_searching_channel()
8822 !(wl_get_drv_status(cfg, FINDING_COMMON_CHANNEL, dev))) in wl_cfg80211_af_searching_channel()
8825 cfg->afx_hdl->retry++; in wl_cfg80211_af_searching_channel()
8827 WL_AF_TX_KEEP_PRI_CONNECTION_VSDB(cfg); in wl_cfg80211_af_searching_channel()
8830 cfg->afx_hdl->is_active = FALSE; in wl_cfg80211_af_searching_channel()
8832 wl_clr_drv_status(cfg, SCANNING, dev); in wl_cfg80211_af_searching_channel()
8833 wl_clr_drv_status(cfg, FINDING_COMMON_CHANNEL, dev); in wl_cfg80211_af_searching_channel()
8835 return (cfg->afx_hdl->peer_chan); in wl_cfg80211_af_searching_channel()
8859 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_config_p2p_pub_af_tx() local
8872 cfg->next_af_subtype = WL_PUB_AF_STYPE_INVALID; in wl_cfg80211_config_p2p_pub_af_tx()
8878 wl_set_p2p_status(cfg, GO_NEG_PHASE); in wl_cfg80211_config_p2p_pub_af_tx()
8881 cfg->next_af_subtype = act_frm->subtype + 1; in wl_cfg80211_config_p2p_pub_af_tx()
8892 cfg->next_af_subtype = act_frm->subtype + 1; in wl_cfg80211_config_p2p_pub_af_tx()
8903 wl_clr_p2p_status(cfg, GO_NEG_PHASE); in wl_cfg80211_config_p2p_pub_af_tx()
8910 cfg->block_gon_req_tx_count = 0; in wl_cfg80211_config_p2p_pub_af_tx()
8911 cfg->block_gon_req_rx_count = 0; in wl_cfg80211_config_p2p_pub_af_tx()
8920 cfg->next_af_subtype = act_frm->subtype + 1; in wl_cfg80211_config_p2p_pub_af_tx()
8939 cfg->next_af_subtype = act_frm->subtype + 1; in wl_cfg80211_config_p2p_pub_af_tx()
8957 cfg->next_af_subtype = act_frm->subtype + 1; in wl_cfg80211_config_p2p_pub_af_tx()
8964 cfg->next_af_subtype = P2P_PAF_GON_REQ; in wl_cfg80211_config_p2p_pub_af_tx()
8981 wl_cfg80211_check_DFS_channel(struct bcm_cfg80211 *cfg, wl_af_params_t *af_params, in wl_cfg80211_check_DFS_channel() argument
8994 bss_list = cfg->bss_list; in wl_cfg80211_check_DFS_channel()
9035 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_send_action_frame() local
9047 dhd_pub_t *dhd = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_send_action_frame()
9071 cfg->next_af_subtype = WL_PUB_AF_STYPE_INVALID; in wl_cfg80211_send_action_frame()
9088 cfg->need_wait_afrx = true; in wl_cfg80211_send_action_frame()
9093 cfg->next_af_subtype = DPP_AUTH_RESP; in wl_cfg80211_send_action_frame()
9095 cfg->next_af_subtype = DPP_AUTH_CONF; in wl_cfg80211_send_action_frame()
9097 cfg->next_af_subtype = WL_PUB_AF_STYPE_INVALID; in wl_cfg80211_send_action_frame()
9098 cfg->need_wait_afrx = false; in wl_cfg80211_send_action_frame()
9104 cfg->need_wait_afrx = true; in wl_cfg80211_send_action_frame()
9122 if (cfg->block_gon_req_tx_count) { in wl_cfg80211_send_action_frame()
9125 cfg->block_gon_req_tx_count)); in wl_cfg80211_send_action_frame()
9138 cfg->next_af_subtype = action + 1; in wl_cfg80211_send_action_frame()
9168 wl_clr_drv_status(cfg, SENDING_ACT_FRM, dev); in wl_cfg80211_send_action_frame()
9174 netinfo = wl_get_netinfo_by_wdev(cfg, cfgdev_to_wdev(cfgdev)); in wl_cfg80211_send_action_frame()
9184 if (ndev == bcmcfg_to_prmry_ndev(cfg)) in wl_cfg80211_send_action_frame()
9190 if (wl_get_drv_status(cfg, CONNECTING, bcmcfg_to_prmry_ndev(cfg))) { in wl_cfg80211_send_action_frame()
9196 if (wl_get_drv_status_all(cfg, SCANNING)) { in wl_cfg80211_send_action_frame()
9197 wl_cfgscan_cancel_scan(cfg); in wl_cfg80211_send_action_frame()
9201 if (discover_cfgdev(cfgdev, cfg)) { in wl_cfg80211_send_action_frame()
9202 if (cfg->p2p_supported && cfg->p2p) { in wl_cfg80211_send_action_frame()
9203 wl_cfgp2p_set_p2p_mode(cfg, WL_P2P_DISC_ST_SCAN, 0, 0, in wl_cfg80211_send_action_frame()
9204 wl_to_p2p_bss_bssidx(cfg, P2PAPI_BSSCFG_DEVICE)); in wl_cfg80211_send_action_frame()
9210 if (!wl_cfg80211_check_DFS_channel(cfg, af_params, action_frame->data, action_frame->len)) { in wl_cfg80211_send_action_frame()
9216 if (cfg->next_af_subtype != WL_PUB_AF_STYPE_INVALID) { in wl_cfg80211_send_action_frame()
9218 wl_set_drv_status(cfg, WAITING_NEXT_ACT_FRM, dev); in wl_cfg80211_send_action_frame()
9220 wl_set_drv_status(cfg, SENDING_ACT_FRM, dev); in wl_cfg80211_send_action_frame()
9221 memcpy(cfg->afx_hdl->tx_dst_addr.octet, in wl_cfg80211_send_action_frame()
9223 sizeof(cfg->afx_hdl->tx_dst_addr.octet)); in wl_cfg80211_send_action_frame()
9226 cfg->afx_hdl->pending_tx_act_frm = af_params; in wl_cfg80211_send_action_frame()
9237 if ((cfg->afx_hdl->bssidx = wl_get_bssidx_by_wdev(cfg, dev->ieee80211_ptr)) < 0) { in wl_cfg80211_send_action_frame()
9241 cfg->afx_hdl->dev = dev; in wl_cfg80211_send_action_frame()
9242 cfg->afx_hdl->retry = 0; in wl_cfg80211_send_action_frame()
9243 cfg->afx_hdl->peer_chan = WL_INVALID; in wl_cfg80211_send_action_frame()
9245 if (wl_cfg80211_af_searching_channel(cfg, dev) == WL_INVALID) { in wl_cfg80211_send_action_frame()
9258 wl_clr_drv_status(cfg, SCANNING, cfg->afx_hdl->dev); in wl_cfg80211_send_action_frame()
9264 wl_cfgscan_cancel_scan(cfg); in wl_cfg80211_send_action_frame()
9268 if ((wl_cfgp2p_discover_enable_search(cfg, false)) < 0) { in wl_cfg80211_send_action_frame()
9274 if (cfg->afx_hdl->peer_chan != WL_INVALID) { in wl_cfg80211_send_action_frame()
9275 af_params->channel = cfg->afx_hdl->peer_chan; in wl_cfg80211_send_action_frame()
9277 cfg->afx_hdl->peer_chan)); in wl_cfg80211_send_action_frame()
9290 wl_cfgp2p_need_wait_actfrmae(cfg, action_frame->data, action_frame->len, true); in wl_cfg80211_send_action_frame()
9294 ack = wl_cfgp2p_tx_action_frame(cfg, dev, af_params, bssidx) ? false : true; in wl_cfg80211_send_action_frame()
9304 WL_AF_TX_KEEP_PRI_CONNECTION_VSDB(cfg); in wl_cfg80211_send_action_frame()
9310 ack = wl_cfgp2p_tx_action_frame(cfg, dev, af_params, bssidx) ? in wl_cfg80211_send_action_frame()
9321 wl_clr_drv_status(cfg, SENDING_ACT_FRM, dev); in wl_cfg80211_send_action_frame()
9330 !cfg->block_gon_req_tx_count && in wl_cfg80211_send_action_frame()
9332 wl_get_drv_status_all(cfg, WAITING_NEXT_ACT_FRM) && in wl_cfg80211_send_action_frame()
9333 cfg->af_sent_channel == cfg->afx_hdl->my_listen_chan) { in wl_cfg80211_send_action_frame()
9337 jiffies_to_msecs(jiffies - cfg->af_tx_sent_jiffies); in wl_cfg80211_send_action_frame()
9340 wl_set_drv_status(cfg, WAITING_NEXT_ACT_FRM_LISTEN, dev); in wl_cfg80211_send_action_frame()
9344 if (wl_cfgp2p_discover_listen(cfg, cfg->af_sent_channel, in wl_cfg80211_send_action_frame()
9346 wait_for_completion_timeout(&cfg->wait_next_af, in wl_cfg80211_send_action_frame()
9349 wl_clr_drv_status(cfg, WAITING_NEXT_ACT_FRM_LISTEN, dev); in wl_cfg80211_send_action_frame()
9353 wl_clr_drv_status(cfg, WAITING_NEXT_ACT_FRM, dev); in wl_cfg80211_send_action_frame()
9355 cfg->afx_hdl->pending_tx_act_frm = NULL; in wl_cfg80211_send_action_frame()
9359 cfg->afx_hdl->my_listen_chan)); in wl_cfg80211_send_action_frame()
9362 cfg->afx_hdl->my_listen_chan)); in wl_cfg80211_send_action_frame()
9366 if (cfg->block_gon_req_tx_count) { in wl_cfg80211_send_action_frame()
9367 cfg->block_gon_req_tx_count--; in wl_cfg80211_send_action_frame()
9410 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_mgmt_tx() local
9429 dev = cfgdev_to_wlc_ndev(cfgdev, cfg); in wl_cfg80211_mgmt_tx()
9437 if (discover_cfgdev(cfgdev, cfg)) { in wl_cfg80211_mgmt_tx()
9438 if (!cfg->p2p_supported || !cfg->p2p) { in wl_cfg80211_mgmt_tx()
9442 bssidx = wl_to_p2p_bss_bssidx(cfg, P2PAPI_BSSCFG_DEVICE); in wl_cfg80211_mgmt_tx()
9445 if ((bssidx = wl_get_bssidx_by_wdev(cfg, cfgdev_to_wdev(cfgdev))) < 0) { in wl_cfg80211_mgmt_tx()
9453 if (p2p_is_on(cfg)) { in wl_cfg80211_mgmt_tx()
9457 if ((err = wl_cfgp2p_discover_enable_search(cfg, false)) < 0) { in wl_cfg80211_mgmt_tx()
9463 id = cfg->send_action_id++; in wl_cfg80211_mgmt_tx()
9465 id = cfg->send_action_id++; in wl_cfg80211_mgmt_tx()
9472 if ((dev == bcmcfg_to_prmry_ndev(cfg)) && cfg->p2p) { in wl_cfg80211_mgmt_tx()
9473 bssidx = wl_to_p2p_bss_bssidx(cfg, P2PAPI_BSSCFG_DEVICE); in wl_cfg80211_mgmt_tx()
9475 wl_cfg80211_set_mgmt_vndr_ies(cfg, cfgdev, bssidx, in wl_cfg80211_mgmt_tx()
9479 if (!cfg->p2p_prb_noti) { in wl_cfg80211_mgmt_tx()
9480 cfg->p2p_prb_noti = true; in wl_cfg80211_mgmt_tx()
9541 wl_cfgscan_cancel_scan(cfg); in wl_cfg80211_mgmt_tx()
9546 err = wl_cfg80211_mgmt_auth_tx(dev, cfgdev, cfg, buf, len, in wl_cfg80211_mgmt_tx()
9557 af_params = (wl_af_params_t *)MALLOCZ(cfg->osh, WL_WIFI_AF_PARAMS_SIZE); in wl_cfg80211_mgmt_tx()
9587 cfg->afx_hdl->peer_listen_chan = af_params->channel; in wl_cfg80211_mgmt_tx()
9588 WL_DBG(("channel from upper layer %d\n", cfg->afx_hdl->peer_listen_chan)); in wl_cfg80211_mgmt_tx()
9603 MFREE(cfg->osh, af_params, WL_WIFI_AF_PARAMS_SIZE); in wl_cfg80211_mgmt_tx()
9643 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_change_bss() local
9644 dhd = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_change_bss()
9646 if (cfg->p2p_net == dev) in wl_cfg80211_change_bss()
9647 dev = bcmcfg_to_prmry_ndev(cfg); in wl_cfg80211_change_bss()
9757 wl_cfg80211_get_remain_on_channel_ndev(struct bcm_cfg80211 *cfg) in wl_cfg80211_get_remain_on_channel_ndev() argument
9761 list_for_each_entry_safe(_net_info, next, &cfg->net_list, list) { in wl_cfg80211_get_remain_on_channel_ndev()
9776 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_macaddr_sync_reqd() local
9784 BCM_REFERENCE(cfg); in wl_cfg80211_macaddr_sync_reqd()
9791 if (wl_cfg80211_static_if(cfg, dev)) { in wl_cfg80211_macaddr_sync_reqd()
9839 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_del_station() local
9860 dev = ndev_to_wlc_ndev(ndev, cfg); in wl_cfg80211_del_station()
9862 if (p2p_is_on(cfg)) { in wl_cfg80211_del_station()
9866 if ((wl_cfgp2p_discover_enable_search(cfg, false)) < 0) { in wl_cfg80211_del_station()
9942 wl_cfg80211_post_scb_auth(struct bcm_cfg80211 *cfg, struct net_device *dev) in wl_cfg80211_post_scb_auth() argument
9945 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_post_scb_auth()
9948 LOG_TS(cfg, authorize_cmplt); in wl_cfg80211_post_scb_auth()
9949 CLR_TS(cfg, authorize_start); in wl_cfg80211_post_scb_auth()
9950 wl_set_drv_status(cfg, AUTHORIZED, dev); in wl_cfg80211_post_scb_auth()
9952 wl_del_roam_timeout(cfg); in wl_cfg80211_post_scb_auth()
9960 wl_cfg80211_wbtext_update_rcc(cfg, dev); in wl_cfg80211_post_scb_auth()
9984 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_change_station() local
9988 struct net_device *ndev = ndev_to_wlc_ndev(dev, cfg); in wl_cfg80211_change_station()
9994 if ((wl_get_mode_by_netdev(cfg, dev) == WL_MODE_BSS) && in wl_cfg80211_change_station()
9995 !(wl_get_drv_status(cfg, CONNECTED, dev))) { in wl_cfg80211_change_station()
10015 wl_clr_drv_status(cfg, AUTHORIZED, dev); in wl_cfg80211_change_station()
10016 CLR_TS(cfg, authorize_start); in wl_cfg80211_change_station()
10017 CLR_TS(cfg, conn_start); in wl_cfg80211_change_station()
10026 sec = wl_read_prof(cfg, ndev, WL_PROF_SEC); in wl_cfg80211_change_station()
10031 (cfg->wdev->wiphy->features & NL80211_FEATURE_FW_4WAY_HANDSHAKE) && in wl_cfg80211_change_station()
10050 wl_cfg80211_post_scb_auth(cfg, ndev); in wl_cfg80211_change_station()
10118 struct bcm_cfg80211 *cfg = wl_get_cfg(ndev); in wl_dump_obss() local
10120 buf = (char *)MALLOCZ(cfg->osh, sizeof(char) * WLC_IOCTL_MAXLEN); in wl_dump_obss()
10145 MFREE(cfg->osh, buf, sizeof(char) * WLC_IOCTL_MAXLEN); in wl_dump_obss()
10149 MFREE(cfg->osh, buf, sizeof(char) * WLC_IOCTL_MAXLEN); in wl_dump_obss()
10156 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_dump_survey() local
10164 dhd_pub_t *dhd = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_dump_survey()
10224 survey = (struct wl_dump_survey *)MALLOCZ(cfg->osh, in wl_cfg80211_dump_survey()
10260 MFREE(cfg->osh, survey, sizeof(struct wl_dump_survey)); in wl_cfg80211_dump_survey()
10264 MFREE(cfg->osh, survey, sizeof(struct wl_dump_survey)); in wl_cfg80211_dump_survey()
10277 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_get_channel() local
10281 RETURN_EIO_IF_NOT_UP(cfg); in wl_cfg80211_get_channel()
10426 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_is_ccode_change_allowed() local
10431 for_each_ndev(cfg, iter, next) { in wl_is_ccode_change_allowed()
10434 if (wl_get_drv_status(cfg, AP_CREATED, iter->ndev)) { in wl_is_ccode_change_allowed()
10442 if (wl_cfgnan_is_enabled(cfg) && wl_cfgnan_is_dp_active(net)) { in wl_is_ccode_change_allowed()
10485 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_cleanup_connection() local
10490 for_each_ndev(cfg, iter, next) { in wl_cfg80211_cleanup_connection()
10493 if (wl_get_drv_status(cfg, AP_CREATED, iter->ndev)) { in wl_cfg80211_cleanup_connection()
10502 } else if (wl_get_drv_status(cfg, CONNECTED, iter->ndev)) { in wl_cfg80211_cleanup_connection()
10513 wl_cfgscan_cancel_scan(cfg); in wl_cfg80211_cleanup_connection()
10517 if (wl_cfgnan_is_enabled(cfg)) { in wl_cfg80211_cleanup_connection()
10518 mutex_lock(&cfg->if_sync); in wl_cfg80211_cleanup_connection()
10519 ret = wl_cfgnan_check_nan_disable_pending(cfg, true, true); in wl_cfg80211_cleanup_connection()
10520 mutex_unlock(&cfg->if_sync); in wl_cfg80211_cleanup_connection()
10549 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_notify_regd() local
10554 regd_copy = (struct ieee80211_regdomain *)MALLOCZ(cfg->osh, regd_len); in wl_notify_regd()
10591 MFREE(cfg->osh, regd_copy, regd_len); in wl_notify_regd()
10602 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_set_country_code() local
10603 BCM_REFERENCE(cfg); in wl_cfg80211_set_country_code()
10625 if (strlcpy(cfg->country, country_code, WL_CCODE_LEN) >= WLC_CNTRY_BUF_SZ) { in wl_cfg80211_set_country_code()
10634 bzero(cfg->country, sizeof(cfg->country)); in wl_cfg80211_set_country_code()
10663 struct bcm_cfg80211 *cfg = (struct bcm_cfg80211 *)wiphy_priv(wiphy); in WL_CFG80211_REG_NOTIFIER() local
10667 if (!request || !cfg) { in WL_CFG80211_REG_NOTIFIER()
10692 ret = wl_cfg80211_set_country_code(bcmcfg_to_prmry_ndev(cfg), request->alpha2, false, in WL_CFG80211_REG_NOTIFIER()
11018 static void wl_free_wdev(struct bcm_cfg80211 *cfg) in wl_free_wdev() argument
11020 struct wireless_dev *wdev = cfg->wdev; in wl_free_wdev()
11048 wl_delete_all_netinfo(cfg); in wl_free_wdev()
11053 MFREE(cfg->osh, wdev, sizeof(*wdev)); in wl_free_wdev()
11054 cfg->wdev = NULL; in wl_free_wdev()
11064 wl_post_linkup_ops(struct bcm_cfg80211 *cfg, wl_assoc_status_t *as) in wl_post_linkup_ops() argument
11071 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wl_post_linkup_ops()
11078 if (IS_PRIMARY_NDEV(cfg, ndev)) { in wl_post_linkup_ops()
11079 vndr_oui_num = wl_vndr_ies_get_vendor_oui(cfg, in wl_post_linkup_ops()
11089 update_roam_cache(cfg, ioctl_version); in wl_post_linkup_ops()
11102 wl_cfg80211_wbtext_set_wnm_maxidle(cfg, ndev); in wl_post_linkup_ops()
11150 if (ndev != bcmcfg_to_prmry_ndev(cfg)) { in wl_post_linkup_ops()
11152 init_completion(&cfg->iface_disable); in wl_post_linkup_ops()
11155 INIT_COMPLETION(cfg->iface_disable); in wl_post_linkup_ops()
11161 if (ndev == bcmcfg_to_prmry_ndev(cfg)) in wl_post_linkup_ops()
11183 if (wl_adps_bad_ap_check(cfg, &eth)) { in wl_post_linkup_ops()
11184 if (wl_adps_enabled(cfg, ndev)) { in wl_post_linkup_ops()
11185 wl_adps_set_suspend(cfg, ndev, ADPS_SUSPEND); in wl_post_linkup_ops()
11202 wl_cfg80211_event_sae_key(struct bcm_cfg80211 *cfg, struct net_device *ndev, in wl_cfg80211_event_sae_key() argument
11207 struct wiphy *wiphy = bcmcfg_to_wiphy(cfg); in wl_cfg80211_event_sae_key()
11238 if (cfg->wlc_ver.wlc_ver_major == MIN_PMKID_LIST_V3_FW_MAJOR) { in wl_cfg80211_event_sae_key()
11253 wl_bss_handle_sae_auth_v1(struct bcm_cfg80211 *cfg, struct net_device *ndev, in wl_bss_handle_sae_auth_v1() argument
11281 err = wl_cfg80211_event_sae_key(cfg, ndev, &sae_key); in wl_bss_handle_sae_auth_v1()
11290 wl_bss_handle_sae_auth_v2(struct bcm_cfg80211 *cfg, struct net_device *ndev, in wl_bss_handle_sae_auth_v2() argument
11333 pmkid_list_v3_t *spmk_list = &cfg->spmk_info_list->pmkids; in wl_bss_handle_sae_auth_v2()
11379 err = wl_cfg80211_event_sae_key(cfg, ndev, &sae_key); in wl_bss_handle_sae_auth_v2()
11388 wl_bss_handle_sae_auth(struct bcm_cfg80211 *cfg, struct net_device *ndev, in wl_bss_handle_sae_auth() argument
11398 err = wl_bss_handle_sae_auth_v1(cfg, ndev, event, data); in wl_bss_handle_sae_auth()
11400 err = wl_bss_handle_sae_auth_v2(cfg, ndev, event, data); in wl_bss_handle_sae_auth()
11423 int wl_get_connect_failed_status(struct bcm_cfg80211 *cfg, const wl_event_msg_t *e) in wl_get_connect_failed_status() argument
11427 cfg->assoc_reject_status = 0; in wl_get_connect_failed_status()
11431 ntoh32(cfg->event_auth_assoc.event_type), in wl_get_connect_failed_status()
11432 (int)ntoh32(cfg->event_auth_assoc.status), in wl_get_connect_failed_status()
11433 (int)ntoh32(cfg->event_auth_assoc.reason))); in wl_get_connect_failed_status()
11436 switch ((int)ntoh32(cfg->event_auth_assoc.status)) { in wl_get_connect_failed_status()
11438 cfg->assoc_reject_status = BIGDATA_ASSOC_REJECT_NO_ACK; in wl_get_connect_failed_status()
11441 cfg->assoc_reject_status = BIGDATA_ASSOC_REJECT_FAIL; in wl_get_connect_failed_status()
11444 cfg->assoc_reject_status = BIGDATA_ASSOC_REJECT_UNSOLICITED; in wl_get_connect_failed_status()
11447 cfg->assoc_reject_status = BIGDATA_ASSOC_REJECT_TIMEOUT; in wl_get_connect_failed_status()
11450 cfg->assoc_reject_status = BIGDATA_ASSOC_REJECT_ABORT; in wl_get_connect_failed_status()
11454 cfg->assoc_reject_status = in wl_get_connect_failed_status()
11459 cfg->assoc_reject_status = BIGDATA_ASSOC_REJECT_MAX; in wl_get_connect_failed_status()
11462 if (cfg->assoc_reject_status) { in wl_get_connect_failed_status()
11463 if (ntoh32(cfg->event_auth_assoc.event_type) == WLC_E_ASSOC) { in wl_get_connect_failed_status()
11464 cfg->assoc_reject_status += BIGDATA_ASSOC_REJECT_MAX; in wl_get_connect_failed_status()
11469 WL_INFORM_MEM(("assoc_reject_status %d \n", cfg->assoc_reject_status)); in wl_get_connect_failed_status()
11476 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_get_connect_failed_status() local
11479 if (cfg == NULL) { in wl_cfg80211_get_connect_failed_status()
11483 cfg->assoc_reject_status); in wl_cfg80211_get_connect_failed_status()
11490 wl_notify_connect_status_ibss(struct bcm_cfg80211 *cfg, struct net_device *ndev, in wl_notify_connect_status_ibss() argument
11500 struct wiphy *wiphy = bcmcfg_to_wiphy(cfg); in wl_notify_connect_status_ibss()
11523 if (wl_get_drv_status(cfg, CONNECTED, ndev)) { in wl_notify_connect_status_ibss()
11525 u8 *cur_bssid = wl_read_prof(cfg, ndev, WL_PROF_BSSID); in wl_notify_connect_status_ibss()
11533 wl_get_assoc_ies(cfg, ndev); in wl_notify_connect_status_ibss()
11534 wl_update_prof(cfg, ndev, NULL, (const void *)&e->addr, WL_PROF_BSSID); in wl_notify_connect_status_ibss()
11535 wl_update_bss_info(cfg, ndev, false); in wl_notify_connect_status_ibss()
11546 wl_link_up(cfg); in wl_notify_connect_status_ibss()
11547 wl_get_assoc_ies(cfg, ndev); in wl_notify_connect_status_ibss()
11548 wl_update_prof(cfg, ndev, NULL, (const void *)&e->addr, WL_PROF_BSSID); in wl_notify_connect_status_ibss()
11549 wl_update_bss_info(cfg, ndev, false); in wl_notify_connect_status_ibss()
11555 wl_set_drv_status(cfg, CONNECTED, ndev); in wl_notify_connect_status_ibss()
11557 wl_update_prof(cfg, ndev, NULL, (const void *)&active, WL_PROF_ACT); in wl_notify_connect_status_ibss()
11561 wl_clr_drv_status(cfg, CONNECTED, ndev); in wl_notify_connect_status_ibss()
11562 wl_link_down(cfg); in wl_notify_connect_status_ibss()
11563 wl_init_prof(cfg, ndev); in wl_notify_connect_status_ibss()
11668 int wl_get_bss_info(struct bcm_cfg80211 *cfg, struct net_device *dev, const u8 *mac) in wl_get_bss_info() argument
11693 strlcpy(cfg->bss_info, "x x x x x x x x x x x x x x x x x", sizeof(cfg->bss_info)); in wl_get_bss_info()
11695 *(u32 *) cfg->extra_buf = htod32(WL_EXTRA_BUF_MAX); in wl_get_bss_info()
11697 err = wldev_ioctl_get(dev, WLC_GET_BSS_INFO, cfg->extra_buf, WL_EXTRA_BUF_MAX); in wl_get_bss_info()
11700 cfg->roam_count = 0; in wl_get_bss_info()
11706 cfg->roam_count = 0; in wl_get_bss_info()
11712 bi = (wl_bss_info_v109_1_t *)(cfg->extra_buf + 4); in wl_get_bss_info()
11783 wiphy = bcmcfg_to_wiphy(cfg); in wl_get_bss_info()
11875 if (cfg->roam_offload) { in wl_get_bss_info()
11878 snprintf(roam_count_str, sizeof(roam_count_str), "%d", cfg->roam_count); in wl_get_bss_info()
11880 cfg->roam_count = 0; in wl_get_bss_info()
11892 snprintf(cfg->bss_info, GET_BSS_INFO_LEN, in wl_get_bss_info()
11900 snprintf(cfg->bss_info, GET_BSS_INFO_LEN, in wl_get_bss_info()
11907 cfg_bss_info_len = strlen(cfg->bss_info); in wl_get_bss_info()
11914 (wl_roam_stats_v1_t *)dhd_get_roam_evt((dhd_pub_t *)cfg->pub); in wl_get_bss_info()
11928 snprintf(&cfg->bss_info[cfg_bss_info_len], in wl_get_bss_info()
11933 snprintf(&cfg->bss_info[cfg_bss_info_len], in wl_get_bss_info()
11947 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_get_bss_info() local
11949 if (cfg == NULL) { in wl_cfg80211_get_bss_info()
11959 memcpy(cmd, cfg->bss_info, GET_BSS_INFO_LEN); in wl_cfg80211_get_bss_info()
11972 struct bcm_cfg80211 *cfg = wl_get_cfg(ndev); in wl_cfg80211_disassoc() local
11973 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_disassoc()
11975 BCM_REFERENCE(cfg); in wl_cfg80211_disassoc()
11993 struct bcm_cfg80211 *cfg = wl_get_cfg(ndev); in wl_cfg80211_del_all_sta() local
12001 dev = ndev_to_wlc_ndev(ndev, cfg); in wl_cfg80211_del_all_sta()
12003 if (p2p_is_on(cfg)) { in wl_cfg80211_del_all_sta()
12007 if ((wl_cfgp2p_discover_enable_search(cfg, false)) < 0) { in wl_cfg80211_del_all_sta()
12050 wl_cfg80211_handle_deauth_ind(struct bcm_cfg80211 *cfg, wl_assoc_status_t *as) in wl_cfg80211_handle_deauth_ind() argument
12060 pmkid_list_v3_t *spmk_list = &cfg->spmk_info_list->pmkids; in wl_cfg80211_handle_deauth_ind()
12088 wl_cfg80211_del_pmksa(cfg->wdev->wiphy, ndev, &pmksa); in wl_cfg80211_handle_deauth_ind()
12089 curssid = wl_read_prof(cfg, ndev, WL_PROF_SSID); in wl_cfg80211_handle_deauth_ind()
12113 wl_cache_assoc_resp_ies(struct bcm_cfg80211 *cfg, struct net_device *ndev, in wl_cache_assoc_resp_ies() argument
12116 struct wl_connect_info *conn_info = wl_to_conn(cfg); in wl_cache_assoc_resp_ies()
12209 wl_cfg8021_unlink_bss(struct bcm_cfg80211 *cfg, struct net_device *ndev, u8 *bssid) in wl_cfg8021_unlink_bss() argument
12215 ssid = (struct wlc_ssid *)wl_read_prof(cfg, ndev, WL_PROF_SSID); in wl_cfg8021_unlink_bss()
12227 wl_post_linkdown_ops(struct bcm_cfg80211 *cfg, in wl_post_linkdown_ops() argument
12231 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wl_post_linkdown_ops()
12237 wl_get_drv_status(cfg, CONNECTING, ndev), in wl_post_linkdown_ops()
12238 wl_get_drv_status(cfg, CONNECTED, ndev), in wl_post_linkdown_ops()
12239 wl_get_drv_status(cfg, DISCONNECTING, ndev), in wl_post_linkdown_ops()
12240 wl_get_drv_status(cfg, NESTED_CONNECT, ndev))); in wl_post_linkdown_ops()
12243 CLR_TS(cfg, conn_start); in wl_post_linkdown_ops()
12244 CLR_TS(cfg, conn_cmplt); in wl_post_linkdown_ops()
12245 CLR_TS(cfg, authorize_start); in wl_post_linkdown_ops()
12246 CLR_TS(cfg, authorize_cmplt); in wl_post_linkdown_ops()
12248 wl_link_down(cfg); in wl_post_linkdown_ops()
12249 wl_clr_drv_status(cfg, AUTHORIZED, ndev); in wl_post_linkdown_ops()
12250 wl_clr_drv_status(cfg, CONNECTED, ndev); in wl_post_linkdown_ops()
12251 wl_clr_drv_status(cfg, DISCONNECTING, ndev); in wl_post_linkdown_ops()
12254 if (ndev == bcmcfg_to_prmry_ndev(cfg)) { in wl_post_linkdown_ops()
12261 wl_flush_fw_log_buffer(bcmcfg_to_prmry_ndev(cfg), in wl_post_linkdown_ops()
12265 wl_android_get_roam_scan_chanlist(cfg); in wl_post_linkdown_ops()
12269 if (cfg->ncho_mode) { in wl_post_linkdown_ops()
12276 wl_cfg80211_tdls_config(cfg, TDLS_STATE_DISCONNECT, false); in wl_post_linkdown_ops()
12281 dhd_dev_set_rssi_monitor_cfg(bcmcfg_to_prmry_ndev(cfg), in wl_post_linkdown_ops()
12286 wl_cfg80211_wbtext_reset_conf(cfg, as->ndev); in wl_post_linkdown_ops()
12290 if (as->ndev == bcmcfg_to_prmry_ndev(cfg)) { in wl_post_linkdown_ops()
12292 cfg->p2p_resp_apchn_status = false; in wl_post_linkdown_ops()
12298 if (wl_cfgnan_is_enabled(cfg)) { in wl_post_linkdown_ops()
12299 wl_cfgnan_get_stats(cfg); in wl_post_linkdown_ops()
12307 wl_handle_assoc_fail(struct bcm_cfg80211 *cfg, wl_assoc_status_t *as, bool completed) in wl_handle_assoc_fail() argument
12311 u8 *connect_req_bssid = wl_read_prof(cfg, ndev, WL_PROF_LATEST_BSSID); in wl_handle_assoc_fail()
12313 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wl_handle_assoc_fail()
12342 if (wl_get_drv_status(cfg, NESTED_CONNECT, ndev) && in wl_handle_assoc_fail()
12343 wl_get_drv_status(cfg, DISCONNECTING, ndev)) { in wl_handle_assoc_fail()
12344 wl_clr_drv_status(cfg, DISCONNECTING, ndev); in wl_handle_assoc_fail()
12345 wl_clr_drv_status(cfg, NESTED_CONNECT, ndev); in wl_handle_assoc_fail()
12348 wl_delete_disconnected_bss_cache(&cfg->g_bss_cache_ctrl, in wl_handle_assoc_fail()
12375 if (ndev != bcmcfg_to_prmry_ndev(cfg)) { in wl_handle_assoc_fail()
12376 complete(&cfg->iface_disable); in wl_handle_assoc_fail()
12380 ret = wl_bss_connect_done(cfg, ndev, as->event_msg, as->data, false); in wl_handle_assoc_fail()
12394 wl_post_linkdown_ops(cfg, as, as->ndev); in wl_handle_assoc_fail()
12400 wl_get_connected_bssid(struct bcm_cfg80211 *cfg, struct net_device *ndev, u8 *mac_addr) in wl_get_connected_bssid() argument
12403 u8 *curbssid = wl_read_prof(cfg, ndev, WL_PROF_BSSID); in wl_get_connected_bssid()
12410 if (cfg->roam_offload) { in wl_get_connected_bssid()
12428 wl_cfg80211_wbtext_reset_conf(struct bcm_cfg80211 *cfg, struct net_device *ndev) in wl_cfg80211_wbtext_reset_conf() argument
12431 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_wbtext_reset_conf()
12450 wl_cfg80211_wbtext_clear_bssid_list(cfg); in wl_cfg80211_wbtext_reset_conf()
12459 wl_handle_link_down(struct bcm_cfg80211 *cfg, wl_assoc_status_t *as) in wl_handle_link_down() argument
12463 dhd_pub_t *dhdp = (dhd_pub_t *)cfg->pub; in wl_handle_link_down()
12479 if ((BCME_OK != wl_get_connected_bssid(cfg, ndev, as->curbssid))) { in wl_handle_link_down()
12491 curbssid = wl_read_prof(cfg, ndev, WL_PROF_BSSID); in wl_handle_link_down()
12512 if (wl_get_drv_status(cfg, NESTED_CONNECT, ndev) && in wl_handle_link_down()
12513 wl_get_drv_status(cfg, DISCONNECTING, ndev)) { in wl_handle_link_down()
12514 wl_clr_drv_status(cfg, DISCONNECTING, ndev); in wl_handle_link_down()
12515 wl_clr_drv_status(cfg, NESTED_CONNECT, ndev); in wl_handle_link_down()
12518 wl_delete_disconnected_bss_cache(&cfg->g_bss_cache_ctrl, in wl_handle_link_down()
12536 if (!wl_get_drv_status(cfg, DISCONNECTING, ndev)) { in wl_handle_link_down()
12555 wl_del_roam_timeout(cfg); in wl_handle_link_down()
12575 if (ndev == bcmcfg_to_prmry_ndev(cfg)) { in wl_handle_link_down()
12576 if (wl_vndr_ies_find_vendor_oui(cfg, ndev, in wl_handle_link_down()
12599 wl_get_bss_info(cfg, ndev, as->addr); in wl_handle_link_down()
12603 wl_cfg8021_unlink_bss(cfg, ndev, as->addr); in wl_handle_link_down()
12606 wl_init_prof(cfg, ndev); in wl_handle_link_down()
12608 wl_delete_disconnected_bss_cache(&cfg->g_bss_cache_ctrl, in wl_handle_link_down()
12620 if (wl_get_drv_status(cfg, DISCONNECTING, ndev)) { in wl_handle_link_down()
12634 wl_clr_drv_status(cfg, CONNECTED, ndev); in wl_handle_link_down()
12637 wl_post_linkdown_ops(cfg, as, as->ndev); in wl_handle_link_down()
12643 wl_handle_assoc_done(struct bcm_cfg80211 *cfg, wl_assoc_status_t *as) in wl_handle_assoc_done() argument
12649 wl_update_prof(cfg, ndev, as->event_msg, &act, WL_PROF_ACT); in wl_handle_assoc_done()
12651 if (wl_get_drv_status(cfg, CONNECTED, ndev)) { in wl_handle_assoc_done()
12652 u8 *curbssid = wl_read_prof(cfg, ndev, WL_PROF_BSSID); in wl_handle_assoc_done()
12653 u8 *conn_req_bssid = wl_read_prof(cfg, ndev, WL_PROF_LATEST_BSSID); in wl_handle_assoc_done()
12664 ret = wl_bss_connect_done(cfg, ndev, as->event_msg, as->data, true); in wl_handle_assoc_done()
12674 ((struct wlc_ssid *)wl_read_prof(cfg, ndev, WL_PROF_SSID))->SSID)); in wl_handle_assoc_done()
12675 wl_update_prof(cfg, ndev, NULL, (const void *)&as->addr, WL_PROF_BSSID); in wl_handle_assoc_done()
12677 wl_link_up(cfg); in wl_handle_assoc_done()
12680 ret = wl_post_linkup_ops(cfg, as); in wl_handle_assoc_done()
12687 wl_handle_roam_done(struct bcm_cfg80211 *cfg, wl_assoc_status_t *as) in wl_handle_roam_done() argument
12690 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wl_handle_roam_done()
12692 if (cfg->roam_offload) { in wl_handle_roam_done()
12705 struct wl_security *sec = wl_read_prof(cfg, in wl_handle_roam_done()
12708 wl_bss_roaming_done(cfg, as->ndev, as->event_msg, as->data); in wl_handle_roam_done()
12720 wl_handle_sta_link_action(struct bcm_cfg80211 *cfg, wl_assoc_status_t *as) in wl_handle_sta_link_action() argument
12730 ret = wl_handle_assoc_done(cfg, as); in wl_handle_sta_link_action()
12733 ret = wl_handle_assoc_fail(cfg, as, FALSE); in wl_handle_sta_link_action()
12736 ret = wl_handle_link_down(cfg, as); in wl_handle_sta_link_action()
12739 ret = wl_handle_roam_done(cfg, as); in wl_handle_sta_link_action()
12757 wl_handle_assoc_events(struct bcm_cfg80211 *cfg, in wl_handle_assoc_events() argument
12783 cfg->eidx.in_progress, MAC2STRDBG((const u8*)(&e->addr)))); in wl_handle_assoc_events()
12790 wl_bss_handle_sae_auth(cfg, as.ndev, e, data); in wl_handle_assoc_events()
12794 wl_handle_auth_event(cfg, as.ndev, e, data); in wl_handle_assoc_events()
12800 wl_get_auth_assoc_status(cfg, as.ndev, e, data); in wl_handle_assoc_events()
12804 wl_cache_assoc_resp_ies(cfg, as.ndev, e, data); in wl_handle_assoc_events()
12808 wl_cfg80211_handle_set_ssid_complete(cfg, &as, e, assoc_state); in wl_handle_assoc_events()
12812 wl_cfg80211_handle_deauth_ind(cfg, &as); in wl_handle_assoc_events()
12832 err = wl_handle_sta_link_action(cfg, &as); in wl_handle_assoc_events()
12840 wl_notify_connect_status_sta(struct bcm_cfg80211 *cfg, in wl_notify_connect_status_sta() argument
12847 wl_event_idx_t *idx = &cfg->eidx; in wl_notify_connect_status_sta()
12863 if (!wl_get_drv_status(cfg, CFG80211_CONNECT, ndev)) { in wl_notify_connect_status_sta()
12874 bzero((u8*)&cfg->roaming_bssid, ETHER_ADDR_LEN); in wl_notify_connect_status_sta()
12875 else if (wl_get_drv_status(cfg, CONNECTED, ndev)) { in wl_notify_connect_status_sta()
12877 bcopy(&e->addr, &cfg->roaming_bssid, ETHER_ADDR_LEN); in wl_notify_connect_status_sta()
12879 !ETHER_ISNULLADDR(&cfg->roaming_bssid.octet) && in wl_notify_connect_status_sta()
12880 memcmp(&e->addr, &cfg->roaming_bssid, ETHER_ADDR_LEN)) { in wl_notify_connect_status_sta()
12882 &e->addr, &cfg->roaming_bssid); in wl_notify_connect_status_sta()
12888 if (wl_get_drv_status(cfg, CONNECTING, ndev)) { in wl_notify_connect_status_sta()
12890 } else if (wl_get_drv_status(cfg, CONNECTED, ndev)) { in wl_notify_connect_status_sta()
12897 ret = wl_handle_assoc_events(cfg, wdev, e, data, assoc_state); in wl_notify_connect_status_sta()
12903 wl_notify_connect_status(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev, in wl_notify_connect_status() argument
12911 DHD_DISABLE_RUNTIME_PM((dhd_pub_t *)cfg->pub); in wl_notify_connect_status()
12914 ndev = cfgdev_to_wlc_ndev(cfgdev, cfg); in wl_notify_connect_status()
12915 mode = wl_get_mode_by_netdev(cfg, ndev); in wl_notify_connect_status()
12924 err = wl_notify_connect_status_ap(cfg, ndev, e, data); in wl_notify_connect_status()
12926 err = wl_notify_connect_status_ibss(cfg, ndev, e, data); in wl_notify_connect_status()
12929 err = wl_notify_connect_status_sta(cfg, ndev->ieee80211_ptr, e, data); in wl_notify_connect_status()
12935 DHD_ENABLE_RUNTIME_PM((dhd_pub_t *)cfg->pub); in wl_notify_connect_status()
12943 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_set_rmc_pid() local
12945 cfg->rmc_event_pid = pid; in wl_cfg80211_set_rmc_pid()
12953 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_set_txfail_pid() local
12955 cfg->aibss_txfail_pid = pid; in wl_cfg80211_set_txfail_pid()
12960 wl_notify_aibss_txfail(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev, in wl_notify_aibss_txfail() argument
12966 dhd_pub_t *dhd = (dhd_pub_t *)(cfg->pub); in wl_notify_aibss_txfail()
12969 if (cfg->aibss_txfail_pid != 0) { in wl_notify_aibss_txfail()
12985 ret = wl_netlink_send_msg(cfg->aibss_txfail_pid, AIBSS_EVENT_TXFAIL, in wl_notify_aibss_txfail()
12986 cfg->aibss_txfail_seq++, &e->addr, ETHER_ADDR_LEN); in wl_notify_aibss_txfail()
12990 evt, cfg->aibss_txfail_pid, ret, CONST_ETHERP_TO_MACF(&e->addr))); in wl_notify_aibss_txfail()
12996 wl_notify_rmc_status(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev, in wl_notify_rmc_status() argument
13006 if (cfg->rmc_event_pid != 0) { in wl_notify_rmc_status()
13007 ret = wl_netlink_send_msg(cfg->rmc_event_pid, in wl_notify_rmc_status()
13009 cfg->rmc_event_seq++, NULL, 0); in wl_notify_rmc_status()
13015 WL_DBG(("rmcevent : evt=%d, pid=%d, ret=%d\n", evt, cfg->rmc_event_pid, ret)); in wl_notify_rmc_status()
13022 wl_handle_roam_exp_event(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev, in wl_handle_roam_exp_event() argument
13033 ndev = cfgdev_to_wlc_ndev(cfgdev, cfg); in wl_handle_roam_exp_event()
13039 wl_update_prof(cfg, ndev, NULL, ssid, WL_PROF_SSID); in wl_handle_roam_exp_event()
13053 static s32 wl_handle_rssi_monitor_event(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev, in wl_handle_rssi_monitor_event() argument
13059 struct net_device *ndev = cfgdev_to_wlc_ndev(cfgdev, cfg); in wl_handle_rssi_monitor_event()
13060 struct wiphy *wiphy = bcmcfg_to_wiphy(cfg); in wl_handle_rssi_monitor_event()
13083 wl_notify_roaming_status(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev, in wl_notify_roaming_status() argument
13095 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wl_notify_roaming_status()
13102 ndev = cfgdev_to_wlc_ndev(cfgdev, cfg); in wl_notify_roaming_status()
13104 if ((!cfg->disable_roam_event) && (event == WLC_E_BSSID)) { in wl_notify_roaming_status()
13110 cfg->disable_roam_event = TRUE; in wl_notify_roaming_status()
13113 if ((cfg->disable_roam_event) && (event == WLC_E_ROAM)) in wl_notify_roaming_status()
13117 if (wl_get_drv_status(cfg, CONNECTED, ndev)) { in wl_notify_roaming_status()
13119 sec = wl_read_prof(cfg, ndev, WL_PROF_SEC); in wl_notify_roaming_status()
13126 wl_bss_roaming_done(cfg, ndev, e, data); in wl_notify_roaming_status()
13138 wl_del_roam_timeout(cfg); in wl_notify_roaming_status()
13142 wl_bss_roaming_done(cfg, ndev, e, data); in wl_notify_roaming_status()
13148 wl_cfg80211_wbtext_set_wnm_maxidle(cfg, ndev); in wl_notify_roaming_status()
13161 wl_cfg80211_wbtext_update_rcc(cfg, ndev); in wl_notify_roaming_status()
13166 wl_bss_connect_done(cfg, ndev, e, data, true); in wl_notify_roaming_status()
13169 wl_update_prof(cfg, ndev, e, &act, WL_PROF_ACT); in wl_notify_roaming_status()
13170 wl_update_prof(cfg, ndev, NULL, (const void *)&e->addr, WL_PROF_BSSID); in wl_notify_roaming_status()
13172 if (ndev == bcmcfg_to_prmry_ndev(cfg)) { in wl_notify_roaming_status()
13173 wl_vndr_ies_get_vendor_oui(cfg, ndev, NULL, 0); in wl_notify_roaming_status()
13178 wl_del_roam_timeout(cfg); in wl_notify_roaming_status()
13190 wl_check_pmstatus(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev, in wl_check_pmstatus() argument
13197 dhd_pub_t *dhd = (dhd_pub_t *)(cfg->pub); in wl_check_pmstatus()
13202 ndev = cfgdev_to_wlc_ndev(cfgdev, cfg); in wl_check_pmstatus()
13204 pbuf = (u8 *)MALLOCZ(cfg->osh, WLC_IOCTL_MEDLEN); in wl_check_pmstatus()
13212 0, &cfg->ioctl_buf_sync); in wl_check_pmstatus()
13221 MFREE(cfg->osh, pbuf, WLC_IOCTL_MEDLEN); in wl_check_pmstatus()
13289 struct bcm_cfg80211 *cfg; in wl_get_up_table() local
13293 cfg = wl_get_cfg(ndev); in wl_get_up_table()
13294 if (cfg) in wl_get_up_table()
13295 return (uint8 *)(cfg->up_table); in wl_get_up_table()
13308 wl_notify_roam_prep_status(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev, in wl_notify_roam_prep_status() argument
13313 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wl_notify_roam_prep_status()
13329 ndev = cfgdev_to_wlc_ndev(cfgdev, cfg); in wl_notify_roam_prep_status()
13332 if (ndev == bcmcfg_to_prmry_ndev(cfg)) { in wl_notify_roam_prep_status()
13338 sec = wl_read_prof(cfg, ndev, WL_PROF_SEC); in wl_notify_roam_prep_status()
13352 mod_timer(&cfg->roam_timeout, jiffies + msecs_to_jiffies(WL_ROAM_TIMEOUT_MS)); in wl_notify_roam_prep_status()
13360 wl_notify_roam_start_status(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev, in wl_notify_roam_start_status() argument
13364 struct net_device *ndev = cfgdev_to_wlc_ndev(cfgdev, cfg); in wl_notify_roam_start_status()
13365 struct wiphy *wiphy = bcmcfg_to_wiphy(cfg); in wl_notify_roam_start_status()
13376 static s32 wl_get_assoc_ies(struct bcm_cfg80211 *cfg, struct net_device *ndev) in wl_get_assoc_ies() argument
13379 struct wl_connect_info *conn_info = wl_to_conn(cfg); in wl_get_assoc_ies()
13388 err = wldev_iovar_getbuf(ndev, "assoc_info", NULL, 0, cfg->extra_buf, in wl_get_assoc_ies()
13394 memcpy(&assoc_info, cfg->extra_buf, sizeof(wl_assoc_info_t)); in wl_get_assoc_ies()
13408 err = wldev_iovar_getbuf(ndev, "assoc_req_ies", NULL, 0, cfg->extra_buf, in wl_get_assoc_ies()
13425 memcpy(conn_info->req_ie, cfg->extra_buf, conn_info->req_ie_len); in wl_get_assoc_ies()
13436 err = wldev_iovar_getbuf(ndev, "assoc_resp_ies", NULL, 0, cfg->extra_buf, in wl_get_assoc_ies()
13450 memcpy(conn_info->resp_ie, cfg->extra_buf, conn_info->resp_ie_len); in wl_get_assoc_ies()
13462 if (!cfg->up_table) { in wl_get_assoc_ies()
13463 cfg->up_table = (uint8 *)MALLOC(cfg->osh, UP_TABLE_MAX); in wl_get_assoc_ies()
13465 wl_set_up_table(cfg->up_table, qos_map_ie); in wl_get_assoc_ies()
13467 MFREE(cfg->osh, cfg->up_table, UP_TABLE_MAX); in wl_get_assoc_ies()
13479 static s32 wl_update_bss_info(struct bcm_cfg80211 *cfg, struct net_device *ndev, in wl_update_bss_info() argument
13497 wiphy = bcmcfg_to_wiphy(cfg); in wl_update_bss_info()
13499 ssid = (struct wlc_ssid *)wl_read_prof(cfg, ndev, WL_PROF_SSID); in wl_update_bss_info()
13500 curbssid = wl_read_prof(cfg, ndev, WL_PROF_BSSID); in wl_update_bss_info()
13503 buf = (char *)MALLOCZ(cfg->osh, WL_EXTRA_BUF_MAX); in wl_update_bss_info()
13508 mutex_lock(&cfg->usr_sync); in wl_update_bss_info()
13517 wl_update_prof(cfg, ndev, NULL, &chspec, WL_PROF_CHAN); in wl_update_bss_info()
13525 err = wl_inform_single_bss(cfg, bi, update_ssid); in wl_update_bss_info()
13571 wl_update_prof(cfg, ndev, NULL, &beacon_interval, WL_PROF_BEACONINT); in wl_update_bss_info()
13572 wl_update_prof(cfg, ndev, NULL, &dtim_period, WL_PROF_DTIMPERIOD); in wl_update_bss_info()
13579 MFREE(cfg->osh, buf, WL_EXTRA_BUF_MAX); in wl_update_bss_info()
13580 mutex_unlock(&cfg->usr_sync); in wl_update_bss_info()
13585 wl_bss_roaming_done(struct bcm_cfg80211 *cfg, struct net_device *ndev, in wl_bss_roaming_done() argument
13588 struct wl_connect_info *conn_info = wl_to_conn(cfg); in wl_bss_roaming_done()
13595 struct wiphy *wiphy = bcmcfg_to_wiphy(cfg); in wl_bss_roaming_done()
13606 struct wl_fils_info *fils_info = wl_to_fils_info(cfg); in wl_bss_roaming_done()
13607 struct wl_security *sec = wl_read_prof(cfg, ndev, WL_PROF_SEC); in wl_bss_roaming_done()
13610 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wl_bss_roaming_done()
13623 curbssid = wl_read_prof(cfg, ndev, WL_PROF_BSSID); in wl_bss_roaming_done()
13624 chanspec = (chanspec_t *)wl_read_prof(cfg, ndev, WL_PROF_CHAN); in wl_bss_roaming_done()
13639 …if (((orig_channel == cur_channel) && memcmp(&ether_null, &cfg->last_roamed_addr, ETHER_ADDR_LEN))… in wl_bss_roaming_done()
13641 (memcmp(&cfg->last_roamed_addr, &e->addr, ETHER_ADDR_LEN) == 0))) { in wl_bss_roaming_done()
13645 (const u8*)(&e->addr), curbssid, (const u8*)(&cfg->last_roamed_addr))); in wl_bss_roaming_done()
13651 if ((err = wl_get_assoc_ies(cfg, ndev)) != BCME_OK) { in wl_bss_roaming_done()
13694 wl_update_prof(cfg, ndev, NULL, (const void *)(e->addr.octet), WL_PROF_BSSID); in wl_bss_roaming_done()
13695 curbssid = wl_read_prof(cfg, ndev, WL_PROF_BSSID); in wl_bss_roaming_done()
13696 if ((err = wl_update_bss_info(cfg, ndev, true)) != BCME_OK) { in wl_bss_roaming_done()
13700 if (cfg->wlc_ver.wlc_ver_major < PMKDB_WLC_VER) { in wl_bss_roaming_done()
13701 wl_update_pmklist(ndev, cfg->pmk_list, err); in wl_bss_roaming_done()
13704 chanspec = (chanspec_t *)wl_read_prof(cfg, ndev, WL_PROF_CHAN); in wl_bss_roaming_done()
13717 memcpy(cfg->fbt_key, data, FBT_KEYLEN); in wl_bss_roaming_done()
13770 memcpy(&cfg->last_roamed_addr, &e->addr, ETHER_ADDR_LEN); in wl_bss_roaming_done()
13771 wl_set_drv_status(cfg, CONNECTED, ndev); in wl_bss_roaming_done()
13774 cfg->roam_count++; in wl_bss_roaming_done()
13777 if (wl_adps_bad_ap_check(cfg, &e->addr)) { in wl_bss_roaming_done()
13778 if (wl_adps_enabled(cfg, ndev)) { in wl_bss_roaming_done()
13779 wl_adps_set_suspend(cfg, ndev, ADPS_SUSPEND); in wl_bss_roaming_done()
13799 wl_del_roam_timeout(cfg); in wl_bss_roaming_done()
13805 wl_cfg80211_verify_bss(struct bcm_cfg80211 *cfg, struct net_device *ndev, in wl_cfg80211_verify_bss() argument
13813 wiphy = bcmcfg_to_wiphy(cfg); in wl_cfg80211_verify_bss()
13814 ssid = (struct wlc_ssid *)wl_read_prof(cfg, ndev, WL_PROF_SSID); in wl_cfg80211_verify_bss()
13815 curbssid = wl_read_prof(cfg, ndev, WL_PROF_BSSID); in wl_cfg80211_verify_bss()
13841 wl_get_fils_connect_params(struct bcm_cfg80211 *cfg, struct net_device *ndev) in wl_get_fils_connect_params() argument
13844 struct wl_fils_info *fils_info = wl_to_fils_info(cfg); in wl_get_fils_connect_params()
13851 iov_buf_in = MALLOCZ(cfg->osh, WLC_IOCTL_SMLEN); in wl_get_fils_connect_params()
13860 iov_buf_in, WLC_IOCTL_SMLEN, &cfg->ioctl_buf_sync); in wl_get_fils_connect_params()
13910 MFREE(cfg->osh, iov_buf_in, WLC_IOCTL_SMLEN); in wl_get_fils_connect_params()
13918 wl_fillup_resp_params(struct bcm_cfg80211 *cfg, struct net_device *ndev, in wl_fillup_resp_params() argument
13921 struct wl_connect_info *conn_info = wl_to_conn(cfg); in wl_fillup_resp_params()
13928 fils_info = wl_to_fils_info(cfg); in wl_fillup_resp_params()
13929 ssid = (struct wlc_ssid *)wl_read_prof(cfg, ndev, WL_PROF_SSID); in wl_fillup_resp_params()
13930 wiphy = bcmcfg_to_wiphy(cfg); in wl_fillup_resp_params()
13985 wl_bss_connect_done(struct bcm_cfg80211 *cfg, struct net_device *ndev, in wl_bss_connect_done() argument
13988 struct wl_connect_info *conn_info = wl_to_conn(cfg); in wl_bss_connect_done()
13989 struct wl_security *sec = wl_read_prof(cfg, ndev, WL_PROF_SEC); in wl_bss_connect_done()
13991 u8 *conn_req_bssid = wl_read_prof(cfg, ndev, WL_PROF_LATEST_BSSID); in wl_bss_connect_done()
13997 u8 *curbssid = wl_read_prof(cfg, ndev, WL_PROF_BSSID); in wl_bss_connect_done()
14002 dhdp = (dhd_pub_t *)(cfg->pub); in wl_bss_connect_done()
14013 if (!wl_get_drv_status(cfg, CONNECTING, ndev)) { in wl_bss_connect_done()
14016 ndev->name, event_type, wl_get_drv_status(cfg, CONNECTING, ndev), in wl_bss_connect_done()
14017 wl_get_drv_status(cfg, CONNECTED, ndev))); in wl_bss_connect_done()
14034 wl_cfgscan_cancel_scan(cfg); in wl_bss_connect_done()
14035 bzero(&cfg->last_roamed_addr, ETHER_ADDR_LEN); in wl_bss_connect_done()
14038 wl_get_assoc_ies(cfg, ndev); in wl_bss_connect_done()
14039 wl_update_prof(cfg, ndev, NULL, (const void *)(e->addr.octet), in wl_bss_connect_done()
14041 curbssid = wl_read_prof(cfg, ndev, WL_PROF_BSSID); in wl_bss_connect_done()
14047 wl_update_bss_info(cfg, ndev, true); in wl_bss_connect_done()
14048 if (cfg->wlc_ver.wlc_ver_major < PMKDB_WLC_VER) { in wl_bss_connect_done()
14049 wl_update_pmklist(ndev, cfg->pmk_list, err); in wl_bss_connect_done()
14051 wl_set_drv_status(cfg, CONNECTED, ndev); in wl_bss_connect_done()
14053 if (wl_cfg80211_verify_bss(cfg, ndev, &bss) != true) { in wl_bss_connect_done()
14077 wl_clr_drv_status(cfg, CONNECTED, ndev); in wl_bss_connect_done()
14082 wl_clr_drv_status(cfg, CONNECTING, ndev); in wl_bss_connect_done()
14105 if ((err = wl_get_fils_connect_params(cfg, ndev)) != BCME_OK) { in wl_bss_connect_done()
14110 if (wl_fillup_resp_params(cfg, ndev, curbssid, &resp_params, status) != BCME_OK) { in wl_bss_connect_done()
14127 LOG_TS(cfg, conn_cmplt); in wl_bss_connect_done()
14128 LOG_TS(cfg, authorize_start); in wl_bss_connect_done()
14137 wl_set_drv_status(cfg, AUTHORIZED, ndev); in wl_bss_connect_done()
14138 CLR_TS(cfg, authorize_start); in wl_bss_connect_done()
14139 LOG_TS(cfg, authorize_cmplt); in wl_bss_connect_done()
14152 CLR_TS(cfg, conn_start); in wl_bss_connect_done()
14157 wl_notify_mic_status(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev, in wl_notify_mic_status() argument
14164 ndev = cfgdev_to_wlc_ndev(cfgdev, cfg); in wl_notify_mic_status()
14168 mutex_lock(&cfg->usr_sync); in wl_notify_mic_status()
14177 mutex_unlock(&cfg->usr_sync); in wl_notify_mic_status()
14184 wl_notify_bt_wifi_handover_req(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev, in wl_notify_bt_wifi_handover_req() argument
14193 ndev = cfgdev_to_wlc_ndev(cfgdev, cfg); in wl_notify_bt_wifi_handover_req()
14202 wl_gon_req_collision(struct bcm_cfg80211 *cfg, wl_action_frame_t *tx_act_frm, in wl_gon_req_collision() argument
14206 if (cfg->afx_hdl->pending_tx_act_frm == NULL) in wl_gon_req_collision()
14231 cfg->block_gon_req_tx_count = BLOCK_GON_REQ_MAX_NUM; in wl_gon_req_collision()
14237 if (wl_get_drv_status_all(cfg, FINDING_COMMON_CHANNEL)) { in wl_gon_req_collision()
14238 wl_clr_drv_status(cfg, FINDING_COMMON_CHANNEL, ndev); in wl_gon_req_collision()
14239 complete(&cfg->act_frm_scan); in wl_gon_req_collision()
14244 cfg->block_gon_req_rx_count = BLOCK_GON_REQ_MAX_NUM; in wl_gon_req_collision()
14252 wl_stop_wait_next_action_frame(struct bcm_cfg80211 *cfg, struct net_device *ndev, u8 bsscfgidx) in wl_stop_wait_next_action_frame() argument
14256 if (wl_get_drv_status_all(cfg, FINDING_COMMON_CHANNEL)) { in wl_stop_wait_next_action_frame()
14257 del_timer_sync(&cfg->p2p->listen_timer); in wl_stop_wait_next_action_frame()
14258 if (cfg->afx_hdl != NULL) { in wl_stop_wait_next_action_frame()
14259 if (cfg->afx_hdl->dev != NULL) { in wl_stop_wait_next_action_frame()
14260 wl_clr_drv_status(cfg, SCANNING, cfg->afx_hdl->dev); in wl_stop_wait_next_action_frame()
14261 wl_clr_drv_status(cfg, FINDING_COMMON_CHANNEL, cfg->afx_hdl->dev); in wl_stop_wait_next_action_frame()
14263 cfg->afx_hdl->peer_chan = WL_INVALID; in wl_stop_wait_next_action_frame()
14265 complete(&cfg->act_frm_scan); in wl_stop_wait_next_action_frame()
14267 } else if (wl_get_drv_status_all(cfg, SENDING_ACT_FRM)) { in wl_stop_wait_next_action_frame()
14268 if (!(wl_get_p2p_status(cfg, ACTION_TX_COMPLETED) || in wl_stop_wait_next_action_frame()
14269 wl_get_p2p_status(cfg, ACTION_TX_NOACK))) in wl_stop_wait_next_action_frame()
14270 wl_set_p2p_status(cfg, ACTION_TX_COMPLETED); in wl_stop_wait_next_action_frame()
14280 if (cfg->af_sent_channel) { in wl_stop_wait_next_action_frame()
14284 mutex_lock(&cfg->scan_sync); in wl_stop_wait_next_action_frame()
14285 wl_cfgscan_scan_abort(cfg); in wl_stop_wait_next_action_frame()
14286 mutex_unlock(&cfg->scan_sync); in wl_stop_wait_next_action_frame()
14294 else if (wl_get_drv_status_all(cfg, WAITING_NEXT_ACT_FRM_LISTEN)) { in wl_stop_wait_next_action_frame()
14297 wl_cfgscan_cancel_scan(cfg); in wl_stop_wait_next_action_frame()
14305 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_set_wes_mode() local
14306 cfg->wes_mode = mode; in wl_cfg80211_set_wes_mode()
14312 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_get_wes_mode() local
14313 return cfg->wes_mode; in wl_cfg80211_get_wes_mode()
14343 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_set_ncho_mode() local
14344 cfg->ncho_mode = mode; in wl_cfg80211_set_ncho_mode()
14351 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_get_ncho_mode() local
14352 return cfg->ncho_mode; in wl_cfg80211_get_ncho_mode()
14362 wl_notify_rx_mgmt_frame(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev, in wl_notify_rx_mgmt_frame() argument
14381 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wl_notify_rx_mgmt_frame()
14397 ndev = cfgdev_to_wlc_ndev(cfgdev, cfg); in wl_notify_rx_mgmt_frame()
14409 for_each_ndev(cfg, iter, next) { in wl_notify_rx_mgmt_frame()
14438 err = wl_frame_get_mgmt(cfg, FC_ACTION, &da, &e->addr, &bssid, in wl_notify_rx_mgmt_frame()
14462 wl_clr_drv_status(cfg, WAITING_NEXT_ACT_FRM, ndev); in wl_notify_rx_mgmt_frame()
14465 wl_stop_wait_next_action_frame(cfg, ndev, bsscfgidx); in wl_notify_rx_mgmt_frame()
14469 if (wl_get_p2p_status(cfg, DISC_IN_PROGRESS)) { in wl_notify_rx_mgmt_frame()
14477 if (sd_act_frm && wl_get_drv_status_all(cfg, WAITING_NEXT_ACT_FRM)) { in wl_notify_rx_mgmt_frame()
14478 if (cfg->next_af_subtype == sd_act_frm->action) { in wl_notify_rx_mgmt_frame()
14481 wl_clr_drv_status(cfg, WAITING_NEXT_ACT_FRM, ndev); in wl_notify_rx_mgmt_frame()
14484 wl_stop_wait_next_action_frame(cfg, ndev, bsscfgidx); in wl_notify_rx_mgmt_frame()
14506 cfg->tdls_mgmt_frame = mgmt_frame; in wl_notify_rx_mgmt_frame()
14507 cfg->tdls_mgmt_frame_len = mgmt_frame_len; in wl_notify_rx_mgmt_frame()
14508 cfg->tdls_mgmt_freq = freq; in wl_notify_rx_mgmt_frame()
14521 if (!cfg->up_table) { in wl_notify_rx_mgmt_frame()
14522 cfg->up_table = (uint8 *)MALLOC(cfg->osh, UP_TABLE_MAX); in wl_notify_rx_mgmt_frame()
14524 wl_set_up_table(cfg->up_table, qos_map_ie); in wl_notify_rx_mgmt_frame()
14526 MFREE(cfg->osh, cfg->up_table, UP_TABLE_MAX); in wl_notify_rx_mgmt_frame()
14556 mgmt_frame_len - DOT11_MGMT_HDR_LEN) && cfg->wes_mode == 0) { in wl_notify_rx_mgmt_frame()
14563 if (cfg->next_af_subtype != WL_PUB_AF_STYPE_INVALID) { in wl_notify_rx_mgmt_frame()
14568 } else if (cfg->next_af_subtype == action) { in wl_notify_rx_mgmt_frame()
14571 wl_clr_drv_status(cfg, WAITING_NEXT_ACT_FRM, ndev); in wl_notify_rx_mgmt_frame()
14574 wl_stop_wait_next_action_frame(cfg, ndev, bsscfgidx); in wl_notify_rx_mgmt_frame()
14582 wl_gon_req_collision(cfg, in wl_notify_rx_mgmt_frame()
14583 &cfg->afx_hdl->pending_tx_act_frm->action_frame, in wl_notify_rx_mgmt_frame()
14586 if (cfg->block_gon_req_rx_count) { in wl_notify_rx_mgmt_frame()
14588 cfg->block_gon_req_rx_count)); in wl_notify_rx_mgmt_frame()
14589 cfg->block_gon_req_rx_count--; in wl_notify_rx_mgmt_frame()
14594 cfg->block_gon_req_tx_count = 0; in wl_notify_rx_mgmt_frame()
14595 cfg->block_gon_req_rx_count = 0; in wl_notify_rx_mgmt_frame()
14599 if (wl_get_drv_status_all(cfg, WAITING_NEXT_ACT_FRM)) { in wl_notify_rx_mgmt_frame()
14600 if (cfg->next_af_subtype == act_frm->subtype) { in wl_notify_rx_mgmt_frame()
14603 wl_clr_drv_status(cfg, WAITING_NEXT_ACT_FRM, ndev); in wl_notify_rx_mgmt_frame()
14605 if (cfg->next_af_subtype == P2P_PAF_GON_CONF) { in wl_notify_rx_mgmt_frame()
14610 wl_stop_wait_next_action_frame(cfg, ndev, bsscfgidx); in wl_notify_rx_mgmt_frame()
14611 } else if ((cfg->next_af_subtype == P2P_PAF_GON_RSP) && in wl_notify_rx_mgmt_frame()
14628 if (cfg->next_af_subtype == pa->ftype) { in wl_notify_rx_mgmt_frame()
14630 wl_clr_drv_status(cfg, WAITING_NEXT_ACT_FRM, ndev); in wl_notify_rx_mgmt_frame()
14633 wl_stop_wait_next_action_frame(cfg, ndev, bsscfgidx); in wl_notify_rx_mgmt_frame()
14638 wl_clr_p2p_status(cfg, GO_NEG_PHASE); in wl_notify_rx_mgmt_frame()
14687 if (WL_DRV_STATUS_SENDING_AF_FRM_EXT(cfg) && in wl_notify_rx_mgmt_frame()
14688 !memcmp(cfg->afx_hdl->tx_dst_addr.octet, e->addr.octet, in wl_notify_rx_mgmt_frame()
14690 if (cfg->afx_hdl->pending_tx_act_frm && in wl_notify_rx_mgmt_frame()
14691 wl_get_drv_status_all(cfg, FINDING_COMMON_CHANNEL)) { in wl_notify_rx_mgmt_frame()
14695 cfg->afx_hdl->peer_chan = channel; in wl_notify_rx_mgmt_frame()
14696 complete(&cfg->act_frm_scan); in wl_notify_rx_mgmt_frame()
14704 if (cfg->p2p && in wl_notify_rx_mgmt_frame()
14706 cfg->p2p_prb_noti && in wl_notify_rx_mgmt_frame()
14708 wl_get_p2p_status(cfg, GO_NEG_PHASE)) { in wl_notify_rx_mgmt_frame()
14716 if (discover_cfgdev(cfgdev, cfg)) in wl_notify_rx_mgmt_frame()
14735 MFREE(cfg->osh, mgmt_frame, mgmt_frame_len); in wl_notify_rx_mgmt_frame()
14757 wl_cfg80211_ccode_evt_handler(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev, in wl_cfg80211_ccode_evt_handler() argument
14760 dhd_pub_t *dhd = cfg->pub; in wl_cfg80211_ccode_evt_handler()
14762 struct wiphy *wiphy = bcmcfg_to_wiphy(cfg); in wl_cfg80211_ccode_evt_handler()
14764 struct net_device *dev = bcmcfg_to_prmry_ndev(cfg); in wl_cfg80211_ccode_evt_handler()
14770 if (strncmp(cfg->country, country_str, WL_CCODE_LEN) == 0) { in wl_cfg80211_ccode_evt_handler()
14780 err = wl_update_wiphybands(cfg, true); in wl_cfg80211_ccode_evt_handler()
14810 static void wl_init_prof(struct bcm_cfg80211 *cfg, struct net_device *ndev) in wl_init_prof() argument
14813 struct wl_profile *profile = wl_get_profile_by_netdev(cfg, ndev); in wl_init_prof()
14820 WL_CFG_DRV_LOCK(&cfg->cfgdrv_lock, flags); in wl_init_prof()
14822 WL_CFG_DRV_UNLOCK(&cfg->cfgdrv_lock, flags); in wl_init_prof()
14825 static void wl_init_event_handler(struct bcm_cfg80211 *cfg) in wl_init_event_handler() argument
14827 bzero(cfg->evt_handler, sizeof(cfg->evt_handler)); in wl_init_event_handler()
14829 cfg->evt_handler[WLC_E_SCAN_COMPLETE] = wl_notify_scan_status; in wl_init_event_handler()
14830 cfg->evt_handler[WLC_E_AUTH] = wl_notify_connect_status; in wl_init_event_handler()
14831 cfg->evt_handler[WLC_E_ASSOC] = wl_notify_connect_status; in wl_init_event_handler()
14832 cfg->evt_handler[WLC_E_LINK] = wl_notify_connect_status; in wl_init_event_handler()
14833 cfg->evt_handler[WLC_E_DEAUTH_IND] = wl_notify_connect_status; in wl_init_event_handler()
14834 cfg->evt_handler[WLC_E_DEAUTH] = wl_notify_connect_status; in wl_init_event_handler()
14835 cfg->evt_handler[WLC_E_DISASSOC_IND] = wl_notify_connect_status; in wl_init_event_handler()
14836 cfg->evt_handler[WLC_E_ASSOC_IND] = wl_notify_connect_status; in wl_init_event_handler()
14837 cfg->evt_handler[WLC_E_REASSOC_IND] = wl_notify_connect_status; in wl_init_event_handler()
14838 cfg->evt_handler[WLC_E_ROAM] = wl_notify_roaming_status; in wl_init_event_handler()
14839 cfg->evt_handler[WLC_E_MIC_ERROR] = wl_notify_mic_status; in wl_init_event_handler()
14840 cfg->evt_handler[WLC_E_SET_SSID] = wl_notify_connect_status; in wl_init_event_handler()
14841 cfg->evt_handler[WLC_E_ACTION_FRAME_RX] = wl_notify_rx_mgmt_frame; in wl_init_event_handler()
14842 cfg->evt_handler[WLC_E_PROBREQ_MSG] = wl_notify_rx_mgmt_frame; in wl_init_event_handler()
14843 cfg->evt_handler[WLC_E_P2P_PROBREQ_MSG] = wl_notify_rx_mgmt_frame; in wl_init_event_handler()
14844 cfg->evt_handler[WLC_E_P2P_DISC_LISTEN_COMPLETE] = wl_cfgp2p_listen_complete; in wl_init_event_handler()
14845 cfg->evt_handler[WLC_E_ACTION_FRAME_COMPLETE] = wl_cfgp2p_action_tx_complete; in wl_init_event_handler()
14846 cfg->evt_handler[WLC_E_ACTION_FRAME_OFF_CHAN_COMPLETE] = wl_cfgp2p_action_tx_complete; in wl_init_event_handler()
14847 cfg->evt_handler[WLC_E_JOIN] = wl_notify_connect_status; in wl_init_event_handler()
14848 cfg->evt_handler[WLC_E_START] = wl_notify_connect_status; in wl_init_event_handler()
14849 cfg->evt_handler[WLC_E_AUTH_IND] = wl_notify_connect_status; in wl_init_event_handler()
14850 cfg->evt_handler[WLC_E_ASSOC_RESP_IE] = wl_notify_connect_status; in wl_init_event_handler()
14852 cfg->evt_handler[WLC_E_PFN_NET_FOUND] = wl_notify_pfn_status; in wl_init_event_handler()
14855 cfg->evt_handler[WLC_E_PFN_BEST_BATCHING] = wl_notify_gscan_event; in wl_init_event_handler()
14856 cfg->evt_handler[WLC_E_PFN_SCAN_COMPLETE] = wl_notify_gscan_event; in wl_init_event_handler()
14857 cfg->evt_handler[WLC_E_PFN_GSCAN_FULL_RESULT] = wl_notify_gscan_event; in wl_init_event_handler()
14858 cfg->evt_handler[WLC_E_PFN_BSSID_NET_FOUND] = wl_notify_gscan_event; in wl_init_event_handler()
14859 cfg->evt_handler[WLC_E_PFN_BSSID_NET_LOST] = wl_notify_gscan_event; in wl_init_event_handler()
14860 cfg->evt_handler[WLC_E_PFN_SSID_EXT] = wl_notify_gscan_event; in wl_init_event_handler()
14861 cfg->evt_handler[WLC_E_GAS_FRAGMENT_RX] = wl_notify_gscan_event; in wl_init_event_handler()
14862 cfg->evt_handler[WLC_E_ROAM_EXP_EVENT] = wl_handle_roam_exp_event; in wl_init_event_handler()
14865 cfg->evt_handler[WLC_E_RSSI_LQM] = wl_handle_rssi_monitor_event; in wl_init_event_handler()
14868 cfg->evt_handler[WLC_E_SERVICE_FOUND] = wl_svc_resp_handler; in wl_init_event_handler()
14869 cfg->evt_handler[WLC_E_P2PO_ADD_DEVICE] = wl_notify_device_discovery; in wl_init_event_handler()
14870 cfg->evt_handler[WLC_E_P2PO_DEL_DEVICE] = wl_notify_device_discovery; in wl_init_event_handler()
14873 cfg->evt_handler[WLC_E_TDLS_PEER_EVENT] = wl_tdls_event_handler; in wl_init_event_handler()
14875 cfg->evt_handler[WLC_E_BSSID] = wl_notify_roaming_status; in wl_init_event_handler()
14877 cfg->evt_handler[WLC_E_AIBSS_TXFAIL] = wl_notify_aibss_txfail; in wl_init_event_handler()
14880 cfg->evt_handler[WLC_E_RMC_EVENT] = wl_notify_rmc_status; in wl_init_event_handler()
14883 cfg->evt_handler[WLC_E_BT_WIFI_HANDOVER_REQ] = wl_notify_bt_wifi_handover_req; in wl_init_event_handler()
14886 cfg->evt_handler[WLC_E_NAN_CRITICAL] = wl_cfgnan_notify_nan_status; in wl_init_event_handler()
14887 cfg->evt_handler[WLC_E_NAN_NON_CRITICAL] = wl_cfgnan_notify_nan_status; in wl_init_event_handler()
14889 cfg->evt_handler[WLC_E_CSA_COMPLETE_IND] = wl_csa_complete_ind; in wl_init_event_handler()
14890 cfg->evt_handler[WLC_E_AP_STARTED] = wl_ap_start_ind; in wl_init_event_handler()
14892 cfg->evt_handler[WLC_E_EXCESS_PM_WAKE_EVENT] = wl_check_pmstatus; in wl_init_event_handler()
14895 cfg->evt_handler[WLC_E_ROAM_PREP] = wl_notify_roam_prep_status; in wl_init_event_handler()
14897 cfg->evt_handler[WLC_E_ROAM_START] = wl_notify_roam_start_status; in wl_init_event_handler()
14899 cfg->evt_handler[WLC_E_ADPS] = wl_adps_event_handler; in wl_init_event_handler()
14901 cfg->evt_handler[WLC_E_PSK_SUP] = wl_cfg80211_sup_event_handler; in wl_init_event_handler()
14902 cfg->evt_handler[WLC_E_COUNTRY_CODE_CHANGED] = wl_cfg80211_ccode_evt_handler; in wl_init_event_handler()
14904 cfg->evt_handler[WLC_E_BCNRECV_ABORTED] = wl_bcnrecv_aborted_event_handler; in wl_init_event_handler()
14907 cfg->evt_handler[WLC_E_MBO] = wl_mbo_event_handler; in wl_init_event_handler()
14910 cfg->evt_handler[WLC_E_ADDTS_IND] = wl_cfg80211_cac_event_handler; in wl_init_event_handler()
14911 cfg->evt_handler[WLC_E_DELTS_IND] = wl_cfg80211_cac_event_handler; in wl_init_event_handler()
14914 cfg->evt_handler[WLC_E_PRUNE] = wl_bssid_prune_event_handler; in wl_init_event_handler()
14917 cfg->evt_handler[WLC_E_PROXD] = wl_cfg80211_rtt_event_handler; in wl_init_event_handler()
14920 cfg->evt_handler[WLC_E_BSS_LOAD] = wl_cfg80211_bssload_report_event_handler; in wl_init_event_handler()
14923 cfg->evt_handler[WLC_E_TWT] = wl_notify_twt_event; in wl_init_event_handler()
14926 cfg->evt_handler[WLC_E_TWT] = wl_cfgvendor_notify_twt_event; in wl_init_event_handler()
14930 cfg->evt_handler[WLC_E_JOIN_START] = wl_notify_start_auth; in wl_init_event_handler()
14936 wl_init_escan_result_buf(struct bcm_cfg80211 *cfg) in wl_init_escan_result_buf() argument
14939 cfg->escan_info.escan_buf[0] = DHD_OS_PREALLOC(cfg->pub, in wl_init_escan_result_buf()
14941 if (cfg->escan_info.escan_buf[0] == NULL) { in wl_init_escan_result_buf()
14946 cfg->escan_info.escan_buf[1] = DHD_OS_PREALLOC(cfg->pub, in wl_init_escan_result_buf()
14948 if (cfg->escan_info.escan_buf[1] == NULL) { in wl_init_escan_result_buf()
14953 bzero(cfg->escan_info.escan_buf[0], ESCAN_BUF_SIZE); in wl_init_escan_result_buf()
14954 bzero(cfg->escan_info.escan_buf[1], ESCAN_BUF_SIZE); in wl_init_escan_result_buf()
14955 cfg->escan_info.escan_type[0] = 0; in wl_init_escan_result_buf()
14956 cfg->escan_info.escan_type[1] = 0; in wl_init_escan_result_buf()
14958 cfg->escan_info.escan_buf = DHD_OS_PREALLOC(cfg->pub, in wl_init_escan_result_buf()
14960 if (cfg->escan_info.escan_buf == NULL) { in wl_init_escan_result_buf()
14964 bzero(cfg->escan_info.escan_buf, ESCAN_BUF_SIZE); in wl_init_escan_result_buf()
14971 wl_deinit_escan_result_buf(struct bcm_cfg80211 *cfg) in wl_deinit_escan_result_buf() argument
14974 if (cfg->escan_info.escan_buf[0] != NULL) { in wl_deinit_escan_result_buf()
14975 cfg->escan_info.escan_buf[0] = NULL; in wl_deinit_escan_result_buf()
14976 cfg->escan_info.escan_type[0] = 0; in wl_deinit_escan_result_buf()
14979 if (cfg->escan_info.escan_buf[1] != NULL) { in wl_deinit_escan_result_buf()
14980 cfg->escan_info.escan_buf[1] = NULL; in wl_deinit_escan_result_buf()
14981 cfg->escan_info.escan_type[1] = 0; in wl_deinit_escan_result_buf()
14984 if (cfg->escan_info.escan_buf != NULL) { in wl_deinit_escan_result_buf()
14985 cfg->escan_info.escan_buf = NULL; in wl_deinit_escan_result_buf()
14991 static s32 wl_init_priv_mem(struct bcm_cfg80211 *cfg) in wl_init_priv_mem() argument
14995 cfg->scan_results = (wl_scan_results_t *)MALLOCZ(cfg->osh, in wl_init_priv_mem()
14997 if (unlikely(!cfg->scan_results)) { in wl_init_priv_mem()
15001 cfg->conf = (struct wl_conf *)MALLOCZ(cfg->osh, sizeof(*cfg->conf)); in wl_init_priv_mem()
15002 if (unlikely(!cfg->conf)) { in wl_init_priv_mem()
15006 cfg->scan_req_int = (void *)MALLOCZ(cfg->osh, in wl_init_priv_mem()
15007 sizeof(*cfg->scan_req_int)); in wl_init_priv_mem()
15008 if (unlikely(!cfg->scan_req_int)) { in wl_init_priv_mem()
15012 cfg->ioctl_buf = (u8 *)MALLOCZ(cfg->osh, WLC_IOCTL_MAXLEN); in wl_init_priv_mem()
15013 if (unlikely(!cfg->ioctl_buf)) { in wl_init_priv_mem()
15017 cfg->escan_ioctl_buf = (void *)MALLOCZ(cfg->osh, WLC_IOCTL_MAXLEN); in wl_init_priv_mem()
15018 if (unlikely(!cfg->escan_ioctl_buf)) { in wl_init_priv_mem()
15022 cfg->extra_buf = (void *)MALLOCZ(cfg->osh, WL_EXTRA_BUF_MAX); in wl_init_priv_mem()
15023 if (unlikely(!cfg->extra_buf)) { in wl_init_priv_mem()
15027 cfg->pmk_list = (void *)MALLOCZ(cfg->osh, sizeof(*cfg->pmk_list)); in wl_init_priv_mem()
15028 if (unlikely(!cfg->pmk_list)) { in wl_init_priv_mem()
15033 cfg->conn_info = (void *)MALLOCZ(cfg->osh, sizeof(*cfg->conn_info)); in wl_init_priv_mem()
15034 if (unlikely(!cfg->conn_info)) { in wl_init_priv_mem()
15038 cfg->ie = (void *)MALLOC(cfg->osh, sizeof(*cfg->ie)); in wl_init_priv_mem()
15039 if (unlikely(!cfg->ie)) { in wl_init_priv_mem()
15043 if (unlikely(wl_init_escan_result_buf(cfg))) { in wl_init_priv_mem()
15048 cfg->afx_hdl = (void *)MALLOCZ(cfg->osh, sizeof(*cfg->afx_hdl)); in wl_init_priv_mem()
15049 if (unlikely(!cfg->afx_hdl)) { in wl_init_priv_mem()
15053 init_completion(&cfg->act_frm_scan); in wl_init_priv_mem()
15054 init_completion(&cfg->wait_next_af); in wl_init_priv_mem()
15056 INIT_WORK(&cfg->afx_hdl->work, wl_cfg80211_afx_handler); in wl_init_priv_mem()
15059 if (cfg->tdls_mgmt_frame) { in wl_init_priv_mem()
15060 MFREE(cfg->osh, cfg->tdls_mgmt_frame, cfg->tdls_mgmt_frame_len); in wl_init_priv_mem()
15061 cfg->tdls_mgmt_frame = NULL; in wl_init_priv_mem()
15062 cfg->tdls_mgmt_frame_len = 0; in wl_init_priv_mem()
15065 cfg->spmk_info_list = (void *)MALLOCZ(cfg->osh, sizeof(*cfg->spmk_info_list)); in wl_init_priv_mem()
15066 if (unlikely(!cfg->spmk_info_list)) { in wl_init_priv_mem()
15074 wl_deinit_priv_mem(cfg); in wl_init_priv_mem()
15079 static void wl_deinit_priv_mem(struct bcm_cfg80211 *cfg) in wl_deinit_priv_mem() argument
15081 MFREE(cfg->osh, cfg->scan_results, WL_SCAN_BUF_MAX); in wl_deinit_priv_mem()
15082 MFREE(cfg->osh, cfg->conf, sizeof(*cfg->conf)); in wl_deinit_priv_mem()
15083 MFREE(cfg->osh, cfg->scan_req_int, sizeof(*cfg->scan_req_int)); in wl_deinit_priv_mem()
15084 MFREE(cfg->osh, cfg->ioctl_buf, WLC_IOCTL_MAXLEN); in wl_deinit_priv_mem()
15085 MFREE(cfg->osh, cfg->escan_ioctl_buf, WLC_IOCTL_MAXLEN); in wl_deinit_priv_mem()
15086 MFREE(cfg->osh, cfg->extra_buf, WL_EXTRA_BUF_MAX); in wl_deinit_priv_mem()
15087 MFREE(cfg->osh, cfg->pmk_list, sizeof(*cfg->pmk_list)); in wl_deinit_priv_mem()
15089 MFREE(cfg->osh, cfg->conn_info, sizeof(*cfg->conn_info)); in wl_deinit_priv_mem()
15090 MFREE(cfg->osh, cfg->ie, sizeof(*cfg->ie)); in wl_deinit_priv_mem()
15091 wl_deinit_escan_result_buf(cfg); in wl_deinit_priv_mem()
15093 if (cfg->afx_hdl) { in wl_deinit_priv_mem()
15095 cancel_work_sync(&cfg->afx_hdl->work); in wl_deinit_priv_mem()
15097 MFREE(cfg->osh, cfg->afx_hdl, sizeof(*cfg->afx_hdl)); in wl_deinit_priv_mem()
15099 MFREE(cfg->osh, cfg->spmk_info_list, sizeof(*cfg->spmk_info_list)); in wl_deinit_priv_mem()
15103 static s32 wl_create_event_handler(struct bcm_cfg80211 *cfg) in wl_create_event_handler() argument
15114 if (!cfg->event_workq) { in wl_create_event_handler()
15115 cfg->event_workq = alloc_workqueue("dhd_eventd", in wl_create_event_handler()
15119 if (!cfg->event_workq) { in wl_create_event_handler()
15123 INIT_WORK(&cfg->event_work, wl_event_handler); in wl_create_event_handler()
15128 INIT_WORK(&cfg->event_work, wl_event_handler); in wl_create_event_handler()
15129 cfg->event_workq_init = true; in wl_create_event_handler()
15134 static void wl_destroy_event_handler(struct bcm_cfg80211 *cfg) in wl_destroy_event_handler() argument
15138 if (cfg && cfg->event_workq) { in wl_destroy_event_handler()
15139 cancel_work_sync(&cfg->event_work); in wl_destroy_event_handler()
15140 destroy_workqueue(cfg->event_workq); in wl_destroy_event_handler()
15141 cfg->event_workq = NULL; in wl_destroy_event_handler()
15146 if (cfg && cfg->event_workq_init) { in wl_destroy_event_handler()
15148 cancel_work_sync(&cfg->event_work); in wl_destroy_event_handler()
15150 cfg->event_workq_init = false; in wl_destroy_event_handler()
15157 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_terminate_event_handler() local
15159 if (cfg) { in wl_terminate_event_handler()
15160 wl_destroy_event_handler(cfg); in wl_terminate_event_handler()
15161 wl_flush_eq(cfg); in wl_terminate_event_handler()
15166 static void wl_del_roam_timeout(struct bcm_cfg80211 *cfg) in wl_del_roam_timeout() argument
15168 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wl_del_roam_timeout()
15172 del_timer_sync(&cfg->roam_timeout); in wl_del_roam_timeout()
15177 struct bcm_cfg80211 *cfg = (struct bcm_cfg80211 *)data; in wl_roam_timeout() local
15178 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wl_roam_timeout()
15297 struct bcm_cfg80211 *cfg = NULL; in wl_cfg80211_netdev_notifier_call() local
15311 cfg = (struct bcm_cfg80211 *)wiphy_priv(wdev->wiphy); in wl_cfg80211_netdev_notifier_call()
15312 if (!cfg || (cfg != wl_cfg80211_get_bcmcfg())) { in wl_cfg80211_netdev_notifier_call()
15314 WL_ERR(("wrong cfg ptr (%p)\n", cfg)); in wl_cfg80211_netdev_notifier_call()
15318 if (dev == bcmcfg_to_prmry_ndev(cfg)) { in wl_cfg80211_netdev_notifier_call()
15360 wl_cfg80211_clear_per_bss_ies(cfg, wdev); in wl_cfg80211_netdev_notifier_call()
15362 wl_dealloc_netinfo_by_wdev(cfg, wdev); in wl_cfg80211_netdev_notifier_call()
15371 if (wl_get_drv_status(cfg, SCANNING, dev)) in wl_cfg80211_netdev_notifier_call()
15372 wl_cfgscan_cancel_scan(cfg); in wl_cfg80211_netdev_notifier_call()
15388 void wl_cfg80211_concurrent_roam(struct bcm_cfg80211 *cfg, int enable) in wl_cfg80211_concurrent_roam() argument
15390 u32 connected_cnt = wl_get_drv_status_all(cfg, CONNECTED); in wl_cfg80211_concurrent_roam()
15391 bool p2p_connected = wl_cfgp2p_vif_created(cfg); in wl_cfg80211_concurrent_roam()
15393 bool nan_connected = wl_cfgnan_is_dp_active(bcmcfg_to_prmry_ndev(cfg)); in wl_cfg80211_concurrent_roam()
15397 if (!(cfg->roam_flags & WL_ROAM_OFF_ON_CONCURRENT)) in wl_cfg80211_concurrent_roam()
15411 cfg->roam_flags |= WL_ROAM_REVERT_STATUS; in wl_cfg80211_concurrent_roam()
15413 for_each_ndev(cfg, iter, next) { in wl_cfg80211_concurrent_roam()
15427 else if (!enable && (cfg->roam_flags & WL_ROAM_REVERT_STATUS)) { in wl_cfg80211_concurrent_roam()
15428 cfg->roam_flags &= ~WL_ROAM_REVERT_STATUS; in wl_cfg80211_concurrent_roam()
15430 for_each_ndev(cfg, iter, next) { in wl_cfg80211_concurrent_roam()
15450 static void wl_cfg80211_determine_vsdb_mode(struct bcm_cfg80211 *cfg) in wl_cfg80211_determine_vsdb_mode() argument
15455 dhd_pub_t *dhd = cfg->pub; in wl_cfg80211_determine_vsdb_mode()
15462 u32 connected_cnt = wl_get_drv_status_all(cfg, CONNECTED); in wl_cfg80211_determine_vsdb_mode()
15463 cfg->vsdb_mode = false; in wl_cfg80211_determine_vsdb_mode()
15469 for_each_ndev(cfg, iter, next) { in wl_cfg80211_determine_vsdb_mode()
15475 if (wl_get_drv_status(cfg, CONNECTED, iter->ndev)) { in wl_cfg80211_determine_vsdb_mode()
15481 wl_update_prof(cfg, iter->ndev, NULL, in wl_cfg80211_determine_vsdb_mode()
15484 if (!cfg->vsdb_mode) { in wl_cfg80211_determine_vsdb_mode()
15490 cfg->vsdb_mode = true; in wl_cfg80211_determine_vsdb_mode()
15497 if(dhd->conf->fw_type == FW_TYPE_EZMESH && cfg->vsdb_mode) { in wl_cfg80211_determine_vsdb_mode()
15498 primary_dev = bcmcfg_to_prmry_ndev(cfg); in wl_cfg80211_determine_vsdb_mode()
15505 cfg->vsdb_mode = false; in wl_cfg80211_determine_vsdb_mode()
15508 WL_MSG("wlan", "%s concurrency is enabled\n", cfg->vsdb_mode ? "Multi Channel" : "Same Channel"); in wl_cfg80211_determine_vsdb_mode()
15513 wl_cfg80211_determine_p2p_rsdb_scc_mode(struct bcm_cfg80211 *cfg) in wl_cfg80211_determine_p2p_rsdb_scc_mode() argument
15524 is_rsdb_supported = DHD_OPMODE_SUPPORTED(cfg->pub, DHD_FLAG_RSDB_MODE); in wl_cfg80211_determine_p2p_rsdb_scc_mode()
15532 for_each_ndev(cfg, iter, next) { in wl_cfg80211_determine_p2p_rsdb_scc_mode()
15538 if (wl_get_drv_status(cfg, CONNECTED, iter->ndev)) { in wl_cfg80211_determine_p2p_rsdb_scc_mode()
15565 static s32 wl_notifier_change_state(struct bcm_cfg80211 *cfg, struct net_info *_net_info, in wl_notifier_change_state() argument
15572 struct net_device *primary_dev = bcmcfg_to_prmry_ndev(cfg); in wl_notifier_change_state()
15574 dhd_pub_t *dhd = cfg->pub; in wl_notifier_change_state()
15593 mode = wl_get_mode_by_netdev(cfg, _net_info->ndev); in wl_notifier_change_state()
15595 wl_cfg80211_concurrent_roam(cfg, 1); in wl_notifier_change_state()
15596 wl_cfg80211_determine_vsdb_mode(cfg); in wl_notifier_change_state()
15613 wl_add_remove_pm_enable_work(cfg, WL_PM_WORKQ_SHORT); in wl_notifier_change_state()
15622 if (!DHD_OPMODE_SUPPORTED(cfg->pub, DHD_FLAG_HOSTAP_MODE) && in wl_notifier_change_state()
15624 rsdb_scc_flag = wl_cfg80211_determine_p2p_rsdb_scc_mode(cfg); in wl_notifier_change_state()
15625 wl_cfg80211_set_frameburst(cfg, rsdb_scc_flag); in wl_notifier_change_state()
15630 wl_get_drv_status(cfg, CONNECTED, bcmcfg_to_prmry_ndev(cfg))) { in wl_notifier_change_state()
15634 wl_cfg80211_set_frameburst(cfg, TRUE); in wl_notifier_change_state()
15641 wl_update_prof(cfg, _net_info->ndev, NULL, &chspec, WL_PROF_CHAN); in wl_notifier_change_state()
15642 wl_cfg80211_determine_vsdb_mode(cfg); in wl_notifier_change_state()
15666 wl_cfg80211_concurrent_roam(cfg, 0); in wl_notifier_change_state()
15675 if (!DHD_OPMODE_SUPPORTED(cfg->pub, DHD_FLAG_HOSTAP_MODE)) { in wl_notifier_change_state()
15676 wl_cfg80211_set_frameburst(cfg, TRUE); in wl_notifier_change_state()
15681 CHSPEC_IS2G(cfg->ap_oper_channel)) { in wl_notifier_change_state()
15683 wl_cfg80211_set_frameburst(cfg, FALSE); in wl_notifier_change_state()
15692 static s32 wl_init_roam_timeout(struct bcm_cfg80211 *cfg) in wl_init_roam_timeout() argument
15697 init_timer_compat(&cfg->roam_timeout, wl_roam_timeout, cfg); in wl_init_roam_timeout()
15709 struct bcm_cfg80211 *cfg = priv; in wlan_get_sleep_monitor64_cb() local
15710 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wlan_get_sleep_monitor64_cb()
15717 if (wl_get_drv_status_all(cfg, CONNECTED)) in wlan_get_sleep_monitor64_cb()
15734 static s32 wl_init_priv(struct bcm_cfg80211 *cfg) in wl_init_priv() argument
15736 struct wiphy *wiphy = bcmcfg_to_wiphy(cfg); in wl_init_priv()
15737 struct net_device *ndev = bcmcfg_to_prmry_ndev(cfg); in wl_init_priv()
15740 cfg->scan_request = NULL; in wl_init_priv()
15741 cfg->pwr_save = !!(wiphy->flags & WIPHY_FLAG_PS_ON_BY_DEFAULT); in wl_init_priv()
15743 cfg->roam_on = false; in wl_init_priv()
15745 cfg->roam_on = true; in wl_init_priv()
15747 cfg->active_scan = true; in wl_init_priv()
15748 cfg->rf_blocked = false; in wl_init_priv()
15749 cfg->vsdb_mode = false; in wl_init_priv()
15751 cfg->wlfc_on = false; in wl_init_priv()
15753 cfg->roam_flags |= WL_ROAM_OFF_ON_CONCURRENT; in wl_init_priv()
15754 cfg->disable_roam_event = false; in wl_init_priv()
15756 set_bit(WL_STATUS_CONNECTED, &cfg->interrested_state); in wl_init_priv()
15757 spin_lock_init(&cfg->cfgdrv_lock); in wl_init_priv()
15758 mutex_init(&cfg->ioctl_buf_sync); in wl_init_priv()
15759 init_waitqueue_head(&cfg->netif_change_event); in wl_init_priv()
15760 init_completion(&cfg->send_af_done); in wl_init_priv()
15761 init_completion(&cfg->iface_disable); in wl_init_priv()
15762 mutex_init(&cfg->usr_sync); in wl_init_priv()
15763 mutex_init(&cfg->event_sync); in wl_init_priv()
15764 mutex_init(&cfg->if_sync); in wl_init_priv()
15765 mutex_init(&cfg->scan_sync); in wl_init_priv()
15766 mutex_init(&cfg->connect_sync); in wl_init_priv()
15767 mutex_init(&cfg->pm_sync); in wl_init_priv()
15769 mutex_init(&cfg->tdls_sync); in wl_init_priv()
15772 mutex_init(&cfg->bcn_sync); in wl_init_priv()
15775 wl_init_wps_reauth_sm(cfg); in wl_init_priv()
15777 wl_init_eq(cfg); in wl_init_priv()
15778 err = wl_init_priv_mem(cfg); in wl_init_priv()
15781 if (wl_create_event_handler(cfg)) in wl_init_priv()
15783 wl_init_event_handler(cfg); in wl_init_priv()
15784 err = wl_init_scan(cfg); in wl_init_priv()
15788 err = wl_init_roam_timeout(cfg); in wl_init_priv()
15793 wl_init_conf(cfg->conf); in wl_init_priv()
15794 wl_init_prof(cfg, ndev); in wl_init_priv()
15795 wl_link_down(cfg); in wl_init_priv()
15796 DNGL_FUNC(dhd_cfg80211_init, (cfg)); in wl_init_priv()
15797 cfg->pmk_list->pmkids.length = OFFSETOF(pmkid_list_v3_t, pmkid); in wl_init_priv()
15798 cfg->pmk_list->pmkids.count = 0; in wl_init_priv()
15799 cfg->pmk_list->pmkids.version = PMKID_LIST_VER_3; in wl_init_priv()
15802 sleep_monitor_register_ops(cfg, &wlan_sleep_monitor_ops, in wl_init_priv()
15808 static void wl_deinit_priv(struct bcm_cfg80211 *cfg) in wl_deinit_priv() argument
15810 DNGL_FUNC(dhd_cfg80211_deinit, (cfg)); in wl_deinit_priv()
15811 wl_destroy_event_handler(cfg); in wl_deinit_priv()
15812 wl_flush_eq(cfg); in wl_deinit_priv()
15813 wl_link_down(cfg); in wl_deinit_priv()
15814 del_timer_sync(&cfg->scan_timeout); in wl_deinit_priv()
15816 del_timer_sync(&cfg->roam_timeout); in wl_deinit_priv()
15818 wl_deinit_priv_mem(cfg); in wl_deinit_priv()
15830 static s32 wl_cfg80211_attach_p2p(struct bcm_cfg80211 *cfg) in wl_cfg80211_attach_p2p() argument
15834 if (wl_cfgp2p_register_ndev(cfg) < 0) { in wl_cfg80211_attach_p2p()
15842 static s32 wl_cfg80211_detach_p2p(struct bcm_cfg80211 *cfg) in wl_cfg80211_detach_p2p() argument
15849 if (!cfg) { in wl_cfg80211_detach_p2p()
15855 wdev = cfg->p2p_wdev; in wl_cfg80211_detach_p2p()
15863 wl_cfgp2p_unregister_ndev(cfg); in wl_cfg80211_detach_p2p()
15865 cfg->p2p_wdev = NULL; in wl_cfg80211_detach_p2p()
15866 cfg->p2p_net = NULL; in wl_cfg80211_detach_p2p()
15869 MFREE(cfg->osh, wdev, sizeof(*wdev)); in wl_cfg80211_detach_p2p()
15879 struct bcm_cfg80211 * cfg; in wl_cfg80211_attach_post() local
15887 cfg = wl_get_cfg(ndev); in wl_cfg80211_attach_post()
15888 if (unlikely(!cfg)) { in wl_cfg80211_attach_post()
15892 if (!wl_get_drv_status(cfg, READY, ndev)) { in wl_cfg80211_attach_post()
15893 if (cfg->wdev) { in wl_cfg80211_attach_post()
15894 ret = wl_cfgp2p_supported(cfg, ndev); in wl_cfg80211_attach_post()
15897 cfg->wdev->wiphy->interface_modes |= in wl_cfg80211_attach_post()
15901 if ((err = wl_cfgp2p_init_priv(cfg)) != 0) in wl_cfg80211_attach_post()
15905 if (cfg->p2p_net) { in wl_cfg80211_attach_post()
15907 memcpy(cfg->p2p_net->dev_addr, ndev->dev_addr, ETH_ALEN); in wl_cfg80211_attach_post()
15908 cfg->p2p_net->dev_addr[0] |= 0x02; in wl_cfg80211_attach_post()
15909 WL_MSG(cfg->p2p_net->name, "p2p_dev_addr="MACDBG "\n", in wl_cfg80211_attach_post()
15910 MAC2STRDBG(cfg->p2p_net->dev_addr)); in wl_cfg80211_attach_post()
15917 cfg->p2p_supported = true; in wl_cfg80211_attach_post()
15919 if ((err = wl_cfgp2p_init_priv(cfg)) != 0) in wl_cfg80211_attach_post()
15928 wl_set_drv_status(cfg, READY, ndev); in wl_cfg80211_attach_post()
15947 struct bcm_cfg80211 *cfg = wl_get_cfg(primary_ndev); in wl_cfg80211_net_attach() local
15953 if (!cfg) { in wl_cfg80211_net_attach()
15965 if (wl_cfg80211_register_static_if(cfg, ntype, in wl_cfg80211_net_attach()
15968 wl_cfg80211_unregister_static_if(cfg); in wl_cfg80211_net_attach()
15979 struct bcm_cfg80211 *cfg; in wl_cfg80211_attach() local
16012 cfg = wiphy_priv(wdev->wiphy); in wl_cfg80211_attach()
16013 cfg->wdev = wdev; in wl_cfg80211_attach()
16014 cfg->pub = context; in wl_cfg80211_attach()
16015 cfg->osh = dhd->osh; in wl_cfg80211_attach()
16016 INIT_LIST_HEAD(&cfg->net_list); in wl_cfg80211_attach()
16018 INIT_LIST_HEAD(&cfg->wbtext_bssid_list); in wl_cfg80211_attach()
16020 INIT_LIST_HEAD(&cfg->vndr_oui_list); in wl_cfg80211_attach()
16021 spin_lock_init(&cfg->vndr_oui_sync); in wl_cfg80211_attach()
16022 spin_lock_init(&cfg->net_list_sync); in wl_cfg80211_attach()
16026 cfg->state_notifier = wl_notifier_change_state; in wl_cfg80211_attach()
16027 err = wl_alloc_netinfo(cfg, ndev, wdev, WL_IF_TYPE_STA, PM_ENABLE, bssidx, ifidx); in wl_cfg80211_attach()
16032 err = wl_init_priv(cfg); in wl_cfg80211_attach()
16038 err = wl_setup_rfkill(cfg, TRUE); in wl_cfg80211_attach()
16055 cfg->btcoex_info = wl_cfg80211_btcoex_init(cfg->wdev->netdev); in wl_cfg80211_attach()
16056 if (!cfg->btcoex_info) in wl_cfg80211_attach()
16061 cfg->random_mac_enabled = FALSE; in wl_cfg80211_attach()
16069 err = wl_cfg80211_attach_p2p(cfg); in wl_cfg80211_attach()
16076 init_timer_compat(&cfg->scan_supp_timer, wl_cfg80211_scan_supp_timerfunc, cfg); in wl_cfg80211_attach()
16077 INIT_WORK(&cfg->wlan_work, wl_cfg80211_work_handler); in wl_cfg80211_attach()
16080 INIT_DELAYED_WORK(&cfg->pm_enable_work, wl_cfg80211_work_handler); in wl_cfg80211_attach()
16081 INIT_DELAYED_WORK(&cfg->loc.work, wl_cfgscan_listen_complete_work); in wl_cfg80211_attach()
16082 INIT_DELAYED_WORK(&cfg->ap_work, wl_cfg80211_ap_timeout_work); in wl_cfg80211_attach()
16083 mutex_init(&cfg->pm_sync); in wl_cfg80211_attach()
16085 err = wl_cfgnan_attach(cfg); in wl_cfg80211_attach()
16091 cfg->rssi_sum_report = FALSE; in wl_cfg80211_attach()
16093 wl_bad_ap_mngr_init(cfg); in wl_cfg80211_attach()
16097 wl_attach_ap_stainfo(cfg); in wl_cfg80211_attach()
16103 wl_cfg80211_detach(cfg); in wl_cfg80211_attach()
16107 void wl_cfg80211_detach(struct bcm_cfg80211 *cfg) in wl_cfg80211_detach() argument
16110 if (!cfg) { in wl_cfg80211_detach()
16116 wl_add_remove_pm_enable_work(cfg, WL_PM_WORKQ_DEL); in wl_cfg80211_detach()
16120 cfg->btcoex_info = NULL; in wl_cfg80211_detach()
16123 wl_setup_rfkill(cfg, FALSE); in wl_cfg80211_detach()
16126 wl_deinit_wps_reauth_sm(cfg); in wl_cfg80211_detach()
16129 del_timer_sync(&cfg->scan_timeout); in wl_cfg80211_detach()
16131 del_timer_sync(&cfg->roam_timeout); in wl_cfg80211_detach()
16135 wl_cfg80211_unregister_static_if(cfg); in wl_cfg80211_detach()
16138 wl_cfg80211_detach_p2p(cfg); in wl_cfg80211_detach()
16141 wl_bad_ap_mngr_deinit(cfg); in wl_cfg80211_detach()
16145 wl_detach_ap_stainfo(cfg); in wl_cfg80211_detach()
16149 wl_cfgnan_detach(cfg); in wl_cfg80211_detach()
16151 wl_cfg80211_ibss_vsie_free(cfg); in wl_cfg80211_detach()
16152 wl_dealloc_netinfo_by_wdev(cfg, cfg->wdev); in wl_cfg80211_detach()
16154 wl_deinit_priv(cfg); in wl_cfg80211_detach()
16157 wl_free_rssi_cache(&cfg->g_rssi_cache_ctrl); in wl_cfg80211_detach()
16158 wl_free_rssi_cache(&cfg->g_connected_rssi_cache_ctrl); in wl_cfg80211_detach()
16161 wl_release_bss_cache_ctrl(&cfg->g_bss_cache_ctrl); in wl_cfg80211_detach()
16163 wl_free_wdev(cfg); in wl_cfg80211_detach()
16196 static void wl_print_event_data(struct bcm_cfg80211 *cfg, in wl_print_event_data() argument
16232 struct bcm_cfg80211 *cfg = NULL; in wl_event_handler() local
16237 BCM_SET_CONTAINER_OF(cfg, work_data, struct bcm_cfg80211, event_work); in wl_event_handler()
16238 LOG_TS(cfg, wl_evt_hdlr_entry); in wl_event_handler()
16239 DHD_EVENT_WAKE_LOCK(cfg->pub); in wl_event_handler()
16240 while ((e = wl_deq_event(cfg))) { in wl_event_handler()
16246 LOG_TS(cfg, wl_evt_deq); in wl_event_handler()
16248 LOG_TS(cfg, scan_deq); in wl_event_handler()
16251 wl_print_event_data(cfg, e->etype, &e->emsg); in wl_event_handler()
16259 mutex_lock(&cfg->if_sync); in wl_event_handler()
16260 if (!(wdev = wl_get_wdev_by_fw_idx(cfg, in wl_event_handler()
16266 } else if (e->etype < WLC_E_LAST && cfg->evt_handler[e->etype]) { in wl_event_handler()
16268 dhd_pub_t *dhd = (struct dhd_pub *)(cfg->pub); in wl_event_handler()
16277 WL_SET_EIDX_IN_PROGRESS(cfg, e->id, e->etype); in wl_event_handler()
16278 cfg->evt_handler[e->etype](cfg, wdev_to_cfgdev(wdev), in wl_event_handler()
16280 WL_CLR_EIDX_STATES(cfg); in wl_event_handler()
16282 LOG_TS(cfg, scan_hdlr_cmplt); in wl_event_handler()
16288 mutex_unlock(&cfg->if_sync); in wl_event_handler()
16290 wl_put_event(cfg, e); in wl_event_handler()
16292 LOG_TS(cfg, scan_cmplt); in wl_event_handler()
16294 LOG_TS(cfg, wl_evt_hdlr_exit); in wl_event_handler()
16296 DHD_EVENT_WAKE_UNLOCK(cfg->pub); in wl_event_handler()
16304 wl_cfg80211_handle_critical_events(struct bcm_cfg80211 *cfg, in wl_cfg80211_handle_critical_events() argument
16334 struct bcm_cfg80211 *cfg = wl_get_cfg(ndev); in wl_cfg80211_event() local
16339 if ((cfg == NULL) || (cfg->p2p_supported && cfg->p2p == NULL)) { in wl_cfg80211_event()
16345 if (cfg->event_workq == NULL) { in wl_cfg80211_event()
16352 if (!cfg->event_workq_init) { in wl_cfg80211_event()
16363 netinfo = wl_get_netinfo_by_fw_idx(cfg, e->bsscfgidx, e->ifidx); in wl_cfg80211_event()
16374 if (wl_cfg80211_handle_critical_events(cfg, netinfo->wdev, e) == BCME_OK) { in wl_cfg80211_event()
16385 if (likely(!wl_enq_event(cfg, ndev, event_type, e, data))) { in wl_cfg80211_event()
16388 queue_work(cfg->event_workq, &cfg->event_work); in wl_cfg80211_event()
16392 schedule_work(&cfg->event_work); in wl_cfg80211_event()
16399 LOG_TS(cfg, scan_enq); in wl_cfg80211_event()
16401 status, work_busy(&cfg->event_work))); in wl_cfg80211_event()
16405 static void wl_init_eq(struct bcm_cfg80211 *cfg) in wl_init_eq() argument
16407 wl_init_eq_lock(cfg); in wl_init_eq()
16408 INIT_LIST_HEAD(&cfg->eq_list); in wl_init_eq()
16411 static void wl_flush_eq(struct bcm_cfg80211 *cfg) in wl_flush_eq() argument
16416 flags = wl_lock_eq(cfg); in wl_flush_eq()
16417 while (!list_empty_careful(&cfg->eq_list)) { in wl_flush_eq()
16418 BCM_SET_LIST_FIRST_ENTRY(e, &cfg->eq_list, struct wl_event_q, eq_list); in wl_flush_eq()
16420 MFREE(cfg->osh, e, e->datalen + sizeof(struct wl_event_q)); in wl_flush_eq()
16422 wl_unlock_eq(cfg, flags); in wl_flush_eq()
16429 static struct wl_event_q *wl_deq_event(struct bcm_cfg80211 *cfg) in wl_deq_event() argument
16434 flags = wl_lock_eq(cfg); in wl_deq_event()
16435 if (likely(!list_empty(&cfg->eq_list))) { in wl_deq_event()
16436 BCM_SET_LIST_FIRST_ENTRY(e, &cfg->eq_list, struct wl_event_q, eq_list); in wl_deq_event()
16439 wl_unlock_eq(cfg, flags); in wl_deq_event()
16449 wl_enq_event(struct bcm_cfg80211 *cfg, struct net_device *ndev, u32 event, in wl_enq_event() argument
16462 e = (struct wl_event_q *)MALLOCZ(cfg->osh, evtq_size); in wl_enq_event()
16472 e->id = cfg->eidx.enqd++; in wl_enq_event()
16473 flags = wl_lock_eq(cfg); in wl_enq_event()
16474 list_add_tail(&e->eq_list, &cfg->eq_list); in wl_enq_event()
16475 wl_unlock_eq(cfg, flags); in wl_enq_event()
16480 static void wl_put_event(struct bcm_cfg80211 *cfg, struct wl_event_q *e) in wl_put_event() argument
16482 MFREE(cfg->osh, e, e->datalen + sizeof(struct wl_event_q)); in wl_put_event()
16485 static s32 wl_config_infra(struct bcm_cfg80211 *cfg, struct net_device *ndev, u16 iftype) in wl_config_infra() argument
16557 struct bcm_cfg80211 *cfg, in wl_cfg80211_apply_eventbuffer() argument
16571 mutex_lock(&cfg->event_sync); in wl_cfg80211_apply_eventbuffer()
16616 mutex_unlock(&cfg->event_sync); in wl_cfg80211_apply_eventbuffer()
16625 struct bcm_cfg80211 *cfg; in wl_add_remove_eventmsg() local
16633 cfg = wl_get_cfg(ndev); in wl_add_remove_eventmsg()
16634 if (!cfg) in wl_add_remove_eventmsg()
16637 mutex_lock(&cfg->event_sync); in wl_add_remove_eventmsg()
16680 mutex_unlock(&cfg->event_sync); in wl_add_remove_eventmsg()
16733 static int wl_construct_reginfo(struct bcm_cfg80211 *cfg, s32 bw_cap) in wl_construct_reginfo() argument
16735 struct net_device *dev = bcmcfg_to_prmry_ndev(cfg); in wl_construct_reginfo()
16747 list = MALLOCZ(cfg->osh, LOCAL_BUF_LEN); in wl_construct_reginfo()
16754 0, list, LOCAL_BUF_LEN, 0, &cfg->ioctl_buf_sync); in wl_construct_reginfo()
16758 0, list, LOCAL_BUF_LEN, 0, &cfg->ioctl_buf_sync); in wl_construct_reginfo()
16761 MFREE(cfg->osh, list, LOCAL_BUF_LEN); in wl_construct_reginfo()
16768 MFREE(cfg->osh, list, LOCAL_BUF_LEN); in wl_construct_reginfo()
16835 if (!dhd_conf_match_channel(cfg->pub, channel)) in wl_construct_reginfo()
16890 MFREE(cfg->osh, list, LOCAL_BUF_LEN); in wl_construct_reginfo()
16896 static void wl_is_6g_supported(struct bcm_cfg80211 *cfg, u32 *bandlist, u8 nbands) in wl_is_6g_supported() argument
16906 cfg->band_6g_supported = true; in wl_is_6g_supported()
16912 static s32 __wl_update_wiphybands(struct bcm_cfg80211 *cfg, bool notify) in __wl_update_wiphybands() argument
16915 struct net_device *dev = bcmcfg_to_prmry_ndev(cfg); in __wl_update_wiphybands()
17013 wl_is_6g_supported(cfg, bandlist, bandlist[0]); in __wl_update_wiphybands()
17016 err = wl_construct_reginfo(cfg, bw_cap); in __wl_update_wiphybands()
17023 wiphy = bcmcfg_to_wiphy(cfg); in __wl_update_wiphybands()
17192 s32 wl_update_wiphybands(struct bcm_cfg80211 *cfg, bool notify) in wl_update_wiphybands() argument
17196 mutex_lock(&cfg->usr_sync); in wl_update_wiphybands()
17197 err = __wl_update_wiphybands(cfg, notify); in wl_update_wiphybands()
17198 mutex_unlock(&cfg->usr_sync); in wl_update_wiphybands()
17203 static s32 __wl_cfg80211_up(struct bcm_cfg80211 *cfg) in __wl_cfg80211_up() argument
17209 struct net_device *ndev = bcmcfg_to_prmry_ndev(cfg); in __wl_cfg80211_up()
17211 dhd_pub_t *dhd = (dhd_pub_t *)(cfg->pub); in __wl_cfg80211_up()
17224 err = wl_create_event_handler(cfg); in __wl_cfg80211_up()
17229 wl_init_event_handler(cfg); in __wl_cfg80211_up()
17234 cfg->vif_macaddr_mask = 0x8000; in __wl_cfg80211_up()
17237 err = dhd_config_dongle(cfg); in __wl_cfg80211_up()
17252 bcmcfg_to_prmry_ndev(cfg)->perm_addr, ETHER_ADDR_LEN); in __wl_cfg80211_up()
17258 netinfo = wl_get_netinfo_by_wdev(cfg, wdev); in __wl_cfg80211_up()
17279 err = wl_config_infra(cfg, ndev, wl_iftype); in __wl_cfg80211_up()
17289 err = wl_init_scan(cfg); in __wl_cfg80211_up()
17294 err = __wl_update_wiphybands(cfg, true); in __wl_cfg80211_up()
17304 cfg->wlc_ver.wlc_ver_major = dhd->wlc_ver_major; in __wl_cfg80211_up()
17305 cfg->wlc_ver.wlc_ver_minor = dhd->wlc_ver_minor; in __wl_cfg80211_up()
17311 cfg->scan_params_v2 = true; in __wl_cfg80211_up()
17321 if (((cfg->wlc_ver.wlc_ver_major == MIN_JOINEXT_V1_BR1_FW_MAJOR) && in __wl_cfg80211_up()
17322 (cfg->wlc_ver.wlc_ver_minor == MIN_JOINEXT_V1_BR1_FW_MINOR)) || in __wl_cfg80211_up()
17323 ((cfg->wlc_ver.wlc_ver_major == MIN_JOINEXT_V1_BR2_FW_MAJOR) && in __wl_cfg80211_up()
17324 (cfg->wlc_ver.wlc_ver_minor >= MIN_JOINEXT_V1_BR2_FW_MINOR)) || in __wl_cfg80211_up()
17325 (cfg->wlc_ver.wlc_ver_major >= MIN_JOINEXT_V1_FW_MAJOR)) { in __wl_cfg80211_up()
17326 cfg->join_iovar_ver = WL_EXTJOIN_VERSION_V1; in __wl_cfg80211_up()
17327 WL_INFORM_MEM(("join_ver:%d\n", cfg->join_iovar_ver)); in __wl_cfg80211_up()
17331 del_timer_sync(&cfg->roam_timeout); in __wl_cfg80211_up()
17334 err = dhd_monitor_init(cfg->pub); in __wl_cfg80211_up()
17352 cfg->wes_mode = OFF; in __wl_cfg80211_up()
17353 cfg->ncho_mode = OFF; in __wl_cfg80211_up()
17354 cfg->ncho_band = WLC_BAND_AUTO; in __wl_cfg80211_up()
17362 wl_cfg80211_wbtext_clear_bssid_list(cfg); in __wl_cfg80211_up()
17369 cfg->tdls_supported = true; in __wl_cfg80211_up()
17374 cfg->iface_data.policy = CUSTOM_IF_MGMT_POLICY; in __wl_cfg80211_up()
17376 cfg->iface_data.policy = WL_IF_POLICY_DEFAULT; in __wl_cfg80211_up()
17383 cfg->conc_disc = WL_NANP2P_CONC_SUPPORT; in __wl_cfg80211_up()
17385 cfg->nan_p2p_supported = true; in __wl_cfg80211_up()
17391 cfg->wifi_tx_power_mode = WIFI_POWER_SCENARIO_INVALID; in __wl_cfg80211_up()
17396 init_timer_compat(&cfg->scan_supp_timer, wl_cfg80211_scan_supp_timerfunc, cfg); in __wl_cfg80211_up()
17397 INIT_WORK(&cfg->wlan_work, wl_cfg80211_work_handler); in __wl_cfg80211_up()
17400 INIT_DELAYED_WORK(&cfg->pm_enable_work, wl_cfg80211_work_handler); in __wl_cfg80211_up()
17401 wl_set_drv_status(cfg, READY, ndev); in __wl_cfg80211_up()
17411 struct bcm_cfg80211 *cfg; in __wl_cfg80211_up_resume() local
17424 cfg = wl_get_cfg(ndev); in __wl_cfg80211_up_resume()
17426 if (!cfg || !wdev) in __wl_cfg80211_up_resume()
17430 err = dhd_config_dongle(cfg); in __wl_cfg80211_up_resume()
17448 err = wl_config_infra(cfg, ndev, wl_iftype); in __wl_cfg80211_up_resume()
17477 static s32 __wl_cfg80211_down(struct bcm_cfg80211 *cfg) in __wl_cfg80211_down() argument
17481 struct net_device *ndev = bcmcfg_to_prmry_ndev(cfg); in __wl_cfg80211_down()
17485 struct net_device *p2p_net = cfg->p2p_net; in __wl_cfg80211_down()
17488 dhd_pub_t *dhd = (dhd_pub_t *)(cfg->pub); in __wl_cfg80211_down()
17493 if (!wl_get_drv_status(cfg, READY, ndev)) { in __wl_cfg80211_down()
17504 wl_vndr_ies_clear_vendor_oui_list(cfg); in __wl_cfg80211_down()
17507 CLR_TS(cfg, scan_start); in __wl_cfg80211_down()
17508 CLR_TS(cfg, scan_cmplt); in __wl_cfg80211_down()
17509 CLR_TS(cfg, conn_start); in __wl_cfg80211_down()
17510 CLR_TS(cfg, conn_cmplt); in __wl_cfg80211_down()
17511 CLR_TS(cfg, authorize_start); in __wl_cfg80211_down()
17512 CLR_TS(cfg, authorize_cmplt); in __wl_cfg80211_down()
17515 wl_add_remove_pm_enable_work(cfg, WL_PM_WORKQ_DEL); in __wl_cfg80211_down()
17517 if (cfg->loc.in_progress) { in __wl_cfg80211_down()
17519 if (delayed_work_pending(&cfg->loc.work)) { in __wl_cfg80211_down()
17520 cancel_delayed_work_sync(&cfg->loc.work); in __wl_cfg80211_down()
17522 wl_cfgscan_notify_listen_complete(cfg); in __wl_cfg80211_down()
17525 if (delayed_work_pending(&cfg->ap_work)) { in __wl_cfg80211_down()
17526 cancel_delayed_work_sync(&cfg->ap_work); in __wl_cfg80211_down()
17529 if (cfg->p2p_supported) { in __wl_cfg80211_down()
17530 wl_clr_p2p_status(cfg, GO_NEG_PHASE); in __wl_cfg80211_down()
17533 if (wl_cfgp2p_vif_created(cfg)) { in __wl_cfg80211_down()
17539 if (enabled && cfg->wlfc_on && dhd->op_mode != DHD_FLAG_HOSTAP_MODE && in __wl_cfg80211_down()
17542 cfg->wlfc_on = false; in __wl_cfg80211_down()
17551 if (cfg->scan_suppressed) in __wl_cfg80211_down()
17553 del_timer_sync(&cfg->scan_supp_timer); in __wl_cfg80211_down()
17554 cancel_work_sync(&cfg->wlan_work); in __wl_cfg80211_down()
17558 cfg->wifi_tx_power_mode = WIFI_POWER_SCENARIO_INVALID; in __wl_cfg80211_down()
17565 wl_cfg80211_cleanup_virtual_ifaces(cfg, false); in __wl_cfg80211_down()
17568 cfg->vif_macaddr_mask = 0; in __wl_cfg80211_down()
17576 if (wl_cfg80211_bss_up(cfg, ndev, 0, 0) < 0) in __wl_cfg80211_down()
17581 wl_cfg80211_clear_security(cfg); in __wl_cfg80211_down()
17585 for_each_ndev(cfg, iter, next) { in __wl_cfg80211_down()
17588 wl_set_drv_status(cfg, SCAN_ABORTING, iter->ndev); in __wl_cfg80211_down()
17591 wl_cfg80211_sdo_deinit(cfg); in __wl_cfg80211_down()
17595 wl_cfg80211_p2plo_deinit(cfg); in __wl_cfg80211_down()
17599 wl_cfgscan_cancel_scan(cfg); in __wl_cfg80211_down()
17601 for_each_ndev(cfg, iter, next) { in __wl_cfg80211_down()
17608 wl_get_drv_status(cfg, CONNECTING, ndev), in __wl_cfg80211_down()
17609 wl_get_drv_status(cfg, CONNECTED, ndev), in __wl_cfg80211_down()
17610 wl_get_drv_status(cfg, DISCONNECTING, ndev), in __wl_cfg80211_down()
17611 wl_get_drv_status(cfg, NESTED_CONNECT, ndev))); in __wl_cfg80211_down()
17613 if (wl_get_drv_status(cfg, CONNECTED, iter->ndev)) { in __wl_cfg80211_down()
17615 wl_clr_drv_status(cfg, AUTHORIZED, iter->ndev); in __wl_cfg80211_down()
17619 wl_get_drv_status(cfg, CONNECTING, iter->ndev)) { in __wl_cfg80211_down()
17621 u8 *latest_bssid = wl_read_prof(cfg, ndev, WL_PROF_LATEST_BSSID); in __wl_cfg80211_down()
17622 struct wiphy *wiphy = bcmcfg_to_wiphy(cfg); in __wl_cfg80211_down()
17640 wl_clr_drv_status(cfg, READY, iter->ndev); in __wl_cfg80211_down()
17641 wl_clr_drv_status(cfg, SCANNING, iter->ndev); in __wl_cfg80211_down()
17642 wl_clr_drv_status(cfg, SCAN_ABORTING, iter->ndev); in __wl_cfg80211_down()
17643 wl_clr_drv_status(cfg, CONNECTING, iter->ndev); in __wl_cfg80211_down()
17644 wl_clr_drv_status(cfg, CONNECTED, iter->ndev); in __wl_cfg80211_down()
17645 wl_clr_drv_status(cfg, DISCONNECTING, iter->ndev); in __wl_cfg80211_down()
17646 wl_clr_drv_status(cfg, AP_CREATED, iter->ndev); in __wl_cfg80211_down()
17647 wl_clr_drv_status(cfg, AP_CREATING, iter->ndev); in __wl_cfg80211_down()
17648 wl_clr_drv_status(cfg, NESTED_CONNECT, iter->ndev); in __wl_cfg80211_down()
17649 wl_clr_drv_status(cfg, CFG80211_CONNECT, iter->ndev); in __wl_cfg80211_down()
17651 bcmcfg_to_prmry_ndev(cfg)->ieee80211_ptr->iftype = in __wl_cfg80211_down()
17667 mutex_unlock(&cfg->usr_sync); in __wl_cfg80211_down()
17668 wl_destroy_event_handler(cfg); in __wl_cfg80211_down()
17669 mutex_lock(&cfg->usr_sync); in __wl_cfg80211_down()
17674 wl_flush_eq(cfg); in __wl_cfg80211_down()
17675 wl_link_down(cfg); in __wl_cfg80211_down()
17676 if (cfg->p2p_supported) { in __wl_cfg80211_down()
17677 if (timer_pending(&cfg->p2p->listen_timer)) in __wl_cfg80211_down()
17678 del_timer_sync(&cfg->p2p->listen_timer); in __wl_cfg80211_down()
17679 wl_cfgp2p_down(cfg); in __wl_cfg80211_down()
17682 del_timer_sync(&cfg->scan_timeout); in __wl_cfg80211_down()
17684 wl_cfg80211_clear_mgmt_vndr_ies(cfg); in __wl_cfg80211_down()
17687 DHD_OS_SCAN_WAKE_UNLOCK((dhd_pub_t *)(cfg->pub)); in __wl_cfg80211_down()
17692 bcm_cfg80211_del_ibss_if(cfg->wdev->wiphy, cfg->ibss_cfgdev); in __wl_cfg80211_down()
17697 if (cfg->wl11u) { in __wl_cfg80211_down()
17698 cfg->wl11u = FALSE; in __wl_cfg80211_down()
17708 cfg->disable_roam_event = false; in __wl_cfg80211_down()
17709 cfg->scan_params_v2 = false; in __wl_cfg80211_down()
17711 DNGL_FUNC(dhd_cfg80211_down, (cfg)); in __wl_cfg80211_down()
17715 wl_probe_wdev_all(cfg); in __wl_cfg80211_down()
17723 struct bcm_cfg80211 *cfg; in wl_cfg80211_up() local
17738 cfg = wl_get_cfg(net); in wl_cfg80211_up()
17740 if ((err = wldev_ioctl_get(bcmcfg_to_prmry_ndev(cfg), WLC_GET_VERSION, &val, in wl_cfg80211_up()
17757 mutex_lock(&cfg->usr_sync); in wl_cfg80211_up()
17759 dhd = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_up()
17761 err = wl_cfg80211_attach_post(bcmcfg_to_prmry_ndev(cfg)); in wl_cfg80211_up()
17763 mutex_unlock(&cfg->usr_sync); in wl_cfg80211_up()
17768 cfg->wdev->wiphy->features |= NL80211_FEATURE_USERSPACE_MPM; in wl_cfg80211_up()
17777 cfg->wdev->wiphy->features |= NL80211_FEATURE_FW_4WAY_HANDSHAKE; in wl_cfg80211_up()
17781 err = __wl_cfg80211_up(cfg); in wl_cfg80211_up()
17786 if (init_roam_cache(cfg, ioctl_version) == 0) { in wl_cfg80211_up()
17788 cfg->rcc_enabled = true; in wl_cfg80211_up()
17817 sizeof(iovbuf), &cfg->ioctl_buf_sync); in wl_cfg80211_up()
17831 mutex_unlock(&cfg->usr_sync); in wl_cfg80211_up()
17834 bcm_cfg80211_add_ibss_if(cfg->wdev->wiphy, IBSS_IF_NAME); in wl_cfg80211_up()
17836 cfg->spmk_info_list->pmkids.count = 0; in wl_cfg80211_up()
17843 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_hang() local
17851 if (!cfg) { in wl_cfg80211_hang()
17855 RETURN_EIO_IF_NOT_UP(cfg); in wl_cfg80211_hang()
17858 dhd = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_hang()
17888 wl_add_remove_pm_enable_work(cfg, WL_PM_WORKQ_DEL); in wl_cfg80211_hang()
17911 wl_free_rssi_cache(&cfg->g_rssi_cache_ctrl); in wl_cfg80211_hang()
17914 wl_free_bss_cache(&cfg->g_bss_cache_ctrl); in wl_cfg80211_hang()
17916 if (cfg != NULL) { in wl_cfg80211_hang()
17918 wl_link_down(cfg); in wl_cfg80211_hang()
17925 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_down() local
17934 if (cfg && (cfg == wl_cfg80211_get_bcmcfg())) { in wl_cfg80211_down()
17936 mutex_lock(&cfg->if_sync); in wl_cfg80211_down()
17937 wl_cfgnan_check_nan_disable_pending(cfg, true, false); in wl_cfg80211_down()
17938 mutex_unlock(&cfg->if_sync); in wl_cfg80211_down()
17942 dhdp = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_down()
17947 mutex_lock(&cfg->usr_sync); in wl_cfg80211_down()
17949 wl_free_rssi_cache(&cfg->g_rssi_cache_ctrl); in wl_cfg80211_down()
17952 wl_free_bss_cache(&cfg->g_bss_cache_ctrl); in wl_cfg80211_down()
17954 err = __wl_cfg80211_down(cfg); in wl_cfg80211_down()
17955 mutex_unlock(&cfg->usr_sync); in wl_cfg80211_down()
17964 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_sta_ifdown() local
17968 if (cfg) { in wl_cfg80211_sta_ifdown()
17970 wl_cfgscan_cancel_scan(cfg); in wl_cfg80211_sta_ifdown()
17973 wl_get_drv_status(cfg, CONNECTED, dev)) { in wl_cfg80211_sta_ifdown()
17980 void *wl_read_prof(struct bcm_cfg80211 *cfg, struct net_device *ndev, s32 item) in wl_read_prof() argument
17984 struct wl_profile *profile = wl_get_profile_by_netdev(cfg, ndev); in wl_read_prof()
17988 WL_CFG_DRV_LOCK(&cfg->cfgdrv_lock, flags); in wl_read_prof()
18009 WL_CFG_DRV_UNLOCK(&cfg->cfgdrv_lock, flags); in wl_read_prof()
18016 wl_update_prof(struct bcm_cfg80211 *cfg, struct net_device *ndev, in wl_update_prof() argument
18022 struct wl_profile *profile = wl_get_profile_by_netdev(cfg, ndev); in wl_update_prof()
18026 WL_CFG_DRV_LOCK(&cfg->cfgdrv_lock, flags); in wl_update_prof()
18069 WL_CFG_DRV_UNLOCK(&cfg->cfgdrv_lock, flags); in wl_update_prof()
18088 static __used bool wl_is_ibssstarter(struct bcm_cfg80211 *cfg) in wl_is_ibssstarter() argument
18090 return cfg->ibss_starter; in wl_is_ibssstarter()
18093 static __used s32 wl_add_ie(struct bcm_cfg80211 *cfg, u8 t, u8 l, u8 *v) in wl_add_ie() argument
18095 struct wl_ie *ie = wl_to_ie(cfg); in wl_add_ie()
18110 static void wl_link_up(struct bcm_cfg80211 *cfg) in wl_link_up() argument
18112 cfg->link_up = true; in wl_link_up()
18115 static void wl_link_down(struct bcm_cfg80211 *cfg) in wl_link_down() argument
18117 struct wl_connect_info *conn_info = wl_to_conn(cfg); in wl_link_down()
18120 cfg->link_up = false; in wl_link_down()
18127 static unsigned long wl_lock_eq(struct bcm_cfg80211 *cfg) in wl_lock_eq() argument
18131 WL_CFG_EQ_LOCK(&cfg->eq_lock, flags); in wl_lock_eq()
18135 static void wl_unlock_eq(struct bcm_cfg80211 *cfg, unsigned long flags) in wl_unlock_eq() argument
18137 WL_CFG_EQ_UNLOCK(&cfg->eq_lock, flags); in wl_unlock_eq()
18140 static void wl_init_eq_lock(struct bcm_cfg80211 *cfg) in wl_init_eq_lock() argument
18142 spin_lock_init(&cfg->eq_lock); in wl_init_eq_lock()
18156 struct bcm_cfg80211 *cfg = wl_get_cfg(net); in wl_cfg80211_get_p2p_dev_addr() local
18158 if (!cfg->p2p) in wl_cfg80211_get_p2p_dev_addr()
18160 if (!p2p_is_on(cfg)) { in wl_cfg80211_get_p2p_dev_addr()
18161 get_primary_mac(cfg, &primary_mac); in wl_cfg80211_get_p2p_dev_addr()
18164 memcpy(p2pdev_addr->octet, wl_to_p2p_bss_macaddr(cfg, P2PAPI_BSSCFG_DEVICE).octet, in wl_cfg80211_get_p2p_dev_addr()
18172 struct bcm_cfg80211 *cfg = wl_get_cfg(net); in wl_cfg80211_set_p2p_noa() local
18174 return wl_cfgp2p_set_p2p_noa(cfg, net, buf, len); in wl_cfg80211_set_p2p_noa()
18179 struct bcm_cfg80211 *cfg = wl_get_cfg(net); in wl_cfg80211_get_p2p_noa() local
18181 return wl_cfgp2p_get_p2p_noa(cfg, net, buf, len); in wl_cfg80211_get_p2p_noa()
18186 struct bcm_cfg80211 *cfg = wl_get_cfg(net); in wl_cfg80211_set_p2p_ps() local
18188 return wl_cfgp2p_set_p2p_ps(cfg, net, buf, len); in wl_cfg80211_set_p2p_ps()
18193 struct bcm_cfg80211 *cfg = wl_get_cfg(net); in wl_cfg80211_set_p2p_ecsa() local
18195 return wl_cfgp2p_set_p2p_ecsa(cfg, net, buf, len); in wl_cfg80211_set_p2p_ecsa()
18200 struct bcm_cfg80211 *cfg = wl_get_cfg(net); in wl_cfg80211_increase_p2p_bw() local
18202 return wl_cfgp2p_increase_p2p_bw(cfg, net, buf, len); in wl_cfg80211_increase_p2p_bw()
18233 wl_notify_device_discovery(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev, in wl_notify_device_discovery() argument
18254 ndev = cfgdev_to_wlc_ndev(cfgdev, cfg); in wl_notify_device_discovery()
18256 mutex_lock(&cfg->usr_sync); in wl_notify_device_discovery()
18295 mutex_unlock(&cfg->usr_sync); in wl_notify_device_discovery()
18300 wl_cfg80211_sdo_init(struct bcm_cfg80211 *cfg) in wl_cfg80211_sdo_init() argument
18302 if (cfg->sdo) { in wl_cfg80211_sdo_init()
18307 cfg->sdo = (sd_offload_t *)MALLOCZ(cfg->osh, sizeof(sd_offload_t)); in wl_cfg80211_sdo_init()
18308 if (!cfg->sdo) { in wl_cfg80211_sdo_init()
18317 wl_cfg80211_sdo_deinit(struct bcm_cfg80211 *cfg) in wl_cfg80211_sdo_deinit() argument
18322 if (!cfg || !cfg->p2p) { in wl_cfg80211_sdo_deinit()
18324 cfg, cfg ? cfg->p2p : 0)); in wl_cfg80211_sdo_deinit()
18328 bssidx = wl_to_p2p_bss_bssidx(cfg, P2PAPI_BSSCFG_DEVICE); in wl_cfg80211_sdo_deinit()
18329 if (!cfg->sdo) { in wl_cfg80211_sdo_deinit()
18333 if (cfg->sdo->dd_state && in wl_cfg80211_sdo_deinit()
18334 (ret = wldev_iovar_setbuf_bsscfg(bcmcfg_to_prmry_ndev(cfg), in wl_cfg80211_sdo_deinit()
18336 cfg->ioctl_buf, WLC_IOCTL_SMLEN, bssidx, &cfg->ioctl_buf_sync)) < 0) { in wl_cfg80211_sdo_deinit()
18339 MFREE(cfg->osh, cfg->sdo, sizeof(sd_offload_t)); in wl_cfg80211_sdo_deinit()
18347 wl_cfg80211_resume_sdo(struct net_device *dev, struct bcm_cfg80211 *cfg) in wl_cfg80211_resume_sdo() argument
18351 s32 bssidx = wl_to_p2p_bss_bssidx(cfg, P2PAPI_BSSCFG_DEVICE); in wl_cfg80211_resume_sdo()
18355 if (!cfg->sdo) { in wl_cfg80211_resume_sdo()
18360 dev = bcmcfg_to_prmry_ndev(cfg); in wl_cfg80211_resume_sdo()
18366 if (cfg->sdo->dd_state == WL_DD_STATE_SEARCH) { in wl_cfg80211_resume_sdo()
18368 cfg->ioctl_buf, WLC_IOCTL_SMLEN, bssidx, &cfg->ioctl_buf_sync)) < 0) { in wl_cfg80211_resume_sdo()
18371 } else if (cfg->sdo->dd_state == WL_DD_STATE_LISTEN) { in wl_cfg80211_resume_sdo()
18375 sd_listen.interval = cfg->sdo->sd_listen.interval; in wl_cfg80211_resume_sdo()
18376 sd_listen.period = cfg->sdo->sd_listen.period; in wl_cfg80211_resume_sdo()
18379 sizeof(wl_sd_listen_t), cfg->ioctl_buf, WLC_IOCTL_SMLEN, in wl_cfg80211_resume_sdo()
18380 bssidx, &cfg->ioctl_buf_sync)) < 0) { in wl_cfg80211_resume_sdo()
18396 s32 wl_cfg80211_pause_sdo(struct net_device *dev, struct bcm_cfg80211 *cfg) in wl_cfg80211_pause_sdo() argument
18400 s32 bssidx = wl_to_p2p_bss_bssidx(cfg, P2PAPI_BSSCFG_DEVICE); in wl_cfg80211_pause_sdo()
18405 if (!cfg->sdo) { in wl_cfg80211_pause_sdo()
18411 dev = bcmcfg_to_prmry_ndev(cfg); in wl_cfg80211_pause_sdo()
18415 cfg->ioctl_buf, WLC_IOCTL_SMLEN, bssidx, &cfg->ioctl_buf_sync)) < 0) { in wl_cfg80211_pause_sdo()
18428 wl_svc_resp_handler(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev, in wl_svc_resp_handler() argument
18444 if (!cfg->sdo) { in wl_svc_resp_handler()
18449 if (!(cfg->sdo->sd_state & WL_SD_SEARCH_SVC)) { in wl_svc_resp_handler()
18457 ndev = cfgdev_to_wlc_ndev(cfgdev, cfg); in wl_svc_resp_handler()
18459 mutex_lock(&cfg->usr_sync); in wl_svc_resp_handler()
18499 mutex_unlock(&cfg->usr_sync); in wl_svc_resp_handler()
18532 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_sd_handle_sd_req() local
18540 if ((bssidx = wl_get_bssidx_by_wdev(cfg, dev->ieee80211_ptr)) < 0) { in wl_sd_handle_sd_req()
18555 sdreq = (wl_sd_qr_t *)MALLOCZ(cfg->osh, tot_len); in wl_sd_handle_sd_req()
18596 if ((ret = wl_cfgp2p_enable_discovery(cfg, dev, NULL, 0)) < 0) { in wl_sd_handle_sd_req()
18602 tot_len, cfg->ioctl_buf, WLC_IOCTL_MAXLEN, in wl_sd_handle_sd_req()
18603 bssidx, &cfg->ioctl_buf_sync)) < 0) { in wl_sd_handle_sd_req()
18608 cfg->sdo->sd_state |= WL_SD_SEARCH_SVC; in wl_sd_handle_sd_req()
18611 MFREE(cfg->osh, sdreq, tot_len); in wl_sd_handle_sd_req()
18619 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_sd_handle_sd_cancel_req() local
18620 s32 bssidx = wl_to_p2p_bss_bssidx(cfg, P2PAPI_BSSCFG_DEVICE); in wl_sd_handle_sd_cancel_req()
18623 0, cfg->ioctl_buf, WLC_IOCTL_SMLEN, in wl_sd_handle_sd_cancel_req()
18624 bssidx, &cfg->ioctl_buf_sync) < 0) { in wl_sd_handle_sd_cancel_req()
18629 cfg->sdo->sd_state &= ~WL_SD_SEARCH_SVC; in wl_sd_handle_sd_cancel_req()
18645 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_sd_handle_sd_add_svc() local
18664 sdreq = (wl_sd_qr_t *)MALLOCZ(cfg->osh, tot_len); in wl_sd_handle_sd_add_svc()
18713 if ((ret = wl_cfgp2p_enable_discovery(cfg, dev, NULL, 0)) < 0) { in wl_sd_handle_sd_add_svc()
18719 tot_len, cfg->ioctl_buf, WLC_IOCTL_MAXLEN, in wl_sd_handle_sd_add_svc()
18720 bssidx, &cfg->ioctl_buf_sync)) < 0) { in wl_sd_handle_sd_add_svc()
18725 cfg->sdo->sd_state |= WL_SD_ADV_SVC; in wl_sd_handle_sd_add_svc()
18728 MFREE(cfg->osh, sdreq, tot_len); in wl_sd_handle_sd_add_svc()
18737 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_sd_handle_sd_del_svc() local
18745 if ((bssidx = wl_get_bssidx_by_wdev(cfg, dev->ieee80211_ptr)) < 0) { in wl_sd_handle_sd_del_svc()
18750 sdreq = (wl_sd_qr_t *)MALLOCZ(cfg->osh, tot_len); in wl_sd_handle_sd_del_svc()
18791 tot_len, cfg->ioctl_buf, WLC_IOCTL_MAXLEN, in wl_sd_handle_sd_del_svc()
18792 bssidx, &cfg->ioctl_buf_sync)) < 0) { in wl_sd_handle_sd_del_svc()
18797 cfg->sdo->sd_state &= ~WL_SD_ADV_SVC; in wl_sd_handle_sd_del_svc()
18801 MFREE(cfg->osh, sdreq, tot_len); in wl_sd_handle_sd_del_svc()
18812 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_sd_handle_sd_stop_discovery() local
18813 s32 bssidx = wl_to_p2p_bss_bssidx(cfg, P2PAPI_BSSCFG_DEVICE); in wl_sd_handle_sd_stop_discovery()
18818 sizeof(sdo_pause), cfg->ioctl_buf, WLC_IOCTL_SMLEN, in wl_sd_handle_sd_stop_discovery()
18819 bssidx, &cfg->ioctl_buf_sync)) < 0) { in wl_sd_handle_sd_stop_discovery()
18825 cfg->sdo->dd_state = WL_DD_STATE_IDLE; in wl_sd_handle_sd_stop_discovery()
18826 wl_clr_p2p_status(cfg, DISC_IN_PROGRESS); in wl_sd_handle_sd_stop_discovery()
18828 bzero(&cfg->sdo->sd_listen, sizeof(wl_sd_listen_t)); in wl_sd_handle_sd_stop_discovery()
18841 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_sd_handle_sd_find() local
18842 s32 bssidx = wl_to_p2p_bss_bssidx(cfg, P2PAPI_BSSCFG_DEVICE); in wl_sd_handle_sd_find()
18844 s32 disc_bssidx = wl_to_p2p_bss_bssidx(cfg, P2PAPI_BSSCFG_DEVICE); in wl_sd_handle_sd_find()
18858 if ((ret = wl_cfgp2p_enable_discovery(cfg, dev, NULL, 0)) < 0) { in wl_sd_handle_sd_find()
18868 sizeof(channel), cfg->ioctl_buf, WLC_IOCTL_SMLEN, in wl_sd_handle_sd_find()
18869 bssidx, &cfg->ioctl_buf_sync)) < 0) { in wl_sd_handle_sd_find()
18876 ie_setbuf = (vndr_ie_setbuf_t *)MALLOCZ(cfg->osh, tot_len); in wl_sd_handle_sd_find()
18900 tot_len, cfg->ioctl_buf, WLC_IOCTL_SMLEN, in wl_sd_handle_sd_find()
18901 disc_bssidx, &cfg->ioctl_buf_sync) < 0) { in wl_sd_handle_sd_find()
18909 cfg->ioctl_buf, WLC_IOCTL_SMLEN, bssidx, &cfg->ioctl_buf_sync)) < 0) { in wl_sd_handle_sd_find()
18916 cfg->sdo->dd_state = WL_DD_STATE_SEARCH; in wl_sd_handle_sd_find()
18917 wl_set_p2p_status(cfg, DISC_IN_PROGRESS); in wl_sd_handle_sd_find()
18921 MFREE(cfg->osh, ie_setbuf, tot_len); in wl_sd_handle_sd_find()
18936 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_sd_handle_sd_listen() local
18937 s32 bssidx = wl_to_p2p_bss_bssidx(cfg, P2PAPI_BSSCFG_DEVICE); in wl_sd_handle_sd_listen()
18944 if ((ret = wl_cfgp2p_enable_discovery(cfg, dev, NULL, 0)) < 0) { in wl_sd_handle_sd_listen()
18979 sizeof(channel), cfg->ioctl_buf, WLC_IOCTL_SMLEN, in wl_sd_handle_sd_listen()
18980 bssidx, &cfg->ioctl_buf_sync)) < 0) { in wl_sd_handle_sd_listen()
18988 sizeof(wl_sd_listen_t), cfg->ioctl_buf, WLC_IOCTL_SMLEN, in wl_sd_handle_sd_listen()
18989 bssidx, &cfg->ioctl_buf_sync)) < 0) { in wl_sd_handle_sd_listen()
18998 cfg->sdo->sd_listen.interval = sd_listen.interval; in wl_sd_handle_sd_listen()
18999 cfg->sdo->sd_listen.period = sd_listen.period; in wl_sd_handle_sd_listen()
19002 cfg->sdo->dd_state = WL_DD_STATE_LISTEN; in wl_sd_handle_sd_listen()
19003 wl_set_p2p_status(cfg, DISC_IN_PROGRESS); in wl_sd_handle_sd_listen()
19011 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_sd_offload() local
19015 if (!cfg->sdo) { in wl_cfg80211_sd_offload()
19017 if ((ret = wl_cfg80211_sdo_init(cfg)) < 0) in wl_cfg80211_sd_offload()
19048 struct bcm_cfg80211 *cfg; in wl_cfg80211_set_wps_p2p_ie() local
19054 cfg = wl_get_cfg(ndev); in wl_cfg80211_set_wps_p2p_ie()
19055 if (wl_get_drv_status(cfg, AP_CREATING, ndev)) { in wl_cfg80211_set_wps_p2p_ie()
19061 } else if (ndev == bcmcfg_to_prmry_ndev(cfg)) { in wl_cfg80211_set_wps_p2p_ie()
19063 if (wl_get_drv_status(cfg, AP_CREATED, ndev)) { in wl_cfg80211_set_wps_p2p_ie()
19068 if (!cfg->p2p) { in wl_cfg80211_set_wps_p2p_ie()
19074 if (!cfg->p2p->on) { in wl_cfg80211_set_wps_p2p_ie()
19076 p2p_on(cfg) = true; in wl_cfg80211_set_wps_p2p_ie()
19077 ret = wl_cfgp2p_enable_discovery(cfg, ndev, NULL, 0); in wl_cfg80211_set_wps_p2p_ie()
19083 ndev = wl_to_p2p_bss_ndev(cfg, P2PAPI_BSSCFG_PRIMARY); in wl_cfg80211_set_wps_p2p_ie()
19084 if (!cfg->p2p_wdev) { in wl_cfg80211_set_wps_p2p_ie()
19088 wdev = cfg->p2p_wdev; in wl_cfg80211_set_wps_p2p_ie()
19090 bssidx = wl_to_p2p_bss_bssidx(cfg, P2PAPI_BSSCFG_DEVICE); in wl_cfg80211_set_wps_p2p_ie()
19095 bssidx = wl_get_bssidx_by_wdev(cfg, ndev->ieee80211_ptr); in wl_cfg80211_set_wps_p2p_ie()
19111 ret = wl_cfg80211_set_mgmt_vndr_ies(cfg, in wl_cfg80211_set_wps_p2p_ie()
19125 struct bcm_cfg80211 *cfg = (struct bcm_cfg80211 *)data; in wl_rfkill_set() local
19130 if (!cfg) in wl_rfkill_set()
19133 cfg->rf_blocked = blocked; in wl_rfkill_set()
19138 static int wl_setup_rfkill(struct bcm_cfg80211 *cfg, bool setup) in wl_setup_rfkill() argument
19143 if (!cfg) in wl_setup_rfkill()
19146 cfg->rfkill = rfkill_alloc("brcmfmac-wifi", in wl_setup_rfkill()
19148 RFKILL_TYPE_WLAN, &wl_rfkill_ops, (void *)cfg); in wl_setup_rfkill()
19150 if (!cfg->rfkill) { in wl_setup_rfkill()
19155 err = rfkill_register(cfg->rfkill); in wl_setup_rfkill()
19158 rfkill_destroy(cfg->rfkill); in wl_setup_rfkill()
19160 if (!cfg->rfkill) { in wl_setup_rfkill()
19165 rfkill_unregister(cfg->rfkill); in wl_setup_rfkill()
19166 rfkill_destroy(cfg->rfkill); in wl_setup_rfkill()
19178 void wl_cfg80211_set_bcmcfg(struct bcm_cfg80211 *cfg) in wl_cfg80211_set_bcmcfg() argument
19180 g_bcmcfg = cfg; in wl_cfg80211_set_bcmcfg()
19198 void get_primary_mac(struct bcm_cfg80211 *cfg, struct ether_addr *mac) in get_primary_mac() argument
19202 if (wldev_iovar_getbuf_bsscfg(bcmcfg_to_prmry_ndev(cfg), in get_primary_mac()
19213 struct bcm_cfg80211 *cfg = *(struct bcm_cfg80211 **)netdev_priv(net); in wl_cfg80211_do_driver_init() local
19215 if (!cfg || !cfg->wdev) in wl_cfg80211_do_driver_init()
19219 if (dhd_do_driver_init(cfg->wdev->netdev) < 0) in wl_cfg80211_do_driver_init()
19251 struct bcm_cfg80211 *cfg = wl_get_cfg(ndev); in wl_cfg80211_set_band() local
19267 cfg->curr_band = band; in wl_cfg80211_set_band()
19276 struct bcm_cfg80211 *cfg = wl_get_cfg(ndev); in wl_cfg80211_set_if_band() local
19285 if (cfg->ncho_band == band) { in wl_cfg80211_set_if_band()
19286 WL_ERR(("Same to Current band %d\n", cfg->ncho_band)); in wl_cfg80211_set_if_band()
19290 if (wl_get_drv_status(cfg, CONNECTED, ndev)) { in wl_cfg80211_set_if_band()
19292 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_set_if_band()
19307 while (wl_get_drv_status(cfg, CONNECTED, ndev) && wait_cnt) { in wl_cfg80211_set_if_band()
19327 cfg->ncho_band = band; in wl_cfg80211_set_if_band()
19334 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_is_concurrent_mode() local
19335 if ((cfg) && (wl_get_drv_status_all(cfg, CONNECTED) > 1)) { in wl_cfg80211_is_concurrent_mode()
19348 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_get_dhdp() local
19350 return cfg->pub; in wl_cfg80211_get_dhdp()
19355 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_is_p2p_active() local
19356 return (cfg && cfg->p2p); in wl_cfg80211_is_p2p_active()
19361 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_is_roam_offload() local
19362 return (cfg && cfg->roam_offload); in wl_cfg80211_is_roam_offload()
19370 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_is_event_from_connected_bssid() local
19372 if (!cfg) { in wl_cfg80211_is_event_from_connected_bssid()
19378 curbssid = wl_read_prof(cfg, dev, WL_PROF_BSSID); in wl_cfg80211_is_event_from_connected_bssid()
19389 struct bcm_cfg80211 *cfg = NULL; in wl_cfg80211_work_handler() local
19394 BCM_SET_CONTAINER_OF(cfg, work, struct bcm_cfg80211, pm_enable_work.work); in wl_cfg80211_work_handler()
19397 for_each_ndev(cfg, iter, next) { in wl_cfg80211_work_handler()
19401 if (!wl_get_drv_status(cfg, CONNECTED, iter->ndev) || in wl_cfg80211_work_handler()
19402 (wl_get_mode_by_netdev(cfg, iter->ndev) != WL_MODE_BSS && in wl_cfg80211_work_handler()
19403 wl_get_mode_by_netdev(cfg, iter->ndev) != WL_MODE_IBSS)) in wl_cfg80211_work_handler()
19406 dhd = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_work_handler()
19424 DHD_PM_WAKE_UNLOCK(cfg->pub); in wl_cfg80211_work_handler()
19428 if (cfg->scan_suppressed) { in wl_cfg80211_work_handler()
19431 wl_cfg80211_scan_suppress(bcmcfg_to_prmry_ndev(cfg), 0); in wl_cfg80211_work_handler()
19470 struct bcm_cfg80211 * cfg = wl_get_cfg(dev); in wl_cfg80211_get_fbt_key() local
19477 if (cfg) { in wl_cfg80211_get_fbt_key()
19478 memcpy(key, cfg->fbt_key, FBT_KEYLEN); in wl_cfg80211_get_fbt_key()
19491 wl_cfg80211_delayed_roam(struct bcm_cfg80211 *cfg, struct net_device *ndev, in wl_cfg80211_delayed_roam() argument
19501 err = wl_notify_roaming_status(cfg, ndev_to_cfgdev(ndev), &e, NULL); in wl_cfg80211_delayed_roam()
19621 wl_vndr_ies_check_duplicate_vndr_oui(struct bcm_cfg80211 *cfg, in wl_vndr_ies_check_duplicate_vndr_oui() argument
19627 WL_CFG_VNDR_OUI_SYNC_LOCK(&cfg->vndr_oui_sync, flags); in wl_vndr_ies_check_duplicate_vndr_oui()
19629 list_for_each_entry(oui_entry, &cfg->vndr_oui_list, list) { in wl_vndr_ies_check_duplicate_vndr_oui()
19632 WL_CFG_VNDR_OUI_SYNC_UNLOCK(&cfg->vndr_oui_sync, flags); in wl_vndr_ies_check_duplicate_vndr_oui()
19636 WL_CFG_VNDR_OUI_SYNC_UNLOCK(&cfg->vndr_oui_sync, flags); in wl_vndr_ies_check_duplicate_vndr_oui()
19641 wl_vndr_ies_add_vendor_oui_list(struct bcm_cfg80211 *cfg, in wl_vndr_ies_add_vendor_oui_list() argument
19656 WL_CFG_VNDR_OUI_SYNC_LOCK(&cfg->vndr_oui_sync, flags); in wl_vndr_ies_add_vendor_oui_list()
19657 list_add_tail(&oui_entry->list, &cfg->vndr_oui_list); in wl_vndr_ies_add_vendor_oui_list()
19658 WL_CFG_VNDR_OUI_SYNC_UNLOCK(&cfg->vndr_oui_sync, flags); in wl_vndr_ies_add_vendor_oui_list()
19664 wl_vndr_ies_clear_vendor_oui_list(struct bcm_cfg80211 *cfg) in wl_vndr_ies_clear_vendor_oui_list() argument
19669 WL_CFG_VNDR_OUI_SYNC_LOCK(&cfg->vndr_oui_sync, flags); in wl_vndr_ies_clear_vendor_oui_list()
19670 while (!list_empty(&cfg->vndr_oui_list)) { in wl_vndr_ies_clear_vendor_oui_list()
19672 oui_entry = list_entry(cfg->vndr_oui_list.next, wl_vndr_oui_entry_t, list); in wl_vndr_ies_clear_vendor_oui_list()
19679 WL_CFG_VNDR_OUI_SYNC_UNLOCK(&cfg->vndr_oui_sync, flags); in wl_vndr_ies_clear_vendor_oui_list()
19683 wl_vndr_ies_get_vendor_oui(struct bcm_cfg80211 *cfg, struct net_device *ndev, in wl_vndr_ies_get_vendor_oui() argument
19689 struct wl_connect_info *conn_info = wl_to_conn(cfg); in wl_vndr_ies_get_vendor_oui()
19702 wl_vndr_ies_clear_vendor_oui_list(cfg); in wl_vndr_ies_get_vendor_oui()
19712 if (wl_vndr_ies_check_duplicate_vndr_oui(cfg, vndr_info)) { in wl_vndr_ies_get_vendor_oui()
19716 wl_vndr_ies_add_vendor_oui_list(cfg, vndr_info); in wl_vndr_ies_get_vendor_oui()
19722 WL_CFG_VNDR_OUI_SYNC_LOCK(&cfg->vndr_oui_sync, flags); in wl_vndr_ies_get_vendor_oui()
19724 list_for_each_entry(oui_entry, &cfg->vndr_oui_list, list) { in wl_vndr_ies_get_vendor_oui()
19727 WL_CFG_VNDR_OUI_SYNC_UNLOCK(&cfg->vndr_oui_sync, flags); in wl_vndr_ies_get_vendor_oui()
19734 WL_CFG_VNDR_OUI_SYNC_UNLOCK(&cfg->vndr_oui_sync, flags); in wl_vndr_ies_get_vendor_oui()
19742 wl_vndr_ies_find_vendor_oui(struct bcm_cfg80211 *cfg, struct net_device *ndev, in wl_vndr_ies_find_vendor_oui() argument
19748 struct wl_connect_info *conn_info = wl_to_conn(cfg); in wl_vndr_ies_find_vendor_oui()
19760 wl_vndr_ies_clear_vendor_oui_list(cfg); in wl_vndr_ies_find_vendor_oui()
19770 if (wl_vndr_ies_check_duplicate_vndr_oui(cfg, vndr_info)) { in wl_vndr_ies_find_vendor_oui()
19774 wl_vndr_ies_add_vendor_oui_list(cfg, vndr_info); in wl_vndr_ies_find_vendor_oui()
19780 WL_CFG_VNDR_OUI_SYNC_LOCK(&cfg->vndr_oui_sync, flags); in wl_vndr_ies_find_vendor_oui()
19782 list_for_each_entry(oui_entry, &cfg->vndr_oui_list, list) { in wl_vndr_ies_find_vendor_oui()
19789 WL_CFG_VNDR_OUI_SYNC_UNLOCK(&cfg->vndr_oui_sync, flags); in wl_vndr_ies_find_vendor_oui()
19797 wl_cfg80211_clear_p2p_disc_ies(struct bcm_cfg80211 *cfg) in wl_cfg80211_clear_p2p_disc_ies() argument
19800 if (cfg->p2p_wdev) { in wl_cfg80211_clear_p2p_disc_ies()
19803 wl_cfg80211_clear_per_bss_ies(cfg, cfg->p2p_wdev); in wl_cfg80211_clear_p2p_disc_ies()
19819 ndev = wl_to_p2p_bss_ndev(cfg, P2PAPI_BSSCFG_PRIMARY); in wl_cfg80211_clear_p2p_disc_ies()
19820 bssidx = wl_to_p2p_bss_bssidx(cfg, P2PAPI_BSSCFG_DEVICE); in wl_cfg80211_clear_p2p_disc_ies()
19827 if ((ret = wl_cfg80211_set_mgmt_vndr_ies(cfg, ndev_to_cfgdev(ndev), in wl_cfg80211_clear_p2p_disc_ies()
19838 wl_cfg80211_clear_per_bss_ies(struct bcm_cfg80211 *cfg, struct wireless_dev *wdev) in wl_cfg80211_clear_per_bss_ies() argument
19846 netinfo = wl_get_netinfo_by_wdev(cfg, wdev); in wl_cfg80211_clear_per_bss_ies()
19855 if ((ret = wl_cfg80211_set_mgmt_vndr_ies(cfg, wdev_to_cfgdev(netinfo->wdev), in wl_cfg80211_clear_per_bss_ies()
19866 wl_cfg80211_clear_mgmt_vndr_ies(struct bcm_cfg80211 *cfg) in wl_cfg80211_clear_mgmt_vndr_ies() argument
19872 for_each_ndev(cfg, iter, next) { in wl_cfg80211_clear_mgmt_vndr_ies()
19874 wl_cfg80211_clear_per_bss_ies(cfg, iter->wdev); in wl_cfg80211_clear_mgmt_vndr_ies()
19914 wl_print_fw_ie_data(struct bcm_cfg80211 *cfg, struct net_device *ndev, s32 bssidx) in wl_print_fw_ie_data() argument
19920 0, cfg->ioctl_buf, WLC_IOCTL_MAXLEN, in wl_print_fw_ie_data()
19921 bssidx, &cfg->ioctl_buf_sync); in wl_print_fw_ie_data()
19923 ies = (vndr_ie_buf_t *)cfg->ioctl_buf; in wl_print_fw_ie_data()
19925 wl_dump_ie_buf((vndr_ie_buf_t *)cfg->ioctl_buf); in wl_print_fw_ie_data()
19937 wl_cfg80211_set_mgmt_vndr_ies(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev, in wl_cfg80211_set_mgmt_vndr_ies() argument
19964 ndev = cfgdev_to_wlc_ndev(cfgdev, cfg); in wl_cfg80211_set_mgmt_vndr_ies()
19972 netinfo = wl_get_netinfo_by_wdev(cfg, wdev); in wl_cfg80211_set_mgmt_vndr_ies()
20086 del_add_ie_buf_len = wl_cfgp2p_vndr_ie(cfg, curr_ie_buf, in wl_cfg80211_set_mgmt_vndr_ies()
20120 del_add_ie_buf_len = wl_cfgp2p_vndr_ie(cfg, curr_ie_buf, in wl_cfg80211_set_mgmt_vndr_ies()
20149 if (total_ie_buf_len && cfg->ioctl_buf != NULL) { in wl_cfg80211_set_mgmt_vndr_ies()
20160 curr_ie_buf_len, cfg->ioctl_buf, WLC_IOCTL_MAXLEN, in wl_cfg80211_set_mgmt_vndr_ies()
20161 bssidx, &cfg->ioctl_buf_sync); in wl_cfg80211_set_mgmt_vndr_ies()
20168 total_ie_buf_len, cfg->ioctl_buf, WLC_IOCTL_MAXLEN, in wl_cfg80211_set_mgmt_vndr_ies()
20169 bssidx, &cfg->ioctl_buf_sync); in wl_cfg80211_set_mgmt_vndr_ies()
20175 wl_print_fw_ie_data(cfg, ndev, bssidx); in wl_cfg80211_set_mgmt_vndr_ies()
20185 void wl_cfg80211_clear_security(struct bcm_cfg80211 *cfg) in wl_cfg80211_clear_security() argument
20187 struct net_device *dev = bcmcfg_to_prmry_ndev(cfg); in wl_cfg80211_clear_security()
20208 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_del_p2p_wdev() local
20212 if (!cfg) { in wl_cfg80211_del_p2p_wdev()
20216 wdev = cfg->p2p_wdev; in wl_cfg80211_del_p2p_wdev()
20220 wl_cfgp2p_del_p2p_disc_if(wdev, cfg); in wl_cfg80211_del_p2p_wdev()
20231 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_set_rekey_data() local
20235 dhd_pub_t *dhd = cfg->pub; in wl_cfg80211_set_rekey_data()
20238 if (data == NULL || cfg->p2p_net == dev) { in wl_cfg80211_set_rekey_data()
20254 sizeof(bcol_keyinfo), cfg->ioctl_buf, WLC_IOCTL_SMLEN, &cfg->ioctl_buf_sync); in wl_cfg80211_set_rekey_data()
20263 cfg->ioctl_buf, WLC_IOCTL_SMLEN, &cfg->ioctl_buf_sync)) < 0) { in wl_cfg80211_set_rekey_data()
20283 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_set_pmk() local
20299 if ((bssidx = wl_get_bssidx_by_wdev(cfg, dev->ieee80211_ptr)) < 0) { in wl_cfg80211_set_pmk()
20305 sec = wl_read_prof(cfg, dev, WL_PROF_SEC); in wl_cfg80211_set_pmk()
20309 cfg->ioctl_buf, WLC_IOCTL_SMLEN, bssidx, &cfg->ioctl_buf_sync); in wl_cfg80211_set_pmk()
20350 wl_cfg80211_get_new_roc_id(struct bcm_cfg80211 *cfg) in wl_cfg80211_get_new_roc_id() argument
20353 id = ++cfg->last_roc_id; in wl_cfg80211_get_new_roc_id()
20356 id = ++cfg->last_roc_id; in wl_cfg80211_get_new_roc_id()
20360 id = ++cfg->last_roc_id; in wl_cfg80211_get_new_roc_id()
20365 wl_get_netdev_by_name(struct bcm_cfg80211 *cfg, char *ifname) in wl_get_netdev_by_name() argument
20371 for_each_ndev(cfg, iter, next) { in wl_get_netdev_by_name()
20385 static bool wl_cfg80211_wbtext_check_bssid_list(struct bcm_cfg80211 *cfg, struct ether_addr *ea) in wl_cfg80211_wbtext_check_bssid_list() argument
20390 list_for_each_entry(bssid, &cfg->wbtext_bssid_list, list) { in wl_cfg80211_wbtext_check_bssid_list()
20400 static bool wl_cfg80211_wbtext_add_bssid_list(struct bcm_cfg80211 *cfg, struct ether_addr *ea) in wl_cfg80211_wbtext_add_bssid_list() argument
20405 bssid = (wl_wbtext_bssid_t *)MALLOC(cfg->osh, sizeof(wl_wbtext_bssid_t)); in wl_cfg80211_wbtext_add_bssid_list()
20414 list_add_tail(&bssid->list, &cfg->wbtext_bssid_list); in wl_cfg80211_wbtext_add_bssid_list()
20421 static void wl_cfg80211_wbtext_clear_bssid_list(struct bcm_cfg80211 *cfg) in wl_cfg80211_wbtext_clear_bssid_list() argument
20426 while (!list_empty(&cfg->wbtext_bssid_list)) { in wl_cfg80211_wbtext_clear_bssid_list()
20428 bssid = list_entry(cfg->wbtext_bssid_list.next, wl_wbtext_bssid_t, list); in wl_cfg80211_wbtext_clear_bssid_list()
20433 MFREE(cfg->osh, bssid, sizeof(wl_wbtext_bssid_t)); in wl_cfg80211_wbtext_clear_bssid_list()
20438 static void wl_cfg80211_wbtext_update_rcc(struct bcm_cfg80211 *cfg, struct net_device *dev) in wl_cfg80211_wbtext_update_rcc() argument
20440 struct wl_connect_info *conn_info = wl_to_conn(cfg); in wl_cfg80211_wbtext_update_rcc()
20447 profile = wl_get_profile_by_netdev(cfg, dev); in wl_cfg80211_wbtext_update_rcc()
20453 if (wl_cfg80211_wbtext_check_bssid_list(cfg, in wl_cfg80211_wbtext_update_rcc()
20464 req_sent = wl_cfg80211_wbtext_send_nbr_req(cfg, dev, profile); in wl_cfg80211_wbtext_update_rcc()
20475 wl_cfg80211_wbtext_send_btm_query(cfg, dev, profile); in wl_cfg80211_wbtext_update_rcc()
20481 static bool wl_cfg80211_wbtext_send_nbr_req(struct bcm_cfg80211 *cfg, struct net_device *dev, in wl_cfg80211_wbtext_send_nbr_req() argument
20486 struct wl_connect_info *conn_info = wl_to_conn(cfg); in wl_cfg80211_wbtext_send_nbr_req()
20502 smbuf = (char *)MALLOCZ(cfg->osh, WLC_IOCTL_MAXLEN); in wl_cfg80211_wbtext_send_nbr_req()
20508 ssid = (wlc_ssid_t *)MALLOCZ(cfg->osh, sizeof(wlc_ssid_t)); in wl_cfg80211_wbtext_send_nbr_req()
20520 ret = wl_cfg80211_wbtext_add_bssid_list(cfg, in wl_cfg80211_wbtext_send_nbr_req()
20528 MFREE(cfg->osh, ssid, sizeof(wlc_ssid_t)); in wl_cfg80211_wbtext_send_nbr_req()
20532 MFREE(cfg->osh, smbuf, WLC_IOCTL_MAXLEN); in wl_cfg80211_wbtext_send_nbr_req()
20537 static bool wl_cfg80211_wbtext_send_btm_query(struct bcm_cfg80211 *cfg, struct net_device *dev, in wl_cfg80211_wbtext_send_btm_query() argument
20551 sizeof(btq), cfg->ioctl_buf, WLC_IOCTL_SMLEN, &cfg->ioctl_buf_sync); in wl_cfg80211_wbtext_send_btm_query()
20553 ret = wl_cfg80211_wbtext_add_bssid_list(cfg, in wl_cfg80211_wbtext_send_btm_query()
20562 static void wl_cfg80211_wbtext_set_wnm_maxidle(struct bcm_cfg80211 *cfg, struct net_device *dev) in wl_cfg80211_wbtext_set_wnm_maxidle() argument
20567 struct wl_connect_info *conn_info = wl_to_conn(cfg); in wl_cfg80211_wbtext_set_wnm_maxidle()
20585 if ((bssidx = wl_get_bssidx_by_wdev(cfg, dev->ieee80211_ptr)) >= 0) { in wl_cfg80211_wbtext_set_wnm_maxidle()
20587 sizeof(keepalives_max_idle_t), cfg->ioctl_buf, WLC_IOCTL_SMLEN, in wl_cfg80211_wbtext_set_wnm_maxidle()
20588 bssidx, &cfg->ioctl_buf_sync); in wl_cfg80211_wbtext_set_wnm_maxidle()
20674 wl_cfg80211_set_cac(struct bcm_cfg80211 *cfg, int enable) in wl_cfg80211_set_cac() argument
20677 dhd_pub_t *dhd = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_set_cac()
20698 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_get_rssi_per_ant() local
20709 ifdev = wl_get_netdev_by_name(cfg, ifname); in wl_get_rssi_per_ant()
20719 set_param = (rssi_ant_param_t *)MALLOCZ(cfg->osh, sizeof(rssi_ant_param_t)); in wl_get_rssi_per_ant()
20748 MFREE(cfg->osh, set_param, sizeof(rssi_ant_param_t)); in wl_get_rssi_per_ant()
20777 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_set_rssi_logging() local
20782 sizeof(*set_param), cfg->ioctl_buf, WLC_IOCTL_SMLEN, in wl_set_rssi_logging()
20783 &cfg->ioctl_buf_sync); in wl_set_rssi_logging()
20797 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_flush_fw_log_buffer() local
20798 dhd_pub_t *dhd = (dhd_pub_t *)(cfg->pub); in wl_flush_fw_log_buffer()
20826 wl_cfg80211_set_frameburst(struct bcm_cfg80211 *cfg, bool enable) in wl_cfg80211_set_frameburst() argument
20839 ret = wldev_ioctl_set(bcmcfg_to_prmry_ndev(cfg), WLC_SET_FAKEFRAG, &val, sizeof(val)); in wl_cfg80211_set_frameburst()
20911 uint8 wl_cfg80211_get_bus_state(struct bcm_cfg80211 *cfg) in wl_cfg80211_get_bus_state() argument
20913 dhd_pub_t *dhd = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_get_bus_state()
20923 struct bcm_cfg80211 *cfg = wl_get_cfg(ndev); in wl_wps_reauth_timeout() local
20927 WL_CFG_WPS_SYNC_LOCK(&cfg->wps_sync, flags); in wl_wps_reauth_timeout()
20928 inst = wl_get_wps_inst_match(cfg, ndev); in wl_wps_reauth_timeout()
20931 ndev->name, inst, cfg->wps_session[inst].state)); in wl_wps_reauth_timeout()
20932 if (cfg->wps_session[inst].state == WPS_STATE_REAUTH_WAIT) { in wl_wps_reauth_timeout()
20939 cfg->wps_session[inst].state = WPS_STATE_IDLE; in wl_wps_reauth_timeout()
20940 cfg->wps_session[inst].in_use = false; in wl_wps_reauth_timeout()
20943 WL_CFG_WPS_SYNC_UNLOCK(&cfg->wps_sync, flags); in wl_wps_reauth_timeout()
20946 static void wl_init_wps_reauth_sm(struct bcm_cfg80211 *cfg) in wl_init_wps_reauth_sm() argument
20952 struct net_device *pdev = bcmcfg_to_prmry_ndev(cfg); in wl_init_wps_reauth_sm()
20954 spin_lock_init(&cfg->wps_sync); in wl_init_wps_reauth_sm()
20957 init_timer_compat(&cfg->wps_session[i].timer, wl_wps_reauth_timeout, pdev); in wl_init_wps_reauth_sm()
20958 cfg->wps_session[i].in_use = false; in wl_init_wps_reauth_sm()
20959 cfg->wps_session[i].state = WPS_STATE_IDLE; in wl_init_wps_reauth_sm()
20963 static void wl_deinit_wps_reauth_sm(struct bcm_cfg80211 *cfg) in wl_deinit_wps_reauth_sm() argument
20968 cfg->wps_session[i].in_use = false; in wl_deinit_wps_reauth_sm()
20969 cfg->wps_session[i].state = WPS_STATE_IDLE; in wl_deinit_wps_reauth_sm()
20970 del_timer_sync(&cfg->wps_session[i].timer); in wl_deinit_wps_reauth_sm()
20976 wl_get_free_wps_inst(struct bcm_cfg80211 *cfg) in wl_get_free_wps_inst() argument
20981 if (!cfg->wps_session[i].in_use) { in wl_get_free_wps_inst()
20989 wl_get_wps_inst_match(struct bcm_cfg80211 *cfg, struct net_device *ndev) in wl_get_wps_inst_match() argument
20994 if ((cfg->wps_session[i].in_use) && in wl_get_wps_inst_match()
20995 (ndev == cfg->wps_session[i].ndev)) { in wl_get_wps_inst_match()
21007 struct bcm_cfg80211 *cfg = wl_get_cfg(ndev); in wl_wps_session_add() local
21010 WL_CFG_WPS_SYNC_LOCK(&cfg->wps_sync, flags); in wl_wps_session_add()
21012 inst = wl_get_free_wps_inst(cfg); in wl_wps_session_add()
21015 WL_CFG_WPS_SYNC_UNLOCK(&cfg->wps_sync, flags); in wl_wps_session_add()
21018 cfg->wps_session[inst].in_use = true; in wl_wps_session_add()
21019 cfg->wps_session[inst].state = WPS_STATE_STARTED; in wl_wps_session_add()
21020 cfg->wps_session[inst].ndev = ndev; in wl_wps_session_add()
21021 cfg->wps_session[inst].mode = mode; in wl_wps_session_add()
21023 (void)memcpy_s(cfg->wps_session[inst].peer_mac, ETH_ALEN, mac_addr, ETH_ALEN); in wl_wps_session_add()
21024 WL_CFG_WPS_SYNC_UNLOCK(&cfg->wps_sync, flags); in wl_wps_session_add()
21035 struct bcm_cfg80211 *cfg = wl_get_cfg(ndev); in wl_wps_session_del() local
21039 WL_CFG_WPS_SYNC_LOCK(&cfg->wps_sync, flags); in wl_wps_session_del()
21042 inst = wl_get_wps_inst_match(cfg, ndev); in wl_wps_session_del()
21045 WL_CFG_WPS_SYNC_UNLOCK(&cfg->wps_sync, flags); in wl_wps_session_del()
21049 cur_state = cfg->wps_session[inst].state; in wl_wps_session_del()
21052 WL_CFG_WPS_SYNC_UNLOCK(&cfg->wps_sync, flags); in wl_wps_session_del()
21057 cfg->wps_session[inst].in_use = false; in wl_wps_session_del()
21058 cfg->wps_session[inst].state = WPS_STATE_IDLE; in wl_wps_session_del()
21059 WL_CFG_WPS_SYNC_UNLOCK(&cfg->wps_sync, flags); in wl_wps_session_del()
21062 del_timer_sync(&cfg->wps_session[inst].timer); in wl_wps_session_del()
21070 struct bcm_cfg80211 *cfg = wl_get_cfg(ndev); in wl_wps_handle_ifdel() local
21075 WL_CFG_WPS_SYNC_LOCK(&cfg->wps_sync, flags); in wl_wps_handle_ifdel()
21076 inst = wl_get_wps_inst_match(cfg, ndev); in wl_wps_handle_ifdel()
21079 WL_CFG_WPS_SYNC_UNLOCK(&cfg->wps_sync, flags); in wl_wps_handle_ifdel()
21082 cur_state = cfg->wps_session[inst].state; in wl_wps_handle_ifdel()
21083 cfg->wps_session[inst].state = WPS_STATE_DONE; in wl_wps_handle_ifdel()
21084 WL_CFG_WPS_SYNC_UNLOCK(&cfg->wps_sync, flags); in wl_wps_handle_ifdel()
21095 struct bcm_cfg80211 *cfg = wl_get_cfg(ndev); in wl_wps_handle_sta_linkdown() local
21100 WL_CFG_WPS_SYNC_LOCK(&cfg->wps_sync, flags); in wl_wps_handle_sta_linkdown()
21101 cur_state = cfg->wps_session[inst].state; in wl_wps_handle_sta_linkdown()
21103 WL_CFG_WPS_SYNC_UNLOCK(&cfg->wps_sync, flags); in wl_wps_handle_sta_linkdown()
21104 wl_clr_drv_status(cfg, CONNECTED, ndev); in wl_wps_handle_sta_linkdown()
21105 wl_clr_drv_status(cfg, DISCONNECTING, ndev); in wl_wps_handle_sta_linkdown()
21111 cfg->wps_session[inst].state = WPS_STATE_DONE; in wl_wps_handle_sta_linkdown()
21119 WL_CFG_WPS_SYNC_UNLOCK(&cfg->wps_sync, flags); in wl_wps_handle_sta_linkdown()
21130 struct bcm_cfg80211 *cfg = wl_get_cfg(ndev); in wl_wps_handle_peersta_linkdown() local
21136 WL_CFG_WPS_SYNC_LOCK(&cfg->wps_sync, flags); in wl_wps_handle_peersta_linkdown()
21137 cur_state = cfg->wps_session[inst].state; in wl_wps_handle_peersta_linkdown()
21148 if (memcmp(cfg->wps_session[inst].peer_mac, peer_mac, ETH_ALEN)) { in wl_wps_handle_peersta_linkdown()
21174 cfg->wps_session[inst].state = WPS_STATE_DONE; in wl_wps_handle_peersta_linkdown()
21187 WL_CFG_WPS_SYNC_UNLOCK(&cfg->wps_sync, flags); in wl_wps_handle_peersta_linkdown()
21197 struct bcm_cfg80211 *cfg = wl_get_cfg(ndev); in wl_wps_handle_sta_linkup() local
21203 WL_CFG_WPS_SYNC_LOCK(&cfg->wps_sync, flags); in wl_wps_handle_sta_linkup()
21204 cur_state = cfg->wps_session[inst].state; in wl_wps_handle_sta_linkup()
21207 cfg->wps_session[inst].state = WPS_STATE_DONE; in wl_wps_handle_sta_linkup()
21216 WL_CFG_WPS_SYNC_UNLOCK(&cfg->wps_sync, flags); in wl_wps_handle_sta_linkup()
21226 struct bcm_cfg80211 *cfg = wl_get_cfg(ndev); in wl_wps_handle_peersta_linkup() local
21231 WL_CFG_WPS_SYNC_LOCK(&cfg->wps_sync, flags); in wl_wps_handle_peersta_linkup()
21232 cur_state = cfg->wps_session[inst].state; in wl_wps_handle_peersta_linkup()
21236 memcmp(cfg->wps_session[inst].peer_mac, peer_mac, ETH_ALEN)) { in wl_wps_handle_peersta_linkup()
21238 WL_CFG_WPS_SYNC_UNLOCK(&cfg->wps_sync, flags); in wl_wps_handle_peersta_linkup()
21252 WL_CFG_WPS_SYNC_UNLOCK(&cfg->wps_sync, flags); in wl_wps_handle_peersta_linkup()
21260 struct bcm_cfg80211 *cfg = wl_get_cfg(ndev); in wl_wps_handle_authorize() local
21266 WL_CFG_WPS_SYNC_LOCK(&cfg->wps_sync, flags); in wl_wps_handle_authorize()
21267 cur_state = cfg->wps_session[inst].state; in wl_wps_handle_authorize()
21271 memcmp(cfg->wps_session[inst].peer_mac, peer_mac, ETH_ALEN)) { in wl_wps_handle_authorize()
21273 WL_CFG_WPS_SYNC_UNLOCK(&cfg->wps_sync, flags); in wl_wps_handle_authorize()
21280 cfg->wps_session[inst].state = WPS_STATE_DONE; in wl_wps_handle_authorize()
21290 WL_CFG_WPS_SYNC_UNLOCK(&cfg->wps_sync, flags); in wl_wps_handle_authorize()
21300 struct bcm_cfg80211 *cfg = wl_get_cfg(ndev); in wl_wps_handle_reauth() local
21306 WL_CFG_WPS_SYNC_LOCK(&cfg->wps_sync, flags); in wl_wps_handle_reauth()
21307 cur_state = cfg->wps_session[inst].state; in wl_wps_handle_reauth()
21308 mode = cfg->wps_session[inst].mode; in wl_wps_handle_reauth()
21313 cfg->wps_session[inst].state = WPS_STATE_REAUTH_WAIT; in wl_wps_handle_reauth()
21315 timer_set_private(&cfg->wps_session[inst].timer, ndev); in wl_wps_handle_reauth()
21316 WL_CFG_WPS_SYNC_UNLOCK(&cfg->wps_sync, flags); in wl_wps_handle_reauth()
21317 mod_timer(&cfg->wps_session[inst].timer, in wl_wps_handle_reauth()
21326 WL_CFG_WPS_SYNC_UNLOCK(&cfg->wps_sync, flags); in wl_wps_handle_reauth()
21333 struct bcm_cfg80211 *cfg = wl_get_cfg(ndev); in wl_wps_handle_disconnect() local
21338 WL_CFG_WPS_SYNC_LOCK(&cfg->wps_sync, flags); in wl_wps_handle_disconnect()
21339 cur_state = cfg->wps_session[inst].state; in wl_wps_handle_disconnect()
21359 WL_CFG_WPS_SYNC_UNLOCK(&cfg->wps_sync, flags); in wl_wps_handle_disconnect()
21366 struct bcm_cfg80211 *cfg = wl_get_cfg(ndev); in wl_wps_handle_disconnect_client() local
21372 WL_CFG_WPS_SYNC_LOCK(&cfg->wps_sync, flags); in wl_wps_handle_disconnect_client()
21373 cur_state = cfg->wps_session[inst].state; in wl_wps_handle_disconnect_client()
21378 cfg->wps_session[inst].state = WPS_STATE_DONE; in wl_wps_handle_disconnect_client()
21383 } else if (!(memcmp(cfg->wps_session[inst].peer_mac, in wl_wps_handle_disconnect_client()
21391 WL_CFG_WPS_SYNC_UNLOCK(&cfg->wps_sync, flags); in wl_wps_handle_disconnect_client()
21401 struct bcm_cfg80211 *cfg = wl_get_cfg(ndev); in wl_wps_handle_connect_fail() local
21406 WL_CFG_WPS_SYNC_LOCK(&cfg->wps_sync, flags); in wl_wps_handle_connect_fail()
21407 cur_state = cfg->wps_session[inst].state; in wl_wps_handle_connect_fail()
21409 cfg->wps_session[inst].state = WPS_STATE_DONE; in wl_wps_handle_connect_fail()
21417 WL_CFG_WPS_SYNC_UNLOCK(&cfg->wps_sync, flags); in wl_wps_handle_connect_fail()
21427 struct bcm_cfg80211 *cfg = wl_get_cfg(ndev); in wl_wps_handle_m8_sent() local
21432 WL_CFG_WPS_SYNC_LOCK(&cfg->wps_sync, flags); in wl_wps_handle_m8_sent()
21433 cur_state = cfg->wps_session[inst].state; in wl_wps_handle_m8_sent()
21437 cfg->wps_session[inst].state = WPS_STATE_M8_SENT; in wl_wps_handle_m8_sent()
21438 WL_CFG_WPS_SYNC_UNLOCK(&cfg->wps_sync, flags); in wl_wps_handle_m8_sent()
21444 WL_CFG_WPS_SYNC_UNLOCK(&cfg->wps_sync, flags); in wl_wps_handle_m8_sent()
21453 struct bcm_cfg80211 *cfg = wl_get_cfg(ndev); in wl_wps_session_update() local
21457 WL_CFG_WPS_SYNC_LOCK(&cfg->wps_sync, flags); in wl_wps_session_update()
21459 inst = wl_get_wps_inst_match(cfg, ndev); in wl_wps_session_update()
21463 WL_CFG_WPS_SYNC_UNLOCK(&cfg->wps_sync, flags); in wl_wps_session_update()
21466 mode = cfg->wps_session[inst].mode; in wl_wps_session_update()
21467 WL_CFG_WPS_SYNC_UNLOCK(&cfg->wps_sync, flags); in wl_wps_session_update()
21522 if (!memcmp(cfg->wps_session[inst].peer_mac, peer_mac, ETH_ALEN)) { in wl_wps_session_update()
21534 if (!memcmp(cfg->wps_session[inst].peer_mac, peer_mac, ETH_ALEN)) { in wl_wps_session_update()
21571 if (!memcmp(cfg->wps_session[inst].peer_mac, peer_mac, ETH_ALEN)) { in wl_wps_session_update()
21719 wl_cfg80211_sup_event_handler(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev, in wl_cfg80211_sup_event_handler() argument
21724 struct net_device *ndev = bcmcfg_to_prmry_ndev(cfg); in wl_cfg80211_sup_event_handler()
21727 if (!wl_get_drv_status(cfg, CFG80211_CONNECT, ndev)) { in wl_cfg80211_sup_event_handler()
21741 cfg80211_port_authorized(ndev, (u8 *)wl_read_prof(cfg, ndev, WL_PROF_BSSID), in wl_cfg80211_sup_event_handler()
21745 err = wl_cfgvendor_send_async_event(bcmcfg_to_wiphy(cfg), ndev, in wl_cfg80211_sup_event_handler()
21752 wl_cfg80211_post_scb_auth(cfg, ndev); in wl_cfg80211_sup_event_handler()
21765 wl_bcnrecv_aborted_event_handler(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev, in wl_bcnrecv_aborted_event_handler() argument
21769 struct net_device *ndev = bcmcfg_to_prmry_ndev(cfg); in wl_bcnrecv_aborted_event_handler()
21782 wl_mbo_event_handler(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev, in wl_mbo_event_handler() argument
21816 wl_cfg80211_cac_event_handler(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev, in wl_cfg80211_cac_event_handler() argument
21846 wl_bssid_prune_event_handler(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev, in wl_bssid_prune_event_handler() argument
21883 wl_cfg80211_rtt_event_handler(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev, in wl_cfg80211_rtt_event_handler() argument
21886 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_rtt_event_handler()
21896 wl_print_verinfo(struct bcm_cfg80211 *cfg) in wl_print_verinfo() argument
21901 if (!cfg) { in wl_print_verinfo()
21906 ver_ptr = (char *)MALLOCZ(cfg->osh, alloc_len); in wl_print_verinfo()
21912 if (!dhd_os_get_version(bcmcfg_to_prmry_ndev(cfg), in wl_print_verinfo()
21917 if (!dhd_os_get_version(bcmcfg_to_prmry_ndev(cfg), in wl_print_verinfo()
21922 MFREE(cfg->osh, ver_ptr, alloc_len); in wl_print_verinfo()
21926 int wl_cfg80211_get_concurrency_mode(struct bcm_cfg80211 *cfg) in wl_cfg80211_get_concurrency_mode() argument
21936 connected_cnt = wl_get_drv_status_all(cfg, CONNECTED); in wl_cfg80211_get_concurrency_mode()
21941 for_each_ndev(cfg, iter, next) { in wl_cfg80211_get_concurrency_mode()
21943 if (wl_get_drv_status(cfg, CONNECTED, iter->ndev)) { in wl_cfg80211_get_concurrency_mode()
21978 wl_cfg80211_bssload_report_event_handler(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev, in wl_cfg80211_bssload_report_event_handler() argument
21987 struct net_device *ndev = bcmcfg_to_prmry_ndev(cfg); in wl_cfg80211_bssload_report_event_handler()
21991 struct wiphy *wiphy = bcmcfg_to_wiphy(cfg); in wl_cfg80211_bssload_report_event_handler()
22046 struct bcm_cfg80211 *cfg; in wl_cfg80211_start_bssload_report() local
22052 cfg = wl_get_cfg(ndev); in wl_cfg80211_start_bssload_report()
22053 if (!cfg) { in wl_cfg80211_start_bssload_report()
22068 sizeof(wl_bssload_cfg_t), cfg->ioctl_buf, WLC_IOCTL_SMLEN, &cfg->ioctl_buf_sync); in wl_cfg80211_start_bssload_report()
22081 struct bcm_cfg80211 *cfg; in wl_cfg80211_config_suspend_events() local
22092 cfg = wl_get_cfg(ndev); in wl_cfg80211_config_suspend_events()
22093 if (!cfg) { in wl_cfg80211_config_suspend_events()
22097 mutex_lock(&cfg->event_sync); in wl_cfg80211_config_suspend_events()
22147 mutex_unlock(&cfg->event_sync); in wl_cfg80211_config_suspend_events()
22157 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_update_ft_ies() local
22158 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_update_ft_ies()
22177 struct bcm_cfg80211 *cfg; in wl_cfg80211_wips_event_ext() local
22181 cfg = wl_cfg80211_get_bcmcfg(); in wl_cfg80211_wips_event_ext()
22182 if (!cfg || !cfg->wdev) { in wl_cfg80211_wips_event_ext()
22187 ndev = bcmcfg_to_prmry_ndev(cfg); in wl_cfg80211_wips_event_ext()
22188 wiphy = bcmcfg_to_wiphy(cfg); in wl_cfg80211_wips_event_ext()
22259 struct bcm_cfg80211 *cfg; in wl_cfg80211_check_in_progress() local
22265 cfg = wl_get_cfg(dev); in wl_cfg80211_check_in_progress()
22266 pri_dev = bcmcfg_to_prmry_ndev(cfg); in wl_cfg80211_check_in_progress()
22271 if (wl_get_drv_status_all(cfg, SCANNING)) { in wl_cfg80211_check_in_progress()
22274 start_time = GET_TS(cfg, scan_start); in wl_cfg80211_check_in_progress()
22275 } else if (wl_get_drv_status_all(cfg, CONNECTING)) { in wl_cfg80211_check_in_progress()
22278 start_time = GET_TS(cfg, conn_start); in wl_cfg80211_check_in_progress()
22280 wl_get_drv_status(cfg, CONNECTED, pri_dev) && in wl_cfg80211_check_in_progress()
22281 !wl_get_drv_status(cfg, AUTHORIZED, pri_dev)) { in wl_cfg80211_check_in_progress()
22284 start_time = GET_TS(cfg, authorize_start); in wl_cfg80211_check_in_progress()
22418 wl_cfg80211_start_mkeep_alive(struct bcm_cfg80211 *cfg, uint8 mkeep_alive_id, in wl_cfg80211_start_mkeep_alive() argument
22438 dhd_pub_t *dhd = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_start_mkeep_alive()
22440 primary_ndev = bcmcfg_to_prmry_ndev(cfg); in wl_cfg80211_start_mkeep_alive()
22451 if ((pbuf = MALLOCZ(cfg->osh, KA_TEMP_BUF_SIZE)) == NULL) { in wl_cfg80211_start_mkeep_alive()
22457 if ((pmac_frame = MALLOCZ(cfg->osh, pmac_frame_len)) == NULL) { in wl_cfg80211_start_mkeep_alive()
22468 sizeof(mkeep_alive_id), pbuf, KA_TEMP_BUF_SIZE, &cfg->ioctl_buf_sync); in wl_cfg80211_start_mkeep_alive()
22583 MFREE(cfg->osh, pmac_frame_begin, KA_FRAME_SIZE); in wl_cfg80211_start_mkeep_alive()
22586 MFREE(cfg->osh, pbuf, KA_TEMP_BUF_SIZE); in wl_cfg80211_start_mkeep_alive()
22592 wl_cfg80211_stop_mkeep_alive(struct bcm_cfg80211 *cfg, uint8 mkeep_alive_id) in wl_cfg80211_stop_mkeep_alive() argument
22600 dhd_pub_t *dhd = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_stop_mkeep_alive()
22601 primary_ndev = bcmcfg_to_prmry_ndev(cfg); in wl_cfg80211_stop_mkeep_alive()
22615 if ((pbuf = MALLOCZ(cfg->osh, KA_TEMP_BUF_SIZE)) == NULL) { in wl_cfg80211_stop_mkeep_alive()
22622 sizeof(mkeep_alive_id), pbuf, KA_TEMP_BUF_SIZE, &cfg->ioctl_buf_sync); in wl_cfg80211_stop_mkeep_alive()
22656 pbuf, KA_TEMP_BUF_SIZE, &cfg->ioctl_buf_sync); in wl_cfg80211_stop_mkeep_alive()
22663 MFREE(cfg->osh, pbuf, KA_TEMP_BUF_SIZE); in wl_cfg80211_stop_mkeep_alive()
22672 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_handle_macaddr_change() local
22677 wl_get_drv_status(cfg, CONNECTED, dev)) { in wl_cfg80211_handle_macaddr_change()
22685 while ((status = wl_get_drv_status(cfg, CONNECTED, dev)) && wait_cnt) { in wl_cfg80211_handle_macaddr_change()
22697 struct bcm_cfg80211 *cfg = wl_get_cfg(ndev); in wl_cfg80211_handle_hang_event() local
22698 dhd_pub_t *dhd = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_handle_hang_event()
22704 if (wl_get_drv_status(cfg, READY, ndev)) { in wl_cfg80211_handle_hang_event()
22736 wl_cfg80211_spmk_pmkdb_change_pmk_type(struct bcm_cfg80211 *cfg, pmkid_list_v3_t *pmk_list) in wl_cfg80211_spmk_pmkdb_change_pmk_type() argument
22741 if (!cfg || !cfg->spmk_info_list || !cfg->spmk_info_list->pmkids.count) { in wl_cfg80211_spmk_pmkdb_change_pmk_type()
22745 spmk_list = &cfg->spmk_info_list->pmkids; in wl_cfg80211_spmk_pmkdb_change_pmk_type()
22761 wl_cfg80211_spmk_pmkdb_del_spmk(struct bcm_cfg80211 *cfg, struct cfg80211_pmksa *pmksa) in wl_cfg80211_spmk_pmkdb_del_spmk() argument
22767 if (!cfg || !cfg->spmk_info_list || !cfg->spmk_info_list->pmkids.count) { in wl_cfg80211_spmk_pmkdb_del_spmk()
22771 spmk_list = &cfg->spmk_info_list->pmkids; in wl_cfg80211_spmk_pmkdb_del_spmk()
22793 wl_cfg80211_handle_set_ssid_complete(struct bcm_cfg80211 *cfg, wl_assoc_status_t *as, in wl_cfg80211_handle_set_ssid_complete() argument
22805 wl_get_connect_failed_status(cfg, event); in wl_cfg80211_handle_set_ssid_complete()
22821 wl_cfgnan_is_enabled(cfg) && in wl_cfg80211_handle_set_ssid_complete()
22822 wl_get_drv_status(cfg, CONNECTED, as->ndev)) { in wl_cfg80211_handle_set_ssid_complete()
22823 u8 *curbssid = wl_read_prof(cfg, as->ndev, WL_PROF_BSSID); in wl_cfg80211_handle_set_ssid_complete()
22825 wl_read_prof(cfg, as->ndev, WL_PROF_LATEST_BSSID); in wl_cfg80211_handle_set_ssid_complete()
22828 wl_cfgnan_get_stats(cfg); in wl_cfg80211_handle_set_ssid_complete()
22838 wl_notify_twt_event(struct bcm_cfg80211 *cfg, in wl_notify_twt_event() argument
22857 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_debug_data_dump() local
22859 dhd_pub_t *dhdp = (dhd_pub_t *)(cfg->pub); in wl_cfg80211_debug_data_dump()
22863 if ((!wl_get_drv_status(cfg, READY, bcmcfg_to_prmry_ndev(cfg)))) { in wl_cfg80211_debug_data_dump()
22878 rtnl_is_locked(), mutex_is_locked(&cfg->scan_sync), in wl_cfg80211_debug_data_dump()
22879 mutex_is_locked(&cfg->usr_sync), mutex_is_locked(&cfg->if_sync), in wl_cfg80211_debug_data_dump()
22880 mutex_is_locked(&cfg->event_sync), mutex_is_locked(&cfg->ioctl_buf_sync)); in wl_cfg80211_debug_data_dump()
22884 ret = snprintf(buf+len, buf_len-len, "nan:%d\n", mutex_is_locked(&cfg->nancfg->nan_sync)); in wl_cfg80211_debug_data_dump()
22899 ret = snprintf(buf+len, buf_len-len, "bcn_sync:%d\n", mutex_is_locked(&cfg->bcn_sync)); in wl_cfg80211_debug_data_dump()
22903 ret = snprintf(buf+len, buf_len-len, "tdls_sync:%d\n", mutex_is_locked(&cfg->tdls_sync)); in wl_cfg80211_debug_data_dump()
22906 ret = snprintf(buf+len, buf_len-len, "cfgdrv:%d\n", spin_is_locked(&cfg->cfgdrv_lock)); in wl_cfg80211_debug_data_dump()
22909 ret = snprintf(buf+len, buf_len-len, "vndr_oui:%d\n", spin_is_locked(&cfg->vndr_oui_sync)); in wl_cfg80211_debug_data_dump()
22912 ret = snprintf(buf+len, buf_len-len, "net_list:%d\n", spin_is_locked(&cfg->net_list_sync)); in wl_cfg80211_debug_data_dump()
22915 ret = snprintf(buf+len, buf_len-len, "eq_lock:%d\n", spin_is_locked(&cfg->eq_lock)); in wl_cfg80211_debug_data_dump()
22919 ret = snprintf(buf+len, buf_len-len, "wps:%d\n", spin_is_locked(&cfg->wps_sync)); in wl_cfg80211_debug_data_dump()
22923 cfg->eidx.in_progress, cfg->eidx.event_type); in wl_cfg80211_debug_data_dump()
22932 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_is_pmkid_available() local
22938 for (i = 0; i < cfg->pmk_list->pmkids.count; i++) { in wl_is_pmkid_available()
22939 if (!memcmp(bssid, &cfg->pmk_list->pmkids.pmkid[i].bssid, in wl_is_pmkid_available()
22949 wl_notify_start_auth(struct bcm_cfg80211 *cfg, in wl_notify_start_auth() argument
22953 struct net_device *ndev = cfgdev_to_wlc_ndev(cfgdev, cfg); in wl_notify_start_auth()
23014 err = wldev_iovar_setbuf(ndev, "assoc_mgr_cmd", (void *)&cmd, sizeof(cmd), cfg->ioctl_buf, in wl_notify_start_auth()
23015 WLC_IOCTL_SMLEN, &cfg->ioctl_buf_sync); in wl_notify_start_auth()
23024 wl_handle_auth_event(struct bcm_cfg80211 *cfg, struct net_device *ndev, in wl_handle_auth_event() argument
23041 if (wl_get_mode_by_netdev(cfg, ndev) == WL_INVALID) { in wl_handle_auth_event()
23055 body = (u8 *)MALLOCZ(cfg->osh, len); in wl_handle_auth_event()
23063 NULL, 0, cfg->ioctl_buf, WLC_IOCTL_SMLEN, bsscfgidx, &cfg->ioctl_buf_sync); in wl_handle_auth_event()
23065 MFREE(cfg->osh, body, len); in wl_handle_auth_event()
23069 (void)memcpy_s(da.octet, ETHER_ADDR_LEN, cfg->ioctl_buf, ETHER_ADDR_LEN); in wl_handle_auth_event()
23079 MFREE(cfg->osh, body, len); in wl_handle_auth_event()
23086 MFREE(cfg->osh, body, len); in wl_handle_auth_event()
23095 err = wl_frame_get_mgmt(cfg, FC_AUTH, &da, &e->addr, &bssid, in wl_handle_auth_event()
23110 MFREE(cfg->osh, mgmt_frame, len); in wl_handle_auth_event()
23114 MFREE(cfg->osh, body, body_len); in wl_handle_auth_event()
23126 struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); in wl_cfg80211_external_auth() local
23142 cfg->ioctl_buf, WLC_IOCTL_SMLEN, &cfg->ioctl_buf_sync); in wl_cfg80211_external_auth()
23152 struct bcm_cfg80211 *cfg, const u8 *buf, size_t len, s32 bssidx, u64 *cookie) in wl_cfg80211_mgmt_auth_tx() argument
23161 ambuf = MALLOCZ(cfg->osh, param_len); in wl_cfg80211_mgmt_auth_tx()
23177 cfg->ioctl_buf, WLC_IOCTL_MEDLEN, &cfg->ioctl_buf_sync); in wl_cfg80211_mgmt_auth_tx()
23190 MFREE(cfg->osh, ambuf, param_len); in wl_cfg80211_mgmt_auth_tx()
23200 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_autochannel() local
23204 sscanf(command, "%*s %d", &cfg->autochannel); in wl_cfg80211_autochannel()
23206 if (cfg->autochannel == 0) { in wl_cfg80211_autochannel()
23207 cfg->best_2g_ch = 0; in wl_cfg80211_autochannel()
23208 cfg->best_5g_ch = 0; in wl_cfg80211_autochannel()
23209 } else if (cfg->autochannel == 2) { in wl_cfg80211_autochannel()
23211 cfg->best_2g_ch, cfg->best_5g_ch); in wl_cfg80211_autochannel()
23221 wl_cfg80211_static_if(struct bcm_cfg80211 *cfg, struct net_device *ndev) in wl_cfg80211_static_if() argument
23225 if (!cfg) in wl_cfg80211_static_if()
23229 if (cfg->static_ndev[i] == ndev) in wl_cfg80211_static_if()
23237 wl_cfg80211_static_ifidx(struct bcm_cfg80211 *cfg, struct net_device *ndev) in wl_cfg80211_static_ifidx() argument
23241 if (!cfg) in wl_cfg80211_static_ifidx()
23245 if (cfg->static_ndev[i] == ndev) in wl_cfg80211_static_ifidx()
23253 wl_cfg80211_static_if_active(struct bcm_cfg80211 *cfg) in wl_cfg80211_static_if_active() argument
23257 if (!cfg) in wl_cfg80211_static_if_active()
23261 if (cfg->static_ndev[i] && (cfg->static_ndev_state[i] & NDEV_STATE_FW_IF_CREATED)) in wl_cfg80211_static_if_active()
23262 return cfg->static_ndev[i]; in wl_cfg80211_static_if_active()
23269 wl_cfg80211_static_if_name(struct bcm_cfg80211 *cfg, const char *name) in wl_cfg80211_static_if_name() argument
23273 if (!cfg) in wl_cfg80211_static_if_name()
23277 if (cfg->static_ndev[i] && (!strncmp(cfg->static_ndev[i]->name, name, strlen(name)))) in wl_cfg80211_static_if_name()
23287 struct bcm_cfg80211 *cfg = wl_get_cfg(dev); in wl_cfg80211_static_if_dev_close() local
23290 if (!cfg) in wl_cfg80211_static_if_dev_close()
23294 if (cfg->static_ndev[i] && (cfg->static_ndev[i]->flags & IFF_UP)) in wl_cfg80211_static_if_dev_close()
23295 dev_close(cfg->static_ndev[i]); in wl_cfg80211_static_if_dev_close()