瀏覽代碼

qcacmn: add CDP interface support for pkt_log_exit

Add CDP interface API support for pkt_log_exit,
to cleanup pkt_log_init on failure.

Change-Id: Ib50efaed5997d341d3e76c2e1dbe42856df40191
CRs-Fixed: 3012201
Vevek Venkatesan 3 年之前
父節點
當前提交
6a3c9eaa85
共有 4 個文件被更改,包括 61 次插入2 次删除
  1. 21 0
      dp/inc/cdp_txrx_misc.h
  2. 1 0
      dp/inc/cdp_txrx_ops.h
  3. 28 0
      dp/wifi3.0/monitor/dp_mon.c
  4. 11 2
      utils/pktlog/linux_ac.c

+ 21 - 0
dp/inc/cdp_txrx_misc.h

@@ -567,6 +567,27 @@ static inline void cdp_pkt_log_con_service(ol_txrx_soc_handle soc,
 	return;
 	return;
 }
 }
 
 
+/**
+ * cdp_pkt_log_exit() - API to cleanup packet log info
+ * @soc: data path soc handle
+ * @pdev_id: id of data path pdev handle
+ *
+ * Return: void
+ */
+static inline void cdp_pkt_log_exit(ol_txrx_soc_handle soc, uint8_t pdev_id)
+{
+	if (!soc || !soc->ops || !soc->ops->misc_ops) {
+		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
+			"%s invalid instance", __func__);
+		return;
+	}
+
+	if (soc->ops->misc_ops->pkt_log_exit)
+		return soc->ops->misc_ops->pkt_log_exit(soc, pdev_id);
+
+	return;
+}
+
 /**
 /**
  * cdp_get_num_rx_contexts() - API to get the number of RX contexts
  * cdp_get_num_rx_contexts() - API to get the number of RX contexts
  * @soc: soc handle
  * @soc: soc handle

+ 1 - 0
dp/inc/cdp_txrx_ops.h

@@ -1312,6 +1312,7 @@ struct cdp_misc_ops {
 			     void *scn);
 			     void *scn);
 	void (*pkt_log_con_service)(struct cdp_soc_t *soc_hdl,
 	void (*pkt_log_con_service)(struct cdp_soc_t *soc_hdl,
 				    uint8_t pdev_id, void *scn);
 				    uint8_t pdev_id, void *scn);
+	void (*pkt_log_exit)(struct cdp_soc_t *soc_hdl, uint8_t pdev_id);
 	int (*get_num_rx_contexts)(struct cdp_soc_t *soc_hdl);
 	int (*get_num_rx_contexts)(struct cdp_soc_t *soc_hdl);
 	void (*register_pktdump_cb)(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
 	void (*register_pktdump_cb)(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
 				    ol_txrx_pktdump_cb tx_cb,
 				    ol_txrx_pktdump_cb tx_cb,

+ 28 - 0
dp/wifi3.0/monitor/dp_mon.c

@@ -4563,11 +4563,37 @@ static void dp_pkt_log_con_service(struct cdp_soc_t *soc_hdl,
 	dp_pkt_log_init(soc_hdl, pdev_id, scn);
 	dp_pkt_log_init(soc_hdl, pdev_id, scn);
 	pktlog_htc_attach();
 	pktlog_htc_attach();
 }
 }
+
+/**
+ * dp_pkt_log_exit() - Wrapper API to cleanup pktlog info
+ * @soc_hdl: Datapath soc handle
+ * @pdev_id: id of data path pdev handle
+ *
+ * Return: none
+ */
+static void dp_pkt_log_exit(struct cdp_soc_t *soc_hdl, uint8_t pdev_id)
+{
+	struct dp_soc *soc = cdp_soc_t_to_dp_soc(soc_hdl);
+	struct dp_pdev *pdev =
+		dp_get_pdev_from_soc_pdev_id_wifi3(soc, pdev_id);
+
+	if (!pdev) {
+		dp_err("pdev handle is NULL");
+		return;
+	}
+
+	dp_pktlogmod_exit(pdev);
+}
+
 #else
 #else
 static void dp_pkt_log_con_service(struct cdp_soc_t *soc_hdl,
 static void dp_pkt_log_con_service(struct cdp_soc_t *soc_hdl,
 				   uint8_t pdev_id, void *scn)
 				   uint8_t pdev_id, void *scn)
 {
 {
 }
 }
+
+static void dp_pkt_log_exit(struct cdp_soc_t *soc_hdl, uint8_t pdev_id)
+{
+}
 #endif
 #endif
 #endif
 #endif
 
 
@@ -5689,6 +5715,7 @@ void dp_mon_cdp_ops_register(struct dp_soc *soc)
 #ifdef DP_PEER_EXTENDED_API
 #ifdef DP_PEER_EXTENDED_API
 	ops->misc_ops->pkt_log_init = dp_pkt_log_init;
 	ops->misc_ops->pkt_log_init = dp_pkt_log_init;
 	ops->misc_ops->pkt_log_con_service = dp_pkt_log_con_service;
 	ops->misc_ops->pkt_log_con_service = dp_pkt_log_con_service;
+	ops->misc_ops->pkt_log_exit = dp_pkt_log_exit;
 #endif
 #endif
 #ifdef ATH_SUPPORT_NAC_RSSI
 #ifdef ATH_SUPPORT_NAC_RSSI
 	ops->ctrl_ops->txrx_vdev_config_for_nac_rssi = dp_config_for_nac_rssi;
 	ops->ctrl_ops->txrx_vdev_config_for_nac_rssi = dp_config_for_nac_rssi;
@@ -5738,6 +5765,7 @@ void dp_mon_cdp_ops_deregister(struct dp_soc *soc)
 #ifdef DP_PEER_EXTENDED_API
 #ifdef DP_PEER_EXTENDED_API
 	ops->misc_ops->pkt_log_init = NULL;
 	ops->misc_ops->pkt_log_init = NULL;
 	ops->misc_ops->pkt_log_con_service = NULL;
 	ops->misc_ops->pkt_log_con_service = NULL;
+	ops->misc_ops->pkt_log_exit = NULL;
 #endif
 #endif
 #ifdef ATH_SUPPORT_NAC_RSSI
 #ifdef ATH_SUPPORT_NAC_RSSI
 	ops->ctrl_ops->txrx_vdev_config_for_nac_rssi = NULL;
 	ops->ctrl_ops->txrx_vdev_config_for_nac_rssi = NULL;

+ 11 - 2
utils/pktlog/linux_ac.c

@@ -417,6 +417,7 @@ static int pktlog_attach(struct hif_opaque_softc *scn)
 	char *proc_name;
 	char *proc_name;
 	struct proc_dir_entry *proc_entry;
 	struct proc_dir_entry *proc_entry;
 
 
+	qdf_info("attach pktlog resources");
 	/* Allocate pktlog dev for later use */
 	/* Allocate pktlog dev for later use */
 	pl_dev = get_pktlog_handle();
 	pl_dev = get_pktlog_handle();
 
 
@@ -441,6 +442,7 @@ static int pktlog_attach(struct hif_opaque_softc *scn)
 		 */
 		 */
 		pl_dev->pl_funcs->pktlog_init(scn);
 		pl_dev->pl_funcs->pktlog_init(scn);
 	} else {
 	} else {
+		qdf_err("pl_dev is NULL");
 		return -EINVAL;
 		return -EINVAL;
 	}
 	}
 
 
@@ -505,6 +507,7 @@ static void pktlog_detach(struct hif_opaque_softc *scn)
 	struct ath_pktlog_info *pl_info;
 	struct ath_pktlog_info *pl_info;
 	struct pktlog_dev_t *pl_dev = get_pktlog_handle();
 	struct pktlog_dev_t *pl_dev = get_pktlog_handle();
 
 
+	qdf_info("detach pktlog resources");
 	if (!pl_dev) {
 	if (!pl_dev) {
 		qdf_info("Invalid pktlog context");
 		qdf_info("Invalid pktlog context");
 		ASSERT(0);
 		ASSERT(0);
@@ -1038,6 +1041,7 @@ int pktlogmod_init(void *context)
 {
 {
 	int ret;
 	int ret;
 
 
+	qdf_info("Initialize pkt_log module");
 	/* create the proc directory entry */
 	/* create the proc directory entry */
 	g_pktlog_pde = proc_mkdir(PKTLOG_PROC_DIR, NULL);
 	g_pktlog_pde = proc_mkdir(PKTLOG_PROC_DIR, NULL);
 
 
@@ -1050,8 +1054,10 @@ int pktlogmod_init(void *context)
 	ret = pktlog_attach((struct hif_opaque_softc *)context);
 	ret = pktlog_attach((struct hif_opaque_softc *)context);
 
 
 	/* If packet log init failed */
 	/* If packet log init failed */
-	if (ret)
+	if (ret) {
+		qdf_err("pktlog_attach failed");
 		goto attach_fail;
 		goto attach_fail;
+	}
 
 
 	return ret;
 	return ret;
 
 
@@ -1064,8 +1070,11 @@ attach_fail:
 
 
 void pktlogmod_exit(void *context)
 void pktlogmod_exit(void *context)
 {
 {
-	if (!g_pktlog_pde)
+	qdf_info("pkt_log module cleanup");
+	if (!g_pktlog_pde) {
+		qdf_err("g_pktlog_pde is NULL");
 		return;
 		return;
+	}
 
 
 	pktlog_detach((struct hif_opaque_softc *)context);
 	pktlog_detach((struct hif_opaque_softc *)context);