xref: /wlan-driver/qcacld-3.0/components/pmo/dispatcher/inc/wlan_pmo_wow_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) 2023-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 shall be used in
21*5113495bSYour Name  * pmo wow 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_WOW_PUBLIC_STRUCT_H_
28*5113495bSYour Name #include "wlan_pmo_lphb_public_struct.h"
29*5113495bSYour Name 
30*5113495bSYour Name #define _WLAN_PMO_WOW_PUBLIC_STRUCT_H_
31*5113495bSYour Name 
32*5113495bSYour Name #ifndef PMO_WOW_FILTERS_MAX
33*5113495bSYour Name #define PMO_WOW_FILTERS_MAX             22
34*5113495bSYour Name #endif
35*5113495bSYour Name 
36*5113495bSYour Name #define PMO_WOWL_PTRN_MAX_SIZE          146
37*5113495bSYour Name #define PMO_WOWL_PTRN_MASK_MAX_SIZE      19
38*5113495bSYour Name #define PMO_WOWL_BCAST_PATTERN_MAX_SIZE 146
39*5113495bSYour Name 
40*5113495bSYour Name #define PMO_WOW_INTER_PTRN_TOKENIZER   ';'
41*5113495bSYour Name #define PMO_WOW_INTRA_PTRN_TOKENIZER   ':'
42*5113495bSYour Name 
43*5113495bSYour Name #define PMO_WOW_PTRN_MASK_VALID     0xFF
44*5113495bSYour Name #define PMO_NUM_BITS_IN_BYTE           8
45*5113495bSYour Name 
46*5113495bSYour Name 
47*5113495bSYour Name /* Action frame categories */
48*5113495bSYour Name 
49*5113495bSYour Name #define PMO_MAC_ACTION_SPECTRUM_MGMT   0
50*5113495bSYour Name #define PMO_MAC_ACTION_QOS_MGMT        1
51*5113495bSYour Name #define PMO_MAC_ACTION_DLP             2
52*5113495bSYour Name #define PMO_MAC_ACTION_BLKACK          3
53*5113495bSYour Name #define PMO_MAC_ACTION_PUBLIC_USAGE    4
54*5113495bSYour Name #define PMO_MAC_ACTION_RRM             5
55*5113495bSYour Name #define PMO_MAC_ACTION_FAST_BSS_TRNST  6
56*5113495bSYour Name #define PMO_MAC_ACTION_HT              7
57*5113495bSYour Name #define PMO_MAC_ACTION_SA_QUERY        8
58*5113495bSYour Name #define PMO_MAC_ACTION_PROT_DUAL_PUB   9
59*5113495bSYour Name #define PMO_MAC_ACTION_WNM            10
60*5113495bSYour Name #define PMO_MAC_ACTION_UNPROT_WNM     11
61*5113495bSYour Name #define PMO_MAC_ACTION_TDLS           12
62*5113495bSYour Name #define PMO_MAC_ACITON_MESH           13
63*5113495bSYour Name #define PMO_MAC_ACTION_MHF            14
64*5113495bSYour Name #define PMO_MAC_SELF_PROTECTED        15
65*5113495bSYour Name #define PMO_MAC_ACTION_WME            17
66*5113495bSYour Name #define PMO_MAC_ACTION_FST            18
67*5113495bSYour Name #define PMO_MAC_ACTION_RVS            19
68*5113495bSYour Name #define PMO_MAC_ACTION_VHT            21
69*5113495bSYour Name #define PMO_MAC_ACTION_EHT            36
70*5113495bSYour Name #define PMO_MAC_ACTION_PROT_EHT       37
71*5113495bSYour Name #define PMO_VENDOR_PROTECTED          126
72*5113495bSYour Name #define PMO_MAC_ACTION_MAX            256
73*5113495bSYour Name 
74*5113495bSYour Name /*
75*5113495bSYour Name  * ALLOWED_ACTION_FRAMES_BITMAP
76*5113495bSYour Name  *
77*5113495bSYour Name  * Bitmask is based on the below. The frames with 0's
78*5113495bSYour Name  * set to their corresponding bit can be dropped in FW.
79*5113495bSYour Name  *
80*5113495bSYour Name  * -----------------------------+-----+-------+
81*5113495bSYour Name  *         Type                 | Bit | Allow |
82*5113495bSYour Name  * -----------------------------+-----+-------+
83*5113495bSYour Name  * PMO_ACTION_SPECTRUM_MGMT    0      1
84*5113495bSYour Name  * PMO_ACTION_QOS_MGMT         1      1
85*5113495bSYour Name  * PMO_ACTION_DLP              2      0
86*5113495bSYour Name  * PMO_ACTION_BLKACK           3      0
87*5113495bSYour Name  * PMO_ACTION_PUBLIC_USAGE     4      1
88*5113495bSYour Name  * PMO_ACTION_RRM              5      0
89*5113495bSYour Name  * PMO_ACTION_FAST_BSS_TRNST   6      0
90*5113495bSYour Name  * PMO_ACTION_HT               7      0
91*5113495bSYour Name  * PMO_ACTION_SA_QUERY         8      1
92*5113495bSYour Name  * PMO_ACTION_PROT_DUAL_PUB    9      1
93*5113495bSYour Name  * PMO_ACTION_WNM             10      1
94*5113495bSYour Name  * PMO_ACTION_UNPROT_WNM      11      0
95*5113495bSYour Name  * PMO_ACTION_TDLS            12      0
96*5113495bSYour Name  * PMO_ACITON_MESH            13      0
97*5113495bSYour Name  * PMO_ACTION_MHF             14      0
98*5113495bSYour Name  * PMO_SELF_PROTECTED         15      0
99*5113495bSYour Name  * PMO_ACTION_WME             17      1
100*5113495bSYour Name  * PMO_ACTION_FST             18      1
101*5113495bSYour Name  * PMO_ACTION_RVS             19      1
102*5113495bSYour Name  * PMO_ACTION_VHT             21      1
103*5113495bSYour Name  * PMO_MAC_ACTION_EHT         36      1
104*5113495bSYour Name  * PMO_MAC_ACTION_PROT_EHT    37      1
105*5113495bSYour Name  * PMO_VENDOR_PROTECTED       126     1
106*5113495bSYour Name  * ----------------------------+------+-------+
107*5113495bSYour Name  */
108*5113495bSYour Name #define SYSTEM_SUSPEND_ALLOWED_ACTION_FRAMES_BITMAP0 \
109*5113495bSYour Name 			((1 << PMO_MAC_ACTION_SPECTRUM_MGMT) | \
110*5113495bSYour Name 			 (1 << PMO_MAC_ACTION_QOS_MGMT) | \
111*5113495bSYour Name 			 (1 << PMO_MAC_ACTION_PUBLIC_USAGE) | \
112*5113495bSYour Name 			 (1 << PMO_MAC_ACTION_SA_QUERY) | \
113*5113495bSYour Name 			 (1 << PMO_MAC_ACTION_PROT_DUAL_PUB) | \
114*5113495bSYour Name 			 (1 << PMO_MAC_ACTION_WNM) | \
115*5113495bSYour Name 			 (1 << PMO_MAC_ACTION_WME) | \
116*5113495bSYour Name 			 (1 << PMO_MAC_ACTION_FST) | \
117*5113495bSYour Name 			 (1 << PMO_MAC_ACTION_RVS) | \
118*5113495bSYour Name 			 (1 << PMO_MAC_ACTION_VHT))
119*5113495bSYour Name 
120*5113495bSYour Name #define ALLOWED_ACTION_FRAMES_BITMAP1 \
121*5113495bSYour Name 			 ((1 << (PMO_MAC_ACTION_EHT % 32)) |\
122*5113495bSYour Name 			 (1 << (PMO_MAC_ACTION_PROT_EHT % 32)))
123*5113495bSYour Name #define ALLOWED_ACTION_FRAMES_BITMAP2   0x0
124*5113495bSYour Name #define ALLOWED_ACTION_FRAMES_BITMAP3 \
125*5113495bSYour Name 		(1 << (PMO_VENDOR_PROTECTED % 32))
126*5113495bSYour Name 
127*5113495bSYour Name #define ALLOWED_ACTION_FRAMES_BITMAP4   0x0
128*5113495bSYour Name #define ALLOWED_ACTION_FRAMES_BITMAP5   0x0
129*5113495bSYour Name #define ALLOWED_ACTION_FRAMES_BITMAP6   0x0
130*5113495bSYour Name #define ALLOWED_ACTION_FRAMES_BITMAP7   0x0
131*5113495bSYour Name 
132*5113495bSYour Name #define ALLOWED_ACTION_FRAME_MAP_WORDS (PMO_MAC_ACTION_MAX / 32)
133*5113495bSYour Name 
134*5113495bSYour Name #define RUNTIME_PM_ALLOWED_ACTION_FRAMES_BITMAP0 \
135*5113495bSYour Name 		((1 << PMO_MAC_ACTION_SPECTRUM_MGMT) | \
136*5113495bSYour Name 		 (1 << PMO_MAC_ACTION_QOS_MGMT) | \
137*5113495bSYour Name 		 (1 << PMO_MAC_ACTION_PUBLIC_USAGE) | \
138*5113495bSYour Name 		 (1 << PMO_MAC_ACTION_RRM) | \
139*5113495bSYour Name 		 (1 << PMO_MAC_ACTION_SA_QUERY) | \
140*5113495bSYour Name 		 (1 << PMO_MAC_ACTION_PROT_DUAL_PUB) | \
141*5113495bSYour Name 		 (1 << PMO_MAC_ACTION_WNM) | \
142*5113495bSYour Name 		 (1 << PMO_MAC_ACTION_WME) | \
143*5113495bSYour Name 		 (1 << PMO_MAC_ACTION_FST) | \
144*5113495bSYour Name 		 (1 << PMO_MAC_ACTION_RVS) | \
145*5113495bSYour Name 		 (1 << PMO_MAC_ACTION_VHT))
146*5113495bSYour Name 
147*5113495bSYour Name /* Public Action for 20/40 BSS Coexistence */
148*5113495bSYour Name #define PMO_MAC_ACTION_MEASUREMENT_PILOT    7
149*5113495bSYour Name 
150*5113495bSYour Name #define DROP_PUBLIC_ACTION_FRAME_BITMAP \
151*5113495bSYour Name 		(1 << PMO_MAC_ACTION_MEASUREMENT_PILOT)
152*5113495bSYour Name 
153*5113495bSYour Name #ifndef ANI_SUPPORT_11H
154*5113495bSYour Name /*
155*5113495bSYour Name  * DROP_SPEC_MGMT_ACTION_FRAME_BITMAP
156*5113495bSYour Name  *
157*5113495bSYour Name  * Bitmask is based on the below. The frames with 1's
158*5113495bSYour Name  * set to their corresponding bit can be dropped in FW.
159*5113495bSYour Name  *
160*5113495bSYour Name  * ----------------------------------+-----+------+
161*5113495bSYour Name  *         Type                      | Bit | Drop |
162*5113495bSYour Name  * ----------------------------------+-----+------+
163*5113495bSYour Name  * ACTION_SPCT_MSR_REQ                  0     1
164*5113495bSYour Name  * ACTION_SPCT_TPC_REQ                  2     1
165*5113495bSYour Name  * ----------------------------------+-----+------+
166*5113495bSYour Name  */
167*5113495bSYour Name #define DROP_SPEC_MGMT_ACTION_FRAME_BITMAP \
168*5113495bSYour Name 		((1 << ACTION_SPCT_MSR_REQ) |\
169*5113495bSYour Name 		 (1 << ACTION_SPCT_TPC_REQ))
170*5113495bSYour Name #else
171*5113495bSYour Name /*
172*5113495bSYour Name  * If 11H support is defined, dont drop the above action category of
173*5113495bSYour Name  * spectrum mgmt action frames as host driver is processing them.
174*5113495bSYour Name  */
175*5113495bSYour Name #define DROP_SPEC_MGMT_ACTION_FRAME_BITMAP 0
176*5113495bSYour Name #endif /* ANI_SUPPORT_11H */
177*5113495bSYour Name 
178*5113495bSYour Name #define PMO_SUPPORTED_ACTION_CATE           256
179*5113495bSYour Name #define PMO_SUPPORTED_ACTION_CATE_ELE_LIST (PMO_SUPPORTED_ACTION_CATE/32)
180*5113495bSYour Name 
181*5113495bSYour Name /**
182*5113495bSYour Name  * struct pmo_action_wakeup_set_params - action wakeup set params
183*5113495bSYour Name  * @vdev_id: virtual device id
184*5113495bSYour Name  * @operation: 0 reset to fw default, 1 set the bits,
185*5113495bSYour Name  *    2 add the setting bits, 3 delete the setting bits
186*5113495bSYour Name  * @action_category_map: bit mapping.
187*5113495bSYour Name  * @action_per_category: bitmap per action category
188*5113495bSYour Name  */
189*5113495bSYour Name struct pmo_action_wakeup_set_params {
190*5113495bSYour Name 	uint32_t vdev_id;
191*5113495bSYour Name 	uint32_t operation;
192*5113495bSYour Name 	uint32_t action_category_map[PMO_SUPPORTED_ACTION_CATE_ELE_LIST];
193*5113495bSYour Name 	uint32_t action_per_category[PMO_SUPPORTED_ACTION_CATE];
194*5113495bSYour Name };
195*5113495bSYour Name 
196*5113495bSYour Name /**
197*5113495bSYour Name  * enum pmo_wow_action_wakeup_operation - describe action wakeup operation
198*5113495bSYour Name  * @pmo_action_wakeup_reset: reset
199*5113495bSYour Name  * @pmo_action_wakeup_set: set
200*5113495bSYour Name  * @pmo_action_wakeup_add_set: add and set
201*5113495bSYour Name  * @pmo_action_wakeup_del_set: delete and set
202*5113495bSYour Name  */
203*5113495bSYour Name enum pmo_wow_action_wakeup_operation {
204*5113495bSYour Name 	pmo_action_wakeup_reset = 0,
205*5113495bSYour Name 	pmo_action_wakeup_set,
206*5113495bSYour Name 	pmo_action_wakeup_add_set,
207*5113495bSYour Name 	pmo_action_wakeup_del_set,
208*5113495bSYour Name };
209*5113495bSYour Name 
210*5113495bSYour Name /**
211*5113495bSYour Name  * enum pmo_wow_state: enumeration of wow state
212*5113495bSYour Name  * @pmo_wow_state_none: not in wow state
213*5113495bSYour Name  * @pmo_wow_state_legacy_d0: in d0 wow state trigger by legacy d0 wow command
214*5113495bSYour Name  * @pmo_wow_state_unified_d0: in d0 wow state trigger by unified wow command
215*5113495bSYour Name  * @pmo_wow_state_unified_d3: in d3 wow state trigger by unified wow command
216*5113495bSYour Name  */
217*5113495bSYour Name enum pmo_wow_state {
218*5113495bSYour Name 	pmo_wow_state_none = 0,
219*5113495bSYour Name 	pmo_wow_state_legacy_d0,
220*5113495bSYour Name 	pmo_wow_state_unified_d0,
221*5113495bSYour Name 	pmo_wow_state_unified_d3,
222*5113495bSYour Name };
223*5113495bSYour Name 
224*5113495bSYour Name /**
225*5113495bSYour Name  * struct pmo_wow - store wow patterns
226*5113495bSYour Name  * @wow_enable: wow enable/disable
227*5113495bSYour Name  * @wow_enable_cmd_sent: is wow enable command sent to fw
228*5113495bSYour Name  * @is_wow_bus_suspended: true if bus is suspended
229*5113495bSYour Name  * @wow_state: state of wow
230*5113495bSYour Name  * @target_suspend: target suspend event
231*5113495bSYour Name  * @target_resume: target resume event
232*5113495bSYour Name  * @wow_nack: wow negative ack flag
233*5113495bSYour Name  * @reason_code : wow status reason code
234*5113495bSYour Name  * @wow_initial_wake_up: target initial wake up is received
235*5113495bSYour Name  * @wow_wake_lock: wow wake lock
236*5113495bSYour Name  * @lphb_cache: lphb cache
237*5113495bSYour Name  * @lphb_cb_ctx: callback context for lphb, kept as void* as
238*5113495bSYour Name  *                        osif structures are opaque to pmo.
239*5113495bSYour Name  * @lphb_cb: registered os if calllback function
240*5113495bSYour Name  * @ptrn_id_def: default pattern id counter for legacy firmware
241*5113495bSYour Name  * @ptrn_id_usr: user pattern id counter for legacy firmware
242*5113495bSYour Name  * @txrx_suspended: flag to determine if TX/RX is suspended
243*5113495bSYour Name  *		    during WoW
244*5113495bSYour Name  *
245*5113495bSYour Name  * This structure stores wow patterns and
246*5113495bSYour Name  * wow related parameters in host.
247*5113495bSYour Name  */
248*5113495bSYour Name struct pmo_wow {
249*5113495bSYour Name 	bool wow_enable;
250*5113495bSYour Name 	bool wow_enable_cmd_sent;
251*5113495bSYour Name 	bool is_wow_bus_suspended;
252*5113495bSYour Name 	enum pmo_wow_state wow_state;
253*5113495bSYour Name 	qdf_event_t target_suspend;
254*5113495bSYour Name 	qdf_event_t target_resume;
255*5113495bSYour Name 	bool wow_nack;
256*5113495bSYour Name 	uint16_t reason_code;
257*5113495bSYour Name 	atomic_t wow_initial_wake_up;
258*5113495bSYour Name 	qdf_wake_lock_t wow_wake_lock;
259*5113495bSYour Name 	/*
260*5113495bSYour Name 	 * currently supports only vdev 0.
261*5113495bSYour Name 	 * cache has two entries: one for TCP and one for UDP.
262*5113495bSYour Name 	 */
263*5113495bSYour Name 	struct pmo_lphb_req lphb_cache[2];
264*5113495bSYour Name 	void *lphb_cb_ctx;
265*5113495bSYour Name 	pmo_lphb_callback lphb_cb;
266*5113495bSYour Name 
267*5113495bSYour Name 	uint8_t ptrn_id_def;
268*5113495bSYour Name 	uint8_t ptrn_id_usr;
269*5113495bSYour Name 	bool txrx_suspended;
270*5113495bSYour Name };
271*5113495bSYour Name 
272*5113495bSYour Name /* WOW related structures */
273*5113495bSYour Name /**
274*5113495bSYour Name  * struct pmo_wow_add_pattern - wow pattern add structure
275*5113495bSYour Name  * @pattern_id: pattern id
276*5113495bSYour Name  * @pattern_byte_offset: pattern byte offset from beginning of the 802.11
277*5113495bSYour Name  *			 packet to start of the wake-up pattern
278*5113495bSYour Name  * @pattern_size: pattern size
279*5113495bSYour Name  * @pattern: pattern byte stream
280*5113495bSYour Name  * @pattern_mask_size: pattern mask size
281*5113495bSYour Name  * @pattern_mask: pattern mask
282*5113495bSYour Name  */
283*5113495bSYour Name struct pmo_wow_add_pattern {
284*5113495bSYour Name 	uint8_t pattern_id;
285*5113495bSYour Name 	uint8_t pattern_byte_offset;
286*5113495bSYour Name 	uint8_t pattern_size;
287*5113495bSYour Name 	uint8_t pattern[PMO_WOWL_BCAST_PATTERN_MAX_SIZE];
288*5113495bSYour Name 	uint8_t pattern_mask_size;
289*5113495bSYour Name 	uint8_t pattern_mask[PMO_WOWL_BCAST_PATTERN_MAX_SIZE];
290*5113495bSYour Name };
291*5113495bSYour Name 
292*5113495bSYour Name /**
293*5113495bSYour Name  * struct pmo_wow_cmd_params - wow cmd parameter
294*5113495bSYour Name  * @enable: wow enable or disable flag
295*5113495bSYour Name  * @can_suspend_link: flag to indicate if link can be suspended
296*5113495bSYour Name  * @pause_iface_config: interface config
297*5113495bSYour Name  * @flags: bitmap of WMI_WOW_FLAG_* flags
298*5113495bSYour Name  */
299*5113495bSYour Name struct pmo_wow_cmd_params {
300*5113495bSYour Name 	bool enable;
301*5113495bSYour Name 	bool can_suspend_link;
302*5113495bSYour Name 	uint8_t pause_iface_config;
303*5113495bSYour Name 	uint32_t flags;
304*5113495bSYour Name };
305*5113495bSYour Name 
306*5113495bSYour Name /**
307*5113495bSYour Name  * struct pmo_suspend_params - suspend cmd parameter
308*5113495bSYour Name  * @disable_target_intr: disable target interrupt
309*5113495bSYour Name  */
310*5113495bSYour Name struct pmo_suspend_params {
311*5113495bSYour Name 	uint8_t disable_target_intr;
312*5113495bSYour Name };
313*5113495bSYour Name 
314*5113495bSYour Name #endif /* end  of _WLAN_PMO_WOW_PUBLIC_STRUCT_H_ */
315