qcacld-3.0: Refine PMO wow to support legacy chip
wma_is_service_enabled can't get valid service bitmap if call in hdd_update_pmo_config, use psoc_ctx->caps.unified_wow instead to check pattern id per vdev and legacy d0 wow capability. Change-Id: If7bf316f482c49253fc4b95b94e172727b27ffd1 CRs-Fixed: 2225847
This commit is contained in:

committed by
nshrivas

orang tua
aa6d55d9e7
melakukan
67ce1e332b
@@ -122,7 +122,7 @@ static inline uint8_t pmo_get_and_increment_wow_default_ptrn(
|
||||
{
|
||||
uint8_t count;
|
||||
|
||||
if (vdev_ctx->pmo_psoc_ctx->psoc_cfg.ptrn_id_per_vdev) {
|
||||
if (vdev_ctx->pmo_psoc_ctx->caps.unified_wow) {
|
||||
qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock);
|
||||
count = vdev_ctx->num_wow_default_patterns++;
|
||||
qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock);
|
||||
@@ -146,7 +146,7 @@ static inline uint8_t pmo_get_and_increment_wow_default_ptrn(
|
||||
static inline void pmo_increment_wow_default_ptrn(
|
||||
struct pmo_vdev_priv_obj *vdev_ctx)
|
||||
{
|
||||
if (vdev_ctx->pmo_psoc_ctx->psoc_cfg.ptrn_id_per_vdev) {
|
||||
if (vdev_ctx->pmo_psoc_ctx->caps.unified_wow) {
|
||||
qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock);
|
||||
vdev_ctx->num_wow_default_patterns++;
|
||||
qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock);
|
||||
@@ -168,7 +168,7 @@ static inline void pmo_increment_wow_default_ptrn(
|
||||
static inline void pmo_decrement_wow_default_ptrn(
|
||||
struct pmo_vdev_priv_obj *vdev_ctx)
|
||||
{
|
||||
if (vdev_ctx->pmo_psoc_ctx->psoc_cfg.ptrn_id_per_vdev) {
|
||||
if (vdev_ctx->pmo_psoc_ctx->caps.unified_wow) {
|
||||
qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock);
|
||||
vdev_ctx->num_wow_default_patterns--;
|
||||
qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock);
|
||||
@@ -192,7 +192,7 @@ static inline uint8_t pmo_get_wow_default_ptrn(
|
||||
{
|
||||
uint8_t count;
|
||||
|
||||
if (vdev_ctx->pmo_psoc_ctx->psoc_cfg.ptrn_id_per_vdev) {
|
||||
if (vdev_ctx->pmo_psoc_ctx->caps.unified_wow) {
|
||||
qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock);
|
||||
count = vdev_ctx->num_wow_default_patterns;
|
||||
qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock);
|
||||
@@ -216,7 +216,7 @@ static inline uint8_t pmo_get_wow_default_ptrn(
|
||||
static inline void pmo_set_wow_default_ptrn(
|
||||
struct pmo_vdev_priv_obj *vdev_ctx, uint8_t value)
|
||||
{
|
||||
if (vdev_ctx->pmo_psoc_ctx->psoc_cfg.ptrn_id_per_vdev) {
|
||||
if (vdev_ctx->pmo_psoc_ctx->caps.unified_wow) {
|
||||
qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock);
|
||||
vdev_ctx->num_wow_default_patterns = value;
|
||||
qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock);
|
||||
@@ -238,7 +238,7 @@ static inline void pmo_set_wow_default_ptrn(
|
||||
static inline void pmo_increment_wow_user_ptrn(
|
||||
struct pmo_vdev_priv_obj *vdev_ctx)
|
||||
{
|
||||
if (vdev_ctx->pmo_psoc_ctx->psoc_cfg.ptrn_id_per_vdev) {
|
||||
if (vdev_ctx->pmo_psoc_ctx->caps.unified_wow) {
|
||||
qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock);
|
||||
vdev_ctx->num_wow_user_patterns++;
|
||||
qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock);
|
||||
@@ -260,7 +260,7 @@ static inline void pmo_increment_wow_user_ptrn(
|
||||
static inline void pmo_decrement_wow_user_ptrn(
|
||||
struct pmo_vdev_priv_obj *vdev_ctx)
|
||||
{
|
||||
if (vdev_ctx->pmo_psoc_ctx->psoc_cfg.ptrn_id_per_vdev) {
|
||||
if (vdev_ctx->pmo_psoc_ctx->caps.unified_wow) {
|
||||
qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock);
|
||||
vdev_ctx->num_wow_user_patterns--;
|
||||
qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock);
|
||||
@@ -284,7 +284,7 @@ static inline uint8_t pmo_get_wow_user_ptrn(
|
||||
{
|
||||
uint8_t count;
|
||||
|
||||
if (vdev_ctx->pmo_psoc_ctx->psoc_cfg.ptrn_id_per_vdev) {
|
||||
if (vdev_ctx->pmo_psoc_ctx->caps.unified_wow) {
|
||||
qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock);
|
||||
count = vdev_ctx->num_wow_user_patterns;
|
||||
qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock);
|
||||
|
@@ -262,7 +262,6 @@ enum pmo_auto_pwr_detect_failure_mode {
|
||||
/**
|
||||
* struct pmo_psoc_cfg - user configuration required for pmo
|
||||
* @ptrn_match_enable_all_vdev: true when pattern match is enable for all vdev
|
||||
* @ptrn_id_per_vdev: true when pattern id can be same for different vdev
|
||||
* @apf_enable: true if psoc supports bpf else false
|
||||
* @arp_offload_enable: true if arp offload is supported for psoc else false
|
||||
* @hw_filter_mode: which mode the hardware filter should use during DTIM
|
||||
@@ -291,7 +290,6 @@ enum pmo_auto_pwr_detect_failure_mode {
|
||||
*/
|
||||
struct pmo_psoc_cfg {
|
||||
bool ptrn_match_enable_all_vdev;
|
||||
bool ptrn_id_per_vdev;
|
||||
bool apf_enable;
|
||||
bool arp_offload_enable;
|
||||
enum pmo_hw_filter_mode hw_filter_mode;
|
||||
|
@@ -140,7 +140,9 @@ QDF_STATUS pmo_tgt_psoc_send_wow_enable_req(struct wlan_objmgr_psoc *psoc,
|
||||
psoc_ctx = pmo_psoc_get_priv(psoc);
|
||||
pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc);
|
||||
|
||||
if (psoc_ctx->psoc_cfg.d0_wow_supported && !param->can_suspend_link) {
|
||||
if (psoc_ctx->psoc_cfg.d0_wow_supported &&
|
||||
!psoc_ctx->caps.unified_wow &&
|
||||
!param->can_suspend_link) {
|
||||
if (!pmo_tx_ops.psoc_send_d0wow_enable_req) {
|
||||
pmo_err("psoc_send_d0wow_enable_req is null");
|
||||
return QDF_STATUS_E_NULL_VALUE;
|
||||
|
Reference in New Issue
Block a user