Browse Source

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
Ryan Hsu 9 years ago
parent
commit
cb118cf9df
3 changed files with 89 additions and 0 deletions
  1. 27 0
      core/hdd/inc/wlan_hdd_cfg.h
  2. 36 0
      core/hdd/src/wlan_hdd_cfg.c
  3. 26 0
      core/hdd/src/wlan_hdd_green_ap.c

+ 27 - 0
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;

+ 36 - 0
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,

+ 26 - 0
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;
 }
 
 /**