qcacld-3.0: hdd: Add EGAP interface and ini configuration

qcacld-2.0 to qcacld-3.0 propagation

This change introduces 4 ini parameters to configure to firmware
    - gEenableEGAP:   forcely overwrite firmware feature capb
    - gEGAPInactTime: inactivity timeout value
    - gEGAPWaitTime:  wait timeout value before enter EGAP mode
    - gEGAPFeatures:  the feature flag firmware would support
        WMI_AP_PS_EGAP_F_ENABLE_PHYERR_DETECTION       0x1
        WMI_AP_PS_EGAP_F_ENABLE_PWRSAVE_BY_PS_STATE    0x2
        WMI_AP_PS_EGAP_F_ENABLE_PWRSAVE_BY_INACTIVITY  0x4

Integrate the hdd_wlan_kick_green_ap to execute the Green AP
and EGAP features, depending on the ini and also the tgt_cfg
capability flag,

Change-Id: Ic5db3990aa0a028ed700f6e2f60a11e75c0f1ed1
CRs-fixed: 929063
This commit is contained in:
Ryan Hsu 2015-11-09 16:03:53 -08:00 • committed by Akash Patel
commit cb118cf9df
3 changed files with 89 additions and 0 deletions

View file

@ -1259,6 +1259,29 @@ typedef enum {
#define CFG_ENABLE_GREEN_AP_FEATURE_MIN (0)
#define CFG_ENABLE_GREEN_AP_FEATURE_MAX (1)
#define CFG_ENABLE_GREEN_AP_FEATURE_DEFAULT (1)
/* Enhanced Green AP (EGAP) flags/params */
#define CFG_ENABLE_EGAP_ENABLE_FEATURE "gEnableEGAP"
#define CFG_ENABLE_EGAP_ENABLE_FEATURE_MIN (0)
#define CFG_ENABLE_EGAP_ENABLE_FEATURE_MAX (1)
#define CFG_ENABLE_EGAP_ENABLE_FEATURE_DEFAULT (0)
#define CFG_ENABLE_EGAP_INACT_TIME_FEATURE "gEGAPInactTime"
#define CFG_ENABLE_EGAP_INACT_TIME_FEATURE_MIN (0)
#define CFG_ENABLE_EGAP_INACT_TIME_FEATURE_MAX (5000)
#define CFG_ENABLE_EGAP_INACT_TIME_FEATURE_DEFAULT (1000)
#define CFG_ENABLE_EGAP_WAIT_TIME_FEATURE "gEGAPWaitTime"
#define CFG_ENABLE_EGAP_WAIT_TIME_FEATURE_MIN (0)
#define CFG_ENABLE_EGAP_WAIT_TIME_FEATURE_MAX (5000)
#define CFG_ENABLE_EGAP_WAIT_TIME_FEATURE_DEFAULT (100)
#define CFG_ENABLE_EGAP_FLAGS_FEATURE "gEGAPFeatures"
#define CFG_ENABLE_EGAP_FLAGS_FEATURE_MIN (0)
#define CFG_ENABLE_EGAP_FLAGS_FEATURE_MAX (15)
#define CFG_ENABLE_EGAP_FLAGS_FEATURE_DEFAULT (7)
/* end Enhanced Green AP flags/params */
#endif
#ifdef FEATURE_WLAN_FORCE_SAP_SCC
@ -3302,6 +3325,10 @@ struct hdd_config {
#ifdef FEATURE_GREEN_AP
bool enableGreenAP;
bool enable_egap;
uint32_t egap_feature_flag;
uint32_t egap_inact_time;
uint32_t egap_wait_time;
#endif
uint8_t force_sap_acs;
uint8_t force_sap_acs_st_ch;

View file

@ -3109,6 +3109,30 @@ REG_TABLE_ENTRY g_registry_table[] = {
CFG_ENABLE_GREEN_AP_FEATURE_DEFAULT,
CFG_ENABLE_GREEN_AP_FEATURE_MIN,
CFG_ENABLE_GREEN_AP_FEATURE_MAX),
REG_VARIABLE(CFG_ENABLE_EGAP_ENABLE_FEATURE, WLAN_PARAM_Integer,
struct hdd_config, enable_egap,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
CFG_ENABLE_EGAP_ENABLE_FEATURE_DEFAULT,
CFG_ENABLE_EGAP_ENABLE_FEATURE_MIN,
CFG_ENABLE_EGAP_ENABLE_FEATURE_MAX),
REG_VARIABLE(CFG_ENABLE_EGAP_INACT_TIME_FEATURE, WLAN_PARAM_Integer,
struct hdd_config, egap_inact_time,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
CFG_ENABLE_EGAP_INACT_TIME_FEATURE_DEFAULT,
CFG_ENABLE_EGAP_INACT_TIME_FEATURE_MIN,
CFG_ENABLE_EGAP_INACT_TIME_FEATURE_MAX),
REG_VARIABLE(CFG_ENABLE_EGAP_WAIT_TIME_FEATURE, WLAN_PARAM_Integer,
struct hdd_config, egap_wait_time,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
CFG_ENABLE_EGAP_WAIT_TIME_FEATURE_DEFAULT,
CFG_ENABLE_EGAP_WAIT_TIME_FEATURE_MIN,
CFG_ENABLE_EGAP_WAIT_TIME_FEATURE_MAX),
REG_VARIABLE(CFG_ENABLE_EGAP_FLAGS_FEATURE, WLAN_PARAM_Integer,
struct hdd_config, egap_feature_flag,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
CFG_ENABLE_EGAP_FLAGS_FEATURE_DEFAULT,
CFG_ENABLE_EGAP_FLAGS_FEATURE_MIN,
CFG_ENABLE_EGAP_FLAGS_FEATURE_MAX),
#endif
REG_VARIABLE(CFG_IGNORE_CAC_NAME, WLAN_PARAM_Integer,
@ -5032,6 +5056,18 @@ void hdd_cfg_print(hdd_context_t *pHddCtx)
CDF_TRACE(CDF_MODULE_ID_HDD, CDF_TRACE_LEVEL_INFO_HIGH,
"Name = [gEnableGreenAp] Value = [%u] ",
pHddCtx->config->enableGreenAP);
CDF_TRACE(CDF_MODULE_ID_HDD, CDF_TRACE_LEVEL_INFO_HIGH,
"Name = [gEenableEGAP] Value = [%u] ",
pHddCtx->config->enable_egap);
CDF_TRACE(CDF_MODULE_ID_HDD, CDF_TRACE_LEVEL_INFO_HIGH,
"Name = [gEGAPInactTime] Value = [%u] ",
pHddCtx->config->egap_inact_time);
CDF_TRACE(CDF_MODULE_ID_HDD, CDF_TRACE_LEVEL_INFO_HIGH,
"Name = [gEGAPWaitTime] Value = [%u] ",
pHddCtx->config->egap_wait_time);
CDF_TRACE(CDF_MODULE_ID_HDD, CDF_TRACE_LEVEL_INFO_HIGH,
"Name = [gEGAPFeatures] Value = [%u] ",
pHddCtx->config->egap_feature_flag);
#endif
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
CDF_TRACE(CDF_MODULE_ID_HDD, CDF_TRACE_LEVEL_INFO_HIGH,

View file

@ -409,6 +409,30 @@ void hdd_wlan_green_ap_start_bss(struct hdd_context_s *hdd_ctx)
{
struct hdd_config *cfg = hdd_ctx->config;
/* check if the firmware and ini are both enabled the egap,
* and also the feature_flag enable, then we enable the egap
*/
if (hdd_ctx->green_ap_ctx->egap_support && cfg->enable_egap &&
cfg->egap_feature_flag) {
hddLog(LOG1,
FL("Set EGAP - enabled: %d, flag: %x, inact_time: %d, wait_time: %d"),
cfg->enable_egap,
cfg->egap_feature_flag,
cfg->egap_inact_time,
cfg->egap_wait_time);
if (!sme_send_egap_conf_params(cfg->enable_egap,
cfg->egap_inact_time,
cfg->egap_wait_time,
cfg->egap_feature_flag)) {
/* EGAP is enabled, disable host GAP */
hdd_wlan_green_ap_mc(hdd_ctx, GREEN_AP_PS_STOP_EVENT);
goto exit;
}
/* fall through, if send_egap_conf_params() failed,
* then check host GAP and enable it accordingly
*/
}
if (!(CDF_STA_MASK & hdd_ctx->concurrency_mode) &&
cfg->enable2x2 && cfg->enableGreenAP) {
hdd_wlan_green_ap_mc(hdd_ctx, GREEN_AP_PS_START_EVENT);
@ -418,6 +442,8 @@ void hdd_wlan_green_ap_start_bss(struct hdd_context_s *hdd_ctx)
CDF_STA_MASK & hdd_ctx->concurrency_mode,
cfg->enable2x2, cfg->enableGreenAP);
}
exit:
return;
}
/**