summaryrefslogtreecommitdiff
path: root/package/madwifi/patches/332-reset_beacons.patch
blob: caf3cc14f6d4696e71a8715dcf52ee124fc9f6a4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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",