Browse Source

qcacmn: Register monitor interrupt ops after monitor object creation

Register monitor interrupt ops after monitor object creation

CRs-Fixed: 3060183
Change-Id: Ia1936d2b124ede3f2082360140ab923f8b21fb43
Himanshu Batra 3 years ago
parent
commit
8096fd4cbf

+ 11 - 1
dp/wifi3.0/monitor/1.0/dp_mon_1.0.c

@@ -3204,6 +3204,13 @@ dp_rx_mon_process_1_0(struct dp_soc *soc, struct dp_intr *int_ctx,
 
 	return dp_rx_mon_status_process(soc, int_ctx, mac_id, quota);
 }
+
+static void dp_mon_register_intr_ops_1_0(struct dp_soc *soc)
+{
+	struct dp_mon_soc *mon_soc = soc->monitor_soc;
+
+	mon_soc->mon_rx_process = dp_rx_mon_process_1_0;
+}
 #endif
 
 struct dp_mon_ops monitor_ops_1_0 = {
@@ -3227,7 +3234,7 @@ struct dp_mon_ops monitor_ops_1_0 = {
 	.mon_service_rings = dp_service_mon_rings,
 #endif
 #ifndef DISABLE_MON_CONFIG
-	.mon_rx_process = dp_rx_mon_process_1_0,
+	.mon_rx_process = NULL,
 #endif
 #if !defined(DISABLE_MON_CONFIG) && defined(MON_ENABLE_DROP_FOR_MAC)
 	.mon_drop_packets_for_mac = dp_mon_drop_packets_for_mac,
@@ -3347,6 +3354,9 @@ struct dp_mon_ops monitor_ops_1_0 = {
 	.rx_packet_length_set = NULL,
 	.rx_wmask_subscribe = NULL,
 	.rx_enable_mpdu_logging = NULL,
+#if !defined(DISABLE_MON_CONFIG)
+	.mon_register_intr_ops = dp_mon_register_intr_ops_1_0,
+#endif
 };
 
 struct cdp_mon_ops dp_ops_mon_1_0 = {

+ 11 - 1
dp/wifi3.0/monitor/2.0/dp_mon_2.0.c

@@ -748,6 +748,13 @@ QDF_STATUS dp_mon_pdev_alloc_2_0(struct dp_pdev *pdev)
 }
 #endif
 
+static void dp_mon_register_intr_ops_2_0(struct dp_soc *soc)
+{
+	struct dp_mon_soc *mon_soc = soc->monitor_soc;
+
+	mon_soc->mon_rx_process = dp_rx_mon_process_2_0;
+}
+
 struct dp_mon_ops monitor_ops_2_0 = {
 	.mon_soc_cfg_init = dp_mon_soc_cfg_init,
 	.mon_soc_attach = dp_mon_soc_attach_2_0,
@@ -774,7 +781,7 @@ struct dp_mon_ops monitor_ops_2_0 = {
 	.mon_service_rings = NULL,
 #endif
 #ifndef DISABLE_MON_CONFIG
-	.mon_rx_process = dp_rx_mon_process_2_0,
+	.mon_rx_process = NULL,
 	.mon_tx_process = dp_tx_mon_process,
 #endif
 #if !defined(DISABLE_MON_CONFIG) && defined(MON_ENABLE_DROP_FOR_MAC)
@@ -895,6 +902,9 @@ struct dp_mon_ops monitor_ops_2_0 = {
 	.rx_packet_length_set = dp_rx_mon_packet_length_set,
 	.rx_wmask_subscribe = dp_rx_mon_word_mask_subscribe,
 	.rx_enable_mpdu_logging = dp_rx_mon_enable_mpdu_logging,
+#ifndef DISABLE_MON_CONFIG
+	.mon_register_intr_ops = dp_mon_register_intr_ops_2_0,
+#endif
 };
 
 struct cdp_mon_ops dp_ops_mon_2_0 = {

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

@@ -2334,6 +2334,19 @@ QDF_STATUS dp_mon_peer_detach(struct dp_peer *peer)
 	return QDF_STATUS_SUCCESS;
 }
 
+void dp_mon_register_intr_ops(struct dp_soc *soc)
+{
+	struct dp_mon_ops *mon_ops = NULL;
+
+	mon_ops = dp_mon_ops_get(soc);
+	if (!mon_ops) {
+		dp_mon_err("Monitor ops is NULL");
+		return;
+	}
+	if (mon_ops->mon_register_intr_ops)
+		mon_ops->mon_register_intr_ops(soc);
+}
+
 void dp_mon_ops_register(struct dp_soc *soc)
 {
 	struct dp_mon_soc *mon_soc = soc->monitor_soc;

+ 13 - 4
dp/wifi3.0/monitor/dp_mon.h

@@ -178,6 +178,8 @@ void dp_mon_cdp_ops_deregister(struct dp_soc *soc);
  */
 void dp_mon_ops_register(struct dp_soc *soc);
 
+void dp_mon_register_intr_ops(struct dp_soc *soc);
+
 /*
  * dp_mon_htt_srng_setup() - DP mon htt srng setup
  * @soc: Datapath soc handle
@@ -526,6 +528,9 @@ struct dp_mon_ops {
 				   struct htt_rx_ring_tlv_filter *tlv_filter);
 	void (*rx_enable_mpdu_logging)(uint32_t *msg_word,
 				       struct htt_rx_ring_tlv_filter *tlv_filter);
+#ifndef DISABLE_MON_CONFIG
+	void (*mon_register_intr_ops)(struct dp_soc *soc);
+#endif
 };
 
 struct dp_mon_soc {
@@ -556,6 +561,12 @@ struct dp_mon_soc {
 
 	struct dp_mon_ops *mon_ops;
 	bool monitor_mode_v2;
+#ifndef DISABLE_MON_CONFIG
+	uint32_t (*mon_rx_process)(struct dp_soc *soc,
+				   struct dp_intr *int_ctx,
+				   uint32_t mac_id,
+				   uint32_t quota);
+#endif
 };
 
 struct  dp_mon_pdev {
@@ -1777,7 +1788,6 @@ static inline
 uint32_t dp_monitor_process(struct dp_soc *soc, struct dp_intr *int_ctx,
 			    uint32_t mac_id, uint32_t quota)
 {
-	struct dp_mon_ops *monitor_ops;
 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
 
 	if (!mon_soc) {
@@ -1785,13 +1795,12 @@ uint32_t dp_monitor_process(struct dp_soc *soc, struct dp_intr *int_ctx,
 		return 0;
 	}
 
-	monitor_ops = mon_soc->mon_ops;
-	if (!monitor_ops || !monitor_ops->mon_rx_process) {
+	if (!mon_soc->mon_rx_process) {
 		dp_mon_debug("callback not registered");
 		return 0;
 	}
 
-	return monitor_ops->mon_rx_process(soc, int_ctx, mac_id, quota);
+	return mon_soc->mon_rx_process(soc, int_ctx, mac_id, quota);
 }
 
 static inline uint32_t

+ 3 - 4
dp/wifi3.0/monitor/dp_rx_mon.c

@@ -1288,11 +1288,10 @@ uint32_t
 dp_mon_process(struct dp_soc *soc, struct dp_intr *int_ctx,
 	       uint32_t mac_id, uint32_t quota)
 {
-	struct dp_mon_ops *mon_ops;
+	struct dp_mon_soc *mon_soc = soc->monitor_soc;
 
-	mon_ops = dp_mon_ops_get(soc);
-	if (mon_ops && mon_ops->mon_rx_process)
-		return mon_ops->mon_rx_process(soc, int_ctx,
+	if (mon_soc && mon_soc->mon_rx_process)
+		return mon_soc->mon_rx_process(soc, int_ctx,
 					       mac_id, quota);
 	return 0;
 }