.dp_window_idx = 0,
                .ce_window_idx = 0,
                .fixed_fw_mem = false,
+               .support_off_channel_tx = false,
        },
        {
                .hw_rev = ATH11K_HW_IPQ6018_HW10,
                .dp_window_idx = 0,
                .ce_window_idx = 0,
                .fixed_fw_mem = false,
+               .support_off_channel_tx = false,
        },
        {
                .name = "qca6390 hw2.0",
                .dp_window_idx = 0,
                .ce_window_idx = 0,
                .fixed_fw_mem = false,
+               .support_off_channel_tx = true,
        },
        {
                .name = "qcn9074 hw1.0",
                .dp_window_idx = 3,
                .ce_window_idx = 2,
                .fixed_fw_mem = false,
+               .support_off_channel_tx = false,
        },
        {
                .name = "wcn6855 hw2.0",
                .dp_window_idx = 0,
                .ce_window_idx = 0,
                .fixed_fw_mem = false,
+               .support_off_channel_tx = true,
        },
        {
                .name = "wcn6855 hw2.1",
                .dp_window_idx = 0,
                .ce_window_idx = 0,
                .fixed_fw_mem = false,
+               .support_off_channel_tx = true,
        },
        {
                .name = "wcn6750 hw1.0",
                .dp_window_idx = 1,
                .ce_window_idx = 2,
                .fixed_fw_mem = true,
+               .support_off_channel_tx = false,
        },
 };
 
 
        return skb;
 }
 
+static u32 ath11k_wmi_mgmt_get_freq(struct ath11k *ar,
+                                   struct ieee80211_tx_info *info)
+{
+       struct ath11k_base *ab = ar->ab;
+       u32 freq = 0;
+
+       if (ab->hw_params.support_off_channel_tx &&
+           ar->scan.is_roc &&
+           (info->flags & IEEE80211_TX_CTL_TX_OFFCHAN))
+               freq = ar->scan.roc_freq;
+
+       return freq;
+}
+
 int ath11k_wmi_mgmt_send(struct ath11k *ar, u32 vdev_id, u32 buf_id,
                         struct sk_buff *frame)
 {
        struct ath11k_pdev_wmi *wmi = ar->wmi;
+       struct ieee80211_tx_info *info = IEEE80211_SKB_CB(frame);
        struct wmi_mgmt_send_cmd *cmd;
        struct wmi_tlv *frame_tlv;
        struct sk_buff *skb;
                          FIELD_PREP(WMI_TLV_LEN, sizeof(*cmd) - TLV_HDR_SIZE);
        cmd->vdev_id = vdev_id;
        cmd->desc_id = buf_id;
-       cmd->chanfreq = 0;
+       cmd->chanfreq = ath11k_wmi_mgmt_get_freq(ar, info);
        cmd->paddr_lo = lower_32_bits(ATH11K_SKB_CB(frame)->paddr);
        cmd->paddr_hi = upper_32_bits(ATH11K_SKB_CB(frame)->paddr);
        cmd->frame_len = frame->len;