On Sat, Oct 08, 2016 at 07:34:55PM +0200, Mark Kettenis wrote:
> > The addition might need to be tested on a 1TR1 and 2T3R setups. I can
> > test the latter, but I have no hardware to test the former.
>
> FWIW, this seems to cause no regressions on:
>
> iwn0 at pci2 dev 0 function 0 "Intel WiFi Link 5300" rev 0x00: msi, MIMO
> 3T3R, MoW, address 00:21:6a:13:67:82
The 1T1R devices listed in the man page are:
Intel Centrino Wireless-N 135
Intel Centrino Wireless-N 105
Does anybody have either of these devices?
If so, please test the diff below during regular usage,
and with these commands:
ifconfig iwn0 mediaopt monitor up
tcpdump -n -i iwn0 -y IEEE802_11_RADIO
The expected behaviour is that tcpdump displays some frames
(at least beacons from APs on the current channel).
Index: if_iwn.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/if_iwn.c,v
retrieving revision 1.175
diff -u -p -r1.175 if_iwn.c
--- if_iwn.c 28 Oct 2016 10:11:22 -0000 1.175
+++ if_iwn.c 29 Oct 2016 10:10:19 -0000
@@ -4504,13 +4504,18 @@ iwn_config(struct iwn_softc *sc)
sc->rxon.ht_triple_mask = 0xff;
rxchain =
IWN_RXCHAIN_VALID(sc->rxchainmask) |
- IWN_RXCHAIN_MIMO_COUNT(2) |
- IWN_RXCHAIN_IDLE_COUNT(2);
+ IWN_RXCHAIN_MIMO_COUNT(sc->nrxchains) |
+ IWN_RXCHAIN_IDLE_COUNT(sc->nrxchains);
+ if (ic->ic_opmode == IEEE80211_M_MONITOR) {
+ rxchain |= IWN_RXCHAIN_FORCE_SEL(sc->rxchainmask);
+ rxchain |= IWN_RXCHAIN_FORCE_MIMO_SEL(sc->rxchainmask);
+ rxchain |= (IWN_RXCHAIN_DRIVER_FORCE | IWN_RXCHAIN_MIMO_FORCE);
+ }
sc->rxon.rxchain = htole16(rxchain);
DPRINTF(("setting configuration\n"));
- DPRINTF(("%s: rxon chan %d flags %x cck %x ofdm %x\n", __func__,
- sc->rxon.chan, le32toh(sc->rxon.flags), sc->rxon.cck_mask,
- sc->rxon.ofdm_mask));
+ DPRINTF(("%s: rxon chan %d flags %x cck %x ofdm %x rxchain %x\n",
+ __func__, sc->rxon.chan, le32toh(sc->rxon.flags), sc->rxon.cck_mask,
+ sc->rxon.ofdm_mask, sc->rxon.rxchain));
error = iwn_cmd(sc, IWN_CMD_RXON, &sc->rxon, sc->rxonsz, 0);
if (error != 0) {
printf("%s: RXON command failed\n", sc->sc_dev.dv_xname);