Procházet zdrojové kódy

qcacmn: Add DP INI to tune netdev features at runtime

Add INI to modify the HW checksum capability advertisement.
Add hook to update enable/disable of HW checksum for vdev.

Change-Id: Idd0bad1d39c8411c7b4ef19483aa2c75a756791b
CRs-Fixed: 2732099
Manjunathappa Prakash před 5 roky
rodič
revize
93aff9ee1f

+ 10 - 0
dp/inc/cdp_txrx_cmn_struct.h

@@ -1125,6 +1125,8 @@ enum cdp_pdev_param_type {
  *
  * @cdp_psoc_param_en_rate_stats: set rate stats enable/disable
  * @cdp_psoc_param_en_nss_cfg: set nss cfg
+ *
+ * @cdp_enable_tx_checksum: Flag to specify if HW Tx checksum enabled
  */
 typedef union cdp_config_param_t {
 	/* peer params */
@@ -1190,6 +1192,8 @@ typedef union cdp_config_param_t {
 	int cdp_psoc_param_en_nss_cfg;
 	int cdp_psoc_param_preferred_hw_mode;
 	bool cdp_psoc_param_pext_stats;
+
+	bool cdp_enable_tx_checksum;
 } cdp_config_param_type;
 
 /**
@@ -1284,6 +1288,7 @@ enum cdp_vdev_param_type {
 #endif
 	CDP_SAFEMODE,
 	CDP_DROP_UNENC,
+	CDP_ENABLE_CSUM,
 };
 
 /*
@@ -2219,6 +2224,8 @@ struct cdp_rx_indication_msdu {
  * @p2p_tcp_udp_checksumoffload: Enable/Disable TCP/UDP Checksum Offload for P2P
  * @nan_tcp_udp_checksumoffload: Enable/Disable TCP/UDP Checksum Offload for NAN
  * @tcp_udp_checksumoffload: Enable/Disable TCP/UDP Checksum Offload
+ * @legacy_mode_checksumoffload_disable: Disable TCP/UDP Checksum Offload for
+ *					 legacy modes.
  * @napi_enable: Enable/Disable Napi
  * @ipa_enable: Flag indicating if IPA is enabled or not
  * @tx_flow_stop_queue_threshold: Value to Pause tx queues
@@ -2236,6 +2243,7 @@ struct cdp_config_params {
 	unsigned int p2p_tcp_udp_checksumoffload:1;
 	unsigned int nan_tcp_udp_checksumoffload:1;
 	unsigned int tcp_udp_checksumoffload:1;
+	unsigned int legacy_mode_checksumoffload_disable:1;
 	unsigned int napi_enable:1;
 	unsigned int ipa_enable:1;
 	/* Set when QCA_LL_TX_FLOW_CONTROL_V2 is enabled */
@@ -2314,6 +2322,8 @@ enum cdp_dp_cfg {
 	cfg_dp_enable_p2p_ip_tcp_udp_checksum_offload,
 	cfg_dp_enable_nan_ip_tcp_udp_checksum_offload,
 	cfg_dp_enable_ip_tcp_udp_checksum_offload,
+	/* Disable checksum offload for legacy modes */
+	cfg_dp_disable_legacy_mode_csum_offload,
 	cfg_dp_tso_enable,
 	cfg_dp_lro_enable,
 	cfg_dp_gro_enable,

+ 4 - 1
dp/inc/cdp_txrx_ctrl.h

@@ -272,8 +272,11 @@ cdp_txrx_set_vdev_param(ol_txrx_soc_handle soc,
 	}
 
 	if (!soc->ops->ctrl_ops ||
-	    !soc->ops->ctrl_ops->txrx_set_vdev_param)
+	    !soc->ops->ctrl_ops->txrx_set_vdev_param) {
+		QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
+			  "NULL vdev params callback");
 		return QDF_STATUS_E_FAILURE;
+	}
 
 	return soc->ops->ctrl_ops->txrx_set_vdev_param(soc, vdev_id,
 						       type, val);

+ 3 - 1
dp/inc/cdp_txrx_mob_def.h

@@ -285,10 +285,12 @@ struct txrx_pdev_cfg_param_t {
 	uint32_t uc_tx_partition_base;
 	/* IP, TCP and UDP checksum offload */
 	bool ip_tcp_udp_checksum_offload;
-	/* IP, TCP and UDP checksum offload for NAN Mode*/
+	/* IP, TCP and UDP checksum offload for NAN Mode */
 	bool nan_ip_tcp_udp_checksum_offload;
 	/* IP, TCP and UDP checksum offload for P2P Mode*/
 	bool p2p_ip_tcp_udp_checksum_offload;
+	/* Checksum offload override flag for Legcay modes */
+	bool legacy_mode_csum_disable;
 	/* Rx processing in thread from TXRX */
 	bool enable_rxthread;
 	/* CE classification enabled through INI */

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

@@ -8578,6 +8578,11 @@ dp_set_vdev_param(struct cdp_soc_t *cdp_soc, uint8_t vdev_id,
 				      val.cdp_vdev_param_mesh_mode);
 		break;
 #endif
+	case CDP_ENABLE_CSUM:
+		dp_info("vdev_id %d enable Checksum %d", vdev_id,
+			val.cdp_enable_tx_checksum);
+		vdev->csum_enabled = val.cdp_enable_tx_checksum;
+		break;
 	default:
 		break;
 	}
@@ -10142,6 +10147,10 @@ static uint32_t dp_get_cfg(struct cdp_soc_t *soc, enum cdp_dp_cfg cfg)
 	case cfg_dp_enable_ip_tcp_udp_checksum_offload:
 		value = dpsoc->wlan_cfg_ctx->tcp_udp_checksumoffload;
 		break;
+	case cfg_dp_disable_legacy_mode_csum_offload:
+		value = dpsoc->wlan_cfg_ctx->
+					legacy_mode_checksumoffload_disable;
+		break;
 	case cfg_dp_tso_enable:
 		value = dpsoc->wlan_cfg_ctx->tso_enabled;
 		break;

+ 22 - 2
wlan_cfg/cfg_dp.h

@@ -940,6 +940,26 @@
 #define CFG_DP_PEER_EXT_STATS \
 		CFG_INI_BOOL("peer_ext_stats", \
 		false, "Peer extended stats")
+/*
+ * <ini>
+ * legacy_mode_csum_disable - Disable csum offload for legacy 802.11abg modes
+ * @Min: 0
+ * @Max: 1
+ * @Default: 0
+ *
+ * This ini is used to disable HW checksum offload capability for legacy
+ * connections
+ *
+ * Related: gEnableIpTcpUdpChecksumOffload should be enabled
+ *
+ * Usage: Internal
+ *
+ * </ini>
+ */
+
+#define CFG_DP_LEGACY_MODE_CSUM_DISABLE \
+	CFG_INI_BOOL("legacy_mode_csum_disable", false, \
+		     "Enable/Disable legacy mode checksum")
 
 #define CFG_DP_RX_BUFF_POOL_ENABLE \
 	CFG_INI_BOOL("dp_rx_buff_prealloc_pool", false, \
@@ -1026,6 +1046,6 @@
 		CFG(CFG_DP_PEER_EXT_STATS) \
 		CFG(CFG_DP_RX_BUFF_POOL_ENABLE) \
 		CFG(CFG_DP_RX_PENDING_HL_THRESHOLD) \
-		CFG(CFG_DP_RX_PENDING_LO_THRESHOLD)
-
+		CFG(CFG_DP_RX_PENDING_LO_THRESHOLD) \
+		CFG(CFG_DP_LEGACY_MODE_CSUM_DISABLE)
 #endif /* _CFG_DP_H_ */

+ 2 - 0
wlan_cfg/wlan_cfg.c

@@ -547,6 +547,8 @@ wlan_cfg_soc_attach(struct cdp_ctrl_objmgr_psoc *psoc)
 			cfg_get(psoc, CFG_DP_NAN_TCP_UDP_CKSUM_OFFLOAD);
 	wlan_cfg_ctx->tcp_udp_checksumoffload =
 			cfg_get(psoc, CFG_DP_TCP_UDP_CKSUM_OFFLOAD);
+	wlan_cfg_ctx->legacy_mode_checksumoffload_disable =
+			cfg_get(psoc, CFG_DP_LEGACY_MODE_CSUM_DISABLE);
 	wlan_cfg_ctx->per_pkt_trace = cfg_get(psoc, CFG_DP_PER_PKT_LOGGING);
 	wlan_cfg_ctx->defrag_timeout_check =
 			cfg_get(psoc, CFG_DP_DEFRAG_TIMEOUT_CHECK);

+ 1 - 0
wlan_cfg/wlan_cfg.h

@@ -244,6 +244,7 @@ struct wlan_cfg_dp_soc_ctxt {
 	bool p2p_tcp_udp_checksumoffload;
 	bool nan_tcp_udp_checksumoffload;
 	bool tcp_udp_checksumoffload;
+	bool legacy_mode_checksumoffload_disable;
 	bool defrag_timeout_check;
 	int nss_cfg;
 	uint32_t tx_flow_stop_queue_threshold;