Browse Source

qcacmn: add an ini field to control rx frame pending check

Add a ini control field to control rx frame pending check
logic in WoW case. In some cases, power consumption is more
important than rx frame ping loss, so add a control flag

Change-Id: I8c4d3725edddb82a0f06dc70c22a8dd5243209f2
CRs-Fixed: 2806786
Yu Tian 4 years ago
parent
commit
76fdb54e96
6 changed files with 32 additions and 2 deletions
  1. 4 1
      dp/inc/cdp_txrx_cmn.h
  2. 2 0
      dp/inc/cdp_txrx_cmn_struct.h
  3. 2 0
      dp/wifi3.0/dp_main.c
  4. 20 1
      wlan_cfg/cfg_dp.h
  5. 2 0
      wlan_cfg/wlan_cfg.c
  6. 2 0
      wlan_cfg/wlan_cfg.h

+ 4 - 1
dp/inc/cdp_txrx_cmn.h

@@ -2664,7 +2664,10 @@ cdp_rx_get_pending(ol_txrx_soc_handle soc)
 	    !soc->ol_ops->dp_rx_get_pending)
 	    !soc->ol_ops->dp_rx_get_pending)
 		return 0;
 		return 0;
 
 
-	return soc->ol_ops->dp_rx_get_pending(soc);
+	if (cdp_cfg_get(soc, cfg_dp_wow_check_rx_pending))
+		return soc->ol_ops->dp_rx_get_pending(soc);
+	else
+		return 0;
 }
 }
 
 
 #ifdef QCA_SUPPORT_WDS_EXTENDED
 #ifdef QCA_SUPPORT_WDS_EXTENDED

+ 2 - 0
dp/inc/cdp_txrx_cmn_struct.h

@@ -2345,6 +2345,7 @@ struct cdp_monitor_filter {
  * @cfg_dp_ce_classify_enable: get CE classify enable config
  * @cfg_dp_ce_classify_enable: get CE classify enable config
  * @cfg_dp_disable_intra_bss_fwd: get intra bss fwd config
  * @cfg_dp_disable_intra_bss_fwd: get intra bss fwd config
  * @cfg_dp_pktlog_buffer_size: get packet log buffer size config
  * @cfg_dp_pktlog_buffer_size: get packet log buffer size config
+ * @cfg_dp_wow_check_rx_pending: get wow rx pending frame check config
  */
  */
 enum cdp_dp_cfg {
 enum cdp_dp_cfg {
 	cfg_dp_enable_data_stall,
 	cfg_dp_enable_data_stall,
@@ -2366,6 +2367,7 @@ enum cdp_dp_cfg {
 	cfg_dp_ce_classify_enable,
 	cfg_dp_ce_classify_enable,
 	cfg_dp_disable_intra_bss_fwd,
 	cfg_dp_disable_intra_bss_fwd,
 	cfg_dp_pktlog_buffer_size,
 	cfg_dp_pktlog_buffer_size,
+	cfg_dp_wow_check_rx_pending,
 };
 };
 
 
 /**
 /**

+ 2 - 0
dp/wifi3.0/dp_main.c

@@ -10637,6 +10637,8 @@ static uint32_t dp_get_cfg(struct cdp_soc_t *soc, enum cdp_dp_cfg cfg)
 	case cfg_dp_pktlog_buffer_size:
 	case cfg_dp_pktlog_buffer_size:
 		value = dpsoc->wlan_cfg_ctx->pktlog_buffer_size;
 		value = dpsoc->wlan_cfg_ctx->pktlog_buffer_size;
 		break;
 		break;
+	case cfg_dp_wow_check_rx_pending:
+		value = dpsoc->wlan_cfg_ctx->wow_check_rx_pending_enable;
 	default:
 	default:
 		value =  0;
 		value =  0;
 	}
 	}

+ 20 - 1
wlan_cfg/cfg_dp.h

@@ -1027,6 +1027,24 @@
 #define CFG_DP_SWLM_ENABLE \
 #define CFG_DP_SWLM_ENABLE \
 	CFG_INI_BOOL("gEnableSWLM", false, \
 	CFG_INI_BOOL("gEnableSWLM", false, \
 		     "Enable/Disable DP SWLM")
 		     "Enable/Disable DP SWLM")
+/*
+ * <ini>
+ * wow_check_rx_pending_enable - control to check RX frames pending in Wow
+ * @Min: 0
+ * @Max: 1
+ * @Default: 0
+ *
+ * This ini is used to control DP Software to perform RX pending check
+ * before entering WoW mode
+ *
+ * Usage: Internal
+ *
+ * </ini>
+ */
+#define CFG_DP_WOW_CHECK_RX_PENDING \
+		CFG_INI_BOOL("wow_check_rx_pending_enable", \
+		false, \
+		"enable rx frame pending check in WoW mode")
 
 
 #define CFG_DP \
 #define CFG_DP \
 		CFG(CFG_DP_HTT_PACKET_TYPE) \
 		CFG(CFG_DP_HTT_PACKET_TYPE) \
@@ -1117,5 +1135,6 @@
 		CFG(CFG_DP_RX_FST_IN_CMEM) \
 		CFG(CFG_DP_RX_FST_IN_CMEM) \
 		CFG(CFG_DP_RX_RADIO_0_DEFAULT_REO) \
 		CFG(CFG_DP_RX_RADIO_0_DEFAULT_REO) \
 		CFG(CFG_DP_RX_RADIO_1_DEFAULT_REO) \
 		CFG(CFG_DP_RX_RADIO_1_DEFAULT_REO) \
-		CFG(CFG_DP_RX_RADIO_2_DEFAULT_REO)
+		CFG(CFG_DP_RX_RADIO_2_DEFAULT_REO) \
+		CFG(CFG_DP_WOW_CHECK_RX_PENDING)
 #endif /* _CFG_DP_H_ */
 #endif /* _CFG_DP_H_ */

+ 2 - 0
wlan_cfg/wlan_cfg.c

@@ -630,6 +630,8 @@ wlan_cfg_soc_attach(struct cdp_ctrl_objmgr_psoc *psoc)
 			cfg_get(psoc, CFG_DP_RX_RADIO_1_DEFAULT_REO);
 			cfg_get(psoc, CFG_DP_RX_RADIO_1_DEFAULT_REO);
 	wlan_cfg_ctx->radio2_rx_default_reo =
 	wlan_cfg_ctx->radio2_rx_default_reo =
 			cfg_get(psoc, CFG_DP_RX_RADIO_2_DEFAULT_REO);
 			cfg_get(psoc, CFG_DP_RX_RADIO_2_DEFAULT_REO);
+	wlan_cfg_ctx->wow_check_rx_pending_enable =
+			cfg_get(psoc, CFG_DP_WOW_CHECK_RX_PENDING);
 
 
 	return wlan_cfg_ctx;
 	return wlan_cfg_ctx;
 }
 }

+ 2 - 0
wlan_cfg/wlan_cfg.h

@@ -191,6 +191,7 @@ struct wlan_srng_cfg {
  * @rx_pending_low_threshold: threshold of stopping pkt drop
  * @rx_pending_low_threshold: threshold of stopping pkt drop
  * @is_swlm_enabled: flag to enable/disable SWLM
  * @is_swlm_enabled: flag to enable/disable SWLM
  * @tx_per_pkt_vdev_id_check: Enable tx perpkt vdev id check
  * @tx_per_pkt_vdev_id_check: Enable tx perpkt vdev id check
+ * @wow_check_rx_pending_enable: Enable RX frame pending check in WoW
  */
  */
 struct wlan_cfg_dp_soc_ctxt {
 struct wlan_cfg_dp_soc_ctxt {
 	int num_int_ctxts;
 	int num_int_ctxts;
@@ -306,6 +307,7 @@ struct wlan_cfg_dp_soc_ctxt {
 	uint8_t radio0_rx_default_reo;
 	uint8_t radio0_rx_default_reo;
 	uint8_t radio1_rx_default_reo;
 	uint8_t radio1_rx_default_reo;
 	uint8_t radio2_rx_default_reo;
 	uint8_t radio2_rx_default_reo;
+	bool wow_check_rx_pending_enable;
 };
 };
 
 
 /**
 /**