Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2ce44bac authored by Mohit Khanna's avatar Mohit Khanna
Browse files

qcacmn: Add NAN TX checksum offload INI entry

Currently there is a single INI item tcp_udp_checksumoffload to enable
or disable this feature for all the adapters. In some cases, we want to
be able to enable this feature selectively for NAN mode.

Add nan_tcp_udp_checksumoffload ini item to enable or disable checksum
offload feature specifically for NAN mode. If
nan_tcp_udp_checksumoffload is 'true' and tcp_udp_checksumoffload is
false, hardware checksum offload will be enabled only for the NAN
adapter and not for other adapters.

CRs-Fixed: 2693638
Change-Id: I6e255ce68ddc7b01ebdefe4e5e8d2c985388fefe
parent 771a88a7
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -2139,7 +2139,8 @@ struct cdp_rx_indication_msdu {
 * @lro_enable: Enable/Disable LRO
 * @gro_enable: Enable/Disable GRO
 * @flow_steering_enable: Enable/Disable Rx Hash based flow steering
 * @tcp_Udp_ChecksumOffload: Enable/Disable tcp-Udp checksum Offload
 * @nan_tcp_udp_checksumoffload: Enable/Disable TCP/UDP Checksum Offload for NAN
 * @tcp_udp_checksumoffload: Enable/Disable TCP/UDP Checksum Offload
 * @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
@@ -2154,6 +2155,7 @@ struct cdp_config_params {
	unsigned int lro_enable:1;
	unsigned int gro_enable:1;
	unsigned int flow_steering_enable:1;
	unsigned int nan_tcp_udp_checksumoffload:1;
	unsigned int tcp_udp_checksumoffload:1;
	unsigned int napi_enable:1;
	unsigned int ipa_enable:1;
@@ -2213,6 +2215,9 @@ struct cdp_monitor_filter {
 */
enum cdp_dp_cfg {
	cfg_dp_enable_data_stall,
	/* checksum offload for NAN interface */
	cfg_dp_enable_nan_ip_tcp_udp_checksum_offload,
	/* generic checksum offload for other interfaces */
	cfg_dp_enable_ip_tcp_udp_checksum_offload,
	cfg_dp_tso_enable,
	cfg_dp_lro_enable,
+2 −0
Original line number Diff line number Diff line
@@ -284,6 +284,8 @@ 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*/
	bool nan_ip_tcp_udp_checksum_offload;
	/* Rx processing in thread from TXRX */
	bool enable_rxthread;
	/* CE classification enabled through INI */
+5 −0
Original line number Diff line number Diff line
@@ -9220,6 +9220,8 @@ QDF_STATUS dp_update_config_parameters(struct cdp_soc *psoc,
	soc->wlan_cfg_ctx->tso_enabled = params->tso_enable;
	soc->wlan_cfg_ctx->lro_enabled = params->lro_enable;
	soc->wlan_cfg_ctx->rx_hash = params->flow_steering_enable;
	soc->wlan_cfg_ctx->nan_tcp_udp_checksumoffload =
				params->nan_tcp_udp_checksumoffload;
	soc->wlan_cfg_ctx->tcp_udp_checksumoffload =
				params->tcp_udp_checksumoffload;
	soc->wlan_cfg_ctx->napi_enabled = params->napi_enable;
@@ -9850,6 +9852,9 @@ static uint32_t dp_get_cfg(struct cdp_soc_t *soc, enum cdp_dp_cfg cfg)
	case cfg_dp_enable_data_stall:
		value = dpsoc->wlan_cfg_ctx->enable_data_stall_detection;
		break;
	case cfg_dp_enable_nan_ip_tcp_udp_checksum_offload:
		value = dpsoc->wlan_cfg_ctx->nan_tcp_udp_checksumoffload;
		break;
	case cfg_dp_enable_ip_tcp_udp_checksum_offload:
		value = dpsoc->wlan_cfg_ctx->tcp_udp_checksumoffload;
		break;
+2 −0
Original line number Diff line number Diff line
@@ -4681,6 +4681,8 @@ void dp_print_soc_cfg_params(struct dp_soc *soc)
		       soc_cfg_ctx->peer_flow_ctrl_enabled);
	DP_PRINT_STATS("napi enabled: %u ",
		       soc_cfg_ctx->napi_enabled);
	DP_PRINT_STATS("NAN Tcp Udp checksum offload: %u ",
		       soc_cfg_ctx->nan_tcp_udp_checksumoffload);
	DP_PRINT_STATS("Tcp Udp checksum offload: %u ",
		       soc_cfg_ctx->tcp_udp_checksumoffload);
	DP_PRINT_STATS("Defrag timeout check: %u ",
+24 −2
Original line number Diff line number Diff line
@@ -1180,7 +1180,7 @@ static QDF_STATUS dp_tx_hw_enqueue(struct dp_soc *soc, struct dp_vdev *vdev,
			vdev->hal_desc_addr_search_flags);

	/* verify checksum offload configuration*/
	if ((wlan_cfg_get_checksum_offload(soc->wlan_cfg_ctx)) &&
	if (vdev->csum_enabled &&
	    ((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);
@@ -3775,6 +3775,26 @@ qdf_nbuf_t dp_tx_non_std(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
}
#endif

static void dp_tx_vdev_update_feature_flags(struct dp_vdev *vdev)
{
	struct wlan_cfg_dp_soc_ctxt *cfg;

	struct dp_soc *soc;

	soc = vdev->pdev->soc;
	if (!soc)
		return;

	cfg = soc->wlan_cfg_ctx;
	if (!cfg)
		return;

	if (vdev->opmode == wlan_op_mode_ndi)
		vdev->csum_enabled = wlan_cfg_get_nan_checksum_offload(cfg);
	else
		vdev->csum_enabled = wlan_cfg_get_checksum_offload(cfg);
}

/**
 * dp_tx_vdev_attach() - attach vdev to dp tx
 * @vdev: virtual device instance
@@ -3806,6 +3826,8 @@ QDF_STATUS dp_tx_vdev_attach(struct dp_vdev *vdev)

	dp_tx_vdev_update_search_flags(vdev);

	dp_tx_vdev_update_feature_flags(vdev);

	return QDF_STATUS_SUCCESS;
}

Loading