|
@@ -83,6 +83,7 @@
|
|
#endif
|
|
#endif
|
|
#include <wlan_hdd_hostapd.h>
|
|
#include <wlan_hdd_hostapd.h>
|
|
#include <wlan_hdd_softap_tx_rx.h>
|
|
#include <wlan_hdd_softap_tx_rx.h>
|
|
|
|
+#include <wlan_hdd_green_ap.h>
|
|
#include "cfg_api.h"
|
|
#include "cfg_api.h"
|
|
#include "qwlan_version.h"
|
|
#include "qwlan_version.h"
|
|
#include "wma_types.h"
|
|
#include "wma_types.h"
|
|
@@ -141,7 +142,6 @@
|
|
#include "wlan_reg_ucfg_api.h"
|
|
#include "wlan_reg_ucfg_api.h"
|
|
#include "wlan_ocb_ucfg_api.h"
|
|
#include "wlan_ocb_ucfg_api.h"
|
|
|
|
|
|
-#include <wlan_green_ap_ucfg_api.h>
|
|
|
|
#include <wlan_hdd_spectralscan.h>
|
|
#include <wlan_hdd_spectralscan.h>
|
|
#ifdef MODULE
|
|
#ifdef MODULE
|
|
#define WLAN_MODULE_NAME module_name(THIS_MODULE)
|
|
#define WLAN_MODULE_NAME module_name(THIS_MODULE)
|
|
@@ -312,125 +312,6 @@ void hdd_start_complete(int ret)
|
|
complete(&wlan_start_comp);
|
|
complete(&wlan_start_comp);
|
|
}
|
|
}
|
|
|
|
|
|
-/**
|
|
|
|
- * hdd_green_ap_check_enable() - to check whether to enable green ap or not
|
|
|
|
- * @hdd_ctx: hdd context
|
|
|
|
- * @enable_green_ap: 1 - enable green ap enabled, 0 - disbale green ap
|
|
|
|
- *
|
|
|
|
- * Return: 0 - success, < 0 - failure
|
|
|
|
- */
|
|
|
|
-static int hdd_green_ap_check_enable(struct hdd_context *hdd_ctx,
|
|
|
|
- bool *enable_green_ap)
|
|
|
|
-{
|
|
|
|
- uint8_t num_sessions, mode;
|
|
|
|
- QDF_STATUS status;
|
|
|
|
-
|
|
|
|
- for (mode = 0;
|
|
|
|
- mode < QDF_MAX_NO_OF_MODE;
|
|
|
|
- mode++) {
|
|
|
|
- if (mode == QDF_SAP_MODE || mode == QDF_P2P_GO_MODE)
|
|
|
|
- continue;
|
|
|
|
-
|
|
|
|
- status = policy_mgr_mode_specific_num_active_sessions(
|
|
|
|
- hdd_ctx->hdd_psoc, mode, &num_sessions);
|
|
|
|
- hdd_debug("No. of active sessions for mode: %d is %d",
|
|
|
|
- mode, num_sessions);
|
|
|
|
- if (status != QDF_STATUS_SUCCESS) {
|
|
|
|
- hdd_err("Failed to get num sessions for mode: %d",
|
|
|
|
- mode);
|
|
|
|
- return -EINVAL;
|
|
|
|
- } else if (num_sessions) {
|
|
|
|
- *enable_green_ap = false;
|
|
|
|
- return 0;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- *enable_green_ap = true;
|
|
|
|
- return 0;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-int hdd_green_ap_start_state_mc(struct hdd_context *hdd_ctx,
|
|
|
|
- enum QDF_OPMODE mode, bool is_session_start)
|
|
|
|
-{
|
|
|
|
- struct hdd_config *cfg;
|
|
|
|
- bool enable_green_ap = false;
|
|
|
|
- uint8_t num_sap_sessions = 0, num_p2p_go_sessions = 0, ret = 0;
|
|
|
|
-
|
|
|
|
- cfg = hdd_ctx->config;
|
|
|
|
- if (!cfg) {
|
|
|
|
- hdd_err("NULL hdd config");
|
|
|
|
- return -EINVAL;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (!cfg->enable2x2 || !cfg->enableGreenAP) {
|
|
|
|
- hdd_info("Green AP support not present: enable2x2: %d, enableGreenAp: %d",
|
|
|
|
- cfg->enable2x2, cfg->enableGreenAP);
|
|
|
|
- return 0;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- policy_mgr_mode_specific_num_active_sessions(hdd_ctx->hdd_psoc,
|
|
|
|
- QDF_SAP_MODE,
|
|
|
|
- &num_sap_sessions);
|
|
|
|
- policy_mgr_mode_specific_num_active_sessions(hdd_ctx->hdd_psoc,
|
|
|
|
- QDF_P2P_GO_MODE,
|
|
|
|
- &num_p2p_go_sessions);
|
|
|
|
-
|
|
|
|
- switch (mode) {
|
|
|
|
- case QDF_STA_MODE:
|
|
|
|
- case QDF_P2P_CLIENT_MODE:
|
|
|
|
- case QDF_IBSS_MODE:
|
|
|
|
- if (!num_sap_sessions && !num_p2p_go_sessions)
|
|
|
|
- return 0;
|
|
|
|
-
|
|
|
|
- if (is_session_start) {
|
|
|
|
- hdd_debug("Disabling Green AP");
|
|
|
|
- ucfg_green_ap_set_ps_config(hdd_ctx->hdd_pdev,
|
|
|
|
- false);
|
|
|
|
- wlan_green_ap_stop(hdd_ctx->hdd_pdev);
|
|
|
|
- } else {
|
|
|
|
- ret = hdd_green_ap_check_enable(hdd_ctx,
|
|
|
|
- &enable_green_ap);
|
|
|
|
- if (!ret) {
|
|
|
|
- if (enable_green_ap) {
|
|
|
|
- hdd_debug("Enabling Green AP");
|
|
|
|
- ucfg_green_ap_set_ps_config(
|
|
|
|
- hdd_ctx->hdd_pdev, true);
|
|
|
|
- wlan_green_ap_start(hdd_ctx->hdd_pdev);
|
|
|
|
- }
|
|
|
|
- } else {
|
|
|
|
- hdd_err("Failed to check Green AP enable status");
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
- case QDF_SAP_MODE:
|
|
|
|
- case QDF_P2P_GO_MODE:
|
|
|
|
- if (is_session_start) {
|
|
|
|
- ret = hdd_green_ap_check_enable(hdd_ctx,
|
|
|
|
- &enable_green_ap);
|
|
|
|
- if (!ret) {
|
|
|
|
- if (enable_green_ap) {
|
|
|
|
- hdd_debug("Enabling Green AP");
|
|
|
|
- ucfg_green_ap_set_ps_config(
|
|
|
|
- hdd_ctx->hdd_pdev, true);
|
|
|
|
- wlan_green_ap_start(hdd_ctx->hdd_pdev);
|
|
|
|
- }
|
|
|
|
- } else {
|
|
|
|
- hdd_err("Failed to check Green AP enable status");
|
|
|
|
- }
|
|
|
|
- } else {
|
|
|
|
- if (!num_sap_sessions && !num_p2p_go_sessions) {
|
|
|
|
- hdd_debug("Disabling Green AP");
|
|
|
|
- ucfg_green_ap_set_ps_config(hdd_ctx->hdd_pdev,
|
|
|
|
- false);
|
|
|
|
- wlan_green_ap_stop(hdd_ctx->hdd_pdev);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
- default:
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- return ret;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
/**
|
|
/**
|
|
* hdd_set_rps_cpu_mask - set RPS CPU mask for interfaces
|
|
* hdd_set_rps_cpu_mask - set RPS CPU mask for interfaces
|
|
* @hdd_ctx: pointer to struct hdd_context
|
|
* @hdd_ctx: pointer to struct hdd_context
|
|
@@ -1927,27 +1808,6 @@ static void hdd_update_ra_rate_limit(struct hdd_context *hdd_ctx,
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|
|
|
|
|
|
-static int hdd_green_ap_update_config(struct hdd_context *hdd_ctx)
|
|
|
|
-{
|
|
|
|
- struct green_ap_user_cfg green_ap_cfg;
|
|
|
|
- struct hdd_config *cfg = hdd_ctx->config;
|
|
|
|
- QDF_STATUS status;
|
|
|
|
-
|
|
|
|
- green_ap_cfg.host_enable_egap = cfg->enable_egap;
|
|
|
|
- green_ap_cfg.egap_inactivity_time = cfg->egap_inact_time;
|
|
|
|
- green_ap_cfg.egap_wait_time = cfg->egap_wait_time;
|
|
|
|
- green_ap_cfg.egap_feature_flags = cfg->egap_feature_flag;
|
|
|
|
-
|
|
|
|
- status = ucfg_green_ap_update_user_config(hdd_ctx->hdd_pdev,
|
|
|
|
- &green_ap_cfg);
|
|
|
|
- if (status != QDF_STATUS_SUCCESS) {
|
|
|
|
- hdd_err("failed to update green ap user configuration");
|
|
|
|
- return -EINVAL;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return 0;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
void hdd_update_tgt_cfg(void *context, void *param)
|
|
void hdd_update_tgt_cfg(void *context, void *param)
|
|
{
|
|
{
|
|
int ret;
|
|
int ret;
|
|
@@ -10193,7 +10053,7 @@ int hdd_configure_cds(struct hdd_context *hdd_ctx, struct hdd_adapter *adapter)
|
|
goto cds_disable;
|
|
goto cds_disable;
|
|
}
|
|
}
|
|
|
|
|
|
- if (ucfg_green_ap_enable_egap(hdd_ctx->hdd_pdev))
|
|
|
|
|
|
+ if (hdd_green_ap_enable_egap(hdd_ctx))
|
|
hdd_debug("enhance green ap is not enabled");
|
|
hdd_debug("enhance green ap is not enabled");
|
|
|
|
|
|
if (0 != wlan_hdd_set_wow_pulse(hdd_ctx, true))
|
|
if (0 != wlan_hdd_set_wow_pulse(hdd_ctx, true))
|