Since 6.2, ieee80211_newstate() shows state transitions in
dmesg if the IFF_DEBUG flag is set on the interface.

However, some drivers do not call ieee80211_newstate() but fiddle with
ic->ic_state directly and return, so they end up up hiding some state
transitions from debug output.

This diff fixes some of those drivers. ok?

Index: dev/ic/bwfm.c
===================================================================
RCS file: /cvs/src/sys/dev/ic/bwfm.c,v
retrieving revision 1.30
diff -u -p -r1.30 bwfm.c
--- dev/ic/bwfm.c       11 Jan 2018 19:33:34 -0000      1.30
+++ dev/ic/bwfm.c       29 Jan 2018 18:48:50 -0000
@@ -2152,26 +2152,30 @@ bwfm_newstate_cb(struct bwfm_softc *sc, 
 {
        struct bwfm_cmd_newstate *cmd = arg;
        struct ieee80211com *ic = &sc->sc_ic;
-       enum ieee80211_state ostate, nstate;
+       struct ifnet *ifp = &ic->ic_if;
+       enum ieee80211_state nstate = cmd->state;
        int s;
 
        s = splnet();
-       ostate = ic->ic_state;
-       nstate = cmd->state;
-       DPRINTF(("newstate %s -> %s\n",
-           ieee80211_state_name[ostate],
-           ieee80211_state_name[nstate]));
 
        switch (nstate) {
        case IEEE80211_S_SCAN:
                bwfm_scan(sc);
+               if (ifp->if_flags & IFF_DEBUG)
+                       printf("%s: %s -> %s\n", DEVNAME(sc),
+                           ieee80211_state_name[ic->ic_state],
+                           ieee80211_state_name[nstate]);
                ic->ic_state = nstate;
                splx(s);
                return;
        case IEEE80211_S_AUTH:
                ic->ic_bss->ni_rsn_supp_state = RSNA_SUPP_INITIALIZE;
                bwfm_connect(sc);
-               ic->ic_state = cmd->state;
+               if (ifp->if_flags & IFF_DEBUG)
+                       printf("%s: %s -> %s\n", DEVNAME(sc),
+                           ieee80211_state_name[ic->ic_state],
+                           ieee80211_state_name[nstate]);
+               ic->ic_state = nstate;
                if (ic->ic_flags & IEEE80211_F_RSNON)
                        ic->ic_bss->ni_rsn_supp_state = RSNA_SUPP_PTKSTART;
                splx(s);
Index: dev/pci/if_iwm.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/if_iwm.c,v
retrieving revision 1.223
diff -u -p -r1.223 if_iwm.c
--- dev/pci/if_iwm.c    14 Jan 2018 11:51:34 -0000      1.223
+++ dev/pci/if_iwm.c    29 Jan 2018 18:32:59 -0000
@@ -5475,6 +5475,7 @@ int
 iwm_scan(struct iwm_softc *sc)
 {
        struct ieee80211com *ic = &sc->sc_ic;
+       struct ifnet *ifp = IC2IFP(ic);
        int err;
 
        if (sc->sc_flags & IWM_FLAG_BGSCAN) {
@@ -5496,6 +5497,10 @@ iwm_scan(struct iwm_softc *sc)
        }
 
        sc->sc_flags |= IWM_FLAG_SCANNING;
+       if (ifp->if_flags & IFF_DEBUG)
+               printf("%s: %s -> %s\n", ifp->if_xname,
+                   ieee80211_state_name[ic->ic_state],
+                   ieee80211_state_name[IEEE80211_S_SCAN]);
        ic->ic_state = IEEE80211_S_SCAN;
        iwm_led_blink_start(sc);
        wakeup(&ic->ic_state); /* wake iwm_init() */
@@ -6076,10 +6081,6 @@ iwm_newstate_task(void *psc)
        enum ieee80211_state ostate = ic->ic_state;
        int arg = sc->ns_arg;
        int err = 0, s = splnet();
-
-       DPRINTF(("switching state %s->%s\n",
-           ieee80211_state_name[ostate],
-           ieee80211_state_name[nstate]));
 
        if (sc->sc_flags & IWM_FLAG_SHUTDOWN) {
                /* iwm_stop() is waiting for us. */
Index: dev/pci/if_iwn.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/if_iwn.c,v
retrieving revision 1.198
diff -u -p -r1.198 if_iwn.c
--- dev/pci/if_iwn.c    9 Jan 2018 10:00:12 -0000       1.198
+++ dev/pci/if_iwn.c    29 Jan 2018 18:27:42 -0000
@@ -1782,6 +1782,10 @@ iwn_newstate(struct ieee80211com *ic, en
                            sc->sc_dev.dv_xname);
                        return error;
                }
+               if (ifp->if_flags & IFF_DEBUG)
+                       printf("%s: %s -> %s\n", ifp->if_xname,
+                           ieee80211_state_name[ic->ic_state],
+                           ieee80211_state_name[nstate]);
                ic->ic_state = nstate;
                return 0;
 
Index: dev/pci/if_wpi.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/if_wpi.c,v
retrieving revision 1.141
diff -u -p -r1.141 if_wpi.c
--- dev/pci/if_wpi.c    26 Oct 2017 15:00:28 -0000      1.141
+++ dev/pci/if_wpi.c    29 Jan 2018 18:27:56 -0000
@@ -1053,6 +1053,10 @@ wpi_newstate(struct ieee80211com *ic, en
                            sc->sc_dev.dv_xname);
                        return error;
                }
+               if (ifp->if_flags & IFF_DEBUG)
+                       printf("%s: %s -> %s\n", ifp->if_xname,
+                           ieee80211_state_name[ic->ic_state],
+                           ieee80211_state_name[nstate]);
                ic->ic_state = nstate;
                return 0;
 
Index: dev/usb/if_atu.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/if_atu.c,v
retrieving revision 1.123
diff -u -p -r1.123 if_atu.c
--- dev/usb/if_atu.c    21 Jul 2017 15:55:04 -0000      1.123
+++ dev/usb/if_atu.c    29 Jan 2018 18:28:52 -0000
@@ -1206,9 +1206,6 @@ atu_newstate(struct ieee80211com *ic, en
        struct atu_softc        *sc = ifp->if_softc;
        enum ieee80211_state    ostate = ic->ic_state;
 
-       DPRINTFN(10, ("%s: atu_newstate: %s -> %s\n", sc->atu_dev.dv_xname,
-           ieee80211_state_name[ostate], ieee80211_state_name[nstate]));
-
        switch (nstate) {
        case IEEE80211_S_SCAN:
                memcpy(ic->ic_chan_scan, ic->ic_chan_active,
@@ -1220,6 +1217,10 @@ atu_newstate(struct ieee80211com *ic, en
                usb_add_task(sc->atu_udev, &sc->sc_task);
 
                /* handle this ourselves */
+               if (ifp->if_flags & IFF_DEBUG)
+                       printf("%s: %s -> %s\n", ifp->if_xname,
+                           ieee80211_state_name[ic->ic_state],
+                           ieee80211_state_name[nstate]);
                ic->ic_state = nstate;
                return (0);
 
Index: dev/usb/if_rsu.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/if_rsu.c,v
retrieving revision 1.41
diff -u -p -r1.41 if_rsu.c
--- dev/usb/if_rsu.c    26 Oct 2017 15:00:28 -0000      1.41
+++ dev/usb/if_rsu.c    29 Jan 2018 18:50:04 -0000
@@ -814,14 +814,12 @@ rsu_newstate_cb(struct rsu_softc *sc, vo
 {
        struct rsu_cmd_newstate *cmd = arg;
        struct ieee80211com *ic = &sc->sc_ic;
+       struct ifnet *ifp = &ic->ic_if;
        enum ieee80211_state ostate;
        int error, s;
 
        s = splnet();
        ostate = ic->ic_state;
-       DPRINTF(("newstate %s -> %s\n",
-           ieee80211_state_name[ostate],
-           ieee80211_state_name[cmd->state]));
 
        if (ostate == IEEE80211_S_RUN) {
                /* Stop calibration. */
@@ -838,6 +836,10 @@ rsu_newstate_cb(struct rsu_softc *sc, vo
                        printf("%s: could not send site survey command\n",
                            sc->sc_dev.dv_xname);
                }
+               if (ifp->if_flags & IFF_DEBUG)
+                       printf("%s: %s -> %s\n", ifp->if_xname,
+                           ieee80211_state_name[ic->ic_state],
+                           ieee80211_state_name[cmd->state]);
                ic->ic_state = cmd->state;
                splx(s);
                return;
@@ -851,6 +853,10 @@ rsu_newstate_cb(struct rsu_softc *sc, vo
                        splx(s);
                        return;
                }
+               if (ifp->if_flags & IFF_DEBUG)
+                       printf("%s: %s -> %s\n", ifp->if_xname,
+                           ieee80211_state_name[ic->ic_state],
+                           ieee80211_state_name[cmd->state]);
                ic->ic_state = cmd->state;
                if (ic->ic_flags & IEEE80211_F_RSNON)
                        ic->ic_bss->ni_rsn_supp_state = RSNA_SUPP_PTKSTART;
@@ -858,6 +864,10 @@ rsu_newstate_cb(struct rsu_softc *sc, vo
                return;
        case IEEE80211_S_ASSOC:
                /* No-op for this driver. See rsu_event_join_bss(). */
+               if (ifp->if_flags & IFF_DEBUG)
+                       printf("%s: %s -> %s\n", ifp->if_xname,
+                           ieee80211_state_name[ic->ic_state],
+                           ieee80211_state_name[cmd->state]);
                ic->ic_state = cmd->state;
                splx(s);
                return;

Reply via email to