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;
 

Reply via email to