1*5113495bSYour Name /* 2*5113495bSYour Name * Copyright (c) 2017-2021 The Linux Foundation. All rights reserved. 3*5113495bSYour Name * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved. 4*5113495bSYour Name * 5*5113495bSYour Name * Permission to use, copy, modify, and/or distribute this software for 6*5113495bSYour Name * any purpose with or without fee is hereby granted, provided that the 7*5113495bSYour Name * above copyright notice and this permission notice appear in all 8*5113495bSYour Name * copies. 9*5113495bSYour Name * 10*5113495bSYour Name * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 11*5113495bSYour Name * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 12*5113495bSYour Name * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 13*5113495bSYour Name * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 14*5113495bSYour Name * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 15*5113495bSYour Name * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 16*5113495bSYour Name * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 17*5113495bSYour Name * PERFORMANCE OF THIS SOFTWARE. 18*5113495bSYour Name */ 19*5113495bSYour Name /** 20*5113495bSYour Name * DOC: Declare various struct, macros which are common for 21*5113495bSYour Name * various pmo related features. 22*5113495bSYour Name * 23*5113495bSYour Name * Note: This file shall not contain public API's prototype/declarations. 24*5113495bSYour Name * 25*5113495bSYour Name */ 26*5113495bSYour Name 27*5113495bSYour Name #ifndef _WLAN_PMO_COMMONP_PUBLIC_STRUCT_H_ 28*5113495bSYour Name #define _WLAN_PMO_COMMONP_PUBLIC_STRUCT_H_ 29*5113495bSYour Name 30*5113495bSYour Name #include "wlan_cmn.h" 31*5113495bSYour Name #include "wlan_objmgr_cmn.h" 32*5113495bSYour Name #include "wlan_objmgr_global_obj.h" 33*5113495bSYour Name #include "wmi_unified.h" 34*5113495bSYour Name #include "qdf_status.h" 35*5113495bSYour Name #include "qdf_lock.h" 36*5113495bSYour Name #include "qdf_event.h" 37*5113495bSYour Name #include "wlan_pmo_hw_filter_public_struct.h" 38*5113495bSYour Name 39*5113495bSYour Name 40*5113495bSYour Name #define PMO_IPV4_ARP_REPLY_OFFLOAD 0 41*5113495bSYour Name #define PMO_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD 1 42*5113495bSYour Name #define PMO_IPV6_NS_OFFLOAD 2 43*5113495bSYour Name #define PMO_OFFLOAD_DISABLE 0 44*5113495bSYour Name #define PMO_OFFLOAD_ENABLE 1 45*5113495bSYour Name 46*5113495bSYour Name #define PMO_MAC_NS_OFFLOAD_SIZE 1 47*5113495bSYour Name #define PMO_MAC_NUM_TARGET_IPV6_NS_OFFLOAD_NA 16 48*5113495bSYour Name #define PMO_IPV6_ADDR_VALID 1 49*5113495bSYour Name #define PMO_IPV6_ADDR_UC_TYPE 0 50*5113495bSYour Name #define PMO_IPV6_ADDR_AC_TYPE 1 51*5113495bSYour Name 52*5113495bSYour Name 53*5113495bSYour Name #define PMO_WOW_REQUIRED_CREDITS 1 54*5113495bSYour Name 55*5113495bSYour Name #define MAX_MC_IP_ADDR 10 56*5113495bSYour Name #define IGMP_QUERY_ADDRESS 0x10000e0 57*5113495bSYour Name 58*5113495bSYour Name #define WOW_LARGE_RX_RTPM_DELAY 1200 59*5113495bSYour Name 60*5113495bSYour Name /** 61*5113495bSYour Name * enum pmo_vdev_param_id: tell vdev param id 62*5113495bSYour Name * @pmo_vdev_param_listen_interval: vdev listen interval param id 63*5113495bSYour Name * @pmo_vdev_param_dtim_policy: vdev param dtim policy 64*5113495bSYour Name * @pmo_vdev_param_forced_dtim_count: vdev param forced dtim count 65*5113495bSYour Name * @pmo_vdev_param_moddtim: vdev param moddtim 66*5113495bSYour Name * @pmo_vdev_max_param: Max vdev param id 67*5113495bSYour Name */ 68*5113495bSYour Name enum pmo_vdev_param_id { 69*5113495bSYour Name pmo_vdev_param_listen_interval = 0, 70*5113495bSYour Name pmo_vdev_param_dtim_policy, 71*5113495bSYour Name pmo_vdev_param_forced_dtim_count, 72*5113495bSYour Name pmo_vdev_param_moddtim, 73*5113495bSYour Name pmo_vdev_max_param 74*5113495bSYour Name }; 75*5113495bSYour Name 76*5113495bSYour Name /** 77*5113495bSYour Name * enum pmo_beacon_dtim_policy: tell vdev beacon policy 78*5113495bSYour Name * @pmo_ignore_dtim: fwr need to igonre dtime policy 79*5113495bSYour Name * @pmo_normal_dtim: fwr need to use normal dtime policy 80*5113495bSYour Name * @pmo_stick_dtim: fwr need to use stick dtime policy 81*5113495bSYour Name * @pmo_auto_dtim: fwr need to auto dtime policy 82*5113495bSYour Name */ 83*5113495bSYour Name enum pmo_beacon_dtim_policy { 84*5113495bSYour Name pmo_ignore_dtim = 0x01, 85*5113495bSYour Name pmo_normal_dtim = 0x02, 86*5113495bSYour Name pmo_stick_dtim = 0x03, 87*5113495bSYour Name pmo_auto_dtim = 0x04, 88*5113495bSYour Name }; 89*5113495bSYour Name 90*5113495bSYour Name /** 91*5113495bSYour Name * enum pmo_sta_powersave_param - STA powersave parameters 92*5113495bSYour Name * @pmo_sta_ps_param_rx_wake_policy: Controls how frames are retrievd from AP 93*5113495bSYour Name * while STA is sleeping. 94*5113495bSYour Name * @pmo_sta_ps_param_tx_wake_threshold: STA will go active after this many TX 95*5113495bSYour Name * @pmo_sta_ps_param_pspoll_count:No of PS-Poll to send before STA wakes up 96*5113495bSYour Name * @pmo_sta_ps_param_inactivity_time: TX/RX inactivity time in msec before 97*5113495bSYour Name * going to sleep. 98*5113495bSYour Name * @pmo_sta_ps_param_uapsd: Set uapsd configuration. 99*5113495bSYour Name * @pmo_sta_ps_param_advanced_power_pspoll_count: No of PS-Poll to send before 100*5113495bSYour Name * STA wakes up in Advanced Power Save Mode. 101*5113495bSYour Name * @pmo_sta_ps_enable_advanced_power: Enable Advanced Power Save 102*5113495bSYour Name * @pmo_sta_ps_param_advanced_power_max_tx_before_wake: Number of TX frames 103*5113495bSYour Name * before the entering the Active state 104*5113495bSYour Name * @pmo_sta_ps_param_ito_repeat_count: Indicates ito repeated count 105*5113495bSYour Name * @pmo_sta_ps_param_spec_wake_interval: OPM speculative wake interval 106*5113495bSYour Name */ 107*5113495bSYour Name enum pmo_sta_powersave_param { 108*5113495bSYour Name pmo_sta_ps_param_rx_wake_policy = 0, 109*5113495bSYour Name pmo_sta_ps_param_tx_wake_threshold = 1, 110*5113495bSYour Name pmo_sta_ps_param_pspoll_count = 2, 111*5113495bSYour Name pmo_sta_ps_param_inactivity_time = 3, 112*5113495bSYour Name pmo_sta_ps_param_uapsd = 4, 113*5113495bSYour Name pmo_sta_ps_param_advanced_power_pspoll_count = 5, 114*5113495bSYour Name pmo_sta_ps_enable_advanced_power = 6, 115*5113495bSYour Name pmo_sta_ps_param_advanced_power_max_tx_before_wake = 7, 116*5113495bSYour Name pmo_sta_ps_param_ito_repeat_count = 8, 117*5113495bSYour Name pmo_sta_ps_param_spec_wake_interval = 9, 118*5113495bSYour Name }; 119*5113495bSYour Name 120*5113495bSYour Name /** 121*5113495bSYour Name * enum pmo_wow_resume_trigger - resume trigger override setting values 122*5113495bSYour Name * @PMO_WOW_RESUME_TRIGGER_DEFAULT: fw to use platform default resume trigger 123*5113495bSYour Name * @PMO_WOW_RESUME_TRIGGER_HTC_WAKEUP: force fw to use HTC Wakeup to resume 124*5113495bSYour Name * @PMO_WOW_RESUME_TRIGGER_GPIO: force fw to use GPIO to resume 125*5113495bSYour Name * @PMO_WOW_RESUME_TRIGGER_COUNT: number of resume trigger options 126*5113495bSYour Name */ 127*5113495bSYour Name enum pmo_wow_resume_trigger { 128*5113495bSYour Name /* always first */ 129*5113495bSYour Name PMO_WOW_RESUME_TRIGGER_DEFAULT = 0, 130*5113495bSYour Name PMO_WOW_RESUME_TRIGGER_HTC_WAKEUP, 131*5113495bSYour Name PMO_WOW_RESUME_TRIGGER_GPIO, 132*5113495bSYour Name /* always last */ 133*5113495bSYour Name PMO_WOW_RESUME_TRIGGER_COUNT 134*5113495bSYour Name }; 135*5113495bSYour Name 136*5113495bSYour Name /** 137*5113495bSYour Name * enum pmo_wow_interface_pause - interface pause override setting values 138*5113495bSYour Name * @PMO_WOW_INTERFACE_PAUSE_DEFAULT: use platform default iface pause setting 139*5113495bSYour Name * @PMO_WOW_INTERFACE_PAUSE_ENABLE: force interface pause setting to enabled 140*5113495bSYour Name * @PMO_WOW_INTERFACE_PAUSE_DISABLE: force interface pause setting to disabled 141*5113495bSYour Name * @PMO_WOW_INTERFACE_PAUSE_COUNT: number of interface pause options 142*5113495bSYour Name */ 143*5113495bSYour Name enum pmo_wow_interface_pause { 144*5113495bSYour Name /* always first */ 145*5113495bSYour Name PMO_WOW_INTERFACE_PAUSE_DEFAULT = 0, 146*5113495bSYour Name PMO_WOW_INTERFACE_PAUSE_ENABLE, 147*5113495bSYour Name PMO_WOW_INTERFACE_PAUSE_DISABLE, 148*5113495bSYour Name /* always last */ 149*5113495bSYour Name PMO_WOW_INTERFACE_PAUSE_COUNT 150*5113495bSYour Name }; 151*5113495bSYour Name 152*5113495bSYour Name /** 153*5113495bSYour Name * enum pmo_wow_enable_type - used to enable/disable WoW. 154*5113495bSYour Name * @PMO_WOW_DISABLE_BOTH: Disable both magic pattern match and pattern 155*5113495bSYour Name * byte match. 156*5113495bSYour Name * @PMO_WOW_ENABLE_MAGIC_PATTERN: Enable magic pattern match on all interfaces. 157*5113495bSYour Name * @PMO_WOW_ENABLE_PATTERN_BYTE: Enable pattern byte match on all interfaces. 158*5113495bSYour Name * @PMO_WOW_ENABLE_BOTH: Enable both magic pattern and pattern byte match on 159*5113495bSYour Name * all interfaces. 160*5113495bSYour Name */ 161*5113495bSYour Name enum pmo_wow_enable_type { 162*5113495bSYour Name PMO_WOW_DISABLE_BOTH = 0, 163*5113495bSYour Name PMO_WOW_ENABLE_MAGIC_PATTERN, 164*5113495bSYour Name PMO_WOW_ENABLE_PATTERN_BYTE, 165*5113495bSYour Name PMO_WOW_ENABLE_BOTH 166*5113495bSYour Name }; 167*5113495bSYour Name 168*5113495bSYour Name /** 169*5113495bSYour Name * enum powersave_mode - powersave_mode 170*5113495bSYour Name * @PMO_PS_ADVANCED_POWER_SAVE_DISABLE: Disable advanced power save mode 171*5113495bSYour Name * @PMO_PS_ADVANCED_POWER_SAVE_ENABLE: Enable power save mode 172*5113495bSYour Name * @PMO_PS_ADVANCED_POWER_SAVE_USER_DEFINED: User Defined 173*5113495bSYour Name */ 174*5113495bSYour Name enum powersave_mode { 175*5113495bSYour Name PMO_PS_ADVANCED_POWER_SAVE_DISABLE = 0, 176*5113495bSYour Name PMO_PS_ADVANCED_POWER_SAVE_ENABLE = 1, 177*5113495bSYour Name PMO_PS_ADVANCED_POWER_SAVE_USER_DEFINED = 2 178*5113495bSYour Name }; 179*5113495bSYour Name 180*5113495bSYour Name /** 181*5113495bSYour Name * enum pmo_suspend_mode - suspend_mode 182*5113495bSYour Name * @PMO_SUSPEND_NONE: Does not support suspend 183*5113495bSYour Name * @PMO_SUSPEND_LEGENCY: Legency PDEV suspend mode 184*5113495bSYour Name * @PMO_SUSPEND_WOW: WoW suspend mode 185*5113495bSYour Name * @PMO_SUSPEND_SHUTDOWN: Shutdown suspend mode. Shutdown while suspend 186*5113495bSYour Name */ 187*5113495bSYour Name enum pmo_suspend_mode { 188*5113495bSYour Name PMO_SUSPEND_NONE = 0, 189*5113495bSYour Name PMO_SUSPEND_LEGENCY, 190*5113495bSYour Name PMO_SUSPEND_WOW, 191*5113495bSYour Name PMO_SUSPEND_SHUTDOWN 192*5113495bSYour Name }; 193*5113495bSYour Name 194*5113495bSYour Name #define PMO_TARGET_SUSPEND_TIMEOUT (4000) 195*5113495bSYour Name #define PMO_WAKE_LOCK_TIMEOUT 1000 196*5113495bSYour Name #define PMO_RESUME_TIMEOUT (4000) 197*5113495bSYour Name 198*5113495bSYour Name /** 199*5113495bSYour Name * struct pmo_wow_enable_params - A collection of wow enable override parameters 200*5113495bSYour Name * @is_unit_test: true to notify fw this is a unit-test suspend 201*5113495bSYour Name * @interface_pause: used to override the interface pause indication sent to fw 202*5113495bSYour Name * @resume_trigger: used to force fw to use a particular resume method 203*5113495bSYour Name */ 204*5113495bSYour Name struct pmo_wow_enable_params { 205*5113495bSYour Name bool is_unit_test; 206*5113495bSYour Name enum pmo_wow_interface_pause interface_pause; 207*5113495bSYour Name enum pmo_wow_resume_trigger resume_trigger; 208*5113495bSYour Name }; 209*5113495bSYour Name 210*5113495bSYour Name /** 211*5113495bSYour Name * typedef pmo_psoc_suspend_handler() - psoc suspend handler 212*5113495bSYour Name * @psoc: psoc being suspended 213*5113495bSYour Name * @arg: iterator argument 214*5113495bSYour Name * 215*5113495bSYour Name * Return: QDF_STATUS_SUCCESS if suspended, QDF_STATUS_E_* if failure 216*5113495bSYour Name */ 217*5113495bSYour Name typedef QDF_STATUS(*pmo_psoc_suspend_handler) 218*5113495bSYour Name (struct wlan_objmgr_psoc *psoc, void *arg); 219*5113495bSYour Name 220*5113495bSYour Name /** 221*5113495bSYour Name * typedef pmo_psoc_resume_handler() - psoc resume handler 222*5113495bSYour Name * @psoc: psoc being resumed 223*5113495bSYour Name * @arg: iterator argument 224*5113495bSYour Name * 225*5113495bSYour Name * Return: QDF_STATUS_SUCCESS if resumed, QDF_STATUS_E_* if failure 226*5113495bSYour Name */ 227*5113495bSYour Name typedef QDF_STATUS (*pmo_psoc_resume_handler) 228*5113495bSYour Name (struct wlan_objmgr_psoc *psoc, void *arg); 229*5113495bSYour Name 230*5113495bSYour Name /** 231*5113495bSYour Name * enum pmo_offload_trigger: trigger information 232*5113495bSYour Name * @pmo_apps_suspend: trigger is apps suspend 233*5113495bSYour Name * @pmo_apps_resume: trigger is apps resume 234*5113495bSYour Name * @pmo_runtime_suspend: trigger is runtime suspend 235*5113495bSYour Name * @pmo_runtime_resume: trigger is runtime resume 236*5113495bSYour Name * @pmo_ipv4_change_notify: trigger is ipv4 change handler 237*5113495bSYour Name * @pmo_ipv6_change_notify: trigger is ipv6 change handler 238*5113495bSYour Name * @pmo_mc_list_change_notify: trigger is multicast list change 239*5113495bSYour Name * @pmo_ns_offload_dynamic_update: enable/disable ns offload on the fly 240*5113495bSYour Name * @pmo_peer_disconnect: trigger is peer disconnect 241*5113495bSYour Name * @pmo_mcbc_setting_dynamic_update: mcbc value update on the fly 242*5113495bSYour Name * @pmo_arp_ns_offload_dynamic_update: enable/disable arp/ns offload on the fly 243*5113495bSYour Name * 244*5113495bSYour Name * @pmo_offload_trigger_max: Max trigger value 245*5113495bSYour Name */ 246*5113495bSYour Name enum pmo_offload_trigger { 247*5113495bSYour Name pmo_apps_suspend = 0, 248*5113495bSYour Name pmo_apps_resume, 249*5113495bSYour Name pmo_runtime_suspend, 250*5113495bSYour Name pmo_runtime_resume, 251*5113495bSYour Name pmo_ipv4_change_notify, 252*5113495bSYour Name pmo_ipv6_change_notify, 253*5113495bSYour Name pmo_mc_list_change_notify, 254*5113495bSYour Name pmo_ns_offload_dynamic_update, 255*5113495bSYour Name pmo_peer_disconnect, 256*5113495bSYour Name pmo_mcbc_setting_dynamic_update, 257*5113495bSYour Name pmo_arp_ns_offload_dynamic_update, 258*5113495bSYour Name 259*5113495bSYour Name pmo_offload_trigger_max, 260*5113495bSYour Name }; 261*5113495bSYour Name 262*5113495bSYour Name /** 263*5113495bSYour Name * enum pmo_auto_pwr_detect_failure_mode - auto detect failure modes 264*5113495bSYour Name * @PMO_FW_TO_CRASH_ON_PWR_FAILURE: Don't register wow wakeup event and FW 265*5113495bSYour Name * crashes on power failure 266*5113495bSYour Name * @PMO_FW_TO_SEND_WOW_IND_ON_PWR_FAILURE: Register wow wakeup event and FW 267*5113495bSYour Name * sends failure event to host on power failure 268*5113495bSYour Name * @PMO_FW_TO_REJUVENATE_ON_PWR_FAILURE: Don't register wow wakeup event and 269*5113495bSYour Name * FW silently rejuvenate on power failure 270*5113495bSYour Name * @PMO_AUTO_PWR_FAILURE_DETECT_DISABLE: Don't register wow wakeup event and the 271*5113495bSYour Name * auto power failure detect feature is disabled in FW. 272*5113495bSYour Name */ 273*5113495bSYour Name enum pmo_auto_pwr_detect_failure_mode { 274*5113495bSYour Name PMO_FW_TO_CRASH_ON_PWR_FAILURE, 275*5113495bSYour Name PMO_FW_TO_SEND_WOW_IND_ON_PWR_FAILURE, 276*5113495bSYour Name PMO_FW_TO_REJUVENATE_ON_PWR_FAILURE, 277*5113495bSYour Name PMO_AUTO_PWR_FAILURE_DETECT_DISABLE 278*5113495bSYour Name }; 279*5113495bSYour Name 280*5113495bSYour Name /** 281*5113495bSYour Name * enum active_apf_mode - the modes active APF can operate in 282*5113495bSYour Name * @ACTIVE_APF_DISABLED: APF is disabled in active mode 283*5113495bSYour Name * @ACTIVE_APF_ENABLED: APF is enabled for all packets 284*5113495bSYour Name * @ACTIVE_APF_ADAPTIVE: APF is enabled for packets up to some threshold 285*5113495bSYour Name * @ACTIVE_APF_MODE_COUNT: The number of active APF modes 286*5113495bSYour Name */ 287*5113495bSYour Name enum active_apf_mode { 288*5113495bSYour Name ACTIVE_APF_DISABLED = 0, 289*5113495bSYour Name ACTIVE_APF_ENABLED, 290*5113495bSYour Name ACTIVE_APF_ADAPTIVE, 291*5113495bSYour Name ACTIVE_APF_MODE_COUNT 292*5113495bSYour Name }; 293*5113495bSYour Name 294*5113495bSYour Name /** 295*5113495bSYour Name * enum pmo_gpio_wakeup_mode - gpio wakeup mode 296*5113495bSYour Name * @PMO_GPIO_WAKEUP_MODE_INVALID: gpio wakeup trigger invalid 297*5113495bSYour Name * @PMO_GPIO_WAKEUP_MODE_RISING: gpio wakeup trigger rising 298*5113495bSYour Name * @PMO_GPIO_WAKEUP_MODE_FALLING: gpio wakeup trigger failing 299*5113495bSYour Name * @PMO_GPIO_WAKEUP_MODE_HIGH: gpio wakeup trigger high 300*5113495bSYour Name * @PMO_GPIO_WAKEUP_MODE_LOW: gpio wakeup trigger low 301*5113495bSYour Name */ 302*5113495bSYour Name enum pmo_gpio_wakeup_mode { 303*5113495bSYour Name PMO_GPIO_WAKEUP_MODE_INVALID, 304*5113495bSYour Name PMO_GPIO_WAKEUP_MODE_RISING, 305*5113495bSYour Name PMO_GPIO_WAKEUP_MODE_FALLING, 306*5113495bSYour Name PMO_GPIO_WAKEUP_MODE_HIGH, 307*5113495bSYour Name PMO_GPIO_WAKEUP_MODE_LOW, 308*5113495bSYour Name }; 309*5113495bSYour Name 310*5113495bSYour Name #ifdef WLAN_FEATURE_ICMP_OFFLOAD 311*5113495bSYour Name #define ICMP_MAX_IPV6_ADDRESS 16 312*5113495bSYour Name 313*5113495bSYour Name /** 314*5113495bSYour Name * struct pmo_icmp_offload - structure to hold icmp param 315*5113495bSYour Name * 316*5113495bSYour Name * @vdev_id: vdev id 317*5113495bSYour Name * @enable: enable/disable 318*5113495bSYour Name * @trigger: icmp offload trigger information 319*5113495bSYour Name * @ipv6_count: number of host ipv6 address 320*5113495bSYour Name * @ipv4_addr: host interface ipv4 address 321*5113495bSYour Name * @ipv6_addr: array of host ipv6 address 322*5113495bSYour Name * 323*5113495bSYour Name **/ 324*5113495bSYour Name struct pmo_icmp_offload { 325*5113495bSYour Name uint8_t vdev_id; 326*5113495bSYour Name bool enable; 327*5113495bSYour Name enum pmo_offload_trigger trigger; 328*5113495bSYour Name uint8_t ipv6_count; 329*5113495bSYour Name uint8_t ipv4_addr[QDF_IPV4_ADDR_SIZE]; 330*5113495bSYour Name uint8_t ipv6_addr[ICMP_MAX_IPV6_ADDRESS][QDF_IPV6_ADDR_SIZE]; 331*5113495bSYour Name }; 332*5113495bSYour Name #endif 333*5113495bSYour Name 334*5113495bSYour Name /* 335*5113495bSYour Name * enum pmo_page_fault_action - Host action on FW page fault 336*5113495bSYour Name * @PMO_PF_HOST_ACTION_NO_OP: Host will ignore PF wakeup event. 337*5113495bSYour Name * @PMO_PF_HOST_ACTION_TRIGGER_SSR: Host will trigger SSR on PF threshold. 338*5113495bSYour Name * @PMO_PF_HOST_ACTION_NOTIFY_APPS: Host will notify APPS on PF threshold. 339*5113495bSYour Name * 340*5113495bSYour Name * @PMO_PF_HOST_ACTION_MAX: Reserved and invalid value 341*5113495bSYour Name */ 342*5113495bSYour Name enum pmo_page_fault_action { 343*5113495bSYour Name PMO_PF_HOST_ACTION_NO_OP = 0, 344*5113495bSYour Name PMO_PF_HOST_ACTION_TRIGGER_SSR = 1, 345*5113495bSYour Name PMO_PF_HOST_ACTION_NOTIFY_APPS = 2, 346*5113495bSYour Name 347*5113495bSYour Name /* Keep it last */ 348*5113495bSYour Name PMO_PF_HOST_ACTION_MAX, 349*5113495bSYour Name }; 350*5113495bSYour Name 351*5113495bSYour Name /** 352*5113495bSYour Name * struct pmo_psoc_cfg - user configuration required for pmo 353*5113495bSYour Name * @ptrn_match_enable_all_vdev: true when pattern match is enable for all vdev 354*5113495bSYour Name * @apf_enable: true if psoc supports apf else false 355*5113495bSYour Name * @arp_offload_enable: true if arp offload is supported for psoc else false 356*5113495bSYour Name * @hw_filter_mode_bitmap: which mode the hardware filter should use during DTIM 357*5113495bSYour Name * @ns_offload_enable_static: true if psoc supports ns offload in ini else false 358*5113495bSYour Name * @ns_offload_enable_dynamic: to enable / disable the ns offload using 359*5113495bSYour Name * ioctl or vendor command. 360*5113495bSYour Name * @packet_filter_enabled: true if feature is enabled by configuration 361*5113495bSYour Name * @ssdp: true if psoc supports if ssdp configuration in wow mode 362*5113495bSYour Name * @enable_mc_list: true if psoc supports mc addr list else false 363*5113495bSYour Name * @active_mode_offload: true if psoc supports active mode offload else false 364*5113495bSYour Name * @ap_arpns_support: true if psoc supports arp ns for ap mode 365*5113495bSYour Name * @d0_wow_supported: true if psoc supports D0 wow command 366*5113495bSYour Name * @ra_ratelimit_enable: true when ra filtering ins eanbled else false 367*5113495bSYour Name * @ra_ratelimit_interval: ra packets interval 368*5113495bSYour Name * @magic_ptrn_enable: true when magic pattern is enabled else false 369*5113495bSYour Name * @deauth_enable: true when wake up on deauth is enabled else false 370*5113495bSYour Name * @disassoc_enable: true when wake up on disassoc is enabled else false 371*5113495bSYour Name * @lpass_enable: true when lpass is enabled else false 372*5113495bSYour Name * @max_ps_poll: max power save poll 373*5113495bSYour Name * @sta_dynamic_dtim: station dynamic DTIM value 374*5113495bSYour Name * @sta_mod_dtim: station modulated DTIM value 375*5113495bSYour Name * @sta_max_li_mod_dtim: station max listen interval DTIM value 376*5113495bSYour Name * @sta_forced_dtim: station forced DTIM value 377*5113495bSYour Name * @wow_enable: enable wow with majic pattern match or pattern byte match 378*5113495bSYour Name * @power_save_mode: power save mode for psoc 379*5113495bSYour Name * @default_power_save_mode: default power save mode for psoc 380*5113495bSYour Name * @suspend_mode: suspend mode for psoc 381*5113495bSYour Name * @runtime_pm_delay: set runtime pm's inactivity timer 382*5113495bSYour Name * @extwow_goto_suspend: true when extended WoW enabled else false 383*5113495bSYour Name * @extwow_app1_wakeup_pin_num: set wakeup1 PIN number 384*5113495bSYour Name * @extwow_app2_wakeup_pin_num: set wakeup2 PIN number 385*5113495bSYour Name * @extwow_app2_init_ping_interval: set keep alive init ping interval 386*5113495bSYour Name * @extwow_app2_min_ping_interval: set keep alive minimum ping interval 387*5113495bSYour Name * @extwow_app2_max_ping_interval: set keep alive maximum ping interval 388*5113495bSYour Name * @extwow_app2_inc_ping_interval: set keep alive increment ping interval 389*5113495bSYour Name * @extwow_app2_tcp_src_port: set TCP source port 390*5113495bSYour Name * @extwow_app2_tcp_dst_port: set TCP dest port 391*5113495bSYour Name * @extwow_app2_tcp_tx_timeout: set TCP TX timeout 392*5113495bSYour Name * @extwow_app2_tcp_rx_timeout: set TCP RX timeout 393*5113495bSYour Name * @auto_power_save_fail_mode: auto detect power save failure 394*5113495bSYour Name * @is_wow_pulse_supported: true when wow pulse feature is enabled else false 395*5113495bSYour Name * @wow_pulse_pin: GPIO pin of wow pulse feature 396*5113495bSYour Name * @wow_pulse_interval_high: The interval of high level in the pulse 397*5113495bSYour Name * @wow_pulse_interval_low: The interval of low level in the pulse 398*5113495bSYour Name * @wow_pulse_repeat_count: Pulse repeat count 399*5113495bSYour Name * @wow_pulse_init_state: Pulse init level 400*5113495bSYour Name * @packet_filters_bitmap: Packet filter bitmap configuration 401*5113495bSYour Name * @enable_sap_suspend: enable SoftAP suspend 402*5113495bSYour Name * @wow_data_inactivity_timeout: power save wow data inactivity timeout 403*5113495bSYour Name * wow mode 404*5113495bSYour Name * @wow_spec_wake_interval: OPM speculatvie wkae interval in wow mode 405*5113495bSYour Name * @active_uc_apf_mode: Setting that determines how APF is applied in active 406*5113495bSYour Name * mode for uc packets 407*5113495bSYour Name * @active_mc_bc_apf_mode: Setting that determines how APF is applied in 408*5113495bSYour Name * active mode for MC/BC packets 409*5113495bSYour Name * @ito_repeat_count: Indicates ito repeated count 410*5113495bSYour Name * @is_mod_dtim_on_sys_suspend_enabled: true when mod dtim is enabled for 411*5113495bSYour Name * system suspend wow else false 412*5113495bSYour Name * @is_bus_suspend_enabled_in_sap_mode: Can bus suspend in SoftAP mode 413*5113495bSYour Name * @is_bus_suspend_enabled_in_go_mode: Can bus suspend in P2P GO mode 414*5113495bSYour Name * @enable_gpio_wakeup: enable gpio wakeup 415*5113495bSYour Name * @gpio_wakeup_pin: gpio wakeup pin 416*5113495bSYour Name * @gpio_wakeup_mode: gpio wakeup mode 417*5113495bSYour Name * @igmp_version_support: igmp version support 418*5113495bSYour Name * @igmp_offload_enable: enable/disable igmp offload feature to fw 419*5113495bSYour Name * @disconnect_sap_tdls_in_wow: sap/p2p_go disconnect or teardown tdls link 420*5113495bSYour Name * @is_icmp_offload_enable: true if icmp offload is supported 421*5113495bSYour Name * for psoc else false 422*5113495bSYour Name * @host_pf_action: Action to take on page fault 423*5113495bSYour Name * @min_pagefault_wakeups_for_action: Min number of pagefaults after which 424*5113495bSYour Name * host needs to start act upon. 425*5113495bSYour Name * @interval_for_pagefault_wakeup_counts: Time in ms in which max pagefault 426*5113495bSYour Name * wakeups needs to be monitored. 427*5113495bSYour Name * @ssr_frequency_on_pagefault: Time in ms in which SSR needs to be triggered 428*5113495bSYour Name * on max pagefault 429*5113495bSYour Name */ 430*5113495bSYour Name struct pmo_psoc_cfg { 431*5113495bSYour Name bool ptrn_match_enable_all_vdev; 432*5113495bSYour Name bool apf_enable; 433*5113495bSYour Name bool arp_offload_enable; 434*5113495bSYour Name enum pmo_hw_filter_mode hw_filter_mode_bitmap; 435*5113495bSYour Name bool ns_offload_enable_static; 436*5113495bSYour Name bool ns_offload_enable_dynamic; 437*5113495bSYour Name bool packet_filter_enabled; 438*5113495bSYour Name bool ssdp; 439*5113495bSYour Name bool enable_mc_list; 440*5113495bSYour Name bool active_mode_offload; 441*5113495bSYour Name bool ap_arpns_support; 442*5113495bSYour Name bool d0_wow_supported; 443*5113495bSYour Name bool ra_ratelimit_enable; 444*5113495bSYour Name #ifdef FEATURE_WLAN_RA_FILTERING 445*5113495bSYour Name uint16_t ra_ratelimit_interval; 446*5113495bSYour Name #endif 447*5113495bSYour Name bool magic_ptrn_enable; 448*5113495bSYour Name bool deauth_enable; 449*5113495bSYour Name bool disassoc_enable; 450*5113495bSYour Name bool lpass_enable; 451*5113495bSYour Name uint8_t max_ps_poll; 452*5113495bSYour Name uint8_t sta_dynamic_dtim; 453*5113495bSYour Name uint8_t sta_mod_dtim; 454*5113495bSYour Name uint8_t sta_max_li_mod_dtim; 455*5113495bSYour Name bool sta_forced_dtim; 456*5113495bSYour Name enum pmo_wow_enable_type wow_enable; 457*5113495bSYour Name enum powersave_mode power_save_mode; 458*5113495bSYour Name enum powersave_mode default_power_save_mode; 459*5113495bSYour Name enum pmo_suspend_mode suspend_mode; 460*5113495bSYour Name #ifdef FEATURE_RUNTIME_PM 461*5113495bSYour Name uint32_t runtime_pm_delay; 462*5113495bSYour Name #endif 463*5113495bSYour Name #ifdef WLAN_FEATURE_EXTWOW_SUPPORT 464*5113495bSYour Name bool extwow_goto_suspend; 465*5113495bSYour Name uint8_t extwow_app1_wakeup_pin_num; 466*5113495bSYour Name uint8_t extwow_app2_wakeup_pin_num; 467*5113495bSYour Name uint32_t extwow_app2_init_ping_interval; 468*5113495bSYour Name uint32_t extwow_app2_min_ping_interval; 469*5113495bSYour Name uint32_t extwow_app2_max_ping_interval; 470*5113495bSYour Name uint32_t extwow_app2_inc_ping_interval; 471*5113495bSYour Name uint16_t extwow_app2_tcp_src_port; 472*5113495bSYour Name uint16_t extwow_app2_tcp_dst_port; 473*5113495bSYour Name uint32_t extwow_app2_tcp_tx_timeout; 474*5113495bSYour Name uint32_t extwow_app2_tcp_rx_timeout; 475*5113495bSYour Name #endif 476*5113495bSYour Name enum pmo_auto_pwr_detect_failure_mode auto_power_save_fail_mode; 477*5113495bSYour Name #ifdef WLAN_FEATURE_WOW_PULSE 478*5113495bSYour Name bool is_wow_pulse_supported; 479*5113495bSYour Name uint8_t wow_pulse_pin; 480*5113495bSYour Name uint16_t wow_pulse_interval_high; 481*5113495bSYour Name uint16_t wow_pulse_interval_low; 482*5113495bSYour Name uint32_t wow_pulse_repeat_count; 483*5113495bSYour Name uint32_t wow_pulse_init_state; 484*5113495bSYour Name #endif 485*5113495bSYour Name #ifdef WLAN_FEATURE_PACKET_FILTERING 486*5113495bSYour Name uint8_t packet_filters_bitmap; 487*5113495bSYour Name #endif 488*5113495bSYour Name bool enable_sap_suspend; 489*5113495bSYour Name uint8_t wow_data_inactivity_timeout; 490*5113495bSYour Name uint8_t wow_spec_wake_interval; 491*5113495bSYour Name enum active_apf_mode active_uc_apf_mode; 492*5113495bSYour Name enum active_apf_mode active_mc_bc_apf_mode; 493*5113495bSYour Name uint8_t ito_repeat_count; 494*5113495bSYour Name bool is_mod_dtim_on_sys_suspend_enabled; 495*5113495bSYour Name bool is_bus_suspend_enabled_in_sap_mode; 496*5113495bSYour Name bool is_bus_suspend_enabled_in_go_mode; 497*5113495bSYour Name #ifdef WLAN_ENABLE_GPIO_WAKEUP 498*5113495bSYour Name bool enable_gpio_wakeup; 499*5113495bSYour Name uint32_t gpio_wakeup_pin; 500*5113495bSYour Name enum pmo_gpio_wakeup_mode gpio_wakeup_mode; 501*5113495bSYour Name #endif 502*5113495bSYour Name #ifdef WLAN_FEATURE_IGMP_OFFLOAD 503*5113495bSYour Name uint32_t igmp_version_support; 504*5113495bSYour Name bool igmp_offload_enable; 505*5113495bSYour Name #endif 506*5113495bSYour Name bool disconnect_sap_tdls_in_wow; 507*5113495bSYour Name #ifdef WLAN_FEATURE_ICMP_OFFLOAD 508*5113495bSYour Name bool is_icmp_offload_enable; 509*5113495bSYour Name #endif 510*5113495bSYour Name enum pmo_page_fault_action host_pf_action; 511*5113495bSYour Name uint8_t min_pagefault_wakeups_for_action; 512*5113495bSYour Name uint32_t interval_for_pagefault_wakeup_counts; 513*5113495bSYour Name uint32_t ssr_frequency_on_pagefault; 514*5113495bSYour Name }; 515*5113495bSYour Name 516*5113495bSYour Name /** 517*5113495bSYour Name * struct pmo_device_caps - device capability flags (true if feature is 518*5113495bSYour Name * supported) 519*5113495bSYour Name * @apf: Android Packet Filter (aka BPF) 520*5113495bSYour Name * @arp_ns_offload: APR/NS offload 521*5113495bSYour Name * @packet_filter: Legacy "Packet Filter" 522*5113495bSYour Name * @unified_wow: Firmware supports "interface pause" flag in WoW command. 523*5113495bSYour Name * This allows both D0-WoW (bus up) and Non-D0-WoW (bus down) to use one 524*5113495bSYour Name * unified command 525*5113495bSYour Name * @li_offload: Firmware has listen interval offload support 526*5113495bSYour Name */ 527*5113495bSYour Name struct pmo_device_caps { 528*5113495bSYour Name bool apf; 529*5113495bSYour Name bool arp_ns_offload; 530*5113495bSYour Name bool packet_filter; 531*5113495bSYour Name bool unified_wow; 532*5113495bSYour Name bool li_offload; 533*5113495bSYour Name }; 534*5113495bSYour Name 535*5113495bSYour Name /** 536*5113495bSYour Name * struct pmo_igmp_offload_req - structure to hold igmp param 537*5113495bSYour Name * 538*5113495bSYour Name * @vdev_id: vdev id 539*5113495bSYour Name * @enable: enable/disable 540*5113495bSYour Name * @version_support: version support 541*5113495bSYour Name * @num_grp_ip_address: num grp ip addr 542*5113495bSYour Name * @grp_ip_address: array of grp_ip_address 543*5113495bSYour Name * 544*5113495bSYour Name **/ 545*5113495bSYour Name struct pmo_igmp_offload_req { 546*5113495bSYour Name uint32_t vdev_id; 547*5113495bSYour Name bool enable; 548*5113495bSYour Name uint32_t version_support; 549*5113495bSYour Name uint32_t num_grp_ip_address; 550*5113495bSYour Name uint32_t grp_ip_address[MAX_MC_IP_ADDR]; 551*5113495bSYour Name }; 552*5113495bSYour Name 553*5113495bSYour Name /** 554*5113495bSYour Name * struct pmo_ps_params - structure to hold OPM params 555*5113495bSYour Name * 556*5113495bSYour Name * @opm_mode: OPM mode 557*5113495bSYour Name * @ps_ito: power save inactivity timeout 558*5113495bSYour Name * @spec_wake: OPM speculative wake interval 559*5113495bSYour Name */ 560*5113495bSYour Name struct pmo_ps_params { 561*5113495bSYour Name enum powersave_mode opm_mode; 562*5113495bSYour Name uint16_t ps_ito; 563*5113495bSYour Name uint16_t spec_wake; 564*5113495bSYour Name }; 565*5113495bSYour Name #endif /* end of _WLAN_PMO_COMMONP_STRUCT_H_ */ 566