]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/commitdiff
Add patch for ath5k to fix "no txbuf available".
authorArne Fitzenreiter <arne_f@ipfire.org>
Tue, 23 Feb 2010 22:33:47 +0000 (23:33 +0100)
committerArne Fitzenreiter <arne_f@ipfire.org>
Wed, 24 Feb 2010 07:48:19 +0000 (08:48 +0100)
config/rootfiles/oldcore/37/filelists/files [deleted file]
lfs/linux
src/patches/linux-2.6.32-ath5k_fix_setup_for_CAB_queue.patch [new file with mode: 0644]

diff --git a/config/rootfiles/oldcore/37/filelists/files b/config/rootfiles/oldcore/37/filelists/files
deleted file mode 100644 (file)
index 4026517..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-etc/system-release
-lib/modules/2.6.27.42-ipfire/kernel/net
-lib/modules/2.6.27.42-ipfire-xen/kernel/net
-lib/modules/2.6.27.42-ipfire/mISDN/hfcsusb.ko
-lib/modules/2.6.27.42-ipfire-xen/mISDN/hfcsusb.ko
-lib/modules/2.6.27.42-ipfire/kernel/drivers/hwmon/coretemp.ko
-lib/modules/2.6.27.42-ipfire-xen/kernel/drivers/hwmon/coretemp.ko
-lib/modules/2.6.27.42-ipfire/kernel/drivers/net/et131x.ko
-lib/modules/2.6.27.42-ipfire-xen/kernel/drivers/net/et131x.ko
-lib/modules/2.6.27.42-ipfire/kernel/arch/x86/kernel/cpu/cpufreq/p4-clockmod.ko
-lib/modules/2.6.27.42-ipfire-xen/kernel/arch/x86/kernel/cpu/cpufreq/p4-clockmod.ko
-srv/web/ipfire/cgi-bin/urlfilter.cgi
-srv/web/ipfire/cgi-bin/outgoingfw.cgi
\ No newline at end of file
index 6d2465a44d04e3a064e51f96497cae93cfe87289..db2ca20755b9cd035634d484b4033c34ab271e59 100644 (file)
--- a/lfs/linux
+++ b/lfs/linux
@@ -130,6 +130,9 @@ endif
 #      # Add Vodafone K3565-Z USB ID's to option driver
 #      cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-2.6.27.25-option_add_vf-k3565-z_usbids.patch
 
 #      # Add Vodafone K3565-Z USB ID's to option driver
 #      cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-2.6.27.25-option_add_vf-k3565-z_usbids.patch
 
+       # Add patch to fix ath5k "no txbuf available"
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-2.6.32-ath5k_fix_setup_for_CAB_queue.patch
+
        # Not report deprecated syscall 1.23 (for kudzu)
        cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-2.6.25.18-not_report_sysctl_1.23.patch
 
        # Not report deprecated syscall 1.23 (for kudzu)
        cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-2.6.25.18-not_report_sysctl_1.23.patch
 
diff --git a/src/patches/linux-2.6.32-ath5k_fix_setup_for_CAB_queue.patch b/src/patches/linux-2.6.32-ath5k_fix_setup_for_CAB_queue.patch
new file mode 100644 (file)
index 0000000..fbe3098
--- /dev/null
@@ -0,0 +1,75 @@
+diff --git a/drivers/net/wireless/ath/ath5k/ath5k.h b/drivers/net/wireless/ath/ath5k/ath5k.h
+index 66bcb50..ad4d446 100644
+--- a/drivers/net/wireless/ath/ath5k/ath5k.h
++++ b/drivers/net/wireless/ath/ath5k/ath5k.h
+@@ -535,7 +535,7 @@  struct ath5k_txq_info {
+       u32     tqi_cbr_period; /* Constant bit rate period */
+       u32     tqi_cbr_overflow_limit;
+       u32     tqi_burst_time;
+-      u32     tqi_ready_time; /* Not used */
++      u32     tqi_ready_time; /* Time queue waits after an event */
+ };
+ /*
+diff --git a/drivers/net/wireless/ath/ath5k/base.c b/drivers/net/wireless/ath/ath5k/base.c
+index b501537..535a6af 100644
+--- a/drivers/net/wireless/ath/ath5k/base.c
++++ b/drivers/net/wireless/ath/ath5k/base.c
+@@ -1516,7 +1516,8 @@  ath5k_beaconq_config(struct ath5k_softc *sc)
+       ret = ath5k_hw_get_tx_queueprops(ah, sc->bhalq, &qi);
+       if (ret)
+-              return ret;
++              goto err;
++
+       if (sc->opmode == NL80211_IFTYPE_AP ||
+               sc->opmode == NL80211_IFTYPE_MESH_POINT) {
+               /*
+@@ -1543,10 +1544,25 @@  ath5k_beaconq_config(struct ath5k_softc *sc)
+       if (ret) {
+               ATH5K_ERR(sc, "%s: unable to update parameters for beacon "
+                       "hardware queue!\n", __func__);
+-              return ret;
++              goto err;
+       }
++      ret = ath5k_hw_reset_tx_queue(ah, sc->bhalq); /* push to h/w */
++      if (ret)
++              goto err;
+-      return ath5k_hw_reset_tx_queue(ah, sc->bhalq); /* push to h/w */;
++      /* reconfigure cabq with ready time to 80% of beacon_interval */
++      ret = ath5k_hw_get_tx_queueprops(ah, AR5K_TX_QUEUE_ID_CAB, &qi);
++      if (ret)
++              goto err;
++
++      qi.tqi_ready_time = (sc->bintval * 80) / 100;
++      ret = ath5k_hw_set_tx_queueprops(ah, AR5K_TX_QUEUE_ID_CAB, &qi);
++      if (ret)
++              goto err;
++
++      ret = ath5k_hw_reset_tx_queue(ah, AR5K_TX_QUEUE_ID_CAB);
++err:
++      return ret;
+ }
+ static void
+diff --git a/drivers/net/wireless/ath/ath5k/qcu.c b/drivers/net/wireless/ath/ath5k/qcu.c
+index abe36c0..9122a85 100644
+--- a/drivers/net/wireless/ath/ath5k/qcu.c
++++ b/drivers/net/wireless/ath/ath5k/qcu.c
+@@ -408,12 +408,13 @@  int ath5k_hw_reset_tx_queue(struct ath5k_hw *ah, unsigned int queue)
+                       break;
+               case AR5K_TX_QUEUE_CAB:
++                      /* XXX: use BCN_SENT_GT, if we can figure out how */
+                       AR5K_REG_ENABLE_BITS(ah, AR5K_QUEUE_MISC(queue),
+-                              AR5K_QCU_MISC_FRSHED_BCN_SENT_GT |
++                              AR5K_QCU_MISC_FRSHED_DBA_GT |
+                               AR5K_QCU_MISC_CBREXP_DIS |
+                               AR5K_QCU_MISC_CBREXP_BCN_DIS);
+-                      ath5k_hw_reg_write(ah, ((AR5K_TUNE_BEACON_INTERVAL -
++                      ath5k_hw_reg_write(ah, ((tq->tqi_ready_time -
+                               (AR5K_TUNE_SW_BEACON_RESP -
+                               AR5K_TUNE_DMA_BEACON_RESP) -
+                               AR5K_TUNE_ADDITIONAL_SWBA_BACKOFF) * 1024) |