From: Ivo van Doorn <ivdoorn@gmail.com>
To: "John W. Linville" <linville@tuxdriver.com>
Cc: linux-wireless@vger.kernel.org, users@rt2x00.serialmonkey.com
Subject: [PATCH 10/19] rt2x00: Don't call ieee80211_get_tx_rate for MCS rates
Date: Thu, 3 Mar 2011 19:43:49 +0100 [thread overview]
Message-ID: <201103031943.50656.IvDoorn@gmail.com> (raw)
In-Reply-To: <201103031943.26328.IvDoorn@gmail.com>
From: Helmut Schaa <helmut.schaa@googlemail.com>
ieee80211_get_tx_rate is not valid for HT rates. Hence, restructure the
TX desciptor creation to be aware of MCS rates. The generic TX desciptor
creation now cares about the rate_mode (CCK, OFDM, MCS, GF).
As a result, ieee80211_get_tx_rate gets only called for legacy rates.
Acked-by: Gertjan van Wingerde <gwingerde@gmail.com>
Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com>
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
---
drivers/net/wireless/rt2x00/rt2x00ht.c | 8 --------
drivers/net/wireless/rt2x00/rt2x00queue.c | 22 +++++++++++++++-------
2 files changed, 15 insertions(+), 15 deletions(-)
diff --git a/drivers/net/wireless/rt2x00/rt2x00ht.c b/drivers/net/wireless/rt2x00/rt2x00ht.c
index 78a0e73..ae1219d 100644
--- a/drivers/net/wireless/rt2x00/rt2x00ht.c
+++ b/drivers/net/wireless/rt2x00/rt2x00ht.c
@@ -78,14 +78,6 @@ void rt2x00ht_create_tx_descriptor(struct queue_entry *entry,
__set_bit(ENTRY_TXD_HT_AMPDU, &txdesc->flags);
/*
- * Determine HT Mix/Greenfield rate mode
- */
- if (txrate->flags & IEEE80211_TX_RC_MCS)
- txdesc->rate_mode = RATE_MODE_HT_MIX;
- if (txrate->flags & IEEE80211_TX_RC_GREEN_FIELD)
- txdesc->rate_mode = RATE_MODE_HT_GREENFIELD;
-
- /*
* Set 40Mhz mode if necessary (for legacy rates this will
* duplicate the frame to both channels).
*/
diff --git a/drivers/net/wireless/rt2x00/rt2x00queue.c b/drivers/net/wireless/rt2x00/rt2x00queue.c
index 6300cf3..f06b5c7 100644
--- a/drivers/net/wireless/rt2x00/rt2x00queue.c
+++ b/drivers/net/wireless/rt2x00/rt2x00queue.c
@@ -321,9 +321,9 @@ static void rt2x00queue_create_tx_descriptor(struct queue_entry *entry,
struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(entry->skb);
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)entry->skb->data;
- struct ieee80211_rate *rate =
- ieee80211_get_tx_rate(rt2x00dev->hw, tx_info);
- const struct rt2x00_rate *hwrate;
+ struct ieee80211_tx_rate *txrate = &tx_info->control.rates[0];
+ struct ieee80211_rate *rate;
+ const struct rt2x00_rate *hwrate = NULL;
memset(txdesc, 0, sizeof(*txdesc));
@@ -390,10 +390,18 @@ static void rt2x00queue_create_tx_descriptor(struct queue_entry *entry,
/*
* Determine rate modulation.
*/
- hwrate = rt2x00_get_rate(rate->hw_value);
- txdesc->rate_mode = RATE_MODE_CCK;
- if (hwrate->flags & DEV_RATE_OFDM)
- txdesc->rate_mode = RATE_MODE_OFDM;
+ if (txrate->flags & IEEE80211_TX_RC_GREEN_FIELD)
+ txdesc->rate_mode = RATE_MODE_HT_GREENFIELD;
+ else if (txrate->flags & IEEE80211_TX_RC_MCS)
+ txdesc->rate_mode = RATE_MODE_HT_MIX;
+ else {
+ rate = ieee80211_get_tx_rate(rt2x00dev->hw, tx_info);
+ hwrate = rt2x00_get_rate(rate->hw_value);
+ if (hwrate->flags & DEV_RATE_OFDM)
+ txdesc->rate_mode = RATE_MODE_OFDM;
+ else
+ txdesc->rate_mode = RATE_MODE_CCK;
+ }
/*
* Apply TX descriptor handling by components
--
1.7.2.3
next prev parent reply other threads:[~2011-03-03 18:48 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-03 18:38 [PATCH 01/19] rt2x00: Optimize calls to rt2x00queue_get_queue Ivo van Doorn
2011-03-03 18:39 ` [PATCH 02/19] rt2x00: Make use of unlikely during tx status processing Ivo van Doorn
2011-03-03 18:39 ` [PATCH 03/19] rt2x00: Remove useless NULL check Ivo van Doorn
2011-03-03 18:40 ` [PATCH 04/19] rt2x00: Add unlikely macro to special case tx status handling Ivo van Doorn
2011-03-03 18:41 ` [PATCH 05/19] rt2x00: Use unlikely for unexpected error condition in rt2x00_mac_tx Ivo van Doorn
2011-03-03 18:42 ` [PATCH 06/19] rt2x00: Generate sw sequence numbers only for devices that need it Ivo van Doorn
2011-03-03 18:42 ` [PATCH 07/19] rt2x00: Optimize TX descriptor handling Ivo van Doorn
2011-03-03 18:42 ` [PATCH 08/19] rt2x00: Optimize TX descriptor memory layout Ivo van Doorn
2011-03-03 18:43 ` [PATCH 09/19] rt2x00: Move TX descriptor field "ifs" into plcp substruct Ivo van Doorn
2011-03-03 18:43 ` Ivo van Doorn [this message]
2011-03-03 18:44 ` [PATCH 11/19] rt2x00: Use an enum instead of u16 for the rate_mode TX descriptor field Ivo van Doorn
2011-03-03 18:44 ` [PATCH 12/19] rt2x00: Fix rt2800 key assignment in multi bssid setups Ivo van Doorn
2011-03-03 18:44 ` [PATCH 13/19] rt2x00: Remove now unused crypto.aid field Ivo van Doorn
2011-03-03 18:45 ` [PATCH 14/19] rt2x00: Revise irqmask locking for PCI devices Ivo van Doorn
2011-03-03 18:45 ` [PATCH 15/19] rt2x00: Fix comment in rt2800pci Ivo van Doorn
2011-03-03 18:46 ` [PATCH 16/19] rt2x00: Don't treat ATIM queue as second beacon queue Ivo van Doorn
2011-03-03 18:46 ` [PATCH 17/19] rt2x00: Include ATIM queue support in rt2x00queue_get_tx_queue Ivo van Doorn
2011-03-03 18:46 ` [PATCH 18/19] rt2x00: Optimize getting the beacon queue structure Ivo van Doorn
2011-03-03 18:47 ` [PATCH 19/19] rt2x00: Remove unused rt2x00queue_get_queue function Ivo van Doorn
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=201103031943.50656.IvDoorn@gmail.com \
--to=ivdoorn@gmail.com \
--cc=linux-wireless@vger.kernel.org \
--cc=linville@tuxdriver.com \
--cc=users@rt2x00.serialmonkey.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.