mac80211: update to wireless-testing 2011-03-22
authorFelix Fietkau <nbd@openwrt.org>
Tue, 22 Mar 2011 21:00:58 +0000 (21:00 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Tue, 22 Mar 2011 21:00:58 +0000 (21:00 +0000)
SVN-Revision: 26273

26 files changed:
package/mac80211/Makefile
package/mac80211/patches/300-ath9k_gpio_settings.patch [deleted file]
package/mac80211/patches/300-ath9k_pending_work.patch [new file with mode: 0644]
package/mac80211/patches/310-pending_work.patch [deleted file]
package/mac80211/patches/401-ath9k-dont-register-leds-on-ar9100.patch
package/mac80211/patches/402-ath9k_blink_default.patch
package/mac80211/patches/403-ath9k-fix-invalid-mac-address-handling.patch
package/mac80211/patches/407-ath9k-override-mac-address-from-platform-data.patch [deleted file]
package/mac80211/patches/409-ath9k_platform_settings.patch [deleted file]
package/mac80211/patches/500-ath9k_eeprom_debugfs.patch
package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch
package/mac80211/patches/520-mac80211_drv_tim_override.patch
package/mac80211/patches/521-ath9k_fix_ap_ps_buffering.patch
package/mac80211/patches/522-ath9k_remove_pending_frames_workaround.patch [deleted file]
package/mac80211/patches/530-mac80211_redirect_vlan_eap_frames.patch
package/mac80211/patches/540-ath9k_ar9100_blockack_fix.patch [deleted file]
package/mac80211/patches/540-mac80211_fix_rx_reorder_timeout.patch [new file with mode: 0644]
package/mac80211/patches/541-ath9k_ar9100_rx_chainmask_fix.patch [deleted file]
package/mac80211/patches/550-ath9k_increase_bcbuf.patch [new file with mode: 0644]
package/mac80211/patches/550-mac80211_fix_rx_reorder_timeout.patch [deleted file]
package/mac80211/patches/560-ath9k_debugfs_cleanup.patch [deleted file]
package/mac80211/patches/561-ath9k_fix_staggered_beacons.patch [deleted file]
package/mac80211/patches/562-ath9k_increase_bcbuf.patch [deleted file]
package/mac80211/patches/563-ath9k_reduce_bstuck_nfcal.patch [deleted file]
package/mac80211/patches/570-mac80211_initialize_last_rx.patch [deleted file]
package/mac80211/patches/700-mwl8k-missing-pci-id-for-WNR854T.patch

index eaea213961e0b0a963efc3049d494b7aeb072416..18522bf4d2ed4220d8bbfef683bb0e5882bdfcd1 100644 (file)
@@ -10,10 +10,10 @@ include $(INCLUDE_DIR)/kernel.mk
 
 PKG_NAME:=mac80211
 
-PKG_VERSION:=2011-03-11
+PKG_VERSION:=2011-03-22
 PKG_RELEASE:=1
 PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources
-PKG_MD5SUM:=123b9220fa2b016979b7b3874f349643
+PKG_MD5SUM:=3e7ffb9f243053381f2cdfc5af300f8c
 
 PKG_SOURCE:=compat-wireless-$(PKG_VERSION).tar.bz2
 PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/compat-wireless-$(PKG_VERSION)
diff --git a/package/mac80211/patches/300-ath9k_gpio_settings.patch b/package/mac80211/patches/300-ath9k_gpio_settings.patch
deleted file mode 100644 (file)
index af20577..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/debug.c
-+++ b/drivers/net/wireless/ath/ath9k/debug.c
-@@ -1145,6 +1145,12 @@ int ath9k_init_debug(struct ath_hw *ah)
-                       sc, &fops_regdump))
-               goto err;
-+      debugfs_create_u32("gpio_mask", S_IRUSR | S_IWUSR,
-+                         sc->debug.debugfs_phy, &sc->sc_ah->gpio_mask);
-+
-+      debugfs_create_u32("gpio_val", S_IRUSR | S_IWUSR,
-+                         sc->debug.debugfs_phy, &sc->sc_ah->gpio_val);
-+
-       sc->debug.regidx = 0;
-       return 0;
- err:
---- a/drivers/net/wireless/ath/ath9k/hw.h
-+++ b/drivers/net/wireless/ath/ath9k/hw.h
-@@ -795,6 +795,8 @@ struct ath_hw {
-       int initPDADC;
-       int PDADCdelta;
-       u8 led_pin;
-+      u32 gpio_mask;
-+      u32 gpio_val;
-       struct ar5416IniArray iniModes;
-       struct ar5416IniArray iniCommon;
---- a/drivers/net/wireless/ath/ath9k/hw.c
-+++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -1212,6 +1212,20 @@ static bool ath9k_hw_channel_change(stru
-       return true;
- }
-+static void ath9k_hw_apply_gpio_override(struct ath_hw *ah)
-+{
-+      u32 gpio_mask = ah->gpio_mask;
-+      int i;
-+
-+      for (i = 0; gpio_mask; i++, gpio_mask >>= 1) {
-+              if (!(gpio_mask & 1))
-+                      continue;
-+
-+              ath9k_hw_cfg_output(ah, i, AR_GPIO_OUTPUT_MUX_AS_OUTPUT);
-+              ath9k_hw_set_gpio(ah, i, !!(ah->gpio_val & BIT(i)));
-+      }
-+}
-+
- bool ath9k_hw_check_alive(struct ath_hw *ah)
- {
-       int count = 50;
-@@ -1500,6 +1514,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st
-       if (AR_SREV_9300_20_OR_LATER(ah))
-               ar9003_hw_bb_watchdog_config(ah);
-+      ath9k_hw_apply_gpio_override(ah);
-+
-       return 0;
- }
- EXPORT_SYMBOL(ath9k_hw_reset);
diff --git a/package/mac80211/patches/300-ath9k_pending_work.patch b/package/mac80211/patches/300-ath9k_pending_work.patch
new file mode 100644 (file)
index 0000000..7d4301d
--- /dev/null
@@ -0,0 +1,370 @@
+--- a/drivers/net/wireless/ath/ath9k/ath9k.h
++++ b/drivers/net/wireless/ath/ath9k/ath9k.h
+@@ -362,7 +362,7 @@ struct ath_vif {
+  * number of BSSIDs) if a given beacon does not go out even after waiting this
+  * number of beacon intervals, the game's up.
+  */
+-#define BSTUCK_THRESH                 (9 * ATH_BCBUF)
++#define BSTUCK_THRESH                 9
+ #define       ATH_BCBUF                       4
+ #define ATH_DEFAULT_BINTVAL           100 /* TU */
+ #define ATH_DEFAULT_BMISS_LIMIT       10
+@@ -386,7 +386,7 @@ struct ath_beacon {
+       u32 beaconq;
+       u32 bmisscnt;
+       u32 ast_be_xmit;
+-      u64 bc_tstamp;
++      u32 bc_tstamp;
+       struct ieee80211_vif *bslot[ATH_BCBUF];
+       int slottime;
+       int slotupdate;
+--- a/drivers/net/wireless/ath/ath9k/beacon.c
++++ b/drivers/net/wireless/ath/ath9k/beacon.c
+@@ -57,8 +57,8 @@ int ath_beaconq_config(struct ath_softc 
+ /*
+  *  Associates the beacon frame buffer with a transmit descriptor.  Will set
+- *  up all required antenna switch parameters, rate codes, and channel flags.
+- *  Beacons are always sent out at the lowest rate, and are not retried.
++ *  up rate codes, and channel flags. Beacons are always sent out at the
++ *  lowest rate, and are not retried.
+ */
+ static void ath_beacon_setup(struct ath_softc *sc, struct ath_vif *avp,
+                            struct ath_buf *bf, int rateidx)
+@@ -68,7 +68,7 @@ static void ath_beacon_setup(struct ath_
+       struct ath_common *common = ath9k_hw_common(ah);
+       struct ath_desc *ds;
+       struct ath9k_11n_rate_series series[4];
+-      int flags, antenna, ctsrate = 0, ctsduration = 0;
++      int flags, ctsrate = 0, ctsduration = 0;
+       struct ieee80211_supported_band *sband;
+       u8 rate = 0;
+@@ -76,12 +76,6 @@ static void ath_beacon_setup(struct ath_
+       flags = ATH9K_TXDESC_NOACK;
+       ds->ds_link = 0;
+-      /*
+-       * Switch antenna every beacon.
+-       * Should only switch every beacon period, not for every SWBA
+-       * XXX assumes two antennae
+-       */
+-      antenna = ((sc->beacon.ast_be_xmit / sc->nbcnvifs) & 1 ? 2 : 1);
+       sband = &sc->sbands[common->hw->conf.channel->band];
+       rate = sband->bitrates[rateidx].hw_value;
+@@ -278,7 +272,7 @@ int ath_beacon_alloc(struct ath_softc *s
+               return -ENOMEM;
+       tstamp = ((struct ieee80211_mgmt *)skb->data)->u.beacon.timestamp;
+-      sc->beacon.bc_tstamp = le64_to_cpu(tstamp);
++      sc->beacon.bc_tstamp = (u32) le64_to_cpu(tstamp);
+       /* Calculate a TSF adjustment factor required for staggered beacons. */
+       if (avp->av_bslot > 0) {
+               u64 tsfadjust;
+@@ -294,8 +288,8 @@ int ath_beacon_alloc(struct ath_softc *s
+                * adjustment. Other slots are adjusted to get the timestamp
+                * close to the TBTT for the BSS.
+                */
+-              tsfadjust = intval * avp->av_bslot / ATH_BCBUF;
+-              avp->tsf_adjust = cpu_to_le64(TU_TO_USEC(tsfadjust));
++              tsfadjust = TU_TO_USEC(intval * avp->av_bslot) / ATH_BCBUF;
++              avp->tsf_adjust = cpu_to_le64(tsfadjust);
+               ath_dbg(common, ATH_DBG_BEACON,
+                       "stagger beacons, bslot %d intval %u tsfadjust %llu\n",
+@@ -369,12 +363,13 @@ void ath_beacon_tasklet(unsigned long da
+       if (ath9k_hw_numtxpending(ah, sc->beacon.beaconq) != 0) {
+               sc->beacon.bmisscnt++;
+-              if (sc->beacon.bmisscnt < BSTUCK_THRESH) {
++              if (sc->beacon.bmisscnt < BSTUCK_THRESH * sc->nbcnvifs) {
+                       ath_dbg(common, ATH_DBG_BSTUCK,
+                               "missed %u consecutive beacons\n",
+                               sc->beacon.bmisscnt);
+                       ath9k_hw_stop_dma_queue(ah, sc->beacon.beaconq);
+-                      ath9k_hw_bstuck_nfcal(ah);
++                      if (sc->beacon.bmisscnt > 4)
++                              ath9k_hw_bstuck_nfcal(ah);
+               } else if (sc->beacon.bmisscnt >= BSTUCK_THRESH) {
+                       ath_dbg(common, ATH_DBG_BSTUCK,
+                               "beacon is officially stuck\n");
+@@ -385,13 +380,6 @@ void ath_beacon_tasklet(unsigned long da
+               return;
+       }
+-      if (sc->beacon.bmisscnt != 0) {
+-              ath_dbg(common, ATH_DBG_BSTUCK,
+-                      "resume beacon xmit after %u misses\n",
+-                      sc->beacon.bmisscnt);
+-              sc->beacon.bmisscnt = 0;
+-      }
+-
+       /*
+        * Generate beacon frames. we are sending frames
+        * staggered so calculate the slot for this frame based
+@@ -401,8 +389,9 @@ void ath_beacon_tasklet(unsigned long da
+       intval = cur_conf->beacon_interval ? : ATH_DEFAULT_BINTVAL;
+       tsf = ath9k_hw_gettsf64(ah);
+-      tsftu = TSF_TO_TU(tsf>>32, tsf);
+-      slot = ((tsftu % intval) * ATH_BCBUF) / intval;
++      tsf += TU_TO_USEC(ah->config.sw_beacon_response_time);
++      tsftu = TSF_TO_TU((tsf * ATH_BCBUF) >>32, tsf * ATH_BCBUF);
++      slot = (tsftu % (intval * ATH_BCBUF)) / intval;
+       /*
+        * Reverse the slot order to get slot 0 on the TBTT offset that does
+        * not require TSF adjustment and other slots adding
+@@ -415,7 +404,7 @@ void ath_beacon_tasklet(unsigned long da
+       ath_dbg(common, ATH_DBG_BEACON,
+               "slot %d [tsf %llu tsftu %u intval %u] vif %p\n",
+-              slot, tsf, tsftu, intval, vif);
++              slot, tsf, tsftu / ATH_BCBUF, intval, vif);
+       bfaddr = 0;
+       if (vif) {
+@@ -424,6 +413,13 @@ void ath_beacon_tasklet(unsigned long da
+                       bfaddr = bf->bf_daddr;
+                       bc = 1;
+               }
++
++              if (sc->beacon.bmisscnt != 0) {
++                      ath_dbg(common, ATH_DBG_BSTUCK,
++                              "resume beacon xmit after %u misses\n",
++                              sc->beacon.bmisscnt);
++                      sc->beacon.bmisscnt = 0;
++              }
+       }
+       /*
+@@ -463,13 +459,17 @@ static void ath9k_beacon_init(struct ath
+                             u32 next_beacon,
+                             u32 beacon_period)
+ {
+-      if (beacon_period & ATH9K_BEACON_RESET_TSF)
++      if (sc->sc_flags & SC_OP_TSF_RESET) {
+               ath9k_ps_wakeup(sc);
++              ath9k_hw_reset_tsf(sc->sc_ah);
++      }
+       ath9k_hw_beaconinit(sc->sc_ah, next_beacon, beacon_period);
+-      if (beacon_period & ATH9K_BEACON_RESET_TSF)
++      if (sc->sc_flags & SC_OP_TSF_RESET) {
+               ath9k_ps_restore(sc);
++              sc->sc_flags &= ~SC_OP_TSF_RESET;
++      }
+ }
+ /*
+@@ -484,18 +484,14 @@ static void ath_beacon_config_ap(struct 
+       u32 nexttbtt, intval;
+       /* NB: the beacon interval is kept internally in TU's */
+-      intval = conf->beacon_interval & ATH9K_BEACON_PERIOD;
++      intval = TU_TO_USEC(conf->beacon_interval & ATH9K_BEACON_PERIOD);
+       intval /= ATH_BCBUF;    /* for staggered beacons */
+       nexttbtt = intval;
+-      if (sc->sc_flags & SC_OP_TSF_RESET)
+-              intval |= ATH9K_BEACON_RESET_TSF;
+-
+       /*
+        * In AP mode we enable the beacon timers and SWBA interrupts to
+        * prepare beacon frames.
+        */
+-      intval |= ATH9K_BEACON_ENA;
+       ah->imask |= ATH9K_INT_SWBA;
+       ath_beaconq_config(sc);
+@@ -505,11 +501,6 @@ static void ath_beacon_config_ap(struct 
+       ath9k_beacon_init(sc, nexttbtt, intval);
+       sc->beacon.bmisscnt = 0;
+       ath9k_hw_set_interrupts(ah, ah->imask);
+-
+-      /* Clear the reset TSF flag, so that subsequent beacon updation
+-         will not reset the HW TSF. */
+-
+-      sc->sc_flags &= ~SC_OP_TSF_RESET;
+ }
+ /*
+@@ -643,25 +634,20 @@ static void ath_beacon_config_adhoc(stru
+ {
+       struct ath_hw *ah = sc->sc_ah;
+       struct ath_common *common = ath9k_hw_common(ah);
+-      u64 tsf;
+-      u32 tsftu, intval, nexttbtt;
+-
+-      intval = conf->beacon_interval & ATH9K_BEACON_PERIOD;
++      u32 tsf, delta, intval, nexttbtt;
++      tsf = ath9k_hw_gettsf32(ah) + TU_TO_USEC(FUDGE);
++      intval = TU_TO_USEC(conf->beacon_interval & ATH9K_BEACON_PERIOD);
+-      /* Pull nexttbtt forward to reflect the current TSF */
+-
+-      nexttbtt = TSF_TO_TU(sc->beacon.bc_tstamp >> 32, sc->beacon.bc_tstamp);
+-      if (nexttbtt == 0)
+-                nexttbtt = intval;
+-        else if (intval)
+-                nexttbtt = roundup(nexttbtt, intval);
+-
+-      tsf = ath9k_hw_gettsf64(ah);
+-      tsftu = TSF_TO_TU((u32)(tsf>>32), (u32)tsf) + FUDGE;
+-      do {
+-              nexttbtt += intval;
+-      } while (nexttbtt < tsftu);
++      if (!sc->beacon.bc_tstamp)
++              nexttbtt = tsf + intval;
++      else {
++              if (tsf > sc->beacon.bc_tstamp)
++                      delta = (tsf - sc->beacon.bc_tstamp);
++              else
++                      delta = (tsf + 1 + (~0U - sc->beacon.bc_tstamp));
++              nexttbtt = tsf + roundup(delta, intval);
++      }
+       ath_dbg(common, ATH_DBG_BEACON,
+               "IBSS nexttbtt %u intval %u (%u)\n",
+@@ -672,7 +658,6 @@ static void ath_beacon_config_adhoc(stru
+        * if we need to manually prepare beacon frames.  Otherwise we use a
+        * self-linked tx descriptor and let the hardware deal with things.
+        */
+-      intval |= ATH9K_BEACON_ENA;
+       ah->imask |= ATH9K_INT_SWBA;
+       ath_beaconq_config(sc);
+--- a/drivers/net/wireless/ath/ath9k/htc_drv_beacon.c
++++ b/drivers/net/wireless/ath/ath9k/htc_drv_beacon.c
+@@ -155,7 +155,7 @@ static void ath9k_htc_beacon_config_ap(s
+       nexttbtt = intval;
+       if (priv->op_flags & OP_TSF_RESET) {
+-              intval |= ATH9K_BEACON_RESET_TSF;
++              ath9k_hw_reset_tsf(priv->ah);
+               priv->op_flags &= ~OP_TSF_RESET;
+       } else {
+               /*
+@@ -168,8 +168,6 @@ static void ath9k_htc_beacon_config_ap(s
+               } while (nexttbtt < tsftu);
+       }
+-      intval |= ATH9K_BEACON_ENA;
+-
+       if (priv->op_flags & OP_ENABLE_BEACON)
+               imask |= ATH9K_INT_SWBA;
+@@ -178,7 +176,7 @@ static void ath9k_htc_beacon_config_ap(s
+               bss_conf->beacon_interval, nexttbtt, imask);
+       WMI_CMD(WMI_DISABLE_INTR_CMDID);
+-      ath9k_hw_beaconinit(priv->ah, nexttbtt, intval);
++      ath9k_hw_beaconinit(priv->ah, TU_TO_USEC(nexttbtt), TU_TO_USEC(intval));
+       priv->bmiss_cnt = 0;
+       htc_imask = cpu_to_be32(imask);
+       WMI_CMD_BUF(WMI_ENABLE_INTR_CMDID, &htc_imask);
+@@ -207,7 +205,6 @@ static void ath9k_htc_beacon_config_adho
+               nexttbtt += intval;
+       } while (nexttbtt < tsftu);
+-      intval |= ATH9K_BEACON_ENA;
+       if (priv->op_flags & OP_ENABLE_BEACON)
+               imask |= ATH9K_INT_SWBA;
+@@ -216,7 +213,7 @@ static void ath9k_htc_beacon_config_adho
+               bss_conf->beacon_interval, nexttbtt, imask);
+       WMI_CMD(WMI_DISABLE_INTR_CMDID);
+-      ath9k_hw_beaconinit(priv->ah, nexttbtt, intval);
++      ath9k_hw_beaconinit(priv->ah, TU_TO_USEC(nexttbtt), TU_TO_USEC(intval));
+       priv->bmiss_cnt = 0;
+       htc_imask = cpu_to_be32(imask);
+       WMI_CMD_BUF(WMI_ENABLE_INTR_CMDID, &htc_imask);
+--- a/drivers/net/wireless/ath/ath9k/hw.c
++++ b/drivers/net/wireless/ath/ath9k/hw.c
+@@ -1697,21 +1697,15 @@ void ath9k_hw_beaconinit(struct ath_hw *
+       case NL80211_IFTYPE_MESH_POINT:
+               REG_SET_BIT(ah, AR_TXCFG,
+                           AR_TXCFG_ADHOC_BEACON_ATIM_TX_POLICY);
+-              REG_WRITE(ah, AR_NEXT_NDP_TIMER,
+-                        TU_TO_USEC(next_beacon +
+-                                   (ah->atim_window ? ah->
+-                                    atim_window : 1)));
++              REG_WRITE(ah, AR_NEXT_NDP_TIMER, next_beacon +
++                        TU_TO_USEC(ah->atim_window ? ah->atim_window : 1));
+               flags |= AR_NDP_TIMER_EN;
+       case NL80211_IFTYPE_AP:
+-              REG_WRITE(ah, AR_NEXT_TBTT_TIMER, TU_TO_USEC(next_beacon));
+-              REG_WRITE(ah, AR_NEXT_DMA_BEACON_ALERT,
+-                        TU_TO_USEC(next_beacon -
+-                                   ah->config.
+-                                   dma_beacon_response_time));
+-              REG_WRITE(ah, AR_NEXT_SWBA,
+-                        TU_TO_USEC(next_beacon -
+-                                   ah->config.
+-                                   sw_beacon_response_time));
++              REG_WRITE(ah, AR_NEXT_TBTT_TIMER, next_beacon);
++              REG_WRITE(ah, AR_NEXT_DMA_BEACON_ALERT, next_beacon -
++                        TU_TO_USEC(ah->config.dma_beacon_response_time));
++              REG_WRITE(ah, AR_NEXT_SWBA, next_beacon -
++                        TU_TO_USEC(ah->config.sw_beacon_response_time));
+               flags |=
+                       AR_TBTT_TIMER_EN | AR_DBA_TIMER_EN | AR_SWBA_TIMER_EN;
+               break;
+@@ -1723,18 +1717,13 @@ void ath9k_hw_beaconinit(struct ath_hw *
+               break;
+       }
+-      REG_WRITE(ah, AR_BEACON_PERIOD, TU_TO_USEC(beacon_period));
+-      REG_WRITE(ah, AR_DMA_BEACON_PERIOD, TU_TO_USEC(beacon_period));
+-      REG_WRITE(ah, AR_SWBA_PERIOD, TU_TO_USEC(beacon_period));
+-      REG_WRITE(ah, AR_NDP_PERIOD, TU_TO_USEC(beacon_period));
++      REG_WRITE(ah, AR_BEACON_PERIOD, beacon_period);
++      REG_WRITE(ah, AR_DMA_BEACON_PERIOD, beacon_period);
++      REG_WRITE(ah, AR_SWBA_PERIOD, beacon_period);
++      REG_WRITE(ah, AR_NDP_PERIOD, beacon_period);
+       REGWRITE_BUFFER_FLUSH(ah);
+-      beacon_period &= ~ATH9K_BEACON_ENA;
+-      if (beacon_period & ATH9K_BEACON_RESET_TSF) {
+-              ath9k_hw_reset_tsf(ah);
+-      }
+-
+       REG_SET_BIT(ah, AR_TIMER_MODE, flags);
+ }
+ EXPORT_SYMBOL(ath9k_hw_beaconinit);
+@@ -2395,10 +2384,11 @@ static u32 rightmost_index(struct ath_ge
+       return timer_table->gen_timer_index[b];
+ }
+-static u32 ath9k_hw_gettsf32(struct ath_hw *ah)
++u32 ath9k_hw_gettsf32(struct ath_hw *ah)
+ {
+       return REG_READ(ah, AR_TSF_L32);
+ }
++EXPORT_SYMBOL(ath9k_hw_gettsf32);
+ struct ath_gen_timer *ath_gen_timer_alloc(struct ath_hw *ah,
+                                         void (*trigger)(void *),
+--- a/drivers/net/wireless/ath/ath9k/hw.h
++++ b/drivers/net/wireless/ath/ath9k/hw.h
+@@ -416,8 +416,6 @@ struct ath9k_beacon_state {
+       u32 bs_nextdtim;
+       u32 bs_intval;
+ #define ATH9K_BEACON_PERIOD       0x0000ffff
+-#define ATH9K_BEACON_ENA          0x00800000
+-#define ATH9K_BEACON_RESET_TSF    0x01000000
+ #define ATH9K_TSFOOR_THRESHOLD    0x00004240 /* 16k us */
+       u32 bs_dtimperiod;
+       u16 bs_cfpperiod;
+@@ -930,6 +928,7 @@ void ath9k_hw_setopmode(struct ath_hw *a
+ void ath9k_hw_setmcastfilter(struct ath_hw *ah, u32 filter0, u32 filter1);
+ void ath9k_hw_setbssidmask(struct ath_hw *ah);
+ void ath9k_hw_write_associd(struct ath_hw *ah);
++u32 ath9k_hw_gettsf32(struct ath_hw *ah);
+ u64 ath9k_hw_gettsf64(struct ath_hw *ah);
+ void ath9k_hw_settsf64(struct ath_hw *ah, u64 tsf64);
+ void ath9k_hw_reset_tsf(struct ath_hw *ah);
diff --git a/package/mac80211/patches/310-pending_work.patch b/package/mac80211/patches/310-pending_work.patch
deleted file mode 100644 (file)
index 0c07a8d..0000000
+++ /dev/null
@@ -1,1441 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/ath9k.h
-+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
-@@ -189,7 +189,6 @@ struct ath_txq {
-       u32 axq_ampdu_depth;
-       bool stopped;
-       bool axq_tx_inprogress;
--      bool txq_flush_inprogress;
-       struct list_head axq_acq;
-       struct list_head txq_fifo[ATH_TXFIFO_DEPTH];
-       struct list_head txq_fifo_pending;
---- a/drivers/net/wireless/ath/ath9k/beacon.c
-+++ b/drivers/net/wireless/ath/ath9k/beacon.c
-@@ -373,6 +373,7 @@ void ath_beacon_tasklet(unsigned long da
-                       ath_dbg(common, ATH_DBG_BSTUCK,
-                               "missed %u consecutive beacons\n",
-                               sc->beacon.bmisscnt);
-+                      ath9k_hw_stop_dma_queue(ah, sc->beacon.beaconq);
-                       ath9k_hw_bstuck_nfcal(ah);
-               } else if (sc->beacon.bmisscnt >= BSTUCK_THRESH) {
-                       ath_dbg(common, ATH_DBG_BSTUCK,
-@@ -450,16 +451,6 @@ void ath_beacon_tasklet(unsigned long da
-               sc->beacon.updateslot = OK;
-       }
-       if (bfaddr != 0) {
--              /*
--               * Stop any current dma and put the new frame(s) on the queue.
--               * This should never fail since we check above that no frames
--               * are still pending on the queue.
--               */
--              if (!ath9k_hw_stoptxdma(ah, sc->beacon.beaconq)) {
--                      ath_err(common, "beacon queue %u did not stop?\n",
--                              sc->beacon.beaconq);
--              }
--
-               /* NB: cabq traffic should already be queued and primed */
-               ath9k_hw_puttxbuf(ah, sc->beacon.beaconq, bfaddr);
-               ath9k_hw_txstart(ah, sc->beacon.beaconq);
-@@ -780,7 +771,7 @@ void ath9k_set_beaconing_status(struct a
-               ah->imask &= ~ATH9K_INT_SWBA;
-               ath9k_hw_set_interrupts(ah, ah->imask);
-               tasklet_kill(&sc->bcon_tasklet);
--              ath9k_hw_stoptxdma(ah, sc->beacon.beaconq);
-+              ath9k_hw_stop_dma_queue(ah, sc->beacon.beaconq);
-       }
-       ath9k_ps_restore(sc);
- }
---- a/drivers/net/wireless/ath/ath9k/hw.h
-+++ b/drivers/net/wireless/ath/ath9k/hw.h
-@@ -95,9 +95,9 @@
- #define REG_READ_FIELD(_a, _r, _f) \
-       (((REG_READ(_a, _r) & _f) >> _f##_S))
- #define REG_SET_BIT(_a, _r, _f) \
--      REG_WRITE(_a, _r, REG_READ(_a, _r) | _f)
-+      REG_WRITE(_a, _r, REG_READ(_a, _r) | (_f))
- #define REG_CLR_BIT(_a, _r, _f) \
--      REG_WRITE(_a, _r, REG_READ(_a, _r) & ~_f)
-+      REG_WRITE(_a, _r, REG_READ(_a, _r) & ~(_f))
- #define DO_DELAY(x) do {                      \
-               if ((++(x) % 64) == 0)          \
---- a/drivers/net/wireless/ath/ath9k/mac.c
-+++ b/drivers/net/wireless/ath/ath9k/mac.c
-@@ -143,84 +143,59 @@ bool ath9k_hw_updatetxtriglevel(struct a
- }
- EXPORT_SYMBOL(ath9k_hw_updatetxtriglevel);
--bool ath9k_hw_stoptxdma(struct ath_hw *ah, u32 q)
-+void ath9k_hw_abort_tx_dma(struct ath_hw *ah)
- {
--#define ATH9K_TX_STOP_DMA_TIMEOUT     4000    /* usec */
--#define ATH9K_TIME_QUANTUM            100     /* usec */
--      struct ath_common *common = ath9k_hw_common(ah);
--      struct ath9k_hw_capabilities *pCap = &ah->caps;
--      struct ath9k_tx_queue_info *qi;
--      u32 tsfLow, j, wait;
--      u32 wait_time = ATH9K_TX_STOP_DMA_TIMEOUT / ATH9K_TIME_QUANTUM;
-+      int i, q;
--      if (q >= pCap->total_queues) {
--              ath_dbg(common, ATH_DBG_QUEUE,
--                      "Stopping TX DMA, invalid queue: %u\n", q);
--              return false;
--      }
-+      REG_WRITE(ah, AR_Q_TXD, AR_Q_TXD_M);
--      qi = &ah->txq[q];
--      if (qi->tqi_type == ATH9K_TX_QUEUE_INACTIVE) {
--              ath_dbg(common, ATH_DBG_QUEUE,
--                      "Stopping TX DMA, inactive queue: %u\n", q);
--              return false;
--      }
-+      REG_SET_BIT(ah, AR_PCU_MISC, AR_PCU_FORCE_QUIET_COLL | AR_PCU_CLEAR_VMF);
-+      REG_SET_BIT(ah, AR_DIAG_SW, AR_DIAG_FORCE_CH_IDLE_HIGH);
-+      REG_SET_BIT(ah, AR_D_GBL_IFS_MISC, AR_D_GBL_IFS_MISC_IGNORE_BACKOFF);
--      REG_WRITE(ah, AR_Q_TXD, 1 << q);
-+      for (q = 0; q < AR_NUM_QCU; q++) {
-+              for (i = 0; i < 1000; i++) {
-+                      if (i)
-+                              udelay(5);
--      for (wait = wait_time; wait != 0; wait--) {
--              if (ath9k_hw_numtxpending(ah, q) == 0)
--                      break;
--              udelay(ATH9K_TIME_QUANTUM);
-+                      if (!ath9k_hw_numtxpending(ah, q))
-+                              break;
-+              }
-       }
--      if (ath9k_hw_numtxpending(ah, q)) {
--              ath_dbg(common, ATH_DBG_QUEUE,
--                      "%s: Num of pending TX Frames %d on Q %d\n",
--                      __func__, ath9k_hw_numtxpending(ah, q), q);
--
--              for (j = 0; j < 2; j++) {
--                      tsfLow = REG_READ(ah, AR_TSF_L32);
--                      REG_WRITE(ah, AR_QUIET2,
--                                SM(10, AR_QUIET2_QUIET_DUR));
--                      REG_WRITE(ah, AR_QUIET_PERIOD, 100);
--                      REG_WRITE(ah, AR_NEXT_QUIET_TIMER, tsfLow >> 10);
--                      REG_SET_BIT(ah, AR_TIMER_MODE,
--                                     AR_QUIET_TIMER_EN);
--
--                      if ((REG_READ(ah, AR_TSF_L32) >> 10) == (tsfLow >> 10))
--                              break;
-+      REG_CLR_BIT(ah, AR_PCU_MISC, AR_PCU_FORCE_QUIET_COLL | AR_PCU_CLEAR_VMF);
-+      REG_CLR_BIT(ah, AR_DIAG_SW, AR_DIAG_FORCE_CH_IDLE_HIGH);
-+      REG_CLR_BIT(ah, AR_D_GBL_IFS_MISC, AR_D_GBL_IFS_MISC_IGNORE_BACKOFF);
--                      ath_dbg(common, ATH_DBG_QUEUE,
--                              "TSF has moved while trying to set quiet time TSF: 0x%08x\n",
--                              tsfLow);
--              }
-+      REG_WRITE(ah, AR_Q_TXD, 0);
-+}
-+EXPORT_SYMBOL(ath9k_hw_abort_tx_dma);
--              REG_SET_BIT(ah, AR_DIAG_SW, AR_DIAG_FORCE_CH_IDLE_HIGH);
-+bool ath9k_hw_stop_dma_queue(struct ath_hw *ah, u32 q)
-+{
-+#define ATH9K_TX_STOP_DMA_TIMEOUT     1000    /* usec */
-+#define ATH9K_TIME_QUANTUM            100     /* usec */
-+      int wait_time = ATH9K_TX_STOP_DMA_TIMEOUT / ATH9K_TIME_QUANTUM;
-+      int wait;
--              udelay(200);
--              REG_CLR_BIT(ah, AR_TIMER_MODE, AR_QUIET_TIMER_EN);
-+      REG_WRITE(ah, AR_Q_TXD, 1 << q);
--              wait = wait_time;
--              while (ath9k_hw_numtxpending(ah, q)) {
--                      if ((--wait) == 0) {
--                              ath_err(common,
--                                      "Failed to stop TX DMA in 100 msec after killing last frame\n");
--                              break;
--                      }
-+      for (wait = wait_time; wait != 0; wait--) {
-+              if (wait != wait_time)
-                       udelay(ATH9K_TIME_QUANTUM);
--              }
--              REG_CLR_BIT(ah, AR_DIAG_SW, AR_DIAG_FORCE_CH_IDLE_HIGH);
-+              if (ath9k_hw_numtxpending(ah, q) == 0)
-+                      break;
-       }
-       REG_WRITE(ah, AR_Q_TXD, 0);
-+
-       return wait != 0;
- #undef ATH9K_TX_STOP_DMA_TIMEOUT
- #undef ATH9K_TIME_QUANTUM
- }
--EXPORT_SYMBOL(ath9k_hw_stoptxdma);
-+EXPORT_SYMBOL(ath9k_hw_stop_dma_queue);
- void ath9k_hw_gettxintrtxqs(struct ath_hw *ah, u32 *txqs)
- {
---- a/drivers/net/wireless/ath/ath9k/mac.h
-+++ b/drivers/net/wireless/ath/ath9k/mac.h
-@@ -676,7 +676,8 @@ void ath9k_hw_txstart(struct ath_hw *ah,
- void ath9k_hw_cleartxdesc(struct ath_hw *ah, void *ds);
- u32 ath9k_hw_numtxpending(struct ath_hw *ah, u32 q);
- bool ath9k_hw_updatetxtriglevel(struct ath_hw *ah, bool bIncTrigLevel);
--bool ath9k_hw_stoptxdma(struct ath_hw *ah, u32 q);
-+bool ath9k_hw_stop_dma_queue(struct ath_hw *ah, u32 q);
-+void ath9k_hw_abort_tx_dma(struct ath_hw *ah);
- void ath9k_hw_gettxintrtxqs(struct ath_hw *ah, u32 *txqs);
- bool ath9k_hw_set_txq_props(struct ath_hw *ah, int q,
-                           const struct ath9k_tx_queue_info *qinfo);
---- a/drivers/net/wireless/ath/ath9k/main.c
-+++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -2128,56 +2128,42 @@ static void ath9k_set_coverage_class(str
- static void ath9k_flush(struct ieee80211_hw *hw, bool drop)
- {
--#define ATH_FLUSH_TIMEOUT     60 /* ms */
-       struct ath_softc *sc = hw->priv;
--      struct ath_txq *txq = NULL;
--      struct ath_hw *ah = sc->sc_ah;
--      struct ath_common *common = ath9k_hw_common(ah);
--      int i, j, npend = 0;
-+      int timeout = 200; /* ms */
-+      int i, j;
-+      ath9k_ps_wakeup(sc);
-       mutex_lock(&sc->mutex);
-       cancel_delayed_work_sync(&sc->tx_complete_work);
--      for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) {
--              if (!ATH_TXQ_SETUP(sc, i))
--                      continue;
--              txq = &sc->tx.txq[i];
--
--              if (!drop) {
--                      for (j = 0; j < ATH_FLUSH_TIMEOUT; j++) {
--                              if (!ath9k_has_pending_frames(sc, txq))
--                                      break;
--                              usleep_range(1000, 2000);
--                      }
--              }
-+      if (drop)
-+              timeout = 1;
-+
-+      for (j = 0; j < timeout; j++) {
-+              int npend = 0;
-+
-+              if (j)
-+                      usleep_range(1000, 2000);
--              if (drop || ath9k_has_pending_frames(sc, txq)) {
--                      ath_dbg(common, ATH_DBG_QUEUE, "Drop frames from hw queue:%d\n",
--                              txq->axq_qnum);
--                      spin_lock_bh(&txq->axq_lock);
--                      txq->txq_flush_inprogress = true;
--                      spin_unlock_bh(&txq->axq_lock);
--
--                      ath9k_ps_wakeup(sc);
--                      ath9k_hw_stoptxdma(ah, txq->axq_qnum);
--                      npend = ath9k_hw_numtxpending(ah, txq->axq_qnum);
--                      ath9k_ps_restore(sc);
--                      if (npend)
--                              break;
-+              for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) {
-+                      if (!ATH_TXQ_SETUP(sc, i))
-+                              continue;
--                      ath_draintxq(sc, txq, false);
--                      txq->txq_flush_inprogress = false;
-+                      npend += ath9k_has_pending_frames(sc, &sc->tx.txq[i]);
-               }
-+
-+              if (!npend)
-+                  goto out;
-       }
--      if (npend) {
-+      if (!ath_drain_all_txq(sc, false))
-               ath_reset(sc, false);
--              txq->txq_flush_inprogress = false;
--      }
-+out:
-       ieee80211_queue_delayed_work(hw, &sc->tx_complete_work, 0);
-       mutex_unlock(&sc->mutex);
-+      ath9k_ps_restore(sc);
- }
- struct ieee80211_ops ath9k_ops = {
---- a/drivers/net/wireless/ath/ath9k/xmit.c
-+++ b/drivers/net/wireless/ath/ath9k/xmit.c
-@@ -166,7 +166,7 @@ static void ath_tx_flush_tid(struct ath_
-               fi = get_frame_info(bf->bf_mpdu);
-               if (fi->retries) {
-                       ath_tx_update_baw(sc, tid, fi->seqno);
--                      ath_tx_complete_buf(sc, bf, txq, &bf_head, &ts, 0, 0);
-+                      ath_tx_complete_buf(sc, bf, txq, &bf_head, &ts, 0, 1);
-               } else {
-                       ath_tx_send_normal(sc, txq, NULL, &bf_head);
-               }
-@@ -1194,16 +1194,14 @@ bool ath_drain_all_txq(struct ath_softc 
-       if (sc->sc_flags & SC_OP_INVALID)
-               return true;
--      /* Stop beacon queue */
--      ath9k_hw_stoptxdma(sc->sc_ah, sc->beacon.beaconq);
-+      ath9k_hw_abort_tx_dma(ah);
--      /* Stop data queues */
-+      /* Check if any queue remains active */
-       for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) {
--              if (ATH_TXQ_SETUP(sc, i)) {
--                      txq = &sc->tx.txq[i];
--                      ath9k_hw_stoptxdma(ah, txq->axq_qnum);
--                      npend += ath9k_hw_numtxpending(ah, txq->axq_qnum);
--              }
-+              if (!ATH_TXQ_SETUP(sc, i))
-+                      continue;
-+
-+              npend += ath9k_hw_numtxpending(ah, sc->tx.txq[i].axq_qnum);
-       }
-       if (npend)
-@@ -2014,8 +2012,7 @@ static void ath_tx_processq(struct ath_s
-               spin_lock_bh(&txq->axq_lock);
-               if (list_empty(&txq->axq_q)) {
-                       txq->axq_link = NULL;
--                      if (sc->sc_flags & SC_OP_TXAGGR &&
--                          !txq->txq_flush_inprogress)
-+                      if (sc->sc_flags & SC_OP_TXAGGR)
-                               ath_txq_schedule(sc, txq);
-                       spin_unlock_bh(&txq->axq_lock);
-                       break;
-@@ -2096,7 +2093,7 @@ static void ath_tx_processq(struct ath_s
-               spin_lock_bh(&txq->axq_lock);
--              if (sc->sc_flags & SC_OP_TXAGGR && !txq->txq_flush_inprogress)
-+              if (sc->sc_flags & SC_OP_TXAGGR)
-                       ath_txq_schedule(sc, txq);
-               spin_unlock_bh(&txq->axq_lock);
-       }
-@@ -2267,18 +2264,17 @@ void ath_tx_edma_tasklet(struct ath_soft
-               spin_lock_bh(&txq->axq_lock);
--              if (!txq->txq_flush_inprogress) {
--                      if (!list_empty(&txq->txq_fifo_pending)) {
--                              INIT_LIST_HEAD(&bf_head);
--                              bf = list_first_entry(&txq->txq_fifo_pending,
--                                                    struct ath_buf, list);
--                              list_cut_position(&bf_head,
--                                                &txq->txq_fifo_pending,
--                                                &bf->bf_lastbf->list);
--                              ath_tx_txqaddbuf(sc, txq, &bf_head);
--                      } else if (sc->sc_flags & SC_OP_TXAGGR)
--                              ath_txq_schedule(sc, txq);
--              }
-+              if (!list_empty(&txq->txq_fifo_pending)) {
-+                      INIT_LIST_HEAD(&bf_head);
-+                      bf = list_first_entry(&txq->txq_fifo_pending,
-+                                            struct ath_buf, list);
-+                      list_cut_position(&bf_head,
-+                                        &txq->txq_fifo_pending,
-+                                        &bf->bf_lastbf->list);
-+                      ath_tx_txqaddbuf(sc, txq, &bf_head);
-+              } else if (sc->sc_flags & SC_OP_TXAGGR)
-+                      ath_txq_schedule(sc, txq);
-+
-               spin_unlock_bh(&txq->axq_lock);
-       }
- }
---- a/net/mac80211/chan.c
-+++ b/net/mac80211/chan.c
-@@ -77,6 +77,9 @@ bool ieee80211_set_channel_type(struct i
-               switch (tmp->vif.bss_conf.channel_type) {
-               case NL80211_CHAN_NO_HT:
-               case NL80211_CHAN_HT20:
-+                      if (superchan > tmp->vif.bss_conf.channel_type)
-+                              break;
-+
-                       superchan = tmp->vif.bss_conf.channel_type;
-                       break;
-               case NL80211_CHAN_HT40PLUS:
---- a/drivers/net/wireless/ath/ath9k/ar9003_hw.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_hw.c
-@@ -88,66 +88,6 @@ static void ar9003_hw_init_mode_regs(str
-                               ar9485_1_1_pcie_phy_clkreq_disable_L1,
-                               ARRAY_SIZE(ar9485_1_1_pcie_phy_clkreq_disable_L1),
-                               2);
--      } else if (AR_SREV_9485(ah)) {
--              /* mac */
--              INIT_INI_ARRAY(&ah->iniMac[ATH_INI_PRE], NULL, 0, 0);
--              INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE],
--                              ar9485_1_0_mac_core,
--                              ARRAY_SIZE(ar9485_1_0_mac_core), 2);
--              INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST],
--                              ar9485_1_0_mac_postamble,
--                              ARRAY_SIZE(ar9485_1_0_mac_postamble), 5);
--
--              /* bb */
--              INIT_INI_ARRAY(&ah->iniBB[ATH_INI_PRE], ar9485_1_0,
--                              ARRAY_SIZE(ar9485_1_0), 2);
--              INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE],
--                              ar9485_1_0_baseband_core,
--                              ARRAY_SIZE(ar9485_1_0_baseband_core), 2);
--              INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST],
--                              ar9485_1_0_baseband_postamble,
--                              ARRAY_SIZE(ar9485_1_0_baseband_postamble), 5);
--
--              /* radio */
--              INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_PRE], NULL, 0, 0);
--              INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE],
--                              ar9485_1_0_radio_core,
--                              ARRAY_SIZE(ar9485_1_0_radio_core), 2);
--              INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_POST],
--                              ar9485_1_0_radio_postamble,
--                              ARRAY_SIZE(ar9485_1_0_radio_postamble), 2);
--
--              /* soc */
--              INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE],
--                              ar9485_1_0_soc_preamble,
--                              ARRAY_SIZE(ar9485_1_0_soc_preamble), 2);
--              INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_CORE], NULL, 0, 0);
--              INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST], NULL, 0, 0);
--
--              /* rx/tx gain */
--              INIT_INI_ARRAY(&ah->iniModesRxGain,
--                              ar9485Common_rx_gain_1_0,
--                              ARRAY_SIZE(ar9485Common_rx_gain_1_0), 2);
--              INIT_INI_ARRAY(&ah->iniModesTxGain,
--                              ar9485Modes_lowest_ob_db_tx_gain_1_0,
--                              ARRAY_SIZE(ar9485Modes_lowest_ob_db_tx_gain_1_0),
--                              5);
--
--              /* Load PCIE SERDES settings from INI */
--
--              /* Awake Setting */
--
--              INIT_INI_ARRAY(&ah->iniPcieSerdes,
--                              ar9485_1_0_pcie_phy_pll_on_clkreq_disable_L1,
--                              ARRAY_SIZE(ar9485_1_0_pcie_phy_pll_on_clkreq_disable_L1),
--                              2);
--
--              /* Sleep Setting */
--
--              INIT_INI_ARRAY(&ah->iniPcieSerdesLowPower,
--                              ar9485_1_0_pcie_phy_pll_on_clkreq_disable_L1,
--                              ARRAY_SIZE(ar9485_1_0_pcie_phy_pll_on_clkreq_disable_L1),
--                              2);
-       } else {
-               /* mac */
-               INIT_INI_ARRAY(&ah->iniMac[ATH_INI_PRE], NULL, 0, 0);
-@@ -228,11 +168,6 @@ static void ar9003_tx_gain_table_apply(s
-                                      ar9485_modes_lowest_ob_db_tx_gain_1_1,
-                                      ARRAY_SIZE(ar9485_modes_lowest_ob_db_tx_gain_1_1),
-                                      5);
--              else if (AR_SREV_9485(ah))
--                      INIT_INI_ARRAY(&ah->iniModesTxGain,
--                                     ar9485Modes_lowest_ob_db_tx_gain_1_0,
--                                     ARRAY_SIZE(ar9485Modes_lowest_ob_db_tx_gain_1_0),
--                                     5);
-               else
-                       INIT_INI_ARRAY(&ah->iniModesTxGain,
-                                      ar9300Modes_lowest_ob_db_tx_gain_table_2p2,
-@@ -245,11 +180,6 @@ static void ar9003_tx_gain_table_apply(s
-                                      ar9485Modes_high_ob_db_tx_gain_1_1,
-                                      ARRAY_SIZE(ar9485Modes_high_ob_db_tx_gain_1_1),
-                                      5);
--              else if (AR_SREV_9485(ah))
--                      INIT_INI_ARRAY(&ah->iniModesTxGain,
--                                     ar9485Modes_high_ob_db_tx_gain_1_0,
--                                     ARRAY_SIZE(ar9485Modes_high_ob_db_tx_gain_1_0),
--                                     5);
-               else
-                       INIT_INI_ARRAY(&ah->iniModesTxGain,
-                                      ar9300Modes_high_ob_db_tx_gain_table_2p2,
-@@ -262,11 +192,6 @@ static void ar9003_tx_gain_table_apply(s
-                                      ar9485Modes_low_ob_db_tx_gain_1_1,
-                                      ARRAY_SIZE(ar9485Modes_low_ob_db_tx_gain_1_1),
-                                      5);
--              else if (AR_SREV_9485(ah))
--                      INIT_INI_ARRAY(&ah->iniModesTxGain,
--                                     ar9485Modes_low_ob_db_tx_gain_1_0,
--                                     ARRAY_SIZE(ar9485Modes_low_ob_db_tx_gain_1_0),
--                                     5);
-               else
-                       INIT_INI_ARRAY(&ah->iniModesTxGain,
-                                      ar9300Modes_low_ob_db_tx_gain_table_2p2,
-@@ -279,11 +204,6 @@ static void ar9003_tx_gain_table_apply(s
-                                      ar9485Modes_high_power_tx_gain_1_1,
-                                      ARRAY_SIZE(ar9485Modes_high_power_tx_gain_1_1),
-                                      5);
--              else if (AR_SREV_9485(ah))
--                      INIT_INI_ARRAY(&ah->iniModesTxGain,
--                                     ar9485Modes_high_power_tx_gain_1_0,
--                                     ARRAY_SIZE(ar9485Modes_high_power_tx_gain_1_0),
--                                     5);
-               else
-                       INIT_INI_ARRAY(&ah->iniModesTxGain,
-                                      ar9300Modes_high_power_tx_gain_table_2p2,
-@@ -303,11 +223,6 @@ static void ar9003_rx_gain_table_apply(s
-                                      ar9485_common_rx_gain_1_1,
-                                      ARRAY_SIZE(ar9485_common_rx_gain_1_1),
-                                      2);
--              else if (AR_SREV_9485(ah))
--                      INIT_INI_ARRAY(&ah->iniModesRxGain,
--                                     ar9485Common_rx_gain_1_0,
--                                     ARRAY_SIZE(ar9485Common_rx_gain_1_0),
--                                     2);
-               else
-                       INIT_INI_ARRAY(&ah->iniModesRxGain,
-                                      ar9300Common_rx_gain_table_2p2,
-@@ -320,11 +235,6 @@ static void ar9003_rx_gain_table_apply(s
-                                      ar9485Common_wo_xlna_rx_gain_1_1,
-                                      ARRAY_SIZE(ar9485Common_wo_xlna_rx_gain_1_1),
-                                      2);
--              else if (AR_SREV_9485(ah))
--                      INIT_INI_ARRAY(&ah->iniModesRxGain,
--                                     ar9485Common_wo_xlna_rx_gain_1_0,
--                                     ARRAY_SIZE(ar9485Common_wo_xlna_rx_gain_1_0),
--                                     2);
-               else
-                       INIT_INI_ARRAY(&ah->iniModesRxGain,
-                                      ar9300Common_wo_xlna_rx_gain_table_2p2,
---- a/drivers/net/wireless/ath/ath9k/ar9485_initvals.h
-+++ b/drivers/net/wireless/ath/ath9k/ar9485_initvals.h
-@@ -17,931 +17,6 @@
- #ifndef INITVALS_9485_H
- #define INITVALS_9485_H
--static const u32 ar9485Common_1_0[][2] = {
--      /*   Addr     allmodes */
--      {0x00007010, 0x00000022},
--      {0x00007020, 0x00000000},
--      {0x00007034, 0x00000002},
--      {0x00007038, 0x000004c2},
--};
--
--static const u32 ar9485_1_0_mac_postamble[][5] = {
--      /* Addr     5G_HT20     5G_HT40     2G_HT40     2G_HT20    */
--      {0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160},
--      {0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c},
--      {0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38},
--      {0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00},
--      {0x0000801c, 0x128d8027, 0x128d804f, 0x12e00057, 0x12e0002b},
--      {0x00008120, 0x08f04800, 0x08f04800, 0x08f04810, 0x08f04810},
--      {0x000081d0, 0x00003210, 0x00003210, 0x0000320a, 0x0000320a},
--      {0x00008318, 0x00003e80, 0x00007d00, 0x00006880, 0x00003440},
--};
--
--static const u32 ar9485_1_0_pcie_phy_pll_on_clkreq_disable_L1[][2] = {
--      /*   Addr     allmodes */
--      {0x00018c00, 0x10212e5e},
--      {0x00018c04, 0x000801d8},
--      {0x00018c08, 0x0000580c},
--};
--
--static const u32 ar9485Common_wo_xlna_rx_gain_1_0[][2] = {
--      /*   Addr     allmodes */
--      {0x0000a000, 0x00010000},
--      {0x0000a004, 0x00030002},
--      {0x0000a008, 0x00050004},
--      {0x0000a00c, 0x00810080},
--      {0x0000a010, 0x01800082},
--      {0x0000a014, 0x01820181},
--      {0x0000a018, 0x01840183},
--      {0x0000a01c, 0x01880185},
--      {0x0000a020, 0x018a0189},
--      {0x0000a024, 0x02850284},
--      {0x0000a028, 0x02890288},
--      {0x0000a02c, 0x03850384},
--      {0x0000a030, 0x03890388},
--      {0x0000a034, 0x038b038a},
--      {0x0000a038, 0x038d038c},
--      {0x0000a03c, 0x03910390},
--      {0x0000a040, 0x03930392},
--      {0x0000a044, 0x03950394},
--      {0x0000a048, 0x00000396},
--      {0x0000a04c, 0x00000000},
--      {0x0000a050, 0x00000000},
--      {0x0000a054, 0x00000000},
--      {0x0000a058, 0x00000000},
--      {0x0000a05c, 0x00000000},
--      {0x0000a060, 0x00000000},
--      {0x0000a064, 0x00000000},
--      {0x0000a068, 0x00000000},
--      {0x0000a06c, 0x00000000},
--      {0x0000a070, 0x00000000},
--      {0x0000a074, 0x00000000},
--      {0x0000a078, 0x00000000},
--      {0x0000a07c, 0x00000000},
--      {0x0000a080, 0x28282828},
--      {0x0000a084, 0x28282828},
--      {0x0000a088, 0x28282828},
--      {0x0000a08c, 0x28282828},
--      {0x0000a090, 0x28282828},
--      {0x0000a094, 0x21212128},
--      {0x0000a098, 0x171c1c1c},
--      {0x0000a09c, 0x02020212},
--      {0x0000a0a0, 0x00000202},
--      {0x0000a0a4, 0x00000000},
--      {0x0000a0a8, 0x00000000},
--      {0x0000a0ac, 0x00000000},
--      {0x0000a0b0, 0x00000000},
--      {0x0000a0b4, 0x00000000},
--      {0x0000a0b8, 0x00000000},
--      {0x0000a0bc, 0x00000000},
--      {0x0000a0c0, 0x001f0000},
--      {0x0000a0c4, 0x111f1100},
--      {0x0000a0c8, 0x111d111e},
--      {0x0000a0cc, 0x111b111c},
--      {0x0000a0d0, 0x22032204},
--      {0x0000a0d4, 0x22012202},
--      {0x0000a0d8, 0x221f2200},
--      {0x0000a0dc, 0x221d221e},
--      {0x0000a0e0, 0x33013302},
--      {0x0000a0e4, 0x331f3300},
--      {0x0000a0e8, 0x4402331e},
--      {0x0000a0ec, 0x44004401},
--      {0x0000a0f0, 0x441e441f},
--      {0x0000a0f4, 0x55015502},
--      {0x0000a0f8, 0x551f5500},
--      {0x0000a0fc, 0x6602551e},
--      {0x0000a100, 0x66006601},
--      {0x0000a104, 0x661e661f},
--      {0x0000a108, 0x7703661d},
--      {0x0000a10c, 0x77017702},
--      {0x0000a110, 0x00007700},
--      {0x0000a114, 0x00000000},
--      {0x0000a118, 0x00000000},
--      {0x0000a11c, 0x00000000},
--      {0x0000a120, 0x00000000},
--      {0x0000a124, 0x00000000},
--      {0x0000a128, 0x00000000},
--      {0x0000a12c, 0x00000000},
--      {0x0000a130, 0x00000000},
--      {0x0000a134, 0x00000000},
--      {0x0000a138, 0x00000000},
--      {0x0000a13c, 0x00000000},
--      {0x0000a140, 0x001f0000},
--      {0x0000a144, 0x111f1100},
--      {0x0000a148, 0x111d111e},
--      {0x0000a14c, 0x111b111c},
--      {0x0000a150, 0x22032204},
--      {0x0000a154, 0x22012202},
--      {0x0000a158, 0x221f2200},
--      {0x0000a15c, 0x221d221e},
--      {0x0000a160, 0x33013302},
--      {0x0000a164, 0x331f3300},
--      {0x0000a168, 0x4402331e},
--      {0x0000a16c, 0x44004401},
--      {0x0000a170, 0x441e441f},
--      {0x0000a174, 0x55015502},
--      {0x0000a178, 0x551f5500},
--      {0x0000a17c, 0x6602551e},
--      {0x0000a180, 0x66006601},
--      {0x0000a184, 0x661e661f},
--      {0x0000a188, 0x7703661d},
--      {0x0000a18c, 0x77017702},
--      {0x0000a190, 0x00007700},
--      {0x0000a194, 0x00000000},
--      {0x0000a198, 0x00000000},
--      {0x0000a19c, 0x00000000},
--      {0x0000a1a0, 0x00000000},
--      {0x0000a1a4, 0x00000000},
--      {0x0000a1a8, 0x00000000},
--      {0x0000a1ac, 0x00000000},
--      {0x0000a1b0, 0x00000000},
--      {0x0000a1b4, 0x00000000},
--      {0x0000a1b8, 0x00000000},
--      {0x0000a1bc, 0x00000000},
--      {0x0000a1c0, 0x00000000},
--      {0x0000a1c4, 0x00000000},
--      {0x0000a1c8, 0x00000000},
--      {0x0000a1cc, 0x00000000},
--      {0x0000a1d0, 0x00000000},
--      {0x0000a1d4, 0x00000000},
--      {0x0000a1d8, 0x00000000},
--      {0x0000a1dc, 0x00000000},
--      {0x0000a1e0, 0x00000000},
--      {0x0000a1e4, 0x00000000},
--      {0x0000a1e8, 0x00000000},
--      {0x0000a1ec, 0x00000000},
--      {0x0000a1f0, 0x00000396},
--      {0x0000a1f4, 0x00000396},
--      {0x0000a1f8, 0x00000396},
--      {0x0000a1fc, 0x00000296},
--};
--
--static const u32 ar9485Modes_high_power_tx_gain_1_0[][5] = {
--      /*   Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20 */
--      {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d8, 0x000050d8},
--      {0x0000a500, 0x00022200, 0x00022200, 0x00000000, 0x00000000},
--      {0x0000a504, 0x05062002, 0x05062002, 0x04000002, 0x04000002},
--      {0x0000a508, 0x0c002e00, 0x0c002e00, 0x08000004, 0x08000004},
--      {0x0000a50c, 0x11062202, 0x11062202, 0x0d000200, 0x0d000200},
--      {0x0000a510, 0x17022e00, 0x17022e00, 0x11000202, 0x11000202},
--      {0x0000a514, 0x1d000ec2, 0x1d000ec2, 0x15000400, 0x15000400},
--      {0x0000a518, 0x25020ec0, 0x25020ec0, 0x19000402, 0x19000402},
--      {0x0000a51c, 0x2b020ec3, 0x2b020ec3, 0x1d000404, 0x1d000404},
--      {0x0000a520, 0x2f001f04, 0x2f001f04, 0x21000603, 0x21000603},
--      {0x0000a524, 0x35001fc4, 0x35001fc4, 0x25000605, 0x25000605},
--      {0x0000a528, 0x3c022f04, 0x3c022f04, 0x2a000a03, 0x2a000a03},
--      {0x0000a52c, 0x41023e85, 0x41023e85, 0x2c000a04, 0x2c000a04},
--      {0x0000a530, 0x48023ec6, 0x48023ec6, 0x2e000a20, 0x2e000a20},
--      {0x0000a534, 0x4d023f01, 0x4d023f01, 0x34000e20, 0x34000e20},
--      {0x0000a538, 0x53023f4b, 0x53023f4b, 0x38000e22, 0x38000e22},
--      {0x0000a53c, 0x5a027f09, 0x5a027f09, 0x3c000e24, 0x3c000e24},
--      {0x0000a540, 0x5f027fc9, 0x5f027fc9, 0x40000e26, 0x40000e26},
--      {0x0000a544, 0x6502feca, 0x6502feca, 0x43001640, 0x43001640},
--      {0x0000a548, 0x6b02ff4a, 0x6b02ff4a, 0x46001660, 0x46001660},
--      {0x0000a54c, 0x7203feca, 0x7203feca, 0x49001861, 0x49001861},
--      {0x0000a550, 0x7703ff0b, 0x7703ff0b, 0x4c001a81, 0x4c001a81},
--      {0x0000a554, 0x7d06ffcb, 0x7d06ffcb, 0x4f001a83, 0x4f001a83},
--      {0x0000a558, 0x8407ff0b, 0x8407ff0b, 0x54001c85, 0x54001c85},
--      {0x0000a55c, 0x8907ffcb, 0x8907ffcb, 0x58001ce5, 0x58001ce5},
--      {0x0000a560, 0x900fff0b, 0x900fff0b, 0x5b001ce9, 0x5b001ce9},
--      {0x0000a564, 0x960fffcb, 0x960fffcb, 0x60001eeb, 0x60001eeb},
--      {0x0000a568, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb},
--      {0x0000a56c, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb},
--      {0x0000a570, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb},
--      {0x0000a574, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb},
--      {0x0000a578, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb},
--      {0x0000a57c, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb},
--      {0x00016044, 0x05b6b2db, 0x05b6b2db, 0x05b6b2db, 0x05b6b2db},
--};
--
--static const u32 ar9485_1_0[][2] = {
--      /*  Addr      allmodes */
--      {0x0000a580, 0x00000000},
--      {0x0000a584, 0x00000000},
--      {0x0000a588, 0x00000000},
--      {0x0000a58c, 0x00000000},
--      {0x0000a590, 0x00000000},
--      {0x0000a594, 0x00000000},
--      {0x0000a598, 0x00000000},
--      {0x0000a59c, 0x00000000},
--      {0x0000a5a0, 0x00000000},
--      {0x0000a5a4, 0x00000000},
--      {0x0000a5a8, 0x00000000},
--      {0x0000a5ac, 0x00000000},
--      {0x0000a5b0, 0x00000000},
--      {0x0000a5b4, 0x00000000},
--      {0x0000a5b8, 0x00000000},
--      {0x0000a5bc, 0x00000000},
--};
--
--static const u32 ar9485_1_0_radio_core[][2] = {
--      /*   Addr     allmodes */
--      {0x00016000, 0x36db6db6},
--      {0x00016004, 0x6db6db40},
--      {0x00016008, 0x73800000},
--      {0x0001600c, 0x00000000},
--      {0x00016040, 0x7f80fff8},
--      {0x00016048, 0x6c92426e},
--      {0x0001604c, 0x000f0278},
--      {0x00016050, 0x6db6db6c},
--      {0x00016054, 0x6db60000},
--      {0x00016080, 0x00080000},
--      {0x00016084, 0x0e48048c},
--      {0x00016088, 0x14214514},
--      {0x0001608c, 0x119f081e},
--      {0x00016090, 0x24926490},
--      {0x00016098, 0xd28b3330},
--      {0x000160a0, 0xc2108ffe},
--      {0x000160a4, 0x812fc370},
--      {0x000160a8, 0x423c8000},
--      {0x000160b4, 0x92480040},
--      {0x000160c0, 0x006db6db},
--      {0x000160c4, 0x0186db60},
--      {0x000160c8, 0x6db6db6c},
--      {0x000160cc, 0x6de6fbe0},
--      {0x000160d0, 0xf7dfcf3c},
--      {0x00016100, 0x04cb0001},
--      {0x00016104, 0xfff80015},
--      {0x00016108, 0x00080010},
--      {0x00016144, 0x01884080},
--      {0x00016148, 0x00008040},
--      {0x00016180, 0x08453333},
--      {0x00016184, 0x18e82f01},
--      {0x00016188, 0x00000000},
--      {0x0001618c, 0x00000000},
--      {0x00016240, 0x08400000},
--      {0x00016244, 0x1bf90f00},
--      {0x00016248, 0x00000000},
--      {0x0001624c, 0x00000000},
--      {0x00016280, 0x01000015},
--      {0x00016284, 0x00d30000},
--      {0x00016288, 0x00318000},
--      {0x0001628c, 0x50000000},
--      {0x00016290, 0x4b96210f},
--      {0x00016380, 0x00000000},
--      {0x00016384, 0x00000000},
--      {0x00016388, 0x00800700},
--      {0x0001638c, 0x00800700},
--      {0x00016390, 0x00800700},
--      {0x00016394, 0x00000000},
--      {0x00016398, 0x00000000},
--      {0x0001639c, 0x00000000},
--      {0x000163a0, 0x00000001},
--      {0x000163a4, 0x00000001},
--      {0x000163a8, 0x00000000},
--      {0x000163ac, 0x00000000},
--      {0x000163b0, 0x00000000},
--      {0x000163b4, 0x00000000},
--      {0x000163b8, 0x00000000},
--      {0x000163bc, 0x00000000},
--      {0x000163c0, 0x000000a0},
--      {0x000163c4, 0x000c0000},
--      {0x000163c8, 0x14021402},
--      {0x000163cc, 0x00001402},
--      {0x000163d0, 0x00000000},
--      {0x000163d4, 0x00000000},
--      {0x00016c40, 0x1319c178},
--      {0x00016c44, 0x10000000},
--};
--
--static const u32 ar9485Modes_lowest_ob_db_tx_gain_1_0[][5] = {
--      /*  Addr       5G_HT20     5G_HT40     2G_HT40     2G_HT20 */
--      {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d8, 0x000050d8},
--      {0x0000a500, 0x00022200, 0x00022200, 0x00000000, 0x00000000},
--      {0x0000a504, 0x05062002, 0x05062002, 0x04000002, 0x04000002},
--      {0x0000a508, 0x0c002e00, 0x0c002e00, 0x08000004, 0x08000004},
--      {0x0000a50c, 0x11062202, 0x11062202, 0x0d000200, 0x0d000200},
--      {0x0000a510, 0x17022e00, 0x17022e00, 0x11000202, 0x11000202},
--      {0x0000a514, 0x1d000ec2, 0x1d000ec2, 0x15000400, 0x15000400},
--      {0x0000a518, 0x25020ec0, 0x25020ec0, 0x19000402, 0x19000402},
--      {0x0000a51c, 0x2b020ec3, 0x2b020ec3, 0x1d000404, 0x1d000404},
--      {0x0000a520, 0x2f001f04, 0x2f001f04, 0x21000603, 0x21000603},
--      {0x0000a524, 0x35001fc4, 0x35001fc4, 0x25000605, 0x25000605},
--      {0x0000a528, 0x3c022f04, 0x3c022f04, 0x2a000a03, 0x2a000a03},
--      {0x0000a52c, 0x41023e85, 0x41023e85, 0x2c000a04, 0x2c000a04},
--      {0x0000a530, 0x48023ec6, 0x48023ec6, 0x2e000a20, 0x2e000a20},
--      {0x0000a534, 0x4d023f01, 0x4d023f01, 0x34000e20, 0x34000e20},
--      {0x0000a538, 0x53023f4b, 0x53023f4b, 0x38000e22, 0x38000e22},
--      {0x0000a53c, 0x5a027f09, 0x5a027f09, 0x3c000e24, 0x3c000e24},
--      {0x0000a540, 0x5f027fc9, 0x5f027fc9, 0x40000e26, 0x40000e26},
--      {0x0000a544, 0x6502feca, 0x6502feca, 0x43001640, 0x43001640},
--      {0x0000a548, 0x6b02ff4a, 0x6b02ff4a, 0x46001660, 0x46001660},
--      {0x0000a54c, 0x7203feca, 0x7203feca, 0x49001861, 0x49001861},
--      {0x0000a550, 0x7703ff0b, 0x7703ff0b, 0x4c001a81, 0x4c001a81},
--      {0x0000a554, 0x7d06ffcb, 0x7d06ffcb, 0x4f001a83, 0x4f001a83},
--      {0x0000a558, 0x8407ff0b, 0x8407ff0b, 0x54001c85, 0x54001c85},
--      {0x0000a55c, 0x8907ffcb, 0x8907ffcb, 0x58001ce5, 0x58001ce5},
--      {0x0000a560, 0x900fff0b, 0x900fff0b, 0x5b001ce9, 0x5b001ce9},
--      {0x0000a564, 0x960fffcb, 0x960fffcb, 0x60001eeb, 0x60001eeb},
--      {0x0000a568, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb},
--      {0x0000a56c, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb},
--      {0x0000a570, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb},
--      {0x0000a574, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb},
--      {0x0000a578, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb},
--      {0x0000a57c, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb},
--      {0x00016044, 0x05b6b2db, 0x05b6b2db, 0x05b6b2db, 0x05b6b2db},
--};
--
--static const u32 ar9485_1_0_baseband_core[][2] = {
--      /* Addr      allmodes  */
--      {0x00009800, 0xafe68e30},
--      {0x00009804, 0xfd14e000},
--      {0x00009808, 0x9c0a8f6b},
--      {0x0000980c, 0x04800000},
--      {0x00009814, 0x9280c00a},
--      {0x00009818, 0x00000000},
--      {0x0000981c, 0x00020028},
--      {0x00009834, 0x5f3ca3de},
--      {0x00009838, 0x0108ecff},
--      {0x0000983c, 0x14750600},
--      {0x00009880, 0x201fff00},
--      {0x00009884, 0x00001042},
--      {0x000098a4, 0x00200400},
--      {0x000098b0, 0x52440bbe},
--      {0x000098bc, 0x00000002},
--      {0x000098d0, 0x004b6a8e},
--      {0x000098d4, 0x00000820},
--      {0x000098dc, 0x00000000},
--      {0x000098f0, 0x00000000},
--      {0x000098f4, 0x00000000},
--      {0x00009c04, 0x00000000},
--      {0x00009c08, 0x03200000},
--      {0x00009c0c, 0x00000000},
--      {0x00009c10, 0x00000000},
--      {0x00009c14, 0x00046384},
--      {0x00009c18, 0x05b6b440},
--      {0x00009c1c, 0x00b6b440},
--      {0x00009d00, 0xc080a333},
--      {0x00009d04, 0x40206c10},
--      {0x00009d08, 0x009c4060},
--      {0x00009d0c, 0x1883800a},
--      {0x00009d10, 0x01834061},
--      {0x00009d14, 0x00c00400},
--      {0x00009d18, 0x00000000},
--      {0x00009d1c, 0x00000000},
--      {0x00009e08, 0x0038233c},
--      {0x00009e24, 0x990bb515},
--      {0x00009e28, 0x0a6f0000},
--      {0x00009e30, 0x06336f77},
--      {0x00009e34, 0x6af6532f},
--      {0x00009e38, 0x0cc80c00},
--      {0x00009e40, 0x0d261820},
--      {0x00009e4c, 0x00001004},
--      {0x00009e50, 0x00ff03f1},
--      {0x00009fc0, 0x80be4788},
--      {0x00009fc4, 0x0001efb5},
--      {0x00009fcc, 0x40000014},
--      {0x0000a20c, 0x00000000},
--      {0x0000a210, 0x00000000},
--      {0x0000a220, 0x00000000},
--      {0x0000a224, 0x00000000},
--      {0x0000a228, 0x10002310},
--      {0x0000a23c, 0x00000000},
--      {0x0000a244, 0x0c000000},
--      {0x0000a2a0, 0x00000001},
--      {0x0000a2c0, 0x00000001},
--      {0x0000a2c8, 0x00000000},
--      {0x0000a2cc, 0x18c43433},
--      {0x0000a2d4, 0x00000000},
--      {0x0000a2dc, 0x00000000},
--      {0x0000a2e0, 0x00000000},
--      {0x0000a2e4, 0x00000000},
--      {0x0000a2e8, 0x00000000},
--      {0x0000a2ec, 0x00000000},
--      {0x0000a2f0, 0x00000000},
--      {0x0000a2f4, 0x00000000},
--      {0x0000a2f8, 0x00000000},
--      {0x0000a344, 0x00000000},
--      {0x0000a34c, 0x00000000},
--      {0x0000a350, 0x0000a000},
--      {0x0000a364, 0x00000000},
--      {0x0000a370, 0x00000000},
--      {0x0000a390, 0x00000001},
--      {0x0000a394, 0x00000444},
--      {0x0000a398, 0x001f0e0f},
--      {0x0000a39c, 0x0075393f},
--      {0x0000a3a0, 0xb79f6427},
--      {0x0000a3a4, 0x00000000},
--      {0x0000a3a8, 0xaaaaaaaa},
--      {0x0000a3ac, 0x3c466478},
--      {0x0000a3c0, 0x20202020},
--      {0x0000a3c4, 0x22222220},
--      {0x0000a3c8, 0x20200020},
--      {0x0000a3cc, 0x20202020},
--      {0x0000a3d0, 0x20202020},
--      {0x0000a3d4, 0x20202020},
--      {0x0000a3d8, 0x20202020},
--      {0x0000a3dc, 0x20202020},
--      {0x0000a3e0, 0x20202020},
--      {0x0000a3e4, 0x20202020},
--      {0x0000a3e8, 0x20202020},
--      {0x0000a3ec, 0x20202020},
--      {0x0000a3f0, 0x00000000},
--      {0x0000a3f4, 0x00000006},
--      {0x0000a3f8, 0x0cdbd380},
--      {0x0000a3fc, 0x000f0f01},
--      {0x0000a400, 0x8fa91f01},
--      {0x0000a404, 0x00000000},
--      {0x0000a408, 0x0e79e5c6},
--      {0x0000a40c, 0x00820820},
--      {0x0000a414, 0x1ce739ce},
--      {0x0000a418, 0x2d0011ce},
--      {0x0000a41c, 0x1ce739ce},
--      {0x0000a420, 0x000001ce},
--      {0x0000a424, 0x1ce739ce},
--      {0x0000a428, 0x000001ce},
--      {0x0000a42c, 0x1ce739ce},
--      {0x0000a430, 0x1ce739ce},
--      {0x0000a434, 0x00000000},
--      {0x0000a438, 0x00001801},
--      {0x0000a43c, 0x00000000},
--      {0x0000a440, 0x00000000},
--      {0x0000a444, 0x00000000},
--      {0x0000a448, 0x04000000},
--      {0x0000a44c, 0x00000001},
--      {0x0000a450, 0x00010000},
--      {0x0000a458, 0x00000000},
--      {0x0000a5c4, 0x3fad9d74},
--      {0x0000a5c8, 0x0048060a},
--      {0x0000a5cc, 0x00000637},
--      {0x0000a760, 0x03020100},
--      {0x0000a764, 0x09080504},
--      {0x0000a768, 0x0d0c0b0a},
--      {0x0000a76c, 0x13121110},
--      {0x0000a770, 0x31301514},
--      {0x0000a774, 0x35343332},
--      {0x0000a778, 0x00000036},
--      {0x0000a780, 0x00000838},
--      {0x0000a7c0, 0x00000000},
--      {0x0000a7c4, 0xfffffffc},
--      {0x0000a7c8, 0x00000000},
--      {0x0000a7cc, 0x00000000},
--      {0x0000a7d0, 0x00000000},
--      {0x0000a7d4, 0x00000004},
--      {0x0000a7dc, 0x00000001},
--};
--
--static const u32 ar9485Modes_high_ob_db_tx_gain_1_0[][5] = {
--      /* Addr        5G_HT20     5G_HT40     2G_HT40    2G_HT20  */
--      {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d8, 0x000050d8},
--      {0x0000a500, 0x00022200, 0x00022200, 0x00000000, 0x00000000},
--      {0x0000a504, 0x05062002, 0x05062002, 0x04000002, 0x04000002},
--      {0x0000a508, 0x0c002e00, 0x0c002e00, 0x08000004, 0x08000004},
--      {0x0000a50c, 0x11062202, 0x11062202, 0x0d000200, 0x0d000200},
--      {0x0000a510, 0x17022e00, 0x17022e00, 0x11000202, 0x11000202},
--      {0x0000a514, 0x1d000ec2, 0x1d000ec2, 0x15000400, 0x15000400},
--      {0x0000a518, 0x25020ec0, 0x25020ec0, 0x19000402, 0x19000402},
--      {0x0000a51c, 0x2b020ec3, 0x2b020ec3, 0x1d000404, 0x1d000404},
--      {0x0000a520, 0x2f001f04, 0x2f001f04, 0x21000603, 0x21000603},
--      {0x0000a524, 0x35001fc4, 0x35001fc4, 0x25000605, 0x25000605},
--      {0x0000a528, 0x3c022f04, 0x3c022f04, 0x2a000a03, 0x2a000a03},
--      {0x0000a52c, 0x41023e85, 0x41023e85, 0x2c000a04, 0x2c000a04},
--      {0x0000a530, 0x48023ec6, 0x48023ec6, 0x2e000a20, 0x2e000a20},
--      {0x0000a534, 0x4d023f01, 0x4d023f01, 0x34000e20, 0x34000e20},
--      {0x0000a538, 0x53023f4b, 0x53023f4b, 0x38000e22, 0x38000e22},
--      {0x0000a53c, 0x5a027f09, 0x5a027f09, 0x3c000e24, 0x3c000e24},
--      {0x0000a540, 0x5f027fc9, 0x5f027fc9, 0x40000e26, 0x40000e26},
--      {0x0000a544, 0x6502feca, 0x6502feca, 0x43001640, 0x43001640},
--      {0x0000a548, 0x6b02ff4a, 0x6b02ff4a, 0x46001660, 0x46001660},
--      {0x0000a54c, 0x7203feca, 0x7203feca, 0x49001861, 0x49001861},
--      {0x0000a550, 0x7703ff0b, 0x7703ff0b, 0x4c001a81, 0x4c001a81},
--      {0x0000a554, 0x7d06ffcb, 0x7d06ffcb, 0x4f001a83, 0x4f001a83},
--      {0x0000a558, 0x8407ff0b, 0x8407ff0b, 0x54001c85, 0x54001c85},
--      {0x0000a55c, 0x8907ffcb, 0x8907ffcb, 0x58001ce5, 0x58001ce5},
--      {0x0000a560, 0x900fff0b, 0x900fff0b, 0x5b001ce9, 0x5b001ce9},
--      {0x0000a564, 0x960fffcb, 0x960fffcb, 0x60001eeb, 0x60001eeb},
--      {0x0000a568, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb},
--      {0x0000a56c, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb},
--      {0x0000a570, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb},
--      {0x0000a574, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb},
--      {0x0000a578, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb},
--      {0x0000a57c, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb},
--      {0x00016044, 0x05b6b2db, 0x05b6b2db, 0x05b6b2db, 0x05b6b2db},
--};
--
--static const u32 ar9485Common_rx_gain_1_0[][2] = {
--      /* Addr      allmodes  */
--      {0x0000a000, 0x00010000},
--      {0x0000a004, 0x00030002},
--      {0x0000a008, 0x00050004},
--      {0x0000a00c, 0x00810080},
--      {0x0000a010, 0x01800082},
--      {0x0000a014, 0x01820181},
--      {0x0000a018, 0x01840183},
--      {0x0000a01c, 0x01880185},
--      {0x0000a020, 0x018a0189},
--      {0x0000a024, 0x02850284},
--      {0x0000a028, 0x02890288},
--      {0x0000a02c, 0x03850384},
--      {0x0000a030, 0x03890388},
--      {0x0000a034, 0x038b038a},
--      {0x0000a038, 0x038d038c},
--      {0x0000a03c, 0x03910390},
--      {0x0000a040, 0x03930392},
--      {0x0000a044, 0x03950394},
--      {0x0000a048, 0x00000396},
--      {0x0000a04c, 0x00000000},
--      {0x0000a050, 0x00000000},
--      {0x0000a054, 0x00000000},
--      {0x0000a058, 0x00000000},
--      {0x0000a05c, 0x00000000},
--      {0x0000a060, 0x00000000},
--      {0x0000a064, 0x00000000},
--      {0x0000a068, 0x00000000},
--      {0x0000a06c, 0x00000000},
--      {0x0000a070, 0x00000000},
--      {0x0000a074, 0x00000000},
--      {0x0000a078, 0x00000000},
--      {0x0000a07c, 0x00000000},
--      {0x0000a080, 0x28282828},
--      {0x0000a084, 0x28282828},
--      {0x0000a088, 0x28282828},
--      {0x0000a08c, 0x28282828},
--      {0x0000a090, 0x28282828},
--      {0x0000a094, 0x21212128},
--      {0x0000a098, 0x171c1c1c},
--      {0x0000a09c, 0x02020212},
--      {0x0000a0a0, 0x00000202},
--      {0x0000a0a4, 0x00000000},
--      {0x0000a0a8, 0x00000000},
--      {0x0000a0ac, 0x00000000},
--      {0x0000a0b0, 0x00000000},
--      {0x0000a0b4, 0x00000000},
--      {0x0000a0b8, 0x00000000},
--      {0x0000a0bc, 0x00000000},
--      {0x0000a0c0, 0x001f0000},
--      {0x0000a0c4, 0x111f1100},
--      {0x0000a0c8, 0x111d111e},
--      {0x0000a0cc, 0x111b111c},
--      {0x0000a0d0, 0x22032204},
--      {0x0000a0d4, 0x22012202},
--      {0x0000a0d8, 0x221f2200},
--      {0x0000a0dc, 0x221d221e},
--      {0x0000a0e0, 0x33013302},
--      {0x0000a0e4, 0x331f3300},
--      {0x0000a0e8, 0x4402331e},
--      {0x0000a0ec, 0x44004401},
--      {0x0000a0f0, 0x441e441f},
--      {0x0000a0f4, 0x55015502},
--      {0x0000a0f8, 0x551f5500},
--      {0x0000a0fc, 0x6602551e},
--      {0x0000a100, 0x66006601},
--      {0x0000a104, 0x661e661f},
--      {0x0000a108, 0x7703661d},
--      {0x0000a10c, 0x77017702},
--      {0x0000a110, 0x00007700},
--      {0x0000a114, 0x00000000},
--      {0x0000a118, 0x00000000},
--      {0x0000a11c, 0x00000000},
--      {0x0000a120, 0x00000000},
--      {0x0000a124, 0x00000000},
--      {0x0000a128, 0x00000000},
--      {0x0000a12c, 0x00000000},
--      {0x0000a130, 0x00000000},
--      {0x0000a134, 0x00000000},
--      {0x0000a138, 0x00000000},
--      {0x0000a13c, 0x00000000},
--      {0x0000a140, 0x001f0000},
--      {0x0000a144, 0x111f1100},
--      {0x0000a148, 0x111d111e},
--      {0x0000a14c, 0x111b111c},
--      {0x0000a150, 0x22032204},
--      {0x0000a154, 0x22012202},
--      {0x0000a158, 0x221f2200},
--      {0x0000a15c, 0x221d221e},
--      {0x0000a160, 0x33013302},
--      {0x0000a164, 0x331f3300},
--      {0x0000a168, 0x4402331e},
--      {0x0000a16c, 0x44004401},
--      {0x0000a170, 0x441e441f},
--      {0x0000a174, 0x55015502},
--      {0x0000a178, 0x551f5500},
--      {0x0000a17c, 0x6602551e},
--      {0x0000a180, 0x66006601},
--      {0x0000a184, 0x661e661f},
--      {0x0000a188, 0x7703661d},
--      {0x0000a18c, 0x77017702},
--      {0x0000a190, 0x00007700},
--      {0x0000a194, 0x00000000},
--      {0x0000a198, 0x00000000},
--      {0x0000a19c, 0x00000000},
--      {0x0000a1a0, 0x00000000},
--      {0x0000a1a4, 0x00000000},
--      {0x0000a1a8, 0x00000000},
--      {0x0000a1ac, 0x00000000},
--      {0x0000a1b0, 0x00000000},
--      {0x0000a1b4, 0x00000000},
--      {0x0000a1b8, 0x00000000},
--      {0x0000a1bc, 0x00000000},
--      {0x0000a1c0, 0x00000000},
--      {0x0000a1c4, 0x00000000},
--      {0x0000a1c8, 0x00000000},
--      {0x0000a1cc, 0x00000000},
--      {0x0000a1d0, 0x00000000},
--      {0x0000a1d4, 0x00000000},
--      {0x0000a1d8, 0x00000000},
--      {0x0000a1dc, 0x00000000},
--      {0x0000a1e0, 0x00000000},
--      {0x0000a1e4, 0x00000000},
--      {0x0000a1e8, 0x00000000},
--      {0x0000a1ec, 0x00000000},
--      {0x0000a1f0, 0x00000396},
--      {0x0000a1f4, 0x00000396},
--      {0x0000a1f8, 0x00000396},
--      {0x0000a1fc, 0x00000296},
--};
--
--static const u32 ar9485_1_0_pcie_phy_pll_on_clkreq_enable_L1[][2] = {
--      /*   Addr    allmodes  */
--      {0x00018c00, 0x10252e5e},
--      {0x00018c04, 0x000801d8},
--      {0x00018c08, 0x0000580c},
--};
--
--static const u32 ar9485_1_0_pcie_phy_clkreq_enable_L1[][2] = {
--      /*  Addr    allmodes   */
--      {0x00018c00, 0x10253e5e},
--      {0x00018c04, 0x000801d8},
--      {0x00018c08, 0x0000580c},
--};
--
--static const u32 ar9485_1_0_soc_preamble[][2] = {
--      /*   Addr     allmodes */
--      {0x00004090, 0x00aa10aa},
--      {0x000040a4, 0x00a0c9c9},
--      {0x00007048, 0x00000004},
--};
--
--static const u32 ar9485_fast_clock_1_0_baseband_postamble[][3] = {
--      /*   Addr      5G_HT20     5G_HT40 */
--      {0x00009e00, 0x03721821, 0x03721821},
--      {0x0000a230, 0x0000400b, 0x00004016},
--      {0x0000a254, 0x00000898, 0x00001130},
--};
--
--static const u32 ar9485_1_0_baseband_postamble[][5] = {
--      /* Addr        5G_HT20     5G_HT40     2G_HT40     2G_HT20 */
--      {0x00009810, 0xd00a8005, 0xd00a8005, 0xd00a8005, 0xd00a8005},
--      {0x00009820, 0x206a002e, 0x206a002e, 0x206a002e, 0x206a002e},
--      {0x00009824, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0},
--      {0x00009828, 0x06903081, 0x06903081, 0x06903881, 0x06903881},
--      {0x0000982c, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4},
--      {0x00009830, 0x0000059c, 0x0000059c, 0x0000059c, 0x0000059c},
--      {0x00009c00, 0x00000044, 0x00000044, 0x00000044, 0x00000044},
--      {0x00009e00, 0x0372161e, 0x0372161e, 0x037216a0, 0x037216a0},
--      {0x00009e04, 0x00182020, 0x00182020, 0x00182020, 0x00182020},
--      {0x00009e0c, 0x6c4000e2, 0x6d4000e2, 0x6d4000e2, 0x6c4000e2},
--      {0x00009e10, 0x7ec88d2e, 0x7ec88d2e, 0x7ec80d2e, 0x7ec80d2e},
--      {0x00009e14, 0x31395d5e, 0x3139605e, 0x3139605e, 0x31395d5e},
--      {0x00009e18, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x00009e1c, 0x0001cf9c, 0x0001cf9c, 0x00021f9c, 0x00021f9c},
--      {0x00009e20, 0x000003b5, 0x000003b5, 0x000003ce, 0x000003ce},
--      {0x00009e2c, 0x0000001c, 0x0000001c, 0x00000021, 0x00000021},
--      {0x00009e3c, 0xcf946220, 0xcf946220, 0xcf946222, 0xcf946222},
--      {0x00009e44, 0x02321e27, 0x02321e27, 0x02282324, 0x02282324},
--      {0x00009e48, 0x5030201a, 0x5030201a, 0x50302010, 0x50302010},
--      {0x00009fc8, 0x0003f000, 0x0003f000, 0x0001a000, 0x0001a000},
--      {0x0000a204, 0x01303fc0, 0x01303fc4, 0x01303fc4, 0x01303fc0},
--      {0x0000a208, 0x00000104, 0x00000104, 0x00000004, 0x00000004},
--      {0x0000a230, 0x0000400a, 0x00004014, 0x00004016, 0x0000400b},
--      {0x0000a234, 0x10000fff, 0x10000fff, 0x10000fff, 0x10000fff},
--      {0x0000a238, 0xffb81018, 0xffb81018, 0xffb81018, 0xffb81018},
--      {0x0000a250, 0x00000000, 0x00000000, 0x00000210, 0x00000108},
--      {0x0000a254, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898},
--      {0x0000a258, 0x02020002, 0x02020002, 0x02020002, 0x02020002},
--      {0x0000a25c, 0x01000e0e, 0x01000e0e, 0x01000e0e, 0x01000e0e},
--      {0x0000a260, 0x3a021501, 0x3a021501, 0x3a021501, 0x3a021501},
--      {0x0000a264, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e},
--      {0x0000a280, 0x00000007, 0x00000007, 0x0000000b, 0x0000000b},
--      {0x0000a284, 0x00000000, 0x00000000, 0x000002a0, 0x000002a0},
--      {0x0000a288, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000a28c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000a2c4, 0x00158d18, 0x00158d18, 0x00158d18, 0x00158d18},
--      {0x0000a2d0, 0x00071981, 0x00071981, 0x00071981, 0x00071982},
--      {0x0000a2d8, 0xf999a83a, 0xf999a83a, 0xf999a83a, 0xf999a83a},
--      {0x0000a358, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000be04, 0x00802020, 0x00802020, 0x00802020, 0x00802020},
--      {0x0000be18, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--};
--
--static const u32 ar9485Modes_low_ob_db_tx_gain_1_0[][5] = {
--      /*  Addr      5G_HT20    5G_HT40     2G_HT40     2G_HT20   */
--      {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d8, 0x000050d8},
--      {0x0000a500, 0x00022200, 0x00022200, 0x00000000, 0x00000000},
--      {0x0000a504, 0x05062002, 0x05062002, 0x04000002, 0x04000002},
--      {0x0000a508, 0x0c002e00, 0x0c002e00, 0x08000004, 0x08000004},
--      {0x0000a50c, 0x11062202, 0x11062202, 0x0d000200, 0x0d000200},
--      {0x0000a510, 0x17022e00, 0x17022e00, 0x11000202, 0x11000202},
--      {0x0000a514, 0x1d000ec2, 0x1d000ec2, 0x15000400, 0x15000400},
--      {0x0000a518, 0x25020ec0, 0x25020ec0, 0x19000402, 0x19000402},
--      {0x0000a51c, 0x2b020ec3, 0x2b020ec3, 0x1d000404, 0x1d000404},
--      {0x0000a520, 0x2f001f04, 0x2f001f04, 0x21000603, 0x21000603},
--      {0x0000a524, 0x35001fc4, 0x35001fc4, 0x25000605, 0x25000605},
--      {0x0000a528, 0x3c022f04, 0x3c022f04, 0x2a000a03, 0x2a000a03},
--      {0x0000a52c, 0x41023e85, 0x41023e85, 0x2c000a04, 0x2c000a04},
--      {0x0000a530, 0x48023ec6, 0x48023ec6, 0x2e000a20, 0x2e000a20},
--      {0x0000a534, 0x4d023f01, 0x4d023f01, 0x34000e20, 0x34000e20},
--      {0x0000a538, 0x53023f4b, 0x53023f4b, 0x38000e22, 0x38000e22},
--      {0x0000a53c, 0x5a027f09, 0x5a027f09, 0x3c000e24, 0x3c000e24},
--      {0x0000a540, 0x5f027fc9, 0x5f027fc9, 0x40000e26, 0x40000e26},
--      {0x0000a544, 0x6502feca, 0x6502feca, 0x43001640, 0x43001640},
--      {0x0000a548, 0x6b02ff4a, 0x6b02ff4a, 0x46001660, 0x46001660},
--      {0x0000a54c, 0x7203feca, 0x7203feca, 0x49001861, 0x49001861},
--      {0x0000a550, 0x7703ff0b, 0x7703ff0b, 0x4c001a81, 0x4c001a81},
--      {0x0000a554, 0x7d06ffcb, 0x7d06ffcb, 0x4f001a83, 0x4f001a83},
--      {0x0000a558, 0x8407ff0b, 0x8407ff0b, 0x54001c85, 0x54001c85},
--      {0x0000a55c, 0x8907ffcb, 0x8907ffcb, 0x58001ce5, 0x58001ce5},
--      {0x0000a560, 0x900fff0b, 0x900fff0b, 0x5b001ce9, 0x5b001ce9},
--      {0x0000a564, 0x960fffcb, 0x960fffcb, 0x60001eeb, 0x60001eeb},
--      {0x0000a568, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb},
--      {0x0000a56c, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb},
--      {0x0000a570, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb},
--      {0x0000a574, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb},
--      {0x0000a578, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb},
--      {0x0000a57c, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb},
--      {0x00016044, 0x05b6b2db, 0x05b6b2db, 0x05b6b2db, 0x05b6b2db},
--};
--
--static const u32 ar9485_1_0_pcie_phy_clkreq_disable_L1[][2] = {
--      /*   Addr     allmodes */
--      {0x00018c00, 0x10213e5e},
--      {0x00018c04, 0x000801d8},
--      {0x00018c08, 0x0000580c},
--};
--
--static const u32 ar9485_1_0_radio_postamble[][2] = {
--      /*   Addr     allmodes */
--      {0x0001609c, 0x0b283f31},
--      {0x000160ac, 0x24611800},
--      {0x000160b0, 0x03284f3e},
--      {0x0001610c, 0x00170000},
--      {0x00016140, 0x10804008},
--};
--
--static const u32 ar9485_1_0_mac_core[][2] = {
--      /*  Addr      allmodes */
--      {0x00000008, 0x00000000},
--      {0x00000030, 0x00020085},
--      {0x00000034, 0x00000005},
--      {0x00000040, 0x00000000},
--      {0x00000044, 0x00000000},
--      {0x00000048, 0x00000008},
--      {0x0000004c, 0x00000010},
--      {0x00000050, 0x00000000},
--      {0x00001040, 0x002ffc0f},
--      {0x00001044, 0x002ffc0f},
--      {0x00001048, 0x002ffc0f},
--      {0x0000104c, 0x002ffc0f},
--      {0x00001050, 0x002ffc0f},
--      {0x00001054, 0x002ffc0f},
--      {0x00001058, 0x002ffc0f},
--      {0x0000105c, 0x002ffc0f},
--      {0x00001060, 0x002ffc0f},
--      {0x00001064, 0x002ffc0f},
--      {0x000010f0, 0x00000100},
--      {0x00001270, 0x00000000},
--      {0x000012b0, 0x00000000},
--      {0x000012f0, 0x00000000},
--      {0x0000143c, 0x00000000},
--      {0x0000147c, 0x00000000},
--      {0x00008000, 0x00000000},
--      {0x00008004, 0x00000000},
--      {0x00008008, 0x00000000},
--      {0x0000800c, 0x00000000},
--      {0x00008018, 0x00000000},
--      {0x00008020, 0x00000000},
--      {0x00008038, 0x00000000},
--      {0x0000803c, 0x00000000},
--      {0x00008040, 0x00000000},
--      {0x00008044, 0x00000000},
--      {0x00008048, 0x00000000},
--      {0x0000804c, 0xffffffff},
--      {0x00008054, 0x00000000},
--      {0x00008058, 0x00000000},
--      {0x0000805c, 0x000fc78f},
--      {0x00008060, 0x0000000f},
--      {0x00008064, 0x00000000},
--      {0x00008070, 0x00000310},
--      {0x00008074, 0x00000020},
--      {0x00008078, 0x00000000},
--      {0x0000809c, 0x0000000f},
--      {0x000080a0, 0x00000000},
--      {0x000080a4, 0x02ff0000},
--      {0x000080a8, 0x0e070605},
--      {0x000080ac, 0x0000000d},
--      {0x000080b0, 0x00000000},
--      {0x000080b4, 0x00000000},
--      {0x000080b8, 0x00000000},
--      {0x000080bc, 0x00000000},
--      {0x000080c0, 0x2a800000},
--      {0x000080c4, 0x06900168},
--      {0x000080c8, 0x13881c20},
--      {0x000080cc, 0x01f40000},
--      {0x000080d0, 0x00252500},
--      {0x000080d4, 0x00a00000},
--      {0x000080d8, 0x00400000},
--      {0x000080dc, 0x00000000},
--      {0x000080e0, 0xffffffff},
--      {0x000080e4, 0x0000ffff},
--      {0x000080e8, 0x3f3f3f3f},
--      {0x000080ec, 0x00000000},
--      {0x000080f0, 0x00000000},
--      {0x000080f4, 0x00000000},
--      {0x000080fc, 0x00020000},
--      {0x00008100, 0x00000000},
--      {0x00008108, 0x00000052},
--      {0x0000810c, 0x00000000},
--      {0x00008110, 0x00000000},
--      {0x00008114, 0x000007ff},
--      {0x00008118, 0x000000aa},
--      {0x0000811c, 0x00003210},
--      {0x00008124, 0x00000000},
--      {0x00008128, 0x00000000},
--      {0x0000812c, 0x00000000},
--      {0x00008130, 0x00000000},
--      {0x00008134, 0x00000000},
--      {0x00008138, 0x00000000},
--      {0x0000813c, 0x0000ffff},
--      {0x00008144, 0xffffffff},
--      {0x00008168, 0x00000000},
--      {0x0000816c, 0x00000000},
--      {0x00008170, 0x18486200},
--      {0x00008174, 0x33332210},
--      {0x00008178, 0x00000000},
--      {0x0000817c, 0x00020000},
--      {0x000081c0, 0x00000000},
--      {0x000081c4, 0x33332210},
--      {0x000081c8, 0x00000000},
--      {0x000081cc, 0x00000000},
--      {0x000081d4, 0x00000000},
--      {0x000081ec, 0x00000000},
--      {0x000081f0, 0x00000000},
--      {0x000081f4, 0x00000000},
--      {0x000081f8, 0x00000000},
--      {0x000081fc, 0x00000000},
--      {0x00008240, 0x00100000},
--      {0x00008244, 0x0010f400},
--      {0x00008248, 0x00000800},
--      {0x0000824c, 0x0001e800},
--      {0x00008250, 0x00000000},
--      {0x00008254, 0x00000000},
--      {0x00008258, 0x00000000},
--      {0x0000825c, 0x40000000},
--      {0x00008260, 0x00080922},
--      {0x00008264, 0x9ca00010},
--      {0x00008268, 0xffffffff},
--      {0x0000826c, 0x0000ffff},
--      {0x00008270, 0x00000000},
--      {0x00008274, 0x40000000},
--      {0x00008278, 0x003e4180},
--      {0x0000827c, 0x00000004},
--      {0x00008284, 0x0000002c},
--      {0x00008288, 0x0000002c},
--      {0x0000828c, 0x000000ff},
--      {0x00008294, 0x00000000},
--      {0x00008298, 0x00000000},
--      {0x0000829c, 0x00000000},
--      {0x00008300, 0x00000140},
--      {0x00008314, 0x00000000},
--      {0x0000831c, 0x0000010d},
--      {0x00008328, 0x00000000},
--      {0x0000832c, 0x00000007},
--      {0x00008330, 0x00000302},
--      {0x00008334, 0x00000700},
--      {0x00008338, 0x00ff0000},
--      {0x0000833c, 0x02400000},
--      {0x00008340, 0x000107ff},
--      {0x00008344, 0xa248105b},
--      {0x00008348, 0x008f0000},
--      {0x0000835c, 0x00000000},
--      {0x00008360, 0xffffffff},
--      {0x00008364, 0xffffffff},
--      {0x00008368, 0x00000000},
--      {0x00008370, 0x00000000},
--      {0x00008374, 0x000000ff},
--      {0x00008378, 0x00000000},
--      {0x0000837c, 0x00000000},
--      {0x00008380, 0xffffffff},
--      {0x00008384, 0xffffffff},
--      {0x00008390, 0xffffffff},
--      {0x00008394, 0xffffffff},
--      {0x00008398, 0x00000000},
--      {0x0000839c, 0x00000000},
--      {0x000083a0, 0x00000000},
--      {0x000083a4, 0x0000fa14},
--      {0x000083a8, 0x000f0c00},
--      {0x000083ac, 0x33332210},
--      {0x000083b0, 0x33332210},
--      {0x000083b4, 0x33332210},
--      {0x000083b8, 0x33332210},
--      {0x000083bc, 0x00000000},
--      {0x000083c0, 0x00000000},
--      {0x000083c4, 0x00000000},
--      {0x000083c8, 0x00000000},
--      {0x000083cc, 0x00000200},
--      {0x000083d0, 0x000301ff},
--};
--
- static const u32 ar9485_1_1_mac_core[][2] = {
-       /*  Addr       allmodes */
-       {0x00000008, 0x00000000},
index 22299020a000849e3a5aa9ff2ddcea70fda32893..d60be760d6174e68c341b9ceaf039965db0ae573 100644 (file)
@@ -7,6 +7,6 @@
 +      if (AR_SREV_9100(sc->sc_ah))
 +              return;
 +
-       if (AR_SREV_9287(sc->sc_ah))
-               sc->sc_ah->led_pin = ATH_LED_PIN_9287;
-       else if (AR_SREV_9485(sc->sc_ah))
+       if (sc->sc_ah->led_pin < 0) {
+               if (AR_SREV_9287(sc->sc_ah))
+                       sc->sc_ah->led_pin = ATH_LED_PIN_9287;
index 5f07a6da9a5aa7916804a82fd715705db0f8ed58..75e6454cc5648bdf4476d2b564d8a7b4bb6f7212 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath9k/init.c
 +++ b/drivers/net/wireless/ath/ath9k/init.c
-@@ -33,7 +33,7 @@ int ath9k_modparam_nohwcrypt;
+@@ -34,7 +34,7 @@ int ath9k_modparam_nohwcrypt;
  module_param_named(nohwcrypt, ath9k_modparam_nohwcrypt, int, 0444);
  MODULE_PARM_DESC(nohwcrypt, "Disable hardware encryption");
  
index cf3f96bb171abe7b2b039752665befe482d1c1f6..e65d46319479b3fac835d68a6dc5e48a32a970d7 100644 (file)
@@ -8,7 +8,7 @@
  #include <asm/unaligned.h>
  
  #include "hw.h"
-@@ -431,8 +432,16 @@ static int ath9k_hw_init_macaddr(struct 
+@@ -433,8 +434,16 @@ static int ath9k_hw_init_macaddr(struct 
                common->macaddr[2 * i] = eeval >> 8;
                common->macaddr[2 * i + 1] = eeval & 0xff;
        }
diff --git a/package/mac80211/patches/407-ath9k-override-mac-address-from-platform-data.patch b/package/mac80211/patches/407-ath9k-override-mac-address-from-platform-data.patch
deleted file mode 100644 (file)
index 6326649..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
---- a/include/linux/ath9k_platform.h
-+++ b/include/linux/ath9k_platform.h
-@@ -23,6 +23,7 @@
- struct ath9k_platform_data {
-       u16 eeprom_data[ATH9K_PLAT_EEP_MAX_WORDS];
-+      u8 *macaddr;
- };
- #endif /* _LINUX_ATH9K_PLATFORM_H */
---- a/drivers/net/wireless/ath/ath9k/init.c
-+++ b/drivers/net/wireless/ath/ath9k/init.c
-@@ -15,6 +15,7 @@
-  */
- #include <linux/slab.h>
-+#include <linux/ath9k_platform.h>
- #include "ath9k.h"
-@@ -537,6 +538,7 @@ static void ath9k_init_misc(struct ath_s
- static int ath9k_init_softc(u16 devid, struct ath_softc *sc, u16 subsysid,
-                           const struct ath_bus_ops *bus_ops)
- {
-+      struct ath9k_platform_data *pdata = sc->dev->platform_data;
-       struct ath_hw *ah = NULL;
-       struct ath_common *common;
-       int ret = 0, i;
-@@ -551,7 +553,7 @@ static int ath9k_init_softc(u16 devid, s
-       ah->hw_version.subsysid = subsysid;
-       sc->sc_ah = ah;
--      if (!sc->dev->platform_data)
-+      if (!pdata)
-               ah->ah_flags |= AH_USE_EEPROM;
-       common = ath9k_hw_common(ah);
-@@ -587,6 +589,9 @@ static int ath9k_init_softc(u16 devid, s
-       if (ret)
-               goto err_hw;
-+      if (pdata && pdata->macaddr)
-+              memcpy(common->macaddr, pdata->macaddr, ETH_ALEN);
-+
-       ret = ath9k_init_queues(sc);
-       if (ret)
-               goto err_queues;
diff --git a/package/mac80211/patches/409-ath9k_platform_settings.patch b/package/mac80211/patches/409-ath9k_platform_settings.patch
deleted file mode 100644 (file)
index 6ce43b6..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/init.c
-+++ b/drivers/net/wireless/ath/ath9k/init.c
-@@ -553,8 +553,14 @@ static int ath9k_init_softc(u16 devid, s
-       ah->hw_version.subsysid = subsysid;
-       sc->sc_ah = ah;
--      if (!pdata)
-+      if (!pdata) {
-               ah->ah_flags |= AH_USE_EEPROM;
-+              sc->sc_ah->led_pin = -1;
-+      } else {
-+              sc->sc_ah->gpio_mask = pdata->gpio_mask;
-+              sc->sc_ah->gpio_val = pdata->gpio_val;
-+              sc->sc_ah->led_pin = pdata->led_pin;
-+      }
-       common = ath9k_hw_common(ah);
-       common->ops = &ath9k_common_ops;
---- a/drivers/net/wireless/ath/ath9k/hw.h
-+++ b/drivers/net/wireless/ath/ath9k/hw.h
-@@ -794,7 +794,7 @@ struct ath_hw {
-       u32 originalGain[22];
-       int initPDADC;
-       int PDADCdelta;
--      u8 led_pin;
-+      int led_pin;
-       u32 gpio_mask;
-       u32 gpio_val;
---- a/drivers/net/wireless/ath/ath9k/gpio.c
-+++ b/drivers/net/wireless/ath/ath9k/gpio.c
-@@ -44,12 +44,14 @@ void ath_init_leds(struct ath_softc *sc)
-       if (AR_SREV_9100(sc->sc_ah))
-               return;
--      if (AR_SREV_9287(sc->sc_ah))
--              sc->sc_ah->led_pin = ATH_LED_PIN_9287;
--      else if (AR_SREV_9485(sc->sc_ah))
--              sc->sc_ah->led_pin = ATH_LED_PIN_9485;
--      else
--              sc->sc_ah->led_pin = ATH_LED_PIN_DEF;
-+      if (sc->sc_ah->led_pin < 0) {
-+              if (AR_SREV_9287(sc->sc_ah))
-+                      sc->sc_ah->led_pin = ATH_LED_PIN_9287;
-+              else if (AR_SREV_9485(sc->sc_ah))
-+                      sc->sc_ah->led_pin = ATH_LED_PIN_9485;
-+              else
-+                      sc->sc_ah->led_pin = ATH_LED_PIN_DEF;
-+      }
-       /* Configure gpio 1 for output */
-       ath9k_hw_cfg_output(sc->sc_ah, sc->sc_ah->led_pin,
---- a/include/linux/ath9k_platform.h
-+++ b/include/linux/ath9k_platform.h
-@@ -24,6 +24,10 @@
- struct ath9k_platform_data {
-       u16 eeprom_data[ATH9K_PLAT_EEP_MAX_WORDS];
-       u8 *macaddr;
-+
-+      int led_pin;
-+      u32 gpio_mask;
-+      u32 gpio_val;
- };
- #endif /* _LINUX_ATH9K_PLATFORM_H */
index 632ae96a6427bf41babc1bd5b56b62e407b409c2..9b75fb5df95cf390caa3a6d3d9b8f93e4b480274 100644 (file)
@@ -54,7 +54,7 @@
  int ath9k_init_debug(struct ath_hw *ah)
  {
        struct ath_common *common = ath9k_hw_common(ah);
-@@ -1151,6 +1198,9 @@ int ath9k_init_debug(struct ath_hw *ah)
+@@ -1125,6 +1172,9 @@ int ath9k_init_debug(struct ath_hw *ah)
        debugfs_create_u32("gpio_val", S_IRUSR | S_IWUSR,
                           sc->debug.debugfs_phy, &sc->sc_ah->gpio_val);
  
@@ -63,4 +63,4 @@
 +
        sc->debug.regidx = 0;
        return 0;
- err:
+ }
index 301af3c22b889c97428f83d72e3675ffe0b0a1bf..322a381874459ec5760a2ea3f646c9b57edc1450 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -1466,8 +1466,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st
+@@ -1468,8 +1468,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st
        REG_WRITE(ah, AR_OBS, 8);
  
        if (ah->config.rx_intr_mitigation) {
index 535e35927e09816b98d8b6d5c406acd221b22d00..f2ec46aa6abeb5451e25509642764efc483fec14 100644 (file)
@@ -21,7 +21,7 @@
   * Call this function for all transmitted frames after they have been
 --- a/net/mac80211/sta_info.c
 +++ b/net/mac80211/sta_info.c
-@@ -608,7 +608,8 @@ static bool sta_info_cleanup_expire_buff
+@@ -609,7 +609,8 @@ static bool sta_info_cleanup_expire_buff
  #endif
                dev_kfree_skb(skb);
  
@@ -31,7 +31,7 @@
                        sta_info_clear_tim_bit(sta);
        }
  
-@@ -899,6 +900,7 @@ void ieee80211_sta_ps_deliver_wakeup(str
+@@ -900,6 +901,7 @@ void ieee80211_sta_ps_deliver_wakeup(str
        struct ieee80211_local *local = sdata->local;
        int sent, buffered;
  
@@ -39,7 +39,7 @@
        if (!(local->hw.flags & IEEE80211_HW_AP_LINK_PS))
                drv_sta_notify(local, sdata, STA_NOTIFY_AWAKE, &sta->sta);
  
-@@ -991,3 +993,12 @@ void ieee80211_sta_block_awake(struct ie
+@@ -992,3 +994,12 @@ void ieee80211_sta_block_awake(struct ie
                ieee80211_queue_work(hw, &sta->drv_unblock_wk);
  }
  EXPORT_SYMBOL(ieee80211_sta_block_awake);
index 87cc2654b522e628386f8f29f792a0623407b09f..4799d5f910ed5095de1c52427ec75410218f40d1 100644 (file)
  /* PHY ops */
 --- a/drivers/net/wireless/ath/ath9k/hw.h
 +++ b/drivers/net/wireless/ath/ath9k/hw.h
-@@ -642,6 +642,7 @@ struct ath_hw_ops {
+@@ -646,6 +646,7 @@ struct ath_hw_ops {
                                     u32 burstDuration);
        void (*set11n_virtualmorefrag)(struct ath_hw *ah, void *ds,
                                       u32 vmf);
diff --git a/package/mac80211/patches/522-ath9k_remove_pending_frames_workaround.patch b/package/mac80211/patches/522-ath9k_remove_pending_frames_workaround.patch
deleted file mode 100644 (file)
index e368bce..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/xmit.c
-+++ b/drivers/net/wireless/ath/ath9k/xmit.c
-@@ -2223,33 +2223,6 @@ static void ath_tx_complete_poll_work(st
-                               } else {
-                                       txq->axq_tx_inprogress = true;
-                               }
--                      } else {
--                              /* If the queue has pending buffers, then it
--                               * should be doing tx work (and have axq_depth).
--                               * Shouldn't get to this state I think..but
--                               * we do.
--                               */
--                              if (!(sc->sc_flags & (SC_OP_OFFCHANNEL)) &&
--                                  (txq->pending_frames > 0 ||
--                                   !list_empty(&txq->axq_acq) ||
--                                   txq->stopped)) {
--                                      ath_err(ath9k_hw_common(sc->sc_ah),
--                                              "txq: %p axq_qnum: %u,"
--                                              " mac80211_qnum: %i"
--                                              " axq_link: %p"
--                                              " pending frames: %i"
--                                              " axq_acq empty: %i"
--                                              " stopped: %i"
--                                              " axq_depth: 0  Attempting to"
--                                              " restart tx logic.\n",
--                                              txq, txq->axq_qnum,
--                                              txq->mac80211_qnum,
--                                              txq->axq_link,
--                                              txq->pending_frames,
--                                              list_empty(&txq->axq_acq),
--                                              txq->stopped);
--                                      ath_txq_schedule(sc, txq);
--                              }
-                       }
-                       spin_unlock_bh(&txq->axq_lock);
-               }
index 03a4fe5d37bc38c2cd9ef2c1f97e214f3522420c..c956a20580d0e78636c5999709a732e95090bf47 100644 (file)
@@ -1,6 +1,6 @@
 --- a/net/mac80211/rx.c
 +++ b/net/mac80211/rx.c
-@@ -1582,7 +1582,7 @@ ieee80211_drop_unencrypted_mgmt(struct i
+@@ -1584,7 +1584,7 @@ ieee80211_drop_unencrypted_mgmt(struct i
  }
  
  static int
@@ -9,7 +9,7 @@
  {
        struct ieee80211_sub_if_data *sdata = rx->sdata;
        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
-@@ -1590,6 +1590,7 @@ __ieee80211_data_to_8023(struct ieee8021
+@@ -1592,6 +1592,7 @@ __ieee80211_data_to_8023(struct ieee8021
        struct ethhdr *ehdr;
        int ret;
  
@@ -17,7 +17,7 @@
        if (ieee80211_has_a4(hdr->frame_control) &&
            sdata->vif.type == NL80211_IFTYPE_AP_VLAN && !sdata->u.vlan.sta)
                return -1;
-@@ -1608,11 +1609,14 @@ __ieee80211_data_to_8023(struct ieee8021
+@@ -1610,11 +1611,14 @@ __ieee80211_data_to_8023(struct ieee8021
                return -1;
  
        ret = ieee80211_data_to_8023(rx->skb, sdata->vif.addr, sdata->vif.type);
@@ -34,7 +34,7 @@
                return -1;
  
        return 0;
-@@ -1913,6 +1917,7 @@ ieee80211_rx_h_data(struct ieee80211_rx_
+@@ -1915,6 +1919,7 @@ ieee80211_rx_h_data(struct ieee80211_rx_
        struct net_device *dev = sdata->dev;
        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
        __le16 fc = hdr->frame_control;
@@ -42,7 +42,7 @@
        int err;
  
        if (unlikely(!ieee80211_is_data(hdr->frame_control)))
-@@ -1929,13 +1934,21 @@ ieee80211_rx_h_data(struct ieee80211_rx_
+@@ -1931,13 +1936,21 @@ ieee80211_rx_h_data(struct ieee80211_rx_
            sdata->vif.type == NL80211_IFTYPE_AP)
                return RX_DROP_MONITOR;
  
diff --git a/package/mac80211/patches/540-ath9k_ar9100_blockack_fix.patch b/package/mac80211/patches/540-ath9k_ar9100_blockack_fix.patch
deleted file mode 100644 (file)
index 2a09f7f..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/hw.c
-+++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -411,6 +411,8 @@ static void ath9k_hw_init_defaults(struc
-       ah->sta_id1_defaults =
-               AR_STA_ID1_CRPT_MIC_ENABLE |
-               AR_STA_ID1_MCAST_KSRCH;
-+      if (AR_SREV_9100(ah))
-+              ah->sta_id1_defaults |= AR_STA_ID1_AR9100_BA_FIX;
-       ah->enable_32kHz_clock = DONT_USE_32KHZ;
-       ah->slottime = 20;
-       ah->globaltxtimeout = (u32) -1;
---- a/drivers/net/wireless/ath/ath9k/reg.h
-+++ b/drivers/net/wireless/ath/ath9k/reg.h
-@@ -1396,6 +1396,7 @@ enum {
- #define AR_STA_ID1_PCF             0x00100000
- #define AR_STA_ID1_USE_DEFANT      0x00200000
- #define AR_STA_ID1_DEFANT_UPDATE   0x00400000
-+#define AR_STA_ID1_AR9100_BA_FIX   0x00400000
- #define AR_STA_ID1_RTS_USE_DEF     0x00800000
- #define AR_STA_ID1_ACKCTS_6MB      0x01000000
- #define AR_STA_ID1_BASE_RATE_11B   0x02000000
diff --git a/package/mac80211/patches/540-mac80211_fix_rx_reorder_timeout.patch b/package/mac80211/patches/540-mac80211_fix_rx_reorder_timeout.patch
new file mode 100644 (file)
index 0000000..c3532b4
--- /dev/null
@@ -0,0 +1,11 @@
+--- a/net/mac80211/rx.c
++++ b/net/mac80211/rx.c
+@@ -613,7 +613,7 @@ static void ieee80211_sta_reorder_releas
+                               continue;
+                       }
+                       if (!time_after(jiffies, tid_agg_rx->reorder_time[j] +
+-                                      HT_RX_REORDER_BUF_TIMEOUT))
++                                      HT_RX_REORDER_BUF_TIMEOUT) && skipped)
+                               goto set_release_timer;
+ #ifdef CONFIG_MAC80211_HT_DEBUG
diff --git a/package/mac80211/patches/541-ath9k_ar9100_rx_chainmask_fix.patch b/package/mac80211/patches/541-ath9k_ar9100_rx_chainmask_fix.patch
deleted file mode 100644 (file)
index fb06f01..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/hw.c
-+++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -1878,6 +1878,8 @@ int ath9k_hw_fill_cap_info(struct ath_hw
-           !(AR_SREV_9271(ah)))
-               /* CB71: GPIO 0 is pulled down to indicate 3 rx chains */
-               pCap->rx_chainmask = ath9k_hw_gpio_get(ah, 0) ? 0x5 : 0x7;
-+      else if (AR_SREV_9100(ah))
-+              pCap->rx_chainmask = 0x7;
-       else
-               /* Use rx_chainmask from EEPROM. */
-               pCap->rx_chainmask = ah->eep_ops->get_eeprom(ah, EEP_RX_MASK);
diff --git a/package/mac80211/patches/550-ath9k_increase_bcbuf.patch b/package/mac80211/patches/550-ath9k_increase_bcbuf.patch
new file mode 100644 (file)
index 0000000..91ec1dc
--- /dev/null
@@ -0,0 +1,24 @@
+--- a/drivers/net/wireless/ath/ath9k/ath9k.h
++++ b/drivers/net/wireless/ath/ath9k/ath9k.h
+@@ -369,7 +369,7 @@ struct ath_vif {
+  * number of beacon intervals, the game's up.
+  */
+ #define BSTUCK_THRESH                 9
+-#define       ATH_BCBUF                       4
++#define       ATH_BCBUF                       8
+ #define ATH_DEFAULT_BINTVAL           100 /* TU */
+ #define ATH_DEFAULT_BMISS_LIMIT       10
+ #define IEEE80211_MS_TO_TU(x)           (((x) * 1000) / 1024)
+--- a/drivers/net/wireless/ath/ath9k/hw.c
++++ b/drivers/net/wireless/ath/ath9k/hw.c
+@@ -349,8 +349,8 @@ static void ath9k_hw_init_config(struct 
+ {
+       int i;
+-      ah->config.dma_beacon_response_time = 2;
+-      ah->config.sw_beacon_response_time = 10;
++      ah->config.dma_beacon_response_time = 1;
++      ah->config.sw_beacon_response_time = 6;
+       ah->config.additional_swba_backoff = 0;
+       ah->config.ack_6mb = 0x0;
+       ah->config.cwm_ignore_extcca = 0;
diff --git a/package/mac80211/patches/550-mac80211_fix_rx_reorder_timeout.patch b/package/mac80211/patches/550-mac80211_fix_rx_reorder_timeout.patch
deleted file mode 100644 (file)
index c3532b4..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/net/mac80211/rx.c
-+++ b/net/mac80211/rx.c
-@@ -613,7 +613,7 @@ static void ieee80211_sta_reorder_releas
-                               continue;
-                       }
-                       if (!time_after(jiffies, tid_agg_rx->reorder_time[j] +
--                                      HT_RX_REORDER_BUF_TIMEOUT))
-+                                      HT_RX_REORDER_BUF_TIMEOUT) && skipped)
-                               goto set_release_timer;
- #ifdef CONFIG_MAC80211_HT_DEBUG
diff --git a/package/mac80211/patches/560-ath9k_debugfs_cleanup.patch b/package/mac80211/patches/560-ath9k_debugfs_cleanup.patch
deleted file mode 100644 (file)
index 70e7ac5..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/debug.c
-+++ b/drivers/net/wireless/ath/ath9k/debug.c
-@@ -1135,76 +1135,43 @@ int ath9k_init_debug(struct ath_hw *ah)
-               return -ENOMEM;
- #ifdef CONFIG_ATH_DEBUG
--      if (!debugfs_create_file("debug", S_IRUSR | S_IWUSR,
--                      sc->debug.debugfs_phy, sc, &fops_debug))
--              goto err;
-+      debugfs_create_file("debug", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy,
-+                          sc, &fops_debug);
- #endif
--
--      if (!debugfs_create_file("dma", S_IRUSR, sc->debug.debugfs_phy,
--                      sc, &fops_dma))
--              goto err;
--
--      if (!debugfs_create_file("interrupt", S_IRUSR, sc->debug.debugfs_phy,
--                      sc, &fops_interrupt))
--              goto err;
--
--      if (!debugfs_create_file("wiphy", S_IRUSR | S_IWUSR,
--                      sc->debug.debugfs_phy, sc, &fops_wiphy))
--              goto err;
--
--      if (!debugfs_create_file("xmit", S_IRUSR, sc->debug.debugfs_phy,
--                      sc, &fops_xmit))
--              goto err;
--
--      if (!debugfs_create_file("stations", S_IRUSR, sc->debug.debugfs_phy,
--                      sc, &fops_stations))
--              goto err;
--
--      if (!debugfs_create_file("misc", S_IRUSR, sc->debug.debugfs_phy,
--                      sc, &fops_misc))
--              goto err;
--
--      if (!debugfs_create_file("recv", S_IRUSR, sc->debug.debugfs_phy,
--                      sc, &fops_recv))
--              goto err;
--
--      if (!debugfs_create_file("rx_chainmask", S_IRUSR | S_IWUSR,
--                      sc->debug.debugfs_phy, sc, &fops_rx_chainmask))
--              goto err;
--
--      if (!debugfs_create_file("tx_chainmask", S_IRUSR | S_IWUSR,
--                      sc->debug.debugfs_phy, sc, &fops_tx_chainmask))
--              goto err;
--
--      if (!debugfs_create_file("regidx", S_IRUSR | S_IWUSR,
--                      sc->debug.debugfs_phy, sc, &fops_regidx))
--              goto err;
--
--      if (!debugfs_create_file("regval", S_IRUSR | S_IWUSR,
--                      sc->debug.debugfs_phy, sc, &fops_regval))
--              goto err;
--
--      if (!debugfs_create_bool("ignore_extcca", S_IRUSR | S_IWUSR,
--                      sc->debug.debugfs_phy, &ah->config.cwm_ignore_extcca))
--              goto err;
--
--      if (!debugfs_create_file("regdump", S_IRUSR, sc->debug.debugfs_phy,
--                      sc, &fops_regdump))
--              goto err;
--
-+      debugfs_create_file("dma", S_IRUSR, sc->debug.debugfs_phy, sc,
-+                          &fops_dma);
-+      debugfs_create_file("interrupt", S_IRUSR, sc->debug.debugfs_phy, sc,
-+                          &fops_interrupt);
-+      debugfs_create_file("wiphy", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy,
-+                          sc, &fops_wiphy);
-+      debugfs_create_file("xmit", S_IRUSR, sc->debug.debugfs_phy, sc,
-+                          &fops_xmit);
-+      debugfs_create_file("stations", S_IRUSR, sc->debug.debugfs_phy, sc,
-+                          &fops_stations);
-+      debugfs_create_file("misc", S_IRUSR, sc->debug.debugfs_phy, sc,
-+                          &fops_misc);
-+      debugfs_create_file("recv", S_IRUSR, sc->debug.debugfs_phy, sc,
-+                          &fops_recv);
-+      debugfs_create_file("rx_chainmask", S_IRUSR | S_IWUSR,
-+                          sc->debug.debugfs_phy, sc, &fops_rx_chainmask);
-+      debugfs_create_file("tx_chainmask", S_IRUSR | S_IWUSR,
-+                          sc->debug.debugfs_phy, sc, &fops_tx_chainmask);
-+      debugfs_create_file("regidx", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy,
-+                          sc, &fops_regidx);
-+      debugfs_create_file("regval", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy,
-+                          sc, &fops_regval);
-+      debugfs_create_bool("ignore_extcca", S_IRUSR | S_IWUSR,
-+                          sc->debug.debugfs_phy,
-+                          &ah->config.cwm_ignore_extcca);
-+      debugfs_create_file("regdump", S_IRUSR, sc->debug.debugfs_phy, sc,
-+                          &fops_regdump);
-       debugfs_create_u32("gpio_mask", S_IRUSR | S_IWUSR,
-                          sc->debug.debugfs_phy, &sc->sc_ah->gpio_mask);
--
-       debugfs_create_u32("gpio_val", S_IRUSR | S_IWUSR,
-                          sc->debug.debugfs_phy, &sc->sc_ah->gpio_val);
--
-       debugfs_create_file("eeprom", S_IRUSR, sc->debug.debugfs_phy, sc,
-                           &fops_eeprom);
-       sc->debug.regidx = 0;
-       return 0;
--err:
--      debugfs_remove_recursive(sc->debug.debugfs_phy);
--      sc->debug.debugfs_phy = NULL;
--      return -ENOMEM;
- }
diff --git a/package/mac80211/patches/561-ath9k_fix_staggered_beacons.patch b/package/mac80211/patches/561-ath9k_fix_staggered_beacons.patch
deleted file mode 100644 (file)
index 08f9125..0000000
+++ /dev/null
@@ -1,317 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/beacon.c
-+++ b/drivers/net/wireless/ath/ath9k/beacon.c
-@@ -57,8 +57,8 @@ int ath_beaconq_config(struct ath_softc 
- /*
-  *  Associates the beacon frame buffer with a transmit descriptor.  Will set
-- *  up all required antenna switch parameters, rate codes, and channel flags.
-- *  Beacons are always sent out at the lowest rate, and are not retried.
-+ *  up rate codes, and channel flags. Beacons are always sent out at the
-+ *  lowest rate, and are not retried.
- */
- static void ath_beacon_setup(struct ath_softc *sc, struct ath_vif *avp,
-                            struct ath_buf *bf, int rateidx)
-@@ -68,7 +68,7 @@ static void ath_beacon_setup(struct ath_
-       struct ath_common *common = ath9k_hw_common(ah);
-       struct ath_desc *ds;
-       struct ath9k_11n_rate_series series[4];
--      int flags, antenna, ctsrate = 0, ctsduration = 0;
-+      int flags, ctsrate = 0, ctsduration = 0;
-       struct ieee80211_supported_band *sband;
-       u8 rate = 0;
-@@ -76,12 +76,6 @@ static void ath_beacon_setup(struct ath_
-       flags = ATH9K_TXDESC_NOACK;
-       ds->ds_link = 0;
--      /*
--       * Switch antenna every beacon.
--       * Should only switch every beacon period, not for every SWBA
--       * XXX assumes two antennae
--       */
--      antenna = ((sc->beacon.ast_be_xmit / sc->nbcnvifs) & 1 ? 2 : 1);
-       sband = &sc->sbands[common->hw->conf.channel->band];
-       rate = sband->bitrates[rateidx].hw_value;
-@@ -278,7 +272,7 @@ int ath_beacon_alloc(struct ath_softc *s
-               return -ENOMEM;
-       tstamp = ((struct ieee80211_mgmt *)skb->data)->u.beacon.timestamp;
--      sc->beacon.bc_tstamp = le64_to_cpu(tstamp);
-+      sc->beacon.bc_tstamp = (u32) le64_to_cpu(tstamp);
-       /* Calculate a TSF adjustment factor required for staggered beacons. */
-       if (avp->av_bslot > 0) {
-               u64 tsfadjust;
-@@ -294,8 +288,8 @@ int ath_beacon_alloc(struct ath_softc *s
-                * adjustment. Other slots are adjusted to get the timestamp
-                * close to the TBTT for the BSS.
-                */
--              tsfadjust = intval * avp->av_bslot / ATH_BCBUF;
--              avp->tsf_adjust = cpu_to_le64(TU_TO_USEC(tsfadjust));
-+              tsfadjust = TU_TO_USEC(intval * avp->av_bslot) / ATH_BCBUF;
-+              avp->tsf_adjust = cpu_to_le64(tsfadjust);
-               ath_dbg(common, ATH_DBG_BEACON,
-                       "stagger beacons, bslot %d intval %u tsfadjust %llu\n",
-@@ -401,8 +395,9 @@ void ath_beacon_tasklet(unsigned long da
-       intval = cur_conf->beacon_interval ? : ATH_DEFAULT_BINTVAL;
-       tsf = ath9k_hw_gettsf64(ah);
--      tsftu = TSF_TO_TU(tsf>>32, tsf);
--      slot = ((tsftu % intval) * ATH_BCBUF) / intval;
-+      tsf += TU_TO_USEC(ah->config.sw_beacon_response_time);
-+      tsftu = TSF_TO_TU((tsf * ATH_BCBUF) >>32, tsf * ATH_BCBUF);
-+      slot = (tsftu % (intval * ATH_BCBUF)) / intval;
-       /*
-        * Reverse the slot order to get slot 0 on the TBTT offset that does
-        * not require TSF adjustment and other slots adding
-@@ -415,7 +410,7 @@ void ath_beacon_tasklet(unsigned long da
-       ath_dbg(common, ATH_DBG_BEACON,
-               "slot %d [tsf %llu tsftu %u intval %u] vif %p\n",
--              slot, tsf, tsftu, intval, vif);
-+              slot, tsf, tsftu / ATH_BCBUF, intval, vif);
-       bfaddr = 0;
-       if (vif) {
-@@ -463,13 +458,17 @@ static void ath9k_beacon_init(struct ath
-                             u32 next_beacon,
-                             u32 beacon_period)
- {
--      if (beacon_period & ATH9K_BEACON_RESET_TSF)
-+      if (sc->sc_flags & SC_OP_TSF_RESET) {
-               ath9k_ps_wakeup(sc);
-+              ath9k_hw_reset_tsf(sc->sc_ah);
-+      }
-       ath9k_hw_beaconinit(sc->sc_ah, next_beacon, beacon_period);
--      if (beacon_period & ATH9K_BEACON_RESET_TSF)
-+      if (sc->sc_flags & SC_OP_TSF_RESET) {
-               ath9k_ps_restore(sc);
-+              sc->sc_flags &= ~SC_OP_TSF_RESET;
-+      }
- }
- /*
-@@ -484,18 +483,14 @@ static void ath_beacon_config_ap(struct 
-       u32 nexttbtt, intval;
-       /* NB: the beacon interval is kept internally in TU's */
--      intval = conf->beacon_interval & ATH9K_BEACON_PERIOD;
-+      intval = TU_TO_USEC(conf->beacon_interval & ATH9K_BEACON_PERIOD);
-       intval /= ATH_BCBUF;    /* for staggered beacons */
-       nexttbtt = intval;
--      if (sc->sc_flags & SC_OP_TSF_RESET)
--              intval |= ATH9K_BEACON_RESET_TSF;
--
-       /*
-        * In AP mode we enable the beacon timers and SWBA interrupts to
-        * prepare beacon frames.
-        */
--      intval |= ATH9K_BEACON_ENA;
-       ah->imask |= ATH9K_INT_SWBA;
-       ath_beaconq_config(sc);
-@@ -505,11 +500,6 @@ static void ath_beacon_config_ap(struct 
-       ath9k_beacon_init(sc, nexttbtt, intval);
-       sc->beacon.bmisscnt = 0;
-       ath9k_hw_set_interrupts(ah, ah->imask);
--
--      /* Clear the reset TSF flag, so that subsequent beacon updation
--         will not reset the HW TSF. */
--
--      sc->sc_flags &= ~SC_OP_TSF_RESET;
- }
- /*
-@@ -643,25 +633,20 @@ static void ath_beacon_config_adhoc(stru
- {
-       struct ath_hw *ah = sc->sc_ah;
-       struct ath_common *common = ath9k_hw_common(ah);
--      u64 tsf;
--      u32 tsftu, intval, nexttbtt;
--
--      intval = conf->beacon_interval & ATH9K_BEACON_PERIOD;
--
-+      u32 tsf, delta, intval, nexttbtt;
--      /* Pull nexttbtt forward to reflect the current TSF */
-+      tsf = ath9k_hw_gettsf32(ah) + TU_TO_USEC(FUDGE);
-+      intval = TU_TO_USEC(conf->beacon_interval & ATH9K_BEACON_PERIOD);
--      nexttbtt = TSF_TO_TU(sc->beacon.bc_tstamp >> 32, sc->beacon.bc_tstamp);
--      if (nexttbtt == 0)
--                nexttbtt = intval;
--        else if (intval)
--                nexttbtt = roundup(nexttbtt, intval);
--
--      tsf = ath9k_hw_gettsf64(ah);
--      tsftu = TSF_TO_TU((u32)(tsf>>32), (u32)tsf) + FUDGE;
--      do {
--              nexttbtt += intval;
--      } while (nexttbtt < tsftu);
-+      if (!sc->beacon.bc_tstamp)
-+              nexttbtt = tsf + intval;
-+      else {
-+              if (tsf > sc->beacon.bc_tstamp)
-+                      delta = (tsf - sc->beacon.bc_tstamp);
-+              else
-+                      delta = (tsf + 1 + (~0U - sc->beacon.bc_tstamp));
-+              nexttbtt = tsf + roundup(delta, intval);
-+      }
-       ath_dbg(common, ATH_DBG_BEACON,
-               "IBSS nexttbtt %u intval %u (%u)\n",
-@@ -672,7 +657,6 @@ static void ath_beacon_config_adhoc(stru
-        * if we need to manually prepare beacon frames.  Otherwise we use a
-        * self-linked tx descriptor and let the hardware deal with things.
-        */
--      intval |= ATH9K_BEACON_ENA;
-       ah->imask |= ATH9K_INT_SWBA;
-       ath_beaconq_config(sc);
---- a/drivers/net/wireless/ath/ath9k/hw.c
-+++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -1706,21 +1706,15 @@ void ath9k_hw_beaconinit(struct ath_hw *
-       case NL80211_IFTYPE_MESH_POINT:
-               REG_SET_BIT(ah, AR_TXCFG,
-                           AR_TXCFG_ADHOC_BEACON_ATIM_TX_POLICY);
--              REG_WRITE(ah, AR_NEXT_NDP_TIMER,
--                        TU_TO_USEC(next_beacon +
--                                   (ah->atim_window ? ah->
--                                    atim_window : 1)));
-+              REG_WRITE(ah, AR_NEXT_NDP_TIMER, next_beacon +
-+                        TU_TO_USEC(ah->atim_window ? ah->atim_window : 1));
-               flags |= AR_NDP_TIMER_EN;
-       case NL80211_IFTYPE_AP:
--              REG_WRITE(ah, AR_NEXT_TBTT_TIMER, TU_TO_USEC(next_beacon));
--              REG_WRITE(ah, AR_NEXT_DMA_BEACON_ALERT,
--                        TU_TO_USEC(next_beacon -
--                                   ah->config.
--                                   dma_beacon_response_time));
--              REG_WRITE(ah, AR_NEXT_SWBA,
--                        TU_TO_USEC(next_beacon -
--                                   ah->config.
--                                   sw_beacon_response_time));
-+              REG_WRITE(ah, AR_NEXT_TBTT_TIMER, next_beacon);
-+              REG_WRITE(ah, AR_NEXT_DMA_BEACON_ALERT, next_beacon -
-+                        TU_TO_USEC(ah->config.dma_beacon_response_time));
-+              REG_WRITE(ah, AR_NEXT_SWBA, next_beacon -
-+                        TU_TO_USEC(ah->config.sw_beacon_response_time));
-               flags |=
-                       AR_TBTT_TIMER_EN | AR_DBA_TIMER_EN | AR_SWBA_TIMER_EN;
-               break;
-@@ -1732,18 +1726,13 @@ void ath9k_hw_beaconinit(struct ath_hw *
-               break;
-       }
--      REG_WRITE(ah, AR_BEACON_PERIOD, TU_TO_USEC(beacon_period));
--      REG_WRITE(ah, AR_DMA_BEACON_PERIOD, TU_TO_USEC(beacon_period));
--      REG_WRITE(ah, AR_SWBA_PERIOD, TU_TO_USEC(beacon_period));
--      REG_WRITE(ah, AR_NDP_PERIOD, TU_TO_USEC(beacon_period));
-+      REG_WRITE(ah, AR_BEACON_PERIOD, beacon_period);
-+      REG_WRITE(ah, AR_DMA_BEACON_PERIOD, beacon_period);
-+      REG_WRITE(ah, AR_SWBA_PERIOD, beacon_period);
-+      REG_WRITE(ah, AR_NDP_PERIOD, beacon_period);
-       REGWRITE_BUFFER_FLUSH(ah);
--      beacon_period &= ~ATH9K_BEACON_ENA;
--      if (beacon_period & ATH9K_BEACON_RESET_TSF) {
--              ath9k_hw_reset_tsf(ah);
--      }
--
-       REG_SET_BIT(ah, AR_TIMER_MODE, flags);
- }
- EXPORT_SYMBOL(ath9k_hw_beaconinit);
-@@ -2404,10 +2393,11 @@ static u32 rightmost_index(struct ath_ge
-       return timer_table->gen_timer_index[b];
- }
--static u32 ath9k_hw_gettsf32(struct ath_hw *ah)
-+u32 ath9k_hw_gettsf32(struct ath_hw *ah)
- {
-       return REG_READ(ah, AR_TSF_L32);
- }
-+EXPORT_SYMBOL(ath9k_hw_gettsf32);
- struct ath_gen_timer *ath_gen_timer_alloc(struct ath_hw *ah,
-                                         void (*trigger)(void *),
---- a/drivers/net/wireless/ath/ath9k/ath9k.h
-+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
-@@ -392,7 +392,7 @@ struct ath_beacon {
-       u32 beaconq;
-       u32 bmisscnt;
-       u32 ast_be_xmit;
--      u64 bc_tstamp;
-+      u32 bc_tstamp;
-       struct ieee80211_vif *bslot[ATH_BCBUF];
-       int slottime;
-       int slotupdate;
---- a/drivers/net/wireless/ath/ath9k/hw.h
-+++ b/drivers/net/wireless/ath/ath9k/hw.h
-@@ -412,8 +412,6 @@ struct ath9k_beacon_state {
-       u32 bs_nextdtim;
-       u32 bs_intval;
- #define ATH9K_BEACON_PERIOD       0x0000ffff
--#define ATH9K_BEACON_ENA          0x00800000
--#define ATH9K_BEACON_RESET_TSF    0x01000000
- #define ATH9K_TSFOOR_THRESHOLD    0x00004240 /* 16k us */
-       u32 bs_dtimperiod;
-       u16 bs_cfpperiod;
-@@ -927,6 +925,7 @@ void ath9k_hw_setopmode(struct ath_hw *a
- void ath9k_hw_setmcastfilter(struct ath_hw *ah, u32 filter0, u32 filter1);
- void ath9k_hw_setbssidmask(struct ath_hw *ah);
- void ath9k_hw_write_associd(struct ath_hw *ah);
-+u32 ath9k_hw_gettsf32(struct ath_hw *ah);
- u64 ath9k_hw_gettsf64(struct ath_hw *ah);
- void ath9k_hw_settsf64(struct ath_hw *ah, u64 tsf64);
- void ath9k_hw_reset_tsf(struct ath_hw *ah);
---- a/drivers/net/wireless/ath/ath9k/htc_drv_beacon.c
-+++ b/drivers/net/wireless/ath/ath9k/htc_drv_beacon.c
-@@ -155,7 +155,7 @@ static void ath9k_htc_beacon_config_ap(s
-       nexttbtt = intval;
-       if (priv->op_flags & OP_TSF_RESET) {
--              intval |= ATH9K_BEACON_RESET_TSF;
-+              ath9k_hw_reset_tsf(priv->ah);
-               priv->op_flags &= ~OP_TSF_RESET;
-       } else {
-               /*
-@@ -168,8 +168,6 @@ static void ath9k_htc_beacon_config_ap(s
-               } while (nexttbtt < tsftu);
-       }
--      intval |= ATH9K_BEACON_ENA;
--
-       if (priv->op_flags & OP_ENABLE_BEACON)
-               imask |= ATH9K_INT_SWBA;
-@@ -178,7 +176,7 @@ static void ath9k_htc_beacon_config_ap(s
-               bss_conf->beacon_interval, nexttbtt, imask);
-       WMI_CMD(WMI_DISABLE_INTR_CMDID);
--      ath9k_hw_beaconinit(priv->ah, nexttbtt, intval);
-+      ath9k_hw_beaconinit(priv->ah, TU_TO_USEC(nexttbtt), TU_TO_USEC(intval));
-       priv->bmiss_cnt = 0;
-       htc_imask = cpu_to_be32(imask);
-       WMI_CMD_BUF(WMI_ENABLE_INTR_CMDID, &htc_imask);
-@@ -207,7 +205,6 @@ static void ath9k_htc_beacon_config_adho
-               nexttbtt += intval;
-       } while (nexttbtt < tsftu);
--      intval |= ATH9K_BEACON_ENA;
-       if (priv->op_flags & OP_ENABLE_BEACON)
-               imask |= ATH9K_INT_SWBA;
-@@ -216,7 +213,7 @@ static void ath9k_htc_beacon_config_adho
-               bss_conf->beacon_interval, nexttbtt, imask);
-       WMI_CMD(WMI_DISABLE_INTR_CMDID);
--      ath9k_hw_beaconinit(priv->ah, nexttbtt, intval);
-+      ath9k_hw_beaconinit(priv->ah, TU_TO_USEC(nexttbtt), TU_TO_USEC(intval));
-       priv->bmiss_cnt = 0;
-       htc_imask = cpu_to_be32(imask);
-       WMI_CMD_BUF(WMI_ENABLE_INTR_CMDID, &htc_imask);
diff --git a/package/mac80211/patches/562-ath9k_increase_bcbuf.patch b/package/mac80211/patches/562-ath9k_increase_bcbuf.patch
deleted file mode 100644 (file)
index d9c6d71..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/ath9k.h
-+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
-@@ -369,7 +369,7 @@ struct ath_vif {
-  * number of beacon intervals, the game's up.
-  */
- #define BSTUCK_THRESH                 (9 * ATH_BCBUF)
--#define       ATH_BCBUF                       4
-+#define       ATH_BCBUF                       8
- #define ATH_DEFAULT_BINTVAL           100 /* TU */
- #define ATH_DEFAULT_BMISS_LIMIT       10
- #define IEEE80211_MS_TO_TU(x)           (((x) * 1000) / 1024)
---- a/drivers/net/wireless/ath/ath9k/hw.c
-+++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -349,8 +349,8 @@ static void ath9k_hw_init_config(struct 
- {
-       int i;
--      ah->config.dma_beacon_response_time = 2;
--      ah->config.sw_beacon_response_time = 10;
-+      ah->config.dma_beacon_response_time = 1;
-+      ah->config.sw_beacon_response_time = 6;
-       ah->config.additional_swba_backoff = 0;
-       ah->config.ack_6mb = 0x0;
-       ah->config.cwm_ignore_extcca = 0;
diff --git a/package/mac80211/patches/563-ath9k_reduce_bstuck_nfcal.patch b/package/mac80211/patches/563-ath9k_reduce_bstuck_nfcal.patch
deleted file mode 100644 (file)
index b744c4c..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/beacon.c
-+++ b/drivers/net/wireless/ath/ath9k/beacon.c
-@@ -368,7 +368,8 @@ void ath_beacon_tasklet(unsigned long da
-                               "missed %u consecutive beacons\n",
-                               sc->beacon.bmisscnt);
-                       ath9k_hw_stop_dma_queue(ah, sc->beacon.beaconq);
--                      ath9k_hw_bstuck_nfcal(ah);
-+                      if (sc->beacon.bmisscnt > 4)
-+                              ath9k_hw_bstuck_nfcal(ah);
-               } else if (sc->beacon.bmisscnt >= BSTUCK_THRESH) {
-                       ath_dbg(common, ATH_DBG_BSTUCK,
-                               "beacon is officially stuck\n");
diff --git a/package/mac80211/patches/570-mac80211_initialize_last_rx.patch b/package/mac80211/patches/570-mac80211_initialize_last_rx.patch
deleted file mode 100644 (file)
index edcc227..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/net/mac80211/sta_info.c
-+++ b/net/mac80211/sta_info.c
-@@ -243,6 +243,7 @@ struct sta_info *sta_info_alloc(struct i
-       memcpy(sta->sta.addr, addr, ETH_ALEN);
-       sta->local = local;
-       sta->sdata = sdata;
-+      sta->last_rx = jiffies;
-       ewma_init(&sta->avg_signal, 1024, 8);
index ebc7c6bee9814336f6e158cffc7a3b42f576e227..b19755a45cdac293f7014169bdf5e0e900a30067 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/mwl8k.c
 +++ b/drivers/net/wireless/mwl8k.c
-@@ -4500,6 +4500,7 @@ MODULE_FIRMWARE("mwl8k/fmimage_8366.fw")
+@@ -5111,6 +5111,7 @@ MODULE_FIRMWARE("mwl8k/fmimage_8366.fw")
  MODULE_FIRMWARE(MWL8K_8366_AP_FW(MWL8K_8366_AP_FW_API));
  
  static DEFINE_PCI_DEVICE_TABLE(mwl8k_pci_id_table) = {