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
这个提交包含在:
@@ -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)
|
||||
{
|
||||
|
在新工单中引用
屏蔽一个用户