ath9k: Remove ath_tx_aggr_resp()
authorSujith <Sujith.Manoharan@atheros.com>
Wed, 29 Oct 2008 04:48:14 +0000 (10:18 +0530)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 10 Nov 2008 20:17:31 +0000 (15:17 -0500)
Accessing mac80211's internal state machine is wrong.
Will add resumption of a TID in a later patch.

Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath9k/core.h
drivers/net/wireless/ath9k/rc.c
drivers/net/wireless/ath9k/xmit.c

index 49d2f894b9dcc6c45cc1585ee51b3b4b522c3e5c..dd33cb7f2ca6595f2b55298bda2758b568e23676 100644 (file)
@@ -588,14 +588,6 @@ enum ATH_AGGR_STATUS {
        ATH_AGGR_8K_LIMITED,
 };
 
-enum ATH_AGGR_CHECK {
-       AGGR_NOT_REQUIRED,
-       AGGR_REQUIRED,
-       AGGR_CLEANUP_PROGRESS,
-       AGGR_EXCHANGE_PROGRESS,
-       AGGR_EXCHANGE_DONE
-};
-
 struct aggr_rifs_param {
        int param_max_frames;
        int param_max_len;
@@ -621,8 +613,7 @@ struct ath_node {
 
 void ath_tx_resume_tid(struct ath_softc *sc,
        struct ath_atx_tid *tid);
-enum ATH_AGGR_CHECK ath_tx_aggr_check(struct ath_softc *sc,
-       struct ath_node *an, u8 tidno);
+bool ath_tx_aggr_check(struct ath_softc *sc, struct ath_node *an, u8 tidno);
 void ath_tx_aggr_teardown(struct ath_softc *sc,
        struct ath_node *an, u8 tidno);
 void ath_rx_aggr_teardown(struct ath_softc *sc,
index fecc8390d4d8e2bc22ac6b64924396f0c4ea8543..aa6bfd717c2055693ebd2635ef95aca5dcae7639 100644 (file)
@@ -1879,49 +1879,6 @@ static void ath_tx_status(void *priv, struct ieee80211_supported_band *sband,
        tx_info->control.vif = NULL;
 }
 
-static void ath_tx_aggr_resp(struct ath_softc *sc,
-                            struct ieee80211_supported_band *sband,
-                            struct ieee80211_sta *sta,
-                            struct ath_node *an,
-                            u8 tidno)
-{
-       struct ath_atx_tid *txtid;
-       u16 buffersize = 0;
-       int state;
-       struct sta_info *si;
-
-       if (!(sc->sc_flags & SC_OP_TXAGGR))
-               return;
-
-       txtid = ATH_AN_2_TID(an, tidno);
-       if (!txtid->paused)
-               return;
-
-       /*
-        * XXX: This is entirely busted, we aren't supposed to
-        *      access the sta from here because it's internal
-        *      to mac80211, and looking at the state without
-        *      locking is wrong too.
-        */
-       si = container_of(sta, struct sta_info, sta);
-       buffersize = IEEE80211_MIN_AMPDU_BUF <<
-               sband->ht_cap.ampdu_factor; /* FIXME */
-       state = si->ampdu_mlme.tid_state_tx[tidno];
-
-       if (state & HT_ADDBA_RECEIVED_MSK) {
-               txtid->state |= AGGR_ADDBA_COMPLETE;
-               txtid->state &= ~AGGR_ADDBA_PROGRESS;
-               txtid->baw_size = buffersize;
-
-               DPRINTF(sc, ATH_DBG_AGGR,
-                       "%s: Resuming tid, buffersize: %d\n",
-                       __func__,
-                       buffersize);
-
-               ath_tx_resume_tid(sc, txtid);
-       }
-}
-
 static void ath_get_rate(void *priv, struct ieee80211_sta *sta, void *priv_sta,
                         struct ieee80211_tx_rate_control *txrc)
 {
@@ -1934,7 +1891,7 @@ static void ath_get_rate(void *priv, struct ieee80211_sta *sta, void *priv_sta,
        struct ath_rate_node *ath_rc_priv = priv_sta;
        struct ath_node *an;
        struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb);
-       int is_probe = FALSE, chk, ret;
+       int is_probe = FALSE;
        s8 lowest_idx;
        __le16 fc = hdr->frame_control;
        u8 *qc, tid;
@@ -1981,26 +1938,10 @@ static void ath_get_rate(void *priv, struct ieee80211_sta *sta, void *priv_sta,
                if (ieee80211_is_data_qos(fc)) {
                        qc = ieee80211_get_qos_ctl(hdr);
                        tid = qc[0] & 0xf;
-
                        an = (struct ath_node *)sta->drv_priv;
 
-                       chk = ath_tx_aggr_check(sc, an, tid);
-                       if (chk == AGGR_REQUIRED) {
-                               ret = ieee80211_start_tx_ba_session(hw,
-                                       hdr->addr1, tid);
-                               if (ret)
-                                       DPRINTF(sc, ATH_DBG_AGGR,
-                                               "%s: Unable to start tx "
-                                               "aggr for: %pM\n",
-                                               __func__,
-                                               hdr->addr1);
-                               else
-                                       DPRINTF(sc, ATH_DBG_AGGR,
-                                               "%s: Started tx aggr for: %pM\n",
-                                               __func__,
-                                               hdr->addr1);
-                       } else if (chk == AGGR_EXCHANGE_PROGRESS)
-                               ath_tx_aggr_resp(sc, sband, sta, an, tid);
+                       if(ath_tx_aggr_check(sc, an, tid))
+                               ieee80211_start_tx_ba_session(hw, hdr->addr1, tid);
                }
        }
 }
index f41030d1a6876a4c8c9eb557600e8c6f86895179..7e6f4e59a5d1052456d5ccd022e1b8076d77ffe2 100644 (file)
@@ -2322,28 +2322,24 @@ u32 ath_txq_aggr_depth(struct ath_softc *sc, int qnum)
        return sc->sc_txq[qnum].axq_aggr_depth;
 }
 
-/* Check if an ADDBA is required. A valid node must be passed. */
-enum ATH_AGGR_CHECK ath_tx_aggr_check(struct ath_softc *sc,
-                                     struct ath_node *an,
-                                     u8 tidno)
+bool ath_tx_aggr_check(struct ath_softc *sc, struct ath_node *an, u8 tidno)
 {
        struct ath_atx_tid *txtid;
 
        if (!(sc->sc_flags & SC_OP_TXAGGR))
-               return AGGR_NOT_REQUIRED;
+               return false;
 
-       /* ADDBA exchange must be completed before sending aggregates */
        txtid = ATH_AN_2_TID(an, tidno);
 
        if (!(txtid->state & AGGR_ADDBA_COMPLETE)) {
                if (!(txtid->state & AGGR_ADDBA_PROGRESS) &&
                    (txtid->addba_exchangeattempts < ADDBA_EXCHANGE_ATTEMPTS)) {
                        txtid->addba_exchangeattempts++;
-                       return AGGR_REQUIRED;
+                       return true;
                }
        }
 
-       return AGGR_NOT_REQUIRED;
+       return false;
 }
 
 /* Start TX aggregation */