linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Felix Fietkau <nbd@openwrt.org>
To: linux-wireless@vger.kernel.org
Cc: linville@tuxdriver.com, lrodriguez@atheros.com
Subject: [PATCH 6/9] ath9k: initialize the number of tx/rx streams correctly
Date: Sun, 18 Apr 2010 16:56:39 +0200	[thread overview]
Message-ID: <1271602602-8538-6-git-send-email-nbd@openwrt.org> (raw)
In-Reply-To: <1271602602-8538-5-git-send-email-nbd@openwrt.org>

AR9300 based hardware can 3x3 MCS rates, this should be set in the
HT capabilities.

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
---
 drivers/net/wireless/ath/ath9k/init.c |   39 +++++++++++++++++++++++---------
 1 files changed, 28 insertions(+), 11 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c
index ca6e781..2c0630e 100644
--- a/drivers/net/wireless/ath/ath9k/init.c
+++ b/drivers/net/wireless/ath/ath9k/init.c
@@ -175,6 +175,18 @@ static const struct ath_ops ath9k_common_ops = {
 	.write = ath9k_iowrite32,
 };
 
+static int count_streams(unsigned int chainmask, int max)
+{
+	int streams = 0;
+
+	do {
+		if (++streams == max)
+			break;
+	} while ((chainmask = chainmask & (chainmask - 1)));
+
+	return streams;
+}
+
 /**************************/
 /*     Initialization     */
 /**************************/
@@ -182,8 +194,10 @@ static const struct ath_ops ath9k_common_ops = {
 static void setup_ht_cap(struct ath_softc *sc,
 			 struct ieee80211_sta_ht_cap *ht_info)
 {
-	struct ath_common *common = ath9k_hw_common(sc->sc_ah);
+	struct ath_hw *ah = sc->sc_ah;
+	struct ath_common *common = ath9k_hw_common(ah);
 	u8 tx_streams, rx_streams;
+	int i, max_streams;
 
 	ht_info->ht_supported = true;
 	ht_info->cap = IEEE80211_HT_CAP_SUP_WIDTH_20_40 |
@@ -197,25 +211,28 @@ static void setup_ht_cap(struct ath_softc *sc,
 	ht_info->ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
 	ht_info->ampdu_density = IEEE80211_HT_MPDU_DENSITY_8;
 
+	if (AR_SREV_9300_20_OR_LATER(ah))
+		max_streams = 3;
+	else
+		max_streams = 2;
+
 	/* set up supported mcs set */
 	memset(&ht_info->mcs, 0, sizeof(ht_info->mcs));
-	tx_streams = !(common->tx_chainmask & (common->tx_chainmask - 1)) ?
-		     1 : 2;
-	rx_streams = !(common->rx_chainmask & (common->rx_chainmask - 1)) ?
-		     1 : 2;
+	tx_streams = count_streams(common->tx_chainmask, max_streams);
+	rx_streams = count_streams(common->rx_chainmask, max_streams);
+
+	ath_print(common, ATH_DBG_CONFIG,
+		  "TX streams %d, RX streams: %d\n",
+		  tx_streams, rx_streams);
 
 	if (tx_streams != rx_streams) {
-		ath_print(common, ATH_DBG_CONFIG,
-			  "TX streams %d, RX streams: %d\n",
-			  tx_streams, rx_streams);
 		ht_info->mcs.tx_params |= IEEE80211_HT_MCS_TX_RX_DIFF;
 		ht_info->mcs.tx_params |= ((tx_streams - 1) <<
 				IEEE80211_HT_MCS_TX_MAX_STREAMS_SHIFT);
 	}
 
-	ht_info->mcs.rx_mask[0] = 0xff;
-	if (rx_streams >= 2)
-		ht_info->mcs.rx_mask[1] = 0xff;
+	for (i = 0; i < rx_streams; i++)
+		ht_info->mcs.rx_mask[i] = 0xff;
 
 	ht_info->mcs.tx_params |= IEEE80211_HT_MCS_TX_DEFINED;
 }
-- 
1.6.4.2


  reply	other threads:[~2010-04-18 15:29 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-04-18 14:56 [PATCH 1/9] ath9k: check for specific rx stuck conditions and recover from them Felix Fietkau
2010-04-18 14:56 ` [PATCH 2/9] ath9k: clean up tx buffer handling Felix Fietkau
2010-04-18 14:56   ` [PATCH 3/9] ath9k: update the MCS mask for MCS16 and above Felix Fietkau
2010-04-18 14:56     ` [PATCH 4/9] ath9k: update the ath_max_4ms_framelen table Felix Fietkau
2010-04-18 14:56       ` [PATCH 5/9] ath9k: reduce the bits_per_symbol table size, support more streams Felix Fietkau
2010-04-18 14:56         ` Felix Fietkau [this message]
2010-04-18 14:56           ` [PATCH 7/9] mac80211: add flags for STBC (Space-Time Block Coding) Felix Fietkau
2010-04-18 14:56             ` [PATCH 8/9] ath9k: add support for Tx and Rx STBC Felix Fietkau
2010-04-18 14:56               ` [PATCH 9/9] ath9k: set the STBC flag in rate control if the peer supports it Felix Fietkau
2010-04-19 12:22               ` [PATCH 8/9] ath9k: add support for Tx and Rx STBC Björn Smedman
2010-04-19 12:28                 ` Felix Fietkau
2010-04-18 15:53             ` [PATCH 7/9] mac80211: add flags for STBC (Space-Time Block Coding) Johannes Berg
2010-04-18 16:05               ` Felix Fietkau
2010-04-19  5:57                 ` Johannes Berg
2010-04-19  8:45                   ` Felix Fietkau
2010-04-19  8:59                     ` Johannes Berg
2010-04-19  9:06                       ` Felix Fietkau
2010-04-19  9:09                         ` Johannes Berg
2010-04-19 10:14                           ` Felix Fietkau
2010-04-19 10:19                             ` Johannes Berg
2010-04-19 10:51                               ` Felix Fietkau

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1271602602-8538-6-git-send-email-nbd@openwrt.org \
    --to=nbd@openwrt.org \
    --cc=linux-wireless@vger.kernel.org \
    --cc=linville@tuxdriver.com \
    --cc=lrodriguez@atheros.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).