Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 5 Sep 2008 21:22:55 GMT
From:      Sam Leffler <sam@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 149283 for review
Message-ID:  <200809052122.m85LMtOc079166@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=149283

Change 149283 by sam@sam_ebb on 2008/09/05 21:22:42

	RIFS support; like MIMO PS needs driver notification for
	dynamic state change in sta mode

Affected files ...

.. //depot/projects/vap/sys/net80211/ieee80211_ddb.c#24 edit
.. //depot/projects/vap/sys/net80211/ieee80211_ht.c#43 edit
.. //depot/projects/vap/sys/net80211/ieee80211_ioctl.c#64 edit
.. //depot/projects/vap/sys/net80211/ieee80211_ioctl.h#23 edit
.. //depot/projects/vap/sys/net80211/ieee80211_node.c#44 edit
.. //depot/projects/vap/sys/net80211/ieee80211_node.h#25 edit
.. //depot/projects/vap/sys/net80211/ieee80211_sta.c#17 edit
.. //depot/projects/vap/sys/net80211/ieee80211_var.h#50 edit

Differences ...

==== //depot/projects/vap/sys/net80211/ieee80211_ddb.c#24 (text+ko) ====

@@ -66,7 +66,7 @@
 	"\20\1NONHT_PR\2INACT\3SCANWAIT\4BGSCAN\5WPS\6TSN\7SCANREQ\10RESUME" \
 	"\12NONEPR_PR\13SWBMISS\14DFS\15DOTD\22WDSLEGACY\23PROBECHAN\24HT" \
 	"\25AMDPU_TX\26AMPDU_TX\27AMSDU_TX\30AMSDU_RX\31USEHT40\32PUREN" \
-	"\33SHORTGI20\34SHORTGI40\35HTCOMPAT"
+	"\33SHORTGI20\34SHORTGI40\35HTCOMPAT\36RIFS"
 
 #define	IEEE80211_FVEN_BITS	"\20"
 
@@ -81,7 +81,7 @@
 
 #define	IEEE80211_C_HTCAP_BITS \
 	"\20\1LDPC\2CHWIDTH40\5GREENFIELD\6SHORTGI20\7SHORTGI40\10TXSTBC" \
-	"\21AMPDU\22AMSDU\23HT\24SMPS"
+	"\21AMPDU\22AMSDU\23HT\24SMPS\25RIFS"
 
 /* NB: policy bits not included */
 #define	IEEE80211_CHAN_BITS \
@@ -90,7 +90,7 @@
 
 #define	IEEE80211_NODE_BITS \
 	"\20\1AUTH\2QOS\3ERP\5PWR_MGT\6AREF\7HT\10HTCOMPAT\11WPS\12TSN" \
-	"\13AMPDU_RX\14AMPDU_TX\15MIMO_PS\16MIMO_RTS"
+	"\13AMPDU_RX\14AMPDU_TX\15MIMO_PS\16MIMO_RTS\17RIFS"
 
 #define	IEEE80211_ERP_BITS \
 	"\20\1NON_ERP_PRESENT\2USE_PROTECTION\3LONG_PREAMBLE"

==== //depot/projects/vap/sys/net80211/ieee80211_ht.c#43 (text+ko) ====

@@ -166,6 +166,10 @@
 			if (vap->iv_htcaps & IEEE80211_HTCAP_SHORTGI40)
 				vap->iv_flags_ext |= IEEE80211_FEXT_SHORTGI40;
 		}
+		/* enable RIFS if capable */
+		if (vap->iv_htcaps & IEEE80211_HTC_RIFS)
+			vap->iv_flags_ext |= IEEE80211_FEXT_RIFS;
+
 		/* NB: A-MPDU and A-MSDU rx are mandated, these are tx only */
 		vap->iv_flags_ext |= IEEE80211_FEXT_AMPDU_RX;
 		if (vap->iv_htcaps & IEEE80211_HTC_AMPDU)
@@ -962,6 +966,9 @@
 		ni->ni_ht2ndchan = IEEE80211_HTINFO_2NDCHAN_NONE;
 	}
 	ni->ni_htctlchan = ni->ni_chan->ic_ieee;
+	if (vap->iv_flags_ext & IEEE80211_FEXT_RIFS)
+		ni->ni_flags |= IEEE80211_NODE_RIFS;
+	/* XXX does it make sense to enable SMPS? */
 
 	ni->ni_htopmode = 0;		/* XXX need protection state */
 	ni->ni_htstbc = 0;		/* XXX need info */
@@ -1294,6 +1301,12 @@
 			htflags = IEEE80211_CHAN_HT40D;
 	}
 	htinfo_update_chw(ni, htflags);
+
+	if ((htinfo->hi_byte1 & IEEE80211_HTINFO_RIFSMODE_PERM) &&
+	    (vap->iv_flags_ext & IEEE80211_FEXT_RIFS))
+		ni->ni_flags |= IEEE80211_NODE_RIFS;
+	else
+		ni->ni_flags &= ~IEEE80211_NODE_RIFS;
 }
 
 /*
@@ -2200,7 +2213,10 @@
 
 	/* XXX only update on channel change */
 	ht->hi_ctrlchannel = ieee80211_chan2ieee(ic, bsschan);
-	ht->hi_byte1 = IEEE80211_HTINFO_RIFSMODE_PROH;
+	if (vap->iv_flags_ext & IEEE80211_FEXT_RIFS)
+		ht->hi_byte1 = IEEE80211_HTINFO_RIFSMODE_PERM;
+	else
+		ht->hi_byte1 = IEEE80211_HTINFO_RIFSMODE_PROH;
 	if (IEEE80211_IS_CHAN_HT40U(bsschan))
 		ht->hi_byte1 |= IEEE80211_HTINFO_2NDCHAN_ABOVE;
 	else if (IEEE80211_IS_CHAN_HT40D(bsschan))
@@ -2227,6 +2243,7 @@
 static uint8_t *
 ieee80211_add_htinfo_body(uint8_t *frm, struct ieee80211_node *ni)
 {
+	struct ieee80211vap *vap = ni->ni_vap;
 	struct ieee80211com *ic = ni->ni_ic;
 
 	/* pre-zero remainder of ie */
@@ -2235,7 +2252,10 @@
 	/* primary/control channel center */
 	*frm++ = ieee80211_chan2ieee(ic, ni->ni_chan);
 
-	frm[0] = IEEE80211_HTINFO_RIFSMODE_PROH;
+	if (vap->iv_flags_ext & IEEE80211_FEXT_RIFS)
+		frm[0] = IEEE80211_HTINFO_RIFSMODE_PERM;
+	else
+		frm[0] = IEEE80211_HTINFO_RIFSMODE_PROH;
 	if (IEEE80211_IS_CHAN_HT40U(ni->ni_chan))
 		frm[0] |= IEEE80211_HTINFO_2NDCHAN_ABOVE;
 	else if (IEEE80211_IS_CHAN_HT40D(ni->ni_chan))

==== //depot/projects/vap/sys/net80211/ieee80211_ioctl.c#64 (text+ko) ====

@@ -1080,6 +1080,15 @@
 		} else
 			ireq->i_val = vap->iv_htcaps & IEEE80211_HTCAP_SMPS;
 		break;
+	case IEEE80211_IOC_RIFS:
+		if (vap->iv_opmode == IEEE80211_M_STA &&
+		    vap->iv_state == IEEE80211_S_RUN)
+			ireq->i_val =
+			    (vap->iv_bss->ni_flags & IEEE80211_NODE_RIFS) != 0;
+		else
+			ireq->i_val =
+			    (vap->iv_flags_ext & IEEE80211_FEXT_RIFS) != 0;
+		break;
 	default:
 		error = EINVAL;
 		break;
@@ -3093,6 +3102,17 @@
 		if (isvapht(vap))
 			error = ERESTART;
 		break;
+	case IEEE80211_IOC_RIFS:
+		if (ireq->i_val != 0) {
+			if ((vap->iv_htcaps & IEEE80211_HTC_RIFS) == 0)
+				return EOPNOTSUPP;
+			vap->iv_flags_ext |= IEEE80211_FEXT_RIFS;
+		} else
+			vap->iv_flags_ext &= ~IEEE80211_FEXT_RIFS;
+		/* NB: if not operating in 11n this can wait */
+		if (isvapht(vap))
+			error = ERESTART;
+		break;
 	default:
 		error = EINVAL;
 		break;

==== //depot/projects/vap/sys/net80211/ieee80211_ioctl.h#23 (text+ko) ====

@@ -610,6 +610,7 @@
 #define	IEEE80211_IOC_TXPARAMS		108	/* tx parameters */
 #define	IEEE80211_IOC_STA_VLAN		109	/* per-station vlan tag */
 #define	IEEE80211_IOC_SMPS		110	/* MIMO power save */
+#define	IEEE80211_IOC_RIFS		111	/* RIFS config (on, off) */
 
 /*
  * Parameters for controlling a scan requested with

==== //depot/projects/vap/sys/net80211/ieee80211_node.c#44 (text+ko) ====

@@ -2266,7 +2266,7 @@
 		newassoc = 0;
 
 	IEEE80211_NOTE(vap, IEEE80211_MSG_ASSOC | IEEE80211_MSG_DEBUG, ni,
-	    "station associated at aid %d: %s preamble, %s slot time%s%s%s%s%s%s%s",
+	    "station associated at aid %d: %s preamble, %s slot time%s%s%s%s%s%s%s%s",
 	    IEEE80211_NODE_AID(ni),
 	    ic->ic_flags & IEEE80211_F_SHPREAMBLE ? "short" : "long",
 	    ic->ic_flags & IEEE80211_F_SHSLOT ? "short" : "long",
@@ -2277,6 +2277,7 @@
 	    ni->ni_flags & IEEE80211_NODE_AMPDU ? " (+AMPDU)" : "",
 	    ni->ni_flags & IEEE80211_NODE_MIMO_RTS ? " (+SMPS-DYN)" :
 	        ni->ni_flags & IEEE80211_NODE_MIMO_PS ? " (+SMPS)" : "",
+	    ni->ni_flags & IEEE80211_NODE_RIFS ? " (+RIFS)" : "",
 	    IEEE80211_ATH_CAP(vap, ni, IEEE80211_NODE_FF) ?
 		", fast-frames" : "",
 	    IEEE80211_ATH_CAP(vap, ni, IEEE80211_NODE_TURBOP) ?

==== //depot/projects/vap/sys/net80211/ieee80211_node.h#25 (text+ko) ====

@@ -114,6 +114,7 @@
 #define	IEEE80211_NODE_AMPDU_TX	0x0800		/* AMPDU tx enabled */
 #define	IEEE80211_NODE_MIMO_PS	0x1000		/* MIMO power save enabled */
 #define	IEEE80211_NODE_MIMO_RTS	0x2000		/* send RTS in MIMO PS */
+#define	IEEE80211_NODE_RIFS	0x4000		/* RIFS enabled */
 	uint16_t		ni_associd;	/* association ID */
 	uint16_t		ni_vlan;	/* vlan tag */
 	uint16_t		ni_txpower;	/* current transmit power */
@@ -198,7 +199,7 @@
 #define	IEEE80211_NODE_HT_ALL \
 	(IEEE80211_NODE_HT | IEEE80211_NODE_HTCOMPAT | \
 	 IEEE80211_NODE_AMPDU | IEEE80211_NODE_MIMO_PS | \
-	 IEEE80211_NODE_MIMO_RTS)
+	 IEEE80211_NODE_MIMO_RTS | IEEE80211_NODE_RIFS)
 
 #define	IEEE80211_NODE_AID(ni)	IEEE80211_AID(ni->ni_associd)
 

==== //depot/projects/vap/sys/net80211/ieee80211_sta.c#17 (text+ko) ====

@@ -1538,7 +1538,7 @@
 			ic->ic_flags &= ~IEEE80211_F_USEPROT;
 		IEEE80211_NOTE_MAC(vap,
 		    IEEE80211_MSG_ASSOC | IEEE80211_MSG_DEBUG, wh->i_addr2,
-		    "%sassoc success at aid %d: %s preamble, %s slot time%s%s%s%s%s%s%s",
+		    "%sassoc success at aid %d: %s preamble, %s slot time%s%s%s%s%s%s%s%s",
 		    ISREASSOC(subtype) ? "re" : "",
 		    IEEE80211_NODE_AID(ni),
 		    ic->ic_flags&IEEE80211_F_SHPREAMBLE ? "short" : "long",
@@ -1550,6 +1550,7 @@
 		    ni->ni_flags & IEEE80211_NODE_AMPDU ? " (+AMPDU)" : "",
 		    ni->ni_flags & IEEE80211_NODE_MIMO_RTS ? " (+SMPS-DYN)" :
 			ni->ni_flags & IEEE80211_NODE_MIMO_PS ? " (+SMPS)" : "",
+		    ni->ni_flags & IEEE80211_NODE_RIFS ? " (+RIFS)" : "",
 		    IEEE80211_ATH_CAP(vap, ni, IEEE80211_NODE_FF) ?
 			", fast-frames" : "",
 		    IEEE80211_ATH_CAP(vap, ni, IEEE80211_NODE_TURBOP) ?

==== //depot/projects/vap/sys/net80211/ieee80211_var.h#50 (text+ko) ====

@@ -492,6 +492,7 @@
 #define	IEEE80211_FEXT_SHORTGI20 0x04000000	/* CONF: short GI in HT20 */
 #define	IEEE80211_FEXT_SHORTGI40 0x08000000	/* CONF: short GI in HT40 */
 #define	IEEE80211_FEXT_HTCOMPAT  0x10000000	/* CONF: HT vendor OUI's */
+#define	IEEE80211_FEXT_RIFS  	 0x20000000	/* CONF: RIFS enabled */
 
 /* ic_caps/iv_caps: device driver capabilities */
 /* 0x2f available */
@@ -535,6 +536,7 @@
 /* NB: HT40 is implied by IEEE80211_HTCAP_CHWIDTH40 */
 #define	IEEE80211_HTC_HT	0x00040000	/* CAPABILITY: HT operation */
 #define	IEEE80211_HTC_SMPS	0x00080000	/* CAPABILITY: MIMO power save*/
+#define	IEEE80211_HTC_RIFS	0x00100000	/* CAPABILITY: RIFS support */
 
 void	ieee80211_ifattach(struct ieee80211com *);
 void	ieee80211_ifdetach(struct ieee80211com *);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200809052122.m85LMtOc079166>