Lines Matching refs:local

77 static int sta_info_hash_del(struct ieee80211_local *local,  in sta_info_hash_del()  argument
80 return rhashtable_remove_fast(&local->sta_hash, &sta->hash_node, in sta_info_hash_del()
89 struct ieee80211_local *local = sdata->local; in __cleanup_single_sta() local
115 ieee80211_purge_tx_queue(&local->hw, &txqi->queue); in __cleanup_single_sta()
121 local->total_ps_buffered -= skb_queue_len(&sta->ps_tx_buf[ac]); in __cleanup_single_sta()
122 ieee80211_purge_tx_queue(&local->hw, &sta->ps_tx_buf[ac]); in __cleanup_single_sta()
123 ieee80211_purge_tx_queue(&local->hw, &sta->tx_filtered[ac]); in __cleanup_single_sta()
142 ieee80211_purge_tx_queue(&local->hw, &tid_tx->pending); in __cleanup_single_sta()
150 struct ieee80211_local *local = sdata->local; in cleanup_single_sta() local
153 sta_info_free(local, sta); in cleanup_single_sta()
160 struct ieee80211_local *local = sdata->local; in sta_info_get() local
166 tbl = rht_dereference_rcu(local->sta_hash.tbl, &local->sta_hash); in sta_info_get()
168 for_each_sta_info(local, tbl, addr, sta, tmp) { in sta_info_get()
188 struct ieee80211_local *local = sdata->local; in sta_info_get_bss() local
194 tbl = rht_dereference_rcu(local->sta_hash.tbl, &local->sta_hash); in sta_info_get_bss()
196 for_each_sta_info(local, tbl, addr, sta, tmp) { in sta_info_get_bss()
213 struct ieee80211_local *local = sdata->local; in sta_info_get_by_idx() local
217 list_for_each_entry_rcu(sta, &local->sta_list, list) { in sta_info_get_by_idx()
241 void sta_info_free(struct ieee80211_local *local, struct sta_info *sta) in sta_info_free() argument
255 static int sta_info_hash_add(struct ieee80211_local *local, in sta_info_hash_add() argument
258 return rhashtable_insert_fast(&local->sta_hash, &sta->hash_node, in sta_info_hash_add()
281 static int sta_prepare_rate_control(struct ieee80211_local *local, in sta_prepare_rate_control() argument
284 if (local->hw.flags & IEEE80211_HW_HAS_RATE_CONTROL) in sta_prepare_rate_control()
287 sta->rate_ctrl = local->rate_ctrl; in sta_prepare_rate_control()
299 struct ieee80211_local *local = sdata->local; in sta_info_alloc() local
300 struct ieee80211_hw *hw = &local->hw; in sta_info_alloc()
322 sta->local = local; in sta_info_alloc()
337 if (local->ops->wake_tx_queue) { in sta_info_alloc()
353 if (sta_prepare_rate_control(local, sta, gfp)) in sta_info_alloc()
429 static int sta_info_insert_drv_state(struct ieee80211_local *local, in sta_info_insert_drv_state() argument
437 err = drv_sta_state(local, sdata, sta, state, state + 1); in sta_info_insert_drv_state()
447 if (!local->ops->sta_add) in sta_info_insert_drv_state()
461 WARN_ON(drv_sta_state(local, sdata, sta, state, state - 1)); in sta_info_insert_drv_state()
473 struct ieee80211_local *local = sta->local; in sta_info_insert_finish() local
478 lockdep_assert_held(&local->sta_mtx); in sta_info_insert_finish()
486 local->num_sta++; in sta_info_insert_finish()
487 local->sta_generation++; in sta_info_insert_finish()
494 err = sta_info_hash_add(local, sta); in sta_info_insert_finish()
498 list_add_tail_rcu(&sta->list, &local->sta_list); in sta_info_insert_finish()
501 err = sta_info_insert_drv_state(local, sdata, sta); in sta_info_insert_finish()
515 sinfo.generation = local->sta_generation; in sta_info_insert_finish()
522 mutex_unlock(&local->sta_mtx); in sta_info_insert_finish()
529 sta_info_hash_del(local, sta); in sta_info_insert_finish()
532 local->num_sta--; in sta_info_insert_finish()
536 mutex_unlock(&local->sta_mtx); in sta_info_insert_finish()
543 struct ieee80211_local *local = sta->local; in sta_info_insert_rcu() local
554 mutex_lock(&local->sta_mtx); in sta_info_insert_rcu()
562 sta_info_free(local, sta); in sta_info_insert_rcu()
622 struct ieee80211_local *local = sta->local; in __sta_info_recalc_tim() local
647 if (local->hw.flags & IEEE80211_HW_AP_LINK_PS) in __sta_info_recalc_tim()
685 spin_lock_bh(&local->tim_lock); in __sta_info_recalc_tim()
695 if (local->ops->set_tim && !WARN_ON(sta->dead)) { in __sta_info_recalc_tim()
696 local->tim_in_locked_section = true; in __sta_info_recalc_tim()
697 drv_set_tim(local, &sta->sta, indicate_tim); in __sta_info_recalc_tim()
698 local->tim_in_locked_section = false; in __sta_info_recalc_tim()
702 spin_unlock_bh(&local->tim_lock); in __sta_info_recalc_tim()
730 static bool sta_info_cleanup_expire_buffered_ac(struct ieee80211_local *local, in sta_info_cleanup_expire_buffered_ac() argument
760 ieee80211_free_txskb(&local->hw, skb); in sta_info_cleanup_expire_buffered_ac()
786 local->total_ps_buffered--; in sta_info_cleanup_expire_buffered_ac()
789 ieee80211_free_txskb(&local->hw, skb); in sta_info_cleanup_expire_buffered_ac()
808 static bool sta_info_cleanup_expire_buffered(struct ieee80211_local *local, in sta_info_cleanup_expire_buffered() argument
821 sta_info_cleanup_expire_buffered_ac(local, sta, ac); in sta_info_cleanup_expire_buffered()
828 struct ieee80211_local *local; in __sta_info_destroy_part1() local
837 local = sta->local; in __sta_info_destroy_part1()
840 lockdep_assert_held(&local->sta_mtx); in __sta_info_destroy_part1()
851 ret = sta_info_hash_del(local, sta); in __sta_info_destroy_part1()
860 drv_tdls_cancel_channel_switch(local, sdata, &sta->sta); in __sta_info_destroy_part1()
866 drv_sta_pre_rcu_remove(local, sta->sdata, sta); in __sta_info_destroy_part1()
877 struct ieee80211_local *local = sta->local; in __sta_info_destroy_part2() local
888 lockdep_assert_held(&local->sta_mtx); in __sta_info_destroy_part2()
891 ieee80211_free_sta_keys(local, sta); in __sta_info_destroy_part2()
898 local->num_sta--; in __sta_info_destroy_part2()
899 local->sta_generation++; in __sta_info_destroy_part2()
910 ret = drv_sta_state(local, sdata, sta, IEEE80211_STA_NONE, in __sta_info_destroy_part2()
946 mutex_lock(&sdata->local->sta_mtx); in sta_info_destroy_addr()
949 mutex_unlock(&sdata->local->sta_mtx); in sta_info_destroy_addr()
960 mutex_lock(&sdata->local->sta_mtx); in sta_info_destroy_addr_bss()
963 mutex_unlock(&sdata->local->sta_mtx); in sta_info_destroy_addr_bss()
970 struct ieee80211_local *local = (struct ieee80211_local *) data; in sta_info_cleanup() local
975 list_for_each_entry_rcu(sta, &local->sta_list, list) in sta_info_cleanup()
976 if (sta_info_cleanup_expire_buffered(local, sta)) in sta_info_cleanup()
980 if (local->quiescing) in sta_info_cleanup()
986 mod_timer(&local->sta_cleanup, in sta_info_cleanup()
995 int sta_info_init(struct ieee80211_local *local) in sta_info_init() argument
999 err = rhashtable_init(&local->sta_hash, &sta_rht_params); in sta_info_init()
1003 spin_lock_init(&local->tim_lock); in sta_info_init()
1004 mutex_init(&local->sta_mtx); in sta_info_init()
1005 INIT_LIST_HEAD(&local->sta_list); in sta_info_init()
1007 setup_timer(&local->sta_cleanup, sta_info_cleanup, in sta_info_init()
1008 (unsigned long)local); in sta_info_init()
1012 void sta_info_stop(struct ieee80211_local *local) in sta_info_stop() argument
1014 del_timer_sync(&local->sta_cleanup); in sta_info_stop()
1015 rhashtable_destroy(&local->sta_hash); in sta_info_stop()
1021 struct ieee80211_local *local = sdata->local; in __sta_info_flush() local
1031 mutex_lock(&local->sta_mtx); in __sta_info_flush()
1032 list_for_each_entry_safe(sta, tmp, &local->sta_list, list) { in __sta_info_flush()
1046 mutex_unlock(&local->sta_mtx); in __sta_info_flush()
1054 struct ieee80211_local *local = sdata->local; in ieee80211_sta_expire() local
1057 mutex_lock(&local->sta_mtx); in ieee80211_sta_expire()
1059 list_for_each_entry_safe(sta, tmp, &local->sta_list, list) { in ieee80211_sta_expire()
1075 mutex_unlock(&local->sta_mtx); in ieee80211_sta_expire()
1082 struct ieee80211_local *local = hw_to_local(hw); in ieee80211_find_sta_by_ifaddr() local
1087 tbl = rht_dereference_rcu(local->sta_hash.tbl, &local->sta_hash); in ieee80211_find_sta_by_ifaddr()
1093 for_each_sta_info(local, tbl, addr, sta, tmp) { in ieee80211_find_sta_by_ifaddr()
1129 struct ieee80211_local *local = sdata->local; in ieee80211_sta_ps_deliver_wakeup() local
1152 if (!(local->hw.flags & IEEE80211_HW_AP_LINK_PS)) in ieee80211_sta_ps_deliver_wakeup()
1153 drv_sta_notify(local, sdata, STA_NOTIFY_AWAKE, &sta->sta); in ieee80211_sta_ps_deliver_wakeup()
1162 drv_wake_tx_queue(local, txqi); in ieee80211_sta_ps_deliver_wakeup()
1188 ieee80211_add_pending_skbs(local, &pending); in ieee80211_sta_ps_deliver_wakeup()
1216 local->total_ps_buffered -= buffered; in ieee80211_sta_ps_deliver_wakeup()
1230 struct ieee80211_local *local = sdata->local; in ieee80211_send_null_response() local
1250 skb = dev_alloc_skb(local->hw.extra_tx_headroom + size); in ieee80211_send_null_response()
1254 skb_reserve(skb, local->hw.extra_tx_headroom); in ieee80211_send_null_response()
1289 drv_allow_buffered_frames(local, sta, BIT(tid), 1, in ieee80211_send_null_response()
1324 struct ieee80211_local *local = sdata->local; in ieee80211_sta_ps_deliver_response() local
1375 local->total_ps_buffered--; in ieee80211_sta_ps_deliver_response()
1509 drv_allow_buffered_frames(local, sta, tids, num, in ieee80211_sta_ps_deliver_response()
1512 ieee80211_add_pending_skbs(local, &pending); in ieee80211_sta_ps_deliver_response()
1534 drv_release_buffered_frames(local, sta, driver_release_tids, in ieee80211_sta_ps_deliver_response()
1617 trace_api_sta_block_awake(sta->local, pubsta, block); in ieee80211_sta_block_awake()
1645 struct ieee80211_local *local = sta->local; in ieee80211_sta_eosp() local
1647 trace_api_eosp(local, pubsta); in ieee80211_sta_eosp()
1661 trace_api_sta_set_buffered(sta->local, pubsta, tid, buffered); in ieee80211_sta_set_buffered()
1714 int err = drv_sta_state(sta->local, sta->sdata, sta, in sta_info_move_state()
1800 struct ieee80211_local *local = sdata->local; in sta_set_sinfo() local
1807 ref = local->rate_ctrl; in sta_set_sinfo()
1809 sinfo->generation = sdata->local->sta_generation; in sta_set_sinfo()
1818 drv_sta_statistics(local, sdata, &sta->sta, sinfo); in sta_set_sinfo()
1877 if ((sta->local->hw.flags & IEEE80211_HW_SIGNAL_DBM) || in sta_set_sinfo()
1878 (sta->local->hw.flags & IEEE80211_HW_SIGNAL_UNSPEC)) { in sta_set_sinfo()
1930 local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS) { in sta_set_sinfo()
1938 local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS) { in sta_set_sinfo()
2004 thr = drv_get_expected_throughput(local, &sta->sta); in sta_set_sinfo()