From 669f5554cb75b36c42fb42b49d6c4e2d35eb3e62 Mon Sep 17 00:00:00 2001
From: nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Date: Sat, 10 Mar 2012 12:59:24 +0000
Subject: mac80211: reorganize patches, fold in patches that were merged
 upstream

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@30863 3c298f89-4303-0410-b956-a3cf2f4a3e73
---
 package/mac80211/patches/300-pending_work.patch    | 304 ++++++++++++++++++++-
 .../440-ath5k_calibrate_no_queue_stop.patch        |  31 ---
 .../patches/441-ath5k_no_agc_recalibration.patch   |  42 ---
 .../patches/510-ath9k_intr_mitigation_tweak.patch  |   2 +-
 .../patches/513-ath9k_channelbw_debugfs.patch      |   2 +-
 .../patches/530-mac80211_cur_txpower.patch         |   2 +-
 .../patches/541-ath9k_ar9280_cold_reset.patch      |  23 --
 .../mac80211/patches/545-ath9k_fix_initvals.patch  | 208 ++++++++++++++
 .../551-ath9k_per_chain_signal_strength.patch      |  22 +-
 .../mac80211/patches/570-ath9k_fix_initvals.patch  | 208 --------------
 .../mac80211/patches/571-ath9k_beacon_fix.patch    | 113 --------
 .../580-mac80211_ignore_bad_signal_values.patch    |  44 ---
 .../patches/581-ath9k_report_missing_signal.patch  |  37 ---
 13 files changed, 516 insertions(+), 522 deletions(-)
 delete mode 100644 package/mac80211/patches/440-ath5k_calibrate_no_queue_stop.patch
 delete mode 100644 package/mac80211/patches/441-ath5k_no_agc_recalibration.patch
 delete mode 100644 package/mac80211/patches/541-ath9k_ar9280_cold_reset.patch
 create mode 100644 package/mac80211/patches/545-ath9k_fix_initvals.patch
 delete mode 100644 package/mac80211/patches/570-ath9k_fix_initvals.patch
 delete mode 100644 package/mac80211/patches/571-ath9k_beacon_fix.patch
 delete mode 100644 package/mac80211/patches/580-mac80211_ignore_bad_signal_values.patch
 delete mode 100644 package/mac80211/patches/581-ath9k_report_missing_signal.patch

(limited to 'package/mac80211/patches')

diff --git a/package/mac80211/patches/300-pending_work.patch b/package/mac80211/patches/300-pending_work.patch
index 8bb89422e..b96e15488 100644
--- a/package/mac80211/patches/300-pending_work.patch
+++ b/package/mac80211/patches/300-pending_work.patch
@@ -1,6 +1,35 @@
 --- a/drivers/net/wireless/ath/ath9k/ar9003_mac.c
 +++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.c
-@@ -510,7 +510,11 @@ int ath9k_hw_process_rxdesc_edma(struct 
+@@ -326,7 +326,6 @@ static bool ar9003_hw_get_isr(struct ath
+ static int ar9003_hw_proc_txdesc(struct ath_hw *ah, void *ds,
+ 				 struct ath_tx_status *ts)
+ {
+-	struct ar9003_txc *txc = (struct ar9003_txc *) ds;
+ 	struct ar9003_txs *ads;
+ 	u32 status;
+ 
+@@ -336,11 +335,7 @@ static int ar9003_hw_proc_txdesc(struct 
+ 	if ((status & AR_TxDone) == 0)
+ 		return -EINPROGRESS;
+ 
+-	ts->qid = MS(ads->ds_info, AR_TxQcuNum);
+-	if (!txc || (MS(txc->info, AR_TxQcuNum) == ts->qid))
+-		ah->ts_tail = (ah->ts_tail + 1) % ah->ts_size;
+-	else
+-		return -ENOENT;
++	ah->ts_tail = (ah->ts_tail + 1) % ah->ts_size;
+ 
+ 	if ((MS(ads->ds_info, AR_DescId) != ATHEROS_VENDOR_ID) ||
+ 	    (MS(ads->ds_info, AR_TxRxDesc) != 1)) {
+@@ -354,6 +349,7 @@ static int ar9003_hw_proc_txdesc(struct 
+ 	ts->ts_seqnum = MS(status, AR_SeqNum);
+ 	ts->tid = MS(status, AR_TxTid);
+ 
++	ts->qid = MS(ads->ds_info, AR_TxQcuNum);
+ 	ts->desc_id = MS(ads->status1, AR_TxDescId);
+ 	ts->ts_tstamp = ads->status4;
+ 	ts->ts_status = 0;
+@@ -510,7 +506,11 @@ int ath9k_hw_process_rxdesc_edma(struct 
  		 */
  		if (rxsp->status11 & AR_CRCErr)
  			rxs->rs_status |= ATH9K_RXERR_CRC;
@@ -13,7 +42,7 @@
  			phyerr = MS(rxsp->status11, AR_PHYErrCode);
  			/*
  			 * If we reach a point here where AR_PostDelimCRCErr is
-@@ -532,11 +536,7 @@ int ath9k_hw_process_rxdesc_edma(struct 
+@@ -532,11 +532,7 @@ int ath9k_hw_process_rxdesc_edma(struct 
  				rxs->rs_status |= ATH9K_RXERR_PHY;
  				rxs->rs_phyerr = phyerr;
  			}
@@ -130,7 +159,24 @@
  	IEEE80211_TX_CTL_MORE_FRAMES | IEEE80211_TX_CTL_LDPC |		      \
  	IEEE80211_TX_CTL_STBC | IEEE80211_TX_STATUS_EOSP)
  
-@@ -1634,7 +1634,7 @@ void ieee80211_free_txskb(struct ieee802
+@@ -659,6 +659,8 @@ ieee80211_tx_info_clear_status(struct ie
+  * @RX_FLAG_HT: HT MCS was used and rate_idx is MCS index
+  * @RX_FLAG_40MHZ: HT40 (40 MHz) was used
+  * @RX_FLAG_SHORT_GI: Short guard interval was used
++ * @RX_FLAG_NO_SIGNAL_VAL: The signal strength value is not present.
++ *	Valid only for data frames (mainly A-MPDU)
+  */
+ enum mac80211_rx_flags {
+ 	RX_FLAG_MMIC_ERROR	= 1<<0,
+@@ -672,6 +674,7 @@ enum mac80211_rx_flags {
+ 	RX_FLAG_HT		= 1<<9,
+ 	RX_FLAG_40MHZ		= 1<<10,
+ 	RX_FLAG_SHORT_GI	= 1<<11,
++	RX_FLAG_NO_SIGNAL_VAL	= 1<<12,
+ };
+ 
+ /**
+@@ -1634,7 +1637,7 @@ void ieee80211_free_txskb(struct ieee802
   * the station sends a PS-Poll or a uAPSD trigger frame, mac80211
   * will inform the driver of this with the @allow_buffered_frames
   * callback; this callback is optional. mac80211 will then transmit
@@ -139,7 +185,7 @@
   * on each frame. The last frame in the service period (or the only
   * response to a PS-Poll) also has %IEEE80211_TX_STATUS_EOSP set to
   * indicate that it ends the service period; as this frame must have
-@@ -1642,6 +1642,9 @@ void ieee80211_free_txskb(struct ieee802
+@@ -1642,6 +1645,9 @@ void ieee80211_free_txskb(struct ieee802
   * When TX status is reported for this frame, the service period is
   * marked has having ended and a new one can be started by the peer.
   *
@@ -149,7 +195,7 @@
   * Another race condition can happen on some devices like iwlwifi
   * when there are frames queued for the station and it wakes up
   * or polls; the frames that are already queued could end up being
-@@ -2140,7 +2143,7 @@ enum ieee80211_frame_release_type {
+@@ -2140,7 +2146,7 @@ enum ieee80211_frame_release_type {
   * @allow_buffered_frames: Prepare device to allow the given number of frames
   *	to go out to the given station. The frames will be sent by mac80211
   *	via the usual TX path after this call. The TX information for frames
@@ -337,7 +383,17 @@
  			break;
 --- a/net/mac80211/rx.c
 +++ b/net/mac80211/rx.c
-@@ -489,12 +489,12 @@ ieee80211_rx_mesh_check(struct ieee80211
+@@ -177,7 +177,8 @@ ieee80211_add_rx_radiotap_header(struct 
+ 	pos += 2;
+ 
+ 	/* IEEE80211_RADIOTAP_DBM_ANTSIGNAL */
+-	if (local->hw.flags & IEEE80211_HW_SIGNAL_DBM) {
++	if (local->hw.flags & IEEE80211_HW_SIGNAL_DBM &&
++	    !(status->flag & RX_FLAG_NO_SIGNAL_VAL)) {
+ 		*pos = status->signal;
+ 		rthdr->it_present |=
+ 			cpu_to_le32(1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL);
+@@ -489,12 +490,12 @@ ieee80211_rx_mesh_check(struct ieee80211
  			if (ieee80211_has_tods(hdr->frame_control) ||
  				!ieee80211_has_fromds(hdr->frame_control))
  				return RX_DROP_MONITOR;
@@ -352,7 +408,20 @@
  				return RX_DROP_MONITOR;
  		}
  	}
-@@ -2282,6 +2282,7 @@ ieee80211_rx_h_action(struct ieee80211_r
+@@ -1309,8 +1310,10 @@ ieee80211_rx_h_sta_process(struct ieee80
+ 
+ 	sta->rx_fragments++;
+ 	sta->rx_bytes += rx->skb->len;
+-	sta->last_signal = status->signal;
+-	ewma_add(&sta->avg_signal, -status->signal);
++	if (!(status->flag & RX_FLAG_NO_SIGNAL_VAL)) {
++		sta->last_signal = status->signal;
++		ewma_add(&sta->avg_signal, -status->signal);
++	}
+ 
+ 	/*
+ 	 * Change STA power saving mode only at the end of a frame
+@@ -2282,6 +2285,7 @@ ieee80211_rx_h_action(struct ieee80211_r
  		    sdata->vif.type != NL80211_IFTYPE_MESH_POINT &&
  		    sdata->vif.type != NL80211_IFTYPE_AP_VLAN &&
  		    sdata->vif.type != NL80211_IFTYPE_AP &&
@@ -360,7 +429,7 @@
  		    sdata->vif.type != NL80211_IFTYPE_ADHOC)
  			break;
  
-@@ -2336,7 +2337,7 @@ ieee80211_rx_h_action(struct ieee80211_r
+@@ -2336,7 +2340,7 @@ ieee80211_rx_h_action(struct ieee80211_r
  			if (sdata->vif.type != NL80211_IFTYPE_STATION)
  				break;
  
@@ -369,7 +438,7 @@
  				break;
  
  			goto queue;
-@@ -2492,14 +2493,15 @@ ieee80211_rx_h_mgmt(struct ieee80211_rx_
+@@ -2492,14 +2496,15 @@ ieee80211_rx_h_mgmt(struct ieee80211_rx_
  
  	if (!ieee80211_vif_is_mesh(&sdata->vif) &&
  	    sdata->vif.type != NL80211_IFTYPE_ADHOC &&
@@ -387,7 +456,7 @@
  		break;
  	case cpu_to_le16(IEEE80211_STYPE_ASSOC_RESP):
  	case cpu_to_le16(IEEE80211_STYPE_REASSOC_RESP):
-@@ -2853,10 +2855,16 @@ static int prepare_for_handlers(struct i
+@@ -2853,10 +2858,16 @@ static int prepare_for_handlers(struct i
  		}
  		break;
  	case NL80211_IFTYPE_WDS:
@@ -1140,3 +1209,218 @@
  	tasklet_init(&sc->intr_tq, ath9k_tasklet, (unsigned long)sc);
  	tasklet_init(&sc->bcon_tasklet, ath_beacon_tasklet,
  		     (unsigned long)sc);
+--- a/drivers/net/wireless/ath/ath9k/hw.c
++++ b/drivers/net/wireless/ath/ath9k/hw.c
+@@ -1386,10 +1386,16 @@ static bool ath9k_hw_set_reset_reg(struc
+ static bool ath9k_hw_chip_reset(struct ath_hw *ah,
+ 				struct ath9k_channel *chan)
+ {
+-	if (AR_SREV_9280(ah) && ah->eep_ops->get_eeprom(ah, EEP_OL_PWRCTRL)) {
+-		if (!ath9k_hw_set_reset_reg(ah, ATH9K_RESET_POWER_ON))
+-			return false;
+-	} else if (!ath9k_hw_set_reset_reg(ah, ATH9K_RESET_WARM))
++	int reset_type = ATH9K_RESET_WARM;
++
++	if (AR_SREV_9280(ah)) {
++		if (ah->eep_ops->get_eeprom(ah, EEP_OL_PWRCTRL))
++			reset_type = ATH9K_RESET_POWER_ON;
++		else
++			reset_type = ATH9K_RESET_COLD;
++	}
++
++	if (!ath9k_hw_set_reset_reg(ah, reset_type))
+ 		return false;
+ 
+ 	if (!ath9k_hw_setpower(ah, ATH9K_PM_AWAKE))
+--- a/drivers/net/wireless/ath/ath5k/base.c
++++ b/drivers/net/wireless/ath/ath5k/base.c
+@@ -2330,15 +2330,6 @@ ath5k_calibrate_work(struct work_struct 
+ 					"got new rfgain, resetting\n");
+ 			ieee80211_queue_work(ah->hw, &ah->reset_work);
+ 		}
+-
+-		/* TODO: On full calibration we should stop TX here,
+-		 * so that it doesn't interfere (mostly due to gain_f
+-		 * calibration that messes with tx packets -see phy.c).
+-		 *
+-		 * NOTE: Stopping the queues from above is not enough
+-		 * to stop TX but saves us from disconecting (at least
+-		 * we don't lose packets). */
+-		ieee80211_stop_queues(ah->hw);
+ 	} else
+ 		ah->ah_cal_mask |= AR5K_CALIBRATION_SHORT;
+ 
+@@ -2353,10 +2344,9 @@ ath5k_calibrate_work(struct work_struct 
+ 				ah->curchan->center_freq));
+ 
+ 	/* Clear calibration flags */
+-	if (ah->ah_cal_mask & AR5K_CALIBRATION_FULL) {
+-		ieee80211_wake_queues(ah->hw);
++	if (ah->ah_cal_mask & AR5K_CALIBRATION_FULL)
+ 		ah->ah_cal_mask &= ~AR5K_CALIBRATION_FULL;
+-	} else if (ah->ah_cal_mask & AR5K_CALIBRATION_SHORT)
++	else if (ah->ah_cal_mask & AR5K_CALIBRATION_SHORT)
+ 		ah->ah_cal_mask &= ~AR5K_CALIBRATION_SHORT;
+ }
+ 
+--- a/drivers/net/wireless/ath/ath5k/phy.c
++++ b/drivers/net/wireless/ath/ath5k/phy.c
+@@ -1871,31 +1871,15 @@ ath5k_hw_phy_calibrate(struct ath5k_hw *
+ 		ret = 0;
+ 	}
+ 
+-	/* On full calibration do an AGC calibration and
+-	 * request a PAPD probe for gainf calibration if
+-	 * needed */
+-	if (ah->ah_cal_mask & AR5K_CALIBRATION_FULL) {
++	/* On full calibration request a PAPD probe for
++	 * gainf calibration if needed */
++	if ((ah->ah_cal_mask & AR5K_CALIBRATION_FULL) &&
++	    (ah->ah_radio == AR5K_RF5111 ||
++	     ah->ah_radio == AR5K_RF5112) &&
++	    channel->hw_value != AR5K_MODE_11B)
++		ath5k_hw_request_rfgain_probe(ah);
+ 
+-		AR5K_REG_ENABLE_BITS(ah, AR5K_PHY_AGCCTL,
+-					AR5K_PHY_AGCCTL_CAL);
+-
+-		ret = ath5k_hw_register_timeout(ah, AR5K_PHY_AGCCTL,
+-			AR5K_PHY_AGCCTL_CAL | AR5K_PHY_AGCCTL_NF,
+-			0, false);
+-		if (ret) {
+-			ATH5K_ERR(ah,
+-				"gain calibration timeout (%uMHz)\n",
+-				channel->center_freq);
+-		}
+-
+-		if ((ah->ah_radio == AR5K_RF5111 ||
+-			ah->ah_radio == AR5K_RF5112)
+-			&& (channel->hw_value != AR5K_MODE_11B))
+-			ath5k_hw_request_rfgain_probe(ah);
+-	}
+-
+-	/* Update noise floor
+-	 * XXX: Only do this after AGC calibration */
++	/* Update noise floor */
+ 	if (!(ah->ah_cal_mask & AR5K_CALIBRATION_NF))
+ 		ath5k_hw_update_noise_floor(ah);
+ 
+--- a/drivers/net/wireless/ath/ath9k/recv.c
++++ b/drivers/net/wireless/ath/ath9k/recv.c
+@@ -954,6 +954,7 @@ static void ath9k_process_rssi(struct at
+ 	struct ath_softc *sc = hw->priv;
+ 	struct ath_hw *ah = common->ah;
+ 	int last_rssi;
++	int rssi = rx_stats->rs_rssi;
+ 
+ 	if (!rx_stats->is_mybeacon ||
+ 	    ((ah->opmode != NL80211_IFTYPE_STATION) &&
+@@ -965,13 +966,12 @@ static void ath9k_process_rssi(struct at
+ 
+ 	last_rssi = sc->last_rssi;
+ 	if (likely(last_rssi != ATH_RSSI_DUMMY_MARKER))
+-		rx_stats->rs_rssi = ATH_EP_RND(last_rssi,
+-					      ATH_RSSI_EP_MULTIPLIER);
+-	if (rx_stats->rs_rssi < 0)
+-		rx_stats->rs_rssi = 0;
++		rssi = ATH_EP_RND(last_rssi, ATH_RSSI_EP_MULTIPLIER);
++	if (rssi < 0)
++		rssi = 0;
+ 
+ 	/* Update Beacon RSSI, this is used by ANI. */
+-	ah->stats.avgbrssi = rx_stats->rs_rssi;
++	ah->stats.avgbrssi = rssi;
+ }
+ 
+ /*
+@@ -1011,6 +1011,8 @@ static int ath9k_rx_skb_preprocess(struc
+ 	rx_status->signal = ah->noise + rx_stats->rs_rssi;
+ 	rx_status->antenna = rx_stats->rs_antenna;
+ 	rx_status->flag |= RX_FLAG_MACTIME_MPDU;
++	if (rx_stats->rs_moreaggr)
++		rx_status->flag |= RX_FLAG_NO_SIGNAL_VAL;
+ 
+ 	return 0;
+ }
+--- a/drivers/net/wireless/ath/ath9k/beacon.c
++++ b/drivers/net/wireless/ath/ath9k/beacon.c
+@@ -91,7 +91,7 @@ static void ath_beacon_setup(struct ath_
+ 	info.txpower = MAX_RATE_POWER;
+ 	info.keyix = ATH9K_TXKEYIX_INVALID;
+ 	info.keytype = ATH9K_KEY_TYPE_CLEAR;
+-	info.flags = ATH9K_TXDESC_NOACK;
++	info.flags = ATH9K_TXDESC_NOACK | ATH9K_TXDESC_INTREQ;
+ 
+ 	info.buf_addr[0] = bf->bf_buf_addr;
+ 	info.buf_len[0] = roundup(skb->len, 4);
+@@ -355,7 +355,6 @@ void ath_beacon_tasklet(unsigned long da
+ 	struct ath_common *common = ath9k_hw_common(ah);
+ 	struct ath_buf *bf = NULL;
+ 	struct ieee80211_vif *vif;
+-	struct ath_tx_status ts;
+ 	bool edma = !!(ah->caps.hw_caps & ATH9K_HW_CAP_EDMA);
+ 	int slot;
+ 	u32 bfaddr, bc = 0;
+@@ -462,11 +461,6 @@ void ath_beacon_tasklet(unsigned long da
+ 			ath9k_hw_txstart(ah, sc->beacon.beaconq);
+ 
+ 		sc->beacon.ast_be_xmit += bc;     /* XXX per-vif? */
+-		if (edma) {
+-			spin_lock_bh(&sc->sc_pcu_lock);
+-			ath9k_hw_txprocdesc(ah, bf->bf_desc, (void *)&ts);
+-			spin_unlock_bh(&sc->sc_pcu_lock);
+-		}
+ 	}
+ }
+ 
+--- a/drivers/net/wireless/ath/ath9k/mac.c
++++ b/drivers/net/wireless/ath/ath9k/mac.c
+@@ -745,7 +745,11 @@ int ath9k_hw_beaconq_setup(struct ath_hw
+ 	qi.tqi_aifs = 1;
+ 	qi.tqi_cwmin = 0;
+ 	qi.tqi_cwmax = 0;
+-	/* NB: don't enable any interrupts */
++
++	if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
++		qi.tqi_qflags = TXQ_FLAG_TXOKINT_ENABLE |
++				TXQ_FLAG_TXERRINT_ENABLE;
++
+ 	return ath9k_hw_setuptxqueue(ah, ATH9K_TX_QUEUE_BEACON, &qi);
+ }
+ EXPORT_SYMBOL(ath9k_hw_beaconq_setup);
+--- a/drivers/net/wireless/ath/ath9k/main.c
++++ b/drivers/net/wireless/ath/ath9k/main.c
+@@ -2300,6 +2300,7 @@ static int ath9k_tx_last_beacon(struct i
+ 	struct ath_vif *avp;
+ 	struct ath_buf *bf;
+ 	struct ath_tx_status ts;
++	bool edma = !!(ah->caps.hw_caps & ATH9K_HW_CAP_EDMA);
+ 	int status;
+ 
+ 	vif = sc->beacon.bslot[0];
+@@ -2310,7 +2311,7 @@ static int ath9k_tx_last_beacon(struct i
+ 	if (!avp->is_bslot_active)
+ 		return 0;
+ 
+-	if (!sc->beacon.tx_processed) {
++	if (!sc->beacon.tx_processed && !edma) {
+ 		tasklet_disable(&sc->bcon_tasklet);
+ 
+ 		bf = avp->av_bcbuf;
+--- a/drivers/net/wireless/ath/ath9k/xmit.c
++++ b/drivers/net/wireless/ath/ath9k/xmit.c
+@@ -2296,9 +2296,12 @@ void ath_tx_edma_tasklet(struct ath_soft
+ 			break;
+ 		}
+ 
+-		/* Skip beacon completions */
+-		if (ts.qid == sc->beacon.beaconq)
++		/* Process beacon completions separately */
++		if (ts.qid == sc->beacon.beaconq) {
++			sc->beacon.tx_processed = true;
++			sc->beacon.tx_last = !(ts.ts_status & ATH9K_TXERR_MASK);
+ 			continue;
++		}
+ 
+ 		txq = &sc->tx.txq[ts.qid];
+ 
diff --git a/package/mac80211/patches/440-ath5k_calibrate_no_queue_stop.patch b/package/mac80211/patches/440-ath5k_calibrate_no_queue_stop.patch
deleted file mode 100644
index 3751c531b..000000000
--- a/package/mac80211/patches/440-ath5k_calibrate_no_queue_stop.patch
+++ /dev/null
@@ -1,31 +0,0 @@
---- a/drivers/net/wireless/ath/ath5k/base.c
-+++ b/drivers/net/wireless/ath/ath5k/base.c
-@@ -2330,15 +2330,6 @@ ath5k_calibrate_work(struct work_struct 
- 					"got new rfgain, resetting\n");
- 			ieee80211_queue_work(ah->hw, &ah->reset_work);
- 		}
--
--		/* TODO: On full calibration we should stop TX here,
--		 * so that it doesn't interfere (mostly due to gain_f
--		 * calibration that messes with tx packets -see phy.c).
--		 *
--		 * NOTE: Stopping the queues from above is not enough
--		 * to stop TX but saves us from disconecting (at least
--		 * we don't lose packets). */
--		ieee80211_stop_queues(ah->hw);
- 	} else
- 		ah->ah_cal_mask |= AR5K_CALIBRATION_SHORT;
- 
-@@ -2353,10 +2344,9 @@ ath5k_calibrate_work(struct work_struct 
- 				ah->curchan->center_freq));
- 
- 	/* Clear calibration flags */
--	if (ah->ah_cal_mask & AR5K_CALIBRATION_FULL) {
--		ieee80211_wake_queues(ah->hw);
-+	if (ah->ah_cal_mask & AR5K_CALIBRATION_FULL)
- 		ah->ah_cal_mask &= ~AR5K_CALIBRATION_FULL;
--	} else if (ah->ah_cal_mask & AR5K_CALIBRATION_SHORT)
-+	else if (ah->ah_cal_mask & AR5K_CALIBRATION_SHORT)
- 		ah->ah_cal_mask &= ~AR5K_CALIBRATION_SHORT;
- }
- 
diff --git a/package/mac80211/patches/441-ath5k_no_agc_recalibration.patch b/package/mac80211/patches/441-ath5k_no_agc_recalibration.patch
deleted file mode 100644
index 87d0743d3..000000000
--- a/package/mac80211/patches/441-ath5k_no_agc_recalibration.patch
+++ /dev/null
@@ -1,42 +0,0 @@
---- a/drivers/net/wireless/ath/ath5k/phy.c
-+++ b/drivers/net/wireless/ath/ath5k/phy.c
-@@ -1871,31 +1871,15 @@ ath5k_hw_phy_calibrate(struct ath5k_hw *
- 		ret = 0;
- 	}
- 
--	/* On full calibration do an AGC calibration and
--	 * request a PAPD probe for gainf calibration if
--	 * needed */
--	if (ah->ah_cal_mask & AR5K_CALIBRATION_FULL) {
-+	/* On full calibration request a PAPD probe for
-+	 * gainf calibration if needed */
-+	if ((ah->ah_cal_mask & AR5K_CALIBRATION_FULL) &&
-+	    (ah->ah_radio == AR5K_RF5111 ||
-+	     ah->ah_radio == AR5K_RF5112) &&
-+	    channel->hw_value != AR5K_MODE_11B)
-+		ath5k_hw_request_rfgain_probe(ah);
- 
--		AR5K_REG_ENABLE_BITS(ah, AR5K_PHY_AGCCTL,
--					AR5K_PHY_AGCCTL_CAL);
--
--		ret = ath5k_hw_register_timeout(ah, AR5K_PHY_AGCCTL,
--			AR5K_PHY_AGCCTL_CAL | AR5K_PHY_AGCCTL_NF,
--			0, false);
--		if (ret) {
--			ATH5K_ERR(ah,
--				"gain calibration timeout (%uMHz)\n",
--				channel->center_freq);
--		}
--
--		if ((ah->ah_radio == AR5K_RF5111 ||
--			ah->ah_radio == AR5K_RF5112)
--			&& (channel->hw_value != AR5K_MODE_11B))
--			ath5k_hw_request_rfgain_probe(ah);
--	}
--
--	/* Update noise floor
--	 * XXX: Only do this after AGC calibration */
-+	/* Update noise floor */
- 	if (!(ah->ah_cal_mask & AR5K_CALIBRATION_NF))
- 		ath5k_hw_update_noise_floor(ah);
- 
diff --git a/package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch b/package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch
index 092ab5714..aee38d167 100644
--- a/package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch
+++ b/package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -1745,8 +1745,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st
+@@ -1751,8 +1751,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st
  	REG_WRITE(ah, AR_OBS, 8);
  
  	if (ah->config.rx_intr_mitigation) {
diff --git a/package/mac80211/patches/513-ath9k_channelbw_debugfs.patch b/package/mac80211/patches/513-ath9k_channelbw_debugfs.patch
index 99ba153c5..34e5ea160 100644
--- a/package/mac80211/patches/513-ath9k_channelbw_debugfs.patch
+++ b/package/mac80211/patches/513-ath9k_channelbw_debugfs.patch
@@ -128,7 +128,7 @@
  			return -EINVAL;
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -1570,6 +1570,10 @@ int ath9k_hw_reset(struct ath_hw *ah, st
+@@ -1576,6 +1576,10 @@ int ath9k_hw_reset(struct ath_hw *ah, st
  	    caldata->rtt_hist.num_readings)
  		allow_fbs = true;
  
diff --git a/package/mac80211/patches/530-mac80211_cur_txpower.patch b/package/mac80211/patches/530-mac80211_cur_txpower.patch
index c7f901bfa..3363fe27e 100644
--- a/package/mac80211/patches/530-mac80211_cur_txpower.patch
+++ b/package/mac80211/patches/530-mac80211_cur_txpower.patch
@@ -1,6 +1,6 @@
 --- a/include/net/mac80211.h
 +++ b/include/net/mac80211.h
-@@ -816,7 +816,7 @@ enum ieee80211_smps_mode {
+@@ -819,7 +819,7 @@ enum ieee80211_smps_mode {
   */
  struct ieee80211_conf {
  	u32 flags;
diff --git a/package/mac80211/patches/541-ath9k_ar9280_cold_reset.patch b/package/mac80211/patches/541-ath9k_ar9280_cold_reset.patch
deleted file mode 100644
index d6146e50a..000000000
--- a/package/mac80211/patches/541-ath9k_ar9280_cold_reset.patch
+++ /dev/null
@@ -1,23 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/hw.c
-+++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -1395,10 +1395,16 @@ static bool ath9k_hw_set_reset_reg(struc
- static bool ath9k_hw_chip_reset(struct ath_hw *ah,
- 				struct ath9k_channel *chan)
- {
--	if (AR_SREV_9280(ah) && ah->eep_ops->get_eeprom(ah, EEP_OL_PWRCTRL)) {
--		if (!ath9k_hw_set_reset_reg(ah, ATH9K_RESET_POWER_ON))
--			return false;
--	} else if (!ath9k_hw_set_reset_reg(ah, ATH9K_RESET_WARM))
-+	int reset_type = ATH9K_RESET_WARM;
-+
-+	if (AR_SREV_9280(ah)) {
-+		if (ah->eep_ops->get_eeprom(ah, EEP_OL_PWRCTRL))
-+			reset_type = ATH9K_RESET_POWER_ON;
-+		else
-+			reset_type = ATH9K_RESET_COLD;
-+	}
-+
-+	if (!ath9k_hw_set_reset_reg(ah, reset_type))
- 		return false;
- 
- 	if (!ath9k_hw_setpower(ah, ATH9K_PM_AWAKE))
diff --git a/package/mac80211/patches/545-ath9k_fix_initvals.patch b/package/mac80211/patches/545-ath9k_fix_initvals.patch
new file mode 100644
index 000000000..664fa1e89
--- /dev/null
+++ b/package/mac80211/patches/545-ath9k_fix_initvals.patch
@@ -0,0 +1,208 @@
+--- a/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h
++++ b/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h
+@@ -835,108 +835,108 @@ static const u32 ar9300_2p2_baseband_cor
+ 
+ static const u32 ar9300Modes_high_power_tx_gain_table_2p2[][5] = {
+ 	/* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
+-	{0x0000a2dc, 0x000cfff0, 0x000cfff0, 0x03aaa352, 0x03aaa352},
+-	{0x0000a2e0, 0x000f0000, 0x000f0000, 0x03ccc584, 0x03ccc584},
+-	{0x0000a2e4, 0x03f00000, 0x03f00000, 0x03f0f800, 0x03f0f800},
++	{0x0000a2dc, 0x0380c7fc, 0x0380c7fc, 0x03aaa352, 0x03aaa352},
++	{0x0000a2e0, 0x0000f800, 0x0000f800, 0x03ccc584, 0x03ccc584},
++	{0x0000a2e4, 0x03ff0000, 0x03ff0000, 0x03f0f800, 0x03f0f800},
+ 	{0x0000a2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000},
+-	{0x0000a410, 0x000050d9, 0x000050d9, 0x000050d9, 0x000050d9},
+-	{0x0000a500, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
+-	{0x0000a504, 0x06000003, 0x06000003, 0x04000002, 0x04000002},
+-	{0x0000a508, 0x0a000020, 0x0a000020, 0x08000004, 0x08000004},
+-	{0x0000a50c, 0x10000023, 0x10000023, 0x0b000200, 0x0b000200},
+-	{0x0000a510, 0x15000028, 0x15000028, 0x0f000202, 0x0f000202},
+-	{0x0000a514, 0x1b00002b, 0x1b00002b, 0x12000400, 0x12000400},
+-	{0x0000a518, 0x1f020028, 0x1f020028, 0x16000402, 0x16000402},
+-	{0x0000a51c, 0x2502002b, 0x2502002b, 0x19000404, 0x19000404},
+-	{0x0000a520, 0x2a04002a, 0x2a04002a, 0x1c000603, 0x1c000603},
+-	{0x0000a524, 0x2e06002a, 0x2e06002a, 0x21000a02, 0x21000a02},
+-	{0x0000a528, 0x3302202d, 0x3302202d, 0x25000a04, 0x25000a04},
+-	{0x0000a52c, 0x3804202c, 0x3804202c, 0x28000a20, 0x28000a20},
+-	{0x0000a530, 0x3c06202c, 0x3c06202c, 0x2c000e20, 0x2c000e20},
+-	{0x0000a534, 0x4108202d, 0x4108202d, 0x30000e22, 0x30000e22},
+-	{0x0000a538, 0x4506402d, 0x4506402d, 0x34000e24, 0x34000e24},
+-	{0x0000a53c, 0x4906222d, 0x4906222d, 0x38001640, 0x38001640},
+-	{0x0000a540, 0x4d062231, 0x4d062231, 0x3c001660, 0x3c001660},
+-	{0x0000a544, 0x50082231, 0x50082231, 0x3f001861, 0x3f001861},
+-	{0x0000a548, 0x5608422e, 0x5608422e, 0x43001a81, 0x43001a81},
+-	{0x0000a54c, 0x5a08442e, 0x5a08442e, 0x47001a83, 0x47001a83},
+-	{0x0000a550, 0x5e0a4431, 0x5e0a4431, 0x4a001c84, 0x4a001c84},
+-	{0x0000a554, 0x640a4432, 0x640a4432, 0x4e001ce3, 0x4e001ce3},
+-	{0x0000a558, 0x680a4434, 0x680a4434, 0x52001ce5, 0x52001ce5},
+-	{0x0000a55c, 0x6c0a6434, 0x6c0a6434, 0x56001ce9, 0x56001ce9},
+-	{0x0000a560, 0x6f0a6633, 0x6f0a6633, 0x5a001ceb, 0x5a001ceb},
+-	{0x0000a564, 0x730c6634, 0x730c6634, 0x5d001eec, 0x5d001eec},
+-	{0x0000a568, 0x730c6634, 0x730c6634, 0x5d001eec, 0x5d001eec},
+-	{0x0000a56c, 0x730c6634, 0x730c6634, 0x5d001eec, 0x5d001eec},
+-	{0x0000a570, 0x730c6634, 0x730c6634, 0x5d001eec, 0x5d001eec},
+-	{0x0000a574, 0x730c6634, 0x730c6634, 0x5d001eec, 0x5d001eec},
+-	{0x0000a578, 0x730c6634, 0x730c6634, 0x5d001eec, 0x5d001eec},
+-	{0x0000a57c, 0x730c6634, 0x730c6634, 0x5d001eec, 0x5d001eec},
+-	{0x0000a580, 0x00800000, 0x00800000, 0x00800000, 0x00800000},
+-	{0x0000a584, 0x06800003, 0x06800003, 0x04800002, 0x04800002},
+-	{0x0000a588, 0x0a800020, 0x0a800020, 0x08800004, 0x08800004},
+-	{0x0000a58c, 0x10800023, 0x10800023, 0x0b800200, 0x0b800200},
+-	{0x0000a590, 0x15800028, 0x15800028, 0x0f800202, 0x0f800202},
+-	{0x0000a594, 0x1b80002b, 0x1b80002b, 0x12800400, 0x12800400},
+-	{0x0000a598, 0x1f820028, 0x1f820028, 0x16800402, 0x16800402},
+-	{0x0000a59c, 0x2582002b, 0x2582002b, 0x19800404, 0x19800404},
+-	{0x0000a5a0, 0x2a84002a, 0x2a84002a, 0x1c800603, 0x1c800603},
+-	{0x0000a5a4, 0x2e86002a, 0x2e86002a, 0x21800a02, 0x21800a02},
+-	{0x0000a5a8, 0x3382202d, 0x3382202d, 0x25800a04, 0x25800a04},
+-	{0x0000a5ac, 0x3884202c, 0x3884202c, 0x28800a20, 0x28800a20},
+-	{0x0000a5b0, 0x3c86202c, 0x3c86202c, 0x2c800e20, 0x2c800e20},
+-	{0x0000a5b4, 0x4188202d, 0x4188202d, 0x30800e22, 0x30800e22},
+-	{0x0000a5b8, 0x4586402d, 0x4586402d, 0x34800e24, 0x34800e24},
+-	{0x0000a5bc, 0x4986222d, 0x4986222d, 0x38801640, 0x38801640},
+-	{0x0000a5c0, 0x4d862231, 0x4d862231, 0x3c801660, 0x3c801660},
+-	{0x0000a5c4, 0x50882231, 0x50882231, 0x3f801861, 0x3f801861},
+-	{0x0000a5c8, 0x5688422e, 0x5688422e, 0x43801a81, 0x43801a81},
+-	{0x0000a5cc, 0x5a88442e, 0x5a88442e, 0x47801a83, 0x47801a83},
+-	{0x0000a5d0, 0x5e8a4431, 0x5e8a4431, 0x4a801c84, 0x4a801c84},
+-	{0x0000a5d4, 0x648a4432, 0x648a4432, 0x4e801ce3, 0x4e801ce3},
+-	{0x0000a5d8, 0x688a4434, 0x688a4434, 0x52801ce5, 0x52801ce5},
+-	{0x0000a5dc, 0x6c8a6434, 0x6c8a6434, 0x56801ce9, 0x56801ce9},
+-	{0x0000a5e0, 0x6f8a6633, 0x6f8a6633, 0x5a801ceb, 0x5a801ceb},
+-	{0x0000a5e4, 0x738c6634, 0x738c6634, 0x5d801eec, 0x5d801eec},
+-	{0x0000a5e8, 0x738c6634, 0x738c6634, 0x5d801eec, 0x5d801eec},
+-	{0x0000a5ec, 0x738c6634, 0x738c6634, 0x5d801eec, 0x5d801eec},
+-	{0x0000a5f0, 0x738c6634, 0x738c6634, 0x5d801eec, 0x5d801eec},
+-	{0x0000a5f4, 0x738c6634, 0x738c6634, 0x5d801eec, 0x5d801eec},
+-	{0x0000a5f8, 0x738c6634, 0x738c6634, 0x5d801eec, 0x5d801eec},
+-	{0x0000a5fc, 0x738c6634, 0x738c6634, 0x5d801eec, 0x5d801eec},
++	{0x0000a410, 0x000050d8, 0x000050d8, 0x000050d9, 0x000050d9},
++	{0x0000a500, 0x00002220, 0x00002220, 0x00000000, 0x00000000},
++	{0x0000a504, 0x04002222, 0x04002222, 0x04000002, 0x04000002},
++	{0x0000a508, 0x09002421, 0x09002421, 0x08000004, 0x08000004},
++	{0x0000a50c, 0x0d002621, 0x0d002621, 0x0b000200, 0x0b000200},
++	{0x0000a510, 0x13004620, 0x13004620, 0x0f000202, 0x0f000202},
++	{0x0000a514, 0x19004a20, 0x19004a20, 0x11000400, 0x11000400},
++	{0x0000a518, 0x1d004e20, 0x1d004e20, 0x15000402, 0x15000402},
++	{0x0000a51c, 0x21005420, 0x21005420, 0x19000404, 0x19000404},
++	{0x0000a520, 0x26005e20, 0x26005e20, 0x1b000603, 0x1b000603},
++	{0x0000a524, 0x2b005e40, 0x2b005e40, 0x1f000a02, 0x1f000a02},
++	{0x0000a528, 0x2f005e42, 0x2f005e42, 0x23000a04, 0x23000a04},
++	{0x0000a52c, 0x33005e44, 0x33005e44, 0x26000a20, 0x26000a20},
++	{0x0000a530, 0x38005e65, 0x38005e65, 0x2a000e20, 0x2a000e20},
++	{0x0000a534, 0x3c005e69, 0x3c005e69, 0x2e000e22, 0x2e000e22},
++	{0x0000a538, 0x40005e6b, 0x40005e6b, 0x31000e24, 0x31000e24},
++	{0x0000a53c, 0x44005e6d, 0x44005e6d, 0x34001640, 0x34001640},
++	{0x0000a540, 0x49005e72, 0x49005e72, 0x38001660, 0x38001660},
++	{0x0000a544, 0x4e005eb2, 0x4e005eb2, 0x3b001861, 0x3b001861},
++	{0x0000a548, 0x53005f12, 0x53005f12, 0x3e001a81, 0x3e001a81},
++	{0x0000a54c, 0x59025eb2, 0x59025eb2, 0x42001a83, 0x42001a83},
++	{0x0000a550, 0x5e025f12, 0x5e025f12, 0x44001c84, 0x44001c84},
++	{0x0000a554, 0x61027f12, 0x61027f12, 0x48001ce3, 0x48001ce3},
++	{0x0000a558, 0x6702bf12, 0x6702bf12, 0x4c001ce5, 0x4c001ce5},
++	{0x0000a55c, 0x6b02bf14, 0x6b02bf14, 0x50001ce9, 0x50001ce9},
++	{0x0000a560, 0x6f02bf16, 0x6f02bf16, 0x54001ceb, 0x54001ceb},
++	{0x0000a564, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
++	{0x0000a568, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
++	{0x0000a56c, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
++	{0x0000a570, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
++	{0x0000a574, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
++	{0x0000a578, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
++	{0x0000a57c, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
++	{0x0000a580, 0x00802220, 0x00802220, 0x00800000, 0x00800000},
++	{0x0000a584, 0x04802222, 0x04802222, 0x04800002, 0x04800002},
++	{0x0000a588, 0x09802421, 0x09802421, 0x08800004, 0x08800004},
++	{0x0000a58c, 0x0d802621, 0x0d802621, 0x0b800200, 0x0b800200},
++	{0x0000a590, 0x13804620, 0x13804620, 0x0f800202, 0x0f800202},
++	{0x0000a594, 0x19804a20, 0x19804a20, 0x11800400, 0x11800400},
++	{0x0000a598, 0x1d804e20, 0x1d804e20, 0x15800402, 0x15800402},
++	{0x0000a59c, 0x21805420, 0x21805420, 0x19800404, 0x19800404},
++	{0x0000a5a0, 0x26805e20, 0x26805e20, 0x1b800603, 0x1b800603},
++	{0x0000a5a4, 0x2b805e40, 0x2b805e40, 0x1f800a02, 0x1f800a02},
++	{0x0000a5a8, 0x2f805e42, 0x2f805e42, 0x23800a04, 0x23800a04},
++	{0x0000a5ac, 0x33805e44, 0x33805e44, 0x26800a20, 0x26800a20},
++	{0x0000a5b0, 0x38805e65, 0x38805e65, 0x2a800e20, 0x2a800e20},
++	{0x0000a5b4, 0x3c805e69, 0x3c805e69, 0x2e800e22, 0x2e800e22},
++	{0x0000a5b8, 0x40805e6b, 0x40805e6b, 0x31800e24, 0x31800e24},
++	{0x0000a5bc, 0x44805e6d, 0x44805e6d, 0x34801640, 0x34801640},
++	{0x0000a5c0, 0x49805e72, 0x49805e72, 0x38801660, 0x38801660},
++	{0x0000a5c4, 0x4e805eb2, 0x4e805eb2, 0x3b801861, 0x3b801861},
++	{0x0000a5c8, 0x53805f12, 0x53805f12, 0x3e801a81, 0x3e801a81},
++	{0x0000a5cc, 0x59825eb2, 0x59825eb2, 0x42801a83, 0x42801a83},
++	{0x0000a5d0, 0x5e825f12, 0x5e825f12, 0x44801c84, 0x44801c84},
++	{0x0000a5d4, 0x61827f12, 0x61827f12, 0x48801ce3, 0x48801ce3},
++	{0x0000a5d8, 0x6782bf12, 0x6782bf12, 0x4c801ce5, 0x4c801ce5},
++	{0x0000a5dc, 0x6b82bf14, 0x6b82bf14, 0x50801ce9, 0x50801ce9},
++	{0x0000a5e0, 0x6f82bf16, 0x6f82bf16, 0x54801ceb, 0x54801ceb},
++	{0x0000a5e4, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
++	{0x0000a5e8, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
++	{0x0000a5ec, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
++	{0x0000a5f0, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
++	{0x0000a5f4, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
++	{0x0000a5f8, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
++	{0x0000a5fc, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
+ 	{0x0000a600, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
+ 	{0x0000a604, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
+-	{0x0000a608, 0x01804601, 0x01804601, 0x00000000, 0x00000000},
+-	{0x0000a60c, 0x01804601, 0x01804601, 0x00000000, 0x00000000},
+-	{0x0000a610, 0x01804601, 0x01804601, 0x00000000, 0x00000000},
+-	{0x0000a614, 0x01804601, 0x01804601, 0x01404000, 0x01404000},
+-	{0x0000a618, 0x01804601, 0x01804601, 0x01404501, 0x01404501},
+-	{0x0000a61c, 0x01804601, 0x01804601, 0x02008501, 0x02008501},
+-	{0x0000a620, 0x03408d02, 0x03408d02, 0x0280ca03, 0x0280ca03},
+-	{0x0000a624, 0x0300cc03, 0x0300cc03, 0x03010c04, 0x03010c04},
+-	{0x0000a628, 0x03410d04, 0x03410d04, 0x04014c04, 0x04014c04},
+-	{0x0000a62c, 0x03410d04, 0x03410d04, 0x04015005, 0x04015005},
+-	{0x0000a630, 0x03410d04, 0x03410d04, 0x04015005, 0x04015005},
+-	{0x0000a634, 0x03410d04, 0x03410d04, 0x04015005, 0x04015005},
+-	{0x0000a638, 0x03410d04, 0x03410d04, 0x04015005, 0x04015005},
+-	{0x0000a63c, 0x03410d04, 0x03410d04, 0x04015005, 0x04015005},
+-	{0x0000b2dc, 0x000cfff0, 0x000cfff0, 0x03aaa352, 0x03aaa352},
+-	{0x0000b2e0, 0x000f0000, 0x000f0000, 0x03ccc584, 0x03ccc584},
+-	{0x0000b2e4, 0x03f00000, 0x03f00000, 0x03f0f800, 0x03f0f800},
++	{0x0000a608, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
++	{0x0000a60c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
++	{0x0000a610, 0x00804000, 0x00804000, 0x00000000, 0x00000000},
++	{0x0000a614, 0x00804201, 0x00804201, 0x01404000, 0x01404000},
++	{0x0000a618, 0x0280c802, 0x0280c802, 0x01404501, 0x01404501},
++	{0x0000a61c, 0x0280ca03, 0x0280ca03, 0x02008501, 0x02008501},
++	{0x0000a620, 0x04c15104, 0x04c15104, 0x0280ca03, 0x0280ca03},
++	{0x0000a624, 0x04c15305, 0x04c15305, 0x03010c04, 0x03010c04},
++	{0x0000a628, 0x04c15305, 0x04c15305, 0x04014c04, 0x04014c04},
++	{0x0000a62c, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
++	{0x0000a630, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
++	{0x0000a634, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
++	{0x0000a638, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
++	{0x0000a63c, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
++	{0x0000b2dc, 0x0380c7fc, 0x0380c7fc, 0x03aaa352, 0x03aaa352},
++	{0x0000b2e0, 0x0000f800, 0x0000f800, 0x03ccc584, 0x03ccc584},
++	{0x0000b2e4, 0x03ff0000, 0x03ff0000, 0x03f0f800, 0x03f0f800},
+ 	{0x0000b2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000},
+-	{0x0000c2dc, 0x000cfff0, 0x000cfff0, 0x03aaa352, 0x03aaa352},
+-	{0x0000c2e0, 0x000f0000, 0x000f0000, 0x03ccc584, 0x03ccc584},
+-	{0x0000c2e4, 0x03f00000, 0x03f00000, 0x03f0f800, 0x03f0f800},
++	{0x0000c2dc, 0x0380c7fc, 0x0380c7fc, 0x03aaa352, 0x03aaa352},
++	{0x0000c2e0, 0x0000f800, 0x0000f800, 0x03ccc584, 0x03ccc584},
++	{0x0000c2e4, 0x03ff0000, 0x03ff0000, 0x03f0f800, 0x03f0f800},
+ 	{0x0000c2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000},
+-	{0x00016044, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4},
+-	{0x00016048, 0x61200001, 0x61200001, 0x66480001, 0x66480001},
+-	{0x00016068, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
+-	{0x00016444, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4},
+-	{0x00016448, 0x61200001, 0x61200001, 0x66480001, 0x66480001},
+-	{0x00016468, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
+-	{0x00016844, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4},
+-	{0x00016848, 0x61200001, 0x61200001, 0x66480001, 0x66480001},
+-	{0x00016868, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
++	{0x00016044, 0x056db2e6, 0x056db2e6, 0x056db2e6, 0x056db2e6},
++	{0x00016048, 0xae480001, 0xae480001, 0xae480001, 0xae480001},
++	{0x00016068, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c},
++	{0x00016444, 0x056db2e6, 0x056db2e6, 0x056db2e6, 0x056db2e6},
++	{0x00016448, 0xae480001, 0xae480001, 0xae480001, 0xae480001},
++	{0x00016468, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c},
++	{0x00016844, 0x056db2e6, 0x056db2e6, 0x056db2e6, 0x056db2e6},
++	{0x00016848, 0xae480001, 0xae480001, 0xae480001, 0xae480001},
++	{0x00016868, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c},
+ };
+ 
+ static const u32 ar9300Modes_high_ob_db_tx_gain_table_2p2[][5] = {
diff --git a/package/mac80211/patches/551-ath9k_per_chain_signal_strength.patch b/package/mac80211/patches/551-ath9k_per_chain_signal_strength.patch
index 6b4857ba1..75d2a34e5 100644
--- a/package/mac80211/patches/551-ath9k_per_chain_signal_strength.patch
+++ b/package/mac80211/patches/551-ath9k_per_chain_signal_strength.patch
@@ -1,6 +1,6 @@
 --- a/include/net/mac80211.h
 +++ b/include/net/mac80211.h
-@@ -684,6 +684,9 @@ enum mac80211_rx_flags {
+@@ -687,6 +687,9 @@ enum mac80211_rx_flags {
   * @mactime: value in microseconds of the 64-bit Time Synchronization Function
   * 	(TSF) timer when the first data symbol (MPDU) arrived at the hardware.
   * @band: the active band when this frame was received
@@ -10,7 +10,7 @@
   * @freq: frequency the radio was tuned to when receiving this frame, in MHz
   * @signal: signal strength when receiving this frame, either in dBm, in dB or
   *	unspecified depending on the hardware capabilities flags
-@@ -697,6 +700,10 @@ enum mac80211_rx_flags {
+@@ -700,6 +703,10 @@ enum mac80211_rx_flags {
  struct ieee80211_rx_status {
  	u64 mactime;
  	enum ieee80211_band band;
@@ -37,7 +37,7 @@
  
 --- a/net/mac80211/rx.c
 +++ b/net/mac80211/rx.c
-@@ -1270,6 +1270,7 @@ ieee80211_rx_h_sta_process(struct ieee80
+@@ -1271,6 +1271,7 @@ ieee80211_rx_h_sta_process(struct ieee80
  	struct sk_buff *skb = rx->skb;
  	struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
  	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
@@ -45,9 +45,9 @@
  
  	if (!sta)
  		return RX_CONTINUE;
-@@ -1312,6 +1313,19 @@ ieee80211_rx_h_sta_process(struct ieee80
- 	sta->last_signal = status->signal;
- 	ewma_add(&sta->avg_signal, -status->signal);
+@@ -1315,6 +1316,19 @@ ieee80211_rx_h_sta_process(struct ieee80
+ 		ewma_add(&sta->avg_signal, -status->signal);
+ 	}
  
 +	if (status->chains) {
 +		sta->chains = status->chains;
@@ -147,9 +147,9 @@
  
  	memset(rx_status, 0, sizeof(struct ieee80211_rx_status));
  
-@@ -1012,6 +1013,20 @@ static int ath9k_rx_skb_preprocess(struc
- 	rx_status->antenna = rx_stats->rs_antenna;
- 	rx_status->flag |= RX_FLAG_MACTIME_MPDU;
+@@ -1014,6 +1015,20 @@ static int ath9k_rx_skb_preprocess(struc
+ 	if (rx_stats->rs_moreaggr)
+ 		rx_status->flag |= RX_FLAG_NO_SIGNAL_VAL;
  
 +	for (i = 0, j = 0; i < ARRAY_SIZE(rx_stats->rs_rssi_ctl); i++) {
 +		s8 rssi;
@@ -168,7 +168,7 @@
  	return 0;
  }
  
-@@ -1542,14 +1557,14 @@ static void ath_ant_comb_scan(struct ath
+@@ -1544,14 +1559,14 @@ static void ath_ant_comb_scan(struct ath
  	struct ath_ant_comb *antcomb = &sc->ant_comb;
  	int alt_ratio = 0, alt_rssi_avg = 0, main_rssi_avg = 0, curr_alt_set;
  	int curr_main_set;
@@ -189,7 +189,7 @@
  	/* Record packet only when both main_rssi and  alt_rssi is positive */
 --- a/drivers/net/wireless/ath/ath9k/ar9003_mac.c
 +++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.c
-@@ -463,12 +463,12 @@ int ath9k_hw_process_rxdesc_edma(struct 
+@@ -459,12 +459,12 @@ int ath9k_hw_process_rxdesc_edma(struct 
  
  	/* XXX: Keycache */
  	rxs->rs_rssi = MS(rxsp->status5, AR_RxRSSICombined);
diff --git a/package/mac80211/patches/570-ath9k_fix_initvals.patch b/package/mac80211/patches/570-ath9k_fix_initvals.patch
deleted file mode 100644
index 664fa1e89..000000000
--- a/package/mac80211/patches/570-ath9k_fix_initvals.patch
+++ /dev/null
@@ -1,208 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h
-@@ -835,108 +835,108 @@ static const u32 ar9300_2p2_baseband_cor
- 
- static const u32 ar9300Modes_high_power_tx_gain_table_2p2[][5] = {
- 	/* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
--	{0x0000a2dc, 0x000cfff0, 0x000cfff0, 0x03aaa352, 0x03aaa352},
--	{0x0000a2e0, 0x000f0000, 0x000f0000, 0x03ccc584, 0x03ccc584},
--	{0x0000a2e4, 0x03f00000, 0x03f00000, 0x03f0f800, 0x03f0f800},
-+	{0x0000a2dc, 0x0380c7fc, 0x0380c7fc, 0x03aaa352, 0x03aaa352},
-+	{0x0000a2e0, 0x0000f800, 0x0000f800, 0x03ccc584, 0x03ccc584},
-+	{0x0000a2e4, 0x03ff0000, 0x03ff0000, 0x03f0f800, 0x03f0f800},
- 	{0x0000a2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000},
--	{0x0000a410, 0x000050d9, 0x000050d9, 0x000050d9, 0x000050d9},
--	{0x0000a500, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--	{0x0000a504, 0x06000003, 0x06000003, 0x04000002, 0x04000002},
--	{0x0000a508, 0x0a000020, 0x0a000020, 0x08000004, 0x08000004},
--	{0x0000a50c, 0x10000023, 0x10000023, 0x0b000200, 0x0b000200},
--	{0x0000a510, 0x15000028, 0x15000028, 0x0f000202, 0x0f000202},
--	{0x0000a514, 0x1b00002b, 0x1b00002b, 0x12000400, 0x12000400},
--	{0x0000a518, 0x1f020028, 0x1f020028, 0x16000402, 0x16000402},
--	{0x0000a51c, 0x2502002b, 0x2502002b, 0x19000404, 0x19000404},
--	{0x0000a520, 0x2a04002a, 0x2a04002a, 0x1c000603, 0x1c000603},
--	{0x0000a524, 0x2e06002a, 0x2e06002a, 0x21000a02, 0x21000a02},
--	{0x0000a528, 0x3302202d, 0x3302202d, 0x25000a04, 0x25000a04},
--	{0x0000a52c, 0x3804202c, 0x3804202c, 0x28000a20, 0x28000a20},
--	{0x0000a530, 0x3c06202c, 0x3c06202c, 0x2c000e20, 0x2c000e20},
--	{0x0000a534, 0x4108202d, 0x4108202d, 0x30000e22, 0x30000e22},
--	{0x0000a538, 0x4506402d, 0x4506402d, 0x34000e24, 0x34000e24},
--	{0x0000a53c, 0x4906222d, 0x4906222d, 0x38001640, 0x38001640},
--	{0x0000a540, 0x4d062231, 0x4d062231, 0x3c001660, 0x3c001660},
--	{0x0000a544, 0x50082231, 0x50082231, 0x3f001861, 0x3f001861},
--	{0x0000a548, 0x5608422e, 0x5608422e, 0x43001a81, 0x43001a81},
--	{0x0000a54c, 0x5a08442e, 0x5a08442e, 0x47001a83, 0x47001a83},
--	{0x0000a550, 0x5e0a4431, 0x5e0a4431, 0x4a001c84, 0x4a001c84},
--	{0x0000a554, 0x640a4432, 0x640a4432, 0x4e001ce3, 0x4e001ce3},
--	{0x0000a558, 0x680a4434, 0x680a4434, 0x52001ce5, 0x52001ce5},
--	{0x0000a55c, 0x6c0a6434, 0x6c0a6434, 0x56001ce9, 0x56001ce9},
--	{0x0000a560, 0x6f0a6633, 0x6f0a6633, 0x5a001ceb, 0x5a001ceb},
--	{0x0000a564, 0x730c6634, 0x730c6634, 0x5d001eec, 0x5d001eec},
--	{0x0000a568, 0x730c6634, 0x730c6634, 0x5d001eec, 0x5d001eec},
--	{0x0000a56c, 0x730c6634, 0x730c6634, 0x5d001eec, 0x5d001eec},
--	{0x0000a570, 0x730c6634, 0x730c6634, 0x5d001eec, 0x5d001eec},
--	{0x0000a574, 0x730c6634, 0x730c6634, 0x5d001eec, 0x5d001eec},
--	{0x0000a578, 0x730c6634, 0x730c6634, 0x5d001eec, 0x5d001eec},
--	{0x0000a57c, 0x730c6634, 0x730c6634, 0x5d001eec, 0x5d001eec},
--	{0x0000a580, 0x00800000, 0x00800000, 0x00800000, 0x00800000},
--	{0x0000a584, 0x06800003, 0x06800003, 0x04800002, 0x04800002},
--	{0x0000a588, 0x0a800020, 0x0a800020, 0x08800004, 0x08800004},
--	{0x0000a58c, 0x10800023, 0x10800023, 0x0b800200, 0x0b800200},
--	{0x0000a590, 0x15800028, 0x15800028, 0x0f800202, 0x0f800202},
--	{0x0000a594, 0x1b80002b, 0x1b80002b, 0x12800400, 0x12800400},
--	{0x0000a598, 0x1f820028, 0x1f820028, 0x16800402, 0x16800402},
--	{0x0000a59c, 0x2582002b, 0x2582002b, 0x19800404, 0x19800404},
--	{0x0000a5a0, 0x2a84002a, 0x2a84002a, 0x1c800603, 0x1c800603},
--	{0x0000a5a4, 0x2e86002a, 0x2e86002a, 0x21800a02, 0x21800a02},
--	{0x0000a5a8, 0x3382202d, 0x3382202d, 0x25800a04, 0x25800a04},
--	{0x0000a5ac, 0x3884202c, 0x3884202c, 0x28800a20, 0x28800a20},
--	{0x0000a5b0, 0x3c86202c, 0x3c86202c, 0x2c800e20, 0x2c800e20},
--	{0x0000a5b4, 0x4188202d, 0x4188202d, 0x30800e22, 0x30800e22},
--	{0x0000a5b8, 0x4586402d, 0x4586402d, 0x34800e24, 0x34800e24},
--	{0x0000a5bc, 0x4986222d, 0x4986222d, 0x38801640, 0x38801640},
--	{0x0000a5c0, 0x4d862231, 0x4d862231, 0x3c801660, 0x3c801660},
--	{0x0000a5c4, 0x50882231, 0x50882231, 0x3f801861, 0x3f801861},
--	{0x0000a5c8, 0x5688422e, 0x5688422e, 0x43801a81, 0x43801a81},
--	{0x0000a5cc, 0x5a88442e, 0x5a88442e, 0x47801a83, 0x47801a83},
--	{0x0000a5d0, 0x5e8a4431, 0x5e8a4431, 0x4a801c84, 0x4a801c84},
--	{0x0000a5d4, 0x648a4432, 0x648a4432, 0x4e801ce3, 0x4e801ce3},
--	{0x0000a5d8, 0x688a4434, 0x688a4434, 0x52801ce5, 0x52801ce5},
--	{0x0000a5dc, 0x6c8a6434, 0x6c8a6434, 0x56801ce9, 0x56801ce9},
--	{0x0000a5e0, 0x6f8a6633, 0x6f8a6633, 0x5a801ceb, 0x5a801ceb},
--	{0x0000a5e4, 0x738c6634, 0x738c6634, 0x5d801eec, 0x5d801eec},
--	{0x0000a5e8, 0x738c6634, 0x738c6634, 0x5d801eec, 0x5d801eec},
--	{0x0000a5ec, 0x738c6634, 0x738c6634, 0x5d801eec, 0x5d801eec},
--	{0x0000a5f0, 0x738c6634, 0x738c6634, 0x5d801eec, 0x5d801eec},
--	{0x0000a5f4, 0x738c6634, 0x738c6634, 0x5d801eec, 0x5d801eec},
--	{0x0000a5f8, 0x738c6634, 0x738c6634, 0x5d801eec, 0x5d801eec},
--	{0x0000a5fc, 0x738c6634, 0x738c6634, 0x5d801eec, 0x5d801eec},
-+	{0x0000a410, 0x000050d8, 0x000050d8, 0x000050d9, 0x000050d9},
-+	{0x0000a500, 0x00002220, 0x00002220, 0x00000000, 0x00000000},
-+	{0x0000a504, 0x04002222, 0x04002222, 0x04000002, 0x04000002},
-+	{0x0000a508, 0x09002421, 0x09002421, 0x08000004, 0x08000004},
-+	{0x0000a50c, 0x0d002621, 0x0d002621, 0x0b000200, 0x0b000200},
-+	{0x0000a510, 0x13004620, 0x13004620, 0x0f000202, 0x0f000202},
-+	{0x0000a514, 0x19004a20, 0x19004a20, 0x11000400, 0x11000400},
-+	{0x0000a518, 0x1d004e20, 0x1d004e20, 0x15000402, 0x15000402},
-+	{0x0000a51c, 0x21005420, 0x21005420, 0x19000404, 0x19000404},
-+	{0x0000a520, 0x26005e20, 0x26005e20, 0x1b000603, 0x1b000603},
-+	{0x0000a524, 0x2b005e40, 0x2b005e40, 0x1f000a02, 0x1f000a02},
-+	{0x0000a528, 0x2f005e42, 0x2f005e42, 0x23000a04, 0x23000a04},
-+	{0x0000a52c, 0x33005e44, 0x33005e44, 0x26000a20, 0x26000a20},
-+	{0x0000a530, 0x38005e65, 0x38005e65, 0x2a000e20, 0x2a000e20},
-+	{0x0000a534, 0x3c005e69, 0x3c005e69, 0x2e000e22, 0x2e000e22},
-+	{0x0000a538, 0x40005e6b, 0x40005e6b, 0x31000e24, 0x31000e24},
-+	{0x0000a53c, 0x44005e6d, 0x44005e6d, 0x34001640, 0x34001640},
-+	{0x0000a540, 0x49005e72, 0x49005e72, 0x38001660, 0x38001660},
-+	{0x0000a544, 0x4e005eb2, 0x4e005eb2, 0x3b001861, 0x3b001861},
-+	{0x0000a548, 0x53005f12, 0x53005f12, 0x3e001a81, 0x3e001a81},
-+	{0x0000a54c, 0x59025eb2, 0x59025eb2, 0x42001a83, 0x42001a83},
-+	{0x0000a550, 0x5e025f12, 0x5e025f12, 0x44001c84, 0x44001c84},
-+	{0x0000a554, 0x61027f12, 0x61027f12, 0x48001ce3, 0x48001ce3},
-+	{0x0000a558, 0x6702bf12, 0x6702bf12, 0x4c001ce5, 0x4c001ce5},
-+	{0x0000a55c, 0x6b02bf14, 0x6b02bf14, 0x50001ce9, 0x50001ce9},
-+	{0x0000a560, 0x6f02bf16, 0x6f02bf16, 0x54001ceb, 0x54001ceb},
-+	{0x0000a564, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
-+	{0x0000a568, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
-+	{0x0000a56c, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
-+	{0x0000a570, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
-+	{0x0000a574, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
-+	{0x0000a578, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
-+	{0x0000a57c, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
-+	{0x0000a580, 0x00802220, 0x00802220, 0x00800000, 0x00800000},
-+	{0x0000a584, 0x04802222, 0x04802222, 0x04800002, 0x04800002},
-+	{0x0000a588, 0x09802421, 0x09802421, 0x08800004, 0x08800004},
-+	{0x0000a58c, 0x0d802621, 0x0d802621, 0x0b800200, 0x0b800200},
-+	{0x0000a590, 0x13804620, 0x13804620, 0x0f800202, 0x0f800202},
-+	{0x0000a594, 0x19804a20, 0x19804a20, 0x11800400, 0x11800400},
-+	{0x0000a598, 0x1d804e20, 0x1d804e20, 0x15800402, 0x15800402},
-+	{0x0000a59c, 0x21805420, 0x21805420, 0x19800404, 0x19800404},
-+	{0x0000a5a0, 0x26805e20, 0x26805e20, 0x1b800603, 0x1b800603},
-+	{0x0000a5a4, 0x2b805e40, 0x2b805e40, 0x1f800a02, 0x1f800a02},
-+	{0x0000a5a8, 0x2f805e42, 0x2f805e42, 0x23800a04, 0x23800a04},
-+	{0x0000a5ac, 0x33805e44, 0x33805e44, 0x26800a20, 0x26800a20},
-+	{0x0000a5b0, 0x38805e65, 0x38805e65, 0x2a800e20, 0x2a800e20},
-+	{0x0000a5b4, 0x3c805e69, 0x3c805e69, 0x2e800e22, 0x2e800e22},
-+	{0x0000a5b8, 0x40805e6b, 0x40805e6b, 0x31800e24, 0x31800e24},
-+	{0x0000a5bc, 0x44805e6d, 0x44805e6d, 0x34801640, 0x34801640},
-+	{0x0000a5c0, 0x49805e72, 0x49805e72, 0x38801660, 0x38801660},
-+	{0x0000a5c4, 0x4e805eb2, 0x4e805eb2, 0x3b801861, 0x3b801861},
-+	{0x0000a5c8, 0x53805f12, 0x53805f12, 0x3e801a81, 0x3e801a81},
-+	{0x0000a5cc, 0x59825eb2, 0x59825eb2, 0x42801a83, 0x42801a83},
-+	{0x0000a5d0, 0x5e825f12, 0x5e825f12, 0x44801c84, 0x44801c84},
-+	{0x0000a5d4, 0x61827f12, 0x61827f12, 0x48801ce3, 0x48801ce3},
-+	{0x0000a5d8, 0x6782bf12, 0x6782bf12, 0x4c801ce5, 0x4c801ce5},
-+	{0x0000a5dc, 0x6b82bf14, 0x6b82bf14, 0x50801ce9, 0x50801ce9},
-+	{0x0000a5e0, 0x6f82bf16, 0x6f82bf16, 0x54801ceb, 0x54801ceb},
-+	{0x0000a5e4, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-+	{0x0000a5e8, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-+	{0x0000a5ec, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-+	{0x0000a5f0, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-+	{0x0000a5f4, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-+	{0x0000a5f8, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-+	{0x0000a5fc, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
- 	{0x0000a600, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
- 	{0x0000a604, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--	{0x0000a608, 0x01804601, 0x01804601, 0x00000000, 0x00000000},
--	{0x0000a60c, 0x01804601, 0x01804601, 0x00000000, 0x00000000},
--	{0x0000a610, 0x01804601, 0x01804601, 0x00000000, 0x00000000},
--	{0x0000a614, 0x01804601, 0x01804601, 0x01404000, 0x01404000},
--	{0x0000a618, 0x01804601, 0x01804601, 0x01404501, 0x01404501},
--	{0x0000a61c, 0x01804601, 0x01804601, 0x02008501, 0x02008501},
--	{0x0000a620, 0x03408d02, 0x03408d02, 0x0280ca03, 0x0280ca03},
--	{0x0000a624, 0x0300cc03, 0x0300cc03, 0x03010c04, 0x03010c04},
--	{0x0000a628, 0x03410d04, 0x03410d04, 0x04014c04, 0x04014c04},
--	{0x0000a62c, 0x03410d04, 0x03410d04, 0x04015005, 0x04015005},
--	{0x0000a630, 0x03410d04, 0x03410d04, 0x04015005, 0x04015005},
--	{0x0000a634, 0x03410d04, 0x03410d04, 0x04015005, 0x04015005},
--	{0x0000a638, 0x03410d04, 0x03410d04, 0x04015005, 0x04015005},
--	{0x0000a63c, 0x03410d04, 0x03410d04, 0x04015005, 0x04015005},
--	{0x0000b2dc, 0x000cfff0, 0x000cfff0, 0x03aaa352, 0x03aaa352},
--	{0x0000b2e0, 0x000f0000, 0x000f0000, 0x03ccc584, 0x03ccc584},
--	{0x0000b2e4, 0x03f00000, 0x03f00000, 0x03f0f800, 0x03f0f800},
-+	{0x0000a608, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+	{0x0000a60c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+	{0x0000a610, 0x00804000, 0x00804000, 0x00000000, 0x00000000},
-+	{0x0000a614, 0x00804201, 0x00804201, 0x01404000, 0x01404000},
-+	{0x0000a618, 0x0280c802, 0x0280c802, 0x01404501, 0x01404501},
-+	{0x0000a61c, 0x0280ca03, 0x0280ca03, 0x02008501, 0x02008501},
-+	{0x0000a620, 0x04c15104, 0x04c15104, 0x0280ca03, 0x0280ca03},
-+	{0x0000a624, 0x04c15305, 0x04c15305, 0x03010c04, 0x03010c04},
-+	{0x0000a628, 0x04c15305, 0x04c15305, 0x04014c04, 0x04014c04},
-+	{0x0000a62c, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
-+	{0x0000a630, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
-+	{0x0000a634, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
-+	{0x0000a638, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
-+	{0x0000a63c, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
-+	{0x0000b2dc, 0x0380c7fc, 0x0380c7fc, 0x03aaa352, 0x03aaa352},
-+	{0x0000b2e0, 0x0000f800, 0x0000f800, 0x03ccc584, 0x03ccc584},
-+	{0x0000b2e4, 0x03ff0000, 0x03ff0000, 0x03f0f800, 0x03f0f800},
- 	{0x0000b2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000},
--	{0x0000c2dc, 0x000cfff0, 0x000cfff0, 0x03aaa352, 0x03aaa352},
--	{0x0000c2e0, 0x000f0000, 0x000f0000, 0x03ccc584, 0x03ccc584},
--	{0x0000c2e4, 0x03f00000, 0x03f00000, 0x03f0f800, 0x03f0f800},
-+	{0x0000c2dc, 0x0380c7fc, 0x0380c7fc, 0x03aaa352, 0x03aaa352},
-+	{0x0000c2e0, 0x0000f800, 0x0000f800, 0x03ccc584, 0x03ccc584},
-+	{0x0000c2e4, 0x03ff0000, 0x03ff0000, 0x03f0f800, 0x03f0f800},
- 	{0x0000c2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000},
--	{0x00016044, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4},
--	{0x00016048, 0x61200001, 0x61200001, 0x66480001, 0x66480001},
--	{0x00016068, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
--	{0x00016444, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4},
--	{0x00016448, 0x61200001, 0x61200001, 0x66480001, 0x66480001},
--	{0x00016468, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
--	{0x00016844, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4},
--	{0x00016848, 0x61200001, 0x61200001, 0x66480001, 0x66480001},
--	{0x00016868, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
-+	{0x00016044, 0x056db2e6, 0x056db2e6, 0x056db2e6, 0x056db2e6},
-+	{0x00016048, 0xae480001, 0xae480001, 0xae480001, 0xae480001},
-+	{0x00016068, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c},
-+	{0x00016444, 0x056db2e6, 0x056db2e6, 0x056db2e6, 0x056db2e6},
-+	{0x00016448, 0xae480001, 0xae480001, 0xae480001, 0xae480001},
-+	{0x00016468, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c},
-+	{0x00016844, 0x056db2e6, 0x056db2e6, 0x056db2e6, 0x056db2e6},
-+	{0x00016848, 0xae480001, 0xae480001, 0xae480001, 0xae480001},
-+	{0x00016868, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c},
- };
- 
- static const u32 ar9300Modes_high_ob_db_tx_gain_table_2p2[][5] = {
diff --git a/package/mac80211/patches/571-ath9k_beacon_fix.patch b/package/mac80211/patches/571-ath9k_beacon_fix.patch
deleted file mode 100644
index 96b80600f..000000000
--- a/package/mac80211/patches/571-ath9k_beacon_fix.patch
+++ /dev/null
@@ -1,113 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/ar9003_mac.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.c
-@@ -326,7 +326,6 @@ static bool ar9003_hw_get_isr(struct ath
- static int ar9003_hw_proc_txdesc(struct ath_hw *ah, void *ds,
- 				 struct ath_tx_status *ts)
- {
--	struct ar9003_txc *txc = (struct ar9003_txc *) ds;
- 	struct ar9003_txs *ads;
- 	u32 status;
- 
-@@ -336,11 +335,7 @@ static int ar9003_hw_proc_txdesc(struct 
- 	if ((status & AR_TxDone) == 0)
- 		return -EINPROGRESS;
- 
--	ts->qid = MS(ads->ds_info, AR_TxQcuNum);
--	if (!txc || (MS(txc->info, AR_TxQcuNum) == ts->qid))
--		ah->ts_tail = (ah->ts_tail + 1) % ah->ts_size;
--	else
--		return -ENOENT;
-+	ah->ts_tail = (ah->ts_tail + 1) % ah->ts_size;
- 
- 	if ((MS(ads->ds_info, AR_DescId) != ATHEROS_VENDOR_ID) ||
- 	    (MS(ads->ds_info, AR_TxRxDesc) != 1)) {
-@@ -354,6 +349,7 @@ static int ar9003_hw_proc_txdesc(struct 
- 	ts->ts_seqnum = MS(status, AR_SeqNum);
- 	ts->tid = MS(status, AR_TxTid);
- 
-+	ts->qid = MS(ads->ds_info, AR_TxQcuNum);
- 	ts->desc_id = MS(ads->status1, AR_TxDescId);
- 	ts->ts_tstamp = ads->status4;
- 	ts->ts_status = 0;
---- a/drivers/net/wireless/ath/ath9k/beacon.c
-+++ b/drivers/net/wireless/ath/ath9k/beacon.c
-@@ -91,7 +91,7 @@ static void ath_beacon_setup(struct ath_
- 	info.txpower = MAX_RATE_POWER;
- 	info.keyix = ATH9K_TXKEYIX_INVALID;
- 	info.keytype = ATH9K_KEY_TYPE_CLEAR;
--	info.flags = ATH9K_TXDESC_NOACK;
-+	info.flags = ATH9K_TXDESC_NOACK | ATH9K_TXDESC_INTREQ;
- 
- 	info.buf_addr[0] = bf->bf_buf_addr;
- 	info.buf_len[0] = roundup(skb->len, 4);
-@@ -355,7 +355,6 @@ void ath_beacon_tasklet(unsigned long da
- 	struct ath_common *common = ath9k_hw_common(ah);
- 	struct ath_buf *bf = NULL;
- 	struct ieee80211_vif *vif;
--	struct ath_tx_status ts;
- 	bool edma = !!(ah->caps.hw_caps & ATH9K_HW_CAP_EDMA);
- 	int slot;
- 	u32 bfaddr, bc = 0;
-@@ -462,11 +461,6 @@ void ath_beacon_tasklet(unsigned long da
- 			ath9k_hw_txstart(ah, sc->beacon.beaconq);
- 
- 		sc->beacon.ast_be_xmit += bc;     /* XXX per-vif? */
--		if (edma) {
--			spin_lock_bh(&sc->sc_pcu_lock);
--			ath9k_hw_txprocdesc(ah, bf->bf_desc, (void *)&ts);
--			spin_unlock_bh(&sc->sc_pcu_lock);
--		}
- 	}
- }
- 
---- a/drivers/net/wireless/ath/ath9k/mac.c
-+++ b/drivers/net/wireless/ath/ath9k/mac.c
-@@ -745,7 +745,11 @@ int ath9k_hw_beaconq_setup(struct ath_hw
- 	qi.tqi_aifs = 1;
- 	qi.tqi_cwmin = 0;
- 	qi.tqi_cwmax = 0;
--	/* NB: don't enable any interrupts */
-+
-+	if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
-+		qi.tqi_qflags = TXQ_FLAG_TXOKINT_ENABLE |
-+				TXQ_FLAG_TXERRINT_ENABLE;
-+
- 	return ath9k_hw_setuptxqueue(ah, ATH9K_TX_QUEUE_BEACON, &qi);
- }
- EXPORT_SYMBOL(ath9k_hw_beaconq_setup);
---- a/drivers/net/wireless/ath/ath9k/main.c
-+++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -2303,6 +2303,7 @@ static int ath9k_tx_last_beacon(struct i
- 	struct ath_vif *avp;
- 	struct ath_buf *bf;
- 	struct ath_tx_status ts;
-+	bool edma = !!(ah->caps.hw_caps & ATH9K_HW_CAP_EDMA);
- 	int status;
- 
- 	vif = sc->beacon.bslot[0];
-@@ -2313,7 +2314,7 @@ static int ath9k_tx_last_beacon(struct i
- 	if (!avp->is_bslot_active)
- 		return 0;
- 
--	if (!sc->beacon.tx_processed) {
-+	if (!sc->beacon.tx_processed && !edma) {
- 		tasklet_disable(&sc->bcon_tasklet);
- 
- 		bf = avp->av_bcbuf;
---- a/drivers/net/wireless/ath/ath9k/xmit.c
-+++ b/drivers/net/wireless/ath/ath9k/xmit.c
-@@ -2317,9 +2317,12 @@ void ath_tx_edma_tasklet(struct ath_soft
- 			break;
- 		}
- 
--		/* Skip beacon completions */
--		if (ts.qid == sc->beacon.beaconq)
-+		/* Process beacon completions separately */
-+		if (ts.qid == sc->beacon.beaconq) {
-+			sc->beacon.tx_processed = true;
-+			sc->beacon.tx_last = !(ts.ts_status & ATH9K_TXERR_MASK);
- 			continue;
-+		}
- 
- 		txq = &sc->tx.txq[ts.qid];
- 
diff --git a/package/mac80211/patches/580-mac80211_ignore_bad_signal_values.patch b/package/mac80211/patches/580-mac80211_ignore_bad_signal_values.patch
deleted file mode 100644
index cfc151629..000000000
--- a/package/mac80211/patches/580-mac80211_ignore_bad_signal_values.patch
+++ /dev/null
@@ -1,44 +0,0 @@
---- a/include/net/mac80211.h
-+++ b/include/net/mac80211.h
-@@ -659,6 +659,8 @@ ieee80211_tx_info_clear_status(struct ie
-  * @RX_FLAG_HT: HT MCS was used and rate_idx is MCS index
-  * @RX_FLAG_40MHZ: HT40 (40 MHz) was used
-  * @RX_FLAG_SHORT_GI: Short guard interval was used
-+ * @RX_FLAG_NO_SIGNAL_VAL: The signal strength value is not present.
-+ *	Valid only for data frames (mainly A-MPDU)
-  */
- enum mac80211_rx_flags {
- 	RX_FLAG_MMIC_ERROR	= 1<<0,
-@@ -672,6 +674,7 @@ enum mac80211_rx_flags {
- 	RX_FLAG_HT		= 1<<9,
- 	RX_FLAG_40MHZ		= 1<<10,
- 	RX_FLAG_SHORT_GI	= 1<<11,
-+	RX_FLAG_NO_SIGNAL_VAL	= 1<<12,
- };
- 
- /**
---- a/net/mac80211/rx.c
-+++ b/net/mac80211/rx.c
-@@ -177,7 +177,8 @@ ieee80211_add_rx_radiotap_header(struct 
- 	pos += 2;
- 
- 	/* IEEE80211_RADIOTAP_DBM_ANTSIGNAL */
--	if (local->hw.flags & IEEE80211_HW_SIGNAL_DBM) {
-+	if (local->hw.flags & IEEE80211_HW_SIGNAL_DBM &&
-+	    !(status->flag & RX_FLAG_NO_SIGNAL_VAL)) {
- 		*pos = status->signal;
- 		rthdr->it_present |=
- 			cpu_to_le32(1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL);
-@@ -1310,8 +1311,10 @@ ieee80211_rx_h_sta_process(struct ieee80
- 
- 	sta->rx_fragments++;
- 	sta->rx_bytes += rx->skb->len;
--	sta->last_signal = status->signal;
--	ewma_add(&sta->avg_signal, -status->signal);
-+	if (!(status->flag & RX_FLAG_NO_SIGNAL_VAL)) {
-+		sta->last_signal = status->signal;
-+		ewma_add(&sta->avg_signal, -status->signal);
-+	}
- 
- 	if (status->chains) {
- 		sta->chains = status->chains;
diff --git a/package/mac80211/patches/581-ath9k_report_missing_signal.patch b/package/mac80211/patches/581-ath9k_report_missing_signal.patch
deleted file mode 100644
index 7bf12ebd6..000000000
--- a/package/mac80211/patches/581-ath9k_report_missing_signal.patch
+++ /dev/null
@@ -1,37 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/recv.c
-+++ b/drivers/net/wireless/ath/ath9k/recv.c
-@@ -954,6 +954,7 @@ static void ath9k_process_rssi(struct at
- 	struct ath_softc *sc = hw->priv;
- 	struct ath_hw *ah = common->ah;
- 	int last_rssi;
-+	int rssi = rx_stats->rs_rssi;
- 
- 	if (!rx_stats->is_mybeacon ||
- 	    ((ah->opmode != NL80211_IFTYPE_STATION) &&
-@@ -965,13 +966,12 @@ static void ath9k_process_rssi(struct at
- 
- 	last_rssi = sc->last_rssi;
- 	if (likely(last_rssi != ATH_RSSI_DUMMY_MARKER))
--		rx_stats->rs_rssi = ATH_EP_RND(last_rssi,
--					      ATH_RSSI_EP_MULTIPLIER);
--	if (rx_stats->rs_rssi < 0)
--		rx_stats->rs_rssi = 0;
-+		rssi = ATH_EP_RND(last_rssi, ATH_RSSI_EP_MULTIPLIER);
-+	if (rssi < 0)
-+		rssi = 0;
- 
- 	/* Update Beacon RSSI, this is used by ANI. */
--	ah->stats.avgbrssi = rx_stats->rs_rssi;
-+	ah->stats.avgbrssi = rssi;
- }
- 
- /*
-@@ -1012,6 +1012,8 @@ static int ath9k_rx_skb_preprocess(struc
- 	rx_status->signal = ah->noise + rx_stats->rs_rssi;
- 	rx_status->antenna = rx_stats->rs_antenna;
- 	rx_status->flag |= RX_FLAG_MACTIME_MPDU;
-+	if (rx_stats->rs_moreaggr)
-+		rx_status->flag |= RX_FLAG_NO_SIGNAL_VAL;
- 
- 	for (i = 0, j = 0; i < ARRAY_SIZE(rx_stats->rs_rssi_ctl); i++) {
- 		s8 rssi;
-- 
cgit v1.2.3