Browse Source

qcacmn: Hook checksum offload INI key to DP TX path

Enable or disable TCP\UCP checksum offload for TX according
to the flag in wlan cfg module, which is determined by INI
(MCL) or initialization setting(WIN).

CRs-Fixed: 2155236
Change-Id: I0e30fc062a000c2d9c47674fe80da59a2ac0de51
chenguo 7 years ago
parent
commit
8d0c219dde
3 changed files with 19 additions and 2 deletions
  1. 4 2
      dp/wifi3.0/dp_tx.c
  2. 7 0
      wlan_cfg/wlan_cfg.c
  3. 8 0
      wlan_cfg/wlan_cfg.h

+ 4 - 2
dp/wifi3.0/dp_tx.c

@@ -828,8 +828,10 @@ static QDF_STATUS dp_tx_hw_enqueue(struct dp_soc *soc, struct dp_vdev *vdev,
 	hal_tx_desc_set_addr_search_flags(hal_tx_desc_cached,
 	hal_tx_desc_set_addr_search_flags(hal_tx_desc_cached,
 			vdev->hal_desc_addr_search_flags);
 			vdev->hal_desc_addr_search_flags);
 
 
-	if ((qdf_nbuf_get_tx_cksum(tx_desc->nbuf) == QDF_NBUF_TX_CKSUM_TCP_UDP)
-		|| qdf_nbuf_is_tso(tx_desc->nbuf))  {
+	/* verify checksum offload configuration*/
+	if ((wlan_cfg_get_checksum_offload(soc->wlan_cfg_ctx)) &&
+		((qdf_nbuf_get_tx_cksum(tx_desc->nbuf) == QDF_NBUF_TX_CKSUM_TCP_UDP)
+		|| qdf_nbuf_is_tso(tx_desc->nbuf)))  {
 		hal_tx_desc_set_l3_checksum_en(hal_tx_desc_cached, 1);
 		hal_tx_desc_set_l3_checksum_en(hal_tx_desc_cached, 1);
 		hal_tx_desc_set_l4_checksum_en(hal_tx_desc_cached, 1);
 		hal_tx_desc_set_l4_checksum_en(hal_tx_desc_cached, 1);
 	}
 	}

+ 7 - 0
wlan_cfg/wlan_cfg.c

@@ -348,6 +348,8 @@ struct wlan_cfg_dp_soc_ctxt *wlan_cfg_soc_attach()
 		wlan_cfg_set_hw_macid(wlan_cfg_ctx, 2, 2);
 		wlan_cfg_set_hw_macid(wlan_cfg_ctx, 2, 2);
 
 
 	wlan_cfg_ctx->base_hw_macid = 1;
 	wlan_cfg_ctx->base_hw_macid = 1;
+	/*Enable checksum offload by default*/
+	wlan_cfg_ctx->tcp_udp_checksumoffload = 1;
 
 
 	return wlan_cfg_ctx;
 	return wlan_cfg_ctx;
 }
 }
@@ -690,6 +692,11 @@ int wlan_cfg_get_int_timer_threshold_other(struct wlan_cfg_dp_soc_ctxt *cfg)
 {
 {
 	return cfg->int_timer_threshold_other;
 	return cfg->int_timer_threshold_other;
 }
 }
+
+int wlan_cfg_get_checksum_offload(struct wlan_cfg_dp_soc_ctxt *cfg)
+{
+	return cfg->tcp_udp_checksumoffload;
+}
 #ifdef QCA_LL_TX_FLOW_CONTROL_V2
 #ifdef QCA_LL_TX_FLOW_CONTROL_V2
 /**
 /**
  * wlan_cfg_get_tx_flow_stop_queue_th() - Get flow control stop threshold
  * wlan_cfg_get_tx_flow_stop_queue_th() - Get flow control stop threshold

+ 8 - 0
wlan_cfg/wlan_cfg.h

@@ -626,6 +626,14 @@ int wlan_cfg_get_int_batch_threshold_other(struct wlan_cfg_dp_soc_ctxt *cfg);
  */
  */
 int wlan_cfg_get_int_timer_threshold_other(struct wlan_cfg_dp_soc_ctxt *cfg);
 int wlan_cfg_get_int_timer_threshold_other(struct wlan_cfg_dp_soc_ctxt *cfg);
 
 
+/*
+ * wlan_cfg_get_checksum_offload - Get checksum offload enable or disable status
+ * @wlan_cfg_soc_ctx
+ *
+ * Return: Checksum offload enable or disable
+ */
+int wlan_cfg_get_checksum_offload(struct wlan_cfg_dp_soc_ctxt *cfg);
+
 /*
 /*
  * wlan_cfg_tx_ring_size - Get Tx DMA ring size (TCL Data Ring)
  * wlan_cfg_tx_ring_size - Get Tx DMA ring size (TCL Data Ring)
  * @wlan_cfg_soc_ctx
  * @wlan_cfg_soc_ctx