summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/cds/inc/cds_config.h1
-rw-r--r--core/dp/htt/htt_h2t.c26
-rw-r--r--core/hdd/inc/wlan_hdd_cfg.h15
-rw-r--r--core/hdd/src/wlan_hdd_cfg.c13
-rw-r--r--core/hdd/src/wlan_hdd_main.c2
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;