The iwm_updatechan and iwx_updatechan callbacks are not reachable
because they were never wired up. Only the iwn driver already has
this callback pointer set as intended.

With the patch below iwm/iwx should get triggered when an AP switches
between 20MHz and 40/80MHz channel width, as indicated by the
11n HT-operation information element in beacons.

Tests for regressions on any iwm/iwx devices would be welcome.

diff /usr/src
commit - d5650cee3563531d216bf9be18275aff4dec8349
path + /usr/src
blob - 437a2b9f3722bb3684750a56a51535ef9b8b59ca
file + sys/dev/pci/if_iwm.c
--- sys/dev/pci/if_iwm.c
+++ sys/dev/pci/if_iwm.c
@@ -12009,6 +12009,7 @@ iwm_attach(struct device *parent, struct device *self,
        ic->ic_updateprot = iwm_updateprot;
        ic->ic_updateslot = iwm_updateslot;
        ic->ic_updateedca = iwm_updateedca;
+       ic->ic_updatechan = iwm_updatechan;
        ic->ic_updatedtim = iwm_updatedtim;
        ic->ic_ampdu_rx_start = iwm_ampdu_rx_start;
        ic->ic_ampdu_rx_stop = iwm_ampdu_rx_stop;
blob - a61031f47f65c1778069b2205a21ce0ce30a6f83
file + sys/dev/pci/if_iwx.c
--- sys/dev/pci/if_iwx.c
+++ sys/dev/pci/if_iwx.c
@@ -11330,6 +11330,7 @@ iwx_attach(struct device *parent, struct device *self,
        /* Override 802.11 state transition machine. */
        sc->sc_newstate = ic->ic_newstate;
        ic->ic_newstate = iwx_newstate;
+       ic->ic_updatechan = iwx_updatechan;
        ic->ic_updateprot = iwx_updateprot;
        ic->ic_updateslot = iwx_updateslot;
        ic->ic_updateedca = iwx_updateedca;

Reply via email to