PERFORCE change 150060 for review

Sam Leffler sam at FreeBSD.org
Thu Sep 18 23:58:57 UTC 2008


http://perforce.freebsd.org/chv.cgi?CH=150060

Change 150060 by sam at sam_ebb on 2008/09/18 23:58:11

	checkpoint new routine to compute duration for ht frames;
	needs cleanup

Affected files ...

.. //depot/projects/vap/sys/net80211/ieee80211_phy.c#11 edit
.. //depot/projects/vap/sys/net80211/ieee80211_phy.h#8 edit

Differences ...

==== //depot/projects/vap/sys/net80211/ieee80211_phy.c#11 (text+ko) ====

@@ -471,3 +471,43 @@
 	}
 	return txTime;
 }
+
+#define OFDM_PLCP_BITS	22
+#define	HT_L_STF	8
+#define	HT_L_LTF	8
+#define	HT_L_SIG	4
+#define	HT_SIG		8
+#define	HT_STF		4
+#define	HT_LTF(n)	((n) * 4)
+
+uint32_t
+ieee80211_compute_duration_ht(const struct ieee80211_rate_table *rt,
+	uint32_t frameLen, uint16_t rate,
+	int streams, int isht40, int isShortGI)
+{
+	static const uint16_t ht20_bps[16] = {
+	    26, 52, 78, 104, 156, 208, 234, 260,
+	    52, 104, 156, 208, 312, 416, 468, 520
+	};
+	static const uint16_t ht40_bps[16] = {
+	    54, 108, 162, 216, 324, 432, 486, 540,
+	    108, 216, 324, 432, 648, 864, 972, 1080,
+	};
+	uint32_t bitsPerSymbol, numBits, numSymbols, txTime;
+
+	KASSERT(rate & IEEE80211_RATE_MCS, ("not mcs %d", rate));
+	KASSERT((rate &~ IEEE80211_RATE_MCS) < 16, ("bad mcs 0x%x", rate));
+
+	if (isht40)
+		bitsPerSymbol = ht40_bps[rate & 0xf];
+	else
+		bitsPerSymbol = ht20_bps[rate & 0xf];
+	numBits = OFDM_PLCP_BITS + (frameLen << 3);
+	numSymbols = howmany(numBits, bitsPerSymbol);
+	if (isShortGI)
+		txTime = ((numSymbols * 18) + 4) / 5;	/* 3.6us */
+	else
+		txTime = numSymbols * 4;		/* 4us */
+	return txTime + HT_L_STF + HT_L_LTF +
+	    HT_L_SIG + HT_SIG + HT_STF + HT_LTF(streams);
+}

==== //depot/projects/vap/sys/net80211/ieee80211_phy.h#8 (text+ko) ====

@@ -138,6 +138,12 @@
 uint16_t	ieee80211_compute_duration(const struct ieee80211_rate_table *,
 			uint32_t frameLen, uint16_t rate, int isShortPreamble);
 /*
+ * Like ieee80211_compute_duration but for HT phy's.
+ */
+uint32_t	ieee80211_compute_duration_ht(const struct ieee80211_rate_table *,
+			uint32_t frameLen, uint16_t rate,
+			int streams, int isht40, int isShortGI);
+/*
  * Convert PLCP signal/rate field to 802.11 rate code (.5Mbits/s)
  */
 uint8_t		ieee80211_plcp2rate(uint8_t, enum ieee80211_phytype);


More information about the p4-projects mailing list