diff options
author | blogic <blogic@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2012-10-05 10:12:53 +0000 |
---|---|---|
committer | blogic <blogic@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2012-10-05 10:12:53 +0000 |
commit | 5c105d9f3fd086aff195d3849dcf847d6b0bd927 (patch) | |
tree | 1229a11f725bfa58aa7c57a76898553bb5f6654a /package/madwifi/patches/420-diversity_fix.patch | |
download | openwrt-5c105d9f3fd086aff195d3849dcf847d6b0bd927.tar.gz openwrt-5c105d9f3fd086aff195d3849dcf847d6b0bd927.zip |
branch Attitude Adjustment
git-svn-id: svn://svn.openwrt.org/openwrt/branches/attitude_adjustment@33625 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/madwifi/patches/420-diversity_fix.patch')
-rw-r--r-- | package/madwifi/patches/420-diversity_fix.patch | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/package/madwifi/patches/420-diversity_fix.patch b/package/madwifi/patches/420-diversity_fix.patch new file mode 100644 index 000000000..90bcd0e16 --- /dev/null +++ b/package/madwifi/patches/420-diversity_fix.patch @@ -0,0 +1,86 @@ +--- a/ath/if_ath.c ++++ b/ath/if_ath.c +@@ -797,7 +797,6 @@ ath_attach(u_int16_t devid, struct net_d + break; + } + +- sc->sc_setdefantenna = ath_setdefantenna; + sc->sc_rc = ieee80211_rate_attach(sc, ratectl); + if (sc->sc_rc == NULL) { + error = EIO; +@@ -2624,9 +2623,6 @@ ath_init(struct net_device *dev) + ath_radar_update(sc); + ath_rp_flush(sc); + +- /* Set the default RX antenna; it may get lost on reset. */ +- ath_setdefantenna(sc, sc->sc_defant); +- + /* + * Setup the hardware after reset: the key cache + * is filled as needed and the receive engine is +@@ -3019,7 +3015,6 @@ ath_reset(struct net_device *dev) + ath_setintmit(sc); + ath_update_txpow(sc); /* update tx power state */ + ath_radar_update(sc); +- ath_setdefantenna(sc, sc->sc_defant); + if (ath_startrecv(sc) != 0) /* restart recv */ + EPRINTF(sc, "Unable to start receive logic.\n"); + if (sc->sc_softled) +@@ -5353,27 +5348,6 @@ ath_beacon_send(struct ath_softc *sc, in + } else if ((sc->sc_updateslot == COMMIT) && (sc->sc_slotupdate == slot)) + ath_setslottime(sc); /* commit change to hardware */ + +- if ((!sc->sc_stagbeacons || slot == 0) && (!sc->sc_diversity)) { +- unsigned int otherant; +- /* +- * Check recent per-antenna transmit statistics and flip +- * the default rx antenna if noticeably more frames went out +- * on the non-default antenna. Only do this if rx diversity +- * is off. +- * XXX assumes 2 antennae +- */ +- otherant = sc->sc_defant & 1 ? 2 : 1; +- if (sc->sc_ant_tx[otherant] > sc->sc_ant_tx[sc->sc_defant] + +- ATH_ANTENNA_DIFF) { +- DPRINTF(sc, ATH_DEBUG_BEACON, +- "Flip default antenna to %u, %u > %u\n", +- otherant, sc->sc_ant_tx[otherant], +- sc->sc_ant_tx[sc->sc_defant]); +- ath_setdefantenna(sc, otherant); +- } +- sc->sc_ant_tx[1] = sc->sc_ant_tx[2] = 0; +- } +- + if (bfaddr != 0) { + /* + * Stop any current DMA and put the new frame(s) on the queue. +@@ -6734,9 +6708,8 @@ ath_setdefantenna(struct ath_softc *sc, + { + struct ath_hal *ah = sc->sc_ah; + +- /* XXX block beacon interrupts */ +- ath_hal_setdiversity(ah, (sc->sc_diversity != 0)); + ath_hal_setdefantenna(ah, antenna); ++ ath_hal_setantennaswitch(ah, sc->sc_diversity ? 0 : antenna); + if (sc->sc_defant != antenna) + sc->sc_stats.ast_ant_defswitch++; + sc->sc_defant = antenna; +@@ -11160,7 +11133,7 @@ ATH_SYSCTL_DECL(ath_sysctl_halparam, ctl + break; + } + sc->sc_diversity = val; +- ath_hal_setdiversity(ah, val); ++ ath_setdefantenna(sc, sc->sc_defant); + break; + case ATH_TXINTRPERIOD: + /* XXX: validate? */ +--- a/ath/if_athvar.h ++++ b/ath/if_athvar.h +@@ -640,7 +640,6 @@ struct ath_softc { + spinlock_t sc_hal_lock; /* hardware access lock */ + struct ath_ratectrl *sc_rc; /* tx rate control support */ + struct ath_tx99 *sc_tx99; /* tx99 support */ +- void (*sc_setdefantenna)(struct ath_softc *, u_int); + const struct ath_hw_detect *sc_hwinfo; + + unsigned int sc_invalid:1; /* being detached */ |