Lines Matching full:tid
61 static void ieee80211_send_addba_request(struct sta_info *sta, u16 tid, in ieee80211_send_addba_request() argument
88 capab |= u16_encode_bits(tid, IEEE80211_ADDBA_PARAM_TID_MASK); in ieee80211_send_addba_request()
100 ieee80211_tx_skb_tid(sdata, skb, tid, -1); in ieee80211_send_addba_request()
103 void ieee80211_send_bar(struct ieee80211_vif *vif, u8 *ra, u16 tid, u16 ssn) in ieee80211_send_bar() argument
123 bar_control |= (u16)(tid << IEEE80211_BAR_CTRL_TID_INFO_SHIFT); in ieee80211_send_bar()
129 ieee80211_tx_skb_tid(sdata, skb, tid, -1); in ieee80211_send_bar()
133 void ieee80211_assign_tid_tx(struct sta_info *sta, int tid, in ieee80211_assign_tid_tx() argument
138 rcu_assign_pointer(sta->ampdu_mlme.tid_tx[tid], tid_tx); in ieee80211_assign_tid_tx()
153 ieee80211_stop_queue_agg(struct ieee80211_sub_if_data *sdata, int tid) in __acquires()
155 int queue = sdata->vif.hw_queue[ieee80211_ac_from_tid(tid)]; in __acquires()
168 ieee80211_wake_queue_agg(struct ieee80211_sub_if_data *sdata, int tid) in __releases()
170 int queue = sdata->vif.hw_queue[ieee80211_ac_from_tid(tid)]; in __releases()
181 ieee80211_agg_stop_txq(struct sta_info *sta, int tid) in ieee80211_agg_stop_txq() argument
183 struct ieee80211_txq *txq = sta->sta.txq[tid]; in ieee80211_agg_stop_txq()
202 ieee80211_agg_start_txq(struct sta_info *sta, int tid, bool enable) in ieee80211_agg_start_txq() argument
204 struct ieee80211_txq *txq = sta->sta.txq[tid]; in ieee80211_agg_start_txq()
233 struct tid_ampdu_tx *tid_tx, u16 tid) in __acquires()
236 int queue = sdata->vif.hw_queue[ieee80211_ac_from_tid(tid)]; in __acquires()
239 ieee80211_stop_queue_agg(sdata, tid); in __acquires()
242 "TID %d gone but expected when splicing aggregates from the pending queue\n", in __acquires()
243 tid)) in __acquires()
256 ieee80211_agg_splice_finish(struct ieee80211_sub_if_data *sdata, u16 tid) in __releases()
258 ieee80211_wake_queue_agg(sdata, tid); in __releases()
261 static void ieee80211_remove_tid_tx(struct sta_info *sta, int tid) in ieee80211_remove_tid_tx() argument
268 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_remove_tid_tx()
280 ieee80211_agg_splice_packets(sta->sdata, tid_tx, tid); in ieee80211_remove_tid_tx()
283 ieee80211_assign_tid_tx(sta, tid, NULL); in ieee80211_remove_tid_tx()
285 ieee80211_agg_splice_finish(sta->sdata, tid); in ieee80211_remove_tid_tx()
290 int __ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid, in __ieee80211_stop_tx_ba_session() argument
297 .tid = tid, in __ieee80211_stop_tx_ba_session()
324 tid_tx = sta->ampdu_mlme.tid_start_tx[tid]; in __ieee80211_stop_tx_ba_session()
326 sta->ampdu_mlme.tid_start_tx[tid] = NULL; in __ieee80211_stop_tx_ba_session()
328 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in __ieee80211_stop_tx_ba_session()
350 ieee80211_assign_tid_tx(sta, tid, NULL); in __ieee80211_stop_tx_ba_session()
358 ieee80211_agg_stop_txq(sta, tid); in __ieee80211_stop_tx_ba_session()
362 ht_dbg(sta->sdata, "Tx BA session stop requested for %pM tid %u\n", in __ieee80211_stop_tx_ba_session()
363 sta->sta.addr, tid); in __ieee80211_stop_tx_ba_session()
412 * to the driver on this TID which might confuse it. in __ieee80211_stop_tx_ba_session()
428 u8 tid = tid_tx->tid; in sta_addba_resp_timer_expired() local
430 /* check if the TID waits for addBA response */ in sta_addba_resp_timer_expired()
433 "timer expired on %pM tid %d not expecting addBA response\n", in sta_addba_resp_timer_expired()
434 sta->sta.addr, tid); in sta_addba_resp_timer_expired()
438 ht_dbg(sta->sdata, "addBA response timer expired on %pM tid %d\n", in sta_addba_resp_timer_expired()
439 sta->sta.addr, tid); in sta_addba_resp_timer_expired()
441 ieee80211_stop_tx_ba_session(&sta->sta, tid); in sta_addba_resp_timer_expired()
449 u8 tid = tid_tx->tid; in ieee80211_send_addba_with_timeout() local
460 ht_dbg(sdata, "activated addBA response timer on %pM tid %d\n", in ieee80211_send_addba_with_timeout()
461 sta->sta.addr, tid); in ieee80211_send_addba_with_timeout()
464 sta->ampdu_mlme.last_addba_req_time[tid] = jiffies; in ieee80211_send_addba_with_timeout()
465 sta->ampdu_mlme.addba_req_num[tid]++; in ieee80211_send_addba_with_timeout()
486 ieee80211_send_addba_request(sta, tid, tid_tx->dialog_token, in ieee80211_send_addba_with_timeout()
492 void ieee80211_tx_ba_session_handle_start(struct sta_info *sta, int tid) in ieee80211_tx_ba_session_handle_start() argument
500 .tid = tid, in ieee80211_tx_ba_session_handle_start()
507 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_tx_ba_session_handle_start()
519 * packets have been flushed out and no packets for this TID in ieee80211_tx_ba_session_handle_start()
524 params.ssn = sta->tid_seq[tid] >> 4; in ieee80211_tx_ba_session_handle_start()
538 "BA request denied - HW unavailable for %pM tid %d\n", in ieee80211_tx_ba_session_handle_start()
539 sta->sta.addr, tid); in ieee80211_tx_ba_session_handle_start()
541 ieee80211_agg_splice_packets(sdata, tid_tx, tid); in ieee80211_tx_ba_session_handle_start()
542 ieee80211_assign_tid_tx(sta, tid, NULL); in ieee80211_tx_ba_session_handle_start()
543 ieee80211_agg_splice_finish(sdata, tid); in ieee80211_tx_ba_session_handle_start()
546 ieee80211_agg_start_txq(sta, tid, false); in ieee80211_tx_ba_session_handle_start()
556 u16 tid) in ieee80211_refresh_tx_agg_session_timer() argument
561 if (WARN_ON_ONCE(tid >= IEEE80211_NUM_TIDS)) in ieee80211_refresh_tx_agg_session_timer()
564 tid_tx = rcu_dereference(sta->ampdu_mlme.tid_tx[tid]); in ieee80211_refresh_tx_agg_session_timer()
581 u8 tid = tid_tx->tid; in sta_tx_agg_session_timer_expired() local
594 ht_dbg(sta->sdata, "tx session timer expired on %pM tid %d\n", in sta_tx_agg_session_timer_expired()
595 sta->sta.addr, tid); in sta_tx_agg_session_timer_expired()
597 ieee80211_stop_tx_ba_session(&sta->sta, tid); in sta_tx_agg_session_timer_expired()
600 int ieee80211_start_tx_ba_session(struct ieee80211_sta *pubsta, u16 tid, in ieee80211_start_tx_ba_session() argument
609 trace_api_start_tx_ba_session(pubsta, tid); in ieee80211_start_tx_ba_session()
611 if (WARN(sta->reserved_tid == tid, in ieee80211_start_tx_ba_session()
612 "Requested to start BA session on reserved tid=%d", tid)) in ieee80211_start_tx_ba_session()
626 if ((tid >= IEEE80211_NUM_TIDS) || in ieee80211_start_tx_ba_session()
631 if (WARN_ON(tid >= IEEE80211_FIRST_TSPEC_TSID)) in ieee80211_start_tx_ba_session()
634 ht_dbg(sdata, "Open BA session requested for %pM tid %u\n", in ieee80211_start_tx_ba_session()
635 pubsta->addr, tid); in ieee80211_start_tx_ba_session()
646 "BA sessions blocked - Denying BA session request %pM tid %d\n", in ieee80211_start_tx_ba_session()
647 sta->sta.addr, tid); in ieee80211_start_tx_ba_session()
654 "MFP STA not authorized - deny BA session request %pM tid %d\n", in ieee80211_start_tx_ba_session()
655 sta->sta.addr, tid); in ieee80211_start_tx_ba_session()
682 if (sta->ampdu_mlme.addba_req_num[tid] > HT_AGG_MAX_RETRIES) { in ieee80211_start_tx_ba_session()
692 if (sta->ampdu_mlme.addba_req_num[tid] > HT_AGG_BURST_RETRIES && in ieee80211_start_tx_ba_session()
693 time_before(jiffies, sta->ampdu_mlme.last_addba_req_time[tid] + in ieee80211_start_tx_ba_session()
696 "BA request denied - %d failed requests on %pM tid %u\n", in ieee80211_start_tx_ba_session()
697 sta->ampdu_mlme.addba_req_num[tid], sta->sta.addr, tid); in ieee80211_start_tx_ba_session()
702 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_start_tx_ba_session()
703 /* check if the TID is not in aggregation flow already */ in ieee80211_start_tx_ba_session()
704 if (tid_tx || sta->ampdu_mlme.tid_start_tx[tid]) { in ieee80211_start_tx_ba_session()
706 "BA request denied - session is not idle on %pM tid %u\n", in ieee80211_start_tx_ba_session()
707 sta->sta.addr, tid); in ieee80211_start_tx_ba_session()
724 tid_tx->tid = tid; in ieee80211_start_tx_ba_session()
741 sta->ampdu_mlme.tid_start_tx[tid] = tid_tx; in ieee80211_start_tx_ba_session()
753 struct sta_info *sta, u16 tid) in ieee80211_agg_tx_operational() argument
759 .tid = tid, in ieee80211_agg_tx_operational()
766 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_agg_tx_operational()
770 ht_dbg(sta->sdata, "Aggregation is on for %pM tid %d\n", in ieee80211_agg_tx_operational()
771 sta->sta.addr, tid); in ieee80211_agg_tx_operational()
781 ieee80211_agg_splice_packets(sta->sdata, tid_tx, tid); in ieee80211_agg_tx_operational()
788 ieee80211_agg_splice_finish(sta->sdata, tid); in ieee80211_agg_tx_operational()
792 ieee80211_agg_start_txq(sta, tid, true); in ieee80211_agg_tx_operational()
795 void ieee80211_start_tx_ba_cb(struct sta_info *sta, int tid, in ieee80211_start_tx_ba_cb() argument
817 ieee80211_agg_tx_operational(local, sta, tid); in ieee80211_start_tx_ba_cb()
822 const u8 *ra, u16 tid, struct sta_info **sta) in ieee80211_lookup_tid_tx() argument
826 if (tid >= IEEE80211_NUM_TIDS) { in ieee80211_lookup_tid_tx()
827 ht_dbg(sdata, "Bad TID value: tid = %d (>= %d)\n", in ieee80211_lookup_tid_tx()
828 tid, IEEE80211_NUM_TIDS); in ieee80211_lookup_tid_tx()
838 tid_tx = rcu_dereference((*sta)->ampdu_mlme.tid_tx[tid]); in ieee80211_lookup_tid_tx()
847 const u8 *ra, u16 tid) in ieee80211_start_tx_ba_cb_irqsafe() argument
854 trace_api_start_tx_ba_cb(sdata, ra, tid); in ieee80211_start_tx_ba_cb_irqsafe()
857 tid_tx = ieee80211_lookup_tid_tx(sdata, ra, tid, &sta); in ieee80211_start_tx_ba_cb_irqsafe()
868 int ieee80211_stop_tx_ba_session(struct ieee80211_sta *pubsta, u16 tid) in ieee80211_stop_tx_ba_session() argument
876 trace_api_stop_tx_ba_session(pubsta, tid); in ieee80211_stop_tx_ba_session()
881 if (tid >= IEEE80211_NUM_TIDS) in ieee80211_stop_tx_ba_session()
885 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_stop_tx_ba_session()
892 WARN(sta->reserved_tid == tid, in ieee80211_stop_tx_ba_session()
893 "Requested to stop BA session on reserved tid=%d", tid); in ieee80211_stop_tx_ba_session()
910 void ieee80211_stop_tx_ba_cb(struct sta_info *sta, int tid, in ieee80211_stop_tx_ba_cb() argument
917 ht_dbg(sdata, "Stopping Tx BA session for %pM tid %d\n", in ieee80211_stop_tx_ba_cb()
918 sta->sta.addr, tid); in ieee80211_stop_tx_ba_cb()
924 "unexpected callback to A-MPDU stop for %pM tid %d\n", in ieee80211_stop_tx_ba_cb()
925 sta->sta.addr, tid); in ieee80211_stop_tx_ba_cb()
932 ieee80211_remove_tid_tx(sta, tid); in ieee80211_stop_tx_ba_cb()
939 ieee80211_agg_start_txq(sta, tid, false); in ieee80211_stop_tx_ba_cb()
942 ieee80211_send_delba(sdata, sta->sta.addr, tid, in ieee80211_stop_tx_ba_cb()
947 const u8 *ra, u16 tid) in ieee80211_stop_tx_ba_cb_irqsafe() argument
954 trace_api_stop_tx_ba_cb(sdata, ra, tid); in ieee80211_stop_tx_ba_cb_irqsafe()
957 tid_tx = ieee80211_lookup_tid_tx(sdata, ra, tid, &sta); in ieee80211_stop_tx_ba_cb_irqsafe()
976 u16 capab, tid, buf_size; in ieee80211_process_addba_resp() local
983 tid = u16_get_bits(capab, IEEE80211_ADDBA_PARAM_TID_MASK); in ieee80211_process_addba_resp()
994 txq = sta->sta.txq[tid]; in ieee80211_process_addba_resp()
998 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_process_addba_resp()
1003 ht_dbg(sta->sdata, "wrong addBA response token, %pM tid %d\n", in ieee80211_process_addba_resp()
1004 sta->sta.addr, tid); in ieee80211_process_addba_resp()
1010 ht_dbg(sta->sdata, "switched off addBA timer for %pM tid %d\n", in ieee80211_process_addba_resp()
1011 sta->sta.addr, tid); in ieee80211_process_addba_resp()
1021 "got addBA resp for %pM tid %d but we already gave up\n", in ieee80211_process_addba_resp()
1022 sta->sta.addr, tid); in ieee80211_process_addba_resp()
1044 ieee80211_agg_tx_operational(local, sta, tid); in ieee80211_process_addba_resp()
1046 sta->ampdu_mlme.addba_req_num[tid] = 0; in ieee80211_process_addba_resp()
1058 __ieee80211_stop_tx_ba_session(sta, tid, AGG_STOP_DECLINED); in ieee80211_process_addba_resp()