diff options
-rw-r--r-- | core/cds/inc/cds_config.h | 1 | ||||
-rw-r--r-- | core/dp/htt/htt_h2t.c | 26 | ||||
-rw-r--r-- | core/hdd/inc/wlan_hdd_cfg.h | 15 | ||||
-rw-r--r-- | core/hdd/src/wlan_hdd_cfg.c | 13 | ||||
-rw-r--r-- | core/hdd/src/wlan_hdd_main.c | 2 |
5 files changed, 51 insertions, 6 deletions
diff --git a/core/cds/inc/cds_config.h b/core/cds/inc/cds_config.h index 616cecb7ce..39829dea7e 100644 --- a/core/cds/inc/cds_config.h +++ b/core/cds/inc/cds_config.h @@ -201,6 +201,7 @@ struct cds_config_info { uint16_t self_gen_frm_pwr; enum cfg_sub_20_channel_width sub_20_channel_width; bool flow_steering_enabled; + uint8_t max_msdus_per_rxinorderind; bool self_recovery_enabled; bool fw_timeout_crash; diff --git a/core/dp/htt/htt_h2t.c b/core/dp/htt/htt_h2t.c index df0b9b2639..5117b56af3 100644 --- a/core/dp/htt/htt_h2t.c +++ b/core/dp/htt/htt_h2t.c @@ -307,6 +307,8 @@ QDF_STATUS htt_h2t_rx_ring_rfs_cfg_msg_ll(struct htt_pdev_t *pdev) struct htt_htc_pkt *pkt; qdf_nbuf_t msg; uint32_t *msg_word; + uint32_t msg_local; + struct cds_config_info *cds_cfg; QDF_TRACE(QDF_MODULE_ID_HTT, QDF_TRACE_LEVEL_INFO, "Receive flow steering configuration, disable gEnableFlowSteering(=0) in ini if FW doesnot support it\n"); @@ -340,16 +342,28 @@ QDF_STATUS htt_h2t_rx_ring_rfs_cfg_msg_ll(struct htt_pdev_t *pdev) /* rewind beyond alignment pad to get to the HTC header reserved area */ qdf_nbuf_push_head(msg, HTC_HDR_ALIGNMENT_PADDING); - *msg_word = 0; - HTT_H2T_MSG_TYPE_SET(*msg_word, HTT_H2T_MSG_TYPE_RFS_CONFIG); + msg_local = 0; + HTT_H2T_MSG_TYPE_SET(msg_local, HTT_H2T_MSG_TYPE_RFS_CONFIG); if (ol_cfg_is_flow_steering_enabled(pdev->ctrl_pdev)) { - HTT_RX_RFS_CONFIG_SET(*msg_word, 1); - QDF_TRACE(QDF_MODULE_ID_HTT, QDF_TRACE_LEVEL_INFO, - "Enable Rx flow steering\n"); + HTT_RX_RFS_CONFIG_SET(msg_local, 1); + QDF_TRACE(QDF_MODULE_ID_HTT, QDF_TRACE_LEVEL_INFO, + "Enable Rx flow steering"); } else { QDF_TRACE(QDF_MODULE_ID_HTT, QDF_TRACE_LEVEL_INFO, - "Disable Rx flow steering\n"); + "Disable Rx flow steering"); } + cds_cfg = cds_get_ini_config(); + if (cds_cfg != NULL) { + msg_local |= ((cds_cfg->max_msdus_per_rxinorderind & 0xff) + << 16); + QDF_TRACE(QDF_MODULE_ID_HTT, QDF_TRACE_LEVEL_INFO, + "Updated maxMSDUsPerRxInd"); + } + + *msg_word = msg_local; + QDF_TRACE(QDF_MODULE_ID_HTT, QDF_TRACE_LEVEL_INFO, + "%s: Sending msg_word: 0x%08x", + __func__, *msg_word); SET_HTC_PACKET_INFO_TX(&pkt->htc_pkt, htt_h2t_send_complete_free_netbuf, diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index a3c4ddd04b..5e88512d76 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -8469,6 +8469,20 @@ enum hdd_link_speed_rpt_type { #define CFG_FLOW_STEERING_ENABLED_DEFAULT (0) /* + * Max number of MSDUs per HTT RX IN ORDER INDICATION msg. + * Note that this has a direct impact on the size of source CE rings. + * It is possible to go below 8, but would require testing; so we are + * restricting the lower limit to 8 artificially + * + * It is recommended that this value is a POWER OF 2. + * + * Values lower than 8 are for experimental purposes only. + */ +#define CFG_MAX_MSDUS_PER_RXIND_NAME "maxMSDUsPerRxInd" +#define CFG_MAX_MSDUS_PER_RXIND_MIN (4) +#define CFG_MAX_MSDUS_PER_RXIND_MAX (32) +#define CFG_MAX_MSDUS_PER_RXIND_DEFAULT (32) +/* * In static display use case when APPS is in stand alone power save mode enable * active offload mode which helps FW to filter out MC/BC data packets to avoid * APPS wake up and save more power. @@ -12720,6 +12734,7 @@ struct hdd_config { bool lro_enable; bool gro_enable; bool flow_steering_enable; + uint8_t max_msdus_per_rxinorderind; bool active_mode_offload; bool bpf_packet_filter_enable; /* parameter for defer timer for enabling TDLS on p2p listen */ diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c index 71bd617318..1d252b911a 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -3711,6 +3711,13 @@ struct reg_table_entry g_registry_table[] = { CFG_FLOW_STEERING_ENABLED_MIN, CFG_FLOW_STEERING_ENABLED_MAX), + REG_VARIABLE(CFG_MAX_MSDUS_PER_RXIND_NAME, WLAN_PARAM_Integer, + struct hdd_config, max_msdus_per_rxinorderind, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_MAX_MSDUS_PER_RXIND_DEFAULT, + CFG_MAX_MSDUS_PER_RXIND_MIN, + CFG_MAX_MSDUS_PER_RXIND_MAX), + REG_VARIABLE(CFG_ACTIVE_MODE_OFFLOAD, WLAN_PARAM_Integer, struct hdd_config, active_mode_offload, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, @@ -6369,6 +6376,12 @@ void hdd_cfg_print(hdd_context_t *pHddCtx) pHddCtx->config->tso_enable); hdd_debug("Name = [LROEnable] value = [%d]", pHddCtx->config->lro_enable); + hdd_debug("Name = [%s] value = [%d]", + CFG_FLOW_STEERING_ENABLED_NAME, + pHddCtx->config->flow_steering_enable); + hdd_debug("Name = [%s] value = [%d]", + CFG_MAX_MSDUS_PER_RXIND_NAME, + pHddCtx->config->max_msdus_per_rxinorderind); hdd_debug("Name = [active_mode_offload] value = [%d]", pHddCtx->config->active_mode_offload); hdd_debug("Name = [gfine_time_meas_cap] value = [%u]", diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index 1e4c06d2c3..cf1a62fb1a 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -8287,6 +8287,8 @@ static int hdd_update_cds_config(hdd_context_t *hdd_ctx) cds_cfg->max_station = hdd_ctx->config->maxNumberOfPeers; cds_cfg->sub_20_channel_width = WLAN_SUB_20_CH_WIDTH_NONE; cds_cfg->flow_steering_enabled = hdd_ctx->config->flow_steering_enable; + cds_cfg->max_msdus_per_rxinorderind = + hdd_ctx->config->max_msdus_per_rxinorderind; cds_cfg->self_recovery_enabled = hdd_ctx->config->enableSelfRecovery; cds_cfg->fw_timeout_crash = hdd_ctx->config->fw_timeout_crash; cds_cfg->active_uc_bpf_mode = hdd_ctx->config->active_uc_bpf_mode; |