mac80211: upgrade to compat-wireless 2010-01-15
authorFelix Fietkau <nbd@openwrt.org>
Sun, 17 Jan 2010 01:38:07 +0000 (01:38 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Sun, 17 Jan 2010 01:38:07 +0000 (01:38 +0000)
SVN-Revision: 19176

17 files changed:
package/mac80211/Makefile
package/mac80211/patches/020-fix_compat_h.patch
package/mac80211/patches/021-fix_missing_ifdefs.patch [deleted file]
package/mac80211/patches/300-ath9k_fix_init_crash.patch [deleted file]
package/mac80211/patches/301-mac80211_tx_queue_wake.patch [deleted file]
package/mac80211/patches/302-mac80211_pwr_mgmt_fix.patch
package/mac80211/patches/403-ath9k-fix-invalid-mac-address-handling.patch
package/mac80211/patches/406-ath9k-set-AH_USE_EEPROM-only-if-no-platform-data-present.patch
package/mac80211/patches/407-ath9k-override-mac-address-from-platform-data.patch
package/mac80211/patches/408-ath9k_tweak_rx_intr_mitigation.patch
package/mac80211/patches/540-ath9k_fix_rts_cts.patch [new file with mode: 0644]
package/mac80211/patches/540-short_slot_handling.patch [deleted file]
package/mac80211/patches/550-ath9k_ack_timeout_workaround.patch [new file with mode: 0644]
package/mac80211/patches/550-ath9k_clean_up_timing_handling.patch [deleted file]
package/mac80211/patches/560-ath9k_coverage_class.patch [deleted file]
package/mac80211/patches/570-ath9k_fix_rts_cts.patch [deleted file]
package/mac80211/patches/580-ath9k_ack_timeout_workaround.patch [deleted file]

index b173300db930607f712e854dda065eecd65e95ef..0d0e975b9a91d2fd2871d066693984baf97020b2 100644 (file)
@@ -10,12 +10,12 @@ include $(INCLUDE_DIR)/kernel.mk
 
 PKG_NAME:=mac80211
 
-PKG_VERSION:=2010-01-13
+PKG_VERSION:=2010-01-15
 PKG_RELEASE:=1
 PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources
 #      http://www.orbit-lab.org/kernel/compat-wireless-2.6/2010/11 \
 #      http://wireless.kernel.org/download/compat-wireless-2.6
-PKG_MD5SUM:=b773266f141a1a6349b6e09b84948f02
+PKG_MD5SUM:=aa6f80ad3fcc2b663e62c7b80d37abd3
 
 PKG_SOURCE:=compat-wireless-$(PKG_VERSION).tar.bz2
 PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/compat-wireless-$(PKG_VERSION)
@@ -42,9 +42,10 @@ define KernelPackage/mac80211
   DEPENDS+= +kmod-crypto-arc4 +kmod-crypto-aes +wireless-tools +iw @!LINUX_2_6_21 @!LINUX_2_6_25
   FILES:= \
        $(PKG_BUILD_DIR)/compat/compat.$(LINUX_KMOD_SUFFIX) \
+       $(PKG_BUILD_DIR)/compat/compat_firmware_class.$(LINUX_KMOD_SUFFIX) \
        $(PKG_BUILD_DIR)/net/mac80211/mac80211.$(LINUX_KMOD_SUFFIX) \
        $(PKG_BUILD_DIR)/net/wireless/cfg80211.$(LINUX_KMOD_SUFFIX)
-  AUTOLOAD:=$(call AutoLoad,20,compat cfg80211 mac80211)
+  AUTOLOAD:=$(call AutoLoad,20,compat compat_firmware_class cfg80211 mac80211)
 endef
 
 define KernelPackage/mac80211/config
index 7f90cf4dc9a7e2292e5eca83d8f6154e9aa7b66e..b001cf2edd89a0257cacdc6181e01c98d24aeb05 100644 (file)
@@ -1,6 +1,6 @@
 --- a/include/linux/compat-2.6.32.h
 +++ b/include/linux/compat-2.6.32.h
-@@ -7,7 +7,7 @@
+@@ -6,7 +6,7 @@
  #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,32))
  
  #include <linux/netdevice.h>
@@ -8,4 +8,4 @@
 +#include <linux/compat.h>
  #include <net/iw_handler.h>
  #include <linux/workqueue.h>
+ #include <linux/firmware.h>
diff --git a/package/mac80211/patches/021-fix_missing_ifdefs.patch b/package/mac80211/patches/021-fix_missing_ifdefs.patch
deleted file mode 100644 (file)
index 2c838eb..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
---- a/compat/compat-2.6.33.c
-+++ b/compat/compat-2.6.33.c
-@@ -12,6 +12,7 @@
- #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33))
-+#ifdef CONFIG_PCCARD
- /**
-  * pccard_loop_tuple() - loop over tuples in the CIS
-@@ -125,6 +126,7 @@ int pcmcia_loop_tuple(struct pcmcia_devi
- EXPORT_SYMBOL(pcmcia_loop_tuple);
- /* Source: drivers/pcmcia/pcmcia_resource.c */
-+#endif
- #endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)) */
diff --git a/package/mac80211/patches/300-ath9k_fix_init_crash.patch b/package/mac80211/patches/300-ath9k_fix_init_crash.patch
deleted file mode 100644 (file)
index 8f3540b..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/ahb.c
-+++ b/drivers/net/wireless/ath/ath9k/ahb.c
-@@ -121,6 +121,9 @@ static int ath_ahb_probe(struct platform
-       sc->mem = mem;
-       sc->irq = irq;
-+      /* Will be cleared in ath9k_start() */
-+      sc->sc_flags |= SC_OP_INVALID;
-+
-       ret = request_irq(irq, ath_isr, IRQF_SHARED, "ath9k", sc);
-       if (ret) {
-               dev_err(&pdev->dev, "request_irq failed\n");
---- a/drivers/net/wireless/ath/ath9k/init.c
-+++ b/drivers/net/wireless/ath/ath9k/init.c
-@@ -534,8 +534,6 @@ static int ath9k_init_softc(u16 devid, s
-       int ret = 0, i;
-       int csz = 0;
--      sc->sc_flags |= SC_OP_INVALID;
--
-       ah = kzalloc(sizeof(struct ath_hw), GFP_KERNEL);
-       if (!ah)
-               return -ENOMEM;
---- a/drivers/net/wireless/ath/ath9k/pci.c
-+++ b/drivers/net/wireless/ath/ath9k/pci.c
-@@ -202,6 +202,9 @@ static int ath_pci_probe(struct pci_dev 
-       sc->dev = &pdev->dev;
-       sc->mem = mem;
-+      /* Will be cleared in ath9k_start() */
-+      sc->sc_flags |= SC_OP_INVALID;
-+
-       ret = request_irq(pdev->irq, ath_isr, IRQF_SHARED, "ath9k", sc);
-       if (ret) {
-               dev_err(&pdev->dev, "request_irq failed\n");
diff --git a/package/mac80211/patches/301-mac80211_tx_queue_wake.patch b/package/mac80211/patches/301-mac80211_tx_queue_wake.patch
deleted file mode 100644 (file)
index 1934fcc..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
---- a/net/mac80211/offchannel.c
-+++ b/net/mac80211/offchannel.c
-@@ -153,9 +153,11 @@ void ieee80211_offchannel_return(struct 
-               if (sdata->vif.type == NL80211_IFTYPE_STATION) {
-                       if (sdata->u.mgd.associated)
-                               ieee80211_offchannel_ps_disable(sdata);
--                      netif_tx_wake_all_queues(sdata->dev);
-               }
-+              if (sdata->vif.type != NL80211_IFTYPE_MONITOR)
-+                      netif_tx_wake_all_queues(sdata->dev);
-+
-               /* re-enable beaconing */
-               if (enable_beaconing &&
-                   (sdata->vif.type == NL80211_IFTYPE_AP ||
index 628fc1d20d2e6fa9fedfd8dd3ea4a8a192bd9d1a..30a91840ebd6d104e7a1034540866a655dc19422 100644 (file)
@@ -1,8 +1,8 @@
 --- a/net/mac80211/cfg.c
 +++ b/net/mac80211/cfg.c
-@@ -1384,6 +1384,9 @@ static int ieee80211_set_power_mgmt(stru
-       struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
-       struct ieee80211_conf *conf = &local->hw.conf;
+@@ -1394,6 +1394,9 @@ static int ieee80211_set_power_mgmt(stru
+       if (sdata->vif.type != NL80211_IFTYPE_STATION)
+               return -EOPNOTSUPP;
  
 +      if (sdata->vif.type != NL80211_IFTYPE_STATION)
 +              return 0;
index 63cb3d979e7207868cac2cc7ff815486463d09a5..c41495175269d82a4a4346f7a182c2d5818ee641 100644 (file)
@@ -8,7 +8,7 @@
  #include <asm/unaligned.h>
  
  #include "hw.h"
-@@ -461,8 +462,18 @@ static int ath9k_hw_init_macaddr(struct 
+@@ -437,8 +438,18 @@ static int ath9k_hw_init_macaddr(struct 
                common->macaddr[2 * i] = eeval >> 8;
                common->macaddr[2 * i + 1] = eeval & 0xff;
        }
index c09935ee75b5c39938f6e54c29df6b2a55c0c983..a83242f919482b94d6b4471582d0a9170d9ded2a 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -403,11 +403,8 @@ static void ath9k_hw_init_defaults(struc
+@@ -381,11 +381,8 @@ static void ath9k_hw_init_defaults(struc
        ah->hw_version.magic = AR5416_MAGIC;
        ah->hw_version.subvendorid = 0;
  
index 615de77a5913dfd432f33b81faa102f15d32d5b0..dae663dd7ad4d183b288ab46db5c017edf46e08f 100644 (file)
@@ -11,7 +11,7 @@
  #include "hw.h"
  #include "rc.h"
  #include "initvals.h"
-@@ -448,17 +450,23 @@ static int ath9k_hw_rf_claim(struct ath_
+@@ -424,17 +426,23 @@ static int ath9k_hw_rf_claim(struct ath_
  static int ath9k_hw_init_macaddr(struct ath_hw *ah)
  {
        struct ath_common *common = ath9k_hw_common(ah);
index b900f411f6f8a4b800467687fbd6a8c438cc2cb4..e3df0ad14a1b07cec7fc0951a97f9caedce2293c 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -2109,7 +2109,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st
+@@ -2088,7 +2088,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st
  
        if (ah->config.rx_intr_mitigation) {
                REG_RMW_FIELD(ah, AR_RIMT, AR_RIMT_LAST, 500);
diff --git a/package/mac80211/patches/540-ath9k_fix_rts_cts.patch b/package/mac80211/patches/540-ath9k_fix_rts_cts.patch
new file mode 100644 (file)
index 0000000..789623c
--- /dev/null
@@ -0,0 +1,61 @@
+--- a/drivers/net/wireless/ath/ath9k/xmit.c
++++ b/drivers/net/wireless/ath/ath9k/xmit.c
+@@ -1498,26 +1498,6 @@ static void ath_buf_set_rate(struct ath_
+       if (sc->sc_flags & SC_OP_PREAMBLE_SHORT)
+               ctsrate |= rate->hw_value_short;
+-      /*
+-       * ATH9K_TXDESC_RTSENA and ATH9K_TXDESC_CTSENA are mutually exclusive.
+-       * Check the first rate in the series to decide whether RTS/CTS
+-       * or CTS-to-self has to be used.
+-       */
+-      if (rates[0].flags & IEEE80211_TX_RC_USE_CTS_PROTECT)
+-              flags = ATH9K_TXDESC_CTSENA;
+-      else if (rates[0].flags & IEEE80211_TX_RC_USE_RTS_CTS)
+-              flags = ATH9K_TXDESC_RTSENA;
+-
+-      /* FIXME: Handle aggregation protection */
+-      if (sc->config.ath_aggr_prot &&
+-          (!bf_isaggr(bf) || (bf_isaggr(bf) && bf->bf_al < 8192))) {
+-              flags = ATH9K_TXDESC_RTSENA;
+-      }
+-
+-      /* For AR5416 - RTS cannot be followed by a frame larger than 8K */
+-      if (bf_isaggr(bf) && (bf->bf_al > sc->sc_ah->caps.rts_aggr_limit))
+-              flags &= ~(ATH9K_TXDESC_RTSENA);
+-
+       for (i = 0; i < 4; i++) {
+               bool is_40, is_sgi, is_sp;
+               int phy;
+@@ -1529,8 +1509,15 @@ static void ath_buf_set_rate(struct ath_
+               series[i].Tries = rates[i].count;
+               series[i].ChSel = common->tx_chainmask;
+-              if (rates[i].flags & IEEE80211_TX_RC_USE_RTS_CTS)
++              if ((sc->config.ath_aggr_prot && bf_isaggr(bf)) ||
++                  (rates[i].flags & IEEE80211_TX_RC_USE_RTS_CTS)) {
+                       series[i].RateFlags |= ATH9K_RATESERIES_RTS_CTS;
++                      flags |= ATH9K_TXDESC_RTSENA;
++              } else if (rates[i].flags & IEEE80211_TX_RC_USE_CTS_PROTECT) {
++                      series[i].RateFlags |= ATH9K_RATESERIES_RTS_CTS;
++                      flags |= ATH9K_TXDESC_CTSENA;
++              }
++
+               if (rates[i].flags & IEEE80211_TX_RC_40_MHZ_WIDTH)
+                       series[i].RateFlags |= ATH9K_RATESERIES_2040;
+               if (rates[i].flags & IEEE80211_TX_RC_SHORT_GI)
+@@ -1568,6 +1555,14 @@ static void ath_buf_set_rate(struct ath_
+                       phy, rate->bitrate * 100, bf->bf_frmlen, rix, is_sp);
+       }
++      /* For AR5416 - RTS cannot be followed by a frame larger than 8K */
++      if (bf_isaggr(bf) && (bf->bf_al > sc->sc_ah->caps.rts_aggr_limit))
++              flags &= ~ATH9K_TXDESC_RTSENA;
++
++      /* ATH9K_TXDESC_RTSENA and ATH9K_TXDESC_CTSENA are mutually exclusive. */
++      if (flags & ATH9K_TXDESC_RTSENA)
++              flags &= ~ATH9K_TXDESC_CTSENA;
++
+       /* set dur_update_en for l-sig computation except for PS-Poll frames */
+       ath9k_hw_set11n_ratescenario(sc->sc_ah, bf->bf_desc,
+                                    bf->bf_lastbf->bf_desc,
diff --git a/package/mac80211/patches/540-short_slot_handling.patch b/package/mac80211/patches/540-short_slot_handling.patch
deleted file mode 100644 (file)
index 7034147..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
---- a/net/mac80211/mlme.c
-+++ b/net/mac80211/mlme.c
-@@ -670,6 +670,8 @@ static u32 ieee80211_handle_bss_capabili
-       }
-       use_short_slot = !!(capab & WLAN_CAPABILITY_SHORT_SLOT_TIME);
-+      if (sdata->local->hw.conf.channel->band == IEEE80211_BAND_5GHZ)
-+              use_short_slot = true;
-       if (use_protection != bss_conf->use_cts_prot) {
-               bss_conf->use_cts_prot = use_protection;
---- a/net/mac80211/cfg.c
-+++ b/net/mac80211/cfg.c
-@@ -1087,6 +1087,13 @@ static int ieee80211_change_bss(struct w
-                       params->use_short_preamble;
-               changed |= BSS_CHANGED_ERP_PREAMBLE;
-       }
-+
-+      if (!sdata->vif.bss_conf.use_short_slot &&
-+          sdata->local->hw.conf.channel->band == IEEE80211_BAND_5GHZ) {
-+              sdata->vif.bss_conf.use_short_slot = true;
-+              changed |= BSS_CHANGED_ERP_SLOT;
-+      }
-+
-       if (params->use_short_slot_time >= 0) {
-               sdata->vif.bss_conf.use_short_slot =
-                       params->use_short_slot_time;
diff --git a/package/mac80211/patches/550-ath9k_ack_timeout_workaround.patch b/package/mac80211/patches/550-ath9k_ack_timeout_workaround.patch
new file mode 100644 (file)
index 0000000..953c07a
--- /dev/null
@@ -0,0 +1,14 @@
+--- a/drivers/net/wireless/ath/ath9k/hw.c
++++ b/drivers/net/wireless/ath/ath9k/hw.c
+@@ -1229,6 +1229,11 @@ void ath9k_hw_init_global_settings(struc
+       /* As defined by IEEE 802.11-2007 17.3.8.6 */
+       slottime = ah->slottime + 3 * ah->coverage_class;
+       acktimeout = slottime + sifstime;
++
++      /* Workaround for a hw issue */
++      if (conf->channel && conf->channel->band == IEEE80211_BAND_2GHZ)
++              acktimeout = max(64, acktimeout);
++
+       ath9k_hw_setslottime(ah, slottime);
+       ath9k_hw_set_ack_timeout(ah, acktimeout);
+       ath9k_hw_set_cts_timeout(ah, acktimeout);
diff --git a/package/mac80211/patches/550-ath9k_clean_up_timing_handling.patch b/package/mac80211/patches/550-ath9k_clean_up_timing_handling.patch
deleted file mode 100644 (file)
index dc65022..0000000
+++ /dev/null
@@ -1,229 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/main.c
-+++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -1790,6 +1790,7 @@ static void ath9k_bss_info_changed(struc
-       struct ath_hw *ah = sc->sc_ah;
-       struct ath_common *common = ath9k_hw_common(ah);
-       struct ath_vif *avp = (void *)vif->drv_priv;
-+      int slottime;
-       int error;
-       mutex_lock(&sc->mutex);
-@@ -1825,6 +1826,25 @@ static void ath9k_bss_info_changed(struc
-                       ath_beacon_config(sc, vif);
-       }
-+      if (changed & BSS_CHANGED_ERP_SLOT) {
-+              if (bss_conf->use_short_slot)
-+                      slottime = 9;
-+              else
-+                      slottime = 20;
-+              if (vif->type == NL80211_IFTYPE_AP) {
-+                      /*
-+                       * Defer update, so that connected stations can adjust
-+                       * their settings at the same time.
-+                       * See beacon.c for more details
-+                       */
-+                      sc->beacon.slottime = slottime;
-+                      sc->beacon.updateslot = UPDATE;
-+              } else {
-+                      ah->slottime = slottime;
-+                      ath9k_hw_init_global_settings(ah);
-+              }
-+      }
-+
-       /* Disable transmission of beacons */
-       if ((changed & BSS_CHANGED_BEACON_ENABLED) && !bss_conf->enable_beacon)
-               ath9k_hw_stoptxdma(sc->sc_ah, sc->beacon.beaconq);
---- a/drivers/net/wireless/ath/ath9k/hw.c
-+++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -55,28 +55,6 @@ module_exit(ath9k_exit);
- /* Helper Functions */
- /********************/
--static u32 ath9k_hw_mac_usec(struct ath_hw *ah, u32 clks)
--{
--      struct ieee80211_conf *conf = &ath9k_hw_common(ah)->hw->conf;
--
--      if (!ah->curchan) /* should really check for CCK instead */
--              return clks / ATH9K_CLOCK_RATE_CCK;
--      if (conf->channel->band == IEEE80211_BAND_2GHZ)
--              return clks / ATH9K_CLOCK_RATE_2GHZ_OFDM;
--
--      return clks / ATH9K_CLOCK_RATE_5GHZ_OFDM;
--}
--
--static u32 ath9k_hw_mac_to_usec(struct ath_hw *ah, u32 clks)
--{
--      struct ieee80211_conf *conf = &ath9k_hw_common(ah)->hw->conf;
--
--      if (conf_is_ht40(conf))
--              return ath9k_hw_mac_usec(ah, clks) / 2;
--      else
--              return ath9k_hw_mac_usec(ah, clks);
--}
--
- static u32 ath9k_hw_mac_clks(struct ath_hw *ah, u32 usecs)
- {
-       struct ieee80211_conf *conf = &ath9k_hw_common(ah)->hw->conf;
-@@ -413,8 +391,6 @@ static void ath9k_hw_init_defaults(struc
-       ah->beacon_interval = 100;
-       ah->enable_32kHz_clock = DONT_USE_32KHZ;
-       ah->slottime = (u32) -1;
--      ah->acktimeout = (u32) -1;
--      ah->ctstimeout = (u32) -1;
-       ah->globaltxtimeout = (u32) -1;
-       ah->power_mode = ATH9K_PM_UNDEFINED;
- }
-@@ -1196,34 +1172,25 @@ static void ath9k_hw_init_interrupt_mask
-       }
- }
--static bool ath9k_hw_set_ack_timeout(struct ath_hw *ah, u32 us)
-+static void ath9k_hw_setslottime(struct ath_hw *ah, u32 us)
- {
--      if (us > ath9k_hw_mac_to_usec(ah, MS(0xffffffff, AR_TIME_OUT_ACK))) {
--              ath_print(ath9k_hw_common(ah), ATH_DBG_RESET,
--                        "bad ack timeout %u\n", us);
--              ah->acktimeout = (u32) -1;
--              return false;
--      } else {
--              REG_RMW_FIELD(ah, AR_TIME_OUT,
--                            AR_TIME_OUT_ACK, ath9k_hw_mac_to_clks(ah, us));
--              ah->acktimeout = us;
--              return true;
--      }
-+      u32 val = ath9k_hw_mac_to_clks(ah, us);
-+      val = min(val, (u32) 0xFFFF);
-+      REG_WRITE(ah, AR_D_GBL_IFS_SLOT, val);
- }
--static bool ath9k_hw_set_cts_timeout(struct ath_hw *ah, u32 us)
-+static void ath9k_hw_set_ack_timeout(struct ath_hw *ah, u32 us)
- {
--      if (us > ath9k_hw_mac_to_usec(ah, MS(0xffffffff, AR_TIME_OUT_CTS))) {
--              ath_print(ath9k_hw_common(ah), ATH_DBG_RESET,
--                        "bad cts timeout %u\n", us);
--              ah->ctstimeout = (u32) -1;
--              return false;
--      } else {
--              REG_RMW_FIELD(ah, AR_TIME_OUT,
--                            AR_TIME_OUT_CTS, ath9k_hw_mac_to_clks(ah, us));
--              ah->ctstimeout = us;
--              return true;
--      }
-+      u32 val = ath9k_hw_mac_to_clks(ah, us);
-+      val = min(val, (u32) MS(0xFFFFFFFF, AR_TIME_OUT_ACK));
-+      REG_RMW_FIELD(ah, AR_TIME_OUT, AR_TIME_OUT_ACK, val);
-+}
-+
-+static void ath9k_hw_set_cts_timeout(struct ath_hw *ah, u32 us)
-+{
-+      u32 val = ath9k_hw_mac_to_clks(ah, us);
-+      val = min(val, (u32) MS(0xFFFFFFFF, AR_TIME_OUT_CTS));
-+      REG_RMW_FIELD(ah, AR_TIME_OUT, AR_TIME_OUT_CTS, val);
- }
- static bool ath9k_hw_set_global_txtimeout(struct ath_hw *ah, u32 tu)
-@@ -1240,23 +1207,32 @@ static bool ath9k_hw_set_global_txtimeou
-       }
- }
--static void ath9k_hw_init_user_settings(struct ath_hw *ah)
-+void ath9k_hw_init_global_settings(struct ath_hw *ah)
- {
-+      struct ieee80211_conf *conf = &ath9k_hw_common(ah)->hw->conf;
-+      int acktimeout;
-+      int sifstime;
-+
-       ath_print(ath9k_hw_common(ah), ATH_DBG_RESET, "ah->misc_mode 0x%x\n",
-                 ah->misc_mode);
-       if (ah->misc_mode != 0)
-               REG_WRITE(ah, AR_PCU_MISC,
-                         REG_READ(ah, AR_PCU_MISC) | ah->misc_mode);
--      if (ah->slottime != (u32) -1)
--              ath9k_hw_setslottime(ah, ah->slottime);
--      if (ah->acktimeout != (u32) -1)
--              ath9k_hw_set_ack_timeout(ah, ah->acktimeout);
--      if (ah->ctstimeout != (u32) -1)
--              ath9k_hw_set_cts_timeout(ah, ah->ctstimeout);
-+
-+      if (conf->channel && conf->channel->band == IEEE80211_BAND_5GHZ)
-+              sifstime = 16;
-+      else
-+              sifstime = 10;
-+
-+      acktimeout = ah->slottime + sifstime;
-+      ath9k_hw_setslottime(ah, ah->slottime);
-+      ath9k_hw_set_ack_timeout(ah, acktimeout);
-+      ath9k_hw_set_cts_timeout(ah, acktimeout);
-       if (ah->globaltxtimeout != (u32) -1)
-               ath9k_hw_set_global_txtimeout(ah, ah->globaltxtimeout);
- }
-+EXPORT_SYMBOL(ath9k_hw_init_global_settings);
- void ath9k_hw_deinit(struct ath_hw *ah)
- {
-@@ -2077,7 +2053,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st
-       if (ah->caps.hw_caps & ATH9K_HW_CAP_RFSILENT)
-               ath9k_enable_rfkill(ah);
--      ath9k_hw_init_user_settings(ah);
-+      ath9k_hw_init_global_settings(ah);
-       if (AR_SREV_9287_12_OR_LATER(ah)) {
-               REG_WRITE(ah, AR_D_GBL_IFS_SIFS,
-@@ -3674,21 +3650,6 @@ u64 ath9k_hw_extend_tsf(struct ath_hw *a
- }
- EXPORT_SYMBOL(ath9k_hw_extend_tsf);
--bool ath9k_hw_setslottime(struct ath_hw *ah, u32 us)
--{
--      if (us < ATH9K_SLOT_TIME_9 || us > ath9k_hw_mac_to_usec(ah, 0xffff)) {
--              ath_print(ath9k_hw_common(ah), ATH_DBG_RESET,
--                        "bad slot time %u\n", us);
--              ah->slottime = (u32) -1;
--              return false;
--      } else {
--              REG_WRITE(ah, AR_D_GBL_IFS_SLOT, ath9k_hw_mac_to_clks(ah, us));
--              ah->slottime = us;
--              return true;
--      }
--}
--EXPORT_SYMBOL(ath9k_hw_setslottime);
--
- void ath9k_hw_set11nmac2040(struct ath_hw *ah)
- {
-       struct ieee80211_conf *conf = &ath9k_hw_common(ah)->hw->conf;
---- a/drivers/net/wireless/ath/ath9k/hw.h
-+++ b/drivers/net/wireless/ath/ath9k/hw.h
-@@ -553,8 +553,6 @@ struct ath_hw {
-       int16_t txpower_indexoffset;
-       u32 beacon_interval;
-       u32 slottime;
--      u32 acktimeout;
--      u32 ctstimeout;
-       u32 globaltxtimeout;
-       /* ANI */
-@@ -668,7 +666,7 @@ void ath9k_hw_settsf64(struct ath_hw *ah
- void ath9k_hw_reset_tsf(struct ath_hw *ah);
- void ath9k_hw_set_tsfadjust(struct ath_hw *ah, u32 setting);
- u64 ath9k_hw_extend_tsf(struct ath_hw *ah, u32 rstamp);
--bool ath9k_hw_setslottime(struct ath_hw *ah, u32 us);
-+void ath9k_hw_init_global_settings(struct ath_hw *ah);
- void ath9k_hw_set11nmac2040(struct ath_hw *ah);
- void ath9k_hw_beaconinit(struct ath_hw *ah, u32 next_beacon, u32 beacon_period);
- void ath9k_hw_set_sta_beacon_timers(struct ath_hw *ah,
---- a/drivers/net/wireless/ath/ath9k/beacon.c
-+++ b/drivers/net/wireless/ath/ath9k/beacon.c
-@@ -480,7 +480,8 @@ void ath_beacon_tasklet(unsigned long da
-               sc->beacon.updateslot = COMMIT; /* commit next beacon */
-               sc->beacon.slotupdate = slot;
-       } else if (sc->beacon.updateslot == COMMIT && sc->beacon.slotupdate == slot) {
--              ath9k_hw_setslottime(sc->sc_ah, sc->beacon.slottime);
-+              ah->slottime = sc->beacon.slottime;
-+              ath9k_hw_init_global_settings(ah);
-               sc->beacon.updateslot = OK;
-       }
-       if (bfaddr != 0) {
diff --git a/package/mac80211/patches/560-ath9k_coverage_class.patch b/package/mac80211/patches/560-ath9k_coverage_class.patch
deleted file mode 100644 (file)
index 035eabb..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/hw.c
-+++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -1211,6 +1211,7 @@ void ath9k_hw_init_global_settings(struc
- {
-       struct ieee80211_conf *conf = &ath9k_hw_common(ah)->hw->conf;
-       int acktimeout;
-+      int slottime;
-       int sifstime;
-       ath_print(ath9k_hw_common(ah), ATH_DBG_RESET, "ah->misc_mode 0x%x\n",
-@@ -1225,8 +1226,10 @@ void ath9k_hw_init_global_settings(struc
-       else
-               sifstime = 10;
--      acktimeout = ah->slottime + sifstime;
--      ath9k_hw_setslottime(ah, ah->slottime);
-+      /* As defined by IEEE 802.11-2007 17.3.8.6 */
-+      slottime = ah->slottime + 3 * ah->coverage_class;
-+      acktimeout = slottime + sifstime;
-+      ath9k_hw_setslottime(ah, slottime);
-       ath9k_hw_set_ack_timeout(ah, acktimeout);
-       ath9k_hw_set_cts_timeout(ah, acktimeout);
-       if (ah->globaltxtimeout != (u32) -1)
---- a/drivers/net/wireless/ath/ath9k/hw.h
-+++ b/drivers/net/wireless/ath/ath9k/hw.h
-@@ -551,6 +551,7 @@ struct ath_hw {
-       u32 *bank6Temp;
-       int16_t txpower_indexoffset;
-+      int coverage_class;
-       u32 beacon_interval;
-       u32 slottime;
-       u32 globaltxtimeout;
---- a/drivers/net/wireless/ath/ath9k/main.c
-+++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -2015,6 +2015,18 @@ static void ath9k_sw_scan_complete(struc
-       mutex_unlock(&sc->mutex);
- }
-+static void ath9k_set_coverage_class(struct ieee80211_hw *hw, u8 coverage_class)
-+{
-+      struct ath_wiphy *aphy = hw->priv;
-+      struct ath_softc *sc = aphy->sc;
-+      struct ath_hw *ah = sc->sc_ah;
-+
-+      mutex_lock(&sc->mutex);
-+      ah->coverage_class = coverage_class;
-+      ath9k_hw_init_global_settings(ah);
-+      mutex_unlock(&sc->mutex);
-+}
-+
- struct ieee80211_ops ath9k_ops = {
-       .tx                 = ath9k_tx,
-       .start              = ath9k_start,
-@@ -2034,4 +2046,5 @@ struct ieee80211_ops ath9k_ops = {
-       .sw_scan_start      = ath9k_sw_scan_start,
-       .sw_scan_complete   = ath9k_sw_scan_complete,
-       .rfkill_poll        = ath9k_rfkill_poll_state,
-+      .set_coverage_class = ath9k_set_coverage_class,
- };
diff --git a/package/mac80211/patches/570-ath9k_fix_rts_cts.patch b/package/mac80211/patches/570-ath9k_fix_rts_cts.patch
deleted file mode 100644 (file)
index 789623c..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/xmit.c
-+++ b/drivers/net/wireless/ath/ath9k/xmit.c
-@@ -1498,26 +1498,6 @@ static void ath_buf_set_rate(struct ath_
-       if (sc->sc_flags & SC_OP_PREAMBLE_SHORT)
-               ctsrate |= rate->hw_value_short;
--      /*
--       * ATH9K_TXDESC_RTSENA and ATH9K_TXDESC_CTSENA are mutually exclusive.
--       * Check the first rate in the series to decide whether RTS/CTS
--       * or CTS-to-self has to be used.
--       */
--      if (rates[0].flags & IEEE80211_TX_RC_USE_CTS_PROTECT)
--              flags = ATH9K_TXDESC_CTSENA;
--      else if (rates[0].flags & IEEE80211_TX_RC_USE_RTS_CTS)
--              flags = ATH9K_TXDESC_RTSENA;
--
--      /* FIXME: Handle aggregation protection */
--      if (sc->config.ath_aggr_prot &&
--          (!bf_isaggr(bf) || (bf_isaggr(bf) && bf->bf_al < 8192))) {
--              flags = ATH9K_TXDESC_RTSENA;
--      }
--
--      /* For AR5416 - RTS cannot be followed by a frame larger than 8K */
--      if (bf_isaggr(bf) && (bf->bf_al > sc->sc_ah->caps.rts_aggr_limit))
--              flags &= ~(ATH9K_TXDESC_RTSENA);
--
-       for (i = 0; i < 4; i++) {
-               bool is_40, is_sgi, is_sp;
-               int phy;
-@@ -1529,8 +1509,15 @@ static void ath_buf_set_rate(struct ath_
-               series[i].Tries = rates[i].count;
-               series[i].ChSel = common->tx_chainmask;
--              if (rates[i].flags & IEEE80211_TX_RC_USE_RTS_CTS)
-+              if ((sc->config.ath_aggr_prot && bf_isaggr(bf)) ||
-+                  (rates[i].flags & IEEE80211_TX_RC_USE_RTS_CTS)) {
-                       series[i].RateFlags |= ATH9K_RATESERIES_RTS_CTS;
-+                      flags |= ATH9K_TXDESC_RTSENA;
-+              } else if (rates[i].flags & IEEE80211_TX_RC_USE_CTS_PROTECT) {
-+                      series[i].RateFlags |= ATH9K_RATESERIES_RTS_CTS;
-+                      flags |= ATH9K_TXDESC_CTSENA;
-+              }
-+
-               if (rates[i].flags & IEEE80211_TX_RC_40_MHZ_WIDTH)
-                       series[i].RateFlags |= ATH9K_RATESERIES_2040;
-               if (rates[i].flags & IEEE80211_TX_RC_SHORT_GI)
-@@ -1568,6 +1555,14 @@ static void ath_buf_set_rate(struct ath_
-                       phy, rate->bitrate * 100, bf->bf_frmlen, rix, is_sp);
-       }
-+      /* For AR5416 - RTS cannot be followed by a frame larger than 8K */
-+      if (bf_isaggr(bf) && (bf->bf_al > sc->sc_ah->caps.rts_aggr_limit))
-+              flags &= ~ATH9K_TXDESC_RTSENA;
-+
-+      /* ATH9K_TXDESC_RTSENA and ATH9K_TXDESC_CTSENA are mutually exclusive. */
-+      if (flags & ATH9K_TXDESC_RTSENA)
-+              flags &= ~ATH9K_TXDESC_CTSENA;
-+
-       /* set dur_update_en for l-sig computation except for PS-Poll frames */
-       ath9k_hw_set11n_ratescenario(sc->sc_ah, bf->bf_desc,
-                                    bf->bf_lastbf->bf_desc,
diff --git a/package/mac80211/patches/580-ath9k_ack_timeout_workaround.patch b/package/mac80211/patches/580-ath9k_ack_timeout_workaround.patch
deleted file mode 100644 (file)
index 953c07a..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/hw.c
-+++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -1229,6 +1229,11 @@ void ath9k_hw_init_global_settings(struc
-       /* As defined by IEEE 802.11-2007 17.3.8.6 */
-       slottime = ah->slottime + 3 * ah->coverage_class;
-       acktimeout = slottime + sifstime;
-+
-+      /* Workaround for a hw issue */
-+      if (conf->channel && conf->channel->band == IEEE80211_BAND_2GHZ)
-+              acktimeout = max(64, acktimeout);
-+
-       ath9k_hw_setslottime(ah, slottime);
-       ath9k_hw_set_ack_timeout(ah, acktimeout);
-       ath9k_hw_set_cts_timeout(ah, acktimeout);