From cb118cf9dfbcd363510366cb0f2d5a84a76655c8 Mon Sep 17 00:00:00 2001 From: Ryan Hsu Date: Mon, 9 Nov 2015 16:03:53 -0800 Subject: [PATCH] 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 --- core/hdd/inc/wlan_hdd_cfg.h | 27 ++++++++++++++++++++++++ core/hdd/src/wlan_hdd_cfg.c | 36 ++++++++++++++++++++++++++++++++ core/hdd/src/wlan_hdd_green_ap.c | 26 +++++++++++++++++++++++ 3 files changed, 89 insertions(+) diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index a34ef7ae9fe3..d37bdcdeb80d 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -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; diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c index 42c8002becfa..b5451f3fa17c 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -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, diff --git a/core/hdd/src/wlan_hdd_green_ap.c b/core/hdd/src/wlan_hdd_green_ap.c index cfdaf06a062b..ac61e1898893 100644 --- a/core/hdd/src/wlan_hdd_green_ap.c +++ b/core/hdd/src/wlan_hdd_green_ap.c @@ -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; } /**