aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/iwl-agn-tx.c
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2010-08-23 10:56:56 -0400
committerJohn W. Linville <linville@tuxdriver.com>2010-08-25 14:33:21 -0400
commitd44ae69e80358ff88d39a14d92c27dba4e90c0c5 (patch)
tree739c9b9a577c55428dfb76410f3ba436f4bebfc3 /drivers/net/wireless/iwlwifi/iwl-agn-tx.c
parent670245ed4515cbc5e39e39d44965cb7add2c8aa9 (diff)
iwlagn: set BT IGNORE for some frames
The BT ignore bit should be set when transmitting auth, assoc response and eap frames. Also, scanning should set the BT ignore bit for the probe request transmission; Note that we only use the non-shared antenna. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-agn-tx.c')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn-tx.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-tx.c b/drivers/net/wireless/iwlwifi/iwl-agn-tx.c
index 3fc982e8792..8d2ffffe01b 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn-tx.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-tx.c
@@ -342,10 +342,11 @@ static inline int get_queue_from_ac(u16 ac)
342 * handle build REPLY_TX command notification. 342 * handle build REPLY_TX command notification.
343 */ 343 */
344static void iwlagn_tx_cmd_build_basic(struct iwl_priv *priv, 344static void iwlagn_tx_cmd_build_basic(struct iwl_priv *priv,
345 struct iwl_tx_cmd *tx_cmd, 345 struct sk_buff *skb,
346 struct ieee80211_tx_info *info, 346 struct iwl_tx_cmd *tx_cmd,
347 struct ieee80211_hdr *hdr, 347 struct ieee80211_tx_info *info,
348 u8 std_id) 348 struct ieee80211_hdr *hdr,
349 u8 std_id)
349{ 350{
350 __le16 fc = hdr->frame_control; 351 __le16 fc = hdr->frame_control;
351 __le32 tx_flags = tx_cmd->tx_flags; 352 __le32 tx_flags = tx_cmd->tx_flags;
@@ -365,6 +366,12 @@ static void iwlagn_tx_cmd_build_basic(struct iwl_priv *priv,
365 366
366 if (ieee80211_is_back_req(fc)) 367 if (ieee80211_is_back_req(fc))
367 tx_flags |= TX_CMD_FLG_ACK_MSK | TX_CMD_FLG_IMM_BA_RSP_MASK; 368 tx_flags |= TX_CMD_FLG_ACK_MSK | TX_CMD_FLG_IMM_BA_RSP_MASK;
369 else if (info->band == IEEE80211_BAND_2GHZ &&
370 priv->cfg->advanced_bt_coexist &&
371 (ieee80211_is_auth(fc) || ieee80211_is_assoc_req(fc) ||
372 ieee80211_is_reassoc_req(fc) ||
373 skb->protocol == cpu_to_be16(ETH_P_PAE)))
374 tx_flags |= TX_CMD_FLG_IGNORE_BT;
368 375
369 376
370 tx_cmd->sta_id = std_id; 377 tx_cmd->sta_id = std_id;
@@ -655,7 +662,7 @@ int iwlagn_tx_skb(struct iwl_priv *priv, struct sk_buff *skb)
655 iwlagn_tx_cmd_build_hwcrypto(priv, info, tx_cmd, skb, sta_id); 662 iwlagn_tx_cmd_build_hwcrypto(priv, info, tx_cmd, skb, sta_id);
656 663
657 /* TODO need this for burst mode later on */ 664 /* TODO need this for burst mode later on */
658 iwlagn_tx_cmd_build_basic(priv, tx_cmd, info, hdr, sta_id); 665 iwlagn_tx_cmd_build_basic(priv, skb, tx_cmd, info, hdr, sta_id);
659 iwl_dbg_log_tx_data_frame(priv, len, hdr); 666 iwl_dbg_log_tx_data_frame(priv, len, hdr);
660 667
661 iwlagn_tx_cmd_build_rate(priv, tx_cmd, info, fc); 668 iwlagn_tx_cmd_build_rate(priv, tx_cmd, info, fc);