xref: /wlan-driver/qcacld-3.0/components/pmo/dispatcher/inc/wlan_pmo_common_public_struct.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
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