Lines Matching refs:sta
71 .key_offset = offsetof(struct sta_info, sta.addr),
78 struct sta_info *sta) in sta_info_hash_del() argument
80 return rhashtable_remove_fast(&local->sta_hash, &sta->hash_node, in sta_info_hash_del()
84 static void __cleanup_single_sta(struct sta_info *sta) in __cleanup_single_sta() argument
88 struct ieee80211_sub_if_data *sdata = sta->sdata; in __cleanup_single_sta()
92 if (test_sta_flag(sta, WLAN_STA_PS_STA) || in __cleanup_single_sta()
93 test_sta_flag(sta, WLAN_STA_PS_DRIVER) || in __cleanup_single_sta()
94 test_sta_flag(sta, WLAN_STA_PS_DELIVER)) { in __cleanup_single_sta()
95 if (sta->sdata->vif.type == NL80211_IFTYPE_AP || in __cleanup_single_sta()
96 sta->sdata->vif.type == NL80211_IFTYPE_AP_VLAN) in __cleanup_single_sta()
103 clear_sta_flag(sta, WLAN_STA_PS_STA); in __cleanup_single_sta()
104 clear_sta_flag(sta, WLAN_STA_PS_DRIVER); in __cleanup_single_sta()
105 clear_sta_flag(sta, WLAN_STA_PS_DELIVER); in __cleanup_single_sta()
110 if (sta->sta.txq[0]) { in __cleanup_single_sta()
111 for (i = 0; i < ARRAY_SIZE(sta->sta.txq); i++) { in __cleanup_single_sta()
112 struct txq_info *txqi = to_txq_info(sta->sta.txq[i]); 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()
127 mesh_sta_cleanup(sta); in __cleanup_single_sta()
129 cancel_work_sync(&sta->drv_deliver_wk); in __cleanup_single_sta()
138 kfree(sta->ampdu_mlme.tid_start_tx[i]); in __cleanup_single_sta()
139 tid_tx = rcu_dereference_raw(sta->ampdu_mlme.tid_tx[i]); in __cleanup_single_sta()
147 static void cleanup_single_sta(struct sta_info *sta) in cleanup_single_sta() argument
149 struct ieee80211_sub_if_data *sdata = sta->sdata; in cleanup_single_sta()
152 __cleanup_single_sta(sta); in cleanup_single_sta()
153 sta_info_free(local, sta); in cleanup_single_sta()
161 struct sta_info *sta; in sta_info_get() local
168 for_each_sta_info(local, tbl, addr, sta, tmp) { in sta_info_get()
169 if (sta->sdata == sdata) { in sta_info_get()
174 return sta; in sta_info_get()
189 struct sta_info *sta; in sta_info_get_bss() local
196 for_each_sta_info(local, tbl, addr, sta, tmp) { in sta_info_get_bss()
197 if (sta->sdata == sdata || in sta_info_get_bss()
198 (sta->sdata->bss && sta->sdata->bss == sdata->bss)) { in sta_info_get_bss()
203 return sta; in sta_info_get_bss()
214 struct sta_info *sta; in sta_info_get_by_idx() local
217 list_for_each_entry_rcu(sta, &local->sta_list, list) { in sta_info_get_by_idx()
218 if (sdata != sta->sdata) in sta_info_get_by_idx()
224 return sta; in sta_info_get_by_idx()
241 void sta_info_free(struct ieee80211_local *local, struct sta_info *sta) in sta_info_free() argument
243 if (sta->rate_ctrl) in sta_info_free()
244 rate_control_free_sta(sta); in sta_info_free()
246 sta_dbg(sta->sdata, "Destroyed STA %pM\n", sta->sta.addr); in sta_info_free()
248 if (sta->sta.txq[0]) in sta_info_free()
249 kfree(to_txq_info(sta->sta.txq[0])); in sta_info_free()
250 kfree(rcu_dereference_raw(sta->sta.rates)); in sta_info_free()
251 kfree(sta); in sta_info_free()
256 struct sta_info *sta) in sta_info_hash_add() argument
258 return rhashtable_insert_fast(&local->sta_hash, &sta->hash_node, in sta_info_hash_add()
264 struct sta_info *sta; in sta_deliver_ps_frames() local
266 sta = container_of(wk, struct sta_info, drv_deliver_wk); in sta_deliver_ps_frames()
268 if (sta->dead) in sta_deliver_ps_frames()
272 if (!test_sta_flag(sta, WLAN_STA_PS_STA)) in sta_deliver_ps_frames()
273 ieee80211_sta_ps_deliver_wakeup(sta); in sta_deliver_ps_frames()
274 else if (test_and_clear_sta_flag(sta, WLAN_STA_PSPOLL)) in sta_deliver_ps_frames()
275 ieee80211_sta_ps_deliver_poll_response(sta); in sta_deliver_ps_frames()
276 else if (test_and_clear_sta_flag(sta, WLAN_STA_UAPSD)) in sta_deliver_ps_frames()
277 ieee80211_sta_ps_deliver_uapsd(sta); in sta_deliver_ps_frames()
282 struct sta_info *sta, gfp_t gfp) in sta_prepare_rate_control() argument
287 sta->rate_ctrl = local->rate_ctrl; in sta_prepare_rate_control()
288 sta->rate_ctrl_priv = rate_control_alloc_sta(sta->rate_ctrl, in sta_prepare_rate_control()
289 &sta->sta, gfp); in sta_prepare_rate_control()
290 if (!sta->rate_ctrl_priv) in sta_prepare_rate_control()
301 struct sta_info *sta; in sta_info_alloc() local
305 sta = kzalloc(sizeof(*sta) + hw->sta_data_size, gfp); in sta_info_alloc()
306 if (!sta) in sta_info_alloc()
309 spin_lock_init(&sta->lock); in sta_info_alloc()
310 spin_lock_init(&sta->ps_lock); in sta_info_alloc()
311 INIT_WORK(&sta->drv_deliver_wk, sta_deliver_ps_frames); in sta_info_alloc()
312 INIT_WORK(&sta->ampdu_mlme.work, ieee80211_ba_session_work); in sta_info_alloc()
313 mutex_init(&sta->ampdu_mlme.mtx); in sta_info_alloc()
317 init_timer(&sta->plink_timer); in sta_info_alloc()
318 sta->nonpeer_pm = NL80211_MESH_POWER_ACTIVE; in sta_info_alloc()
321 memcpy(sta->sta.addr, addr, ETH_ALEN); in sta_info_alloc()
322 sta->local = local; in sta_info_alloc()
323 sta->sdata = sdata; in sta_info_alloc()
324 sta->last_rx = jiffies; in sta_info_alloc()
326 sta->sta_state = IEEE80211_STA_NONE; in sta_info_alloc()
329 sta->reserved_tid = IEEE80211_TID_UNRESERVED; in sta_info_alloc()
332 sta->last_connected = uptime.tv_sec; in sta_info_alloc()
333 ewma_init(&sta->avg_signal, 1024, 8); in sta_info_alloc()
334 for (i = 0; i < ARRAY_SIZE(sta->chain_signal_avg); i++) in sta_info_alloc()
335 ewma_init(&sta->chain_signal_avg[i], 1024, 8); in sta_info_alloc()
342 txq_data = kcalloc(ARRAY_SIZE(sta->sta.txq), size, gfp); in sta_info_alloc()
346 for (i = 0; i < ARRAY_SIZE(sta->sta.txq); i++) { in sta_info_alloc()
349 ieee80211_init_tx_queue(sdata, sta, txq, i); in sta_info_alloc()
353 if (sta_prepare_rate_control(local, sta, gfp)) in sta_info_alloc()
362 sta->timer_to_tid[i] = i; in sta_info_alloc()
365 skb_queue_head_init(&sta->ps_tx_buf[i]); in sta_info_alloc()
366 skb_queue_head_init(&sta->tx_filtered[i]); in sta_info_alloc()
370 sta->last_seq_ctrl[i] = cpu_to_le16(USHRT_MAX); in sta_info_alloc()
372 sta->sta.smps_mode = IEEE80211_SMPS_OFF; in sta_info_alloc()
385 sta->known_smps_mode = IEEE80211_SMPS_OFF; in sta_info_alloc()
388 sta->known_smps_mode = IEEE80211_SMPS_STATIC; in sta_info_alloc()
391 sta->known_smps_mode = IEEE80211_SMPS_DYNAMIC; in sta_info_alloc()
398 sta_dbg(sdata, "Allocated STA %pM\n", sta->sta.addr); in sta_info_alloc()
400 return sta; in sta_info_alloc()
403 if (sta->sta.txq[0]) in sta_info_alloc()
404 kfree(to_txq_info(sta->sta.txq[0])); in sta_info_alloc()
406 kfree(sta); in sta_info_alloc()
410 static int sta_info_insert_check(struct sta_info *sta) in sta_info_insert_check() argument
412 struct ieee80211_sub_if_data *sdata = sta->sdata; in sta_info_insert_check()
422 if (WARN_ON(ether_addr_equal(sta->sta.addr, sdata->vif.addr) || in sta_info_insert_check()
423 is_multicast_ether_addr(sta->sta.addr))) in sta_info_insert_check()
431 struct sta_info *sta) in sta_info_insert_drv_state() argument
436 for (state = IEEE80211_STA_NOTEXIST; state < sta->sta_state; state++) { in sta_info_insert_drv_state()
437 err = drv_sta_state(local, sdata, sta, state, state + 1); in sta_info_insert_drv_state()
448 sta->uploaded = true; in sta_info_insert_drv_state()
455 sta->sta.addr, state + 1, err); in sta_info_insert_drv_state()
461 WARN_ON(drv_sta_state(local, sdata, sta, state, state - 1)); in sta_info_insert_drv_state()
471 static int sta_info_insert_finish(struct sta_info *sta) __acquires(RCU) in sta_info_insert_finish() argument
473 struct ieee80211_local *local = sta->local; in sta_info_insert_finish()
474 struct ieee80211_sub_if_data *sdata = sta->sdata; in sta_info_insert_finish()
481 if (sta_info_get_bss(sdata, sta->sta.addr)) { in sta_info_insert_finish()
491 set_sta_flag(sta, WLAN_STA_BLOCK_BA); 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()
505 set_sta_flag(sta, WLAN_STA_INSERTED); in sta_info_insert_finish()
507 clear_sta_flag(sta, WLAN_STA_BLOCK_BA); in sta_info_insert_finish()
510 ieee80211_sta_debugfs_add(sta); in sta_info_insert_finish()
511 rate_control_add_sta_debugfs(sta); in sta_info_insert_finish()
516 cfg80211_new_sta(sdata->dev, sta->sta.addr, &sinfo, GFP_KERNEL); in sta_info_insert_finish()
518 sta_dbg(sdata, "Inserted STA %pM\n", sta->sta.addr); in sta_info_insert_finish()
529 sta_info_hash_del(local, sta); in sta_info_insert_finish()
530 list_del_rcu(&sta->list); in sta_info_insert_finish()
534 __cleanup_single_sta(sta); in sta_info_insert_finish()
541 int sta_info_insert_rcu(struct sta_info *sta) __acquires(RCU) in sta_info_insert_rcu() argument
543 struct ieee80211_local *local = sta->local; in sta_info_insert_rcu()
548 err = sta_info_insert_check(sta); in sta_info_insert_rcu()
556 err = sta_info_insert_finish(sta); in sta_info_insert_rcu()
562 sta_info_free(local, sta); in sta_info_insert_rcu()
566 int sta_info_insert(struct sta_info *sta) in sta_info_insert() argument
568 int err = sta_info_insert_rcu(sta); in sta_info_insert()
620 static void __sta_info_recalc_tim(struct sta_info *sta, bool ignore_pending) in __sta_info_recalc_tim() argument
622 struct ieee80211_local *local = sta->local; in __sta_info_recalc_tim()
625 u8 ignore_for_tim = sta->sta.uapsd_queues; in __sta_info_recalc_tim()
629 if (sta->sdata->vif.type == NL80211_IFTYPE_AP || in __sta_info_recalc_tim()
630 sta->sdata->vif.type == NL80211_IFTYPE_AP_VLAN) { in __sta_info_recalc_tim()
631 if (WARN_ON_ONCE(!sta->sdata->bss)) in __sta_info_recalc_tim()
634 ps = &sta->sdata->bss->ps; in __sta_info_recalc_tim()
635 id = sta->sta.aid; in __sta_info_recalc_tim()
637 } else if (ieee80211_vif_is_mesh(&sta->sdata->vif)) { in __sta_info_recalc_tim()
638 ps = &sta->sdata->u.mesh.ps; in __sta_info_recalc_tim()
640 id = sta->plid % (IEEE80211_MAX_AID + 1); in __sta_info_recalc_tim()
650 if (sta->dead) in __sta_info_recalc_tim()
671 indicate_tim |= !skb_queue_empty(&sta->tx_filtered[ac]) || in __sta_info_recalc_tim()
672 !skb_queue_empty(&sta->ps_tx_buf[ac]); in __sta_info_recalc_tim()
679 sta->driver_buffered_tids & tids; in __sta_info_recalc_tim()
681 sta->txq_buffered_tids & tids; in __sta_info_recalc_tim()
695 if (local->ops->set_tim && !WARN_ON(sta->dead)) { in __sta_info_recalc_tim()
697 drv_set_tim(local, &sta->sta, indicate_tim); in __sta_info_recalc_tim()
705 void sta_info_recalc_tim(struct sta_info *sta) in sta_info_recalc_tim() argument
707 __sta_info_recalc_tim(sta, false); in sta_info_recalc_tim()
710 static bool sta_info_buffer_expired(struct sta_info *sta, struct sk_buff *skb) in sta_info_buffer_expired() argument
721 timeout = (sta->listen_interval * in sta_info_buffer_expired()
722 sta->sdata->vif.bss_conf.beacon_int * in sta_info_buffer_expired()
731 struct sta_info *sta, int ac) in sta_info_cleanup_expire_buffered_ac() argument
744 spin_lock_irqsave(&sta->tx_filtered[ac].lock, flags); in sta_info_cleanup_expire_buffered_ac()
745 skb = skb_peek(&sta->tx_filtered[ac]); in sta_info_cleanup_expire_buffered_ac()
746 if (sta_info_buffer_expired(sta, skb)) in sta_info_cleanup_expire_buffered_ac()
747 skb = __skb_dequeue(&sta->tx_filtered[ac]); in sta_info_cleanup_expire_buffered_ac()
750 spin_unlock_irqrestore(&sta->tx_filtered[ac].lock, flags); in sta_info_cleanup_expire_buffered_ac()
770 spin_lock_irqsave(&sta->ps_tx_buf[ac].lock, flags); in sta_info_cleanup_expire_buffered_ac()
771 skb = skb_peek(&sta->ps_tx_buf[ac]); in sta_info_cleanup_expire_buffered_ac()
772 if (sta_info_buffer_expired(sta, skb)) in sta_info_cleanup_expire_buffered_ac()
773 skb = __skb_dequeue(&sta->ps_tx_buf[ac]); in sta_info_cleanup_expire_buffered_ac()
776 spin_unlock_irqrestore(&sta->ps_tx_buf[ac].lock, flags); in sta_info_cleanup_expire_buffered_ac()
787 ps_dbg(sta->sdata, "Buffered frame expired (STA %pM)\n", in sta_info_cleanup_expire_buffered_ac()
788 sta->sta.addr); in sta_info_cleanup_expire_buffered_ac()
797 sta_info_recalc_tim(sta); in sta_info_cleanup_expire_buffered_ac()
804 return !(skb_queue_empty(&sta->ps_tx_buf[ac]) && in sta_info_cleanup_expire_buffered_ac()
805 skb_queue_empty(&sta->tx_filtered[ac])); in sta_info_cleanup_expire_buffered_ac()
809 struct sta_info *sta) in sta_info_cleanup_expire_buffered() argument
815 if (!sta->sdata->bss && in sta_info_cleanup_expire_buffered()
816 !ieee80211_vif_is_mesh(&sta->sdata->vif)) in sta_info_cleanup_expire_buffered()
821 sta_info_cleanup_expire_buffered_ac(local, sta, ac); in sta_info_cleanup_expire_buffered()
826 static int __must_check __sta_info_destroy_part1(struct sta_info *sta) in __sta_info_destroy_part1() argument
834 if (!sta) in __sta_info_destroy_part1()
837 local = sta->local; in __sta_info_destroy_part1()
838 sdata = sta->sdata; in __sta_info_destroy_part1()
848 set_sta_flag(sta, WLAN_STA_BLOCK_BA); in __sta_info_destroy_part1()
849 ieee80211_sta_tear_down_BA_sessions(sta, AGG_STOP_DESTROY_STA); in __sta_info_destroy_part1()
851 ret = sta_info_hash_del(local, sta); in __sta_info_destroy_part1()
859 if (test_sta_flag(sta, WLAN_STA_TDLS_OFF_CHANNEL)) { in __sta_info_destroy_part1()
860 drv_tdls_cancel_channel_switch(local, sdata, &sta->sta); in __sta_info_destroy_part1()
861 clear_sta_flag(sta, WLAN_STA_TDLS_OFF_CHANNEL); in __sta_info_destroy_part1()
864 list_del_rcu(&sta->list); in __sta_info_destroy_part1()
866 drv_sta_pre_rcu_remove(local, sta->sdata, sta); in __sta_info_destroy_part1()
869 rcu_access_pointer(sdata->u.vlan.sta) == sta) in __sta_info_destroy_part1()
870 RCU_INIT_POINTER(sdata->u.vlan.sta, NULL); in __sta_info_destroy_part1()
875 static void __sta_info_destroy_part2(struct sta_info *sta) in __sta_info_destroy_part2() argument
877 struct ieee80211_local *local = sta->local; in __sta_info_destroy_part2()
878 struct ieee80211_sub_if_data *sdata = sta->sdata; in __sta_info_destroy_part2()
891 ieee80211_free_sta_keys(local, sta); in __sta_info_destroy_part2()
894 __sta_info_recalc_tim(sta, true); in __sta_info_destroy_part2()
896 sta->dead = true; in __sta_info_destroy_part2()
901 while (sta->sta_state > IEEE80211_STA_NONE) { in __sta_info_destroy_part2()
902 ret = sta_info_move_state(sta, sta->sta_state - 1); in __sta_info_destroy_part2()
909 if (sta->uploaded) { in __sta_info_destroy_part2()
910 ret = drv_sta_state(local, sdata, sta, IEEE80211_STA_NONE, in __sta_info_destroy_part2()
915 sta_dbg(sdata, "Removed STA %pM\n", sta->sta.addr); in __sta_info_destroy_part2()
917 sta_set_sinfo(sta, &sinfo); in __sta_info_destroy_part2()
918 cfg80211_del_sta_sinfo(sdata->dev, sta->sta.addr, &sinfo, GFP_KERNEL); in __sta_info_destroy_part2()
920 rate_control_remove_sta_debugfs(sta); in __sta_info_destroy_part2()
921 ieee80211_sta_debugfs_remove(sta); in __sta_info_destroy_part2()
924 cleanup_single_sta(sta); in __sta_info_destroy_part2()
927 int __must_check __sta_info_destroy(struct sta_info *sta) in __sta_info_destroy() argument
929 int err = __sta_info_destroy_part1(sta); in __sta_info_destroy()
936 __sta_info_destroy_part2(sta); in __sta_info_destroy()
943 struct sta_info *sta; in sta_info_destroy_addr() local
947 sta = sta_info_get(sdata, addr); in sta_info_destroy_addr()
948 ret = __sta_info_destroy(sta); in sta_info_destroy_addr()
957 struct sta_info *sta; in sta_info_destroy_addr_bss() local
961 sta = sta_info_get_bss(sdata, addr); in sta_info_destroy_addr_bss()
962 ret = __sta_info_destroy(sta); in sta_info_destroy_addr_bss()
971 struct sta_info *sta; 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()
1022 struct sta_info *sta, *tmp; in __sta_info_flush() local
1032 list_for_each_entry_safe(sta, tmp, &local->sta_list, list) { in __sta_info_flush()
1033 if (sdata == sta->sdata || in __sta_info_flush()
1034 (vlans && sdata->bss == sta->sdata->bss)) { in __sta_info_flush()
1035 if (!WARN_ON(__sta_info_destroy_part1(sta))) in __sta_info_flush()
1036 list_add(&sta->free_list, &free_list); in __sta_info_flush()
1043 list_for_each_entry_safe(sta, tmp, &free_list, free_list) in __sta_info_flush()
1044 __sta_info_destroy_part2(sta); in __sta_info_flush()
1055 struct sta_info *sta, *tmp; in ieee80211_sta_expire() local
1059 list_for_each_entry_safe(sta, tmp, &local->sta_list, list) { in ieee80211_sta_expire()
1060 if (sdata != sta->sdata) in ieee80211_sta_expire()
1063 if (time_after(jiffies, sta->last_rx + exp_time)) { in ieee80211_sta_expire()
1064 sta_dbg(sta->sdata, "expiring inactive STA %pM\n", in ieee80211_sta_expire()
1065 sta->sta.addr); in ieee80211_sta_expire()
1068 test_sta_flag(sta, WLAN_STA_PS_STA)) in ieee80211_sta_expire()
1071 WARN_ON(__sta_info_destroy(sta)); in ieee80211_sta_expire()
1083 struct sta_info *sta; in ieee80211_find_sta_by_ifaddr() local
1093 for_each_sta_info(local, tbl, addr, sta, tmp) { in ieee80211_find_sta_by_ifaddr()
1095 !ether_addr_equal(sta->sdata->vif.addr, localaddr)) in ieee80211_find_sta_by_ifaddr()
1097 if (!sta->uploaded) in ieee80211_find_sta_by_ifaddr()
1099 return &sta->sta; in ieee80211_find_sta_by_ifaddr()
1109 struct sta_info *sta; in ieee80211_find_sta() local
1114 sta = sta_info_get_bss(vif_to_sdata(vif), addr); in ieee80211_find_sta()
1115 if (!sta) in ieee80211_find_sta()
1118 if (!sta->uploaded) in ieee80211_find_sta()
1121 return &sta->sta; in ieee80211_find_sta()
1126 void ieee80211_sta_ps_deliver_wakeup(struct sta_info *sta) in ieee80211_sta_ps_deliver_wakeup() argument
1128 struct ieee80211_sub_if_data *sdata = sta->sdata; in ieee80211_sta_ps_deliver_wakeup()
1146 clear_sta_flag(sta, WLAN_STA_SP); in ieee80211_sta_ps_deliver_wakeup()
1149 sta->driver_buffered_tids = 0; in ieee80211_sta_ps_deliver_wakeup()
1150 sta->txq_buffered_tids = 0; in ieee80211_sta_ps_deliver_wakeup()
1153 drv_sta_notify(local, sdata, STA_NOTIFY_AWAKE, &sta->sta); in ieee80211_sta_ps_deliver_wakeup()
1155 if (sta->sta.txq[0]) { in ieee80211_sta_ps_deliver_wakeup()
1156 for (i = 0; i < ARRAY_SIZE(sta->sta.txq); i++) { in ieee80211_sta_ps_deliver_wakeup()
1157 struct txq_info *txqi = to_txq_info(sta->sta.txq[i]); in ieee80211_sta_ps_deliver_wakeup()
1169 spin_lock(&sta->ps_lock); in ieee80211_sta_ps_deliver_wakeup()
1174 spin_lock_irqsave(&sta->tx_filtered[ac].lock, flags); in ieee80211_sta_ps_deliver_wakeup()
1175 skb_queue_splice_tail_init(&sta->tx_filtered[ac], &pending); in ieee80211_sta_ps_deliver_wakeup()
1176 spin_unlock_irqrestore(&sta->tx_filtered[ac].lock, flags); in ieee80211_sta_ps_deliver_wakeup()
1181 spin_lock_irqsave(&sta->ps_tx_buf[ac].lock, flags); in ieee80211_sta_ps_deliver_wakeup()
1182 skb_queue_splice_tail_init(&sta->ps_tx_buf[ac], &pending); in ieee80211_sta_ps_deliver_wakeup()
1183 spin_unlock_irqrestore(&sta->ps_tx_buf[ac].lock, flags); in ieee80211_sta_ps_deliver_wakeup()
1191 clear_sta_flag(sta, WLAN_STA_PS_DELIVER); in ieee80211_sta_ps_deliver_wakeup()
1196 clear_sta_flag(sta, WLAN_STA_PSPOLL); in ieee80211_sta_ps_deliver_wakeup()
1197 clear_sta_flag(sta, WLAN_STA_UAPSD); in ieee80211_sta_ps_deliver_wakeup()
1198 spin_unlock(&sta->ps_lock); in ieee80211_sta_ps_deliver_wakeup()
1204 !ieee80211_smps_is_restrictive(sta->known_smps_mode, in ieee80211_sta_ps_deliver_wakeup()
1206 sta->known_smps_mode != sdata->bss->req_smps && in ieee80211_sta_ps_deliver_wakeup()
1207 sta_info_tx_streams(sta) != 1) { in ieee80211_sta_ps_deliver_wakeup()
1210 sta->sta.addr); in ieee80211_sta_ps_deliver_wakeup()
1212 sta->sta.addr, in ieee80211_sta_ps_deliver_wakeup()
1218 sta_info_recalc_tim(sta); in ieee80211_sta_ps_deliver_wakeup()
1222 sta->sta.addr, sta->sta.aid, filtered, buffered); in ieee80211_sta_ps_deliver_wakeup()
1226 struct sta_info *sta, int tid, in ieee80211_send_null_response() argument
1235 bool qos = sta->sta.wme; in ieee80211_send_null_response()
1259 memcpy(nullfunc->addr1, sta->sta.addr, ETH_ALEN); in ieee80211_send_null_response()
1289 drv_allow_buffered_frames(local, sta, BIT(tid), 1, in ieee80211_send_null_response()
1303 ieee80211_xmit(sdata, sta, skb); in ieee80211_send_null_response()
1319 ieee80211_sta_ps_deliver_response(struct sta_info *sta, in ieee80211_sta_ps_deliver_response() argument
1323 struct ieee80211_sub_if_data *sdata = sta->sdata; in ieee80211_sta_ps_deliver_response()
1331 set_sta_flag(sta, WLAN_STA_SP); in ieee80211_sta_ps_deliver_response()
1348 driver_release_tids |= sta->driver_buffered_tids & tids; in ieee80211_sta_ps_deliver_response()
1349 driver_release_tids |= sta->txq_buffered_tids & tids; in ieee80211_sta_ps_deliver_response()
1370 skb = skb_dequeue(&sta->tx_filtered[ac]); in ieee80211_sta_ps_deliver_response()
1373 &sta->ps_tx_buf[ac]); in ieee80211_sta_ps_deliver_response()
1388 if (!skb_queue_empty(&sta->tx_filtered[ac]) || in ieee80211_sta_ps_deliver_response()
1389 !skb_queue_empty(&sta->ps_tx_buf[ac])) { in ieee80211_sta_ps_deliver_response()
1416 ieee80211_send_null_response(sdata, sta, tid, reason, true); in ieee80211_sta_ps_deliver_response()
1509 drv_allow_buffered_frames(local, sta, tids, num, in ieee80211_sta_ps_deliver_response()
1516 sdata, sta, find_highest_prio_tid(tids), in ieee80211_sta_ps_deliver_response()
1519 sta_info_recalc_tim(sta); in ieee80211_sta_ps_deliver_response()
1521 unsigned long tids = sta->txq_buffered_tids & driver_release_tids; in ieee80211_sta_ps_deliver_response()
1534 drv_release_buffered_frames(local, sta, driver_release_tids, in ieee80211_sta_ps_deliver_response()
1547 if (!sta->sta.txq[0]) in ieee80211_sta_ps_deliver_response()
1550 for (tid = 0; tid < ARRAY_SIZE(sta->sta.txq); tid++) { in ieee80211_sta_ps_deliver_response()
1551 struct txq_info *txqi = to_txq_info(sta->sta.txq[tid]); in ieee80211_sta_ps_deliver_response()
1556 sta_info_recalc_tim(sta); in ieee80211_sta_ps_deliver_response()
1562 void ieee80211_sta_ps_deliver_poll_response(struct sta_info *sta) in ieee80211_sta_ps_deliver_poll_response() argument
1564 u8 ignore_for_response = sta->sta.uapsd_queues; in ieee80211_sta_ps_deliver_poll_response()
1574 ieee80211_sta_ps_deliver_response(sta, 1, ignore_for_response, in ieee80211_sta_ps_deliver_poll_response()
1578 void ieee80211_sta_ps_deliver_uapsd(struct sta_info *sta) in ieee80211_sta_ps_deliver_uapsd() argument
1580 int n_frames = sta->sta.max_sp; in ieee80211_sta_ps_deliver_uapsd()
1581 u8 delivery_enabled = sta->sta.uapsd_queues; in ieee80211_sta_ps_deliver_uapsd()
1592 switch (sta->sta.max_sp) { in ieee80211_sta_ps_deliver_uapsd()
1608 ieee80211_sta_ps_deliver_response(sta, n_frames, ~delivery_enabled, in ieee80211_sta_ps_deliver_uapsd()
1615 struct sta_info *sta = container_of(pubsta, struct sta_info, sta); in ieee80211_sta_block_awake() local
1617 trace_api_sta_block_awake(sta->local, pubsta, block); in ieee80211_sta_block_awake()
1620 set_sta_flag(sta, WLAN_STA_PS_DRIVER); in ieee80211_sta_block_awake()
1624 if (!test_sta_flag(sta, WLAN_STA_PS_DRIVER)) in ieee80211_sta_block_awake()
1627 if (!test_sta_flag(sta, WLAN_STA_PS_STA)) { in ieee80211_sta_block_awake()
1628 set_sta_flag(sta, WLAN_STA_PS_DELIVER); in ieee80211_sta_block_awake()
1629 clear_sta_flag(sta, WLAN_STA_PS_DRIVER); in ieee80211_sta_block_awake()
1630 ieee80211_queue_work(hw, &sta->drv_deliver_wk); in ieee80211_sta_block_awake()
1631 } else if (test_sta_flag(sta, WLAN_STA_PSPOLL) || in ieee80211_sta_block_awake()
1632 test_sta_flag(sta, WLAN_STA_UAPSD)) { in ieee80211_sta_block_awake()
1634 clear_sta_flag(sta, WLAN_STA_PS_DRIVER); in ieee80211_sta_block_awake()
1635 ieee80211_queue_work(hw, &sta->drv_deliver_wk); in ieee80211_sta_block_awake()
1637 clear_sta_flag(sta, WLAN_STA_PS_DRIVER); in ieee80211_sta_block_awake()
1644 struct sta_info *sta = container_of(pubsta, struct sta_info, sta); in ieee80211_sta_eosp() local
1645 struct ieee80211_local *local = sta->local; in ieee80211_sta_eosp()
1649 clear_sta_flag(sta, WLAN_STA_SP); in ieee80211_sta_eosp()
1656 struct sta_info *sta = container_of(pubsta, struct sta_info, sta); in ieee80211_sta_set_buffered() local
1661 trace_api_sta_set_buffered(sta->local, pubsta, tid, buffered); in ieee80211_sta_set_buffered()
1664 set_bit(tid, &sta->driver_buffered_tids); in ieee80211_sta_set_buffered()
1666 clear_bit(tid, &sta->driver_buffered_tids); in ieee80211_sta_set_buffered()
1668 sta_info_recalc_tim(sta); in ieee80211_sta_set_buffered()
1672 int sta_info_move_state(struct sta_info *sta, in sta_info_move_state() argument
1677 if (sta->sta_state == new_state) in sta_info_move_state()
1684 if (sta->sta_state != IEEE80211_STA_AUTH) in sta_info_move_state()
1688 if (sta->sta_state != IEEE80211_STA_NONE && in sta_info_move_state()
1689 sta->sta_state != IEEE80211_STA_ASSOC) in sta_info_move_state()
1693 if (sta->sta_state != IEEE80211_STA_AUTH && in sta_info_move_state()
1694 sta->sta_state != IEEE80211_STA_AUTHORIZED) in sta_info_move_state()
1698 if (sta->sta_state != IEEE80211_STA_ASSOC) in sta_info_move_state()
1706 sta_dbg(sta->sdata, "moving STA %pM to state %d\n", in sta_info_move_state()
1707 sta->sta.addr, new_state); in sta_info_move_state()
1713 if (test_sta_flag(sta, WLAN_STA_INSERTED)) { in sta_info_move_state()
1714 int err = drv_sta_state(sta->local, sta->sdata, sta, in sta_info_move_state()
1715 sta->sta_state, new_state); in sta_info_move_state()
1724 if (sta->sta_state == IEEE80211_STA_AUTH) in sta_info_move_state()
1725 clear_bit(WLAN_STA_AUTH, &sta->_flags); in sta_info_move_state()
1728 if (sta->sta_state == IEEE80211_STA_NONE) in sta_info_move_state()
1729 set_bit(WLAN_STA_AUTH, &sta->_flags); in sta_info_move_state()
1730 else if (sta->sta_state == IEEE80211_STA_ASSOC) in sta_info_move_state()
1731 clear_bit(WLAN_STA_ASSOC, &sta->_flags); in sta_info_move_state()
1734 if (sta->sta_state == IEEE80211_STA_AUTH) { in sta_info_move_state()
1735 set_bit(WLAN_STA_ASSOC, &sta->_flags); in sta_info_move_state()
1736 } else if (sta->sta_state == IEEE80211_STA_AUTHORIZED) { in sta_info_move_state()
1737 if (sta->sdata->vif.type == NL80211_IFTYPE_AP || in sta_info_move_state()
1738 (sta->sdata->vif.type == NL80211_IFTYPE_AP_VLAN && in sta_info_move_state()
1739 !sta->sdata->u.vlan.sta)) in sta_info_move_state()
1740 atomic_dec(&sta->sdata->bss->num_mcast_sta); in sta_info_move_state()
1741 clear_bit(WLAN_STA_AUTHORIZED, &sta->_flags); in sta_info_move_state()
1745 if (sta->sta_state == IEEE80211_STA_ASSOC) { in sta_info_move_state()
1746 if (sta->sdata->vif.type == NL80211_IFTYPE_AP || in sta_info_move_state()
1747 (sta->sdata->vif.type == NL80211_IFTYPE_AP_VLAN && in sta_info_move_state()
1748 !sta->sdata->u.vlan.sta)) in sta_info_move_state()
1749 atomic_inc(&sta->sdata->bss->num_mcast_sta); in sta_info_move_state()
1750 set_bit(WLAN_STA_AUTHORIZED, &sta->_flags); in sta_info_move_state()
1757 sta->sta_state = new_state; in sta_info_move_state()
1762 u8 sta_info_tx_streams(struct sta_info *sta) in sta_info_tx_streams() argument
1764 struct ieee80211_sta_ht_cap *ht_cap = &sta->sta.ht_cap; in sta_info_tx_streams()
1767 if (!sta->sta.ht_cap.ht_supported) in sta_info_tx_streams()
1770 if (sta->sta.vht_cap.vht_supported) { in sta_info_tx_streams()
1773 le16_to_cpu(sta->sta.vht_cap.vht_mcs.tx_mcs_map); in sta_info_tx_streams()
1797 void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo) in sta_set_sinfo() argument
1799 struct ieee80211_sub_if_data *sdata = sta->sdata; in sta_set_sinfo()
1806 if (test_sta_flag(sta, WLAN_STA_RATE_CONTROL)) in sta_set_sinfo()
1818 drv_sta_statistics(local, sdata, &sta->sta, sinfo); in sta_set_sinfo()
1828 sinfo->connected_time = uptime.tv_sec - sta->last_connected; in sta_set_sinfo()
1829 sinfo->inactive_time = jiffies_to_msecs(jiffies - sta->last_rx); in sta_set_sinfo()
1835 sinfo->tx_bytes += sta->tx_bytes[ac]; in sta_set_sinfo()
1842 sinfo->tx_packets += sta->tx_packets[ac]; in sta_set_sinfo()
1848 sinfo->rx_bytes = sta->rx_bytes; in sta_set_sinfo()
1853 sinfo->rx_packets = sta->rx_packets; in sta_set_sinfo()
1858 sinfo->tx_retries = sta->tx_retry_count; in sta_set_sinfo()
1863 sinfo->tx_failed = sta->tx_retry_failed; in sta_set_sinfo()
1867 sinfo->rx_dropped_misc = sta->rx_dropped; in sta_set_sinfo()
1868 sinfo->beacon_loss_count = sta->beacon_loss_count; 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()
1880 sinfo->signal = (s8)sta->last_signal; in sta_set_sinfo()
1885 sinfo->signal_avg = (s8) -ewma_read(&sta->avg_signal); in sta_set_sinfo()
1890 if (sta->chains && in sta_set_sinfo()
1896 sinfo->chains = sta->chains; in sta_set_sinfo()
1898 sinfo->chain_signal[i] = sta->chain_signal_last[i]; in sta_set_sinfo()
1900 (s8) -ewma_read(&sta->chain_signal_avg[i]); in sta_set_sinfo()
1905 sta_set_rate_info_tx(sta, &sta->last_tx_rate, &sinfo->txrate); in sta_set_sinfo()
1910 sta_set_rate_info_rx(sta, &sinfo->rxrate); in sta_set_sinfo()
1920 tidstats->rx_msdu = sta->rx_msdu[i]; in sta_set_sinfo()
1925 tidstats->tx_msdu = sta->tx_msdu[i]; in sta_set_sinfo()
1933 tidstats->tx_msdu_retries = sta->tx_msdu_retries[i]; in sta_set_sinfo()
1941 tidstats->tx_msdu_failed = sta->tx_msdu_failed[i]; in sta_set_sinfo()
1954 sinfo->llid = sta->llid; in sta_set_sinfo()
1955 sinfo->plid = sta->plid; in sta_set_sinfo()
1956 sinfo->plink_state = sta->plink_state; in sta_set_sinfo()
1957 if (test_sta_flag(sta, WLAN_STA_TOFFSET_KNOWN)) { in sta_set_sinfo()
1959 sinfo->t_offset = sta->t_offset; in sta_set_sinfo()
1961 sinfo->local_pm = sta->local_pm; in sta_set_sinfo()
1962 sinfo->peer_pm = sta->peer_pm; in sta_set_sinfo()
1963 sinfo->nonpeer_pm = sta->nonpeer_pm; in sta_set_sinfo()
1985 if (test_sta_flag(sta, WLAN_STA_AUTHORIZED)) in sta_set_sinfo()
1987 if (test_sta_flag(sta, WLAN_STA_SHORT_PREAMBLE)) in sta_set_sinfo()
1989 if (sta->sta.wme) in sta_set_sinfo()
1991 if (test_sta_flag(sta, WLAN_STA_MFP)) in sta_set_sinfo()
1993 if (test_sta_flag(sta, WLAN_STA_AUTH)) in sta_set_sinfo()
1995 if (test_sta_flag(sta, WLAN_STA_ASSOC)) in sta_set_sinfo()
1997 if (test_sta_flag(sta, WLAN_STA_TDLS_PEER)) in sta_set_sinfo()
2002 thr = ref->ops->get_expected_throughput(sta->rate_ctrl_priv); in sta_set_sinfo()
2004 thr = drv_get_expected_throughput(local, &sta->sta); in sta_set_sinfo()