Lines Matching refs:tid_tx
146 struct tid_ampdu_tx *tid_tx) in ieee80211_assign_tid_tx() argument
150 rcu_assign_pointer(sta->ampdu_mlme.tid_tx[tid], tid_tx); in ieee80211_assign_tid_tx()
235 struct tid_ampdu_tx *tid_tx, u16 tid) in __acquires()
243 if (WARN(!tid_tx, in __acquires()
248 if (!skb_queue_empty(&tid_tx->pending)) { in __acquires()
251 skb_queue_splice_tail_init(&tid_tx->pending, in __acquires()
265 struct tid_ampdu_tx *tid_tx; in ieee80211_remove_tid_tx() local
270 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_remove_tid_tx()
282 ieee80211_agg_splice_packets(sta->sdata, tid_tx, tid); in ieee80211_remove_tid_tx()
290 kfree_rcu(tid_tx, rcu_head); in ieee80211_remove_tid_tx()
297 struct tid_ampdu_tx *tid_tx; in ___ieee80211_stop_tx_ba_session() local
319 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ___ieee80211_stop_tx_ba_session()
320 if (!tid_tx) { in ___ieee80211_stop_tx_ba_session()
329 if (test_bit(HT_AGG_STATE_STOPPING, &tid_tx->state)) { in ___ieee80211_stop_tx_ba_session()
340 if (test_bit(HT_AGG_STATE_WANT_START, &tid_tx->state)) { in ___ieee80211_stop_tx_ba_session()
344 kfree_rcu(tid_tx, rcu_head); in ___ieee80211_stop_tx_ba_session()
348 set_bit(HT_AGG_STATE_STOPPING, &tid_tx->state); in ___ieee80211_stop_tx_ba_session()
355 del_timer_sync(&tid_tx->addba_resp_timer); in ___ieee80211_stop_tx_ba_session()
356 del_timer_sync(&tid_tx->session_timer); in ___ieee80211_stop_tx_ba_session()
363 clear_bit(HT_AGG_STATE_OPERATIONAL, &tid_tx->state); in ___ieee80211_stop_tx_ba_session()
379 tid_tx->stop_initiator = reason == AGG_STOP_PEER_REQUEST ? in ___ieee80211_stop_tx_ba_session()
382 tid_tx->tx_stop = reason == AGG_STOP_LOCAL_REQUEST; in ___ieee80211_stop_tx_ba_session()
422 struct tid_ampdu_tx *tid_tx; in sta_addba_resp_timer_expired() local
426 tid_tx = rcu_dereference(sta->ampdu_mlme.tid_tx[tid]); in sta_addba_resp_timer_expired()
427 if (!tid_tx || in sta_addba_resp_timer_expired()
428 test_bit(HT_AGG_STATE_RESPONSE_RECEIVED, &tid_tx->state)) { in sta_addba_resp_timer_expired()
445 struct tid_ampdu_tx *tid_tx; in ieee80211_tx_ba_session_handle_start() local
451 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_tx_ba_session_handle_start()
458 clear_bit(HT_AGG_STATE_WANT_START, &tid_tx->state); in ieee80211_tx_ba_session_handle_start()
479 ieee80211_agg_splice_packets(sdata, tid_tx, tid); in ieee80211_tx_ba_session_handle_start()
486 kfree_rcu(tid_tx, rcu_head); in ieee80211_tx_ba_session_handle_start()
491 mod_timer(&tid_tx->addba_resp_timer, jiffies + ADDBA_RESP_INTERVAL); in ieee80211_tx_ba_session_handle_start()
502 tid_tx->dialog_token, start_seq_num, in ieee80211_tx_ba_session_handle_start()
504 tid_tx->timeout); in ieee80211_tx_ba_session_handle_start()
521 struct tid_ampdu_tx *tid_tx; in sta_tx_agg_session_timer_expired() local
525 tid_tx = rcu_dereference(sta->ampdu_mlme.tid_tx[*ptid]); in sta_tx_agg_session_timer_expired()
526 if (!tid_tx || test_bit(HT_AGG_STATE_STOPPING, &tid_tx->state)) { in sta_tx_agg_session_timer_expired()
531 timeout = tid_tx->last_tx + TU_TO_JIFFIES(tid_tx->timeout); in sta_tx_agg_session_timer_expired()
533 mod_timer(&tid_tx->session_timer, timeout); in sta_tx_agg_session_timer_expired()
552 struct tid_ampdu_tx *tid_tx; in ieee80211_start_tx_ba_session() local
632 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_start_tx_ba_session()
634 if (tid_tx || sta->ampdu_mlme.tid_start_tx[tid]) { in ieee80211_start_tx_ba_session()
643 tid_tx = kzalloc(sizeof(struct tid_ampdu_tx), GFP_ATOMIC); in ieee80211_start_tx_ba_session()
644 if (!tid_tx) { in ieee80211_start_tx_ba_session()
649 skb_queue_head_init(&tid_tx->pending); in ieee80211_start_tx_ba_session()
650 __set_bit(HT_AGG_STATE_WANT_START, &tid_tx->state); in ieee80211_start_tx_ba_session()
652 tid_tx->timeout = timeout; in ieee80211_start_tx_ba_session()
655 tid_tx->addba_resp_timer.function = sta_addba_resp_timer_expired; in ieee80211_start_tx_ba_session()
656 tid_tx->addba_resp_timer.data = (unsigned long)&sta->timer_to_tid[tid]; in ieee80211_start_tx_ba_session()
657 init_timer(&tid_tx->addba_resp_timer); in ieee80211_start_tx_ba_session()
660 tid_tx->session_timer.function = sta_tx_agg_session_timer_expired; in ieee80211_start_tx_ba_session()
661 tid_tx->session_timer.data = (unsigned long)&sta->timer_to_tid[tid]; in ieee80211_start_tx_ba_session()
662 init_timer_deferrable(&tid_tx->session_timer); in ieee80211_start_tx_ba_session()
666 tid_tx->dialog_token = sta->ampdu_mlme.dialog_token_allocator; in ieee80211_start_tx_ba_session()
672 sta->ampdu_mlme.tid_start_tx[tid] = tid_tx; in ieee80211_start_tx_ba_session()
686 struct tid_ampdu_tx *tid_tx; in ieee80211_agg_tx_operational() local
690 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_agg_tx_operational()
697 &sta->sta, tid, NULL, tid_tx->buf_size, in ieee80211_agg_tx_operational()
698 tid_tx->amsdu); in ieee80211_agg_tx_operational()
706 ieee80211_agg_splice_packets(sta->sdata, tid_tx, tid); in ieee80211_agg_tx_operational()
712 set_bit(HT_AGG_STATE_OPERATIONAL, &tid_tx->state); in ieee80211_agg_tx_operational()
725 struct tid_ampdu_tx *tid_tx; in ieee80211_start_tx_ba_cb() local
744 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_start_tx_ba_cb()
746 if (WARN_ON(!tid_tx)) { in ieee80211_start_tx_ba_cb()
751 if (WARN_ON(test_and_set_bit(HT_AGG_STATE_DRV_READY, &tid_tx->state))) in ieee80211_start_tx_ba_cb()
754 if (test_bit(HT_AGG_STATE_RESPONSE_RECEIVED, &tid_tx->state)) in ieee80211_start_tx_ba_cb()
802 struct tid_ampdu_tx *tid_tx; in ieee80211_stop_tx_ba_session() local
814 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_stop_tx_ba_session()
816 if (!tid_tx) { in ieee80211_stop_tx_ba_session()
824 if (test_bit(HT_AGG_STATE_STOPPING, &tid_tx->state)) { in ieee80211_stop_tx_ba_session()
830 set_bit(HT_AGG_STATE_WANT_STOP, &tid_tx->state); in ieee80211_stop_tx_ba_session()
844 struct tid_ampdu_tx *tid_tx; in ieee80211_stop_tx_ba_cb() local
867 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_stop_tx_ba_cb()
869 if (!tid_tx || !test_bit(HT_AGG_STATE_STOPPING, &tid_tx->state)) { in ieee80211_stop_tx_ba_cb()
876 if (tid_tx->stop_initiator == WLAN_BACK_INITIATOR && tid_tx->tx_stop) in ieee80211_stop_tx_ba_cb()
920 struct tid_ampdu_tx *tid_tx; in ieee80211_process_addba_resp() local
933 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_process_addba_resp()
934 if (!tid_tx) in ieee80211_process_addba_resp()
937 if (mgmt->u.action.u.addba_resp.dialog_token != tid_tx->dialog_token) { in ieee80211_process_addba_resp()
943 del_timer_sync(&tid_tx->addba_resp_timer); in ieee80211_process_addba_resp()
953 if (test_bit(HT_AGG_STATE_WANT_STOP, &tid_tx->state) || in ieee80211_process_addba_resp()
954 test_bit(HT_AGG_STATE_STOPPING, &tid_tx->state)) { in ieee80211_process_addba_resp()
970 &tid_tx->state)) { in ieee80211_process_addba_resp()
975 tid_tx->buf_size = buf_size; in ieee80211_process_addba_resp()
976 tid_tx->amsdu = amsdu; in ieee80211_process_addba_resp()
978 if (test_bit(HT_AGG_STATE_DRV_READY, &tid_tx->state)) in ieee80211_process_addba_resp()
983 if (tid_tx->timeout) { in ieee80211_process_addba_resp()
984 mod_timer(&tid_tx->session_timer, in ieee80211_process_addba_resp()
985 TU_TO_EXP_TIME(tid_tx->timeout)); in ieee80211_process_addba_resp()
986 tid_tx->last_tx = jiffies; in ieee80211_process_addba_resp()