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>