Ver código fonte

qcacmn: Move pktlog API's to specific files

Move pktlog hardware dependent API's from pktlog_internal.c
to pktlog_wifi3.c as they are hardware dependent.

Change-Id: I421b3116a35e735a51c82839005bbc2d4cb138d7
CRs-Fixed: 2585613
Venkata Sharath Chandra Manchala 5 anos atrás
pai
commit
1140065e4c

+ 70 - 0
utils/pktlog/include/pktlog_wifi3.h

@@ -0,0 +1,70 @@
+/**
+ * Copyright (c) 2013-2020, The Linux Foundation. All rights reserved.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "pktlog_ac_i.h"
+#include "wlan_logging_sock_svc.h"
+
+#ifndef REMOVE_PKT_LOG
+/**
+ * process_offload_pktlog_wifi3() - Process full pktlog events
+ * pdev: abstract pdev handle
+ * data: pktlog buffer
+ *
+ * Return: zero on success, non-zero on failure
+ */
+A_STATUS
+process_offload_pktlog_wifi3(struct cdp_pdev *pdev, void *data);
+
+/**
+ * process_rx_desc_remote_wifi3() - Process pktlog buffers received
+ *                                  from monitor status ring
+ * @pdev: pdev handle
+ * @data: pktlog buffer pointer
+ *
+ * Return: 0 - success/non-zero - failure
+ */
+int process_rx_desc_remote_wifi3(void *pdev, void *data);
+
+/**
+ * process_pktlog_lite_wifi3() - Process pktlog buffers received
+ *                               from monitor status ring
+ * @pdev: pdev handle
+ * @data: pktlog buffer pointer
+ *
+ * Return: 0 - success/non-zero - failure
+ */
+int process_pktlog_lite_wifi3(void *context, void *log_data,
+			      uint16_t log_type);
+#else
+static inline A_STATUS
+process_offload_pktlog_wifi3(struct cdp_pdev *pdev, void *data)
+{
+	return 0;
+}
+
+static inline
+int process_rx_desc_remote_wifi3(void *pdev, void *data)
+{
+	return 0;
+}
+
+static inline int
+process_pktlog_lite_wifi3(void *context, void *log_data,
+			  uint16_t log_type)
+{
+	return 0;
+}
+#endif /* REMOVE_PKT_LOG */

+ 7 - 7
utils/pktlog/pktlog_ac.c

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2019 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2020 The Linux Foundation. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
@@ -286,7 +286,7 @@ void pktlog_callback(void *pdev, enum WDI_EVENT event, void *log_data,
 	switch (event) {
 	case WDI_EVENT_OFFLOAD_ALL:
 	{
-		if (process_offload_pktlog(pdev, log_data)) {
+		if (process_offload_pktlog_wifi3(pdev, log_data)) {
 			qdf_print("Unable to process offload info");
 			return;
 		}
@@ -370,7 +370,7 @@ lit_pktlog_callback(void *context, enum WDI_EVENT event, void *log_data,
 	switch (event) {
 	case WDI_EVENT_RX_DESC:
 	{
-		if (process_rx_desc_remote(context, log_data)) {
+		if (process_rx_desc_remote_wifi3(context, log_data)) {
 			qdf_print("Unable to process RX info");
 			return;
 		}
@@ -378,8 +378,8 @@ lit_pktlog_callback(void *context, enum WDI_EVENT event, void *log_data,
 	}
 	case WDI_EVENT_LITE_T2H:
 	{
-		if (process_pktlog_lite(context, log_data,
-					PKTLOG_TYPE_LITE_T2H)) {
+		if (process_pktlog_lite_wifi3(context, log_data,
+					      PKTLOG_TYPE_LITE_T2H)) {
 			qdf_print("Unable to process lite_t2h");
 			return;
 		}
@@ -387,8 +387,8 @@ lit_pktlog_callback(void *context, enum WDI_EVENT event, void *log_data,
 	}
 	case WDI_EVENT_LITE_RX:
 	{
-		if (process_pktlog_lite(context, log_data,
-					PKTLOG_TYPE_LITE_RX)) {
+		if (process_pktlog_lite_wifi3(context, log_data,
+					      PKTLOG_TYPE_LITE_RX)) {
 			qdf_print("Unable to process lite_rx");
 			return;
 		}

+ 1 - 165
utils/pktlog/pktlog_internal.c

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013-2019 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2020 The Linux Foundation. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
@@ -695,83 +695,6 @@ A_STATUS process_tx_info(struct cdp_pdev *txrx_pdev, void *data)
 }
 #endif
 
-/**
- * process_offload_pktlog() - Process full pktlog events
- * pdev: abstract pdev handle
- * data: pktlog buffer
- *
- * Return: zero on success, non-zero on failure
- */
-A_STATUS
-process_offload_pktlog(struct cdp_pdev *pdev, void *data)
-{
-	struct pktlog_dev_t *pl_dev = get_pktlog_handle();
-	struct ath_pktlog_info *pl_info;
-	struct ath_pktlog_hdr pl_hdr;
-	uint32_t *pl_tgt_hdr;
-	void *txdesc_hdr_ctl = NULL;
-	size_t log_size = 0;
-	size_t tmp_log_size = 0;
-
-	if (!pl_dev) {
-		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
-			  "Invalid context in %s\n", __func__);
-		return A_ERROR;
-	}
-
-	if (!data) {
-		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
-			  "Invalid data in %s\n", __func__);
-		return A_ERROR;
-	}
-
-	pl_tgt_hdr = (uint32_t *)data;
-
-	pl_hdr.flags = (*(pl_tgt_hdr + ATH_PKTLOG_HDR_FLAGS_OFFSET) &
-			ATH_PKTLOG_HDR_FLAGS_MASK) >>
-				ATH_PKTLOG_HDR_FLAGS_SHIFT;
-	pl_hdr.missed_cnt =  (*(pl_tgt_hdr + ATH_PKTLOG_HDR_MISSED_CNT_OFFSET) &
-			ATH_PKTLOG_HDR_MISSED_CNT_MASK) >>
-				ATH_PKTLOG_HDR_MISSED_CNT_SHIFT;
-	pl_hdr.log_type =  (*(pl_tgt_hdr + ATH_PKTLOG_HDR_LOG_TYPE_OFFSET) &
-			ATH_PKTLOG_HDR_LOG_TYPE_MASK) >>
-				ATH_PKTLOG_HDR_LOG_TYPE_SHIFT;
-	pl_hdr.size =  (*(pl_tgt_hdr + ATH_PKTLOG_HDR_SIZE_OFFSET) &
-			ATH_PKTLOG_HDR_SIZE_MASK) >> ATH_PKTLOG_HDR_SIZE_SHIFT;
-	pl_hdr.timestamp = *(pl_tgt_hdr + ATH_PKTLOG_HDR_TIMESTAMP_OFFSET);
-
-	pktlog_hdr_set_specific_data(&pl_hdr,
-				     *(pl_tgt_hdr +
-				     ATH_PKTLOG_HDR_TYPE_SPECIFIC_DATA_OFFSET));
-
-	if (pl_hdr.size > MAX_PKTLOG_RECV_BUF_SIZE) {
-		pl_dev->invalid_packets++;
-		return A_ERROR;
-	}
-
-	/*
-	 *  Must include to process different types
-	 *  TX_CTL, TX_STATUS, TX_MSDU_ID, TX_FRM_HDR
-	 */
-	pl_info = pl_dev->pl_info;
-	tmp_log_size = sizeof(frm_hdr) + pl_hdr.size;
-	log_size = pl_hdr.size;
-	txdesc_hdr_ctl =
-		(void *)pktlog_getbuf(pl_dev, pl_info, log_size, &pl_hdr);
-	if (!txdesc_hdr_ctl) {
-		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
-			  "Failed to allocate pktlog descriptor");
-		return A_NO_MEMORY;
-	}
-	qdf_assert(txdesc_hdr_ctl);
-	qdf_assert(pl_hdr->size < PKTLOG_MAX_TX_WORDS * sizeof(u_int32_t));
-	qdf_mem_copy(txdesc_hdr_ctl,
-		     ((void *)data + sizeof(struct ath_pktlog_hdr)),
-		     pl_hdr.size);
-	cds_pkt_stats_to_logger_thread(&pl_hdr, NULL, txdesc_hdr_ctl);
-
-	return A_OK;
-}
 
 /* TODO: hardware dependent function */
 A_STATUS process_rx_info_remote(void *pdev, void *data)
@@ -1476,91 +1399,4 @@ A_STATUS process_rate_update(void *pdev, void *data)
 	return A_OK;
 }
 #endif
-
-#if  defined(QCA_WIFI_QCA6290) || defined(QCA_WIFI_QCA6390) || \
-defined(QCA_WIFI_QCA6490)
-int process_rx_desc_remote(void *pdev, void *data)
-{
-	struct pktlog_dev_t *pl_dev = get_pktlog_handle();
-	struct ath_pktlog_hdr pl_hdr;
-	struct ath_pktlog_rx_info rxstat_log;
-	size_t log_size;
-	struct ath_pktlog_info *pl_info;
-	qdf_nbuf_t log_nbuf = (qdf_nbuf_t)data;
-
-	if (!pl_dev) {
-		qdf_err("Pktlog handle is NULL");
-		return -EINVAL;
-	}
-
-	pl_info = pl_dev->pl_info;
-	qdf_mem_zero(&pl_hdr, sizeof(pl_hdr));
-	pl_hdr.flags = (1 << PKTLOG_FLG_FRM_TYPE_REMOTE_S);
-	pl_hdr.missed_cnt = 0;
-	pl_hdr.log_type = PKTLOG_TYPE_RX_STATBUF;
-	pl_hdr.size = qdf_nbuf_len(log_nbuf);
-	pl_hdr.timestamp = 0;
-	log_size = pl_hdr.size;
-	rxstat_log.rx_desc = (void *)pktlog_getbuf(pl_dev, pl_info,
-						  log_size, &pl_hdr);
-
-	if (!rxstat_log.rx_desc) {
-		QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_DEBUG,
-				"%s: Rx descriptor is NULL", __func__);
-		return -EINVAL;
-	}
-
-	qdf_mem_copy(rxstat_log.rx_desc, qdf_nbuf_data(log_nbuf), pl_hdr.size);
-	cds_pkt_stats_to_logger_thread(&pl_hdr, NULL,
-						rxstat_log.rx_desc);
-	return 0;
-}
-
-int
-process_pktlog_lite(void *context, void *log_data, uint16_t log_type)
-{
-	struct pktlog_dev_t *pl_dev = get_pktlog_handle();
-	struct ath_pktlog_info *pl_info;
-	struct ath_pktlog_hdr pl_hdr;
-	struct ath_pktlog_rx_info rxstat_log;
-	size_t log_size;
-	qdf_nbuf_t log_nbuf = (qdf_nbuf_t)log_data;
-
-	if (!pl_dev) {
-		qdf_err("Pktlog handle is NULL");
-		return -EINVAL;
-	}
-
-	pl_info = pl_dev->pl_info;
-	qdf_mem_zero(&pl_hdr, sizeof(pl_hdr));
-	pl_hdr.flags = (1 << PKTLOG_FLG_FRM_TYPE_REMOTE_S);
-	pl_hdr.missed_cnt = 0;
-	pl_hdr.log_type = log_type;
-	pl_hdr.size = qdf_nbuf_len(log_nbuf);
-	pl_hdr.timestamp = 0;
-	log_size = pl_hdr.size;
-	rxstat_log.rx_desc = (void *)pktlog_getbuf(pl_dev, pl_info,
-						   log_size, &pl_hdr);
-	if (!rxstat_log.rx_desc) {
-		QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_DEBUG,
-			"%s: Rx descriptor is NULL", __func__);
-		return -EINVAL;
-	}
-
-	qdf_mem_copy(rxstat_log.rx_desc, qdf_nbuf_data(log_nbuf), pl_hdr.size);
-
-	cds_pkt_stats_to_logger_thread(&pl_hdr, NULL, rxstat_log.rx_desc);
-	return 0;
-}
-#else
-int process_rx_desc_remote(void *pdev, void *data)
-{
-	return 0;
-}
-int
-process_pktlog_lite(void *context, void *log_data, uint16_t log_type)
-{
-	return 0;
-}
-#endif
 #endif /*REMOVE_PKT_LOG */

+ 166 - 0
utils/pktlog/pktlog_wifi3.c

@@ -0,0 +1,166 @@
+/**
+ * Copyright (c) 2013-2020, The Linux Foundation. All rights reserved.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* WIFI3 - Refers to platforms - 6290/6390/6490 */
+#include "pktlog_wifi3.h"
+
+#ifndef REMOVE_PKT_LOG
+A_STATUS
+process_offload_pktlog_wifi3(struct cdp_pdev *pdev, void *data)
+{
+	struct pktlog_dev_t *pl_dev = get_pktlog_handle();
+	struct ath_pktlog_info *pl_info;
+	struct ath_pktlog_hdr pl_hdr;
+	uint32_t *pl_tgt_hdr;
+	void *txdesc_hdr_ctl = NULL;
+	size_t log_size = 0;
+	size_t tmp_log_size = 0;
+
+	if (!pl_dev) {
+		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
+			  "Invalid context in %s\n", __func__);
+		return A_ERROR;
+	}
+
+	if (!data) {
+		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
+			  "Invalid data in %s\n", __func__);
+		return A_ERROR;
+	}
+
+	pl_tgt_hdr = (uint32_t *)data;
+
+	pl_hdr.flags = (*(pl_tgt_hdr + ATH_PKTLOG_HDR_FLAGS_OFFSET) &
+			ATH_PKTLOG_HDR_FLAGS_MASK) >>
+				ATH_PKTLOG_HDR_FLAGS_SHIFT;
+	pl_hdr.missed_cnt =  (*(pl_tgt_hdr + ATH_PKTLOG_HDR_MISSED_CNT_OFFSET) &
+			ATH_PKTLOG_HDR_MISSED_CNT_MASK) >>
+				ATH_PKTLOG_HDR_MISSED_CNT_SHIFT;
+	pl_hdr.log_type =  (*(pl_tgt_hdr + ATH_PKTLOG_HDR_LOG_TYPE_OFFSET) &
+			ATH_PKTLOG_HDR_LOG_TYPE_MASK) >>
+				ATH_PKTLOG_HDR_LOG_TYPE_SHIFT;
+	pl_hdr.size =  (*(pl_tgt_hdr + ATH_PKTLOG_HDR_SIZE_OFFSET) &
+			ATH_PKTLOG_HDR_SIZE_MASK) >> ATH_PKTLOG_HDR_SIZE_SHIFT;
+	pl_hdr.timestamp = *(pl_tgt_hdr + ATH_PKTLOG_HDR_TIMESTAMP_OFFSET);
+
+	pktlog_hdr_set_specific_data(&pl_hdr,
+				     *(pl_tgt_hdr +
+				     ATH_PKTLOG_HDR_TYPE_SPECIFIC_DATA_OFFSET));
+
+	if (pl_hdr.size > MAX_PKTLOG_RECV_BUF_SIZE) {
+		pl_dev->invalid_packets++;
+		return A_ERROR;
+	}
+
+	/*
+	 *  Must include to process different types
+	 *  TX_CTL, TX_STATUS, TX_MSDU_ID, TX_FRM_HDR
+	 */
+	pl_info = pl_dev->pl_info;
+	tmp_log_size = sizeof(frm_hdr) + pl_hdr.size;
+	log_size = pl_hdr.size;
+	txdesc_hdr_ctl =
+		(void *)pktlog_getbuf(pl_dev, pl_info, log_size, &pl_hdr);
+	if (!txdesc_hdr_ctl) {
+		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
+			  "Failed to allocate pktlog descriptor");
+		return A_NO_MEMORY;
+	}
+	qdf_assert(txdesc_hdr_ctl);
+	qdf_assert(pl_hdr->size < PKTLOG_MAX_TX_WORDS * sizeof(u_int32_t));
+	qdf_mem_copy(txdesc_hdr_ctl,
+		     ((void *)data + sizeof(struct ath_pktlog_hdr)),
+		     pl_hdr.size);
+	cds_pkt_stats_to_logger_thread(&pl_hdr, NULL, txdesc_hdr_ctl);
+
+	return A_OK;
+}
+
+int process_rx_desc_remote_wifi3(void *pdev, void *data)
+{
+	struct pktlog_dev_t *pl_dev = get_pktlog_handle();
+	struct ath_pktlog_hdr pl_hdr;
+	struct ath_pktlog_rx_info rxstat_log;
+	size_t log_size;
+	struct ath_pktlog_info *pl_info;
+	qdf_nbuf_t log_nbuf = (qdf_nbuf_t)data;
+
+	if (!pl_dev) {
+		qdf_err("Pktlog handle is NULL");
+		return -EINVAL;
+	}
+
+	pl_info = pl_dev->pl_info;
+	qdf_mem_zero(&pl_hdr, sizeof(pl_hdr));
+	pl_hdr.flags = (1 << PKTLOG_FLG_FRM_TYPE_REMOTE_S);
+	pl_hdr.missed_cnt = 0;
+	pl_hdr.log_type = PKTLOG_TYPE_RX_STATBUF;
+	pl_hdr.size = qdf_nbuf_len(log_nbuf);
+	pl_hdr.timestamp = 0;
+	log_size = pl_hdr.size;
+	rxstat_log.rx_desc = (void *)pktlog_getbuf(pl_dev, pl_info,
+						  log_size, &pl_hdr);
+
+	if (!rxstat_log.rx_desc) {
+		QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_DEBUG,
+			  "%s: Rx descriptor is NULL", __func__);
+		return -EINVAL;
+	}
+
+	qdf_mem_copy(rxstat_log.rx_desc, qdf_nbuf_data(log_nbuf), pl_hdr.size);
+	cds_pkt_stats_to_logger_thread(&pl_hdr, NULL,
+				       rxstat_log.rx_desc);
+	return 0;
+}
+
+int
+process_pktlog_lite_wifi3(void *context, void *log_data,
+			  uint16_t log_type)
+{
+	struct pktlog_dev_t *pl_dev = get_pktlog_handle();
+	struct ath_pktlog_info *pl_info;
+	struct ath_pktlog_hdr pl_hdr;
+	struct ath_pktlog_rx_info rxstat_log;
+	size_t log_size;
+	qdf_nbuf_t log_nbuf = (qdf_nbuf_t)log_data;
+
+	if (!pl_dev) {
+		qdf_err("Pktlog handle is NULL");
+		return -EINVAL;
+	}
+
+	pl_info = pl_dev->pl_info;
+	qdf_mem_zero(&pl_hdr, sizeof(pl_hdr));
+	pl_hdr.flags = (1 << PKTLOG_FLG_FRM_TYPE_REMOTE_S);
+	pl_hdr.missed_cnt = 0;
+	pl_hdr.log_type = log_type;
+	pl_hdr.size = qdf_nbuf_len(log_nbuf);
+	pl_hdr.timestamp = 0;
+	log_size = pl_hdr.size;
+	rxstat_log.rx_desc = (void *)pktlog_getbuf(pl_dev, pl_info,
+						   log_size, &pl_hdr);
+	if (!rxstat_log.rx_desc) {
+		QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_DEBUG,
+			  "%s: Rx descriptor is NULL", __func__);
+		return -EINVAL;
+	}
+
+	qdf_mem_copy(rxstat_log.rx_desc, qdf_nbuf_data(log_nbuf), pl_hdr.size);
+
+	cds_pkt_stats_to_logger_thread(&pl_hdr, NULL, rxstat_log.rx_desc);
+	return 0;
+}
+#endif /* REMOVE_PKT_LOG */