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