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
这个提交包含在:
sheenam monga
2021-03-25 01:42:19 +05:30
提交者 snandini
父节点 9974417ba9
当前提交 6e6c139e05
修改 15 个文件,包含 437 行新增8 行删除

查看文件

@@ -51,6 +51,9 @@
#define PMO_WOW_REQUIRED_CREDITS 1
#define MAX_MC_IP_ADDR 10
#define IGMP_QUERY_ADDRESS 0x10000e0
/**
* enum pmo_vdev_param_id: tell vdev param id
* @pmo_vdev_param_listen_interval: vdev listen interval param id
@@ -425,4 +428,21 @@ struct pmo_device_caps {
bool li_offload;
};
/**
* pmo_igmp_offload_req - structure to hold igmp param
*
* @vdev_id: vdev id
* @enable: enable/disable
* @version_support: version support
* @num_grp_ip_address: num grp ip addr
* @grp_ip_address: array of grp_ip_address
*
**/
struct pmo_igmp_offload_req {
uint32_t vdev_id;
bool enable;
uint32_t version_support;
uint32_t num_grp_ip_address;
uint32_t grp_ip_address[MAX_MC_IP_ADDR];
};
#endif /* end of _WLAN_PMO_COMMONP_STRUCT_H_ */

查看文件

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2017-2020 The Linux Foundation. All rights reserved.
* Copyright (c) 2017-2021 The Linux Foundation. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
@@ -201,6 +201,11 @@ struct wlan_pmo_tx_ops {
QDF_STATUS (*send_vdev_sta_ps_param_req)(
struct wlan_objmgr_vdev *vdev,
uint32_t ps_mode, uint32_t value);
#ifdef WLAN_FEATURE_IGMP_OFFLOAD
QDF_STATUS (*send_igmp_offload_req)(
struct wlan_objmgr_vdev *vdev,
struct pmo_igmp_offload_req *pmo_igmp_req);
#endif
void (*psoc_update_wow_bus_suspend)(
struct wlan_objmgr_psoc *psoc, uint8_t value);
int (*psoc_get_host_credits)(

查看文件

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2017-2020 The Linux Foundation. All rights reserved.
* Copyright (c) 2017-2021 The Linux Foundation. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
@@ -346,6 +346,26 @@ QDF_STATUS pmo_tgt_vdev_update_param_req(struct wlan_objmgr_vdev *vdev,
QDF_STATUS pmo_tgt_send_vdev_sta_ps_param(struct wlan_objmgr_vdev *vdev,
enum pmo_sta_powersave_param ps_param, uint32_t param_value);
#ifdef WLAN_FEATURE_IGMP_OFFLOAD
/**
* pmo_tgt_send_igmp_offload_req() - Send igmp offload request to fw
* @vdev: objmgr vdev
* @pmo_igmp_req: igmp offload params
*
* Return: QDF status
*/
QDF_STATUS
pmo_tgt_send_igmp_offload_req(struct wlan_objmgr_vdev *vdev,
struct pmo_igmp_offload_req *pmo_igmp_req);
#else
static inline QDF_STATUS
pmo_tgt_send_igmp_offload_req(struct wlan_objmgr_vdev *vdev,
struct pmo_igmp_offload_req *pmo_igmp_req)
{
return QDF_STATUS_SUCCESS;
}
#endif
/**
* pmo_tgt_update_wow_bus_suspend_state() - update wow bus suspend state flag
* @psoc: objmgr psoc

查看文件

@@ -140,6 +140,28 @@ QDF_STATUS ucfg_pmo_psoc_set_caps(struct wlan_objmgr_psoc *psoc,
bool
ucfg_pmo_is_arp_offload_enabled(struct wlan_objmgr_psoc *psoc);
#ifdef WLAN_FEATURE_IGMP_OFFLOAD
/**
* ucfg_pmo_is_igmp_offload_enabled() - Get igmp offload enable or not
* @psoc: pointer to psoc object
*
* Return: igmp offload enable or not
*/
bool
ucfg_pmo_is_igmp_offload_enabled(struct wlan_objmgr_psoc *psoc);
/**
* ucfg_pmo_set_igmp_offload_enabled() - Set igmp offload enable or not
* @psoc: pointer to psoc object
* @val: enable/disable igmp offload
*
* Return: None
*/
void
ucfg_pmo_set_igmp_offload_enabled(struct wlan_objmgr_psoc *psoc,
bool val);
#endif
/**
* ucfg_pmo_set_arp_offload_enabled() - Set arp offload enable or not
* @psoc: pointer to psoc object
@@ -593,6 +615,27 @@ QDF_STATUS ucfg_pmo_flush_gtk_offload_req(struct wlan_objmgr_vdev *vdev);
*/
QDF_STATUS ucfg_pmo_enable_gtk_offload_in_fwr(struct wlan_objmgr_vdev *vdev);
#ifdef WLAN_FEATURE_BIG_DATA_STATS
/**
* ucfg_pmo_enable_igmp_offload(): enable igmp request in fwr
* @vdev: objmgr vdev handle
* @pmo_igmp_req: struct pmo_igmp_offload_req
*
* Return QDF_STATUS_SUCCESS -in case of success else return error
*/
QDF_STATUS ucfg_pmo_enable_igmp_offload(
struct wlan_objmgr_vdev *vdev,
struct pmo_igmp_offload_req *pmo_igmp_req);
#else
static inline
QDF_STATUS ucfg_pmo_enable_igmp_offload(
struct wlan_objmgr_vdev *vdev,
struct pmo_igmp_offload_req *pmo_igmp_req)
{
return QDF_STATUS_SUCCESS;
}
#endif
/**
* ucfg_pmo_disable_gtk_offload_in_fwr(): disable cached gtk request in fwr
* @vdev: objmgr vdev handle
@@ -1451,6 +1494,13 @@ ucfg_pmo_enable_gtk_offload_in_fwr(struct wlan_objmgr_vdev *vdev)
return QDF_STATUS_SUCCESS;
}
static inline QDF_STATUS
ucfg_pmo_enable_igmp_offload(struct wlan_objmgr_vdev *vdev,
struct pmo_igmp_offload_req *pmo_igmp_req)
{
return QDF_STATUS_E_NOSUPPORT;
}
static inline QDF_STATUS
ucfg_pmo_disable_gtk_offload_in_fwr(struct wlan_objmgr_vdev *vdev)
{
@@ -1713,12 +1763,24 @@ ucfg_pmo_is_arp_offload_enabled(struct wlan_objmgr_psoc *psoc)
return false;
}
static inline bool
ucfg_pmo_is_igmp_offload_enabled(struct wlan_objmgr_psoc *psoc)
{
return false;
}
static inline void
ucfg_pmo_set_arp_offload_enabled(struct wlan_objmgr_psoc *psoc,
bool val)
{
}
static inline void
ucfg_pmo_set_igmp_offload_enabled(struct wlan_objmgr_psoc *psoc,
bool val)
{
}
static inline bool
ucfg_pmo_is_wow_pulse_enabled(struct wlan_objmgr_psoc *psoc)
{