qcacld-3.0: Make max msdus per pkt configurable

Introduce a new parameter in the ini file for the maximum
number of MSDUs per HTT_RX_INORDERIND message.
This parameter is now sent over to the FW through the RFS
configuration message.

Change-Id: Id0057861bc172a36483804170274b202198b6824
CRs-Fixed: 2106760
This commit is contained in:
Orhan K AKYILDIZ 2017-08-11 18:00:28 -07:00 • committed by snandini
commit 30e8cbcd4f
5 changed files with 48 additions and 6 deletions

View file

@ -159,6 +159,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;
struct ol_tx_sched_wrr_ac_specs_t ac_specs[TX_WMM_AC_NUM];

View file

@ -309,6 +309,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");
@ -342,16 +344,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,

View file

@ -8567,6 +8567,20 @@ enum hdd_link_speed_rpt_type {
#define CFG_FLOW_STEERING_ENABLED_MAX (1)
#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
@ -13762,6 +13776,7 @@ struct hdd_config {
bool tso_enable;
bool lro_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 */

View file

@ -3660,6 +3660,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,
@ -6537,6 +6544,9 @@ void hdd_cfg_print(struct hdd_context *hdd_ctx)
hdd_ctx->config->tso_enable);
hdd_debug("Name = [LROEnable] value = [%d]",
hdd_ctx->config->lro_enable);
hdd_debug("Name = [%s] value = [%d]",
CFG_MAX_MSDUS_PER_RXIND_NAME,
hdd_ctx->config->max_msdus_per_rxinorderind);
hdd_debug("Name = [active_mode_offload] value = [%d]",
hdd_ctx->config->active_mode_offload);
hdd_debug("Name = [gfine_time_meas_cap] value = [%u]",

View file

@ -8280,6 +8280,8 @@ static int hdd_update_cds_config(struct hdd_context *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;