Lines Matching refs:tid_tx
143 struct tid_ampdu_tx *tid_tx)
147 rcu_assign_pointer(sta->ampdu_mlme.tid_tx[tid], tid_tx);
242 struct tid_ampdu_tx *tid_tx, u16 tid)
250 if (WARN(!tid_tx,
255 if (!skb_queue_empty(&tid_tx->pending)) {
258 skb_queue_splice_tail_init(&tid_tx->pending,
272 struct tid_ampdu_tx *tid_tx;
277 tid_tx = rcu_dereference_protected_tid_tx(sta, tid);
285 * guaranteeing that no packets go to the tid_tx pending queue any
289 ieee80211_agg_splice_packets(sta->sdata, tid_tx, tid);
291 /* future packets must not find the tid_tx struct any more */
296 kfree_rcu(tid_tx, rcu_head);
303 struct tid_ampdu_tx *tid_tx;
333 tid_tx = sta->ampdu_mlme.tid_start_tx[tid];
334 kfree(tid_tx);
337 tid_tx = rcu_dereference_protected_tid_tx(sta, tid);
338 if (!tid_tx) {
347 if (test_bit(HT_AGG_STATE_STOPPING, &tid_tx->state)) {
357 if (test_bit(HT_AGG_STATE_WANT_START, &tid_tx->state)) {
361 kfree_rcu(tid_tx, rcu_head);
365 set_bit(HT_AGG_STATE_STOPPING, &tid_tx->state);
374 del_timer_sync(&tid_tx->addba_resp_timer);
375 del_timer_sync(&tid_tx->session_timer);
379 * to the driver but are put onto tid_tx->pending instead,
382 clear_bit(HT_AGG_STATE_OPERATIONAL, &tid_tx->state);
399 tid_tx->stop_initiator = reason == AGG_STOP_PEER_REQUEST ?
402 tid_tx->tx_stop = reason == AGG_STOP_LOCAL_REQUEST;
417 * seem like we can leave the tid_tx data pending forever.
434 struct tid_ampdu_tx *tid_tx = from_timer(tid_tx, t, addba_resp_timer);
435 struct sta_info *sta = tid_tx->sta;
436 u8 tid = tid_tx->tid;
439 if (test_bit(HT_AGG_STATE_RESPONSE_RECEIVED, &tid_tx->state)) {
453 struct tid_ampdu_tx *tid_tx)
457 u8 tid = tid_tx->tid;
461 mod_timer(&tid_tx->addba_resp_timer, jiffies + ADDBA_RESP_INTERVAL);
484 tid_tx->dialog_token, tid_tx->ssn,
485 buf_size, tid_tx->timeout);
487 WARN_ON(test_and_set_bit(HT_AGG_STATE_SENT_ADDBA, &tid_tx->state));
492 struct tid_ampdu_tx *tid_tx;
505 tid_tx = rcu_dereference_protected_tid_tx(sta, tid);
512 clear_bit(HT_AGG_STATE_WANT_START, &tid_tx->state);
527 tid_tx->ssn = params.ssn;
536 set_bit(HT_AGG_STATE_DRV_READY, &tid_tx->state);
545 ieee80211_agg_splice_packets(sdata, tid_tx, tid);
552 kfree_rcu(tid_tx, rcu_head);
556 ieee80211_send_addba_with_timeout(sta, tid_tx);
565 struct tid_ampdu_tx *tid_tx = from_timer(tid_tx, t, session_timer);
566 struct sta_info *sta = tid_tx->sta;
567 u8 tid = tid_tx->tid;
570 if (test_bit(HT_AGG_STATE_STOPPING, &tid_tx->state)) {
574 timeout = tid_tx->last_tx + TU_TO_JIFFIES(tid_tx->timeout);
576 mod_timer(&tid_tx->session_timer, timeout);
592 struct tid_ampdu_tx *tid_tx;
684 tid_tx = rcu_dereference_protected_tid_tx(sta, tid);
686 if (tid_tx || sta->ampdu_mlme.tid_start_tx[tid]) {
695 tid_tx = kzalloc(sizeof(struct tid_ampdu_tx), GFP_ATOMIC);
696 if (!tid_tx) {
701 skb_queue_head_init(&tid_tx->pending);
702 __set_bit(HT_AGG_STATE_WANT_START, &tid_tx->state);
704 tid_tx->timeout = timeout;
705 tid_tx->sta = sta;
706 tid_tx->tid = tid;
709 timer_setup(&tid_tx->addba_resp_timer, sta_addba_resp_timer_expired, 0);
712 timer_setup(&tid_tx->session_timer,
717 tid_tx->dialog_token = sta->ampdu_mlme.dialog_token_allocator;
723 sta->ampdu_mlme.tid_start_tx[tid] = tid_tx;
737 struct tid_ampdu_tx *tid_tx;
748 tid_tx = rcu_dereference_protected_tid_tx(sta, tid);
749 params.buf_size = tid_tx->buf_size;
750 params.amsdu = tid_tx->amsdu;
763 ieee80211_agg_splice_packets(sta->sdata, tid_tx, tid);
769 set_bit(HT_AGG_STATE_OPERATIONAL, &tid_tx->state);
778 struct tid_ampdu_tx *tid_tx)
783 if (WARN_ON(test_and_set_bit(HT_AGG_STATE_DRV_READY, &tid_tx->state)))
786 if (!test_bit(HT_AGG_STATE_SENT_ADDBA, &tid_tx->state)) {
787 ieee80211_send_addba_with_timeout(sta, tid_tx);
792 if (test_bit(HT_AGG_STATE_RESPONSE_RECEIVED, &tid_tx->state))
800 struct tid_ampdu_tx *tid_tx;
814 tid_tx = rcu_dereference((*sta)->ampdu_mlme.tid_tx[tid]);
816 if (WARN_ON(!tid_tx))
819 return tid_tx;
828 struct tid_ampdu_tx *tid_tx;
833 tid_tx = ieee80211_lookup_tid_tx(sdata, ra, tid, &sta);
834 if (!tid_tx)
837 set_bit(HT_AGG_STATE_START_CB, &tid_tx->state);
863 struct tid_ampdu_tx *tid_tx;
875 tid_tx = rcu_dereference_protected_tid_tx(sta, tid);
877 if (!tid_tx) {
885 if (test_bit(HT_AGG_STATE_STOPPING, &tid_tx->state)) {
891 set_bit(HT_AGG_STATE_WANT_STOP, &tid_tx->state);
901 struct tid_ampdu_tx *tid_tx)
912 if (!test_bit(HT_AGG_STATE_STOPPING, &tid_tx->state)) {
919 if (tid_tx->stop_initiator == WLAN_BACK_INITIATOR && tid_tx->tx_stop)
942 struct tid_ampdu_tx *tid_tx;
947 tid_tx = ieee80211_lookup_tid_tx(sdata, ra, tid, &sta);
948 if (!tid_tx)
951 set_bit(HT_AGG_STATE_STOP_CB, &tid_tx->state);
964 struct tid_ampdu_tx *tid_tx;
981 tid_tx = rcu_dereference_protected_tid_tx(sta, tid);
982 if (!tid_tx)
985 if (mgmt->u.action.u.addba_resp.dialog_token != tid_tx->dialog_token) {
991 del_timer_sync(&tid_tx->addba_resp_timer);
1001 if (test_bit(HT_AGG_STATE_WANT_STOP, &tid_tx->state) ||
1002 test_bit(HT_AGG_STATE_STOPPING, &tid_tx->state)) {
1018 &tid_tx->state)) {
1023 tid_tx->buf_size = buf_size;
1024 tid_tx->amsdu = amsdu;
1026 if (test_bit(HT_AGG_STATE_DRV_READY, &tid_tx->state))
1031 tid_tx->timeout =
1034 if (tid_tx->timeout) {
1035 mod_timer(&tid_tx->session_timer,
1036 TU_TO_EXP_TIME(tid_tx->timeout));
1037 tid_tx->last_tx = jiffies;