qcacld-3.0: Add Support to offload icmp feature to fw

Add support to offload icmp feature to fw in case of
suspended state to avoid high power consumption.

Change-Id: I3ff19d71eac530c75be57e6b52b975e755ff2a53
CRs-Fixed: 3042452
此提交包含在:
Aditya Kodukula
2021-09-07 23:30:16 -07:00
提交者 Madan Koyyalamudi
父節點 29adcfaef4
當前提交 37026bc3ff
共有 16 個檔案被更改,包括 530 行新增3 行删除

查看文件

@@ -603,6 +603,8 @@
* This ini is used to enable/disable firmware's capability of sending ICMP
* response to clients.
*
* Supported Feature: STA
*
* Usage: External
*
* </ini>

查看文件

@@ -285,6 +285,30 @@ enum pmo_gpio_wakeup_mode {
PMO_GPIO_WAKEUP_MODE_LOW,
};
#ifdef WLAN_FEATURE_ICMP_OFFLOAD
#define ICMP_MAX_IPV6_ADDRESS 16
/**
* pmo_icmp_offload - structure to hold icmp param
*
* @vdev_id: vdev id
* @enable: enable/disable
* @trigger: icmp offload trigger information
* @ipv6_count: number of host ipv6 address
* @ipv4_addr: host interface ipv4 address
* @ipv6_addr: array of host ipv6 address
*
**/
struct pmo_icmp_offload {
uint8_t vdev_id;
bool enable;
enum pmo_offload_trigger trigger;
uint8_t ipv6_count;
uint8_t ipv4_addr[QDF_IPV4_ADDR_SIZE];
uint8_t ipv6_addr[ICMP_MAX_IPV6_ADDRESS][QDF_IPV6_ADDR_SIZE];
};
#endif
/**
* struct pmo_psoc_cfg - user configuration required for pmo
* @ptrn_match_enable_all_vdev: true when pattern match is enable for all vdev
@@ -429,7 +453,9 @@ struct pmo_psoc_cfg {
bool igmp_offload_enable;
#endif
bool disconnect_sap_tdls_in_wow;
#ifdef WLAN_FEATURE_ICMP_OFFLOAD
bool is_icmp_offload_enable;
#endif
};
/**

查看文件

@@ -123,6 +123,7 @@ typedef int (*pmo_pld_auto_resume_cb)(void);
* @psoc_send_d0wow_disable_req: fp to send D0 WOW disable request
* @psoc_send_idle_roam_suspend_mode: fp to send suspend mode for
* idle roam trigger to firmware.
* @send_icmp_offload_req: fp to send icmp offload request
*/
struct wlan_pmo_tx_ops {
QDF_STATUS (*send_arp_offload_req)(struct wlan_objmgr_vdev *vdev,
@@ -233,7 +234,11 @@ struct wlan_pmo_tx_ops {
struct wlan_objmgr_psoc *psoc);
QDF_STATUS (*psoc_send_idle_roam_suspend_mode)(
struct wlan_objmgr_psoc *psoc, uint8_t val);
#ifdef WLAN_FEATURE_ICMP_OFFLOAD
QDF_STATUS (*send_icmp_offload_req)(
struct wlan_objmgr_psoc *psoc,
struct pmo_icmp_offload *pmo_icmp_req);
#endif
};
#endif /* end of _WLAN_PMO_OBJ_MGMT_PUBLIC_STRUCT_H_ */

查看文件

@@ -486,4 +486,16 @@ QDF_STATUS pmo_tgt_psoc_send_target_resume_req(struct wlan_objmgr_psoc *psoc);
QDF_STATUS pmo_tgt_psoc_send_idle_roam_monitor(struct wlan_objmgr_psoc *psoc,
uint8_t val);
#ifdef WLAN_FEATURE_ICMP_OFFLOAD
/**
* pmo_tgt_config_icmp_offload_req() - Configure icmp offload req to target
* @psoc: objmgr psoc
* @pmo_icmp_req: ICMP offload parameters
*
* Return: QDF status
*/
QDF_STATUS
pmo_tgt_config_icmp_offload_req(struct wlan_objmgr_psoc *psoc,
struct pmo_icmp_offload *pmo_icmp_req);
#endif
#endif /* end of _WLAN_PMO_TGT_API_H_ */

查看文件

@@ -1284,6 +1284,37 @@ uint32_t ucfg_pmo_get_moddtim_user(struct wlan_objmgr_vdev *vdev);
*/
bool
ucfg_pmo_get_disconnect_sap_tdls_in_wow(struct wlan_objmgr_psoc *psoc);
#ifdef WLAN_FEATURE_ICMP_OFFLOAD
/**
* ucfg_pmo_check_icmp_offload(): API to check if icmp offload is enabled
* @psoc: objmgr psoc handle
* @vdev_id: vdev_id
*
* Return: QDF_STATUS_SUCCESS for success or error code
*/
QDF_STATUS ucfg_pmo_check_icmp_offload(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id);
/**
* ucfg_pmo_is_icmp_offload_enabled() - Get icmp offload enable or not
* @psoc: pointer to psoc object
*
* Return: icmp offload enable or not
*/
bool
ucfg_pmo_is_icmp_offload_enabled(struct wlan_objmgr_psoc *psoc);
/**
* ucfg_pmo_config_icmp_offload() - API to enable icmp offload request
* @psoc: pointer to psoc object
* @pmo_icmp_req: ICMP offload parameters
*
* Return: QDF_STATUS_SUCCESS for success or error code
*/
QDF_STATUS
ucfg_pmo_config_icmp_offload(struct wlan_objmgr_psoc *psoc,
struct pmo_icmp_offload *pmo_icmp_req);
#endif
#else /* WLAN_POWER_MANAGEMENT_OFFLOAD */
static inline QDF_STATUS
ucfg_pmo_psoc_open(struct wlan_objmgr_psoc *psoc)
@@ -1992,6 +2023,26 @@ ucfg_pmo_get_disconnect_sap_tdls_in_wow(struct wlan_objmgr_psoc *psoc)
{
return false;
}
static inline
QDF_STATUS ucfg_pmo_check_icmp_offload(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id)
{
return QDF_STATUS_SUCCESS;
}
static inline bool
ucfg_pmo_is_icmp_offload_enabled(struct wlan_objmgr_psoc *psoc)
{
return false;
}
QDF_STATUS
ucfg_pmo_config_icmp_offload(struct wlan_objmgr_psoc *psoc,
struct pmo_icmp_offload *pmo_icmp_req)
{
return QDF_STATUS_SUCCESS;
}
#endif /* WLAN_POWER_MANAGEMENT_OFFLOAD */
#ifdef WLAN_FEATURE_EXTWOW_SUPPORT