Author: bschmidt
Date: Thu Jul 15 09:34:00 2010
New Revision: 210110
URL: http://svn.freebsd.org/changeset/base/210110

Log:
  Detect active chains differently to work around a firmware bug which
  would mark non-existing chains as active.
  
  Obtained from:        OpenBSD
  MFC after:    1 week

Modified:
  head/sys/dev/iwn/if_iwn.c

Modified: head/sys/dev/iwn/if_iwn.c
==============================================================================
--- head/sys/dev/iwn/if_iwn.c   Thu Jul 15 09:30:54 2010        (r210109)
+++ head/sys/dev/iwn/if_iwn.c   Thu Jul 15 09:34:00 2010        (r210110)
@@ -4134,10 +4134,14 @@ iwn_collect_noise(struct iwn_softc *sc,
        val = MAX(calib->rssi[2], val);
 
        /* Determine which antennas are connected. */
-       sc->chainmask = 0;
+       sc->chainmask = sc->rxchainmask;
        for (i = 0; i < 3; i++)
-               if (val - calib->rssi[i] <= 15 * 20)
-                       sc->chainmask |= 1 << i;
+               if (val - calib->rssi[i] > 15 * 20)
+                       sc->chainmask &= ~(1 << i);
+       DPRINTF(sc, IWN_DEBUG_CALIBRATE,
+           "%s: RX chains mask: theoretical=0x%x, actual=0x%x\n",
+           __func__, sc->rxchainmask, sc->chainmask);
+
        /* If none of the TX antennas are connected, keep at least one. */
        if ((sc->chainmask & sc->txchainmask) == 0)
                sc->chainmask |= IWN_LSB(sc->txchainmask);
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to