diff options
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl4965-base.c')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl4965-base.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl4965-base.c b/drivers/net/wireless/iwlwifi/iwl4965-base.c index 2597c08a2395..ad824c607f36 100644 --- a/drivers/net/wireless/iwlwifi/iwl4965-base.c +++ b/drivers/net/wireless/iwlwifi/iwl4965-base.c | |||
@@ -2772,6 +2772,10 @@ static void iwl4965_build_tx_cmd_basic(struct iwl4965_priv *priv, | |||
2772 | tx_flags |= TX_CMD_FLG_SEQ_CTL_MSK; | 2772 | tx_flags |= TX_CMD_FLG_SEQ_CTL_MSK; |
2773 | } | 2773 | } |
2774 | 2774 | ||
2775 | if (ieee80211_is_back_request(fc)) | ||
2776 | tx_flags |= TX_CMD_FLG_ACK_MSK | TX_CMD_FLG_IMM_BA_RSP_MASK; | ||
2777 | |||
2778 | |||
2775 | cmd->cmd.tx.sta_id = std_id; | 2779 | cmd->cmd.tx.sta_id = std_id; |
2776 | if (ieee80211_get_morefrag(hdr)) | 2780 | if (ieee80211_get_morefrag(hdr)) |
2777 | tx_flags |= TX_CMD_FLG_MORE_FRAG_MSK; | 2781 | tx_flags |= TX_CMD_FLG_MORE_FRAG_MSK; |
@@ -2880,6 +2884,7 @@ static int iwl4965_tx_skb(struct iwl4965_priv *priv, | |||
2880 | struct iwl4965_queue *q = NULL; | 2884 | struct iwl4965_queue *q = NULL; |
2881 | dma_addr_t phys_addr; | 2885 | dma_addr_t phys_addr; |
2882 | dma_addr_t txcmd_phys; | 2886 | dma_addr_t txcmd_phys; |
2887 | dma_addr_t scratch_phys; | ||
2883 | struct iwl4965_cmd *out_cmd = NULL; | 2888 | struct iwl4965_cmd *out_cmd = NULL; |
2884 | u16 len, idx, len_org; | 2889 | u16 len, idx, len_org; |
2885 | u8 id, hdr_len, unicast; | 2890 | u8 id, hdr_len, unicast; |
@@ -3053,8 +3058,18 @@ static int iwl4965_tx_skb(struct iwl4965_priv *priv, | |||
3053 | /* set is_hcca to 0; it probably will never be implemented */ | 3058 | /* set is_hcca to 0; it probably will never be implemented */ |
3054 | iwl4965_hw_build_tx_cmd_rate(priv, out_cmd, ctl, hdr, sta_id, 0); | 3059 | iwl4965_hw_build_tx_cmd_rate(priv, out_cmd, ctl, hdr, sta_id, 0); |
3055 | 3060 | ||
3056 | iwl4965_tx_cmd(priv, out_cmd, sta_id, txcmd_phys, | 3061 | scratch_phys = txcmd_phys + sizeof(struct iwl4965_cmd_header) + |
3057 | hdr, hdr_len, ctl, NULL); | 3062 | offsetof(struct iwl4965_tx_cmd, scratch); |
3063 | out_cmd->cmd.tx.dram_lsb_ptr = cpu_to_le32(scratch_phys); | ||
3064 | out_cmd->cmd.tx.dram_msb_ptr = iwl_get_dma_hi_address(scratch_phys); | ||
3065 | |||
3066 | #ifdef CONFIG_IWL4965_HT_AGG | ||
3067 | #ifdef CONFIG_IWL4965_HT | ||
3068 | /* TODO: move this functionality to rate scaling */ | ||
3069 | iwl4965_tl_get_stats(priv, hdr); | ||
3070 | #endif /* CONFIG_IWL4965_HT_AGG */ | ||
3071 | #endif /*CONFIG_IWL4965_HT */ | ||
3072 | |||
3058 | 3073 | ||
3059 | if (!ieee80211_get_morefrag(hdr)) { | 3074 | if (!ieee80211_get_morefrag(hdr)) { |
3060 | txq->need_update = 1; | 3075 | txq->need_update = 1; |