|
|
@@ -538,6 +538,7 @@ int ath10k_htt_tx(struct ath10k_htt *htt, enum ath10k_hw_txrx_mode txmode,
|
|
|
struct ath10k *ar = htt->ar;
|
|
|
struct device *dev = ar->dev;
|
|
|
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)msdu->data;
|
|
|
+ struct ieee80211_tx_info *info = IEEE80211_SKB_CB(msdu);
|
|
|
struct ath10k_skb_cb *skb_cb = ATH10K_SKB_CB(msdu);
|
|
|
struct ath10k_hif_sg_item sg_items[2];
|
|
|
struct htt_data_tx_desc_frag *frags;
|
|
|
@@ -547,6 +548,7 @@ int ath10k_htt_tx(struct ath10k_htt *htt, enum ath10k_hw_txrx_mode txmode,
|
|
|
int res;
|
|
|
u8 flags0 = 0;
|
|
|
u16 msdu_id, flags1 = 0;
|
|
|
+ u16 freq = 0;
|
|
|
u32 frags_paddr = 0;
|
|
|
struct htt_msdu_ext_desc *ext_desc = NULL;
|
|
|
bool limit_mgmt_desc = false;
|
|
|
@@ -598,6 +600,9 @@ int ath10k_htt_tx(struct ath10k_htt *htt, enum ath10k_hw_txrx_mode txmode,
|
|
|
goto err_free_msdu_id;
|
|
|
}
|
|
|
|
|
|
+ if (unlikely(info->flags & IEEE80211_TX_CTL_TX_OFFCHAN))
|
|
|
+ freq = ar->scan.roc_freq;
|
|
|
+
|
|
|
switch (txmode) {
|
|
|
case ATH10K_HW_TXRX_RAW:
|
|
|
case ATH10K_HW_TXRX_NATIVE_WIFI:
|
|
|
@@ -690,7 +695,7 @@ int ath10k_htt_tx(struct ath10k_htt *htt, enum ath10k_hw_txrx_mode txmode,
|
|
|
skb_cb->htt.txbuf->cmd_tx.offchan_tx.peerid =
|
|
|
__cpu_to_le16(HTT_INVALID_PEERID);
|
|
|
skb_cb->htt.txbuf->cmd_tx.offchan_tx.freq =
|
|
|
- __cpu_to_le16(skb_cb->htt.freq);
|
|
|
+ __cpu_to_le16(freq);
|
|
|
} else {
|
|
|
skb_cb->htt.txbuf->cmd_tx.peerid =
|
|
|
__cpu_to_le32(HTT_INVALID_PEERID);
|
|
|
@@ -700,7 +705,7 @@ int ath10k_htt_tx(struct ath10k_htt *htt, enum ath10k_hw_txrx_mode txmode,
|
|
|
ath10k_dbg(ar, ATH10K_DBG_HTT,
|
|
|
"htt tx flags0 %hhu flags1 %hu len %d id %hu frags_paddr %08x, msdu_paddr %08x vdev %hhu tid %hhu freq %hu\n",
|
|
|
flags0, flags1, msdu->len, msdu_id, frags_paddr,
|
|
|
- (u32)skb_cb->paddr, vdev_id, tid, skb_cb->htt.freq);
|
|
|
+ (u32)skb_cb->paddr, vdev_id, tid, freq);
|
|
|
ath10k_dbg_dump(ar, ATH10K_DBG_HTT_DUMP, NULL, "htt tx msdu: ",
|
|
|
msdu->data, msdu->len);
|
|
|
trace_ath10k_tx_hdr(ar, msdu->data, msdu->len);
|