On Sat, Oct 29, 2016 at 01:13:47PM +0200, Stefan Sperling wrote:
> 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?
Nobody seems to have these devices.
I am going to proceed soon and just hope that I won't break them.
> 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);
>