Module Name: src Committed By: riz Date: Fri Nov 6 00:50:52 UTC 2015
Modified Files: src/sys/dev/pci [netbsd-7]: if_iwn.c if_iwnvar.h Log Message: Pull up following revision(s) (requested by nonaka in ticket #987): sys/dev/pci/if_iwnvar.h: revision 1.17 sys/dev/pci/if_iwn.c: revision 1.76 PR/50187: Don't use DS parameter set when 5GHz channel is scanning. XXX: pullup-7 To generate a diff of this commit: cvs rdiff -u -r1.71.4.1 -r1.71.4.2 src/sys/dev/pci/if_iwn.c cvs rdiff -u -r1.15.4.1 -r1.15.4.2 src/sys/dev/pci/if_iwnvar.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/pci/if_iwn.c diff -u src/sys/dev/pci/if_iwn.c:1.71.4.1 src/sys/dev/pci/if_iwn.c:1.71.4.2 --- src/sys/dev/pci/if_iwn.c:1.71.4.1 Wed Jan 28 19:00:28 2015 +++ src/sys/dev/pci/if_iwn.c Fri Nov 6 00:50:52 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: if_iwn.c,v 1.71.4.1 2015/01/28 19:00:28 martin Exp $ */ +/* $NetBSD: if_iwn.c,v 1.71.4.2 2015/11/06 00:50:52 riz Exp $ */ /* $OpenBSD: if_iwn.c,v 1.135 2014/09/10 07:22:09 dcoppa Exp $ */ /*- @@ -22,7 +22,7 @@ * adapters. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_iwn.c,v 1.71.4.1 2015/01/28 19:00:28 martin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_iwn.c,v 1.71.4.2 2015/11/06 00:50:52 riz Exp $"); #define IWN_USE_RBUF /* Use local storage for RX */ #undef IWN_HWCRYPTO /* XXX does not even compile yet */ @@ -330,7 +330,8 @@ static u_int8_t *ieee80211_add_rates(u_i static u_int8_t *ieee80211_add_xrates(u_int8_t *, const struct ieee80211_rateset *); -static void iwn_fix_channel(struct ieee80211com *, struct mbuf *); +static void iwn_fix_channel(struct ieee80211com *, struct mbuf *, + struct iwn_rx_stat *); #ifdef IWN_DEBUG #define DPRINTF(x) do { if (iwn_debug > 0) printf x; } while (0) @@ -1860,7 +1861,7 @@ iwn_newstate(struct ieee80211com *ic, en /* XXX Not sure if call and flags are needed. */ ieee80211_node_table_reset(&ic->ic_scan); ic->ic_flags |= IEEE80211_F_SCAN | IEEE80211_F_ASCAN; - sc->sc_flags |= IWN_FLAG_SCANNING; + sc->sc_flags |= IWN_FLAG_SCANNING_2GHZ; /* Make the link LED blink while we're scanning. */ iwn_set_led(sc, IWN_LED_LINK, 10, 10); @@ -2083,7 +2084,7 @@ iwn_rx_done(struct iwn_softc *sc, struct /* XXX Added for NetBSD: scans never stop without it */ if (ic->ic_state == IEEE80211_S_SCAN) - iwn_fix_channel(ic, m); + iwn_fix_channel(ic, m, stat); if (sc->sc_drvbpf != NULL) { struct iwn_rx_radiotap_header *tap = &sc->sc_rxtap; @@ -2514,6 +2515,8 @@ iwn_notif_intr(struct iwn_softc *sc) * We just finished scanning 2GHz channels, * start scanning 5GHz ones. */ + sc->sc_flags &= ~IWN_FLAG_SCANNING_2GHZ; + sc->sc_flags |= IWN_FLAG_SCANNING_5GHZ; if (iwn_scan(sc, IEEE80211_CHAN_5GHZ) == 0) break; } @@ -6505,8 +6508,10 @@ ieee80211_add_xrates(u_int8_t *frm, cons * XXX: Duplicated from if_iwi.c */ static void -iwn_fix_channel(struct ieee80211com *ic, struct mbuf *m) +iwn_fix_channel(struct ieee80211com *ic, struct mbuf *m, + struct iwn_rx_stat *stat) { + struct iwn_softc *sc = ic->ic_ifp->if_softc; struct ieee80211_frame *wh; uint8_t subtype; uint8_t *frm, *efrm; @@ -6522,6 +6527,13 @@ iwn_fix_channel(struct ieee80211com *ic, subtype != IEEE80211_FC0_SUBTYPE_PROBE_RESP) return; + if (sc->sc_flags & IWN_FLAG_SCANNING_5GHZ) { + int chan = le16toh(stat->chan); + if (chan < __arraycount(ic->ic_channels)) + ic->ic_curchan = &ic->ic_channels[chan]; + return; + } + frm = (uint8_t *)(wh + 1); efrm = mtod(m, uint8_t *) + m->m_len; Index: src/sys/dev/pci/if_iwnvar.h diff -u src/sys/dev/pci/if_iwnvar.h:1.15.4.1 src/sys/dev/pci/if_iwnvar.h:1.15.4.2 --- src/sys/dev/pci/if_iwnvar.h:1.15.4.1 Wed Jan 28 19:00:28 2015 +++ src/sys/dev/pci/if_iwnvar.h Fri Nov 6 00:50:52 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: if_iwnvar.h,v 1.15.4.1 2015/01/28 19:00:28 martin Exp $ */ +/* $NetBSD: if_iwnvar.h,v 1.15.4.2 2015/11/06 00:50:52 riz Exp $ */ /* $OpenBSD: if_iwnvar.h,v 1.28 2014/09/09 18:55:08 sthen Exp $ */ /*- @@ -221,8 +221,10 @@ struct iwn_softc { #define IWN_FLAG_HAS_11N (1 << 6) #define IWN_FLAG_ENH_SENS (1 << 7) /* Added for NetBSD */ -#define IWN_FLAG_SCANNING (1 << 8) -#define IWN_FLAG_HW_INITED (1 << 9) +#define IWN_FLAG_HW_INITED (1 << 8) +#define IWN_FLAG_SCANNING_2GHZ (1 << 9) +#define IWN_FLAG_SCANNING_5GHZ (1 << 10) +#define IWN_FLAG_SCANNING (IWN_FLAG_SCANNING_2GHZ|IWN_FLAG_SCANNING_5GHZ) uint8_t hw_type;