1
0
mirror of git://projects.qi-hardware.com/openwrt-xburst.git synced 2024-12-01 05:54:59 +02:00
openwrt-xburst/package/madwifi/patches/332-reset_beacons.patch
nbd d28a1e629b fix channel change bugs
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@10553 3c298f89-4303-0410-b956-a3cf2f4a3e73
2008-03-07 01:06:37 +00:00

68 lines
2.7 KiB
Diff

Index: madwifi-trunk-r3314/ath/if_ath.c
===================================================================
--- madwifi-trunk-r3314.orig/ath/if_ath.c 2008-02-26 20:23:58.477203701 +0100
+++ madwifi-trunk-r3314/ath/if_ath.c 2008-02-26 20:23:59.241247240 +0100
@@ -1594,6 +1594,16 @@
ath_init(dev);
}
+static HAL_BOOL ath_hw_reset(struct ath_hal *ah, HAL_OPMODE opmode,
+ HAL_CHANNEL *channel, HAL_BOOL bChannelChange,
+ HAL_STATUS *status)
+{
+ HAL_BOOL ret;
+ ret = ath_hal_reset(ah, opmode, channel, bChannelChange, status);
+ mdelay(5); /* extra delay to allow the hw to settle in */
+ return ret;
+}
+
/* Channel Availability Check is running, or a channel has already found to be
* unavailable. */
static int
@@ -2476,7 +2486,7 @@
*/
sc->sc_curchan.channel = ic->ic_curchan->ic_freq;
sc->sc_curchan.channelFlags = ath_chan2flags(ic->ic_curchan);
- if (!ath_hal_reset(ah, sc->sc_opmode, &sc->sc_curchan, AH_FALSE, &status)) {
+ if (!ath_hw_reset(ah, sc->sc_opmode, &sc->sc_curchan, AH_TRUE, &status)) {
EPRINTF(sc, "unable to reset hardware: '%s' (HAL status %u) "
"(freq %u flags 0x%x)\n",
ath_get_hal_status_desc(status), status,
@@ -2775,7 +2785,7 @@
ath_draintxq(sc); /* stop xmit side */
ath_stoprecv(sc); /* stop recv side */
/* NB: indicate channel change so we do a full reset */
- if (!ath_hal_reset(ah, sc->sc_opmode, &sc->sc_curchan, AH_TRUE, &status))
+ if (!ath_hw_reset(ah, sc->sc_opmode, &sc->sc_curchan, AH_TRUE, &status))
EPRINTF(sc, "Unable to reset hardware: '%s' (HAL status %u)\n",
ath_get_hal_status_desc(status), status);
@@ -8848,8 +8858,7 @@
* needed to do the reset with chanchange = AH_FALSE in order
* to receive traffic when peforming high velocity channel
* changes. */
- if (!ath_hal_reset(ah, sc->sc_opmode, &hchan, AH_TRUE, &status) ||
- !ath_hal_reset(ah, sc->sc_opmode, &hchan, AH_FALSE, &status)) {
+ if (!ath_hw_reset(ah, sc->sc_opmode, &hchan, AH_TRUE, &status)) {
EPRINTF(sc, "Unable to reset channel %u (%u MHz) "
"flags 0x%x '%s' (HAL status %u)\n",
ieee80211_chan2ieee(ic, chan), chan->ic_freq,
@@ -8905,7 +8914,7 @@
* re configure beacons when it is a turbo mode switch.
* HW seems to turn off beacons during turbo mode switch.
*/
- if (sc->sc_beacons && tswitch && !sc->sc_dfs_cac)
+ if (sc->sc_beacons && !sc->sc_dfs_cac)
ath_beacon_config(sc, NULL);
/*
* Re-enable interrupts.
@@ -11456,7 +11465,7 @@
ieee80211_cancel_scan(vap); /* anything current */
ieee80211_wme_updateparams(vap);
/* reset the WNIC */
- if (!ath_hal_reset(ah, sc->sc_opmode,
+ if (!ath_hw_reset(ah, sc->sc_opmode,
&sc->sc_curchan, AH_TRUE, &status)) {
EPRINTF(sc, "ath_hal_reset failed: '%s' "
"(HAL status %u).\n",