diff options
Diffstat (limited to 'package')
9 files changed, 638 insertions, 66 deletions
| diff --git a/package/mac80211/patches/300-pending_work.patch b/package/mac80211/patches/300-pending_work.patch index 06041b36f..4d3edc858 100644 --- a/package/mac80211/patches/300-pending_work.patch +++ b/package/mac80211/patches/300-pending_work.patch @@ -253,7 +253,19 @@   u32 ath_calcrxfilter(struct ath_softc *sc);   int ath_rx_init(struct ath_softc *sc, int nbufs);   void ath_rx_cleanup(struct ath_softc *sc); -@@ -641,7 +639,6 @@ void ath_ant_comb_update(struct ath_soft +@@ -334,9 +332,8 @@ void ath_txq_lock(struct ath_softc *sc,  + void ath_txq_unlock(struct ath_softc *sc, struct ath_txq *txq); + void ath_txq_unlock_complete(struct ath_softc *sc, struct ath_txq *txq); + void ath_tx_cleanupq(struct ath_softc *sc, struct ath_txq *txq); +-bool ath_drain_all_txq(struct ath_softc *sc, bool retry_tx); +-void ath_draintxq(struct ath_softc *sc, +-		     struct ath_txq *txq, bool retry_tx); ++bool ath_drain_all_txq(struct ath_softc *sc); ++void ath_draintxq(struct ath_softc *sc, struct ath_txq *txq); + void ath_tx_node_init(struct ath_softc *sc, struct ath_node *an); + void ath_tx_node_cleanup(struct ath_softc *sc, struct ath_node *an); + void ath_txq_schedule(struct ath_softc *sc, struct ath_txq *txq); +@@ -641,7 +638,6 @@ void ath_ant_comb_update(struct ath_soft   enum sc_op_flags {   	SC_OP_INVALID,   	SC_OP_BEACONS, @@ -271,6 +283,15 @@   	}   	skb = ieee80211_beacon_get(hw, vif); +@@ -198,7 +199,7 @@ static struct ath_buf *ath9k_beacon_gene + 		if (sc->nvifs > 1) { + 			ath_dbg(common, BEACON, + 				"Flushing previous cabq traffic\n"); +-			ath_draintxq(sc, cabq, false); ++			ath_draintxq(sc, cabq); + 		} + 	} +   @@ -359,7 +360,6 @@ void ath9k_beacon_tasklet(unsigned long    		return; @@ -314,12 +335,20 @@   }  -static bool ath_prepare_reset(struct ath_softc *sc, bool retry_tx, bool flush) -+static bool ath_prepare_reset(struct ath_softc *sc, bool retry_tx) ++static bool ath_prepare_reset(struct ath_softc *sc)   {   	struct ath_hw *ah = sc->sc_ah;   	bool ret = true; -@@ -202,14 +202,6 @@ static bool ath_prepare_reset(struct ath - 	if (!ath_drain_all_txq(sc, retry_tx)) +@@ -196,20 +196,12 @@ static bool ath_prepare_reset(struct ath + 	ath9k_debug_samp_bb_mac(sc); + 	ath9k_hw_disable_interrupts(ah); +  +-	if (!ath_stoprecv(sc)) ++	if (!ath_drain_all_txq(sc)) + 		ret = false; +  +-	if (!ath_drain_all_txq(sc, retry_tx)) ++	if (!ath_stoprecv(sc))   		ret = false;  -	if (!flush) { @@ -333,7 +362,15 @@   	return ret;   } -@@ -262,11 +254,11 @@ static int ath_reset_internal(struct ath +@@ -255,18 +247,17 @@ static bool ath_complete_reset(struct at + 	return true; + } +  +-static int ath_reset_internal(struct ath_softc *sc, struct ath9k_channel *hchan, +-			      bool retry_tx) ++static int ath_reset_internal(struct ath_softc *sc, struct ath9k_channel *hchan) + { + 	struct ath_hw *ah = sc->sc_ah;   	struct ath_common *common = ath9k_hw_common(ah);   	struct ath9k_hw_cal_data *caldata = NULL;   	bool fastcc = true; @@ -346,7 +383,7 @@   	spin_lock_bh(&sc->sc_pcu_lock);   	if (!(sc->hw->conf.flags & IEEE80211_CONF_OFFCHANNEL)) { -@@ -276,11 +268,10 @@ static int ath_reset_internal(struct ath +@@ -276,11 +267,10 @@ static int ath_reset_internal(struct ath   	if (!hchan) {   		fastcc = false; @@ -355,11 +392,11 @@   	}  -	if (!ath_prepare_reset(sc, retry_tx, flush)) -+	if (!ath_prepare_reset(sc, retry_tx)) ++	if (!ath_prepare_reset(sc))   		fastcc = false;   	ath_dbg(common, CONFIG, "Reset to %u MHz, HT40: %d fastcc: %d\n", -@@ -302,6 +293,8 @@ static int ath_reset_internal(struct ath +@@ -302,6 +292,8 @@ static int ath_reset_internal(struct ath   out:   	spin_unlock_bh(&sc->sc_pcu_lock); @@ -368,15 +405,81 @@   	return r;   } -@@ -804,7 +797,7 @@ static void ath9k_stop(struct ieee80211_ +@@ -319,7 +311,7 @@ static int ath_set_channel(struct ath_so + 	if (test_bit(SC_OP_INVALID, &sc->sc_flags)) + 		return -EIO; +  +-	r = ath_reset_internal(sc, hchan, false); ++	r = ath_reset_internal(sc, hchan); +  + 	return r; + } +@@ -549,23 +541,21 @@ chip_reset: + #undef SCHED_INTR + } +  +-static int ath_reset(struct ath_softc *sc, bool retry_tx) ++static int ath_reset(struct ath_softc *sc) + { +-	int r; ++	int i, r; +  + 	ath9k_ps_wakeup(sc); +  +-	r = ath_reset_internal(sc, NULL, retry_tx); ++	r = ath_reset_internal(sc, NULL); +  +-	if (retry_tx) { +-		int i; +-		for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) { +-			if (ATH_TXQ_SETUP(sc, i)) { +-				spin_lock_bh(&sc->tx.txq[i].axq_lock); +-				ath_txq_schedule(sc, &sc->tx.txq[i]); +-				spin_unlock_bh(&sc->tx.txq[i].axq_lock); +-			} +-		} ++	for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) { ++		if (!ATH_TXQ_SETUP(sc, i)) ++			continue; ++ ++		spin_lock_bh(&sc->tx.txq[i].axq_lock); ++		ath_txq_schedule(sc, &sc->tx.txq[i]); ++		spin_unlock_bh(&sc->tx.txq[i].axq_lock); + 	} +  + 	ath9k_ps_restore(sc); +@@ -586,7 +576,7 @@ void ath_reset_work(struct work_struct * + { + 	struct ath_softc *sc = container_of(work, struct ath_softc, hw_reset_work); +  +-	ath_reset(sc, true); ++	ath_reset(sc); + } +  + /**********************/ +@@ -804,7 +794,7 @@ static void ath9k_stop(struct ieee80211_   		ath9k_hw_cfg_gpio_input(ah, ah->led_pin);   	}  -	ath_prepare_reset(sc, false, true); -+	ath_prepare_reset(sc, false); ++	ath_prepare_reset(sc);   	if (sc->rx.frag) {   		dev_kfree_skb_any(sc->rx.frag); +@@ -1731,11 +1721,11 @@ static void ath9k_flush(struct ieee80211 + 	if (drop) { + 		ath9k_ps_wakeup(sc); + 		spin_lock_bh(&sc->sc_pcu_lock); +-		drain_txq = ath_drain_all_txq(sc, false); ++		drain_txq = ath_drain_all_txq(sc); + 		spin_unlock_bh(&sc->sc_pcu_lock); +  + 		if (!drain_txq) +-			ath_reset(sc, false); ++			ath_reset(sc); +  + 		ath9k_ps_restore(sc); + 		ieee80211_wake_queues(hw);  --- a/drivers/net/wireless/ath/ath9k/recv.c  +++ b/drivers/net/wireless/ath/ath9k/recv.c  @@ -248,8 +248,6 @@ rx_init_fail: @@ -1784,17 +1887,92 @@   	default:  --- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c  +++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c -@@ -485,9 +485,7 @@ static int ar5008_hw_rf_alloc_ext_banks( - 	ATH_ALLOC_BANK(ah->analogBank2Data, ah->iniBank2.ia_rows); - 	ATH_ALLOC_BANK(ah->analogBank3Data, ah->iniBank3.ia_rows); - 	ATH_ALLOC_BANK(ah->analogBank6Data, ah->iniBank6.ia_rows); +@@ -18,6 +18,7 @@ + #include "hw-ops.h" + #include "../regd.h" + #include "ar9002_phy.h" ++#include "ar5008_initvals.h" +  + /* All code below is for AR5008, AR9001, AR9002 */ +  +@@ -43,23 +44,16 @@ static const int m2ThreshLowExt_off = 12 + static const int m1ThreshExt_off = 127; + static const int m2ThreshExt_off = 127; +  ++static const struct ar5416IniArray bank0 = STATIC_INI_ARRAY(ar5416Bank0); ++static const struct ar5416IniArray bank1 = STATIC_INI_ARRAY(ar5416Bank1); ++static const struct ar5416IniArray bank2 = STATIC_INI_ARRAY(ar5416Bank2); ++static const struct ar5416IniArray bank3 = STATIC_INI_ARRAY(ar5416Bank3); ++static const struct ar5416IniArray bank7 = STATIC_INI_ARRAY(ar5416Bank7); +  +-static void ar5008_rf_bank_setup(u32 *bank, struct ar5416IniArray *array, +-				 int col) +-{ +-	int i; +- +-	for (i = 0; i < array->ia_rows; i++) +-		bank[i] = INI_RA(array, i, col); +-} +- +- +-#define REG_WRITE_RF_ARRAY(iniarray, regData, regWr) \ +-	ar5008_write_rf_array(ah, iniarray, regData, &(regWr)) +- +-static void ar5008_write_rf_array(struct ath_hw *ah, struct ar5416IniArray *array, +-				  u32 *data, unsigned int *writecnt) ++static void ar5008_write_bank6(struct ath_hw *ah, unsigned int *writecnt) + { ++	struct ar5416IniArray *array = &ah->iniBank6; ++	u32 *data = ah->analogBank6Data; + 	int r; +  + 	ENABLE_REGWRITE_BUFFER(ah); +@@ -165,7 +159,7 @@ static void ar5008_hw_force_bias(struct  + 	ar5008_hw_phy_modify_rx_buffer(ah->analogBank6Data, tmp_reg, 3, 181, 3); +  + 	/* write Bank 6 with new params */ +-	REG_WRITE_RF_ARRAY(&ah->iniBank6, ah->analogBank6Data, reg_writes); ++	ar5008_write_bank6(ah, ®_writes); + } +  + /** +@@ -469,31 +463,16 @@ static void ar5008_hw_spur_mitigate(stru +  */ + static int ar5008_hw_rf_alloc_ext_banks(struct ath_hw *ah) + { +-#define ATH_ALLOC_BANK(bank, size) do { \ +-		bank = devm_kzalloc(ah->dev, sizeof(u32) * size, GFP_KERNEL); \ +-		if (!bank) \ +-			goto error; \ +-	} while (0); +- +-	struct ath_common *common = ath9k_hw_common(ah); ++	int size = ah->iniBank6.ia_rows * sizeof(u32); +  + 	if (AR_SREV_9280_20_OR_LATER(ah)) + 	    return 0; +  +-	ATH_ALLOC_BANK(ah->analogBank0Data, ah->iniBank0.ia_rows); +-	ATH_ALLOC_BANK(ah->analogBank1Data, ah->iniBank1.ia_rows); +-	ATH_ALLOC_BANK(ah->analogBank2Data, ah->iniBank2.ia_rows); +-	ATH_ALLOC_BANK(ah->analogBank3Data, ah->iniBank3.ia_rows); +-	ATH_ALLOC_BANK(ah->analogBank6Data, ah->iniBank6.ia_rows);  -	ATH_ALLOC_BANK(ah->analogBank6TPCData, ah->iniBank6TPC.ia_rows); - 	ATH_ALLOC_BANK(ah->analogBank7Data, ah->iniBank7.ia_rows); +-	ATH_ALLOC_BANK(ah->analogBank7Data, ah->iniBank7.ia_rows);  -	ATH_ALLOC_BANK(ah->bank6Temp, ah->iniBank6.ia_rows); ++	ah->analogBank6Data = devm_kzalloc(ah->dev, size, GFP_KERNEL); ++	if (!ah->analogBank6Data) ++		return -ENOMEM;   	return 0; - #undef ATH_ALLOC_BANK -@@ -517,6 +515,7 @@ static bool ar5008_hw_set_rf_regs(struct +-#undef ATH_ALLOC_BANK +-error: +-	ath_err(common, "Cannot allocate RF banks\n"); +-	return -ENOMEM; + } +  +  +@@ -517,6 +496,7 @@ static bool ar5008_hw_set_rf_regs(struct   	u32 ob5GHz = 0, db5GHz = 0;   	u32 ob2GHz = 0, db2GHz = 0;   	int regWrites = 0; @@ -1802,10 +1980,22 @@   	/*   	 * Software does not need to program bank data -@@ -541,13 +540,9 @@ static bool ar5008_hw_set_rf_regs(struct - 	/* Setup Bank 6 Write */ - 	ar5008_rf_bank_setup(ah->analogBank3Data, &ah->iniBank3, - 		      modesIndex); +@@ -529,25 +509,8 @@ static bool ar5008_hw_set_rf_regs(struct + 	/* Setup rf parameters */ + 	eepMinorRev = ah->eep_ops->get_eeprom(ah, EEP_MINOR_REV); +  +-	/* Setup Bank 0 Write */ +-	ar5008_rf_bank_setup(ah->analogBank0Data, &ah->iniBank0, 1); +- +-	/* Setup Bank 1 Write */ +-	ar5008_rf_bank_setup(ah->analogBank1Data, &ah->iniBank1, 1); +- +-	/* Setup Bank 2 Write */ +-	ar5008_rf_bank_setup(ah->analogBank2Data, &ah->iniBank2, 1); +- +-	/* Setup Bank 6 Write */ +-	ar5008_rf_bank_setup(ah->analogBank3Data, &ah->iniBank3, +-		      modesIndex);  -	{  -		int i;  -		for (i = 0; i < ah->iniBank6TPC.ia_rows; i++) { @@ -1813,15 +2003,18 @@  -			    INI_RA(&ah->iniBank6TPC, i, modesIndex);  -		}  -	} -+  +	for (i = 0; i < ah->iniBank6.ia_rows; i++)  +		ah->analogBank6Data[i] = INI_RA(&ah->iniBank6, i, modesIndex);   	/* Only the 5 or 2 GHz OB/DB need to be set for a mode */   	if (eepMinorRev >= 2) { -@@ -572,18 +567,12 @@ static bool ar5008_hw_set_rf_regs(struct - 	ar5008_rf_bank_setup(ah->analogBank7Data, &ah->iniBank7, 1); +@@ -568,22 +531,13 @@ static bool ar5008_hw_set_rf_regs(struct + 		} + 	} +-	/* Setup Bank 7 Setup */ +-	ar5008_rf_bank_setup(ah->analogBank7Data, &ah->iniBank7, 1); +-   	/* Write Analog registers */  -	REG_WRITE_RF_ARRAY(&ah->iniBank0, ah->analogBank0Data,  -			   regWrites); @@ -1835,12 +2028,12 @@  -			   regWrites);  -	REG_WRITE_RF_ARRAY(&ah->iniBank7, ah->analogBank7Data,  -			   regWrites); -+	REG_WRITE_RF_ARRAY(&ah->iniBank0, ah->analogBank0Data, regWrites); -+	REG_WRITE_RF_ARRAY(&ah->iniBank1, ah->analogBank1Data, regWrites); -+	REG_WRITE_RF_ARRAY(&ah->iniBank2, ah->analogBank2Data, regWrites); -+	REG_WRITE_RF_ARRAY(&ah->iniBank3, ah->analogBank3Data, regWrites); -+	REG_WRITE_RF_ARRAY(&ah->iniBank6, ah->analogBank6Data, regWrites); -+	REG_WRITE_RF_ARRAY(&ah->iniBank7, ah->analogBank7Data, regWrites); ++	REG_WRITE_ARRAY(&bank0, 1, regWrites); ++	REG_WRITE_ARRAY(&bank1, 1, regWrites); ++	REG_WRITE_ARRAY(&bank2, 1, regWrites); ++	REG_WRITE_ARRAY(&bank3, modesIndex, regWrites); ++	ar5008_write_bank6(ah, ®Writes); ++	REG_WRITE_ARRAY(&bank7, 1, regWrites);   	return true;   } @@ -1875,10 +2068,16 @@   		INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac);   	} -@@ -86,14 +84,11 @@ static void ar9002_hw_init_mode_regs(str - 		INIT_INI_ARRAY(&ah->iniBank3, ar5416Bank3); - 		INIT_INI_ARRAY(&ah->iniBank7, ar5416Bank7); +@@ -80,20 +78,11 @@ static void ar9002_hw_init_mode_regs(str + 		/* Common for AR5416, AR913x, AR9160 */ + 		INIT_INI_ARRAY(&ah->iniBB_RfGain, ar5416BB_RfGain); +-		INIT_INI_ARRAY(&ah->iniBank0, ar5416Bank0); +-		INIT_INI_ARRAY(&ah->iniBank1, ar5416Bank1); +-		INIT_INI_ARRAY(&ah->iniBank2, ar5416Bank2); +-		INIT_INI_ARRAY(&ah->iniBank3, ar5416Bank3); +-		INIT_INI_ARRAY(&ah->iniBank7, ar5416Bank7); +-  -		/* Common for AR5416, AR9160 */  -		if (!AR_SREV_9100(ah))  -			INIT_INI_ARRAY(&ah->iniBank6, ar5416Bank6); @@ -1893,7 +2092,7 @@   	}   	/* iniAddac needs to be modified for these chips */ -@@ -104,7 +99,7 @@ static void ar9002_hw_init_mode_regs(str +@@ -104,7 +93,7 @@ static void ar9002_hw_init_mode_regs(str   		data = devm_kzalloc(ah->dev, size, GFP_KERNEL);   		if (!data) @@ -1902,7 +2101,7 @@   		memcpy(data, addac->ia_array, size);   		addac->ia_array = data; -@@ -120,6 +115,7 @@ static void ar9002_hw_init_mode_regs(str +@@ -120,6 +109,7 @@ static void ar9002_hw_init_mode_regs(str   		INIT_INI_ARRAY(&ah->iniCckfirJapan2484,   		       ar9287Common_japan_2484_cck_fir_coeff_9287_1_1);   	} @@ -1910,7 +2109,7 @@   }   static void ar9280_20_hw_init_rxgain_ini(struct ath_hw *ah) -@@ -415,7 +411,10 @@ int ar9002_hw_attach_ops(struct ath_hw * +@@ -415,7 +405,10 @@ int ar9002_hw_attach_ops(struct ath_hw *   	struct ath_hw_ops *ops = ath9k_hw_ops(ah);   	int ret; @@ -1936,7 +2135,28 @@   static u32 ath9k_hw_compute_pll_control(struct ath_hw *ah,   					struct ath9k_channel *chan)   { -@@ -670,8 +665,6 @@ static int __ath9k_hw_init(struct ath_hw +@@ -208,7 +203,7 @@ void ath9k_hw_synth_delay(struct ath_hw  + 	udelay(hw_delay + BASE_ACTIVATE_DELAY); + } +  +-void ath9k_hw_write_array(struct ath_hw *ah, struct ar5416IniArray *array, ++void ath9k_hw_write_array(struct ath_hw *ah, const struct ar5416IniArray *array, + 			  int column, unsigned int *writecnt) + { + 	int r; +@@ -554,10 +549,8 @@ static int ath9k_hw_post_init(struct ath + 		ah->eep_ops->get_eeprom_ver(ah), + 		ah->eep_ops->get_eeprom_rev(ah)); +  +-	if (ah->config.enable_ani) { +-		ath9k_hw_ani_setup(ah); ++	if (ah->config.enable_ani) + 		ath9k_hw_ani_init(ah); +-	} +  + 	return 0; + } +@@ -670,8 +663,6 @@ static int __ath9k_hw_init(struct ath_hw   	if (!AR_SREV_9300_20_OR_LATER(ah))   		ah->ani_function &= ~ATH9K_ANI_MRC_CCK; @@ -1963,24 +2183,56 @@   	void (*init_mode_gain_regs)(struct ath_hw *ah);   	void (*setup_calibration)(struct ath_hw *ah,   				  struct ath9k_cal_list *currCal); -@@ -815,9 +813,7 @@ struct ath_hw { - 	u32 *analogBank2Data; - 	u32 *analogBank3Data; +@@ -810,14 +808,7 @@ struct ath_hw { + 	struct ath_hw_ops ops; +  + 	/* Used to program the radio on non single-chip devices */ +-	u32 *analogBank0Data; +-	u32 *analogBank1Data; +-	u32 *analogBank2Data; +-	u32 *analogBank3Data;   	u32 *analogBank6Data;  -	u32 *analogBank6TPCData; - 	u32 *analogBank7Data; +-	u32 *analogBank7Data;  -	u32 *bank6Temp;   	int coverage_class;   	u32 slottime; -@@ -858,7 +854,6 @@ struct ath_hw { - 	struct ar5416IniArray iniBank2; - 	struct ar5416IniArray iniBank3; +@@ -826,10 +817,6 @@ struct ath_hw { + 	/* ANI */ + 	u32 proc_phyerr; + 	u32 aniperiod; +-	int totalSizeDesired[5]; +-	int coarse_high[5]; +-	int coarse_low[5]; +-	int firpwr[5]; + 	enum ath9k_ani_cmd ani_function; + 	u32 ani_skip_count; +  +@@ -852,14 +839,8 @@ struct ath_hw { +  + 	struct ar5416IniArray iniModes; + 	struct ar5416IniArray iniCommon; +-	struct ar5416IniArray iniBank0; + 	struct ar5416IniArray iniBB_RfGain; +-	struct ar5416IniArray iniBank1; +-	struct ar5416IniArray iniBank2; +-	struct ar5416IniArray iniBank3;   	struct ar5416IniArray iniBank6;  -	struct ar5416IniArray iniBank6TPC; - 	struct ar5416IniArray iniBank7; +-	struct ar5416IniArray iniBank7;   	struct ar5416IniArray iniAddac;   	struct ar5416IniArray iniPcieSerdes; + #ifdef CONFIG_PM_SLEEP +@@ -975,7 +956,7 @@ void ath9k_hw_setantenna(struct ath_hw * + void ath9k_hw_synth_delay(struct ath_hw *ah, struct ath9k_channel *chan, + 			  int hw_delay); + bool ath9k_hw_wait(struct ath_hw *ah, u32 reg, u32 mask, u32 val, u32 timeout); +-void ath9k_hw_write_array(struct ath_hw *ah, struct ar5416IniArray *array, ++void ath9k_hw_write_array(struct ath_hw *ah, const struct ar5416IniArray *array, + 			  int column, unsigned int *writecnt); + u32 ath9k_hw_reverse_bits(u32 val, u32 n); + u16 ath9k_hw_computetxtime(struct ath_hw *ah,  --- a/net/mac80211/tx.c  +++ b/net/mac80211/tx.c  @@ -1677,10 +1677,10 @@ netdev_tx_t ieee80211_monitor_start_xmit @@ -1998,3 +2250,323 @@   	/*   	 * Frame injection is not allowed if beaconing is not allowed +--- a/drivers/net/wireless/ath/ath9k/ani.c ++++ b/drivers/net/wireless/ath/ath9k/ani.c +@@ -152,7 +152,8 @@ static void ath9k_hw_set_ofdm_nil(struct + 	ath_dbg(common, ANI, "**** ofdmlevel %d=>%d, rssi=%d[lo=%d hi=%d]\n", + 		aniState->ofdmNoiseImmunityLevel, + 		immunityLevel, BEACON_RSSI(ah), +-		aniState->rssiThrLow, aniState->rssiThrHigh); ++		ATH9K_ANI_RSSI_THR_LOW, ++		ATH9K_ANI_RSSI_THR_HIGH); +  + 	if (!scan) + 		aniState->ofdmNoiseImmunityLevel = immunityLevel; +@@ -173,7 +174,7 @@ static void ath9k_hw_set_ofdm_nil(struct +  + 	weak_sig = entry_ofdm->ofdm_weak_signal_on; + 	if (ah->opmode == NL80211_IFTYPE_STATION && +-	    BEACON_RSSI(ah) <= aniState->rssiThrHigh) ++	    BEACON_RSSI(ah) <= ATH9K_ANI_RSSI_THR_HIGH) + 		weak_sig = true; +  + 	if (aniState->ofdmWeakSigDetect != weak_sig) +@@ -216,11 +217,11 @@ static void ath9k_hw_set_cck_nil(struct  +  + 	ath_dbg(common, ANI, "**** ccklevel %d=>%d, rssi=%d[lo=%d hi=%d]\n", + 		aniState->cckNoiseImmunityLevel, immunityLevel, +-		BEACON_RSSI(ah), aniState->rssiThrLow, +-		aniState->rssiThrHigh); ++		BEACON_RSSI(ah), ATH9K_ANI_RSSI_THR_LOW, ++		ATH9K_ANI_RSSI_THR_HIGH); +  + 	if (ah->opmode == NL80211_IFTYPE_STATION && +-	    BEACON_RSSI(ah) <= aniState->rssiThrLow && ++	    BEACON_RSSI(ah) <= ATH9K_ANI_RSSI_THR_LOW && + 	    immunityLevel > ATH9K_ANI_CCK_MAX_LEVEL_LOW_RSSI) + 		immunityLevel = ATH9K_ANI_CCK_MAX_LEVEL_LOW_RSSI; +  +@@ -418,9 +419,6 @@ void ath9k_hw_ani_monitor(struct ath_hw  + 		return; +  + 	aniState = &ah->curchan->ani; +-	if (WARN_ON(!aniState)) +-		return; +- + 	if (!ath9k_hw_ani_read_counters(ah)) + 		return; +  +@@ -489,23 +487,6 @@ void ath9k_hw_disable_mib_counters(struc + } + EXPORT_SYMBOL(ath9k_hw_disable_mib_counters); +  +-void ath9k_hw_ani_setup(struct ath_hw *ah) +-{ +-	int i; +- +-	static const int totalSizeDesired[] = { -55, -55, -55, -55, -62 }; +-	static const int coarseHigh[] = { -14, -14, -14, -14, -12 }; +-	static const int coarseLow[] = { -64, -64, -64, -64, -70 }; +-	static const int firpwr[] = { -78, -78, -78, -78, -80 }; +- +-	for (i = 0; i < 5; i++) { +-		ah->totalSizeDesired[i] = totalSizeDesired[i]; +-		ah->coarse_high[i] = coarseHigh[i]; +-		ah->coarse_low[i] = coarseLow[i]; +-		ah->firpwr[i] = firpwr[i]; +-	} +-} +- + void ath9k_hw_ani_init(struct ath_hw *ah) + { + 	struct ath_common *common = ath9k_hw_common(ah); +@@ -531,8 +512,6 @@ void ath9k_hw_ani_init(struct ath_hw *ah +  + 		ani->ofdmsTurn = true; +  +-		ani->rssiThrHigh = ATH9K_ANI_RSSI_THR_HIGH; +-		ani->rssiThrLow = ATH9K_ANI_RSSI_THR_LOW; + 		ani->ofdmWeakSigDetect = ATH9K_ANI_USE_OFDM_WEAK_SIG; + 		ani->cckNoiseImmunityLevel = ATH9K_ANI_CCK_DEF_LEVEL; + 		ani->ofdmNoiseImmunityLevel = ATH9K_ANI_OFDM_DEF_LEVEL; +--- a/drivers/net/wireless/ath/ath9k/ani.h ++++ b/drivers/net/wireless/ath/ath9k/ani.h +@@ -104,7 +104,6 @@ struct ath9k_ani_default { + }; +  + struct ar5416AniState { +-	struct ath9k_channel *c; + 	u8 noiseImmunityLevel; + 	u8 ofdmNoiseImmunityLevel; + 	u8 cckNoiseImmunityLevel; +@@ -113,15 +112,9 @@ struct ar5416AniState { + 	u8 spurImmunityLevel; + 	u8 firstepLevel; + 	u8 ofdmWeakSigDetect; +-	u8 cckWeakSigThreshold; + 	u32 listenTime; +-	int32_t rssiThrLow; +-	int32_t rssiThrHigh; + 	u32 ofdmPhyErrCount; + 	u32 cckPhyErrCount; +-	int16_t pktRssi[2]; +-	int16_t ofdmErrRssi[2]; +-	int16_t cckErrRssi[2]; + 	struct ath9k_ani_default iniDef; + }; +  +@@ -147,7 +140,6 @@ struct ar5416Stats { +  + void ath9k_enable_mib_counters(struct ath_hw *ah); + void ath9k_hw_disable_mib_counters(struct ath_hw *ah); +-void ath9k_hw_ani_setup(struct ath_hw *ah); + void ath9k_hw_ani_init(struct ath_hw *ah); +  + #endif /* ANI_H */ +--- a/drivers/net/wireless/ath/ath9k/calib.h ++++ b/drivers/net/wireless/ath/ath9k/calib.h +@@ -33,6 +33,12 @@ struct ar5416IniArray { + 	u32 ia_columns; + }; +  ++#define STATIC_INI_ARRAY(array) {			\ ++		.ia_array = (u32 *)(array),		\ ++		.ia_rows = ARRAY_SIZE(array),		\ ++		.ia_columns = ARRAY_SIZE(array[0]),	\ ++	} ++ + #define INIT_INI_ARRAY(iniarray, array) do {	\ + 		(iniarray)->ia_array = (u32 *)(array);		\ + 		(iniarray)->ia_rows = ARRAY_SIZE(array);	\ +--- a/drivers/net/wireless/ath/ath9k/xmit.c ++++ b/drivers/net/wireless/ath/ath9k/xmit.c +@@ -378,7 +378,7 @@ static void ath_tx_count_frames(struct a +  + static void ath_tx_complete_aggr(struct ath_softc *sc, struct ath_txq *txq, + 				 struct ath_buf *bf, struct list_head *bf_q, +-				 struct ath_tx_status *ts, int txok, bool retry) ++				 struct ath_tx_status *ts, int txok) + { + 	struct ath_node *an = NULL; + 	struct sk_buff *skb; +@@ -490,7 +490,7 @@ static void ath_tx_complete_aggr(struct  + 		} else if (!isaggr && txok) { + 			/* transmit completion */ + 			acked_cnt++; +-		} else if ((tid->state & AGGR_CLEANUP) || !retry) { ++		} else if (tid->state & AGGR_CLEANUP) { + 			/* + 			 * cleanup in progress, just fail + 			 * the un-acked sub-frames +@@ -604,6 +604,37 @@ static void ath_tx_complete_aggr(struct  + 		ath9k_queue_reset(sc, RESET_TYPE_TX_ERROR); + } +  ++static bool bf_is_ampdu_not_probing(struct ath_buf *bf) ++{ ++    struct ieee80211_tx_info *info = IEEE80211_SKB_CB(bf->bf_mpdu); ++    return bf_isampdu(bf) && !(info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE); ++} ++ ++static void ath_tx_process_buffer(struct ath_softc *sc, struct ath_txq *txq, ++				  struct ath_tx_status *ts, struct ath_buf *bf, ++				  struct list_head *bf_head) ++{ ++	bool txok, flush; ++ ++	txok = !(ts->ts_status & ATH9K_TXERR_MASK); ++	flush = !!(ts->ts_status & ATH9K_TX_FLUSH); ++	txq->axq_tx_inprogress = false; ++ ++	txq->axq_depth--; ++	if (bf_is_ampdu_not_probing(bf)) ++		txq->axq_ampdu_depth--; ++ ++	if (!bf_isampdu(bf)) { ++		if (!flush) ++			ath_tx_rc_status(sc, bf, ts, 1, txok ? 0 : 1, txok); ++		ath_tx_complete_buf(sc, bf, txq, bf_head, ts, txok); ++	} else ++		ath_tx_complete_aggr(sc, txq, bf, bf_head, ts, txok); ++ ++	if ((sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_HT) && !flush) ++		ath_txq_schedule(sc, txq); ++} ++ + static bool ath_lookup_legacy(struct ath_buf *bf) + { + 	struct sk_buff *skb; +@@ -1331,23 +1362,6 @@ void ath_tx_aggr_resume(struct ath_softc + /* Queue Management */ + /********************/ +  +-static void ath_txq_drain_pending_buffers(struct ath_softc *sc, +-					  struct ath_txq *txq) +-{ +-	struct ath_atx_ac *ac, *ac_tmp; +-	struct ath_atx_tid *tid, *tid_tmp; +- +-	list_for_each_entry_safe(ac, ac_tmp, &txq->axq_acq, list) { +-		list_del(&ac->list); +-		ac->sched = false; +-		list_for_each_entry_safe(tid, tid_tmp, &ac->tid_q, list) { +-			list_del(&tid->list); +-			tid->sched = false; +-			ath_tid_drain(sc, txq, tid); +-		} +-	} +-} +- + struct ath_txq *ath_txq_setup(struct ath_softc *sc, int qtype, int subtype) + { + 	struct ath_hw *ah = sc->sc_ah; +@@ -1470,14 +1484,8 @@ int ath_cabq_update(struct ath_softc *sc + 	return 0; + } +  +-static bool bf_is_ampdu_not_probing(struct ath_buf *bf) +-{ +-    struct ieee80211_tx_info *info = IEEE80211_SKB_CB(bf->bf_mpdu); +-    return bf_isampdu(bf) && !(info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE); +-} +- + static void ath_drain_txq_list(struct ath_softc *sc, struct ath_txq *txq, +-			       struct list_head *list, bool retry_tx) ++			       struct list_head *list) + { + 	struct ath_buf *bf, *lastbf; + 	struct list_head bf_head; +@@ -1499,16 +1507,7 @@ static void ath_drain_txq_list(struct at +  + 		lastbf = bf->bf_lastbf; + 		list_cut_position(&bf_head, list, &lastbf->list); +- +-		txq->axq_depth--; +-		if (bf_is_ampdu_not_probing(bf)) +-			txq->axq_ampdu_depth--; +- +-		if (bf_isampdu(bf)) +-			ath_tx_complete_aggr(sc, txq, bf, &bf_head, &ts, 0, +-					     retry_tx); +-		else +-			ath_tx_complete_buf(sc, bf, txq, &bf_head, &ts, 0); ++		ath_tx_process_buffer(sc, txq, &ts, bf, &bf_head); + 	} + } +  +@@ -1518,7 +1517,7 @@ static void ath_drain_txq_list(struct at +  * This assumes output has been stopped and +  * we do not need to block ath_tx_tasklet. +  */ +-void ath_draintxq(struct ath_softc *sc, struct ath_txq *txq, bool retry_tx) ++void ath_draintxq(struct ath_softc *sc, struct ath_txq *txq) + { + 	ath_txq_lock(sc, txq); +  +@@ -1526,8 +1525,7 @@ void ath_draintxq(struct ath_softc *sc,  + 		int idx = txq->txq_tailidx; +  + 		while (!list_empty(&txq->txq_fifo[idx])) { +-			ath_drain_txq_list(sc, txq, &txq->txq_fifo[idx], +-					   retry_tx); ++			ath_drain_txq_list(sc, txq, &txq->txq_fifo[idx]); +  + 			INCR(idx, ATH_TXFIFO_DEPTH); + 		} +@@ -1536,16 +1534,12 @@ void ath_draintxq(struct ath_softc *sc,  +  + 	txq->axq_link = NULL; + 	txq->axq_tx_inprogress = false; +-	ath_drain_txq_list(sc, txq, &txq->axq_q, retry_tx); +- +-	/* flush any pending frames if aggregation is enabled */ +-	if ((sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_HT) && !retry_tx) +-		ath_txq_drain_pending_buffers(sc, txq); ++	ath_drain_txq_list(sc, txq, &txq->axq_q); +  + 	ath_txq_unlock_complete(sc, txq); + } +  +-bool ath_drain_all_txq(struct ath_softc *sc, bool retry_tx) ++bool ath_drain_all_txq(struct ath_softc *sc) + { + 	struct ath_hw *ah = sc->sc_ah; + 	struct ath_common *common = ath9k_hw_common(sc->sc_ah); +@@ -1581,7 +1575,7 @@ bool ath_drain_all_txq(struct ath_softc  + 		 */ + 		txq = &sc->tx.txq[i]; + 		txq->stopped = false; +-		ath_draintxq(sc, txq, retry_tx); ++		ath_draintxq(sc, txq); + 	} +  + 	return !npend; +@@ -2175,28 +2169,6 @@ static void ath_tx_rc_status(struct ath_ + 	tx_info->status.rates[tx_rateindex].count = ts->ts_longretry + 1; + } +  +-static void ath_tx_process_buffer(struct ath_softc *sc, struct ath_txq *txq, +-				  struct ath_tx_status *ts, struct ath_buf *bf, +-				  struct list_head *bf_head) +-{ +-	int txok; +- +-	txq->axq_depth--; +-	txok = !(ts->ts_status & ATH9K_TXERR_MASK); +-	txq->axq_tx_inprogress = false; +-	if (bf_is_ampdu_not_probing(bf)) +-		txq->axq_ampdu_depth--; +- +-	if (!bf_isampdu(bf)) { +-		ath_tx_rc_status(sc, bf, ts, 1, txok ? 0 : 1, txok); +-		ath_tx_complete_buf(sc, bf, txq, bf_head, ts, txok); +-	} else +-		ath_tx_complete_aggr(sc, txq, bf, bf_head, ts, txok, true); +- +-	if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_HT) +-		ath_txq_schedule(sc, txq); +-} +- + static void ath_tx_processq(struct ath_softc *sc, struct ath_txq *txq) + { + 	struct ath_hw *ah = sc->sc_ah; diff --git a/package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch b/package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch index ff6ff27a1..6e2af403e 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 -@@ -1947,8 +1947,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st +@@ -1945,8 +1945,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/512-ath9k_channelbw_debugfs.patch b/package/mac80211/patches/512-ath9k_channelbw_debugfs.patch index 8c459180a..6dde93d7a 100644 --- a/package/mac80211/patches/512-ath9k_channelbw_debugfs.patch +++ b/package/mac80211/patches/512-ath9k_channelbw_debugfs.patch @@ -1,6 +1,6 @@  --- a/drivers/net/wireless/ath/ath9k/ath9k.h  +++ b/drivers/net/wireless/ath/ath9k/ath9k.h -@@ -671,6 +671,7 @@ struct ath_softc { +@@ -670,6 +670,7 @@ struct ath_softc {   	struct ieee80211_hw *hw;   	struct device *dev; @@ -8,7 +8,7 @@   	struct survey_info *cur_survey;   	struct survey_info survey[ATH9K_NUM_CHANNELS]; -@@ -743,6 +744,7 @@ struct ath_softc { +@@ -742,6 +743,7 @@ struct ath_softc {   #endif   }; @@ -80,7 +80,7 @@   	debugfs_create_file("interrupt", S_IRUSR, sc->debug.debugfs_phy, sc,  --- a/drivers/net/wireless/ath/ath9k/main.c  +++ b/drivers/net/wireless/ath/ath9k/main.c -@@ -1068,7 +1068,7 @@ static void ath9k_disable_ps(struct ath_ +@@ -1065,7 +1065,7 @@ static void ath9k_disable_ps(struct ath_   	ath_dbg(common, PS, "PowerSave disabled\n");   } @@ -89,7 +89,7 @@   {   	struct ath_softc *sc = hw->priv;   	struct ath_hw *ah = sc->sc_ah; -@@ -1122,9 +1122,11 @@ static int ath9k_config(struct ieee80211 +@@ -1119,9 +1119,11 @@ static int ath9k_config(struct ieee80211   	if ((changed & IEEE80211_CONF_CHANGE_CHANNEL) || reset_channel) {   		struct ieee80211_channel *curchan = hw->conf.channel; @@ -101,7 +101,7 @@   		if (ah->curchan)   			old_pos = ah->curchan - &ah->channels[0]; -@@ -1167,7 +1169,23 @@ static int ath9k_config(struct ieee80211 +@@ -1164,7 +1166,23 @@ static int ath9k_config(struct ieee80211   			memset(&sc->survey[pos], 0, sizeof(struct survey_info));   		} diff --git a/package/mac80211/patches/521-ath9k_cur_txpower.patch b/package/mac80211/patches/521-ath9k_cur_txpower.patch index ad2d3d918..02f8c0b44 100644 --- a/package/mac80211/patches/521-ath9k_cur_txpower.patch +++ b/package/mac80211/patches/521-ath9k_cur_txpower.patch @@ -1,6 +1,6 @@  --- a/drivers/net/wireless/ath/ath9k/main.c  +++ b/drivers/net/wireless/ath/ath9k/main.c -@@ -1192,6 +1192,8 @@ int ath9k_config(struct ieee80211_hw *hw +@@ -1189,6 +1189,8 @@ int ath9k_config(struct ieee80211_hw *hw   			return -EINVAL;   		} @@ -9,7 +9,7 @@   		/*   		 * The most recent snapshot of channel->noisefloor for the old   		 * channel is only available after the hardware reset. Copy it to -@@ -1206,6 +1208,7 @@ int ath9k_config(struct ieee80211_hw *hw +@@ -1203,6 +1205,7 @@ int ath9k_config(struct ieee80211_hw *hw   		sc->config.txpowlimit = 2 * conf->power_level;   		ath9k_cmn_update_txpow(ah, sc->curtxpow,   				       sc->config.txpowlimit, &sc->curtxpow); diff --git a/package/mac80211/patches/524-ath9k_use_configured_antenna_gain.patch b/package/mac80211/patches/524-ath9k_use_configured_antenna_gain.patch index 0c3842577..9e2941b7c 100644 --- a/package/mac80211/patches/524-ath9k_use_configured_antenna_gain.patch +++ b/package/mac80211/patches/524-ath9k_use_configured_antenna_gain.patch @@ -10,7 +10,7 @@  --- a/drivers/net/wireless/ath/ath9k/hw.c  +++ b/drivers/net/wireless/ath/ath9k/hw.c -@@ -2818,7 +2818,7 @@ void ath9k_hw_apply_txpower(struct ath_h +@@ -2816,7 +2816,7 @@ void ath9k_hw_apply_txpower(struct ath_h   	channel = chan->chan;   	chan_pwr = min_t(int, channel->max_power * 2, MAX_RATE_POWER);   	new_pwr = min_t(int, chan_pwr, reg->power_limit); @@ -21,7 +21,7 @@   	if (ant_gain > max_gain)  --- a/drivers/net/wireless/ath/ath9k/main.c  +++ b/drivers/net/wireless/ath/ath9k/main.c -@@ -1204,7 +1204,10 @@ int ath9k_config(struct ieee80211_hw *hw +@@ -1201,7 +1201,10 @@ int ath9k_config(struct ieee80211_hw *hw   	}   	if (changed & IEEE80211_CONF_CHANGE_POWER) { diff --git a/package/mac80211/patches/530-ath9k_extra_leds.patch b/package/mac80211/patches/530-ath9k_extra_leds.patch index 42820b169..a93b62524 100644 --- a/package/mac80211/patches/530-ath9k_extra_leds.patch +++ b/package/mac80211/patches/530-ath9k_extra_leds.patch @@ -1,6 +1,6 @@  --- a/drivers/net/wireless/ath/ath9k/ath9k.h  +++ b/drivers/net/wireless/ath/ath9k/ath9k.h -@@ -549,6 +549,9 @@ struct ath9k_wow_pattern { +@@ -548,6 +548,9 @@ struct ath9k_wow_pattern {   void ath_init_leds(struct ath_softc *sc);   void ath_deinit_leds(struct ath_softc *sc);   void ath_fill_led_pin(struct ath_softc *sc); @@ -10,7 +10,7 @@   #else   static inline void ath_init_leds(struct ath_softc *sc)   { -@@ -667,6 +670,13 @@ struct ath9k_vif_iter_data { +@@ -666,6 +669,13 @@ struct ath9k_vif_iter_data {   	int nadhocs;   /* number of adhoc vifs */   }; @@ -24,7 +24,7 @@   struct ath_softc {   	struct ieee80211_hw *hw;   	struct device *dev; -@@ -708,9 +718,8 @@ struct ath_softc { +@@ -707,9 +717,8 @@ struct ath_softc {   	struct ieee80211_supported_band sbands[IEEE80211_NUM_BANDS];   #ifdef CONFIG_MAC80211_LEDS diff --git a/package/mac80211/patches/553-ath9k_debugfs_diag.patch b/package/mac80211/patches/553-ath9k_debugfs_diag.patch index 078a7f878..8a1fcf662 100644 --- a/package/mac80211/patches/553-ath9k_debugfs_diag.patch +++ b/package/mac80211/patches/553-ath9k_debugfs_diag.patch @@ -84,7 +84,7 @@   	bool reset_power_on;   	bool htc_reset_init; -@@ -1002,6 +1010,7 @@ void ath9k_hw_set_sta_beacon_timers(stru +@@ -988,6 +996,7 @@ void ath9k_hw_set_sta_beacon_timers(stru   bool ath9k_hw_check_alive(struct ath_hw *ah);   bool ath9k_hw_setpower(struct ath_hw *ah, enum ath9k_power_mode mode); @@ -94,7 +94,7 @@   void ath9k_debug_sync_cause(struct ath_common *common, u32 sync_cause);  --- a/drivers/net/wireless/ath/ath9k/hw.c  +++ b/drivers/net/wireless/ath/ath9k/hw.c -@@ -1747,6 +1747,20 @@ fail: +@@ -1745,6 +1745,20 @@ fail:   	return -EINVAL;   } @@ -115,7 +115,7 @@   int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan,   		   struct ath9k_hw_cal_data *caldata, bool fastcc)   { -@@ -2024,6 +2038,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st +@@ -2022,6 +2036,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st   	}   	ath9k_hw_apply_gpio_override(ah); @@ -125,7 +125,7 @@   		REG_SET_BIT(ah, AR_BTCOEX_WL_LNADIV, AR_BTCOEX_WL_LNADIV_FORCE_ON);  --- a/drivers/net/wireless/ath/ath9k/main.c  +++ b/drivers/net/wireless/ath/ath9k/main.c -@@ -463,6 +463,11 @@ irqreturn_t ath_isr(int irq, void *dev) +@@ -462,6 +462,11 @@ irqreturn_t ath_isr(int irq, void *dev)   	ath9k_hw_getisr(ah, &status);	/* NB: clears ISR too */   	status &= ah->imask;	/* discard unasked-for bits */ diff --git a/package/mac80211/patches/555-ath9k-allow-to-disable-bands-via-platform-data.patch b/package/mac80211/patches/555-ath9k-allow-to-disable-bands-via-platform-data.patch index d8c3ff0ad..93c70b63f 100644 --- a/package/mac80211/patches/555-ath9k-allow-to-disable-bands-via-platform-data.patch +++ b/package/mac80211/patches/555-ath9k-allow-to-disable-bands-via-platform-data.patch @@ -12,7 +12,7 @@  --- a/drivers/net/wireless/ath/ath9k/hw.c  +++ b/drivers/net/wireless/ath/ath9k/hw.c -@@ -2414,17 +2414,25 @@ int ath9k_hw_fill_cap_info(struct ath_hw +@@ -2412,17 +2412,25 @@ int ath9k_hw_fill_cap_info(struct ath_hw   	}   	eeval = ah->eep_ops->get_eeprom(ah, EEP_OP_MODE); @@ -48,7 +48,7 @@   	    AR_SREV_9285(ah) ||  --- a/drivers/net/wireless/ath/ath9k/hw.h  +++ b/drivers/net/wireless/ath/ath9k/hw.h -@@ -922,6 +922,8 @@ struct ath_hw { +@@ -908,6 +908,8 @@ struct ath_hw {   	bool is_clk_25mhz;   	int (*get_mac_revision)(void);   	int (*external_reset)(void); diff --git a/package/mac80211/patches/605-rt2x00-pci-eeprom.patch b/package/mac80211/patches/605-rt2x00-pci-eeprom.patch index 25b21cece..33eb28f5f 100644 --- a/package/mac80211/patches/605-rt2x00-pci-eeprom.patch +++ b/package/mac80211/patches/605-rt2x00-pci-eeprom.patch @@ -1,6 +1,6 @@  --- a/drivers/net/wireless/rt2x00/rt2800pci.c  +++ b/drivers/net/wireless/rt2x00/rt2800pci.c -@@ -89,7 +89,7 @@ static void rt2800pci_mcu_status(struct +@@ -89,7 +89,7 @@ static void rt2800pci_mcu_status(struct    	rt2x00pci_register_write(rt2x00dev, H2M_MAILBOX_CID, ~0);   } @@ -9,7 +9,7 @@   {   	memcpy(rt2x00dev->eeprom, rt2x00dev->eeprom_file->data, EEPROM_SIZE);   	return 0; -@@ -983,8 +983,9 @@ static int rt2800pci_read_eeprom(struct +@@ -983,8 +983,9 @@ static int rt2800pci_read_eeprom(struct    {   	int retval; | 
