Lines Matching full:local

44 static inline void ASSERT_WORK_MTX(struct ieee80211_local *local)  in ASSERT_WORK_MTX()  argument
46 lockdep_assert_held(&local->mtx); in ASSERT_WORK_MTX()
59 static void run_again(struct ieee80211_local *local, in run_again() argument
62 ASSERT_WORK_MTX(local); in run_again()
64 if (!timer_pending(&local->work_timer) || in run_again()
65 time_before(timeout, local->work_timer.expires)) in run_again()
66 mod_timer(&local->work_timer, timeout); in run_again()
171 struct ieee80211_local *local = sdata->local; in ieee80211_send_assoc() local
181 sband = local->hw.wiphy->bands[wk->chan->band]; in ieee80211_send_assoc()
203 skb = alloc_skb(local->hw.extra_tx_headroom + in ieee80211_send_assoc()
216 skb_reserve(skb, local->hw.extra_tx_headroom); in ieee80211_send_assoc()
221 if (!(local->hw.flags & IEEE80211_HW_2GHZ_SHORT_SLOT_INCAPABLE)) in ieee80211_send_assoc()
223 if (!(local->hw.flags & IEEE80211_HW_2GHZ_SHORT_PREAMBLE_INCAPABLE)) in ieee80211_send_assoc()
231 (local->hw.flags & IEEE80211_HW_SPECTRUM_MGMT)) in ieee80211_send_assoc()
246 cpu_to_le16(local->hw.conf.listen_interval); in ieee80211_send_assoc()
255 cpu_to_le16(local->hw.conf.listen_interval); in ieee80211_send_assoc()
339 local->hw.queues >= 4) in ieee80211_send_assoc()
352 if (wk->assoc.wmm_used && local->hw.queues >= 4) { in ieee80211_send_assoc()
354 qos_info = local->uapsd_queues; in ieee80211_send_assoc()
355 qos_info |= (local->uapsd_max_sp_len << in ieee80211_send_assoc()
384 static void ieee80211_remove_auth_bss(struct ieee80211_local *local, in ieee80211_remove_auth_bss() argument
393 cbss = cfg80211_get_bss(local->hw.wiphy, wk->chan, wk->filter_ta, in ieee80211_remove_auth_bss()
400 cfg80211_unlink_bss(local->hw.wiphy, cbss); in ieee80211_remove_auth_bss()
408 struct ieee80211_local *local = sdata->local; in ieee80211_direct_probe() local
411 int ret = drv_tx_sync(local, sdata, wk->filter_ta, in ieee80211_direct_probe()
427 ieee80211_remove_auth_bss(local, wk); in ieee80211_direct_probe()
445 run_again(local, wk->timeout); in ieee80211_direct_probe()
455 struct ieee80211_local *local = sdata->local; in ieee80211_authenticate() local
458 int ret = drv_tx_sync(local, sdata, wk->filter_ta, in ieee80211_authenticate()
474 ieee80211_remove_auth_bss(local, wk); in ieee80211_authenticate()
487 run_again(local, wk->timeout); in ieee80211_authenticate()
496 struct ieee80211_local *local = sdata->local; in ieee80211_associate() local
499 int ret = drv_tx_sync(local, sdata, wk->filter_ta, in ieee80211_associate()
517 cfg80211_unlink_bss(local->hw.wiphy, wk->assoc.bss); in ieee80211_associate()
527 run_again(local, wk->timeout); in ieee80211_associate()
659 struct ieee80211_local *local = sdata->local; in ieee80211_rx_mgmt_assoc_resp() local
698 run_again(local, wk->timeout); in ieee80211_rx_mgmt_assoc_resp()
717 struct ieee80211_local *local = sdata->local; in ieee80211_rx_mgmt_probe_resp() local
720 ASSERT_WORK_MTX(local); in ieee80211_rx_mgmt_probe_resp()
741 struct ieee80211_local *local = sdata->local; in ieee80211_rx_mgmt_beacon() local
743 ASSERT_WORK_MTX(local); in ieee80211_rx_mgmt_beacon()
755 static void ieee80211_work_rx_queued_mgmt(struct ieee80211_local *local, in ieee80211_work_rx_queued_mgmt() argument
768 mutex_lock(&local->mtx); in ieee80211_work_rx_queued_mgmt()
770 list_for_each_entry(wk, &local->work_list, list) { in ieee80211_work_rx_queued_mgmt()
844 mutex_unlock(&local->mtx); in ieee80211_work_rx_queued_mgmt()
856 mutex_lock(&local->mtx); in ieee80211_work_rx_queued_mgmt()
857 list_add_tail(&wk->list, &local->work_list); in ieee80211_work_rx_queued_mgmt()
858 mutex_unlock(&local->mtx); in ieee80211_work_rx_queued_mgmt()
867 struct ieee80211_local *local = (void *) data; in ieee80211_work_timer() local
869 if (local->quiescing) in ieee80211_work_timer()
872 ieee80211_queue_work(&local->hw, &local->work_work); in ieee80211_work_timer()
877 struct ieee80211_local *local = in ieee80211_work_work() local
885 if (local->scanning) in ieee80211_work_work()
892 if (WARN(local->suspended, "work scheduled while going to suspend\n")) in ieee80211_work_work()
896 while ((skb = skb_dequeue(&local->work_skb_queue))) in ieee80211_work_work()
897 ieee80211_work_rx_queued_mgmt(local, skb); in ieee80211_work_work()
899 mutex_lock(&local->mtx); in ieee80211_work_work()
901 ieee80211_recalc_idle(local); in ieee80211_work_work()
903 list_for_each_entry_safe(wk, tmp, &local->work_list, list) { in ieee80211_work_work()
907 if (!started && local->tmp_channel && in ieee80211_work_work()
908 wk->chan == local->tmp_channel && in ieee80211_work_work()
909 wk->chan_type == local->tmp_channel_type) { in ieee80211_work_work()
914 if (!started && !local->tmp_channel) { in ieee80211_work_work()
915 ieee80211_offchannel_stop_vifs(local, true); in ieee80211_work_work()
917 local->tmp_channel = wk->chan; in ieee80211_work_work()
918 local->tmp_channel_type = wk->chan_type; in ieee80211_work_work()
920 ieee80211_hw_config(local, 0); in ieee80211_work_work()
936 run_again(local, wk->timeout); in ieee80211_work_work()
974 run_again(local, wk->timeout); in ieee80211_work_work()
986 list_for_each_entry(wk, &local->work_list, list) { in ieee80211_work_work()
989 if (wk->chan != local->tmp_channel || in ieee80211_work_work()
990 wk->chan_type != local->tmp_channel_type) in ieee80211_work_work()
995 if (!remain_off_channel && local->tmp_channel) { in ieee80211_work_work()
996 local->tmp_channel = NULL; in ieee80211_work_work()
997 ieee80211_hw_config(local, 0); in ieee80211_work_work()
999 ieee80211_offchannel_return(local, true); in ieee80211_work_work()
1002 run_again(local, jiffies + HZ/2); in ieee80211_work_work()
1005 if (list_empty(&local->work_list) && local->scan_req && in ieee80211_work_work()
1006 !local->scanning) in ieee80211_work_work()
1007 ieee80211_queue_delayed_work(&local->hw, in ieee80211_work_work()
1008 &local->scan_work, in ieee80211_work_work()
1011 ieee80211_recalc_idle(local); in ieee80211_work_work()
1013 mutex_unlock(&local->mtx); in ieee80211_work_work()
1024 struct ieee80211_local *local; in ieee80211_add_work() local
1040 local = wk->sdata->local; in ieee80211_add_work()
1041 mutex_lock(&local->mtx); in ieee80211_add_work()
1042 list_add_tail(&wk->list, &local->work_list); in ieee80211_add_work()
1043 mutex_unlock(&local->mtx); in ieee80211_add_work()
1045 ieee80211_queue_work(&local->hw, &local->work_work); in ieee80211_add_work()
1048 void ieee80211_work_init(struct ieee80211_local *local) in ieee80211_work_init() argument
1050 INIT_LIST_HEAD(&local->work_list); in ieee80211_work_init()
1051 setup_timer(&local->work_timer, ieee80211_work_timer, in ieee80211_work_init()
1052 (unsigned long)local); in ieee80211_work_init()
1053 INIT_WORK(&local->work_work, ieee80211_work_work); in ieee80211_work_init()
1054 skb_queue_head_init(&local->work_skb_queue); in ieee80211_work_init()
1059 struct ieee80211_local *local = sdata->local; in ieee80211_work_purge() local
1063 mutex_lock(&local->mtx); in ieee80211_work_purge()
1064 list_for_each_entry(wk, &local->work_list, list) { in ieee80211_work_purge()
1072 mutex_unlock(&local->mtx); in ieee80211_work_purge()
1076 ieee80211_work_work(&local->work_work); in ieee80211_work_purge()
1078 mutex_lock(&local->mtx); in ieee80211_work_purge()
1079 list_for_each_entry(wk, &local->work_list, list) { in ieee80211_work_purge()
1085 mutex_unlock(&local->mtx); in ieee80211_work_purge()
1091 struct ieee80211_local *local = sdata->local; in ieee80211_work_rx_mgmt() local
1102 list_for_each_entry_rcu(wk, &local->work_list, list) { in ieee80211_work_rx_mgmt()
1116 skb_queue_tail(&local->work_skb_queue, skb); in ieee80211_work_rx_mgmt()
1117 ieee80211_queue_work(&local->hw, &local->work_work); in ieee80211_work_rx_mgmt()
1167 struct ieee80211_local *local = sdata->local; in ieee80211_wk_cancel_remain_on_channel() local
1171 mutex_lock(&local->mtx); in ieee80211_wk_cancel_remain_on_channel()
1172 list_for_each_entry_safe(wk, tmp, &local->work_list, list) { in ieee80211_wk_cancel_remain_on_channel()
1179 mutex_unlock(&local->mtx); in ieee80211_wk_cancel_remain_on_channel()
1184 ieee80211_queue_work(&local->hw, &local->work_work); in ieee80211_wk_cancel_remain_on_channel()