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
diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h
index a34ef7a..d37bdcd 100644
--- a/core/hdd/inc/wlan_hdd_cfg.h
+++ b/core/hdd/inc/wlan_hdd_cfg.h
@@ -1259,6 +1259,29 @@
#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 @@
#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 42c8002..b5451f3 100644
--- a/core/hdd/src/wlan_hdd_cfg.c
+++ b/core/hdd/src/wlan_hdd_cfg.c
@@ -3109,6 +3109,30 @@
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 @@
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 cfdaf06..ac61e18 100644
--- a/core/hdd/src/wlan_hdd_green_ap.c
+++ b/core/hdd/src/wlan_hdd_green_ap.c
@@ -409,6 +409,30 @@
{
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 @@
CDF_STA_MASK & hdd_ctx->concurrency_mode,
cfg->enable2x2, cfg->enableGreenAP);
}
+exit:
+ return;
}
/**