Lines Matching refs:tid_tx
145 struct tid_ampdu_tx *tid_tx) in ieee80211_assign_tid_tx() argument
149 rcu_assign_pointer(sta->ampdu_mlme.tid_tx[tid], tid_tx); in ieee80211_assign_tid_tx()
234 struct tid_ampdu_tx *tid_tx, u16 tid) in __acquires()
242 if (WARN(!tid_tx, in __acquires()
247 if (!skb_queue_empty(&tid_tx->pending)) { in __acquires()
250 skb_queue_splice_tail_init(&tid_tx->pending, in __acquires()
264 struct tid_ampdu_tx *tid_tx; in ieee80211_remove_tid_tx() local
269 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_remove_tid_tx()
281 ieee80211_agg_splice_packets(sta->sdata, tid_tx, tid); in ieee80211_remove_tid_tx()
289 kfree_rcu(tid_tx, rcu_head); in ieee80211_remove_tid_tx()
296 struct tid_ampdu_tx *tid_tx; in ___ieee80211_stop_tx_ba_session() local
318 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ___ieee80211_stop_tx_ba_session()
319 if (!tid_tx) { in ___ieee80211_stop_tx_ba_session()
328 if (test_bit(HT_AGG_STATE_STOPPING, &tid_tx->state)) { in ___ieee80211_stop_tx_ba_session()
339 if (test_bit(HT_AGG_STATE_WANT_START, &tid_tx->state)) { in ___ieee80211_stop_tx_ba_session()
343 kfree_rcu(tid_tx, rcu_head); in ___ieee80211_stop_tx_ba_session()
347 set_bit(HT_AGG_STATE_STOPPING, &tid_tx->state); in ___ieee80211_stop_tx_ba_session()
354 del_timer_sync(&tid_tx->addba_resp_timer); in ___ieee80211_stop_tx_ba_session()
355 del_timer_sync(&tid_tx->session_timer); in ___ieee80211_stop_tx_ba_session()
362 clear_bit(HT_AGG_STATE_OPERATIONAL, &tid_tx->state); in ___ieee80211_stop_tx_ba_session()
378 tid_tx->stop_initiator = reason == AGG_STOP_PEER_REQUEST ? in ___ieee80211_stop_tx_ba_session()
381 tid_tx->tx_stop = reason == AGG_STOP_LOCAL_REQUEST; in ___ieee80211_stop_tx_ba_session()
421 struct tid_ampdu_tx *tid_tx; in sta_addba_resp_timer_expired() local
425 tid_tx = rcu_dereference(sta->ampdu_mlme.tid_tx[tid]); in sta_addba_resp_timer_expired()
426 if (!tid_tx || in sta_addba_resp_timer_expired()
427 test_bit(HT_AGG_STATE_RESPONSE_RECEIVED, &tid_tx->state)) { in sta_addba_resp_timer_expired()
444 struct tid_ampdu_tx *tid_tx; in ieee80211_tx_ba_session_handle_start() local
450 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_tx_ba_session_handle_start()
457 clear_bit(HT_AGG_STATE_WANT_START, &tid_tx->state); in ieee80211_tx_ba_session_handle_start()
478 ieee80211_agg_splice_packets(sdata, tid_tx, tid); in ieee80211_tx_ba_session_handle_start()
485 kfree_rcu(tid_tx, rcu_head); in ieee80211_tx_ba_session_handle_start()
490 mod_timer(&tid_tx->addba_resp_timer, jiffies + ADDBA_RESP_INTERVAL); in ieee80211_tx_ba_session_handle_start()
501 tid_tx->dialog_token, start_seq_num, in ieee80211_tx_ba_session_handle_start()
503 tid_tx->timeout); in ieee80211_tx_ba_session_handle_start()
520 struct tid_ampdu_tx *tid_tx; in sta_tx_agg_session_timer_expired() local
524 tid_tx = rcu_dereference(sta->ampdu_mlme.tid_tx[*ptid]); in sta_tx_agg_session_timer_expired()
525 if (!tid_tx || test_bit(HT_AGG_STATE_STOPPING, &tid_tx->state)) { in sta_tx_agg_session_timer_expired()
530 timeout = tid_tx->last_tx + TU_TO_JIFFIES(tid_tx->timeout); in sta_tx_agg_session_timer_expired()
532 mod_timer(&tid_tx->session_timer, timeout); in sta_tx_agg_session_timer_expired()
551 struct tid_ampdu_tx *tid_tx; in ieee80211_start_tx_ba_session() local
631 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_start_tx_ba_session()
633 if (tid_tx || sta->ampdu_mlme.tid_start_tx[tid]) { in ieee80211_start_tx_ba_session()
642 tid_tx = kzalloc(sizeof(struct tid_ampdu_tx), GFP_ATOMIC); in ieee80211_start_tx_ba_session()
643 if (!tid_tx) { in ieee80211_start_tx_ba_session()
648 skb_queue_head_init(&tid_tx->pending); in ieee80211_start_tx_ba_session()
649 __set_bit(HT_AGG_STATE_WANT_START, &tid_tx->state); in ieee80211_start_tx_ba_session()
651 tid_tx->timeout = timeout; in ieee80211_start_tx_ba_session()
654 tid_tx->addba_resp_timer.function = sta_addba_resp_timer_expired; in ieee80211_start_tx_ba_session()
655 tid_tx->addba_resp_timer.data = (unsigned long)&sta->timer_to_tid[tid]; in ieee80211_start_tx_ba_session()
656 init_timer(&tid_tx->addba_resp_timer); in ieee80211_start_tx_ba_session()
659 tid_tx->session_timer.function = sta_tx_agg_session_timer_expired; in ieee80211_start_tx_ba_session()
660 tid_tx->session_timer.data = (unsigned long)&sta->timer_to_tid[tid]; in ieee80211_start_tx_ba_session()
661 init_timer_deferrable(&tid_tx->session_timer); in ieee80211_start_tx_ba_session()
665 tid_tx->dialog_token = sta->ampdu_mlme.dialog_token_allocator; in ieee80211_start_tx_ba_session()
671 sta->ampdu_mlme.tid_start_tx[tid] = tid_tx; in ieee80211_start_tx_ba_session()
685 struct tid_ampdu_tx *tid_tx; in ieee80211_agg_tx_operational() local
689 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_agg_tx_operational()
696 &sta->sta, tid, NULL, tid_tx->buf_size); in ieee80211_agg_tx_operational()
704 ieee80211_agg_splice_packets(sta->sdata, tid_tx, tid); in ieee80211_agg_tx_operational()
710 set_bit(HT_AGG_STATE_OPERATIONAL, &tid_tx->state); in ieee80211_agg_tx_operational()
723 struct tid_ampdu_tx *tid_tx; in ieee80211_start_tx_ba_cb() local
742 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_start_tx_ba_cb()
744 if (WARN_ON(!tid_tx)) { in ieee80211_start_tx_ba_cb()
749 if (WARN_ON(test_and_set_bit(HT_AGG_STATE_DRV_READY, &tid_tx->state))) in ieee80211_start_tx_ba_cb()
752 if (test_bit(HT_AGG_STATE_RESPONSE_RECEIVED, &tid_tx->state)) in ieee80211_start_tx_ba_cb()
800 struct tid_ampdu_tx *tid_tx; in ieee80211_stop_tx_ba_session() local
812 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_stop_tx_ba_session()
814 if (!tid_tx) { in ieee80211_stop_tx_ba_session()
822 if (test_bit(HT_AGG_STATE_STOPPING, &tid_tx->state)) { in ieee80211_stop_tx_ba_session()
828 set_bit(HT_AGG_STATE_WANT_STOP, &tid_tx->state); in ieee80211_stop_tx_ba_session()
842 struct tid_ampdu_tx *tid_tx; in ieee80211_stop_tx_ba_cb() local
865 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_stop_tx_ba_cb()
867 if (!tid_tx || !test_bit(HT_AGG_STATE_STOPPING, &tid_tx->state)) { in ieee80211_stop_tx_ba_cb()
874 if (tid_tx->stop_initiator == WLAN_BACK_INITIATOR && tid_tx->tx_stop) in ieee80211_stop_tx_ba_cb()
918 struct tid_ampdu_tx *tid_tx; in ieee80211_process_addba_resp() local
928 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); in ieee80211_process_addba_resp()
929 if (!tid_tx) in ieee80211_process_addba_resp()
932 if (mgmt->u.action.u.addba_resp.dialog_token != tid_tx->dialog_token) { in ieee80211_process_addba_resp()
938 del_timer_sync(&tid_tx->addba_resp_timer); in ieee80211_process_addba_resp()
948 if (test_bit(HT_AGG_STATE_WANT_STOP, &tid_tx->state) || in ieee80211_process_addba_resp()
949 test_bit(HT_AGG_STATE_STOPPING, &tid_tx->state)) { in ieee80211_process_addba_resp()
965 &tid_tx->state)) { in ieee80211_process_addba_resp()
970 tid_tx->buf_size = buf_size; in ieee80211_process_addba_resp()
972 if (test_bit(HT_AGG_STATE_DRV_READY, &tid_tx->state)) in ieee80211_process_addba_resp()
977 if (tid_tx->timeout) { in ieee80211_process_addba_resp()
978 mod_timer(&tid_tx->session_timer, in ieee80211_process_addba_resp()
979 TU_TO_EXP_TIME(tid_tx->timeout)); in ieee80211_process_addba_resp()
980 tid_tx->last_tx = jiffies; in ieee80211_process_addba_resp()