Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 10 Sep 2008 17:24:23 GMT
From:      Sam Leffler <sam@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 149547 for review
Message-ID:  <200809101724.m8AHONkS097651@repoman.freebsd.org>

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

Change 149547 by sam@sam_ebb on 2008/09/10 17:23:55

	Fix handling of shortgi: use the local configuration (and
	implicitly device capabilities) to decide whether to use
	short gi.  Drivers inspect ni_flags to decide whether to
	send a frame w/ short sgi.

Affected files ...

.. //depot/projects/vap/sys/net80211/ieee80211_ddb.c#26 edit
.. //depot/projects/vap/sys/net80211/ieee80211_ht.c#47 edit
.. //depot/projects/vap/sys/net80211/ieee80211_node.h#28 edit

Differences ...

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

@@ -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\17RIFS"
+	"\13AMPDU_RX\14AMPDU_TX\15MIMO_PS\16MIMO_RTS\17RIFS\20SGI20\21SGI40"
 
 #define	IEEE80211_ERP_BITS \
 	"\20\1NON_ERP_PRESENT\2USE_PROTECTION\3LONG_PREAMBLE"

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

@@ -1247,7 +1247,7 @@
 /*
  * Handle 11n MIMO PS switch.
  */
-static int
+static __inline int
 htcap_update_mimo_ps(struct ieee80211_node *ni)
 {
 	uint16_t oflags = ni->ni_flags;
@@ -1271,6 +1271,24 @@
 }
 
 /*
+ * Update short GI state according to received htcap
+ * and local settings.
+ */
+static __inline void
+htcap_update_shortgi(struct ieee80211_node *ni)
+{
+	struct ieee80211vap *vap = ni->ni_vap;
+
+	ni->ni_flags &= ~(IEEE80211_NODE_SGI20|IEEE80211_NODE_SGI40);
+	if ((ni->ni_htcap & IEEE80211_HTCAP_SHORTGI20) &&
+	    (vap->iv_flags_ext & IEEE80211_FEXT_SHORTGI20))
+		ni->ni_flags |= IEEE80211_NODE_SGI20;
+	if ((ni->ni_htcap & IEEE80211_HTCAP_SHORTGI40) &&
+	    (vap->iv_flags_ext & IEEE80211_FEXT_SHORTGI40))
+		ni->ni_flags |= IEEE80211_NODE_SGI40;
+}
+
+/*
  * Parse and update HT-related state extracted from
  * the HT cap and info ie's.
  */
@@ -1285,6 +1303,7 @@
 	ieee80211_parse_htcap(ni, htcapie);
 	if (vap->iv_htcaps & IEEE80211_HTCAP_SMPS)
 		htcap_update_mimo_ps(ni);
+	htcap_update_shortgi(ni);
 
 	if (htinfoie[0] == IEEE80211_ELEMID_VENDOR)
 		htinfoie += 4;
@@ -1323,6 +1342,7 @@
 	ieee80211_parse_htcap(ni, htcapie);
 	if (vap->iv_htcaps & IEEE80211_HTCAP_SMPS)
 		htcap_update_mimo_ps(ni);
+	htcap_update_shortgi(ni);
 
 	/* NB: honor operating mode constraint */
 	/* XXX 40 MHZ intolerant */

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

@@ -100,21 +100,23 @@
 	u_int			ni_refcnt;	/* count of held references */
 	u_int			ni_scangen;	/* gen# for timeout scan */
 	u_int			ni_flags;
-#define	IEEE80211_NODE_AUTH	0x0001		/* authorized for data */
-#define	IEEE80211_NODE_QOS	0x0002		/* QoS enabled */
-#define	IEEE80211_NODE_ERP	0x0004		/* ERP enabled */
+#define	IEEE80211_NODE_AUTH	0x000001	/* authorized for data */
+#define	IEEE80211_NODE_QOS	0x000002	/* QoS enabled */
+#define	IEEE80211_NODE_ERP	0x000004	/* ERP enabled */
 /* NB: this must have the same value as IEEE80211_FC1_PWR_MGT */
-#define	IEEE80211_NODE_PWR_MGT	0x0010		/* power save mode enabled */
-#define	IEEE80211_NODE_AREF	0x0020		/* authentication ref held */
-#define	IEEE80211_NODE_HT	0x0040		/* HT enabled */
-#define	IEEE80211_NODE_HTCOMPAT	0x0080		/* HT setup w/ vendor OUI's */
-#define	IEEE80211_NODE_WPS	0x0100		/* WPS association */
-#define	IEEE80211_NODE_TSN	0x0200		/* TSN association */
-#define	IEEE80211_NODE_AMPDU_RX	0x0400		/* AMPDU rx enabled */
-#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 */
+#define	IEEE80211_NODE_PWR_MGT	0x000010	/* power save mode enabled */
+#define	IEEE80211_NODE_AREF	0x000020	/* authentication ref held */
+#define	IEEE80211_NODE_HT	0x000040	/* HT enabled */
+#define	IEEE80211_NODE_HTCOMPAT	0x000080	/* HT setup w/ vendor OUI's */
+#define	IEEE80211_NODE_WPS	0x000100	/* WPS association */
+#define	IEEE80211_NODE_TSN	0x000200	/* TSN association */
+#define	IEEE80211_NODE_AMPDU_RX	0x000400	/* AMPDU rx enabled */
+#define	IEEE80211_NODE_AMPDU_TX	0x000800	/* AMPDU tx enabled */
+#define	IEEE80211_NODE_MIMO_PS	0x001000	/* MIMO power save enabled */
+#define	IEEE80211_NODE_MIMO_RTS	0x002000	/* send RTS in MIMO PS */
+#define	IEEE80211_NODE_RIFS	0x004000	/* RIFS enabled */
+#define	IEEE80211_NODE_SGI20	0x008000	/* Short GI in HT20 enabled */
+#define	IEEE80211_NODE_SGI40	0x010000	/* Short GI in HT40 enabled */
 	uint16_t		ni_associd;	/* association ID */
 	uint16_t		ni_vlan;	/* vlan tag */
 	uint16_t		ni_txpower;	/* current transmit power */
@@ -199,7 +201,8 @@
 #define	IEEE80211_NODE_HT_ALL \
 	(IEEE80211_NODE_HT | IEEE80211_NODE_HTCOMPAT | \
 	 IEEE80211_NODE_AMPDU | IEEE80211_NODE_MIMO_PS | \
-	 IEEE80211_NODE_MIMO_RTS | IEEE80211_NODE_RIFS)
+	 IEEE80211_NODE_MIMO_RTS | IEEE80211_NODE_RIFS | \
+	 IEEE80211_NODE_SGI20 | IEEE80211_NODE_SGI40)
 
 #define	IEEE80211_NODE_AID(ni)	IEEE80211_AID(ni->ni_associd)
 



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