source: branches/backfire/package/mac80211/patches/542-ath9k_move_seqno.patch @ 28138

Last change on this file since 28138 was 28138, checked in by nbd, 5 years ago

mac80211: backport latest version from trunk (as of r28137)

File size: 6.3 KB
  • drivers/net/wireless/ath/ath9k/ath9k.h

    a b struct ath_frame_info { 
    211211        enum ath9k_key_type keytype; 
    212212        u8 keyix; 
    213213        u8 retries; 
    214         u16 seqno; 
    215214}; 
    216215 
    217216struct ath_buf_state { 
    218217        u8 bf_type; 
    219218        u8 bfs_paprd; 
     219        u16 seqno; 
    220220        unsigned long bfs_paprd_timestamp; 
    221221}; 
    222222 
  • drivers/net/wireless/ath/ath9k/xmit.c

    a b static void ath_tx_flush_tid(struct ath_ 
    168168 
    169169                spin_unlock_bh(&txq->axq_lock); 
    170170                if (fi->retries) { 
    171                         ath_tx_update_baw(sc, tid, fi->seqno); 
     171                        ath_tx_update_baw(sc, tid, bf->bf_state.seqno); 
    172172                        ath_tx_complete_buf(sc, bf, txq, &bf_head, &ts, 0, 1); 
    173173                } else { 
    174174                        ath_tx_send_normal(sc, txq, NULL, &bf_head); 
    static void ath_tid_drain(struct ath_sof 
    237237                list_add_tail(&bf->list, &bf_head); 
    238238 
    239239                if (fi->retries) 
    240                         ath_tx_update_baw(sc, tid, fi->seqno); 
     240                        ath_tx_update_baw(sc, tid, bf->bf_state.seqno); 
    241241 
    242242                spin_unlock(&txq->axq_lock); 
    243243                ath_tx_complete_buf(sc, bf, txq, &bf_head, &ts, 0, 0); 
    static void ath_tx_count_frames(struct a 
    327327 
    328328        while (bf) { 
    329329                fi = get_frame_info(bf->bf_mpdu); 
    330                 ba_index = ATH_BA_INDEX(seq_st, fi->seqno); 
     330                ba_index = ATH_BA_INDEX(seq_st, bf->bf_state.seqno); 
    331331 
    332332                (*nframes)++; 
    333333                if (!txok || (isaggr && !ATH_BA_ISSET(ba, ba_index))) 
    static void ath_tx_complete_aggr(struct  
    428428 
    429429        ath_tx_count_frames(sc, bf, ts, txok, &nframes, &nbad); 
    430430        while (bf) { 
     431                u16 seqno = bf->bf_state.seqno; 
     432 
    431433                txfail = txpending = sendbar = 0; 
    432434                bf_next = bf->bf_next; 
    433435 
    static void ath_tx_complete_aggr(struct  
    435437                tx_info = IEEE80211_SKB_CB(skb); 
    436438                fi = get_frame_info(skb); 
    437439 
    438                 if (ATH_BA_ISSET(ba, ATH_BA_INDEX(seq_st, fi->seqno))) { 
     440                if (ATH_BA_ISSET(ba, ATH_BA_INDEX(seq_st, seqno))) { 
    439441                        /* transmit completion, subframe is 
    440442                         * acked by block ack */ 
    441443                        acked_cnt++; 
    static void ath_tx_complete_aggr(struct  
    479481                         * block-ack window 
    480482                         */ 
    481483                        spin_lock_bh(&txq->axq_lock); 
    482                         ath_tx_update_baw(sc, tid, fi->seqno); 
     484                        ath_tx_update_baw(sc, tid, seqno); 
    483485                        spin_unlock_bh(&txq->axq_lock); 
    484486 
    485487                        if (rc_update && (acked_cnt == 1 || txfail_cnt == 1)) { 
    static void ath_tx_complete_aggr(struct  
    507509                                         */ 
    508510                                        if (!tbf) { 
    509511                                                spin_lock_bh(&txq->axq_lock); 
    510                                                 ath_tx_update_baw(sc, tid, fi->seqno); 
     512                                                ath_tx_update_baw(sc, tid, seqno); 
    511513                                                spin_unlock_bh(&txq->axq_lock); 
    512514 
    513515                                                bf->bf_state.bf_type |= 
    static enum ATH_AGGR_STATUS ath_tx_form_ 
    752754        struct ieee80211_tx_info *tx_info; 
    753755        struct ath_frame_info *fi; 
    754756        struct sk_buff *skb; 
     757        u16 seqno; 
    755758 
    756759        do { 
    757760                skb = skb_peek(&tid->buf_q); 
    758761                fi = get_frame_info(skb); 
    759762                bf = fi->bf; 
     763                seqno = bf->bf_state.seqno; 
    760764 
    761765                if (!bf_first) 
    762766                        bf_first = bf; 
    763767 
    764768                /* do not step over block-ack window */ 
    765                 if (!BAW_WITHIN(tid->seq_start, tid->baw_size, fi->seqno)) { 
     769                if (!BAW_WITHIN(tid->seq_start, tid->baw_size, seqno)) { 
    766770                        status = ATH_AGGR_BAW_CLOSED; 
    767771                        break; 
    768772                } 
    static enum ATH_AGGR_STATUS ath_tx_form_ 
    810814 
    811815                /* link buffers of this frame to the aggregate */ 
    812816                if (!fi->retries) 
    813                         ath_tx_addto_baw(sc, tid, fi->seqno); 
     817                        ath_tx_addto_baw(sc, tid, seqno); 
    814818                ath9k_hw_set11n_aggr_middle(sc->sc_ah, bf->bf_desc, ndelim); 
    815819 
    816820                __skb_unlink(skb, &tid->buf_q); 
    static void ath_tx_send_ampdu(struct ath 
    14341438{ 
    14351439        struct ath_frame_info *fi = get_frame_info(bf->bf_mpdu); 
    14361440        struct list_head bf_head; 
     1441        u16 seqno = bf->bf_state.seqno; 
    14371442 
    14381443        bf->bf_state.bf_type |= BUF_AMPDU; 
    14391444 
    static void ath_tx_send_ampdu(struct ath 
    14451450         * - h/w queue depth exceeds low water mark 
    14461451         */ 
    14471452        if (!skb_queue_empty(&tid->buf_q) || tid->paused || 
    1448             !BAW_WITHIN(tid->seq_start, tid->baw_size, fi->seqno) || 
     1453            !BAW_WITHIN(tid->seq_start, tid->baw_size, seqno) || 
    14491454            txctl->txq->axq_ampdu_depth >= ATH_AGGR_MIN_QDEPTH) { 
    14501455                /* 
    14511456                 * Add this frame to software queue for scheduling later 
    static void ath_tx_send_ampdu(struct ath 
    14631468 
    14641469        /* Add sub-frame to BAW */ 
    14651470        if (!fi->retries) 
    1466                 ath_tx_addto_baw(sc, tid, fi->seqno); 
     1471                ath_tx_addto_baw(sc, tid, seqno); 
    14671472 
    14681473        /* Queue to h/w without aggregation */ 
    14691474        TX_STAT_INC(txctl->txq->axq_qnum, a_queued_hw); 
    static enum ath9k_pkt_type get_hw_packet 
    15191524static void setup_frame_info(struct ieee80211_hw *hw, struct sk_buff *skb, 
    15201525                             int framelen) 
    15211526{ 
    1522         struct ath_softc *sc = hw->priv; 
    15231527        struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb); 
    15241528        struct ieee80211_sta *sta = tx_info->control.sta; 
    15251529        struct ieee80211_key_conf *hw_key = tx_info->control.hw_key; 
    1526         struct ieee80211_hdr *hdr; 
     1530        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; 
    15271531        struct ath_frame_info *fi = get_frame_info(skb); 
    15281532        struct ath_node *an = NULL; 
    1529         struct ath_atx_tid *tid; 
    15301533        enum ath9k_key_type keytype; 
    1531         u16 seqno = 0; 
    1532         u8 tidno; 
    15331534 
    15341535        keytype = ath9k_cmn_get_hw_crypto_keytype(skb); 
    15351536 
    15361537        if (sta) 
    15371538                an = (struct ath_node *) sta->drv_priv; 
    15381539 
    1539         hdr = (struct ieee80211_hdr *)skb->data; 
    1540         if (an && ieee80211_is_data_qos(hdr->frame_control) && 
    1541                 conf_is_ht(&hw->conf) && (sc->sc_flags & SC_OP_TXAGGR)) { 
    1542  
    1543                 tidno = ieee80211_get_qos_ctl(hdr)[0] & IEEE80211_QOS_CTL_TID_MASK; 
    1544  
    1545                 /* 
    1546                  * Override seqno set by upper layer with the one 
    1547                  * in tx aggregation state. 
    1548                  */ 
    1549                 tid = ATH_AN_2_TID(an, tidno); 
    1550                 seqno = tid->seq_next; 
    1551                 hdr->seq_ctrl = cpu_to_le16(seqno << IEEE80211_SEQ_SEQ_SHIFT); 
    1552                 INCR(tid->seq_next, IEEE80211_SEQ_MAX); 
    1553         } 
    1554  
    15551540        memset(fi, 0, sizeof(*fi)); 
    15561541        if (hw_key) 
    15571542                fi->keyix = hw_key->hw_key_idx; 
    static void setup_frame_info(struct ieee 
    15611546                fi->keyix = ATH9K_TXKEYIX_INVALID; 
    15621547        fi->keytype = keytype; 
    15631548        fi->framelen = framelen; 
    1564         fi->seqno = seqno; 
    15651549} 
    15661550 
    15671551static int setup_tx_flags(struct sk_buff *skb) 
    static void ath_tx_start_dma(struct ath_ 
    17971781        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; 
    17981782        struct list_head bf_head; 
    17991783        struct ath_atx_tid *tid = NULL; 
     1784        u16 seqno; 
    18001785        u8 tidno; 
    18011786 
    18021787        spin_lock_bh(&txctl->txq->axq_lock); 
    static void ath_tx_start_dma(struct ath_ 
    18061791                        IEEE80211_QOS_CTL_TID_MASK; 
    18071792                tid = ATH_AN_2_TID(txctl->an, tidno); 
    18081793 
     1794                seqno = tid->seq_next; 
     1795                hdr->seq_ctrl = cpu_to_le16(tid->seq_next << IEEE80211_SEQ_SEQ_SHIFT); 
     1796                INCR(tid->seq_next, IEEE80211_SEQ_MAX); 
     1797 
     1798                bf->bf_state.seqno = seqno; 
     1799 
    18091800                WARN_ON(tid->ac->txq != txctl->txq); 
    18101801        } 
    18111802 
Note: See TracBrowser for help on using the repository browser.