qcacld-3.0: Add ini to configure different OCE features

Add ini support to configure different OCE features
which is sent as bitmap to firmware via vdev_set_param
command.

Change-Id: I2c679a6fe902e1b41ba984ed2255eee02ed29549
CRs-Fixed: 2121585
This commit is contained in:
Yeshwanth Sriram Guntuka 2017-10-04 14:40:45 +05:30 • committed by snandini
commit 2ba6fe9132
8 changed files with 266 additions and 3 deletions

View file

@ -10996,7 +10996,10 @@ enum hdd_wext_control {
* @Max: 1
* @Default: 1
*
* This ini is used to enable/disable broadcast probe response
* This ini is used to enable/disable broadcast probe response.
* This is set only if g_is_fils_enabled is set to 1
* If this is disabled then OCE ini oce_sta_enable will also be
* disabled and OCE IE will not be sent in frames.
*
* Related: None
*
@ -13232,7 +13235,6 @@ enum hdd_external_acs_freq_band {
#define CFG_MBO_CAND_RSSI_BTC_THRESHOLD_MIN (-120)
#define CFG_MBO_CAND_RSSI_BTC_THRESHOLD_MAX (0)
/*
* <ini>
* g_enable_packet_filter_bitmap - Enable Packet filters before going into
@ -13316,6 +13318,166 @@ enum hdd_external_acs_freq_band {
#define CFG_REDUCED_BEACON_INTERVAL_MAX (100)
#define CFG_REDUCED_BEACON_INTERVAL_DEFAULT (0)
/*
* oce_enable_rssi_assoc_reject - Enable/disable rssi based assoc rejection
* @Min: 0
* @Max: 1
* @Default: 1
*
* This ini is used to enable/disable rssi based assoc rejection. If this is
* disabled then OCE ini oce_sta_enable will also be disabled and OCE IE will
* not be sent in frames.
*
* Related: None
*
* Supported Feature: OCE
*
* Usage: External
*
* </ini>
*/
#define CFG_OCE_ENABLE_RSSI_BASED_ASSOC_REJECT_NAME \
"oce_enable_rssi_assoc_reject"
#define CFG_OCE_ENABLE_RSSI_BASED_ASSOC_REJECT_MIN (0)
#define CFG_OCE_ENABLE_RSSI_BASED_ASSOC_REJECT_MAX (1)
#define CFG_OCE_ENABLE_RSSI_BASED_ASSOC_REJECT_DEFAULT (1)
/*
* <ini>
* oce_enable_probe_req_rate - Set probe request rate
* @Min: 0
* @Max: 1
* @Default: 0
*
* This ini is used to set probe request rate to 5.5Mbps as per OCE requirement
* in 2.4G band
*
* Related: None
*
* Supported Feature: OCE
*
* Usage: External
*
* </ini>
*/
#define CFG_OCE_PROBE_REQ_RATE_NAME "oce_enable_probe_req_rate"
#define CFG_OCE_PROBE_REQ_RATE_MIN (0)
#define CFG_OCE_PROBE_REQ_RATE_MAX (1)
#define CFG_OCE_PROBE_REQ_RATE_DEFAULT (0)
/*
* <ini>
* oce_enable_probe_resp_rate - Set probe response rate
* @Min: 0
* @Max: 1
* @Default: 0
*
* This ini is used to set probe response rate to 5.5Mbps as per OCE requirement
* in 2.4G band
*
* Related: None
*
* Supported Feature: OCE
*
* Usage: External
*
* </ini>
*/
#define CFG_OCE_PROBE_RSP_RATE_NAME "oce_enable_probe_resp_rate"
#define CFG_OCE_PROBE_RSP_RATE_MIN (0)
#define CFG_OCE_PROBE_RSP_RATE_MAX (1)
#define CFG_OCE_PROBE_RSP_RATE_DEFAULT (0)
/*
* <ini>
* oce_enable_beacon_rate - Set beacon rate
* @Min: 0
* @Max: 1
* @Default: 0
*
* This ini is used to set beacon rate to 5.5Mbps as per OCE requirement in
* 2.4G band
*
* Related: None
*
* Supported Feature: OCE
*
* Usage: External
*
* </ini>
*/
#define CFG_OCE_BEACON_RATE_NAME "oce_enable_beacon_rate"
#define CFG_OCE_BEACON_RATE_MIN (0)
#define CFG_OCE_BEACON_RATE_MAX (1)
#define CFG_OCE_BEACON_RATE_DEFAULT (0)
/*
* <ini>
* oce_enable_probe_req_deferral - Enable/disable probe request deferral
* @Min: 0
* @Max: 1
* @Default: 0
*
* This ini is used to enable/disable probe request deferral as per OCE spec
*
* Related: None
*
* Supported Feature: OCE
*
* Usage: External
*
* </ini>
*/
#define CFG_ENABLE_PROBE_REQ_DEFERRAL_NAME "oce_enable_probe_req_deferral"
#define CFG_ENABLE_PROBE_REQ_DEFERRAL_MIN (0)
#define CFG_ENABLE_PROBE_REQ_DEFERRAL_MAX (1)
#define CFG_ENABLE_PROBE_REQ_DEFERRAL_DEFAULT (0)
/*
* <ini>
* oce_enable_fils_discovery_sap - Enable/disable fils discovery in sap mode
* @Min: 0
* @Max: 1
* @Default: 0
*
* This ini is used to enable/disable fils discovery in sap mode
*
* Related: None
*
* Supported Feature: FILS
*
* Usage: External
*
* </ini>
*/
#define CFG_ENABLE_FILS_DISCOVERY_SAP_NAME "oce_enable_fils_discovery_sap"
#define CFG_ENABLE_FILS_DISCOVERY_SAP_MIN (0)
#define CFG_ENABLE_FILS_DISCOVERY_SAP_MAX (1)
#define CFG_ENABLE_FILS_DISCOVERY_SAP_DEFAULT (0)
/*
* <ini>
* enable_esp_for_roam - Enable/disable esp feature
* @Min: 0
* @Max: 1
* @Default: 0
*
* This ini is used to enable/disable ESP(Estimated service parameters) IE
* parsing and decides whether firmware will include this in its scoring algo.
*
* Related: None
*
* Supported Feature: STA
*
* Usage: External
*
* </ini>
*/
#define CFG_ENABLE_ESP_FEATURE_NAME "enable_esp_for_roam"
#define CFG_ENABLE_ESP_FEATURE_MIN (0)
#define CFG_ENABLE_ESP_FEATURE_MAX (1)
#define CFG_ENABLE_ESP_FEATURE_DEFAULT (0)
/*
* Type declarations
*/
@ -14182,6 +14344,13 @@ struct hdd_config {
uint8_t enable_phy_reg_retention;
uint8_t dfs_beacon_tx_enhanced;
uint16_t reduced_beacon_interval;
bool rssi_assoc_reject_enabled;
bool oce_probe_req_rate_enabled;
bool oce_probe_resp_rate_enabled;
bool oce_beacon_rate_enabled;
bool probe_req_deferral_enabled;
bool fils_discovery_sap_enabled;
bool esp_for_roam_enabled;
};
#define VAR_OFFSET(_Struct, _Var) (offsetof(_Struct, _Var))

View file

@ -5229,6 +5229,57 @@ struct reg_table_entry g_registry_table[] = {
CFG_REDUCED_BEACON_INTERVAL_DEFAULT,
CFG_REDUCED_BEACON_INTERVAL_MIN,
CFG_REDUCED_BEACON_INTERVAL_MAX),
REG_VARIABLE(CFG_OCE_ENABLE_RSSI_BASED_ASSOC_REJECT_NAME,
WLAN_PARAM_Integer, struct hdd_config,
rssi_assoc_reject_enabled,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
CFG_OCE_ENABLE_RSSI_BASED_ASSOC_REJECT_DEFAULT,
CFG_OCE_ENABLE_RSSI_BASED_ASSOC_REJECT_MIN,
CFG_OCE_ENABLE_RSSI_BASED_ASSOC_REJECT_MAX),
REG_VARIABLE(CFG_OCE_PROBE_REQ_RATE_NAME, WLAN_PARAM_Integer,
struct hdd_config, oce_probe_req_rate_enabled,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
CFG_OCE_PROBE_REQ_RATE_DEFAULT,
CFG_OCE_PROBE_REQ_RATE_MIN,
CFG_OCE_PROBE_REQ_RATE_MAX),
REG_VARIABLE(CFG_OCE_PROBE_RSP_RATE_NAME, WLAN_PARAM_Integer,
struct hdd_config, oce_probe_resp_rate_enabled,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
CFG_OCE_PROBE_RSP_RATE_DEFAULT,
CFG_OCE_PROBE_RSP_RATE_MIN,
CFG_OCE_PROBE_RSP_RATE_MAX),
REG_VARIABLE(CFG_OCE_BEACON_RATE_NAME, WLAN_PARAM_Integer,
struct hdd_config, oce_beacon_rate_enabled,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
CFG_OCE_BEACON_RATE_DEFAULT,
CFG_OCE_BEACON_RATE_MIN,
CFG_OCE_BEACON_RATE_MAX),
REG_VARIABLE(CFG_ENABLE_PROBE_REQ_DEFERRAL_NAME, WLAN_PARAM_Integer,
struct hdd_config, probe_req_deferral_enabled,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
CFG_ENABLE_PROBE_REQ_DEFERRAL_DEFAULT,
CFG_ENABLE_PROBE_REQ_DEFERRAL_MIN,
CFG_ENABLE_PROBE_REQ_DEFERRAL_MAX),
REG_VARIABLE(CFG_ENABLE_FILS_DISCOVERY_SAP_NAME, WLAN_PARAM_Integer,
struct hdd_config, fils_discovery_sap_enabled,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
CFG_ENABLE_FILS_DISCOVERY_SAP_DEFAULT,
CFG_ENABLE_FILS_DISCOVERY_SAP_MIN,
CFG_ENABLE_FILS_DISCOVERY_SAP_MAX),
REG_VARIABLE(CFG_ENABLE_ESP_FEATURE_NAME, WLAN_PARAM_Integer,
struct hdd_config, esp_for_roam_enabled,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
CFG_ENABLE_ESP_FEATURE_DEFAULT,
CFG_ENABLE_ESP_FEATURE_MIN,
CFG_ENABLE_ESP_FEATURE_MAX),
};
@ -8432,7 +8483,7 @@ QDF_STATUS hdd_set_sme_config(struct hdd_context *hdd_ctx)
{
QDF_STATUS status = QDF_STATUS_SUCCESS;
tSmeConfigParams *smeConfig;
uint8_t rrm_capab_len;
uint8_t rrm_capab_len, val;
struct hdd_config *pConfig = hdd_ctx->config;
@ -8828,6 +8879,21 @@ QDF_STATUS hdd_set_sme_config(struct hdd_context *hdd_ctx)
hdd_ctx->config->num_11b_tx_chains;
smeConfig->csrConfig.num_11ag_tx_chains =
hdd_ctx->config->num_11ag_tx_chains;
val = (pConfig->oce_probe_req_rate_enabled *
WMI_VDEV_OCE_PROBE_REQUEST_RATE_FEATURE_BITMAP) +
(pConfig->oce_probe_resp_rate_enabled *
WMI_VDEV_OCE_PROBE_RESPONSE_RATE_FEATURE_BITMAP) +
(pConfig->oce_beacon_rate_enabled *
WMI_VDEV_OCE_BEACON_RATE_FEATURE_BITMAP) +
(pConfig->probe_req_deferral_enabled *
WMI_VDEV_OCE_PROBE_REQUEST_DEFERRAL_FEATURE_BITMAP) +
(pConfig->fils_discovery_sap_enabled *
WMI_VDEV_OCE_FILS_DISCOVERY_FRAME_FEATURE_BITMAP) +
(pConfig->esp_for_roam_enabled *
WMI_VDEV_OCE_ESP_FEATURE_BITMAP) +
(pConfig->rssi_assoc_reject_enabled *
WMI_VDEV_OCE_REASSOC_REJECT_FEATURE_BITMAP);
smeConfig->csrConfig.oce_feature_bitmap = val;
hdd_update_bss_score_params(hdd_ctx->config,
&smeConfig->csrConfig.bss_score_params);

View file

@ -7631,6 +7631,14 @@ static void hdd_override_ini_config(struct hdd_context *hdd_ctx)
if (!hdd_ipa_is_present(hdd_ctx))
hdd_ctx->config->IpaConfig = 0;
if (!hdd_ctx->config->rssi_assoc_reject_enabled ||
!hdd_ctx->config->enable_bcast_probe_rsp) {
hdd_debug("OCE disabled, rssi_assoc_reject_enabled: %d enable_bcast_probe_rsp: %d",
hdd_ctx->config->rssi_assoc_reject_enabled,
hdd_ctx->config->enable_bcast_probe_rsp);
hdd_ctx->config->oce_sta_enabled = 0;
}
}
/**

View file

@ -1354,6 +1354,7 @@ typedef struct tagCsrConfigParam {
uint32_t rssi_channel_penalization;
uint32_t num_disallowed_aps;
struct sir_score_config bss_score_params;
uint8_t oce_feature_bitmap;
} tCsrConfigParam;
/* Tush */

View file

@ -631,6 +631,7 @@ struct csr_config {
uint32_t rssi_channel_penalization;
uint32_t num_disallowed_aps;
struct sir_score_config bss_score_params;
uint8_t oce_feature_bitmap;
};
struct csr_channel_powerinfo {

View file

@ -2938,6 +2938,8 @@ QDF_STATUS csr_change_default_config_param(tpAniSirGlobal pMac,
pParam->rssi_channel_penalization;
pMac->roam.configParam.num_disallowed_aps =
pParam->num_disallowed_aps;
pMac->roam.configParam.oce_feature_bitmap =
pParam->oce_feature_bitmap;
qdf_mem_copy(&pMac->roam.configParam.bss_score_params,
&pParam->bss_score_params,
@ -3197,6 +3199,8 @@ QDF_STATUS csr_get_config_param(tpAniSirGlobal pMac, tCsrConfigParam *pParam)
pMac->roam.configParam.rssi_channel_penalization;
pParam->num_disallowed_aps =
pMac->roam.configParam.num_disallowed_aps;
pParam->oce_feature_bitmap =
pMac->roam.configParam.oce_feature_bitmap;
qdf_mem_copy(&pParam->csr_mawc_config,
&pMac->roam.configParam.csr_mawc_config,
sizeof(pParam->csr_mawc_config));
@ -16270,6 +16274,8 @@ QDF_STATUS csr_issue_add_sta_for_session_req(tpAniSirGlobal pMac,
pMac->roam.configParam.fils_max_chan_guard_time;
add_sta_self_req->pkt_err_disconn_th =
pMac->roam.configParam.pkt_err_disconn_th;
add_sta_self_req->oce_feature_bitmap =
pMac->roam.configParam.oce_feature_bitmap;
msg.type = WMA_ADD_STA_SELF_REQ;
msg.reserved = 0;
msg.bodyptr = add_sta_self_req;

View file

@ -1192,6 +1192,7 @@ struct add_sta_self_params {
bool enable_bcast_probe_rsp;
uint8_t fils_max_chan_guard_time;
uint16_t pkt_err_disconn_th;
uint8_t oce_feature_bitmap;
};
/**

View file

@ -2220,6 +2220,17 @@ struct cdp_vdev *wma_vdev_attach(tp_wma_handle wma_handle,
WMA_LOGE("Failed to set WMI_VDEV_PARAM_REPEAT_PROBE_TIME");
}
if ((self_sta_req->type == WMI_VDEV_TYPE_STA ||
self_sta_req->type == WMI_VDEV_TYPE_AP) &&
self_sta_req->sub_type == 0) {
ret = wma_vdev_set_param(wma_handle->wmi_handle,
self_sta_req->session_id,
WMI_VDEV_PARAM_ENABLE_DISABLE_OCE_FEATURES,
self_sta_req->oce_feature_bitmap);
if (QDF_IS_STATUS_ERROR(ret))
WMA_LOGE("Failed to set WMI_VDEV_PARAM_ENABLE_DISABLE_OCE_FEATURES");
}
/* Initialize BMISS parameters */
if ((self_sta_req->type == WMI_VDEV_TYPE_STA) &&
(self_sta_req->sub_type == 0))