mac80211: merge some more fixes from trunk (fixes #9224)
authornbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Tue, 12 Apr 2011 17:41:27 +0000 (17:41 +0000)
committernbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Tue, 12 Apr 2011 17:41:27 +0000 (17:41 +0000)
git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@26613 3c298f89-4303-0410-b956-a3cf2f4a3e73

package/mac80211/patches/070-add_eeprom_def.patch [new file with mode: 0644]
package/mac80211/patches/521-ath9k_fix_ap_ps_buffering.patch
package/mac80211/patches/550-mac80211_remove_wds_sta_flag.patch

diff --git a/package/mac80211/patches/070-add_eeprom_def.patch b/package/mac80211/patches/070-add_eeprom_def.patch
new file mode 100644 (file)
index 0000000..70e784c
--- /dev/null
@@ -0,0 +1,12 @@
+--- a/include/linux/compat-2.6.36.h
++++ b/include/linux/compat-2.6.36.h
+@@ -120,6 +120,9 @@ static inline void tty_unlock(void) __re
+ #define tty_locked()           (kernel_locked())
+ #define usleep_range(_min, _max)      msleep((_max) / 1000)
++
++#define PCI_EEPROM_WIDTH_93C86        8
++
+ #endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,36)) */
+ #endif /* LINUX_26_36_COMPAT_H */
index 8f6249c84c0c7269fc55de6a03590e6f265a0597..cc956ed27939e45d54954798f509fb18ee9de4d3 100644 (file)
  
        skb = bf->bf_mpdu;
        hdr = (struct ieee80211_hdr *)skb->data;
-@@ -442,7 +443,11 @@ static void ath_tx_complete_aggr(struct 
+@@ -441,22 +442,24 @@ static void ath_tx_complete_aggr(struct 
+                       /* transmit completion */
                        acked_cnt++;
                } else {
-                       if (!(tid->state & AGGR_CLEANUP) && retry) {
+-                      if (!(tid->state & AGGR_CLEANUP) && retry) {
 -                              if (fi->retries < ATH_MAX_SW_RETRIES) {
-+                              if (ts->ts_status & ATH9K_TXERR_FILT) {
-+                                      if (!an->sleeping)
-+                                              clear_filter = true;
-+                                      txpending = 1;
-+                              } else if (fi->retries < ATH_MAX_SW_RETRIES) {
-                                       ath_tx_set_retry(sc, txq, bf->bf_mpdu);
-                                       txpending = 1;
-                               } else {
-@@ -496,6 +501,7 @@ static void ath_tx_complete_aggr(struct 
+-                                      ath_tx_set_retry(sc, txq, bf->bf_mpdu);
+-                                      txpending = 1;
+-                              } else {
+-                                      bf->bf_state.bf_type |= BUF_XRETRY;
+-                                      txfail = 1;
+-                                      sendbar = 1;
+-                                      txfail_cnt++;
+-                              }
+-                      } else {
++                      if ((tid->state & AGGR_CLEANUP) || !retry) {
+                               /*
+                                * cleanup in progress, just fail
+                                * the un-acked sub-frames
+                                */
+                               txfail = 1;
++                      } else if (fi->retries < ATH_MAX_SW_RETRIES) {
++                              if (!(ts->ts_status & ATH9K_TXERR_FILT) ||
++                                  !an->sleeping)
++                                      ath_tx_set_retry(sc, txq, bf->bf_mpdu);
++
++                              clear_filter = true;
++                              txpending = 1;
++                      } else {
++                              bf->bf_state.bf_type |= BUF_XRETRY;
++                              txfail = 1;
++                              sendbar = 1;
++                              txfail_cnt++;
+                       }
+               }
+@@ -496,6 +499,7 @@ static void ath_tx_complete_aggr(struct 
                                !txfail, sendbar);
                } else {
                        /* retry the un-acked ones */
                        if (!(sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)) {
                                if (bf->bf_next == NULL && bf_last->bf_stale) {
                                        struct ath_buf *tbf;
-@@ -546,7 +552,12 @@ static void ath_tx_complete_aggr(struct 
+@@ -546,7 +550,12 @@ static void ath_tx_complete_aggr(struct 
  
        /* prepend un-acked frames to the beginning of the pending frame queue */
        if (!list_empty(&bf_pending)) {
                list_splice(&bf_pending, &tid->buf_q);
                ath_tx_queue_tid(txq, tid);
                spin_unlock_bh(&txq->axq_lock);
-@@ -816,6 +827,11 @@ static void ath_tx_sched_aggr(struct ath
+@@ -816,6 +825,11 @@ static void ath_tx_sched_aggr(struct ath
                bf = list_first_entry(&bf_q, struct ath_buf, list);
                bf->bf_lastbf = list_entry(bf_q.prev, struct ath_buf, list);
  
                /* if only one frame, send as non-aggregate */
                if (bf == bf->bf_lastbf) {
                        fi = get_frame_info(bf->bf_mpdu);
-@@ -896,6 +912,67 @@ void ath_tx_aggr_stop(struct ath_softc *
+@@ -896,6 +910,67 @@ void ath_tx_aggr_stop(struct ath_softc *
        ath_tx_flush_tid(sc, txtid);
  }
  
  void ath_tx_aggr_resume(struct ath_softc *sc, struct ieee80211_sta *sta, u16 tid)
  {
        struct ath_atx_tid *txtid;
-@@ -1491,7 +1568,6 @@ static int setup_tx_flags(struct sk_buff
+@@ -1491,7 +1566,6 @@ static int setup_tx_flags(struct sk_buff
        struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb);
        int flags = 0;
  
        flags |= ATH9K_TXDESC_INTREQ;
  
        if (tx_info->flags & IEEE80211_TX_CTL_NO_ACK)
-@@ -1754,6 +1830,9 @@ static void ath_tx_start_dma(struct ath_
+@@ -1754,6 +1828,9 @@ static void ath_tx_start_dma(struct ath_
                if (txctl->paprd)
                        bf->bf_state.bfs_paprd_timestamp = jiffies;
  
index f9925732bdfc8030baf527dac0809bb4d4a31bad..29c2fd7dad125cda49e2ae3d05123cca828961a4 100644 (file)
        WLAN_STA_BLOCK_BA       = 1<<11,
 --- a/net/mac80211/debugfs_sta.c
 +++ b/net/mac80211/debugfs_sta.c
+@@ -59,7 +59,7 @@ static ssize_t sta_flags_read(struct fil
+       char buf[100];
+       struct sta_info *sta = file->private_data;
+       u32 staflags = get_sta_flags(sta);
+-      int res = scnprintf(buf, sizeof(buf), "%s%s%s%s%s%s%s%s%s",
++      int res = scnprintf(buf, sizeof(buf), "%s%s%s%s%s%s%s%s",
+               staflags & WLAN_STA_AUTH ? "AUTH\n" : "",
+               staflags & WLAN_STA_ASSOC ? "ASSOC\n" : "",
+               staflags & WLAN_STA_PS_STA ? "PS (sta)\n" : "",
 @@ -67,7 +67,6 @@ static ssize_t sta_flags_read(struct fil
                staflags & WLAN_STA_AUTHORIZED ? "AUTHORIZED\n" : "",
                staflags & WLAN_STA_SHORT_PREAMBLE ? "SHORT PREAMBLE\n" : "",