From b4ab847b2d1ec27e3ba5f4d317a97d9c45c49fcb Mon Sep 17 00:00:00 2001 From: nbd Date: Sat, 17 Apr 2010 23:58:21 +0000 Subject: ath9k: enable 3-stream and MCS16-23 support git-svn-id: svn://svn.openwrt.org/openwrt/trunk@20968 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- .../patches/563-ath9k_bits_per_symbol.patch | 64 ++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 package/mac80211/patches/563-ath9k_bits_per_symbol.patch (limited to 'package/mac80211/patches/563-ath9k_bits_per_symbol.patch') diff --git a/package/mac80211/patches/563-ath9k_bits_per_symbol.patch b/package/mac80211/patches/563-ath9k_bits_per_symbol.patch new file mode 100644 index 000000000..d842e404d --- /dev/null +++ b/package/mac80211/patches/563-ath9k_bits_per_symbol.patch @@ -0,0 +1,64 @@ +--- a/drivers/net/wireless/ath/ath9k/xmit.c ++++ b/drivers/net/wireless/ath/ath9k/xmit.c +@@ -34,7 +34,7 @@ + + #define OFDM_SIFS_TIME 16 + +-static u32 bits_per_symbol[][2] = { ++static u16 bits_per_symbol[][2] = { + /* 20MHz 40MHz */ + { 26, 54 }, /* 0: BPSK */ + { 52, 108 }, /* 1: QPSK 1/2 */ +@@ -44,14 +44,6 @@ static u32 bits_per_symbol[][2] = { + { 208, 432 }, /* 5: 64-QAM 2/3 */ + { 234, 486 }, /* 6: 64-QAM 3/4 */ + { 260, 540 }, /* 7: 64-QAM 5/6 */ +- { 52, 108 }, /* 8: BPSK */ +- { 104, 216 }, /* 9: QPSK 1/2 */ +- { 156, 324 }, /* 10: QPSK 3/4 */ +- { 208, 432 }, /* 11: 16-QAM 1/2 */ +- { 312, 648 }, /* 12: 16-QAM 3/4 */ +- { 416, 864 }, /* 13: 64-QAM 2/3 */ +- { 468, 972 }, /* 14: 64-QAM 3/4 */ +- { 520, 1080 }, /* 15: 64-QAM 5/6 */ + }; + + #define IS_HT_RATE(_rate) ((_rate) & 0x80) +@@ -601,7 +593,7 @@ static int ath_compute_num_delims(struct + u32 nsymbits, nsymbols; + u16 minlen; + u8 flags, rix; +- int width, half_gi, ndelim, mindelim; ++ int width, streams, half_gi, ndelim, mindelim; + + /* Select standard number of delimiters based on frame length alone */ + ndelim = ATH_AGGR_GET_NDELIM(frmlen); +@@ -641,7 +633,8 @@ static int ath_compute_num_delims(struct + if (nsymbols == 0) + nsymbols = 1; + +- nsymbits = bits_per_symbol[rix][width]; ++ streams = HT_RC_2_STREAMS(rix); ++ nsymbits = bits_per_symbol[rix % 8][width] * streams; + minlen = (nsymbols * nsymbits) / BITS_PER_BYTE; + + if (frmlen < minlen) { +@@ -1533,8 +1526,9 @@ static u32 ath_pkt_duration(struct ath_s + pktlen = bf_isaggr(bf) ? bf->bf_al : bf->bf_frmlen; + + /* find number of symbols: PLCP + data */ ++ streams = HT_RC_2_STREAMS(rix); + nbits = (pktlen << 3) + OFDM_PLCP_BITS; +- nsymbits = bits_per_symbol[rix][width]; ++ nsymbits = bits_per_symbol[rix % 8][width] * streams; + nsymbols = (nbits + nsymbits - 1) / nsymbits; + + if (!half_gi) +@@ -1543,7 +1537,6 @@ static u32 ath_pkt_duration(struct ath_s + duration = SYMBOL_TIME_HALFGI(nsymbols); + + /* addup duration for legacy/ht training and signal fields */ +- streams = HT_RC_2_STREAMS(rix); + duration += L_STF + L_LTF + L_SIG + HT_SIG + HT_STF + HT_LTF(streams); + + return duration; -- cgit v1.2.3