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:
@@ -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 */
|
||||
|
@@ -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)
|
||||
{
|
||||
|
Reference in New Issue
Block a user