1
2
3
4
5
6
7
8
9
10
11
12#include <linux/module.h>
13#include <linux/init.h>
14#include <linux/etherdevice.h>
15#include <linux/netdevice.h>
16#include <linux/types.h>
17#include <linux/slab.h>
18#include <linux/skbuff.h>
19#include <linux/if_arp.h>
20#include <linux/timer.h>
21#include <linux/rtnetlink.h>
22
23#include <net/codel.h>
24#include <net/mac80211.h>
25#include "ieee80211_i.h"
26#include "driver-ops.h"
27#include "rate.h"
28#include "sta_info.h"
29#include "debugfs_sta.h"
30#include "mesh.h"
31#include "wme.h"
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69static const struct rhashtable_params sta_rht_params = {
70 .nelem_hint = 3,
71 .automatic_shrinking = true,
72 .head_offset = offsetof(struct sta_info, hash_node),
73 .key_offset = offsetof(struct sta_info, addr),
74 .key_len = ETH_ALEN,
75 .max_size = CONFIG_MAC80211_STA_HASH_MAX_SIZE,
76};
77
78
79static int sta_info_hash_del(struct ieee80211_local *local,
80 struct sta_info *sta)
81{
82 return rhltable_remove(&local->sta_hash, &sta->hash_node,
83 sta_rht_params);
84}
85
86static void __cleanup_single_sta(struct sta_info *sta)
87{
88 int ac, i;
89 struct tid_ampdu_tx *tid_tx;
90 struct ieee80211_sub_if_data *sdata = sta->sdata;
91 struct ieee80211_local *local = sdata->local;
92 struct fq *fq = &local->fq;
93 struct ps_data *ps;
94
95 if (test_sta_flag(sta, WLAN_STA_PS_STA) ||
96 test_sta_flag(sta, WLAN_STA_PS_DRIVER) ||
97 test_sta_flag(sta, WLAN_STA_PS_DELIVER)) {
98 if (sta->sdata->vif.type == NL80211_IFTYPE_AP ||
99 sta->sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
100 ps = &sdata->bss->ps;
101 else if (ieee80211_vif_is_mesh(&sdata->vif))
102 ps = &sdata->u.mesh.ps;
103 else
104 return;
105
106 clear_sta_flag(sta, WLAN_STA_PS_STA);
107 clear_sta_flag(sta, WLAN_STA_PS_DRIVER);
108 clear_sta_flag(sta, WLAN_STA_PS_DELIVER);
109
110 atomic_dec(&ps->num_sta_ps);
111 }
112
113 if (sta->sta.txq[0]) {
114 for (i = 0; i < ARRAY_SIZE(sta->sta.txq); i++) {
115 struct txq_info *txqi = to_txq_info(sta->sta.txq[i]);
116
117 spin_lock_bh(&fq->lock);
118 ieee80211_txq_purge(local, txqi);
119 spin_unlock_bh(&fq->lock);
120 }
121 }
122
123 for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
124 local->total_ps_buffered -= skb_queue_len(&sta->ps_tx_buf[ac]);
125 ieee80211_purge_tx_queue(&local->hw, &sta->ps_tx_buf[ac]);
126 ieee80211_purge_tx_queue(&local->hw, &sta->tx_filtered[ac]);
127 }
128
129 if (ieee80211_vif_is_mesh(&sdata->vif))
130 mesh_sta_cleanup(sta);
131
132 cancel_work_sync(&sta->drv_deliver_wk);
133
134
135
136
137
138
139
140 for (i = 0; i < IEEE80211_NUM_TIDS; i++) {
141 kfree(sta->ampdu_mlme.tid_start_tx[i]);
142 tid_tx = rcu_dereference_raw(sta->ampdu_mlme.tid_tx[i]);
143 if (!tid_tx)
144 continue;
145 ieee80211_purge_tx_queue(&local->hw, &tid_tx->pending);
146 kfree(tid_tx);
147 }
148}
149
150static void cleanup_single_sta(struct sta_info *sta)
151{
152 struct ieee80211_sub_if_data *sdata = sta->sdata;
153 struct ieee80211_local *local = sdata->local;
154
155 __cleanup_single_sta(sta);
156 sta_info_free(local, sta);
157}
158
159struct rhlist_head *sta_info_hash_lookup(struct ieee80211_local *local,
160 const u8 *addr)
161{
162 return rhltable_lookup(&local->sta_hash, addr, sta_rht_params);
163}
164
165
166struct sta_info *sta_info_get(struct ieee80211_sub_if_data *sdata,
167 const u8 *addr)
168{
169 struct ieee80211_local *local = sdata->local;
170 struct rhlist_head *tmp;
171 struct sta_info *sta;
172
173 rcu_read_lock();
174 for_each_sta_info(local, addr, sta, tmp) {
175 if (sta->sdata == sdata) {
176 rcu_read_unlock();
177
178
179
180 return sta;
181 }
182 }
183 rcu_read_unlock();
184 return NULL;
185}
186
187
188
189
190
191struct sta_info *sta_info_get_bss(struct ieee80211_sub_if_data *sdata,
192 const u8 *addr)
193{
194 struct ieee80211_local *local = sdata->local;
195 struct rhlist_head *tmp;
196 struct sta_info *sta;
197
198 rcu_read_lock();
199 for_each_sta_info(local, addr, sta, tmp) {
200 if (sta->sdata == sdata ||
201 (sta->sdata->bss && sta->sdata->bss == sdata->bss)) {
202 rcu_read_unlock();
203
204
205
206 return sta;
207 }
208 }
209 rcu_read_unlock();
210 return NULL;
211}
212
213struct sta_info *sta_info_get_by_idx(struct ieee80211_sub_if_data *sdata,
214 int idx)
215{
216 struct ieee80211_local *local = sdata->local;
217 struct sta_info *sta;
218 int i = 0;
219
220 list_for_each_entry_rcu(sta, &local->sta_list, list) {
221 if (sdata != sta->sdata)
222 continue;
223 if (i < idx) {
224 ++i;
225 continue;
226 }
227 return sta;
228 }
229
230 return NULL;
231}
232
233
234
235
236
237
238
239
240
241
242
243
244void sta_info_free(struct ieee80211_local *local, struct sta_info *sta)
245{
246 if (sta->rate_ctrl)
247 rate_control_free_sta(sta);
248
249 sta_dbg(sta->sdata, "Destroyed STA %pM\n", sta->sta.addr);
250
251 if (sta->sta.txq[0])
252 kfree(to_txq_info(sta->sta.txq[0]));
253 kfree(rcu_dereference_raw(sta->sta.rates));
254#ifdef CONFIG_MAC80211_MESH
255 kfree(sta->mesh);
256#endif
257 free_percpu(sta->pcpu_rx_stats);
258 kfree(sta);
259}
260
261
262static int sta_info_hash_add(struct ieee80211_local *local,
263 struct sta_info *sta)
264{
265 return rhltable_insert(&local->sta_hash, &sta->hash_node,
266 sta_rht_params);
267}
268
269static void sta_deliver_ps_frames(struct work_struct *wk)
270{
271 struct sta_info *sta;
272
273 sta = container_of(wk, struct sta_info, drv_deliver_wk);
274
275 if (sta->dead)
276 return;
277
278 local_bh_disable();
279 if (!test_sta_flag(sta, WLAN_STA_PS_STA))
280 ieee80211_sta_ps_deliver_wakeup(sta);
281 else if (test_and_clear_sta_flag(sta, WLAN_STA_PSPOLL))
282 ieee80211_sta_ps_deliver_poll_response(sta);
283 else if (test_and_clear_sta_flag(sta, WLAN_STA_UAPSD))
284 ieee80211_sta_ps_deliver_uapsd(sta);
285 local_bh_enable();
286}
287
288static int sta_prepare_rate_control(struct ieee80211_local *local,
289 struct sta_info *sta, gfp_t gfp)
290{
291 if (ieee80211_hw_check(&local->hw, HAS_RATE_CONTROL))
292 return 0;
293
294 sta->rate_ctrl = local->rate_ctrl;
295 sta->rate_ctrl_priv = rate_control_alloc_sta(sta->rate_ctrl,
296 sta, gfp);
297 if (!sta->rate_ctrl_priv)
298 return -ENOMEM;
299
300 return 0;
301}
302
303struct sta_info *sta_info_alloc(struct ieee80211_sub_if_data *sdata,
304 const u8 *addr, gfp_t gfp)
305{
306 struct ieee80211_local *local = sdata->local;
307 struct ieee80211_hw *hw = &local->hw;
308 struct sta_info *sta;
309 int i;
310
311 sta = kzalloc(sizeof(*sta) + hw->sta_data_size, gfp);
312 if (!sta)
313 return NULL;
314
315 if (ieee80211_hw_check(hw, USES_RSS)) {
316 sta->pcpu_rx_stats =
317 alloc_percpu_gfp(struct ieee80211_sta_rx_stats, gfp);
318 if (!sta->pcpu_rx_stats)
319 goto free;
320 }
321
322 spin_lock_init(&sta->lock);
323 spin_lock_init(&sta->ps_lock);
324 INIT_WORK(&sta->drv_deliver_wk, sta_deliver_ps_frames);
325 INIT_WORK(&sta->ampdu_mlme.work, ieee80211_ba_session_work);
326 mutex_init(&sta->ampdu_mlme.mtx);
327#ifdef CONFIG_MAC80211_MESH
328 if (ieee80211_vif_is_mesh(&sdata->vif)) {
329 sta->mesh = kzalloc(sizeof(*sta->mesh), gfp);
330 if (!sta->mesh)
331 goto free;
332 sta->mesh->plink_sta = sta;
333 spin_lock_init(&sta->mesh->plink_lock);
334 if (ieee80211_vif_is_mesh(&sdata->vif) &&
335 !sdata->u.mesh.user_mpm)
336 timer_setup(&sta->mesh->plink_timer, mesh_plink_timer,
337 0);
338 sta->mesh->nonpeer_pm = NL80211_MESH_POWER_ACTIVE;
339 }
340#endif
341
342 memcpy(sta->addr, addr, ETH_ALEN);
343 memcpy(sta->sta.addr, addr, ETH_ALEN);
344 sta->sta.max_rx_aggregation_subframes =
345 local->hw.max_rx_aggregation_subframes;
346
347 sta->local = local;
348 sta->sdata = sdata;
349 sta->rx_stats.last_rx = jiffies;
350
351 u64_stats_init(&sta->rx_stats.syncp);
352
353 sta->sta_state = IEEE80211_STA_NONE;
354
355
356 sta->reserved_tid = IEEE80211_TID_UNRESERVED;
357
358 sta->last_connected = ktime_get_seconds();
359 ewma_signal_init(&sta->rx_stats_avg.signal);
360 for (i = 0; i < ARRAY_SIZE(sta->rx_stats_avg.chain_signal); i++)
361 ewma_signal_init(&sta->rx_stats_avg.chain_signal[i]);
362
363 if (local->ops->wake_tx_queue) {
364 void *txq_data;
365 int size = sizeof(struct txq_info) +
366 ALIGN(hw->txq_data_size, sizeof(void *));
367
368 txq_data = kcalloc(ARRAY_SIZE(sta->sta.txq), size, gfp);
369 if (!txq_data)
370 goto free;
371
372 for (i = 0; i < ARRAY_SIZE(sta->sta.txq); i++) {
373 struct txq_info *txq = txq_data + i * size;
374
375 ieee80211_txq_init(sdata, sta, txq, i);
376 }
377 }
378
379 if (sta_prepare_rate_control(local, sta, gfp))
380 goto free_txq;
381
382 for (i = 0; i < IEEE80211_NUM_ACS; i++) {
383 skb_queue_head_init(&sta->ps_tx_buf[i]);
384 skb_queue_head_init(&sta->tx_filtered[i]);
385 }
386
387 for (i = 0; i < IEEE80211_NUM_TIDS; i++)
388 sta->last_seq_ctrl[i] = cpu_to_le16(USHRT_MAX);
389
390 sta->sta.smps_mode = IEEE80211_SMPS_OFF;
391 if (sdata->vif.type == NL80211_IFTYPE_AP ||
392 sdata->vif.type == NL80211_IFTYPE_AP_VLAN) {
393 struct ieee80211_supported_band *sband;
394 u8 smps;
395
396 sband = ieee80211_get_sband(sdata);
397 if (!sband)
398 goto free_txq;
399
400 smps = (sband->ht_cap.cap & IEEE80211_HT_CAP_SM_PS) >>
401 IEEE80211_HT_CAP_SM_PS_SHIFT;
402
403
404
405
406 switch (smps) {
407 case WLAN_HT_SMPS_CONTROL_DISABLED:
408 sta->known_smps_mode = IEEE80211_SMPS_OFF;
409 break;
410 case WLAN_HT_SMPS_CONTROL_STATIC:
411 sta->known_smps_mode = IEEE80211_SMPS_STATIC;
412 break;
413 case WLAN_HT_SMPS_CONTROL_DYNAMIC:
414 sta->known_smps_mode = IEEE80211_SMPS_DYNAMIC;
415 break;
416 default:
417 WARN_ON(1);
418 }
419 }
420
421 sta->sta.max_rc_amsdu_len = IEEE80211_MAX_MPDU_LEN_HT_BA;
422
423 sta->cparams.ce_threshold = CODEL_DISABLED_THRESHOLD;
424 sta->cparams.target = MS2TIME(20);
425 sta->cparams.interval = MS2TIME(100);
426 sta->cparams.ecn = true;
427
428 sta_dbg(sdata, "Allocated STA %pM\n", sta->sta.addr);
429
430 return sta;
431
432free_txq:
433 if (sta->sta.txq[0])
434 kfree(to_txq_info(sta->sta.txq[0]));
435free:
436 free_percpu(sta->pcpu_rx_stats);
437#ifdef CONFIG_MAC80211_MESH
438 kfree(sta->mesh);
439#endif
440 kfree(sta);
441 return NULL;
442}
443
444static int sta_info_insert_check(struct sta_info *sta)
445{
446 struct ieee80211_sub_if_data *sdata = sta->sdata;
447
448
449
450
451
452
453 if (unlikely(!ieee80211_sdata_running(sdata)))
454 return -ENETDOWN;
455
456 if (WARN_ON(ether_addr_equal(sta->sta.addr, sdata->vif.addr) ||
457 is_multicast_ether_addr(sta->sta.addr)))
458 return -EINVAL;
459
460
461
462
463
464 rcu_read_lock();
465 lockdep_assert_held(&sdata->local->sta_mtx);
466 if (ieee80211_hw_check(&sdata->local->hw, NEEDS_UNIQUE_STA_ADDR) &&
467 ieee80211_find_sta_by_ifaddr(&sdata->local->hw, sta->addr, NULL)) {
468 rcu_read_unlock();
469 return -ENOTUNIQ;
470 }
471 rcu_read_unlock();
472
473 return 0;
474}
475
476static int sta_info_insert_drv_state(struct ieee80211_local *local,
477 struct ieee80211_sub_if_data *sdata,
478 struct sta_info *sta)
479{
480 enum ieee80211_sta_state state;
481 int err = 0;
482
483 for (state = IEEE80211_STA_NOTEXIST; state < sta->sta_state; state++) {
484 err = drv_sta_state(local, sdata, sta, state, state + 1);
485 if (err)
486 break;
487 }
488
489 if (!err) {
490
491
492
493
494 if (!local->ops->sta_add)
495 sta->uploaded = true;
496 return 0;
497 }
498
499 if (sdata->vif.type == NL80211_IFTYPE_ADHOC) {
500 sdata_info(sdata,
501 "failed to move IBSS STA %pM to state %d (%d) - keeping it anyway\n",
502 sta->sta.addr, state + 1, err);
503 err = 0;
504 }
505
506
507 for (; state > IEEE80211_STA_NOTEXIST; state--)
508 WARN_ON(drv_sta_state(local, sdata, sta, state, state - 1));
509
510 return err;
511}
512
513static void
514ieee80211_recalc_p2p_go_ps_allowed(struct ieee80211_sub_if_data *sdata)
515{
516 struct ieee80211_local *local = sdata->local;
517 bool allow_p2p_go_ps = sdata->vif.p2p;
518 struct sta_info *sta;
519
520 rcu_read_lock();
521 list_for_each_entry_rcu(sta, &local->sta_list, list) {
522 if (sdata != sta->sdata ||
523 !test_sta_flag(sta, WLAN_STA_ASSOC))
524 continue;
525 if (!sta->sta.support_p2p_ps) {
526 allow_p2p_go_ps = false;
527 break;
528 }
529 }
530 rcu_read_unlock();
531
532 if (allow_p2p_go_ps != sdata->vif.bss_conf.allow_p2p_go_ps) {
533 sdata->vif.bss_conf.allow_p2p_go_ps = allow_p2p_go_ps;
534 ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_P2P_PS);
535 }
536}
537
538
539
540
541
542
543static int sta_info_insert_finish(struct sta_info *sta) __acquires(RCU)
544{
545 struct ieee80211_local *local = sta->local;
546 struct ieee80211_sub_if_data *sdata = sta->sdata;
547 struct station_info *sinfo = NULL;
548 int err = 0;
549
550 lockdep_assert_held(&local->sta_mtx);
551
552
553 if (sta_info_get_bss(sdata, sta->sta.addr)) {
554 err = -EEXIST;
555 goto out_err;
556 }
557
558 sinfo = kzalloc(sizeof(struct station_info), GFP_KERNEL);
559 if (!sinfo) {
560 err = -ENOMEM;
561 goto out_err;
562 }
563
564 local->num_sta++;
565 local->sta_generation++;
566 smp_mb();
567
568
569 set_sta_flag(sta, WLAN_STA_BLOCK_BA);
570
571
572 err = sta_info_hash_add(local, sta);
573 if (err)
574 goto out_drop_sta;
575
576 list_add_tail_rcu(&sta->list, &local->sta_list);
577
578
579 err = sta_info_insert_drv_state(local, sdata, sta);
580 if (err)
581 goto out_remove;
582
583 set_sta_flag(sta, WLAN_STA_INSERTED);
584
585 if (sta->sta_state >= IEEE80211_STA_ASSOC) {
586 ieee80211_recalc_min_chandef(sta->sdata);
587 if (!sta->sta.support_p2p_ps)
588 ieee80211_recalc_p2p_go_ps_allowed(sta->sdata);
589 }
590
591
592 clear_sta_flag(sta, WLAN_STA_BLOCK_BA);
593
594 ieee80211_sta_debugfs_add(sta);
595 rate_control_add_sta_debugfs(sta);
596
597 sinfo->generation = local->sta_generation;
598 cfg80211_new_sta(sdata->dev, sta->sta.addr, sinfo, GFP_KERNEL);
599 kfree(sinfo);
600
601 sta_dbg(sdata, "Inserted STA %pM\n", sta->sta.addr);
602
603
604 rcu_read_lock();
605 mutex_unlock(&local->sta_mtx);
606
607 if (ieee80211_vif_is_mesh(&sdata->vif))
608 mesh_accept_plinks_update(sdata);
609
610 return 0;
611 out_remove:
612 sta_info_hash_del(local, sta);
613 list_del_rcu(&sta->list);
614 out_drop_sta:
615 local->num_sta--;
616 synchronize_net();
617 __cleanup_single_sta(sta);
618 out_err:
619 mutex_unlock(&local->sta_mtx);
620 kfree(sinfo);
621 rcu_read_lock();
622 return err;
623}
624
625int sta_info_insert_rcu(struct sta_info *sta) __acquires(RCU)
626{
627 struct ieee80211_local *local = sta->local;
628 int err;
629
630 might_sleep();
631
632 mutex_lock(&local->sta_mtx);
633
634 err = sta_info_insert_check(sta);
635 if (err) {
636 mutex_unlock(&local->sta_mtx);
637 rcu_read_lock();
638 goto out_free;
639 }
640
641 err = sta_info_insert_finish(sta);
642 if (err)
643 goto out_free;
644
645 return 0;
646 out_free:
647 sta_info_free(local, sta);
648 return err;
649}
650
651int sta_info_insert(struct sta_info *sta)
652{
653 int err = sta_info_insert_rcu(sta);
654
655 rcu_read_unlock();
656
657 return err;
658}
659
660static inline void __bss_tim_set(u8 *tim, u16 id)
661{
662
663
664
665
666 tim[id / 8] |= (1 << (id % 8));
667}
668
669static inline void __bss_tim_clear(u8 *tim, u16 id)
670{
671
672
673
674
675 tim[id / 8] &= ~(1 << (id % 8));
676}
677
678static inline bool __bss_tim_get(u8 *tim, u16 id)
679{
680
681
682
683
684 return tim[id / 8] & (1 << (id % 8));
685}
686
687static unsigned long ieee80211_tids_for_ac(int ac)
688{
689
690 switch (ac) {
691 case IEEE80211_AC_VO:
692 return BIT(6) | BIT(7);
693 case IEEE80211_AC_VI:
694 return BIT(4) | BIT(5);
695 case IEEE80211_AC_BE:
696 return BIT(0) | BIT(3);
697 case IEEE80211_AC_BK:
698 return BIT(1) | BIT(2);
699 default:
700 WARN_ON(1);
701 return 0;
702 }
703}
704
705static void __sta_info_recalc_tim(struct sta_info *sta, bool ignore_pending)
706{
707 struct ieee80211_local *local = sta->local;
708 struct ps_data *ps;
709 bool indicate_tim = false;
710 u8 ignore_for_tim = sta->sta.uapsd_queues;
711 int ac;
712 u16 id = sta->sta.aid;
713
714 if (sta->sdata->vif.type == NL80211_IFTYPE_AP ||
715 sta->sdata->vif.type == NL80211_IFTYPE_AP_VLAN) {
716 if (WARN_ON_ONCE(!sta->sdata->bss))
717 return;
718
719 ps = &sta->sdata->bss->ps;
720#ifdef CONFIG_MAC80211_MESH
721 } else if (ieee80211_vif_is_mesh(&sta->sdata->vif)) {
722 ps = &sta->sdata->u.mesh.ps;
723#endif
724 } else {
725 return;
726 }
727
728
729 if (ieee80211_hw_check(&local->hw, AP_LINK_PS) && !local->ops->set_tim)
730 return;
731
732 if (sta->dead)
733 goto done;
734
735
736
737
738
739
740
741 if (ignore_for_tim == BIT(IEEE80211_NUM_ACS) - 1)
742 ignore_for_tim = 0;
743
744 if (ignore_pending)
745 ignore_for_tim = BIT(IEEE80211_NUM_ACS) - 1;
746
747 for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
748 unsigned long tids;
749
750 if (ignore_for_tim & ieee80211_ac_to_qos_mask[ac])
751 continue;
752
753 indicate_tim |= !skb_queue_empty(&sta->tx_filtered[ac]) ||
754 !skb_queue_empty(&sta->ps_tx_buf[ac]);
755 if (indicate_tim)
756 break;
757
758 tids = ieee80211_tids_for_ac(ac);
759
760 indicate_tim |=
761 sta->driver_buffered_tids & tids;
762 indicate_tim |=
763 sta->txq_buffered_tids & tids;
764 }
765
766 done:
767 spin_lock_bh(&local->tim_lock);
768
769 if (indicate_tim == __bss_tim_get(ps->tim, id))
770 goto out_unlock;
771
772 if (indicate_tim)
773 __bss_tim_set(ps->tim, id);
774 else
775 __bss_tim_clear(ps->tim, id);
776
777 if (local->ops->set_tim && !WARN_ON(sta->dead)) {
778 local->tim_in_locked_section = true;
779 drv_set_tim(local, &sta->sta, indicate_tim);
780 local->tim_in_locked_section = false;
781 }
782
783out_unlock:
784 spin_unlock_bh(&local->tim_lock);
785}
786
787void sta_info_recalc_tim(struct sta_info *sta)
788{
789 __sta_info_recalc_tim(sta, false);
790}
791
792static bool sta_info_buffer_expired(struct sta_info *sta, struct sk_buff *skb)
793{
794 struct ieee80211_tx_info *info;
795 int timeout;
796
797 if (!skb)
798 return false;
799
800 info = IEEE80211_SKB_CB(skb);
801
802
803 timeout = (sta->listen_interval *
804 sta->sdata->vif.bss_conf.beacon_int *
805 32 / 15625) * HZ;
806 if (timeout < STA_TX_BUFFER_EXPIRE)
807 timeout = STA_TX_BUFFER_EXPIRE;
808 return time_after(jiffies, info->control.jiffies + timeout);
809}
810
811
812static bool sta_info_cleanup_expire_buffered_ac(struct ieee80211_local *local,
813 struct sta_info *sta, int ac)
814{
815 unsigned long flags;
816 struct sk_buff *skb;
817
818
819
820
821
822
823
824
825 for (;;) {
826 spin_lock_irqsave(&sta->tx_filtered[ac].lock, flags);
827 skb = skb_peek(&sta->tx_filtered[ac]);
828 if (sta_info_buffer_expired(sta, skb))
829 skb = __skb_dequeue(&sta->tx_filtered[ac]);
830 else
831 skb = NULL;
832 spin_unlock_irqrestore(&sta->tx_filtered[ac].lock, flags);
833
834
835
836
837
838
839
840 if (!skb)
841 break;
842 ieee80211_free_txskb(&local->hw, skb);
843 }
844
845
846
847
848
849
850
851 for (;;) {
852 spin_lock_irqsave(&sta->ps_tx_buf[ac].lock, flags);
853 skb = skb_peek(&sta->ps_tx_buf[ac]);
854 if (sta_info_buffer_expired(sta, skb))
855 skb = __skb_dequeue(&sta->ps_tx_buf[ac]);
856 else
857 skb = NULL;
858 spin_unlock_irqrestore(&sta->ps_tx_buf[ac].lock, flags);
859
860
861
862
863
864
865 if (!skb)
866 break;
867
868 local->total_ps_buffered--;
869 ps_dbg(sta->sdata, "Buffered frame expired (STA %pM)\n",
870 sta->sta.addr);
871 ieee80211_free_txskb(&local->hw, skb);
872 }
873
874
875
876
877
878
879 sta_info_recalc_tim(sta);
880
881
882
883
884
885
886 return !(skb_queue_empty(&sta->ps_tx_buf[ac]) &&
887 skb_queue_empty(&sta->tx_filtered[ac]));
888}
889
890static bool sta_info_cleanup_expire_buffered(struct ieee80211_local *local,
891 struct sta_info *sta)
892{
893 bool have_buffered = false;
894 int ac;
895
896
897 if (!sta->sdata->bss &&
898 !ieee80211_vif_is_mesh(&sta->sdata->vif))
899 return false;
900
901 for (ac = 0; ac < IEEE80211_NUM_ACS; ac++)
902 have_buffered |=
903 sta_info_cleanup_expire_buffered_ac(local, sta, ac);
904
905 return have_buffered;
906}
907
908static int __must_check __sta_info_destroy_part1(struct sta_info *sta)
909{
910 struct ieee80211_local *local;
911 struct ieee80211_sub_if_data *sdata;
912 int ret;
913
914 might_sleep();
915
916 if (!sta)
917 return -ENOENT;
918
919 local = sta->local;
920 sdata = sta->sdata;
921
922 lockdep_assert_held(&local->sta_mtx);
923
924
925
926
927
928
929
930 set_sta_flag(sta, WLAN_STA_BLOCK_BA);
931 ieee80211_sta_tear_down_BA_sessions(sta, AGG_STOP_DESTROY_STA);
932
933
934
935
936
937
938 drv_sync_rx_queues(local, sta);
939
940 ret = sta_info_hash_del(local, sta);
941 if (WARN_ON(ret))
942 return ret;
943
944
945
946
947
948 if (test_sta_flag(sta, WLAN_STA_TDLS_OFF_CHANNEL)) {
949 drv_tdls_cancel_channel_switch(local, sdata, &sta->sta);
950 clear_sta_flag(sta, WLAN_STA_TDLS_OFF_CHANNEL);
951 }
952
953 list_del_rcu(&sta->list);
954 sta->removed = true;
955
956 drv_sta_pre_rcu_remove(local, sta->sdata, sta);
957
958 if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN &&
959 rcu_access_pointer(sdata->u.vlan.sta) == sta)
960 RCU_INIT_POINTER(sdata->u.vlan.sta, NULL);
961
962 return 0;
963}
964
965static void __sta_info_destroy_part2(struct sta_info *sta)
966{
967 struct ieee80211_local *local = sta->local;
968 struct ieee80211_sub_if_data *sdata = sta->sdata;
969 struct station_info *sinfo;
970 int ret;
971
972
973
974
975
976
977 might_sleep();
978 lockdep_assert_held(&local->sta_mtx);
979
980
981 ieee80211_free_sta_keys(local, sta);
982
983
984 __sta_info_recalc_tim(sta, true);
985
986 sta->dead = true;
987
988 local->num_sta--;
989 local->sta_generation++;
990
991 while (sta->sta_state > IEEE80211_STA_NONE) {
992 ret = sta_info_move_state(sta, sta->sta_state - 1);
993 if (ret) {
994 WARN_ON_ONCE(1);
995 break;
996 }
997 }
998
999 if (sta->uploaded) {
1000 ret = drv_sta_state(local, sdata, sta, IEEE80211_STA_NONE,
1001 IEEE80211_STA_NOTEXIST);
1002 WARN_ON_ONCE(ret != 0);
1003 }
1004
1005 sta_dbg(sdata, "Removed STA %pM\n", sta->sta.addr);
1006
1007 sinfo = kzalloc(sizeof(*sinfo), GFP_KERNEL);
1008 if (sinfo)
1009 sta_set_sinfo(sta, sinfo);
1010 cfg80211_del_sta_sinfo(sdata->dev, sta->sta.addr, sinfo, GFP_KERNEL);
1011 kfree(sinfo);
1012
1013 rate_control_remove_sta_debugfs(sta);
1014 ieee80211_sta_debugfs_remove(sta);
1015
1016 cleanup_single_sta(sta);
1017}
1018
1019int __must_check __sta_info_destroy(struct sta_info *sta)
1020{
1021 int err = __sta_info_destroy_part1(sta);
1022
1023 if (err)
1024 return err;
1025
1026 synchronize_net();
1027
1028 __sta_info_destroy_part2(sta);
1029
1030 return 0;
1031}
1032
1033int sta_info_destroy_addr(struct ieee80211_sub_if_data *sdata, const u8 *addr)
1034{
1035 struct sta_info *sta;
1036 int ret;
1037
1038 mutex_lock(&sdata->local->sta_mtx);
1039 sta = sta_info_get(sdata, addr);
1040 ret = __sta_info_destroy(sta);
1041 mutex_unlock(&sdata->local->sta_mtx);
1042
1043 return ret;
1044}
1045
1046int sta_info_destroy_addr_bss(struct ieee80211_sub_if_data *sdata,
1047 const u8 *addr)
1048{
1049 struct sta_info *sta;
1050 int ret;
1051
1052 mutex_lock(&sdata->local->sta_mtx);
1053 sta = sta_info_get_bss(sdata, addr);
1054 ret = __sta_info_destroy(sta);
1055 mutex_unlock(&sdata->local->sta_mtx);
1056
1057 return ret;
1058}
1059
1060static void sta_info_cleanup(struct timer_list *t)
1061{
1062 struct ieee80211_local *local = from_timer(local, t, sta_cleanup);
1063 struct sta_info *sta;
1064 bool timer_needed = false;
1065
1066 rcu_read_lock();
1067 list_for_each_entry_rcu(sta, &local->sta_list, list)
1068 if (sta_info_cleanup_expire_buffered(local, sta))
1069 timer_needed = true;
1070 rcu_read_unlock();
1071
1072 if (local->quiescing)
1073 return;
1074
1075 if (!timer_needed)
1076 return;
1077
1078 mod_timer(&local->sta_cleanup,
1079 round_jiffies(jiffies + STA_INFO_CLEANUP_INTERVAL));
1080}
1081
1082int sta_info_init(struct ieee80211_local *local)
1083{
1084 int err;
1085
1086 err = rhltable_init(&local->sta_hash, &sta_rht_params);
1087 if (err)
1088 return err;
1089
1090 spin_lock_init(&local->tim_lock);
1091 mutex_init(&local->sta_mtx);
1092 INIT_LIST_HEAD(&local->sta_list);
1093
1094 timer_setup(&local->sta_cleanup, sta_info_cleanup, 0);
1095 return 0;
1096}
1097
1098void sta_info_stop(struct ieee80211_local *local)
1099{
1100 del_timer_sync(&local->sta_cleanup);
1101 rhltable_destroy(&local->sta_hash);
1102}
1103
1104
1105int __sta_info_flush(struct ieee80211_sub_if_data *sdata, bool vlans)
1106{
1107 struct ieee80211_local *local = sdata->local;
1108 struct sta_info *sta, *tmp;
1109 LIST_HEAD(free_list);
1110 int ret = 0;
1111
1112 might_sleep();
1113
1114 WARN_ON(vlans && sdata->vif.type != NL80211_IFTYPE_AP);
1115 WARN_ON(vlans && !sdata->bss);
1116
1117 mutex_lock(&local->sta_mtx);
1118 list_for_each_entry_safe(sta, tmp, &local->sta_list, list) {
1119 if (sdata == sta->sdata ||
1120 (vlans && sdata->bss == sta->sdata->bss)) {
1121 if (!WARN_ON(__sta_info_destroy_part1(sta)))
1122 list_add(&sta->free_list, &free_list);
1123 ret++;
1124 }
1125 }
1126
1127 if (!list_empty(&free_list)) {
1128 synchronize_net();
1129 list_for_each_entry_safe(sta, tmp, &free_list, free_list)
1130 __sta_info_destroy_part2(sta);
1131 }
1132 mutex_unlock(&local->sta_mtx);
1133
1134 return ret;
1135}
1136
1137void ieee80211_sta_expire(struct ieee80211_sub_if_data *sdata,
1138 unsigned long exp_time)
1139{
1140 struct ieee80211_local *local = sdata->local;
1141 struct sta_info *sta, *tmp;
1142
1143 mutex_lock(&local->sta_mtx);
1144
1145 list_for_each_entry_safe(sta, tmp, &local->sta_list, list) {
1146 unsigned long last_active = ieee80211_sta_last_active(sta);
1147
1148 if (sdata != sta->sdata)
1149 continue;
1150
1151 if (time_is_before_jiffies(last_active + exp_time)) {
1152 sta_dbg(sta->sdata, "expiring inactive STA %pM\n",
1153 sta->sta.addr);
1154
1155 if (ieee80211_vif_is_mesh(&sdata->vif) &&
1156 test_sta_flag(sta, WLAN_STA_PS_STA))
1157 atomic_dec(&sdata->u.mesh.ps.num_sta_ps);
1158
1159 WARN_ON(__sta_info_destroy(sta));
1160 }
1161 }
1162
1163 mutex_unlock(&local->sta_mtx);
1164}
1165
1166struct ieee80211_sta *ieee80211_find_sta_by_ifaddr(struct ieee80211_hw *hw,
1167 const u8 *addr,
1168 const u8 *localaddr)
1169{
1170 struct ieee80211_local *local = hw_to_local(hw);
1171 struct rhlist_head *tmp;
1172 struct sta_info *sta;
1173
1174
1175
1176
1177
1178 for_each_sta_info(local, addr, sta, tmp) {
1179 if (localaddr &&
1180 !ether_addr_equal(sta->sdata->vif.addr, localaddr))
1181 continue;
1182 if (!sta->uploaded)
1183 return NULL;
1184 return &sta->sta;
1185 }
1186
1187 return NULL;
1188}
1189EXPORT_SYMBOL_GPL(ieee80211_find_sta_by_ifaddr);
1190
1191struct ieee80211_sta *ieee80211_find_sta(struct ieee80211_vif *vif,
1192 const u8 *addr)
1193{
1194 struct sta_info *sta;
1195
1196 if (!vif)
1197 return NULL;
1198
1199 sta = sta_info_get_bss(vif_to_sdata(vif), addr);
1200 if (!sta)
1201 return NULL;
1202
1203 if (!sta->uploaded)
1204 return NULL;
1205
1206 return &sta->sta;
1207}
1208EXPORT_SYMBOL(ieee80211_find_sta);
1209
1210
1211void ieee80211_sta_ps_deliver_wakeup(struct sta_info *sta)
1212{
1213 struct ieee80211_sub_if_data *sdata = sta->sdata;
1214 struct ieee80211_local *local = sdata->local;
1215 struct sk_buff_head pending;
1216 int filtered = 0, buffered = 0, ac, i;
1217 unsigned long flags;
1218 struct ps_data *ps;
1219
1220 if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
1221 sdata = container_of(sdata->bss, struct ieee80211_sub_if_data,
1222 u.ap);
1223
1224 if (sdata->vif.type == NL80211_IFTYPE_AP)
1225 ps = &sdata->bss->ps;
1226 else if (ieee80211_vif_is_mesh(&sdata->vif))
1227 ps = &sdata->u.mesh.ps;
1228 else
1229 return;
1230
1231 clear_sta_flag(sta, WLAN_STA_SP);
1232
1233 BUILD_BUG_ON(BITS_TO_LONGS(IEEE80211_NUM_TIDS) > 1);
1234 sta->driver_buffered_tids = 0;
1235 sta->txq_buffered_tids = 0;
1236
1237 if (!ieee80211_hw_check(&local->hw, AP_LINK_PS))
1238 drv_sta_notify(local, sdata, STA_NOTIFY_AWAKE, &sta->sta);
1239
1240 if (sta->sta.txq[0]) {
1241 for (i = 0; i < ARRAY_SIZE(sta->sta.txq); i++) {
1242 if (!txq_has_queue(sta->sta.txq[i]))
1243 continue;
1244
1245 drv_wake_tx_queue(local, to_txq_info(sta->sta.txq[i]));
1246 }
1247 }
1248
1249 skb_queue_head_init(&pending);
1250
1251
1252 spin_lock(&sta->ps_lock);
1253
1254 for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
1255 int count = skb_queue_len(&pending), tmp;
1256
1257 spin_lock_irqsave(&sta->tx_filtered[ac].lock, flags);
1258 skb_queue_splice_tail_init(&sta->tx_filtered[ac], &pending);
1259 spin_unlock_irqrestore(&sta->tx_filtered[ac].lock, flags);
1260 tmp = skb_queue_len(&pending);
1261 filtered += tmp - count;
1262 count = tmp;
1263
1264 spin_lock_irqsave(&sta->ps_tx_buf[ac].lock, flags);
1265 skb_queue_splice_tail_init(&sta->ps_tx_buf[ac], &pending);
1266 spin_unlock_irqrestore(&sta->ps_tx_buf[ac].lock, flags);
1267 tmp = skb_queue_len(&pending);
1268 buffered += tmp - count;
1269 }
1270
1271 ieee80211_add_pending_skbs(local, &pending);
1272
1273
1274 clear_sta_flag(sta, WLAN_STA_PS_DELIVER);
1275
1276
1277
1278
1279 clear_sta_flag(sta, WLAN_STA_PSPOLL);
1280 clear_sta_flag(sta, WLAN_STA_UAPSD);
1281 spin_unlock(&sta->ps_lock);
1282
1283 atomic_dec(&ps->num_sta_ps);
1284
1285
1286 if (!ieee80211_vif_is_mesh(&sdata->vif) &&
1287 !ieee80211_smps_is_restrictive(sta->known_smps_mode,
1288 sdata->smps_mode) &&
1289 sta->known_smps_mode != sdata->bss->req_smps &&
1290 sta_info_tx_streams(sta) != 1) {
1291 ht_dbg(sdata,
1292 "%pM just woke up and MIMO capable - update SMPS\n",
1293 sta->sta.addr);
1294 ieee80211_send_smps_action(sdata, sdata->bss->req_smps,
1295 sta->sta.addr,
1296 sdata->vif.bss_conf.bssid);
1297 }
1298
1299 local->total_ps_buffered -= buffered;
1300
1301 sta_info_recalc_tim(sta);
1302
1303 ps_dbg(sdata,
1304 "STA %pM aid %d sending %d filtered/%d PS frames since STA woke up\n",
1305 sta->sta.addr, sta->sta.aid, filtered, buffered);
1306
1307 ieee80211_check_fast_xmit(sta);
1308}
1309
1310static void ieee80211_send_null_response(struct sta_info *sta, int tid,
1311 enum ieee80211_frame_release_type reason,
1312 bool call_driver, bool more_data)
1313{
1314 struct ieee80211_sub_if_data *sdata = sta->sdata;
1315 struct ieee80211_local *local = sdata->local;
1316 struct ieee80211_qos_hdr *nullfunc;
1317 struct sk_buff *skb;
1318 int size = sizeof(*nullfunc);
1319 __le16 fc;
1320 bool qos = sta->sta.wme;
1321 struct ieee80211_tx_info *info;
1322 struct ieee80211_chanctx_conf *chanctx_conf;
1323
1324 if (qos) {
1325 fc = cpu_to_le16(IEEE80211_FTYPE_DATA |
1326 IEEE80211_STYPE_QOS_NULLFUNC |
1327 IEEE80211_FCTL_FROMDS);
1328 } else {
1329 size -= 2;
1330 fc = cpu_to_le16(IEEE80211_FTYPE_DATA |
1331 IEEE80211_STYPE_NULLFUNC |
1332 IEEE80211_FCTL_FROMDS);
1333 }
1334
1335 skb = dev_alloc_skb(local->hw.extra_tx_headroom + size);
1336 if (!skb)
1337 return;
1338
1339 skb_reserve(skb, local->hw.extra_tx_headroom);
1340
1341 nullfunc = skb_put(skb, size);
1342 nullfunc->frame_control = fc;
1343 nullfunc->duration_id = 0;
1344 memcpy(nullfunc->addr1, sta->sta.addr, ETH_ALEN);
1345 memcpy(nullfunc->addr2, sdata->vif.addr, ETH_ALEN);
1346 memcpy(nullfunc->addr3, sdata->vif.addr, ETH_ALEN);
1347 nullfunc->seq_ctrl = 0;
1348
1349 skb->priority = tid;
1350 skb_set_queue_mapping(skb, ieee802_1d_to_ac[tid]);
1351 if (qos) {
1352 nullfunc->qos_ctrl = cpu_to_le16(tid);
1353
1354 if (reason == IEEE80211_FRAME_RELEASE_UAPSD) {
1355 nullfunc->qos_ctrl |=
1356 cpu_to_le16(IEEE80211_QOS_CTL_EOSP);
1357 if (more_data)
1358 nullfunc->frame_control |=
1359 cpu_to_le16(IEEE80211_FCTL_MOREDATA);
1360 }
1361 }
1362
1363 info = IEEE80211_SKB_CB(skb);
1364
1365
1366
1367
1368
1369
1370
1371 info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER |
1372 IEEE80211_TX_STATUS_EOSP |
1373 IEEE80211_TX_CTL_REQ_TX_STATUS;
1374
1375 info->control.flags |= IEEE80211_TX_CTRL_PS_RESPONSE;
1376
1377 if (call_driver)
1378 drv_allow_buffered_frames(local, sta, BIT(tid), 1,
1379 reason, false);
1380
1381 skb->dev = sdata->dev;
1382
1383 rcu_read_lock();
1384 chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf);
1385 if (WARN_ON(!chanctx_conf)) {
1386 rcu_read_unlock();
1387 kfree_skb(skb);
1388 return;
1389 }
1390
1391 info->band = chanctx_conf->def.chan->band;
1392 ieee80211_xmit(sdata, sta, skb);
1393 rcu_read_unlock();
1394}
1395
1396static int find_highest_prio_tid(unsigned long tids)
1397{
1398
1399 if (tids & 0xF8)
1400 return fls(tids) - 1;
1401
1402 if (tids & BIT(0))
1403 return 0;
1404 return fls(tids) - 1;
1405}
1406
1407
1408
1409
1410
1411
1412static bool
1413ieee80211_sta_ps_more_data(struct sta_info *sta, u8 ignored_acs,
1414 enum ieee80211_frame_release_type reason,
1415 unsigned long driver_release_tids)
1416{
1417 int ac;
1418
1419
1420
1421
1422
1423
1424 if (reason == IEEE80211_FRAME_RELEASE_PSPOLL &&
1425 hweight16(driver_release_tids) > 1)
1426 return true;
1427
1428 for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
1429 if (ignored_acs & ieee80211_ac_to_qos_mask[ac])
1430 continue;
1431
1432 if (!skb_queue_empty(&sta->tx_filtered[ac]) ||
1433 !skb_queue_empty(&sta->ps_tx_buf[ac]))
1434 return true;
1435 }
1436
1437 return false;
1438}
1439
1440static void
1441ieee80211_sta_ps_get_frames(struct sta_info *sta, int n_frames, u8 ignored_acs,
1442 enum ieee80211_frame_release_type reason,
1443 struct sk_buff_head *frames,
1444 unsigned long *driver_release_tids)
1445{
1446 struct ieee80211_sub_if_data *sdata = sta->sdata;
1447 struct ieee80211_local *local = sdata->local;
1448 int ac;
1449
1450
1451 for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
1452 unsigned long tids;
1453
1454 if (ignored_acs & ieee80211_ac_to_qos_mask[ac])
1455 continue;
1456
1457 tids = ieee80211_tids_for_ac(ac);
1458
1459
1460
1461
1462 if (skb_queue_empty(frames)) {
1463 *driver_release_tids |=
1464 sta->driver_buffered_tids & tids;
1465 *driver_release_tids |= sta->txq_buffered_tids & tids;
1466 }
1467
1468 if (!*driver_release_tids) {
1469 struct sk_buff *skb;
1470
1471 while (n_frames > 0) {
1472 skb = skb_dequeue(&sta->tx_filtered[ac]);
1473 if (!skb) {
1474 skb = skb_dequeue(
1475 &sta->ps_tx_buf[ac]);
1476 if (skb)
1477 local->total_ps_buffered--;
1478 }
1479 if (!skb)
1480 break;
1481 n_frames--;
1482 __skb_queue_tail(frames, skb);
1483 }
1484 }
1485
1486
1487
1488
1489
1490 if (!skb_queue_empty(&sta->tx_filtered[ac]) ||
1491 !skb_queue_empty(&sta->ps_tx_buf[ac]))
1492 break;
1493 }
1494}
1495
1496static void
1497ieee80211_sta_ps_deliver_response(struct sta_info *sta,
1498 int n_frames, u8 ignored_acs,
1499 enum ieee80211_frame_release_type reason)
1500{
1501 struct ieee80211_sub_if_data *sdata = sta->sdata;
1502 struct ieee80211_local *local = sdata->local;
1503 unsigned long driver_release_tids = 0;
1504 struct sk_buff_head frames;
1505 bool more_data;
1506
1507
1508 set_sta_flag(sta, WLAN_STA_SP);
1509
1510 __skb_queue_head_init(&frames);
1511
1512 ieee80211_sta_ps_get_frames(sta, n_frames, ignored_acs, reason,
1513 &frames, &driver_release_tids);
1514
1515 more_data = ieee80211_sta_ps_more_data(sta, ignored_acs, reason, driver_release_tids);
1516
1517 if (driver_release_tids && reason == IEEE80211_FRAME_RELEASE_PSPOLL)
1518 driver_release_tids =
1519 BIT(find_highest_prio_tid(driver_release_tids));
1520
1521 if (skb_queue_empty(&frames) && !driver_release_tids) {
1522 int tid, ac;
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540 for (ac = IEEE80211_AC_VO; ac < IEEE80211_NUM_ACS; ac++)
1541 if (!(ignored_acs & ieee80211_ac_to_qos_mask[ac]))
1542 break;
1543 tid = 7 - 2 * ac;
1544
1545 ieee80211_send_null_response(sta, tid, reason, true, false);
1546 } else if (!driver_release_tids) {
1547 struct sk_buff_head pending;
1548 struct sk_buff *skb;
1549 int num = 0;
1550 u16 tids = 0;
1551 bool need_null = false;
1552
1553 skb_queue_head_init(&pending);
1554
1555 while ((skb = __skb_dequeue(&frames))) {
1556 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
1557 struct ieee80211_hdr *hdr = (void *) skb->data;
1558 u8 *qoshdr = NULL;
1559
1560 num++;
1561
1562
1563
1564
1565
1566
1567 info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER;
1568 info->control.flags |= IEEE80211_TX_CTRL_PS_RESPONSE;
1569
1570
1571
1572
1573
1574 if (more_data || !skb_queue_empty(&frames))
1575 hdr->frame_control |=
1576 cpu_to_le16(IEEE80211_FCTL_MOREDATA);
1577 else
1578 hdr->frame_control &=
1579 cpu_to_le16(~IEEE80211_FCTL_MOREDATA);
1580
1581 if (ieee80211_is_data_qos(hdr->frame_control) ||
1582 ieee80211_is_qos_nullfunc(hdr->frame_control))
1583 qoshdr = ieee80211_get_qos_ctl(hdr);
1584
1585 tids |= BIT(skb->priority);
1586
1587 __skb_queue_tail(&pending, skb);
1588
1589
1590 if (!skb_queue_empty(&frames))
1591 continue;
1592
1593 if (reason != IEEE80211_FRAME_RELEASE_UAPSD) {
1594
1595 info->flags |= IEEE80211_TX_STATUS_EOSP |
1596 IEEE80211_TX_CTL_REQ_TX_STATUS;
1597 break;
1598 }
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616 if (qoshdr) {
1617 *qoshdr |= IEEE80211_QOS_CTL_EOSP;
1618
1619 info->flags |= IEEE80211_TX_STATUS_EOSP |
1620 IEEE80211_TX_CTL_REQ_TX_STATUS;
1621 } else {
1622
1623
1624
1625
1626
1627
1628
1629
1630 hdr->frame_control |=
1631 cpu_to_le16(IEEE80211_FCTL_MOREDATA);
1632 need_null = true;
1633 num++;
1634 }
1635 break;
1636 }
1637
1638 drv_allow_buffered_frames(local, sta, tids, num,
1639 reason, more_data);
1640
1641 ieee80211_add_pending_skbs(local, &pending);
1642
1643 if (need_null)
1644 ieee80211_send_null_response(
1645 sta, find_highest_prio_tid(tids),
1646 reason, false, false);
1647
1648 sta_info_recalc_tim(sta);
1649 } else {
1650 int tid;
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662 drv_release_buffered_frames(local, sta, driver_release_tids,
1663 n_frames, reason, more_data);
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675 if (!sta->sta.txq[0])
1676 return;
1677
1678 for (tid = 0; tid < ARRAY_SIZE(sta->sta.txq); tid++) {
1679 if (!(driver_release_tids & BIT(tid)) ||
1680 txq_has_queue(sta->sta.txq[tid]))
1681 continue;
1682
1683 sta_info_recalc_tim(sta);
1684 break;
1685 }
1686 }
1687}
1688
1689void ieee80211_sta_ps_deliver_poll_response(struct sta_info *sta)
1690{
1691 u8 ignore_for_response = sta->sta.uapsd_queues;
1692
1693
1694
1695
1696
1697
1698 if (ignore_for_response == BIT(IEEE80211_NUM_ACS) - 1)
1699 ignore_for_response = 0;
1700
1701 ieee80211_sta_ps_deliver_response(sta, 1, ignore_for_response,
1702 IEEE80211_FRAME_RELEASE_PSPOLL);
1703}
1704
1705void ieee80211_sta_ps_deliver_uapsd(struct sta_info *sta)
1706{
1707 int n_frames = sta->sta.max_sp;
1708 u8 delivery_enabled = sta->sta.uapsd_queues;
1709
1710
1711
1712
1713
1714
1715
1716 if (!delivery_enabled)
1717 return;
1718
1719 switch (sta->sta.max_sp) {
1720 case 1:
1721 n_frames = 2;
1722 break;
1723 case 2:
1724 n_frames = 4;
1725 break;
1726 case 3:
1727 n_frames = 6;
1728 break;
1729 case 0:
1730
1731 n_frames = 128;
1732 break;
1733 }
1734
1735 ieee80211_sta_ps_deliver_response(sta, n_frames, ~delivery_enabled,
1736 IEEE80211_FRAME_RELEASE_UAPSD);
1737}
1738
1739void ieee80211_sta_block_awake(struct ieee80211_hw *hw,
1740 struct ieee80211_sta *pubsta, bool block)
1741{
1742 struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
1743
1744 trace_api_sta_block_awake(sta->local, pubsta, block);
1745
1746 if (block) {
1747 set_sta_flag(sta, WLAN_STA_PS_DRIVER);
1748 ieee80211_clear_fast_xmit(sta);
1749 return;
1750 }
1751
1752 if (!test_sta_flag(sta, WLAN_STA_PS_DRIVER))
1753 return;
1754
1755 if (!test_sta_flag(sta, WLAN_STA_PS_STA)) {
1756 set_sta_flag(sta, WLAN_STA_PS_DELIVER);
1757 clear_sta_flag(sta, WLAN_STA_PS_DRIVER);
1758 ieee80211_queue_work(hw, &sta->drv_deliver_wk);
1759 } else if (test_sta_flag(sta, WLAN_STA_PSPOLL) ||
1760 test_sta_flag(sta, WLAN_STA_UAPSD)) {
1761
1762 clear_sta_flag(sta, WLAN_STA_PS_DRIVER);
1763 ieee80211_queue_work(hw, &sta->drv_deliver_wk);
1764 } else {
1765 clear_sta_flag(sta, WLAN_STA_PS_DRIVER);
1766 ieee80211_check_fast_xmit(sta);
1767 }
1768}
1769EXPORT_SYMBOL(ieee80211_sta_block_awake);
1770
1771void ieee80211_sta_eosp(struct ieee80211_sta *pubsta)
1772{
1773 struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
1774 struct ieee80211_local *local = sta->local;
1775
1776 trace_api_eosp(local, pubsta);
1777
1778 clear_sta_flag(sta, WLAN_STA_SP);
1779}
1780EXPORT_SYMBOL(ieee80211_sta_eosp);
1781
1782void ieee80211_send_eosp_nullfunc(struct ieee80211_sta *pubsta, int tid)
1783{
1784 struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
1785 enum ieee80211_frame_release_type reason;
1786 bool more_data;
1787
1788 trace_api_send_eosp_nullfunc(sta->local, pubsta, tid);
1789
1790 reason = IEEE80211_FRAME_RELEASE_UAPSD;
1791 more_data = ieee80211_sta_ps_more_data(sta, ~sta->sta.uapsd_queues,
1792 reason, 0);
1793
1794 ieee80211_send_null_response(sta, tid, reason, false, more_data);
1795}
1796EXPORT_SYMBOL(ieee80211_send_eosp_nullfunc);
1797
1798void ieee80211_sta_set_buffered(struct ieee80211_sta *pubsta,
1799 u8 tid, bool buffered)
1800{
1801 struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
1802
1803 if (WARN_ON(tid >= IEEE80211_NUM_TIDS))
1804 return;
1805
1806 trace_api_sta_set_buffered(sta->local, pubsta, tid, buffered);
1807
1808 if (buffered)
1809 set_bit(tid, &sta->driver_buffered_tids);
1810 else
1811 clear_bit(tid, &sta->driver_buffered_tids);
1812
1813 sta_info_recalc_tim(sta);
1814}
1815EXPORT_SYMBOL(ieee80211_sta_set_buffered);
1816
1817int sta_info_move_state(struct sta_info *sta,
1818 enum ieee80211_sta_state new_state)
1819{
1820 might_sleep();
1821
1822 if (sta->sta_state == new_state)
1823 return 0;
1824
1825
1826
1827 switch (new_state) {
1828 case IEEE80211_STA_NONE:
1829 if (sta->sta_state != IEEE80211_STA_AUTH)
1830 return -EINVAL;
1831 break;
1832 case IEEE80211_STA_AUTH:
1833 if (sta->sta_state != IEEE80211_STA_NONE &&
1834 sta->sta_state != IEEE80211_STA_ASSOC)
1835 return -EINVAL;
1836 break;
1837 case IEEE80211_STA_ASSOC:
1838 if (sta->sta_state != IEEE80211_STA_AUTH &&
1839 sta->sta_state != IEEE80211_STA_AUTHORIZED)
1840 return -EINVAL;
1841 break;
1842 case IEEE80211_STA_AUTHORIZED:
1843 if (sta->sta_state != IEEE80211_STA_ASSOC)
1844 return -EINVAL;
1845 break;
1846 default:
1847 WARN(1, "invalid state %d", new_state);
1848 return -EINVAL;
1849 }
1850
1851 sta_dbg(sta->sdata, "moving STA %pM to state %d\n",
1852 sta->sta.addr, new_state);
1853
1854
1855
1856
1857
1858 if (test_sta_flag(sta, WLAN_STA_INSERTED)) {
1859 int err = drv_sta_state(sta->local, sta->sdata, sta,
1860 sta->sta_state, new_state);
1861 if (err)
1862 return err;
1863 }
1864
1865
1866
1867 switch (new_state) {
1868 case IEEE80211_STA_NONE:
1869 if (sta->sta_state == IEEE80211_STA_AUTH)
1870 clear_bit(WLAN_STA_AUTH, &sta->_flags);
1871 break;
1872 case IEEE80211_STA_AUTH:
1873 if (sta->sta_state == IEEE80211_STA_NONE) {
1874 set_bit(WLAN_STA_AUTH, &sta->_flags);
1875 } else if (sta->sta_state == IEEE80211_STA_ASSOC) {
1876 clear_bit(WLAN_STA_ASSOC, &sta->_flags);
1877 ieee80211_recalc_min_chandef(sta->sdata);
1878 if (!sta->sta.support_p2p_ps)
1879 ieee80211_recalc_p2p_go_ps_allowed(sta->sdata);
1880 }
1881 break;
1882 case IEEE80211_STA_ASSOC:
1883 if (sta->sta_state == IEEE80211_STA_AUTH) {
1884 set_bit(WLAN_STA_ASSOC, &sta->_flags);
1885 ieee80211_recalc_min_chandef(sta->sdata);
1886 if (!sta->sta.support_p2p_ps)
1887 ieee80211_recalc_p2p_go_ps_allowed(sta->sdata);
1888 } else if (sta->sta_state == IEEE80211_STA_AUTHORIZED) {
1889 ieee80211_vif_dec_num_mcast(sta->sdata);
1890 clear_bit(WLAN_STA_AUTHORIZED, &sta->_flags);
1891 ieee80211_clear_fast_xmit(sta);
1892 ieee80211_clear_fast_rx(sta);
1893 }
1894 break;
1895 case IEEE80211_STA_AUTHORIZED:
1896 if (sta->sta_state == IEEE80211_STA_ASSOC) {
1897 ieee80211_vif_inc_num_mcast(sta->sdata);
1898 set_bit(WLAN_STA_AUTHORIZED, &sta->_flags);
1899 ieee80211_check_fast_xmit(sta);
1900 ieee80211_check_fast_rx(sta);
1901 }
1902 break;
1903 default:
1904 break;
1905 }
1906
1907 sta->sta_state = new_state;
1908
1909 return 0;
1910}
1911
1912u8 sta_info_tx_streams(struct sta_info *sta)
1913{
1914 struct ieee80211_sta_ht_cap *ht_cap = &sta->sta.ht_cap;
1915 u8 rx_streams;
1916
1917 if (!sta->sta.ht_cap.ht_supported)
1918 return 1;
1919
1920 if (sta->sta.vht_cap.vht_supported) {
1921 int i;
1922 u16 tx_mcs_map =
1923 le16_to_cpu(sta->sta.vht_cap.vht_mcs.tx_mcs_map);
1924
1925 for (i = 7; i >= 0; i--)
1926 if ((tx_mcs_map & (0x3 << (i * 2))) !=
1927 IEEE80211_VHT_MCS_NOT_SUPPORTED)
1928 return i + 1;
1929 }
1930
1931 if (ht_cap->mcs.rx_mask[3])
1932 rx_streams = 4;
1933 else if (ht_cap->mcs.rx_mask[2])
1934 rx_streams = 3;
1935 else if (ht_cap->mcs.rx_mask[1])
1936 rx_streams = 2;
1937 else
1938 rx_streams = 1;
1939
1940 if (!(ht_cap->mcs.tx_params & IEEE80211_HT_MCS_TX_RX_DIFF))
1941 return rx_streams;
1942
1943 return ((ht_cap->mcs.tx_params & IEEE80211_HT_MCS_TX_MAX_STREAMS_MASK)
1944 >> IEEE80211_HT_MCS_TX_MAX_STREAMS_SHIFT) + 1;
1945}
1946
1947static struct ieee80211_sta_rx_stats *
1948sta_get_last_rx_stats(struct sta_info *sta)
1949{
1950 struct ieee80211_sta_rx_stats *stats = &sta->rx_stats;
1951 struct ieee80211_local *local = sta->local;
1952 int cpu;
1953
1954 if (!ieee80211_hw_check(&local->hw, USES_RSS))
1955 return stats;
1956
1957 for_each_possible_cpu(cpu) {
1958 struct ieee80211_sta_rx_stats *cpustats;
1959
1960 cpustats = per_cpu_ptr(sta->pcpu_rx_stats, cpu);
1961
1962 if (time_after(cpustats->last_rx, stats->last_rx))
1963 stats = cpustats;
1964 }
1965
1966 return stats;
1967}
1968
1969static void sta_stats_decode_rate(struct ieee80211_local *local, u16 rate,
1970 struct rate_info *rinfo)
1971{
1972 rinfo->bw = STA_STATS_GET(BW, rate);
1973
1974 switch (STA_STATS_GET(TYPE, rate)) {
1975 case STA_STATS_RATE_TYPE_VHT:
1976 rinfo->flags = RATE_INFO_FLAGS_VHT_MCS;
1977 rinfo->mcs = STA_STATS_GET(VHT_MCS, rate);
1978 rinfo->nss = STA_STATS_GET(VHT_NSS, rate);
1979 if (STA_STATS_GET(SGI, rate))
1980 rinfo->flags |= RATE_INFO_FLAGS_SHORT_GI;
1981 break;
1982 case STA_STATS_RATE_TYPE_HT:
1983 rinfo->flags = RATE_INFO_FLAGS_MCS;
1984 rinfo->mcs = STA_STATS_GET(HT_MCS, rate);
1985 if (STA_STATS_GET(SGI, rate))
1986 rinfo->flags |= RATE_INFO_FLAGS_SHORT_GI;
1987 break;
1988 case STA_STATS_RATE_TYPE_LEGACY: {
1989 struct ieee80211_supported_band *sband;
1990 u16 brate;
1991 unsigned int shift;
1992 int band = STA_STATS_GET(LEGACY_BAND, rate);
1993 int rate_idx = STA_STATS_GET(LEGACY_IDX, rate);
1994
1995 rinfo->flags = 0;
1996 sband = local->hw.wiphy->bands[band];
1997 brate = sband->bitrates[rate_idx].bitrate;
1998 if (rinfo->bw == RATE_INFO_BW_5)
1999 shift = 2;
2000 else if (rinfo->bw == RATE_INFO_BW_10)
2001 shift = 1;
2002 else
2003 shift = 0;
2004 rinfo->legacy = DIV_ROUND_UP(brate, 1 << shift);
2005 break;
2006 }
2007 }
2008}
2009
2010static int sta_set_rate_info_rx(struct sta_info *sta, struct rate_info *rinfo)
2011{
2012 u16 rate = READ_ONCE(sta_get_last_rx_stats(sta)->last_rate);
2013
2014 if (rate == STA_STATS_RATE_INVALID)
2015 return -EINVAL;
2016
2017 sta_stats_decode_rate(sta->local, rate, rinfo);
2018 return 0;
2019}
2020
2021static void sta_set_tidstats(struct sta_info *sta,
2022 struct cfg80211_tid_stats *tidstats,
2023 int tid)
2024{
2025 struct ieee80211_local *local = sta->local;
2026
2027 if (!(tidstats->filled & BIT(NL80211_TID_STATS_RX_MSDU))) {
2028 unsigned int start;
2029
2030 do {
2031 start = u64_stats_fetch_begin(&sta->rx_stats.syncp);
2032 tidstats->rx_msdu = sta->rx_stats.msdu[tid];
2033 } while (u64_stats_fetch_retry(&sta->rx_stats.syncp, start));
2034
2035 tidstats->filled |= BIT(NL80211_TID_STATS_RX_MSDU);
2036 }
2037
2038 if (!(tidstats->filled & BIT(NL80211_TID_STATS_TX_MSDU))) {
2039 tidstats->filled |= BIT(NL80211_TID_STATS_TX_MSDU);
2040 tidstats->tx_msdu = sta->tx_stats.msdu[tid];
2041 }
2042
2043 if (!(tidstats->filled & BIT(NL80211_TID_STATS_TX_MSDU_RETRIES)) &&
2044 ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS)) {
2045 tidstats->filled |= BIT(NL80211_TID_STATS_TX_MSDU_RETRIES);
2046 tidstats->tx_msdu_retries = sta->status_stats.msdu_retries[tid];
2047 }
2048
2049 if (!(tidstats->filled & BIT(NL80211_TID_STATS_TX_MSDU_FAILED)) &&
2050 ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS)) {
2051 tidstats->filled |= BIT(NL80211_TID_STATS_TX_MSDU_FAILED);
2052 tidstats->tx_msdu_failed = sta->status_stats.msdu_failed[tid];
2053 }
2054}
2055
2056static inline u64 sta_get_stats_bytes(struct ieee80211_sta_rx_stats *rxstats)
2057{
2058 unsigned int start;
2059 u64 value;
2060
2061 do {
2062 start = u64_stats_fetch_begin(&rxstats->syncp);
2063 value = rxstats->bytes;
2064 } while (u64_stats_fetch_retry(&rxstats->syncp, start));
2065
2066 return value;
2067}
2068
2069void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo)
2070{
2071 struct ieee80211_sub_if_data *sdata = sta->sdata;
2072 struct ieee80211_local *local = sdata->local;
2073 u32 thr = 0;
2074 int i, ac, cpu;
2075 struct ieee80211_sta_rx_stats *last_rxstats;
2076
2077 last_rxstats = sta_get_last_rx_stats(sta);
2078
2079 sinfo->generation = sdata->local->sta_generation;
2080
2081
2082
2083
2084
2085 if (sdata->vif.type == NL80211_IFTYPE_STATION)
2086 sinfo->rx_beacon = sdata->u.mgd.count_beacon_signal;
2087
2088 drv_sta_statistics(local, sdata, &sta->sta, sinfo);
2089
2090 sinfo->filled |= BIT(NL80211_STA_INFO_INACTIVE_TIME) |
2091 BIT(NL80211_STA_INFO_STA_FLAGS) |
2092 BIT(NL80211_STA_INFO_BSS_PARAM) |
2093 BIT(NL80211_STA_INFO_CONNECTED_TIME) |
2094 BIT(NL80211_STA_INFO_RX_DROP_MISC);
2095
2096 if (sdata->vif.type == NL80211_IFTYPE_STATION) {
2097 sinfo->beacon_loss_count = sdata->u.mgd.beacon_loss_count;
2098 sinfo->filled |= BIT(NL80211_STA_INFO_BEACON_LOSS);
2099 }
2100
2101 sinfo->connected_time = ktime_get_seconds() - sta->last_connected;
2102 sinfo->inactive_time =
2103 jiffies_to_msecs(jiffies - ieee80211_sta_last_active(sta));
2104
2105 if (!(sinfo->filled & (BIT(NL80211_STA_INFO_TX_BYTES64) |
2106 BIT(NL80211_STA_INFO_TX_BYTES)))) {
2107 sinfo->tx_bytes = 0;
2108 for (ac = 0; ac < IEEE80211_NUM_ACS; ac++)
2109 sinfo->tx_bytes += sta->tx_stats.bytes[ac];
2110 sinfo->filled |= BIT(NL80211_STA_INFO_TX_BYTES64);
2111 }
2112
2113 if (!(sinfo->filled & BIT(NL80211_STA_INFO_TX_PACKETS))) {
2114 sinfo->tx_packets = 0;
2115 for (ac = 0; ac < IEEE80211_NUM_ACS; ac++)
2116 sinfo->tx_packets += sta->tx_stats.packets[ac];
2117 sinfo->filled |= BIT(NL80211_STA_INFO_TX_PACKETS);
2118 }
2119
2120 if (!(sinfo->filled & (BIT(NL80211_STA_INFO_RX_BYTES64) |
2121 BIT(NL80211_STA_INFO_RX_BYTES)))) {
2122 sinfo->rx_bytes += sta_get_stats_bytes(&sta->rx_stats);
2123
2124 if (sta->pcpu_rx_stats) {
2125 for_each_possible_cpu(cpu) {
2126 struct ieee80211_sta_rx_stats *cpurxs;
2127
2128 cpurxs = per_cpu_ptr(sta->pcpu_rx_stats, cpu);
2129 sinfo->rx_bytes += sta_get_stats_bytes(cpurxs);
2130 }
2131 }
2132
2133 sinfo->filled |= BIT(NL80211_STA_INFO_RX_BYTES64);
2134 }
2135
2136 if (!(sinfo->filled & BIT(NL80211_STA_INFO_RX_PACKETS))) {
2137 sinfo->rx_packets = sta->rx_stats.packets;
2138 if (sta->pcpu_rx_stats) {
2139 for_each_possible_cpu(cpu) {
2140 struct ieee80211_sta_rx_stats *cpurxs;
2141
2142 cpurxs = per_cpu_ptr(sta->pcpu_rx_stats, cpu);
2143 sinfo->rx_packets += cpurxs->packets;
2144 }
2145 }
2146 sinfo->filled |= BIT(NL80211_STA_INFO_RX_PACKETS);
2147 }
2148
2149 if (!(sinfo->filled & BIT(NL80211_STA_INFO_TX_RETRIES))) {
2150 sinfo->tx_retries = sta->status_stats.retry_count;
2151 sinfo->filled |= BIT(NL80211_STA_INFO_TX_RETRIES);
2152 }
2153
2154 if (!(sinfo->filled & BIT(NL80211_STA_INFO_TX_FAILED))) {
2155 sinfo->tx_failed = sta->status_stats.retry_failed;
2156 sinfo->filled |= BIT(NL80211_STA_INFO_TX_FAILED);
2157 }
2158
2159 sinfo->rx_dropped_misc = sta->rx_stats.dropped;
2160 if (sta->pcpu_rx_stats) {
2161 for_each_possible_cpu(cpu) {
2162 struct ieee80211_sta_rx_stats *cpurxs;
2163
2164 cpurxs = per_cpu_ptr(sta->pcpu_rx_stats, cpu);
2165 sinfo->rx_dropped_misc += cpurxs->dropped;
2166 }
2167 }
2168
2169 if (sdata->vif.type == NL80211_IFTYPE_STATION &&
2170 !(sdata->vif.driver_flags & IEEE80211_VIF_BEACON_FILTER)) {
2171 sinfo->filled |= BIT(NL80211_STA_INFO_BEACON_RX) |
2172 BIT(NL80211_STA_INFO_BEACON_SIGNAL_AVG);
2173 sinfo->rx_beacon_signal_avg = ieee80211_ave_rssi(&sdata->vif);
2174 }
2175
2176 if (ieee80211_hw_check(&sta->local->hw, SIGNAL_DBM) ||
2177 ieee80211_hw_check(&sta->local->hw, SIGNAL_UNSPEC)) {
2178 if (!(sinfo->filled & BIT(NL80211_STA_INFO_SIGNAL))) {
2179 sinfo->signal = (s8)last_rxstats->last_signal;
2180 sinfo->filled |= BIT(NL80211_STA_INFO_SIGNAL);
2181 }
2182
2183 if (!sta->pcpu_rx_stats &&
2184 !(sinfo->filled & BIT(NL80211_STA_INFO_SIGNAL_AVG))) {
2185 sinfo->signal_avg =
2186 -ewma_signal_read(&sta->rx_stats_avg.signal);
2187 sinfo->filled |= BIT(NL80211_STA_INFO_SIGNAL_AVG);
2188 }
2189 }
2190
2191
2192
2193
2194
2195 if (last_rxstats->chains &&
2196 !(sinfo->filled & (BIT(NL80211_STA_INFO_CHAIN_SIGNAL) |
2197 BIT(NL80211_STA_INFO_CHAIN_SIGNAL_AVG)))) {
2198 sinfo->filled |= BIT(NL80211_STA_INFO_CHAIN_SIGNAL);
2199 if (!sta->pcpu_rx_stats)
2200 sinfo->filled |= BIT(NL80211_STA_INFO_CHAIN_SIGNAL_AVG);
2201
2202 sinfo->chains = last_rxstats->chains;
2203
2204 for (i = 0; i < ARRAY_SIZE(sinfo->chain_signal); i++) {
2205 sinfo->chain_signal[i] =
2206 last_rxstats->chain_signal_last[i];
2207 sinfo->chain_signal_avg[i] =
2208 -ewma_signal_read(&sta->rx_stats_avg.chain_signal[i]);
2209 }
2210 }
2211
2212 if (!(sinfo->filled & BIT(NL80211_STA_INFO_TX_BITRATE))) {
2213 sta_set_rate_info_tx(sta, &sta->tx_stats.last_rate,
2214 &sinfo->txrate);
2215 sinfo->filled |= BIT(NL80211_STA_INFO_TX_BITRATE);
2216 }
2217
2218 if (!(sinfo->filled & BIT(NL80211_STA_INFO_RX_BITRATE))) {
2219 if (sta_set_rate_info_rx(sta, &sinfo->rxrate) == 0)
2220 sinfo->filled |= BIT(NL80211_STA_INFO_RX_BITRATE);
2221 }
2222
2223 sinfo->filled |= BIT(NL80211_STA_INFO_TID_STATS);
2224 for (i = 0; i < IEEE80211_NUM_TIDS + 1; i++) {
2225 struct cfg80211_tid_stats *tidstats = &sinfo->pertid[i];
2226
2227 sta_set_tidstats(sta, tidstats, i);
2228 }
2229
2230 if (ieee80211_vif_is_mesh(&sdata->vif)) {
2231#ifdef CONFIG_MAC80211_MESH
2232 sinfo->filled |= BIT(NL80211_STA_INFO_LLID) |
2233 BIT(NL80211_STA_INFO_PLID) |
2234 BIT(NL80211_STA_INFO_PLINK_STATE) |
2235 BIT(NL80211_STA_INFO_LOCAL_PM) |
2236 BIT(NL80211_STA_INFO_PEER_PM) |
2237 BIT(NL80211_STA_INFO_NONPEER_PM);
2238
2239 sinfo->llid = sta->mesh->llid;
2240 sinfo->plid = sta->mesh->plid;
2241 sinfo->plink_state = sta->mesh->plink_state;
2242 if (test_sta_flag(sta, WLAN_STA_TOFFSET_KNOWN)) {
2243 sinfo->filled |= BIT(NL80211_STA_INFO_T_OFFSET);
2244 sinfo->t_offset = sta->mesh->t_offset;
2245 }
2246 sinfo->local_pm = sta->mesh->local_pm;
2247 sinfo->peer_pm = sta->mesh->peer_pm;
2248 sinfo->nonpeer_pm = sta->mesh->nonpeer_pm;
2249#endif
2250 }
2251
2252 sinfo->bss_param.flags = 0;
2253 if (sdata->vif.bss_conf.use_cts_prot)
2254 sinfo->bss_param.flags |= BSS_PARAM_FLAGS_CTS_PROT;
2255 if (sdata->vif.bss_conf.use_short_preamble)
2256 sinfo->bss_param.flags |= BSS_PARAM_FLAGS_SHORT_PREAMBLE;
2257 if (sdata->vif.bss_conf.use_short_slot)
2258 sinfo->bss_param.flags |= BSS_PARAM_FLAGS_SHORT_SLOT_TIME;
2259 sinfo->bss_param.dtim_period = sdata->vif.bss_conf.dtim_period;
2260 sinfo->bss_param.beacon_interval = sdata->vif.bss_conf.beacon_int;
2261
2262 sinfo->sta_flags.set = 0;
2263 sinfo->sta_flags.mask = BIT(NL80211_STA_FLAG_AUTHORIZED) |
2264 BIT(NL80211_STA_FLAG_SHORT_PREAMBLE) |
2265 BIT(NL80211_STA_FLAG_WME) |
2266 BIT(NL80211_STA_FLAG_MFP) |
2267 BIT(NL80211_STA_FLAG_AUTHENTICATED) |
2268 BIT(NL80211_STA_FLAG_ASSOCIATED) |
2269 BIT(NL80211_STA_FLAG_TDLS_PEER);
2270 if (test_sta_flag(sta, WLAN_STA_AUTHORIZED))
2271 sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_AUTHORIZED);
2272 if (test_sta_flag(sta, WLAN_STA_SHORT_PREAMBLE))
2273 sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_SHORT_PREAMBLE);
2274 if (sta->sta.wme)
2275 sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_WME);
2276 if (test_sta_flag(sta, WLAN_STA_MFP))
2277 sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_MFP);
2278 if (test_sta_flag(sta, WLAN_STA_AUTH))
2279 sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_AUTHENTICATED);
2280 if (test_sta_flag(sta, WLAN_STA_ASSOC))
2281 sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_ASSOCIATED);
2282 if (test_sta_flag(sta, WLAN_STA_TDLS_PEER))
2283 sinfo->sta_flags.set |= BIT(NL80211_STA_FLAG_TDLS_PEER);
2284
2285 thr = sta_get_expected_throughput(sta);
2286
2287 if (thr != 0) {
2288 sinfo->filled |= BIT(NL80211_STA_INFO_EXPECTED_THROUGHPUT);
2289 sinfo->expected_throughput = thr;
2290 }
2291
2292 if (!(sinfo->filled & BIT_ULL(NL80211_STA_INFO_ACK_SIGNAL)) &&
2293 sta->status_stats.ack_signal_filled) {
2294 sinfo->ack_signal = sta->status_stats.last_ack_signal;
2295 sinfo->filled |= BIT_ULL(NL80211_STA_INFO_ACK_SIGNAL);
2296 }
2297}
2298
2299u32 sta_get_expected_throughput(struct sta_info *sta)
2300{
2301 struct ieee80211_sub_if_data *sdata = sta->sdata;
2302 struct ieee80211_local *local = sdata->local;
2303 struct rate_control_ref *ref = NULL;
2304 u32 thr = 0;
2305
2306 if (test_sta_flag(sta, WLAN_STA_RATE_CONTROL))
2307 ref = local->rate_ctrl;
2308
2309
2310 if (ref && ref->ops->get_expected_throughput)
2311 thr = ref->ops->get_expected_throughput(sta->rate_ctrl_priv);
2312 else
2313 thr = drv_get_expected_throughput(local, sta);
2314
2315 return thr;
2316}
2317
2318unsigned long ieee80211_sta_last_active(struct sta_info *sta)
2319{
2320 struct ieee80211_sta_rx_stats *stats = sta_get_last_rx_stats(sta);
2321
2322 if (time_after(stats->last_rx, sta->status_stats.last_ack))
2323 return stats->last_rx;
2324 return sta->status_stats.last_ack;
2325}
2326
2327static void sta_update_codel_params(struct sta_info *sta, u32 thr)
2328{
2329 if (!sta->sdata->local->ops->wake_tx_queue)
2330 return;
2331
2332 if (thr && thr < STA_SLOW_THRESHOLD * sta->local->num_sta) {
2333 sta->cparams.target = MS2TIME(50);
2334 sta->cparams.interval = MS2TIME(300);
2335 sta->cparams.ecn = false;
2336 } else {
2337 sta->cparams.target = MS2TIME(20);
2338 sta->cparams.interval = MS2TIME(100);
2339 sta->cparams.ecn = true;
2340 }
2341}
2342
2343void ieee80211_sta_set_expected_throughput(struct ieee80211_sta *pubsta,
2344 u32 thr)
2345{
2346 struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
2347
2348 sta_update_codel_params(sta, thr);
2349}
2350