From: Arne Fitzenreiter Date: Tue, 23 Feb 2010 22:33:47 +0000 (+0100) Subject: Add patch for ath5k to fix "no txbuf available". X-Git-Tag: v2.9-beta1~412^2~49 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f7c508b508e7d3d72fc670f95f9623704e03e8b5;p=people%2Fpmueller%2Fipfire-2.x.git Add patch for ath5k to fix "no txbuf available". --- diff --git a/config/rootfiles/oldcore/37/filelists/files b/config/rootfiles/oldcore/37/filelists/files deleted file mode 100644 index 402651770a..0000000000 --- a/config/rootfiles/oldcore/37/filelists/files +++ /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 diff --git a/lfs/linux b/lfs/linux index 6d2465a44d..db2ca20755 100644 --- 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 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 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 index 0000000000..fbe3098712 --- /dev/null +++ b/src/patches/linux-2.6.32-ath5k_fix_setup_for_CAB_queue.patch @@ -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) |