]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
ath10k: add support for pktlog in QCA99X0
authorVivek Natarajan <nataraja@qti.qualcomm.com>
Fri, 30 Oct 2015 09:27:58 +0000 (14:57 +0530)
committerKalle Valo <kvalo@qca.qualcomm.com>
Wed, 4 Nov 2015 17:36:41 +0000 (19:36 +0200)
This patch adds pktlog support for 10.4 fw versions.

Signed-off-by: Vivek Natarajan <nataraja@qti.qualcomm.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
drivers/net/wireless/ath/ath10k/htt.h
drivers/net/wireless/ath/ath10k/htt_rx.c
drivers/net/wireless/ath/ath10k/hw.h
drivers/net/wireless/ath/ath10k/pci.c

index 2bad50e520b5bd2338ab479b13127aefe2dc0cf5..74ccfb291fcc61adf19d22e6826bef450840d508 100644 (file)
@@ -1598,5 +1598,7 @@ int ath10k_htt_tx_alloc_msdu_id(struct ath10k_htt *htt, struct sk_buff *skb);
 void ath10k_htt_tx_free_msdu_id(struct ath10k_htt *htt, u16 msdu_id);
 int ath10k_htt_mgmt_tx(struct ath10k_htt *htt, struct sk_buff *);
 int ath10k_htt_tx(struct ath10k_htt *htt, struct sk_buff *);
+void ath10k_htt_rx_pktlog_completion_handler(struct ath10k *ar,
+                                            struct sk_buff *skb);
 
 #endif
index 6060dda4e9101ac73c92cafb597c1d71592bb00e..d1dc1ba2435eb20f49d788a53f2a8b18da8f0f98 100644 (file)
@@ -2127,6 +2127,18 @@ void ath10k_htt_t2h_msg_handler(struct ath10k *ar, struct sk_buff *skb)
 }
 EXPORT_SYMBOL(ath10k_htt_t2h_msg_handler);
 
+void ath10k_htt_rx_pktlog_completion_handler(struct ath10k *ar,
+                                            struct sk_buff *skb)
+{
+       struct ath10k_pktlog_10_4_hdr *hdr =
+               (struct ath10k_pktlog_10_4_hdr *)skb->data;
+
+       trace_ath10k_htt_pktlog(ar, hdr->payload,
+                               sizeof(*hdr) + __le16_to_cpu(hdr->size));
+       dev_kfree_skb_any(skb);
+}
+EXPORT_SYMBOL(ath10k_htt_rx_pktlog_completion_handler);
+
 static void ath10k_htt_txrx_compl_task(unsigned long ptr)
 {
        struct ath10k_htt *htt = (struct ath10k_htt *)ptr;
index 39966a05c1cc20f5b69e7111d5ddb711a070c5e9..557d8d2d06aaeb8f41559d962ccfa09b718e2636 100644 (file)
@@ -273,6 +273,16 @@ struct ath10k_pktlog_hdr {
        u8 payload[0];
 } __packed;
 
+struct ath10k_pktlog_10_4_hdr {
+       __le16 flags;
+       __le16 missed_cnt;
+       __le16 log_type;
+       __le16 size;
+       __le32 timestamp;
+       __le32 type_specific_data;
+       u8 payload[0];
+} __packed;
+
 enum ath10k_hw_rate_ofdm {
        ATH10K_HW_RATE_OFDM_48M = 0,
        ATH10K_HW_RATE_OFDM_24M,
index 3fca200b986ca75baa0de2568d36460be709d834..5c91a673cf80f23531debe6bc766a444f5437477 100644 (file)
@@ -111,6 +111,7 @@ static void ath10k_pci_htc_tx_cb(struct ath10k_ce_pipe *ce_state);
 static void ath10k_pci_htc_rx_cb(struct ath10k_ce_pipe *ce_state);
 static void ath10k_pci_htt_tx_cb(struct ath10k_ce_pipe *ce_state);
 static void ath10k_pci_htt_rx_cb(struct ath10k_ce_pipe *ce_state);
+static void ath10k_pci_pktlog_rx_cb(struct ath10k_ce_pipe *ce_state);
 
 static const struct ce_attr host_ce_config_wlan[] = {
        /* CE0: host->target HTC control and raw streams */
@@ -189,6 +190,7 @@ static const struct ce_attr host_ce_config_wlan[] = {
                .src_nentries = 0,
                .src_sz_max = 2048,
                .dest_nentries = 128,
+               .recv_cb = ath10k_pci_pktlog_rx_cb,
        },
 
        /* CE9 target autonomous qcache memcpy */
@@ -1208,6 +1210,15 @@ static void ath10k_pci_htc_rx_cb(struct ath10k_ce_pipe *ce_state)
        ath10k_pci_process_rx_cb(ce_state, ath10k_htc_rx_completion_handler);
 }
 
+/* Called by lower (CE) layer when data is received from the Target.
+ * Only 10.4 firmware uses separate CE to transfer pktlog data.
+ */
+static void ath10k_pci_pktlog_rx_cb(struct ath10k_ce_pipe *ce_state)
+{
+       ath10k_pci_process_rx_cb(ce_state,
+                                ath10k_htt_rx_pktlog_completion_handler);
+}
+
 /* Called by lower (CE) layer when a send to HTT Target completes. */
 static void ath10k_pci_htt_tx_cb(struct ath10k_ce_pipe *ce_state)
 {