diff options
author | Felix Fietkau <nbd@openwrt.org> | 2010-04-19 13:57:33 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-04-20 11:50:53 -0400 |
commit | c666387682faaec7d7b4a8afd30b0b6bc0816ddb (patch) | |
tree | 5e3b37b850d469b393cae603732326f61caa5205 | |
parent | 0e668cde0d78fb1b5f1f5e9a4bf7f9900269c98e (diff) |
ath9k: reduce the bits_per_symbol table size, support more streams
Instead of increasing bits_per_symbol for supporting more streams, keep
it single-stream only and multiply the values by the numer of streams.
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r-- | drivers/net/wireless/ath/ath9k/xmit.c | 19 |
1 files changed, 6 insertions, 13 deletions
diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c index 4078982fb9e9..2237658144e6 100644 --- a/drivers/net/wireless/ath/ath9k/xmit.c +++ b/drivers/net/wireless/ath/ath9k/xmit.c | |||
@@ -34,7 +34,7 @@ | |||
34 | 34 | ||
35 | #define OFDM_SIFS_TIME 16 | 35 | #define OFDM_SIFS_TIME 16 |
36 | 36 | ||
37 | static u32 bits_per_symbol[][2] = { | 37 | static u16 bits_per_symbol[][2] = { |
38 | /* 20MHz 40MHz */ | 38 | /* 20MHz 40MHz */ |
39 | { 26, 54 }, /* 0: BPSK */ | 39 | { 26, 54 }, /* 0: BPSK */ |
40 | { 52, 108 }, /* 1: QPSK 1/2 */ | 40 | { 52, 108 }, /* 1: QPSK 1/2 */ |
@@ -44,14 +44,6 @@ static u32 bits_per_symbol[][2] = { | |||
44 | { 208, 432 }, /* 5: 64-QAM 2/3 */ | 44 | { 208, 432 }, /* 5: 64-QAM 2/3 */ |
45 | { 234, 486 }, /* 6: 64-QAM 3/4 */ | 45 | { 234, 486 }, /* 6: 64-QAM 3/4 */ |
46 | { 260, 540 }, /* 7: 64-QAM 5/6 */ | 46 | { 260, 540 }, /* 7: 64-QAM 5/6 */ |
47 | { 52, 108 }, /* 8: BPSK */ | ||
48 | { 104, 216 }, /* 9: QPSK 1/2 */ | ||
49 | { 156, 324 }, /* 10: QPSK 3/4 */ | ||
50 | { 208, 432 }, /* 11: 16-QAM 1/2 */ | ||
51 | { 312, 648 }, /* 12: 16-QAM 3/4 */ | ||
52 | { 416, 864 }, /* 13: 64-QAM 2/3 */ | ||
53 | { 468, 972 }, /* 14: 64-QAM 3/4 */ | ||
54 | { 520, 1080 }, /* 15: 64-QAM 5/6 */ | ||
55 | }; | 47 | }; |
56 | 48 | ||
57 | #define IS_HT_RATE(_rate) ((_rate) & 0x80) | 49 | #define IS_HT_RATE(_rate) ((_rate) & 0x80) |
@@ -601,7 +593,7 @@ static int ath_compute_num_delims(struct ath_softc *sc, struct ath_atx_tid *tid, | |||
601 | u32 nsymbits, nsymbols; | 593 | u32 nsymbits, nsymbols; |
602 | u16 minlen; | 594 | u16 minlen; |
603 | u8 flags, rix; | 595 | u8 flags, rix; |
604 | int width, half_gi, ndelim, mindelim; | 596 | int width, streams, half_gi, ndelim, mindelim; |
605 | 597 | ||
606 | /* Select standard number of delimiters based on frame length alone */ | 598 | /* Select standard number of delimiters based on frame length alone */ |
607 | ndelim = ATH_AGGR_GET_NDELIM(frmlen); | 599 | ndelim = ATH_AGGR_GET_NDELIM(frmlen); |
@@ -641,7 +633,8 @@ static int ath_compute_num_delims(struct ath_softc *sc, struct ath_atx_tid *tid, | |||
641 | if (nsymbols == 0) | 633 | if (nsymbols == 0) |
642 | nsymbols = 1; | 634 | nsymbols = 1; |
643 | 635 | ||
644 | nsymbits = bits_per_symbol[rix][width]; | 636 | streams = HT_RC_2_STREAMS(rix); |
637 | nsymbits = bits_per_symbol[rix % 8][width] * streams; | ||
645 | minlen = (nsymbols * nsymbits) / BITS_PER_BYTE; | 638 | minlen = (nsymbols * nsymbits) / BITS_PER_BYTE; |
646 | 639 | ||
647 | if (frmlen < minlen) { | 640 | if (frmlen < minlen) { |
@@ -1533,8 +1526,9 @@ static u32 ath_pkt_duration(struct ath_softc *sc, u8 rix, struct ath_buf *bf, | |||
1533 | pktlen = bf_isaggr(bf) ? bf->bf_al : bf->bf_frmlen; | 1526 | pktlen = bf_isaggr(bf) ? bf->bf_al : bf->bf_frmlen; |
1534 | 1527 | ||
1535 | /* find number of symbols: PLCP + data */ | 1528 | /* find number of symbols: PLCP + data */ |
1529 | streams = HT_RC_2_STREAMS(rix); | ||
1536 | nbits = (pktlen << 3) + OFDM_PLCP_BITS; | 1530 | nbits = (pktlen << 3) + OFDM_PLCP_BITS; |
1537 | nsymbits = bits_per_symbol[rix][width]; | 1531 | nsymbits = bits_per_symbol[rix % 8][width] * streams; |
1538 | nsymbols = (nbits + nsymbits - 1) / nsymbits; | 1532 | nsymbols = (nbits + nsymbits - 1) / nsymbits; |
1539 | 1533 | ||
1540 | if (!half_gi) | 1534 | if (!half_gi) |
@@ -1543,7 +1537,6 @@ static u32 ath_pkt_duration(struct ath_softc *sc, u8 rix, struct ath_buf *bf, | |||
1543 | duration = SYMBOL_TIME_HALFGI(nsymbols); | 1537 | duration = SYMBOL_TIME_HALFGI(nsymbols); |
1544 | 1538 | ||
1545 | /* addup duration for legacy/ht training and signal fields */ | 1539 | /* addup duration for legacy/ht training and signal fields */ |
1546 | streams = HT_RC_2_STREAMS(rix); | ||
1547 | duration += L_STF + L_LTF + L_SIG + HT_SIG + HT_STF + HT_LTF(streams); | 1540 | duration += L_STF + L_LTF + L_SIG + HT_SIG + HT_STF + HT_LTF(streams); |
1548 | 1541 | ||
1549 | return duration; | 1542 | return duration; |