qcacld-3.0: Rename gEnablePowerSaveOffload to gAdvancedPowerSaveMode
gEnablePowerSaveOffload is confusing, so change it to gAdvancedPowerSaveMode. Value 0: Disable advanced power save Value 1: Enable advanced power save Change-Id: Ib5593ef31eedacdc232ffbad183974e2cd847e83 CRs-Fixed: 2676664
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2017-2018 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2017-2018, 2020 The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and/or distribute this software for
|
* Permission to use, copy, modify, and/or distribute this software for
|
||||||
* any purpose with or without fee is hereby granted, provided that the
|
* any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -216,45 +216,6 @@ pmo_core_psoc_get_power_save_mode(struct wlan_objmgr_psoc *psoc)
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* pmo_core_psoc_get_qpower_config() - get qpower configuration
|
|
||||||
* @psoc: objmgr psoc handle
|
|
||||||
*
|
|
||||||
* Power Save Offload configuration:
|
|
||||||
* 0 -> Power save offload is disabled
|
|
||||||
* 1 -> Legacy Power save enabled + Deep sleep Disabled
|
|
||||||
* 2 -> QPower enabled + Deep sleep Disabled
|
|
||||||
* 3 -> Legacy Power save enabled + Deep sleep Enabled
|
|
||||||
* 4 -> QPower enabled + Deep sleep Enabled
|
|
||||||
* 5 -> Duty cycling QPower enabled
|
|
||||||
*
|
|
||||||
* Return: enum powersave_qpower_mode with below values
|
|
||||||
* QPOWER_DISABLED if QPOWER is disabled
|
|
||||||
* QPOWER_ENABLED if QPOWER is enabled
|
|
||||||
* QPOWER_DUTY_CYCLING if DUTY CYCLING QPOWER is enabled
|
|
||||||
*/
|
|
||||||
static inline
|
|
||||||
enum pmo_power_save_qpower_mode pmo_core_psoc_get_qpower_config(
|
|
||||||
struct wlan_objmgr_psoc *psoc)
|
|
||||||
{
|
|
||||||
uint8_t ps_mode = pmo_core_psoc_get_power_save_mode(psoc);
|
|
||||||
|
|
||||||
switch (ps_mode) {
|
|
||||||
case pmo_ps_qpower_no_deep_sleep:
|
|
||||||
case pmo_ps_qpower_deep_sleep:
|
|
||||||
pmo_debug("QPOWER is enabled in power save mode %d", ps_mode);
|
|
||||||
return pmo_qpower_enabled;
|
|
||||||
case pmo_ps_duty_cycling_qpower:
|
|
||||||
pmo_debug("DUTY cycling QPOWER is enabled in power save mode %d",
|
|
||||||
ps_mode);
|
|
||||||
return pmo_qpower_duty_cycling;
|
|
||||||
default:
|
|
||||||
pmo_debug("QPOWER is disabled in power save mode %d",
|
|
||||||
ps_mode);
|
|
||||||
return pmo_qpower_disabled;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* pmo_core_vdev_get_pause_bitmap() - Get vdev pause bitmap
|
* pmo_core_vdev_get_pause_bitmap() - Get vdev pause bitmap
|
||||||
* @psoc_ctx: psoc priv ctx
|
* @psoc_ctx: psoc priv ctx
|
||||||
|
@@ -183,7 +183,7 @@ static void wlan_pmo_init_cfg(struct wlan_objmgr_psoc *psoc,
|
|||||||
psoc_cfg->sta_dynamic_dtim = cfg_get(psoc, CFG_PMO_ENABLE_DYNAMIC_DTIM);
|
psoc_cfg->sta_dynamic_dtim = cfg_get(psoc, CFG_PMO_ENABLE_DYNAMIC_DTIM);
|
||||||
psoc_cfg->sta_mod_dtim = cfg_get(psoc, CFG_PMO_ENABLE_MODULATED_DTIM);
|
psoc_cfg->sta_mod_dtim = cfg_get(psoc, CFG_PMO_ENABLE_MODULATED_DTIM);
|
||||||
psoc_cfg->enable_mc_list = cfg_get(psoc, CFG_PMO_MC_ADDR_LIST_ENABLE);
|
psoc_cfg->enable_mc_list = cfg_get(psoc, CFG_PMO_MC_ADDR_LIST_ENABLE);
|
||||||
psoc_cfg->power_save_mode = cfg_get(psoc, CFG_PMO_POWERSAVE_OFFLOAD);
|
psoc_cfg->power_save_mode = cfg_get(psoc, CFG_PMO_POWERSAVE_MODE);
|
||||||
psoc_cfg->max_ps_poll = cfg_get(psoc, CFG_PMO_MAX_PS_POLL);
|
psoc_cfg->max_ps_poll = cfg_get(psoc, CFG_PMO_MAX_PS_POLL);
|
||||||
|
|
||||||
psoc_cfg->wow_enable = cfg_get(psoc, CFG_PMO_WOW_ENABLE);
|
psoc_cfg->wow_enable = cfg_get(psoc, CFG_PMO_WOW_ENABLE);
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2012-2019 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2012-2020 The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and/or distribute this software for
|
* Permission to use, copy, modify, and/or distribute this software for
|
||||||
* any purpose with or without fee is hereby granted, provided that the
|
* any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -193,35 +193,31 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* <ini>
|
* <ini>
|
||||||
* gEnablePowerSaveOffload - Enable Power Save Offload
|
* gAdvancedPowerSaveMode - Advanced Power Save Mode
|
||||||
* @Min: 0
|
* @Min: 0
|
||||||
* @Max: 5
|
* @Max: 1
|
||||||
* @Default: 2
|
* @Default: 1
|
||||||
*
|
*
|
||||||
* This ini is used to set Power Save Offload configuration:
|
* This ini is used to set Advanced Power Save Mode configuration:
|
||||||
* Current values of gEnablePowerSaveOffload:
|
* Current values of gAdvancedPowerSaveMode:
|
||||||
* 0 -> Power save offload is disabled
|
* 0 -> Disable advanced power save
|
||||||
* 1 -> Legacy Power save enabled + Deep sleep Disabled
|
* 1 -> Enable advanced power save
|
||||||
* 2 -> QPower enabled + Deep sleep Disabled
|
|
||||||
* 3 -> Legacy Power save enabled + Deep sleep Enabled
|
|
||||||
* 4 -> QPower enabled + Deep sleep Enabled
|
|
||||||
* 5 -> Duty cycling QPower enabled
|
|
||||||
*
|
*
|
||||||
* Related: None
|
* Related: None
|
||||||
*
|
*
|
||||||
* Supported Feature: Power Save
|
* Supported Feature: Advanced Power Save
|
||||||
*
|
*
|
||||||
* Usage: External
|
* Usage: External
|
||||||
*
|
*
|
||||||
* </ini>
|
* </ini>
|
||||||
*/
|
*/
|
||||||
#define CFG_PMO_POWERSAVE_OFFLOAD CFG_INI_UINT( \
|
#define CFG_PMO_POWERSAVE_MODE CFG_INI_UINT( \
|
||||||
"gEnablePowerSaveOffload", \
|
"gAdvancedPowerSaveMode", \
|
||||||
0, \
|
0, \
|
||||||
5, \
|
1, \
|
||||||
2, \
|
1, \
|
||||||
CFG_VALUE_OR_DEFAULT, \
|
CFG_VALUE_OR_DEFAULT, \
|
||||||
"Enable Power Save Offload")
|
"Advanced Power Save Mode")
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* <ini>
|
* <ini>
|
||||||
@@ -429,7 +425,7 @@
|
|||||||
CFG(CFG_PMO_ENABLE_DYNAMIC_DTIM) \
|
CFG(CFG_PMO_ENABLE_DYNAMIC_DTIM) \
|
||||||
CFG(CFG_PMO_ENABLE_MODULATED_DTIM) \
|
CFG(CFG_PMO_ENABLE_MODULATED_DTIM) \
|
||||||
CFG(CFG_PMO_MC_ADDR_LIST_ENABLE) \
|
CFG(CFG_PMO_MC_ADDR_LIST_ENABLE) \
|
||||||
CFG(CFG_PMO_POWERSAVE_OFFLOAD) \
|
CFG(CFG_PMO_POWERSAVE_MODE) \
|
||||||
CFG(CFG_PMO_MAX_PS_POLL) \
|
CFG(CFG_PMO_MAX_PS_POLL) \
|
||||||
CFG(CFG_PMO_WOWLAN_DEAUTH_ENABLE) \
|
CFG(CFG_PMO_WOWLAN_DEAUTH_ENABLE) \
|
||||||
CFG(CFG_PMO_WOWLAN_DISASSOC_ENABLE) \
|
CFG(CFG_PMO_WOWLAN_DISASSOC_ENABLE) \
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2017-2019 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2017-2020 The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and/or distribute this software for
|
* Permission to use, copy, modify, and/or distribute this software for
|
||||||
* any purpose with or without fee is hereby granted, provided that the
|
* any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -85,11 +85,11 @@ enum pmo_beacon_dtim_policy {
|
|||||||
* @pmo_sta_ps_param_inactivity_time: TX/RX inactivity time in msec before
|
* @pmo_sta_ps_param_inactivity_time: TX/RX inactivity time in msec before
|
||||||
going to sleep.
|
going to sleep.
|
||||||
* @pmo_sta_ps_param_uapsd: Set uapsd configuration.
|
* @pmo_sta_ps_param_uapsd: Set uapsd configuration.
|
||||||
* @pmo_sta_ps_param_qpower_pspoll_count: No of PS-Poll to send before
|
* @pmo_sta_ps_param_advanced_power_pspoll_count: No of PS-Poll to send before
|
||||||
STA wakes up in QPower Mode.
|
STA wakes up in Advanced Power Save Mode.
|
||||||
* @pmo_sta_ps_enable_qpower: Enable QPower
|
* @pmo_sta_ps_enable_advanced_power: Enable Advanced Power Save
|
||||||
* @pmo_sta_ps_param_qpower_max_tx_before_wake: Number of TX frames before the
|
* @pmo_sta_ps_param_advanced_power_max_tx_before_wake: Number of TX frames
|
||||||
entering the Active state
|
before the entering the Active state
|
||||||
* @pmo_sta_ps_param_ito_repeat_count: Indicates ito repeated count
|
* @pmo_sta_ps_param_ito_repeat_count: Indicates ito repeated count
|
||||||
*/
|
*/
|
||||||
enum pmo_sta_powersave_param {
|
enum pmo_sta_powersave_param {
|
||||||
@@ -98,42 +98,12 @@ enum pmo_sta_powersave_param {
|
|||||||
pmo_sta_ps_param_pspoll_count = 2,
|
pmo_sta_ps_param_pspoll_count = 2,
|
||||||
pmo_sta_ps_param_inactivity_time = 3,
|
pmo_sta_ps_param_inactivity_time = 3,
|
||||||
pmo_sta_ps_param_uapsd = 4,
|
pmo_sta_ps_param_uapsd = 4,
|
||||||
pmo_sta_ps_param_qpower_pspoll_count = 5,
|
pmo_sta_ps_param_advanced_power_pspoll_count = 5,
|
||||||
pmo_sta_ps_enable_qpower = 6,
|
pmo_sta_ps_enable_advanced_power = 6,
|
||||||
pmo_sta_ps_param_qpower_max_tx_before_wake = 7,
|
pmo_sta_ps_param_advanced_power_max_tx_before_wake = 7,
|
||||||
pmo_sta_ps_param_ito_repeat_count = 8,
|
pmo_sta_ps_param_ito_repeat_count = 8,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* enum powersave_qpower_mode: QPOWER modes
|
|
||||||
* @pmo_qpower_disabled: Qpower is disabled
|
|
||||||
* @pmo_qpower_enabled: Qpower is enabled
|
|
||||||
* @pmo_qpower_duty_cycling: Qpower is enabled with duty cycling
|
|
||||||
*/
|
|
||||||
enum pmo_power_save_qpower_mode {
|
|
||||||
pmo_qpower_disabled = 0,
|
|
||||||
pmo_qpower_enabled = 1,
|
|
||||||
pmo_qpower_duty_cycling = 2
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* enum powersave_qpower_mode: powersave_mode
|
|
||||||
* @pmo_ps_not_supported: Power save is not supported
|
|
||||||
* @pmo_ps_legacy_no_deep_sleep: Legacy pwr save enabled and deep sleep disabled
|
|
||||||
* @pmo_ps_qpower_no_deep_sleep: QPOWER enabled and deep sleep disabled
|
|
||||||
* @pmo_ps_legacy_deep_sleep: Legacy power save enabled and deep sleep enabled
|
|
||||||
* @pmo_ps_qpower_deep_sleep: QPOWER enabled and deep sleep enabled
|
|
||||||
* @pmo_ps_duty_cycling_qpower: QPOWER enabled in duty cycling mode
|
|
||||||
*/
|
|
||||||
enum pmo_powersave_mode {
|
|
||||||
pmo_ps_not_supported = 0,
|
|
||||||
pmo_ps_legacy_no_deep_sleep = 1,
|
|
||||||
pmo_ps_qpower_no_deep_sleep = 2,
|
|
||||||
pmo_ps_legacy_deep_sleep = 3,
|
|
||||||
pmo_ps_qpower_deep_sleep = 4,
|
|
||||||
pmo_ps_duty_cycling_qpower = 5
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* enum wow_resume_trigger - resume trigger override setting values
|
* enum wow_resume_trigger - resume trigger override setting values
|
||||||
* @PMO_WOW_RESUME_TRIGGER_DEFAULT: fw to use platform default resume trigger
|
* @PMO_WOW_RESUME_TRIGGER_DEFAULT: fw to use platform default resume trigger
|
||||||
@@ -183,21 +153,13 @@ enum pmo_wow_enable_type {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* enum powersave_qpower_mode: powersave_mode
|
* enum powersave_mode - powersave_mode
|
||||||
* @PS_NOT_SUPPORTED: Power save is not supported
|
* @PMO_PS_ADVANCED_POWER_SAVE_DISABLE: Disable advanced power save mode
|
||||||
* @PS_LEGACY_NODEEPSLEEP: Legacy power save enabled and deep sleep disabled
|
* @PMO_PS_ADVANCED_POWER_SAVE_ENABLE: Enable power save mode
|
||||||
* @PS_QPOWER_NODEEPSLEEP: QPOWER enabled and deep sleep disabled
|
|
||||||
* @PS_LEGACY_DEEPSLEEP: Legacy power save enabled and deep sleep enabled
|
|
||||||
* @PS_QPOWER_DEEPSLEEP: QPOWER enabled and deep sleep enabled
|
|
||||||
* @PS_DUTY_CYCLING_QPOWER: QPOWER enabled in duty cycling mode
|
|
||||||
*/
|
*/
|
||||||
enum powersave_mode {
|
enum powersave_mode {
|
||||||
PS_NOT_SUPPORTED = 0,
|
PMO_PS_ADVANCED_POWER_SAVE_DISABLE = 0,
|
||||||
PS_LEGACY_NODEEPSLEEP = 1,
|
PMO_PS_ADVANCED_POWER_SAVE_ENABLE = 1
|
||||||
PS_QPOWER_NODEEPSLEEP = 2,
|
|
||||||
PS_LEGACY_DEEPSLEEP = 3,
|
|
||||||
PS_QPOWER_DEEPSLEEP = 4,
|
|
||||||
PS_DUTY_CYCLING_QPOWER = 5
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#define PMO_TARGET_SUSPEND_TIMEOUT 6000
|
#define PMO_TARGET_SUSPEND_TIMEOUT 6000
|
||||||
|
@@ -713,20 +713,13 @@ ucfg_pmo_get_max_ps_poll(struct wlan_objmgr_psoc *psoc)
|
|||||||
uint8_t
|
uint8_t
|
||||||
ucfg_pmo_power_save_offload_enabled(struct wlan_objmgr_psoc *psoc)
|
ucfg_pmo_power_save_offload_enabled(struct wlan_objmgr_psoc *psoc)
|
||||||
{
|
{
|
||||||
uint8_t powersave_offload_enabled;
|
uint8_t powersave_offload_enabled = PMO_PS_ADVANCED_POWER_SAVE_ENABLE;
|
||||||
struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
|
struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
|
||||||
|
|
||||||
if (!pmo_psoc_ctx->psoc_cfg.max_ps_poll ||
|
if (!pmo_psoc_ctx->psoc_cfg.max_ps_poll ||
|
||||||
!pmo_psoc_ctx->psoc_cfg.power_save_mode)
|
!pmo_psoc_ctx->psoc_cfg.power_save_mode)
|
||||||
powersave_offload_enabled =
|
powersave_offload_enabled =
|
||||||
pmo_psoc_ctx->psoc_cfg.power_save_mode;
|
pmo_psoc_ctx->psoc_cfg.power_save_mode;
|
||||||
else if ((pmo_psoc_ctx->psoc_cfg.power_save_mode ==
|
|
||||||
PS_QPOWER_NODEEPSLEEP) ||
|
|
||||||
(pmo_psoc_ctx->psoc_cfg.power_save_mode ==
|
|
||||||
PS_LEGACY_NODEEPSLEEP))
|
|
||||||
powersave_offload_enabled = PS_LEGACY_NODEEPSLEEP;
|
|
||||||
else
|
|
||||||
powersave_offload_enabled = PS_LEGACY_DEEPSLEEP;
|
|
||||||
|
|
||||||
pmo_debug("powersave offload enabled type:%d",
|
pmo_debug("powersave offload enabled type:%d",
|
||||||
powersave_offload_enabled);
|
powersave_offload_enabled);
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2017-2019 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2017-2020 The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and/or distribute this software for
|
* Permission to use, copy, modify, and/or distribute this software for
|
||||||
* any purpose with or without fee is hereby granted, provided that the
|
* any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -112,7 +112,7 @@ QDF_STATUS target_if_pmo_send_vdev_ps_param_req(
|
|||||||
* result resume right after suspend (WOW_ENABLE).
|
* result resume right after suspend (WOW_ENABLE).
|
||||||
*/
|
*/
|
||||||
switch (param_id) {
|
switch (param_id) {
|
||||||
case pmo_sta_ps_enable_qpower:
|
case pmo_sta_ps_enable_advanced_power:
|
||||||
param_id = WMI_STA_PS_ENABLE_QPOWER;
|
param_id = WMI_STA_PS_ENABLE_QPOWER;
|
||||||
break;
|
break;
|
||||||
case pmo_sta_ps_param_inactivity_time:
|
case pmo_sta_ps_param_inactivity_time:
|
||||||
|
@@ -323,7 +323,6 @@ bool hdd_dfs_indicate_radar(struct hdd_context *hdd_ctx);
|
|||||||
* gRuntimePM=0
|
* gRuntimePM=0
|
||||||
* gWlanAutoShutdown = 0
|
* gWlanAutoShutdown = 0
|
||||||
* gEnableSuspend=0
|
* gEnableSuspend=0
|
||||||
* gEnablePowerSaveOffload=0
|
|
||||||
* gEnableWoW=0
|
* gEnableWoW=0
|
||||||
*
|
*
|
||||||
* Return: None
|
* Return: None
|
||||||
|
@@ -441,16 +441,15 @@ int wlan_hdd_ipv6_changed(struct notifier_block *nb,
|
|||||||
unsigned long data, void *arg);
|
unsigned long data, void *arg);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* hdd_set_qpower_config() - set qpower config to firmware
|
* hdd_set_power_config() - set power config to firmware
|
||||||
* @hddctx: HDD context
|
* @hddctx: HDD context
|
||||||
* @adapter: HDD adapter
|
* @adapter: HDD adapter
|
||||||
* @qpower: new qpower config value
|
* @power: new power config value
|
||||||
*
|
*
|
||||||
* Return: 0 on success; Errno on failure
|
* Return: 0 on success; Errno on failure
|
||||||
*/
|
*/
|
||||||
int hdd_set_qpower_config(struct hdd_context *hddctx,
|
int hdd_set_power_config(struct hdd_context *hddctx,
|
||||||
struct hdd_adapter *adapter,
|
struct hdd_adapter *adapter, uint8_t power);
|
||||||
uint8_t qpower);
|
|
||||||
|
|
||||||
#ifdef FEATURE_WLAN_DIAG_SUPPORT
|
#ifdef FEATURE_WLAN_DIAG_SUPPORT
|
||||||
/**
|
/**
|
||||||
|
@@ -7383,15 +7383,15 @@ static int hdd_config_scan_enable(struct hdd_adapter *adapter,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int hdd_config_qpower(struct hdd_adapter *adapter,
|
static int hdd_config_power(struct hdd_adapter *adapter,
|
||||||
const struct nlattr *attr)
|
const struct nlattr *attr)
|
||||||
{
|
{
|
||||||
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
|
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
|
||||||
uint8_t qpower;
|
uint8_t power;
|
||||||
|
|
||||||
qpower = nla_get_u8(attr);
|
power = nla_get_u8(attr);
|
||||||
|
|
||||||
return hdd_set_qpower_config(hdd_ctx, adapter, qpower);
|
return hdd_set_power_config(hdd_ctx, adapter, power);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int hdd_config_stats_avg_factor(struct hdd_adapter *adapter,
|
static int hdd_config_stats_avg_factor(struct hdd_adapter *adapter,
|
||||||
@@ -7999,7 +7999,7 @@ static const struct independent_setters independent_setters[] = {
|
|||||||
{QCA_WLAN_VENDOR_ATTR_CONFIG_SCAN_ENABLE,
|
{QCA_WLAN_VENDOR_ATTR_CONFIG_SCAN_ENABLE,
|
||||||
hdd_config_scan_enable},
|
hdd_config_scan_enable},
|
||||||
{QCA_WLAN_VENDOR_ATTR_CONFIG_QPOWER,
|
{QCA_WLAN_VENDOR_ATTR_CONFIG_QPOWER,
|
||||||
hdd_config_qpower},
|
hdd_config_power},
|
||||||
{QCA_WLAN_VENDOR_ATTR_CONFIG_STATS_AVG_FACTOR,
|
{QCA_WLAN_VENDOR_ATTR_CONFIG_STATS_AVG_FACTOR,
|
||||||
hdd_config_stats_avg_factor},
|
hdd_config_stats_avg_factor},
|
||||||
{QCA_WLAN_VENDOR_ATTR_CONFIG_GUARD_TIME,
|
{QCA_WLAN_VENDOR_ATTR_CONFIG_GUARD_TIME,
|
||||||
|
@@ -2554,7 +2554,8 @@ static void hdd_mon_mode_ether_setup(struct net_device *dev)
|
|||||||
*/
|
*/
|
||||||
static void hdd_mon_turn_off_ps_and_wow(struct hdd_context *hdd_ctx)
|
static void hdd_mon_turn_off_ps_and_wow(struct hdd_context *hdd_ctx)
|
||||||
{
|
{
|
||||||
ucfg_pmo_set_power_save_mode(hdd_ctx->psoc, PS_NOT_SUPPORTED);
|
ucfg_pmo_set_power_save_mode(hdd_ctx->psoc,
|
||||||
|
PMO_PS_ADVANCED_POWER_SAVE_DISABLE);
|
||||||
ucfg_pmo_set_wow_enable(hdd_ctx->psoc, PMO_WOW_DISABLE_BOTH);
|
ucfg_pmo_set_wow_enable(hdd_ctx->psoc, PMO_WOW_DISABLE_BOTH);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -2510,40 +2510,37 @@ int wlan_hdd_cfg80211_get_txpower(struct wiphy *wiphy,
|
|||||||
return errno;
|
return errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
int hdd_set_qpower_config(struct hdd_context *hddctx,
|
int hdd_set_power_config(struct hdd_context *hddctx,
|
||||||
struct hdd_adapter *adapter,
|
struct hdd_adapter *adapter,
|
||||||
u8 qpower)
|
uint8_t power)
|
||||||
{
|
{
|
||||||
QDF_STATUS status;
|
QDF_STATUS status;
|
||||||
|
|
||||||
if (!ucfg_pmo_get_power_save_mode(hddctx->psoc)) {
|
if (!ucfg_pmo_get_power_save_mode(hddctx->psoc)) {
|
||||||
hdd_err("qpower is disabled in configuration");
|
hdd_err("power save is disabled in configuration");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
if (adapter->device_mode != QDF_STA_MODE &&
|
if (adapter->device_mode != QDF_STA_MODE &&
|
||||||
adapter->device_mode != QDF_P2P_CLIENT_MODE) {
|
adapter->device_mode != QDF_P2P_CLIENT_MODE) {
|
||||||
hdd_info("QPOWER only allowed in STA/P2P-Client modes:%d",
|
hdd_info("Advanced power save only allowed in STA/P2P-Client modes:%d",
|
||||||
adapter->device_mode);
|
adapter->device_mode);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (qpower > PS_DUTY_CYCLING_QPOWER ||
|
if (power > PMO_PS_ADVANCED_POWER_SAVE_ENABLE ||
|
||||||
qpower < PS_LEGACY_NODEEPSLEEP) {
|
power < PMO_PS_ADVANCED_POWER_SAVE_DISABLE) {
|
||||||
hdd_err("invalid qpower value: %d", qpower);
|
hdd_err("invalid power value: %d", power);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ucfg_pmo_get_max_ps_poll(hddctx->psoc)) {
|
if (ucfg_pmo_get_max_ps_poll(hddctx->psoc)) {
|
||||||
if ((qpower == PS_QPOWER_NODEEPSLEEP) ||
|
hdd_info("Disable advanced power save since max ps poll is enabled");
|
||||||
(qpower == PS_LEGACY_NODEEPSLEEP))
|
power = PMO_PS_ADVANCED_POWER_SAVE_DISABLE;
|
||||||
qpower = PS_LEGACY_NODEEPSLEEP;
|
|
||||||
else
|
|
||||||
qpower = PS_LEGACY_DEEPSLEEP;
|
|
||||||
hdd_info("Qpower disabled, %d", qpower);
|
|
||||||
}
|
}
|
||||||
status = wma_set_qpower_config(adapter->vdev_id, qpower);
|
|
||||||
|
status = wma_set_power_config(adapter->vdev_id, power);
|
||||||
if (status != QDF_STATUS_SUCCESS) {
|
if (status != QDF_STATUS_SUCCESS) {
|
||||||
hdd_err("failed to configure qpower: %d", status);
|
hdd_err("failed to configure power: %d", status);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -4431,18 +4431,6 @@ struct sir_qos_params {
|
|||||||
uint8_t cwmax;
|
uint8_t cwmax;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* enum powersave_qpower_mode: QPOWER modes
|
|
||||||
* @QPOWER_DISABLED: Qpower is disabled
|
|
||||||
* @QPOWER_ENABLED: Qpower is enabled
|
|
||||||
* @QPOWER_DUTY_CYCLING: Qpower is enabled with duty cycling
|
|
||||||
*/
|
|
||||||
enum powersave_qpower_mode {
|
|
||||||
QPOWER_DISABLED = 0,
|
|
||||||
QPOWER_ENABLED = 1,
|
|
||||||
QPOWER_DUTY_CYCLING = 2
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct sir_sme_ext_change_chan_req - channel change request
|
* struct sir_sme_ext_change_chan_req - channel change request
|
||||||
* @message_type: message id
|
* @message_type: message id
|
||||||
|
@@ -426,13 +426,13 @@ QDF_STATUS wma_send_coex_config_cmd(WMA_HANDLE wma_handle,
|
|||||||
QDF_STATUS wma_send_ocl_cmd(WMA_HANDLE wma_handle,
|
QDF_STATUS wma_send_ocl_cmd(WMA_HANDLE wma_handle,
|
||||||
struct ocl_cmd_params *ocl_params);
|
struct ocl_cmd_params *ocl_params);
|
||||||
/**
|
/**
|
||||||
* wma_set_qpower_config() - update qpower config in wma
|
* wma_set_power_config() - update power config in wma
|
||||||
* @vdev_id: the Id of the vdev to configure
|
* @vdev_id: the Id of the vdev to configure
|
||||||
* @qpower: new qpower value
|
* @power: new power value
|
||||||
*
|
*
|
||||||
* Return: QDF_STATUS_SUCCESS on success, error number otherwise
|
* Return: QDF_STATUS_SUCCESS on success, error number otherwise
|
||||||
*/
|
*/
|
||||||
QDF_STATUS wma_set_qpower_config(uint8_t vdev_id, uint8_t qpower);
|
QDF_STATUS wma_set_power_config(uint8_t vdev_id, enum powersave_mode power);
|
||||||
|
|
||||||
#ifdef FEATURE_WLAN_D0WOW
|
#ifdef FEATURE_WLAN_D0WOW
|
||||||
static inline bool wma_d0_wow_is_supported(void)
|
static inline bool wma_d0_wow_is_supported(void)
|
||||||
|
@@ -558,14 +558,14 @@ static inline uint32_t wma_get_uapsd_mask(tpUapsd_Params uapsd_params)
|
|||||||
* @wma: wma handle
|
* @wma: wma handle
|
||||||
* @vdev_id: vdev id
|
* @vdev_id: vdev id
|
||||||
* @enable: enable/disable
|
* @enable: enable/disable
|
||||||
* @qpower_config: qpower configuration
|
* @power_config: power configuration
|
||||||
*
|
*
|
||||||
* Return: QDF_STATUS_SUCCESS for success or error code
|
* Return: QDF_STATUS_SUCCESS for success or error code
|
||||||
*/
|
*/
|
||||||
static QDF_STATUS wma_set_force_sleep(tp_wma_handle wma,
|
static QDF_STATUS wma_set_force_sleep(tp_wma_handle wma,
|
||||||
uint32_t vdev_id,
|
uint32_t vdev_id,
|
||||||
uint8_t enable,
|
uint8_t enable,
|
||||||
enum powersave_qpower_mode qpower_config,
|
enum powersave_mode power_config,
|
||||||
bool enable_ps)
|
bool enable_ps)
|
||||||
{
|
{
|
||||||
QDF_STATUS ret;
|
QDF_STATUS ret;
|
||||||
@@ -616,21 +616,21 @@ static QDF_STATUS wma_set_force_sleep(tp_wma_handle wma,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* QPower is enabled by default in Firmware
|
* Advanced power save is enabled by default in Firmware
|
||||||
* So Disable QPower explicitly
|
* So Disable advanced power save explicitly
|
||||||
*/
|
*/
|
||||||
ret = wma_unified_set_sta_ps_param(wma->wmi_handle, vdev_id,
|
ret = wma_unified_set_sta_ps_param(wma->wmi_handle, vdev_id,
|
||||||
WMI_STA_PS_ENABLE_QPOWER,
|
WMI_STA_PS_ENABLE_QPOWER,
|
||||||
qpower_config);
|
power_config);
|
||||||
if (QDF_IS_STATUS_ERROR(ret)) {
|
if (QDF_IS_STATUS_ERROR(ret)) {
|
||||||
WMA_LOGE("%s(%d) QPower Failed vdevId %d",
|
WMA_LOGE("%s(%d) Power Failed vdevId %d",
|
||||||
qpower_config ? "Enable" : "Disable",
|
power_config ? "Enable" : "Disable",
|
||||||
qpower_config, vdev_id);
|
power_config, vdev_id);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
WMA_LOGD("QPower %s(%d) vdevId %d",
|
WMA_LOGD("Power %s(%d) vdevId %d",
|
||||||
qpower_config ? "Enabled" : "Disabled",
|
power_config ? "Enabled" : "Disabled",
|
||||||
qpower_config, vdev_id);
|
power_config, vdev_id);
|
||||||
|
|
||||||
/* Set the Wake Policy to WMI_STA_PS_RX_WAKE_POLICY_POLL_UAPSD */
|
/* Set the Wake Policy to WMI_STA_PS_RX_WAKE_POLICY_POLL_UAPSD */
|
||||||
ret = wma_unified_set_sta_ps_param(wma->wmi_handle, vdev_id,
|
ret = wma_unified_set_sta_ps_param(wma->wmi_handle, vdev_id,
|
||||||
@@ -708,48 +708,18 @@ static QDF_STATUS wma_set_force_sleep(tp_wma_handle wma,
|
|||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
static uint8_t wma_get_power_config(tp_wma_handle wma)
|
||||||
* wma_get_qpower_config() - get qpower configuration
|
|
||||||
* @wma: WMA handle
|
|
||||||
*
|
|
||||||
* Power Save Offload configuration:
|
|
||||||
* 0 -> Power save offload is disabled
|
|
||||||
* 1 -> Legacy Power save enabled + Deep sleep Disabled
|
|
||||||
* 2 -> QPower enabled + Deep sleep Disabled
|
|
||||||
* 3 -> Legacy Power save enabled + Deep sleep Enabled
|
|
||||||
* 4 -> QPower enabled + Deep sleep Enabled
|
|
||||||
* 5 -> Duty cycling QPower enabled
|
|
||||||
*
|
|
||||||
* Return: enum powersave_qpower_mode with below values
|
|
||||||
* QPOWER_DISABLED if QPOWER is disabled
|
|
||||||
* QPOWER_ENABLED if QPOWER is enabled
|
|
||||||
* QPOWER_DUTY_CYCLING if DUTY CYCLING QPOWER is enabled
|
|
||||||
*/
|
|
||||||
static enum powersave_qpower_mode wma_get_qpower_config(tp_wma_handle wma)
|
|
||||||
{
|
{
|
||||||
switch (wma->powersave_mode) {
|
WMA_LOGD("POWER mode is %d", wma->powersave_mode);
|
||||||
case PS_QPOWER_NODEEPSLEEP:
|
|
||||||
case PS_QPOWER_DEEPSLEEP:
|
|
||||||
WMA_LOGD("QPOWER is enabled in power save mode %d",
|
|
||||||
wma->powersave_mode);
|
|
||||||
return QPOWER_ENABLED;
|
|
||||||
case PS_DUTY_CYCLING_QPOWER:
|
|
||||||
WMA_LOGD("DUTY cycling QPOWER is enabled in power save mode %d",
|
|
||||||
wma->powersave_mode);
|
|
||||||
return QPOWER_DUTY_CYCLING;
|
|
||||||
|
|
||||||
default:
|
return wma->powersave_mode;
|
||||||
WMA_LOGD("QPOWER is disabled in power save mode %d",
|
|
||||||
wma->powersave_mode);
|
|
||||||
return QPOWER_DISABLED;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void wma_enable_sta_ps_mode(tpEnablePsParams ps_req)
|
void wma_enable_sta_ps_mode(tpEnablePsParams ps_req)
|
||||||
{
|
{
|
||||||
uint32_t vdev_id = ps_req->sessionid;
|
uint32_t vdev_id = ps_req->sessionid;
|
||||||
QDF_STATUS ret;
|
QDF_STATUS ret;
|
||||||
enum powersave_qpower_mode qpower_config;
|
enum powersave_mode power_config;
|
||||||
struct wma_txrx_node *iface;
|
struct wma_txrx_node *iface;
|
||||||
t_wma_handle *wma_handle;
|
t_wma_handle *wma_handle;
|
||||||
|
|
||||||
@@ -766,11 +736,11 @@ void wma_enable_sta_ps_mode(tpEnablePsParams ps_req)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
qpower_config = wma_get_qpower_config(wma_handle);
|
power_config = wma_get_power_config(wma_handle);
|
||||||
if (eSIR_ADDON_NOTHING == ps_req->psSetting) {
|
if (eSIR_ADDON_NOTHING == ps_req->psSetting) {
|
||||||
if (qpower_config && iface->uapsd_cached_val) {
|
if (power_config && iface->uapsd_cached_val) {
|
||||||
qpower_config = 0;
|
power_config = 0;
|
||||||
WMA_LOGD("Qpower is disabled");
|
WMA_LOGD("Advanced power save is disabled");
|
||||||
}
|
}
|
||||||
WMA_LOGD("Enable Sta Mode Ps vdevId %d", vdev_id);
|
WMA_LOGD("Enable Sta Mode Ps vdevId %d", vdev_id);
|
||||||
ret = wma_unified_set_sta_ps_param(wma_handle->wmi_handle,
|
ret = wma_unified_set_sta_ps_param(wma_handle->wmi_handle,
|
||||||
@@ -782,7 +752,7 @@ void wma_enable_sta_ps_mode(tpEnablePsParams ps_req)
|
|||||||
}
|
}
|
||||||
|
|
||||||
ret = wma_set_force_sleep(wma_handle, vdev_id, false,
|
ret = wma_set_force_sleep(wma_handle, vdev_id, false,
|
||||||
qpower_config, true);
|
power_config, true);
|
||||||
if (QDF_IS_STATUS_ERROR(ret)) {
|
if (QDF_IS_STATUS_ERROR(ret)) {
|
||||||
WMA_LOGE("Enable Sta Ps Failed vdevId %d", vdev_id);
|
WMA_LOGE("Enable Sta Ps Failed vdevId %d", vdev_id);
|
||||||
return;
|
return;
|
||||||
@@ -811,13 +781,13 @@ void wma_enable_sta_ps_mode(tpEnablePsParams ps_req)
|
|||||||
vdev_id, uapsd_val);
|
vdev_id, uapsd_val);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (qpower_config && iface->uapsd_cached_val) {
|
if (power_config && iface->uapsd_cached_val) {
|
||||||
qpower_config = 0;
|
power_config = 0;
|
||||||
WMA_LOGD("Qpower is disabled");
|
WMA_LOGD("Qpower is disabled");
|
||||||
}
|
}
|
||||||
WMA_LOGD("Enable Forced Sleep vdevId %d", vdev_id);
|
WMA_LOGD("Enable Forced Sleep vdevId %d", vdev_id);
|
||||||
ret = wma_set_force_sleep(wma_handle, vdev_id, true,
|
ret = wma_set_force_sleep(wma_handle, vdev_id, true,
|
||||||
qpower_config, true);
|
power_config, true);
|
||||||
|
|
||||||
if (QDF_IS_STATUS_ERROR(ret)) {
|
if (QDF_IS_STATUS_ERROR(ret)) {
|
||||||
WMA_LOGE("Enable Forced Sleep Failed vdevId %d",
|
WMA_LOGE("Enable Forced Sleep Failed vdevId %d",
|
||||||
@@ -894,7 +864,7 @@ void wma_disable_sta_ps_mode(tpDisablePsParams ps_req)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QDF_STATUS wma_set_qpower_config(uint8_t vdev_id, uint8_t qpower)
|
QDF_STATUS wma_set_power_config(uint8_t vdev_id, enum powersave_mode power)
|
||||||
{
|
{
|
||||||
tp_wma_handle wma = cds_get_context(QDF_MODULE_ID_WMA);
|
tp_wma_handle wma = cds_get_context(QDF_MODULE_ID_WMA);
|
||||||
|
|
||||||
@@ -903,12 +873,12 @@ QDF_STATUS wma_set_qpower_config(uint8_t vdev_id, uint8_t qpower)
|
|||||||
return QDF_STATUS_E_INVAL;
|
return QDF_STATUS_E_INVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
WMA_LOGI("configuring qpower: %d", qpower);
|
WMA_LOGI("configuring power: %d", power);
|
||||||
wma->powersave_mode = qpower;
|
wma->powersave_mode = power;
|
||||||
return wma_unified_set_sta_ps_param(wma->wmi_handle,
|
return wma_unified_set_sta_ps_param(wma->wmi_handle,
|
||||||
vdev_id,
|
vdev_id,
|
||||||
WMI_STA_PS_ENABLE_QPOWER,
|
WMI_STA_PS_ENABLE_QPOWER,
|
||||||
wma_get_qpower_config(wma));
|
wma_get_power_config(wma));
|
||||||
}
|
}
|
||||||
|
|
||||||
void wma_enable_uapsd_mode(tp_wma_handle wma, tpEnableUapsdParams ps_req)
|
void wma_enable_uapsd_mode(tp_wma_handle wma, tpEnableUapsdParams ps_req)
|
||||||
@@ -916,7 +886,7 @@ void wma_enable_uapsd_mode(tp_wma_handle wma, tpEnableUapsdParams ps_req)
|
|||||||
QDF_STATUS ret;
|
QDF_STATUS ret;
|
||||||
uint32_t vdev_id = ps_req->sessionid;
|
uint32_t vdev_id = ps_req->sessionid;
|
||||||
uint32_t uapsd_val = 0;
|
uint32_t uapsd_val = 0;
|
||||||
enum powersave_qpower_mode qpower_config = wma_get_qpower_config(wma);
|
enum powersave_mode power_config = wma_get_power_config(wma);
|
||||||
struct wma_txrx_node *iface = &wma->interfaces[vdev_id];
|
struct wma_txrx_node *iface = &wma->interfaces[vdev_id];
|
||||||
|
|
||||||
if (!iface->vdev) {
|
if (!iface->vdev) {
|
||||||
@@ -941,14 +911,14 @@ void wma_enable_uapsd_mode(tp_wma_handle wma, tpEnableUapsdParams ps_req)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (qpower_config && uapsd_val) {
|
if (power_config && uapsd_val) {
|
||||||
qpower_config = 0;
|
power_config = 0;
|
||||||
WMA_LOGD("Disable Qpower %d", vdev_id);
|
WMA_LOGD("Disable power %d", vdev_id);
|
||||||
}
|
}
|
||||||
iface->uapsd_cached_val = uapsd_val;
|
iface->uapsd_cached_val = uapsd_val;
|
||||||
WMA_LOGD("Enable Forced Sleep vdevId %d", vdev_id);
|
WMA_LOGD("Enable Forced Sleep vdevId %d", vdev_id);
|
||||||
ret = wma_set_force_sleep(wma, vdev_id, true,
|
ret = wma_set_force_sleep(wma, vdev_id, true,
|
||||||
qpower_config, ps_req->uapsdParams.enable_ps);
|
power_config, ps_req->uapsdParams.enable_ps);
|
||||||
if (QDF_IS_STATUS_ERROR(ret)) {
|
if (QDF_IS_STATUS_ERROR(ret)) {
|
||||||
WMA_LOGE("Enable Forced Sleep Failed vdevId %d", vdev_id);
|
WMA_LOGE("Enable Forced Sleep Failed vdevId %d", vdev_id);
|
||||||
return;
|
return;
|
||||||
@@ -968,7 +938,7 @@ void wma_disable_uapsd_mode(tp_wma_handle wma,
|
|||||||
{
|
{
|
||||||
QDF_STATUS ret;
|
QDF_STATUS ret;
|
||||||
uint32_t vdev_id = ps_req->sessionid;
|
uint32_t vdev_id = ps_req->sessionid;
|
||||||
enum powersave_qpower_mode qpower_config = wma_get_qpower_config(wma);
|
enum powersave_mode power_config = wma_get_power_config(wma);
|
||||||
|
|
||||||
WMA_LOGD("Disable Uapsd vdevId %d", vdev_id);
|
WMA_LOGD("Disable Uapsd vdevId %d", vdev_id);
|
||||||
|
|
||||||
@@ -988,7 +958,7 @@ void wma_disable_uapsd_mode(tp_wma_handle wma,
|
|||||||
|
|
||||||
/* Re enable Sta Mode Powersave with proper configuration */
|
/* Re enable Sta Mode Powersave with proper configuration */
|
||||||
ret = wma_set_force_sleep(wma, vdev_id, false,
|
ret = wma_set_force_sleep(wma, vdev_id, false,
|
||||||
qpower_config, true);
|
power_config, true);
|
||||||
if (QDF_IS_STATUS_ERROR(ret)) {
|
if (QDF_IS_STATUS_ERROR(ret)) {
|
||||||
WMA_LOGE("Disable Forced Sleep Failed vdevId %d", vdev_id);
|
WMA_LOGE("Disable Forced Sleep Failed vdevId %d", vdev_id);
|
||||||
return;
|
return;
|
||||||
|
Reference in New Issue
Block a user