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
This commit is contained in:
Manjunathappa Prakash
2020-07-06 03:04:31 -07:00
committed by snandini
parent b9affa1488
commit 93aff9ee1f
7 changed files with 51 additions and 4 deletions

View File

@@ -1125,6 +1125,8 @@ enum cdp_pdev_param_type {
* *
* @cdp_psoc_param_en_rate_stats: set rate stats enable/disable * @cdp_psoc_param_en_rate_stats: set rate stats enable/disable
* @cdp_psoc_param_en_nss_cfg: set nss cfg * @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 { typedef union cdp_config_param_t {
/* peer params */ /* peer params */
@@ -1190,6 +1192,8 @@ typedef union cdp_config_param_t {
int cdp_psoc_param_en_nss_cfg; int cdp_psoc_param_en_nss_cfg;
int cdp_psoc_param_preferred_hw_mode; int cdp_psoc_param_preferred_hw_mode;
bool cdp_psoc_param_pext_stats; bool cdp_psoc_param_pext_stats;
bool cdp_enable_tx_checksum;
} cdp_config_param_type; } cdp_config_param_type;
/** /**
@@ -1284,6 +1288,7 @@ enum cdp_vdev_param_type {
#endif #endif
CDP_SAFEMODE, CDP_SAFEMODE,
CDP_DROP_UNENC, 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 * @p2p_tcp_udp_checksumoffload: Enable/Disable TCP/UDP Checksum Offload for P2P
* @nan_tcp_udp_checksumoffload: Enable/Disable TCP/UDP Checksum Offload for NAN * @nan_tcp_udp_checksumoffload: Enable/Disable TCP/UDP Checksum Offload for NAN
* @tcp_udp_checksumoffload: Enable/Disable TCP/UDP Checksum Offload * @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 * @napi_enable: Enable/Disable Napi
* @ipa_enable: Flag indicating if IPA is enabled or not * @ipa_enable: Flag indicating if IPA is enabled or not
* @tx_flow_stop_queue_threshold: Value to Pause tx queues * @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 p2p_tcp_udp_checksumoffload:1;
unsigned int nan_tcp_udp_checksumoffload:1; unsigned int nan_tcp_udp_checksumoffload:1;
unsigned int tcp_udp_checksumoffload:1; unsigned int tcp_udp_checksumoffload:1;
unsigned int legacy_mode_checksumoffload_disable:1;
unsigned int napi_enable:1; unsigned int napi_enable:1;
unsigned int ipa_enable:1; unsigned int ipa_enable:1;
/* Set when QCA_LL_TX_FLOW_CONTROL_V2 is enabled */ /* 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_p2p_ip_tcp_udp_checksum_offload,
cfg_dp_enable_nan_ip_tcp_udp_checksum_offload, cfg_dp_enable_nan_ip_tcp_udp_checksum_offload,
cfg_dp_enable_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_tso_enable,
cfg_dp_lro_enable, cfg_dp_lro_enable,
cfg_dp_gro_enable, cfg_dp_gro_enable,

View File

@@ -272,8 +272,11 @@ cdp_txrx_set_vdev_param(ol_txrx_soc_handle soc,
} }
if (!soc->ops->ctrl_ops || 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 QDF_STATUS_E_FAILURE;
}
return soc->ops->ctrl_ops->txrx_set_vdev_param(soc, vdev_id, return soc->ops->ctrl_ops->txrx_set_vdev_param(soc, vdev_id,
type, val); type, val);

View File

@@ -285,10 +285,12 @@ struct txrx_pdev_cfg_param_t {
uint32_t uc_tx_partition_base; uint32_t uc_tx_partition_base;
/* IP, TCP and UDP checksum offload */ /* IP, TCP and UDP checksum offload */
bool ip_tcp_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; bool nan_ip_tcp_udp_checksum_offload;
/* IP, TCP and UDP checksum offload for P2P Mode*/ /* IP, TCP and UDP checksum offload for P2P Mode*/
bool p2p_ip_tcp_udp_checksum_offload; 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 */ /* Rx processing in thread from TXRX */
bool enable_rxthread; bool enable_rxthread;
/* CE classification enabled through INI */ /* CE classification enabled through INI */

View File

@@ -8578,6 +8578,11 @@ dp_set_vdev_param(struct cdp_soc_t *cdp_soc, uint8_t vdev_id,
val.cdp_vdev_param_mesh_mode); val.cdp_vdev_param_mesh_mode);
break; break;
#endif #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: default:
break; 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: case cfg_dp_enable_ip_tcp_udp_checksum_offload:
value = dpsoc->wlan_cfg_ctx->tcp_udp_checksumoffload; value = dpsoc->wlan_cfg_ctx->tcp_udp_checksumoffload;
break; break;
case cfg_dp_disable_legacy_mode_csum_offload:
value = dpsoc->wlan_cfg_ctx->
legacy_mode_checksumoffload_disable;
break;
case cfg_dp_tso_enable: case cfg_dp_tso_enable:
value = dpsoc->wlan_cfg_ctx->tso_enabled; value = dpsoc->wlan_cfg_ctx->tso_enabled;
break; break;

View File

@@ -940,6 +940,26 @@
#define CFG_DP_PEER_EXT_STATS \ #define CFG_DP_PEER_EXT_STATS \
CFG_INI_BOOL("peer_ext_stats", \ CFG_INI_BOOL("peer_ext_stats", \
false, "Peer extended 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 \ #define CFG_DP_RX_BUFF_POOL_ENABLE \
CFG_INI_BOOL("dp_rx_buff_prealloc_pool", false, \ CFG_INI_BOOL("dp_rx_buff_prealloc_pool", false, \
@@ -1026,6 +1046,6 @@
CFG(CFG_DP_PEER_EXT_STATS) \ CFG(CFG_DP_PEER_EXT_STATS) \
CFG(CFG_DP_RX_BUFF_POOL_ENABLE) \ CFG(CFG_DP_RX_BUFF_POOL_ENABLE) \
CFG(CFG_DP_RX_PENDING_HL_THRESHOLD) \ 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_ */ #endif /* _CFG_DP_H_ */

View File

@@ -547,6 +547,8 @@ wlan_cfg_soc_attach(struct cdp_ctrl_objmgr_psoc *psoc)
cfg_get(psoc, CFG_DP_NAN_TCP_UDP_CKSUM_OFFLOAD); cfg_get(psoc, CFG_DP_NAN_TCP_UDP_CKSUM_OFFLOAD);
wlan_cfg_ctx->tcp_udp_checksumoffload = wlan_cfg_ctx->tcp_udp_checksumoffload =
cfg_get(psoc, CFG_DP_TCP_UDP_CKSUM_OFFLOAD); 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->per_pkt_trace = cfg_get(psoc, CFG_DP_PER_PKT_LOGGING);
wlan_cfg_ctx->defrag_timeout_check = wlan_cfg_ctx->defrag_timeout_check =
cfg_get(psoc, CFG_DP_DEFRAG_TIMEOUT_CHECK); cfg_get(psoc, CFG_DP_DEFRAG_TIMEOUT_CHECK);

View File

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