stats_req->buf_len = len;
 }
 
+static void
+ath12k_htt_print_pdev_cca_stats_hist_tlv(const void *tag_buf, u16 tag_len,
+                                        struct debug_htt_stats_req *stats_req)
+{
+       const struct ath12k_htt_pdev_cca_stats_hist_v1_tlv *htt_stats_buf = tag_buf;
+       u8 *buf = stats_req->buf;
+       u32 len = stats_req->buf_len;
+       u32 buf_len = ATH12K_HTT_STATS_BUF_SIZE;
+
+       if (tag_len < sizeof(*htt_stats_buf))
+               return;
+
+       len += scnprintf(buf + len, buf_len - len, "HTT_PDEV_CCA_STATS_HIST_TLV :\n");
+       len += scnprintf(buf + len, buf_len - len, "chan_num = %u\n",
+                        le32_to_cpu(htt_stats_buf->chan_num));
+       len += scnprintf(buf + len, buf_len - len, "num_records = %u\n",
+                        le32_to_cpu(htt_stats_buf->num_records));
+       len += scnprintf(buf + len, buf_len - len, "valid_cca_counters_bitmap = 0x%x\n",
+                        le32_to_cpu(htt_stats_buf->valid_cca_counters_bitmap));
+       len += scnprintf(buf + len, buf_len - len, "collection_interval = %u\n\n",
+                        le32_to_cpu(htt_stats_buf->collection_interval));
+
+       stats_req->buf_len = len;
+}
+
+static void
+ath12k_htt_print_pdev_stats_cca_counters_tlv(const void *tag_buf, u16 tag_len,
+                                            struct debug_htt_stats_req *stats_req)
+{
+       const struct ath12k_htt_pdev_stats_cca_counters_tlv *htt_stats_buf = tag_buf;
+       u8 *buf = stats_req->buf;
+       u32 len = stats_req->buf_len;
+       u32 buf_len = ATH12K_HTT_STATS_BUF_SIZE;
+
+       if (tag_len < sizeof(*htt_stats_buf))
+               return;
+
+       len += scnprintf(buf + len, buf_len - len,
+                        "HTT_PDEV_STATS_CCA_COUNTERS_TLV:(in usec)\n");
+       len += scnprintf(buf + len, buf_len - len, "tx_frame_usec = %u\n",
+                        le32_to_cpu(htt_stats_buf->tx_frame_usec));
+       len += scnprintf(buf + len, buf_len - len, "rx_frame_usec = %u\n",
+                        le32_to_cpu(htt_stats_buf->rx_frame_usec));
+       len += scnprintf(buf + len, buf_len - len, "rx_clear_usec = %u\n",
+                        le32_to_cpu(htt_stats_buf->rx_clear_usec));
+       len += scnprintf(buf + len, buf_len - len, "my_rx_frame_usec = %u\n",
+                        le32_to_cpu(htt_stats_buf->my_rx_frame_usec));
+       len += scnprintf(buf + len, buf_len - len, "usec_cnt = %u\n",
+                        le32_to_cpu(htt_stats_buf->usec_cnt));
+       len += scnprintf(buf + len, buf_len - len, "med_rx_idle_usec = %u\n",
+                        le32_to_cpu(htt_stats_buf->med_rx_idle_usec));
+       len += scnprintf(buf + len, buf_len - len, "med_tx_idle_global_usec = %u\n",
+                        le32_to_cpu(htt_stats_buf->med_tx_idle_global_usec));
+       len += scnprintf(buf + len, buf_len - len, "cca_obss_usec = %u\n\n",
+                        le32_to_cpu(htt_stats_buf->cca_obss_usec));
+
+       stats_req->buf_len = len;
+}
+
 static int ath12k_dbg_htt_ext_stats_parse(struct ath12k_base *ab,
                                          u16 tag, u16 len, const void *tag_buf,
                                          void *user_data)
        case HTT_STATS_TX_PDEV_MPDU_STATS_TAG:
                ath12k_htt_print_tx_pdev_mu_mimo_mpdu_stats_tlv(tag_buf, len, stats_req);
                break;
+       case HTT_STATS_PDEV_CCA_1SEC_HIST_TAG:
+       case HTT_STATS_PDEV_CCA_100MSEC_HIST_TAG:
+       case HTT_STATS_PDEV_CCA_STAT_CUMULATIVE_TAG:
+               ath12k_htt_print_pdev_cca_stats_hist_tlv(tag_buf, len, stats_req);
+               break;
+       case HTT_STATS_PDEV_CCA_COUNTERS_TAG:
+               ath12k_htt_print_pdev_stats_cca_counters_tlv(tag_buf, len, stats_req);
+               break;
        default:
                break;
        }
 
        ATH12K_DBG_HTT_EXT_STATS_SRNG_INFO              = 15,
        ATH12K_DBG_HTT_EXT_STATS_SFM_INFO               = 16,
        ATH12K_DBG_HTT_EXT_STATS_PDEV_TX_MU             = 17,
+       ATH12K_DBG_HTT_EXT_STATS_PDEV_CCA_STATS         = 19,
 
        /* keep this last */
        ATH12K_DBG_HTT_NUM_EXT_STATS,
        HTT_STATS_TX_DE_COMPL_STATS_TAG                 = 65,
        HTT_STATS_WHAL_TX_TAG                           = 66,
        HTT_STATS_TX_PDEV_SIFS_HIST_TAG                 = 67,
+       HTT_STATS_PDEV_CCA_1SEC_HIST_TAG                = 70,
+       HTT_STATS_PDEV_CCA_100MSEC_HIST_TAG             = 71,
+       HTT_STATS_PDEV_CCA_STAT_CUMULATIVE_TAG          = 72,
+       HTT_STATS_PDEV_CCA_COUNTERS_TAG                 = 73,
        HTT_STATS_TX_PDEV_MPDU_STATS_TAG                = 74,
        HTT_STATS_SCHED_TXQ_SCHED_ORDER_SU_TAG          = 86,
        HTT_STATS_SCHED_TXQ_SCHED_INELIGIBILITY_TAG     = 87,
        __le32 tx_sched_mode;
 } __packed;
 
+struct ath12k_htt_pdev_stats_cca_counters_tlv {
+       __le32 tx_frame_usec;
+       __le32 rx_frame_usec;
+       __le32 rx_clear_usec;
+       __le32 my_rx_frame_usec;
+       __le32 usec_cnt;
+       __le32 med_rx_idle_usec;
+       __le32 med_tx_idle_global_usec;
+       __le32 cca_obss_usec;
+} __packed;
+
+struct ath12k_htt_pdev_cca_stats_hist_v1_tlv {
+       __le32 chan_num;
+       __le32 num_records;
+       __le32 valid_cca_counters_bitmap;
+       __le32 collection_interval;
+} __packed;
+
 #endif