qcacld-3.0: Add vendor attribute to configure ARP/NS offload

In some scenario, it is required to receive every ARP/NS packet even
it is not to solicit address itself. So add this vendor attribute
configuration to enable/disable ARP/NS offload on fly.

On some platform, if target suspend to WoW mode, APF filter will drop
such ARP/NS packet in the front, so prevent runtime suspend happen
if disable ARP/NS offload. System suspend still allow in consideration
of potential power impact.

It only support on STA/P2P-Client mode device, and this configure is
optional, while default behavior is ARP/NS offload enable. It will
restore to default behavior if interface being closed.

Change-Id: Icd49e230024bc1ce51519cd9fafee9bc9f79f382
CRs-Fixed: 3058494
This commit is contained in:
Will Huang
2021-10-26 11:09:51 +08:00
committad av Madan Koyyalamudi
förälder 1480887425
incheckning eb218a1c61
11 ändrade filer med 374 tillägg och 10 borttagningar

Visa fil

@@ -220,6 +220,7 @@ typedef QDF_STATUS(*pmo_psoc_resume_handler)
* @pmo_ns_offload_dynamic_update: enable/disable ns offload on the fly
* @pmo_peer_disconnect: trigger is peer disconnect
* @pmo_mcbc_setting_dynamic_update: mcbc value update on the fly
* @pmo_arp_ns_offload_dynamic_update: enable/disable arp/ns offload on the fly
*
* @pmo_offload_trigger_max: Max trigger value
*/
@@ -234,6 +235,7 @@ enum pmo_offload_trigger {
pmo_ns_offload_dynamic_update,
pmo_peer_disconnect,
pmo_mcbc_setting_dynamic_update,
pmo_arp_ns_offload_dynamic_update,
pmo_offload_trigger_max,
};

Visa fil

@@ -545,6 +545,79 @@ ucfg_pmo_enhanced_mc_filter_disable(struct wlan_objmgr_vdev *vdev)
return pmo_core_enhanced_mc_filter_disable(vdev);
}
#ifdef FEATURE_WLAN_DYNAMIC_ARP_NS_OFFLOAD
/**
* ucfg_pmo_dynamic_arp_ns_offload_enable() - enable arp/ns offload
* @vdev: vdev objmgr handle
*
* Return: QDF_STATUS
*/
QDF_STATUS
ucfg_pmo_dynamic_arp_ns_offload_enable(struct wlan_objmgr_vdev *vdev);
/**
* ucfg_pmo_dynamic_arp_ns_offload_disable() - disable arp/ns offload
* @vdev: vdev objmgr handle
*
* Return: QDF_STATUS
*/
QDF_STATUS
ucfg_pmo_dynamic_arp_ns_offload_disable(struct wlan_objmgr_vdev *vdev);
/**
* ucfg_pmo_get_arp_ns_offload_dynamic_disable() - get arp/ns offload state
* @vdev: vdev objmgr handle
*
* Return: QDF_STATUS
*/
bool
ucfg_pmo_get_arp_ns_offload_dynamic_disable(struct wlan_objmgr_vdev *vdev);
/**
* ucfg_pmo_dynamic_arp_ns_offload_runtime_prevent() - prevent runtime suspend
* @vdev: vdev objmgr handle
*
* Return: none
*/
void
ucfg_pmo_dynamic_arp_ns_offload_runtime_prevent(struct wlan_objmgr_vdev *vdev);
/**
* ucfg_pmo_dynamic_arp_ns_offload_runtime_allow() - allow runtime suspend
* @vdev: vdev objmgr handle
*
* Return: none
*/
void
ucfg_pmo_dynamic_arp_ns_offload_runtime_allow(struct wlan_objmgr_vdev *vdev);
#else
static inline QDF_STATUS
ucfg_pmo_dynamic_arp_ns_offload_enable(struct wlan_objmgr_vdev *vdev)
{
return QDF_STATUS_SUCCESS;
}
static inline QDF_STATUS
ucfg_pmo_dynamic_arp_ns_offload_disable(struct wlan_objmgr_vdev *vdev)
{
return QDF_STATUS_SUCCESS;
}
static inline bool
ucfg_pmo_get_arp_ns_offload_dynamic_disable(struct wlan_objmgr_vdev *vdev)
{
return false;
}
static inline void
ucfg_pmo_dynamic_arp_ns_offload_runtime_prevent(struct wlan_objmgr_vdev *vdev)
{
}
static inline void
ucfg_pmo_dynamic_arp_ns_offload_runtime_allow(struct wlan_objmgr_vdev *vdev) {}
#endif
/**
* ucfg_pmo_enable_mc_addr_filtering_in_fwr(): Enable cached mc add list in fwr
* @psoc: objmgr psoc handle