aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/iwl4965-base.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl4965-base.c')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl4965-base.c19
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;