From c52df7d96ebcea03dadd247d1b9f5a4ac3b1bde2 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Tue, 12 Apr 2011 17:41:27 +0000 Subject: [PATCH] mac80211: merge some more fixes from trunk (fixes #9224) SVN-Revision: 26613 --- .../mac80211/patches/070-add_eeprom_def.patch | 12 ++++ .../521-ath9k_fix_ap_ps_buffering.patch | 55 +++++++++++++------ .../550-mac80211_remove_wds_sta_flag.patch | 9 +++ 3 files changed, 60 insertions(+), 16 deletions(-) create mode 100644 package/mac80211/patches/070-add_eeprom_def.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 index 0000000000..70e784c870 --- /dev/null +++ b/package/mac80211/patches/070-add_eeprom_def.patch @@ -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 */ diff --git a/package/mac80211/patches/521-ath9k_fix_ap_ps_buffering.patch b/package/mac80211/patches/521-ath9k_fix_ap_ps_buffering.patch index 8f6249c84c..cc956ed279 100644 --- a/package/mac80211/patches/521-ath9k_fix_ap_ps_buffering.patch +++ b/package/mac80211/patches/521-ath9k_fix_ap_ps_buffering.patch @@ -75,20 +75,43 @@ 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 */ @@ -96,7 +119,7 @@ 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)) { @@ -109,7 +132,7 @@ 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); @@ -121,7 +144,7 @@ /* 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); } @@ -189,7 +212,7 @@ 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; @@ -197,7 +220,7 @@ 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; diff --git a/package/mac80211/patches/550-mac80211_remove_wds_sta_flag.patch b/package/mac80211/patches/550-mac80211_remove_wds_sta_flag.patch index f9925732bd..29c2fd7dad 100644 --- a/package/mac80211/patches/550-mac80211_remove_wds_sta_flag.patch +++ b/package/mac80211/patches/550-mac80211_remove_wds_sta_flag.patch @@ -18,6 +18,15 @@ 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" : "", -- 2.30.2