From: Luca Coelho <luca@coelho.fi>
To: linux-wireless@vger.kernel.org
Cc: kvalo@codeaurora.org, luciano.coelho@intel.com,
Sara Sharon <sara.sharon@intel.com>
Subject: [PATCH 12/25] iwlwifi: mvm: separate rate calculation to a new function
Date: Tue, 24 Jan 2017 00:03:37 +0200 [thread overview]
Message-ID: <20170123220350.25305-13-luca@coelho.fi> (raw)
In-Reply-To: <20170123220350.25305-1-luca@coelho.fi>
From: Sara Sharon <sara.sharon@intel.com>
In preparation for the new TX cmd - move the rate calculation
to a diffrent function, and make it independent of the TX
command.
Signed-off-by: Sara Sharon <sara.sharon@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
---
drivers/net/wireless/intel/iwlwifi/mvm/tx.c | 84 +++++++++++++++--------------
1 file changed, 45 insertions(+), 39 deletions(-)
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
index 7f2fe3ffe547..af828eda3330 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
@@ -299,6 +299,50 @@ void iwl_mvm_set_tx_cmd(struct iwl_mvm *mvm, struct sk_buff *skb,
cpu_to_le16(iwl_mvm_tx_csum(mvm, skb, hdr, info));
}
+static u32 iwl_mvm_get_tx_rate(struct iwl_mvm *mvm,
+ struct ieee80211_tx_info *info,
+ struct ieee80211_sta *sta)
+{
+ int rate_idx;
+ u8 rate_plcp;
+ u32 rate_flags;
+
+ /* HT rate doesn't make sense for a non data frame */
+ WARN_ONCE(info->control.rates[0].flags & IEEE80211_TX_RC_MCS,
+ "Got an HT rate (flags:0x%x/mcs:%d) for a non data frame\n",
+ info->control.rates[0].flags,
+ info->control.rates[0].idx);
+
+ rate_idx = info->control.rates[0].idx;
+ /* if the rate isn't a well known legacy rate, take the lowest one */
+ if (rate_idx < 0 || rate_idx >= IWL_RATE_COUNT_LEGACY)
+ rate_idx = rate_lowest_index(
+ &mvm->nvm_data->bands[info->band], sta);
+
+ /* For 5 GHZ band, remap mac80211 rate indices into driver indices */
+ if (info->band == NL80211_BAND_5GHZ)
+ rate_idx += IWL_FIRST_OFDM_RATE;
+
+ /* For 2.4 GHZ band, check that there is no need to remap */
+ BUILD_BUG_ON(IWL_FIRST_CCK_RATE != 0);
+
+ /* Get PLCP rate for tx_cmd->rate_n_flags */
+ rate_plcp = iwl_mvm_mac80211_idx_to_hwrate(rate_idx);
+
+ if (info->band == NL80211_BAND_2GHZ &&
+ !iwl_mvm_bt_coex_is_shared_ant_avail(mvm))
+ rate_flags = mvm->cfg->non_shared_ant << RATE_MCS_ANT_POS;
+ else
+ rate_flags =
+ BIT(mvm->mgmt_last_antenna_idx) << RATE_MCS_ANT_POS;
+
+ /* Set CCK flag as needed */
+ if ((rate_idx >= IWL_FIRST_CCK_RATE) && (rate_idx <= IWL_LAST_CCK_RATE))
+ rate_flags |= RATE_MCS_CCK_MSK;
+
+ return (u32)rate_plcp | rate_flags;
+}
+
/*
* Sets the fields in the Tx cmd that are rate related
*/
@@ -306,10 +350,6 @@ void iwl_mvm_set_tx_cmd_rate(struct iwl_mvm *mvm, struct iwl_tx_cmd *tx_cmd,
struct ieee80211_tx_info *info,
struct ieee80211_sta *sta, __le16 fc)
{
- u32 rate_flags;
- int rate_idx;
- u8 rate_plcp;
-
/* Set retry limit on RTS packets */
tx_cmd->rts_retry_limit = IWL_RTS_DFAULT_RETRY_LIMIT;
@@ -338,46 +378,12 @@ void iwl_mvm_set_tx_cmd_rate(struct iwl_mvm *mvm, struct iwl_tx_cmd *tx_cmd,
cpu_to_le32(TX_CMD_FLG_ACK | TX_CMD_FLG_BAR);
}
- /* HT rate doesn't make sense for a non data frame */
- WARN_ONCE(info->control.rates[0].flags & IEEE80211_TX_RC_MCS,
- "Got an HT rate (flags:0x%x/mcs:%d) for a non data frame (fc:0x%x)\n",
- info->control.rates[0].flags,
- info->control.rates[0].idx,
- le16_to_cpu(fc));
-
- rate_idx = info->control.rates[0].idx;
- /* if the rate isn't a well known legacy rate, take the lowest one */
- if (rate_idx < 0 || rate_idx >= IWL_RATE_COUNT_LEGACY)
- rate_idx = rate_lowest_index(
- &mvm->nvm_data->bands[info->band], sta);
-
- /* For 5 GHZ band, remap mac80211 rate indices into driver indices */
- if (info->band == NL80211_BAND_5GHZ)
- rate_idx += IWL_FIRST_OFDM_RATE;
-
- /* For 2.4 GHZ band, check that there is no need to remap */
- BUILD_BUG_ON(IWL_FIRST_CCK_RATE != 0);
-
- /* Get PLCP rate for tx_cmd->rate_n_flags */
- rate_plcp = iwl_mvm_mac80211_idx_to_hwrate(rate_idx);
-
mvm->mgmt_last_antenna_idx =
iwl_mvm_next_antenna(mvm, iwl_mvm_get_valid_tx_ant(mvm),
mvm->mgmt_last_antenna_idx);
- if (info->band == NL80211_BAND_2GHZ &&
- !iwl_mvm_bt_coex_is_shared_ant_avail(mvm))
- rate_flags = mvm->cfg->non_shared_ant << RATE_MCS_ANT_POS;
- else
- rate_flags =
- BIT(mvm->mgmt_last_antenna_idx) << RATE_MCS_ANT_POS;
-
- /* Set CCK flag as needed */
- if ((rate_idx >= IWL_FIRST_CCK_RATE) && (rate_idx <= IWL_LAST_CCK_RATE))
- rate_flags |= RATE_MCS_CCK_MSK;
-
/* Set the rate in the TX cmd */
- tx_cmd->rate_n_flags = cpu_to_le32((u32)rate_plcp | rate_flags);
+ tx_cmd->rate_n_flags = cpu_to_le32(iwl_mvm_get_tx_rate(mvm, info, sta));
}
static inline void iwl_mvm_set_tx_cmd_pn(struct ieee80211_tx_info *info,
--
2.11.0
next prev parent reply other threads:[~2017-01-23 22:18 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-01-23 22:03 [PATCH 00/25] iwlwifi: updates intended for v4.11 2017-01-23 Luca Coelho
2017-01-23 22:03 ` [PATCH 01/25] iwlwifi: mvm: expose device timestamp in radiotap Luca Coelho
2017-01-23 22:03 ` [PATCH 02/25] iwlwifi: mvm: don't restart HW if suspend fails with unified image Luca Coelho
2017-01-23 22:03 ` [PATCH 03/25] iwlwifi: mvm: accept arbitrary memory dump TLVs Luca Coelho
2017-01-23 22:03 ` [PATCH 04/25] iwlwifi: mvm: make iwl_dump_prph() void Luca Coelho
2017-01-23 22:03 ` [PATCH 05/25] iwlwifi: allow memory debug TLV to specify the memory type Luca Coelho
2017-01-26 7:43 ` [PATCH v2] " Luca Coelho
2017-01-23 22:03 ` [PATCH 06/25] iwlwifi: mvm: properly check for transport data in dump Luca Coelho
2017-01-23 22:03 ` [PATCH 07/25] iwlwifi: mvm: bump max API to 28 Luca Coelho
2017-01-23 22:03 ` [PATCH 08/25] iwlwifi: mvm: simplify paging allocation code Luca Coelho
2017-01-23 22:03 ` [PATCH 09/25] iwlwifi: mvm: replace the number of blocks calculation Luca Coelho
2017-01-23 22:03 ` [PATCH 10/25] iwlwifi: enlarge number of ucode sections Luca Coelho
2017-01-23 22:03 ` [PATCH 11/25] iwlwifi: mvm: change iwl_mvm_tx_csum to return value Luca Coelho
2017-01-26 7:24 ` [PATCH v2] " Luca Coelho
2017-01-23 22:03 ` Luca Coelho [this message]
2017-01-23 22:03 ` [PATCH 13/25] iwlwifi: mvm: support version 2 of stored beacon notification Luca Coelho
2017-01-23 22:03 ` [PATCH 14/25] iwlwifi: fix MODULE_FIRMWARE for 6030 Luca Coelho
2017-01-23 22:03 ` [PATCH 15/25] iwlwifi: mvm: remove unused variable in iwl_mvm_handle_statistics() Luca Coelho
2017-01-23 22:03 ` [PATCH 16/25] iwlwifi: mvm: rs: Remove unused 'mvmvif'/'mvmsta' variables Luca Coelho
2017-01-23 22:03 ` [PATCH 17/25] iwlwifi: mvm: rs: Remove unused 'mcs' variable Luca Coelho
2017-01-23 22:03 ` [PATCH 18/25] iwlwifi: pcie: trans: Remove unused 'shift_param' Luca Coelho
2017-01-23 22:03 ` [PATCH 19/25] iwlwifi: dvm: make rs_tl_get_load() return void Luca Coelho
2017-01-23 22:03 ` [PATCH 20/25] iwlwifi: pcie: cleanup rfkill checks Luca Coelho
2017-01-23 22:03 ` [PATCH 21/25] iwlwifi: mvm: remove unused sta_id variable in iwl_mvm_change_queue_owner() Luca Coelho
2017-01-23 22:03 ` [PATCH 22/25] iwlwifi: dvm: remove unused variable compiler warning in debugfs.c Luca Coelho
2017-01-23 22:03 ` [PATCH 23/25] iwlwifi: mvm: mark ret as maybe_unused in iwl_dbgfs_fw_restart_write() Luca Coelho
2017-01-23 22:03 ` [PATCH 24/25] iwlwifi: mvm: use mvm_disable_queue instead of sharing logic Luca Coelho
2017-01-26 7:34 ` [PATCH v2] " Luca Coelho
2017-01-23 22:03 ` [PATCH 25/25] iwlwifi: mvm: cleanup redundant assignment Luca Coelho
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=20170123220350.25305-13-luca@coelho.fi \
--to=luca@coelho.fi \
--cc=kvalo@codeaurora.org \
--cc=linux-wireless@vger.kernel.org \
--cc=luciano.coelho@intel.com \
--cc=sara.sharon@intel.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