Beacon filter settings in iwm(4) prevent the device from passing
beacons to net80211 while associated to an AP. The implication is
that net80211 does not see HT protection updates, so it never tells
the driver to update HT protection settings.
This can cause interference problems.

I believe this was introduced with the -16 firmware upgrade, because
as far as I recall HT prot updates were working with iwm at some point.
It's possible that the old firmware had different behaviour here.
I have not tried to figure out when this problem was introduced.

It should be possible to make the hardware pass beacons under certain
conditions if the filter is active. I've tried to figure out how this
could work, without success. For now I'd like to disable the filter entirely.

Index: if_iwm.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/if_iwm.c,v
retrieving revision 1.95
diff -u -p -r1.95 if_iwm.c
--- if_iwm.c    18 Jul 2016 13:10:35 -0000      1.95
+++ if_iwm.c    20 Jul 2016 12:21:10 -0000
@@ -6290,7 +6290,14 @@ iwm_newstate_task(void *psc)
        case IEEE80211_S_RUN: {
                in = (struct iwm_node *)ic->ic_bss;
                iwm_mvm_power_mac_update_mode(sc, in);
+#ifdef notyet
+               /* 
+                * Disabled for now. Default beacon filter settings
+                * prevent net80211 from getting ERP and HT protection
+                * updates from beacons.
+                */
                iwm_mvm_enable_beacon_filter(sc, in);
+#endif
                iwm_mvm_update_quotas(sc, in);
 
                /* init amrr */
Index: if_iwmreg.h
===================================================================
RCS file: /cvs/src/sys/dev/pci/if_iwmreg.h,v
retrieving revision 1.13
diff -u -p -r1.13 if_iwmreg.h
--- if_iwmreg.h 28 May 2016 08:13:16 -0000      1.13
+++ if_iwmreg.h 20 Jul 2016 12:12:12 -0000
@@ -3773,7 +3773,7 @@ struct iwm_uapsd_misbehaving_ap_notif {
  *      beacon filtering; beacons will not be forced to be sent to driver
  *      regardless of whether its temerature has been changed.
  * @bf_enable_beacon_filter: 1, beacon filtering is enabled; 0, disabled.
- * @bf_filter_escape_timer: Send beacons to to driver if no beacons were passed
+ * @bf_escape_timer: Send beacons to driver if no beacons were passed
  *      for a specific period of time. Units: Beacons.
  * @ba_escape_timer: Fully receive and parse beacon if no beacons were passed
  *      for a longer period of time then this escape-timeout. Units: Beacons.

Reply via email to