qcacld-3.0: Add support to offload igmp feature to fw

offload igmp feature to fw in case of suspended state
to avoid high power consumption.

Change-Id: I05fbf23dc2836f8f5dc6e2f45b35bf2d30c39790
CRs-Fixed: 2907644
This commit is contained in:
sheenam monga
2021-03-25 01:42:19 +05:30
committed by snandini
parent 9974417ba9
commit 6e6c139e05
15 changed files with 437 additions and 8 deletions

View File

@@ -372,7 +372,27 @@ QDF_STATUS pmo_core_config_forced_dtim(struct wlan_objmgr_vdev *vdev,
void pmo_core_system_resume(struct wlan_objmgr_psoc *psoc);
#else
static inline void pmo_core_system_resume(struct wlan_objmgr_psoc *psoc)
{}
#endif
#ifdef WLAN_FEATURE_IGMP_OFFLOAD
/**
* pmo_core_enable_igmp_offload() - function to offload igmp
* @vdev: objmgr vdev handle
* @pmo_igmp_req: igmp req
*
* This function to offload igmp to fw
*
* Return: QDF_STATUS
*/
QDF_STATUS
pmo_core_enable_igmp_offload(struct wlan_objmgr_vdev *vdev,
struct pmo_igmp_offload_req *pmo_igmp_req);
#else
static inline QDF_STATUS
pmo_core_enable_igmp_offload(struct wlan_objmgr_vdev *vdev,
struct pmo_igmp_offload_req *pmo_igmp_req)
{
return QDF_STATUS_SUCCESS;
}
#endif
#endif /* WLAN_POWER_MANAGEMENT_OFFLOAD */

View File

@@ -1697,6 +1697,45 @@ out:
return status;
}
#ifdef WLAN_FEATURE_IGMP_OFFLOAD
QDF_STATUS
pmo_core_enable_igmp_offload(struct wlan_objmgr_vdev *vdev,
struct pmo_igmp_offload_req *pmo_igmp_req)
{
QDF_STATUS status = QDF_STATUS_SUCCESS;
uint8_t vdev_id;
enum QDF_OPMODE op_mode;
struct pmo_vdev_priv_obj *vdev_ctx;
uint32_t version_support;
if (wlan_vdev_is_up(vdev) != QDF_STATUS_SUCCESS)
return QDF_STATUS_E_INVAL;
op_mode = pmo_get_vdev_opmode(vdev);
if (QDF_STA_MODE != op_mode) {
pmo_debug("igmp offload supported in STA mode");
return QDF_STATUS_E_INVAL;
}
vdev_ctx = pmo_vdev_get_priv(vdev);
qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock);
if (!vdev_ctx->pmo_psoc_ctx->psoc_cfg.igmp_offload_enable) {
pmo_debug("igmp offload not supported");
qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock);
return QDF_STATUS_E_NOSUPPORT;
}
version_support =
vdev_ctx->pmo_psoc_ctx->psoc_cfg.igmp_version_support;
qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock);
vdev_id = pmo_vdev_get_id(vdev);
pmo_igmp_req->vdev_id = vdev_id;
pmo_igmp_req->version_support = version_support;
status = pmo_tgt_send_igmp_offload_req(vdev, pmo_igmp_req);
return status;
}
#endif
QDF_STATUS pmo_core_config_forced_dtim(struct wlan_objmgr_vdev *vdev,
uint32_t dynamic_dtim)
{