xref: /wlan-driver/qca-wifi-host-cmn/target_if/cfr/inc/target_if_cfr_enh.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2019-2021 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2021-2023 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 #ifndef _TARGET_IF_CFR_ENH_H_
21*5113495bSYour Name #define _TARGET_IF_CFR_ENH_H_
22*5113495bSYour Name 
23*5113495bSYour Name #ifdef WLAN_ENH_CFR_ENABLE
24*5113495bSYour Name /*
25*5113495bSYour Name  * Memory requirements :
26*5113495bSYour Name  *
27*5113495bSYour Name  *  1. DMA header :
28*5113495bSYour Name  *
29*5113495bSYour Name  * Legacy DMA header(QCA8074V2) : 2 words (length = 8 bytes)
30*5113495bSYour Name  * Enhanced DMA header(QCA6018) : Upto 16 words depending on no. of MU users
31*5113495bSYour Name  *                       in UL-MU-PPDU (Max length = 64 bytes)
32*5113495bSYour Name  *
33*5113495bSYour Name  * Fixed 4 words for whal_cfir_enhanced_hdr + freeze TLV
34*5113495bSYour Name  *                                          + uplink_user_info TLV (MAX 4)
35*5113495bSYour Name  *
36*5113495bSYour Name  * mu_rx_num_users -> No. of words in CFR DMA header
37*5113495bSYour Name  * 0 -> 12  =  4 + 7(freeze TLV) + 1(for 64-bit alignment)
38*5113495bSYour Name  * 1 -> 12  =  4 + 7(freeze TLV) + 1(user1)
39*5113495bSYour Name  * 2 -> 14  =  4 + 7(freeze TLV) + 2(users 1,2) + 1(for 64-bit alignment)
40*5113495bSYour Name  * 3 -> 14  =  4 + 7(freeze TLV) + 3(users 1,2,3)
41*5113495bSYour Name  * 4 -> 16  =  4 + 7(freeze TLV) + 4(users 1,2,3,4) + 1(for 64-bit alignment)
42*5113495bSYour Name  *
43*5113495bSYour Name  *
44*5113495bSYour Name  * 2. CFR data size for max BW/Nss/Nrx
45*5113495bSYour Name  *
46*5113495bSYour Name  *	Cypress : Max BW = 80 MHz
47*5113495bSYour Name  *			 NSS = 2
48*5113495bSYour Name  *			 Nrx = 2
49*5113495bSYour Name  *			 Size of one tone = 4 bytes
50*5113495bSYour Name  *
51*5113495bSYour Name  *		a. RTT-H - 2048 bytes
52*5113495bSYour Name  *
53*5113495bSYour Name  *		b. Debug-H (MIMO CFR) - 16016 bytes
54*5113495bSYour Name  *
55*5113495bSYour Name  *		c. RTT-H + CIR - 10240 bytes = 2048(RTT-H) + 8192(CIR)
56*5113495bSYour Name  */
57*5113495bSYour Name 
58*5113495bSYour Name /* Max 4 users in MU case */
59*5113495bSYour Name #define CYP_CFR_MU_USERS 4
60*5113495bSYour Name 
61*5113495bSYour Name #define CYP_MAX_HEADER_LENGTH_WORDS 16
62*5113495bSYour Name 
63*5113495bSYour Name /* payload_len = Max(2048, 16016, 10240) = 16064 (64-bit alignment) */
64*5113495bSYour Name #define CYP_MAX_DATA_LENGTH_BYTES 16064
65*5113495bSYour Name 
66*5113495bSYour Name /* in ms */
67*5113495bSYour Name #define LUT_AGE_TIMER 3000
68*5113495bSYour Name #define LUT_AGE_THRESHOLD 3000
69*5113495bSYour Name 
70*5113495bSYour Name /* Max size :
71*5113495bSYour Name  * sizeof(csi_cfr_header) + 64 bytes(cfr header) + 16064 bytes(cfr payload)
72*5113495bSYour Name  */
73*5113495bSYour Name #define STREAMFS_MAX_SUBBUF_CYP \
74*5113495bSYour Name 	(sizeof(struct csi_cfr_header) + \
75*5113495bSYour Name 	 (CYP_MAX_HEADER_LENGTH_WORDS * 4) + \
76*5113495bSYour Name 	 CYP_MAX_DATA_LENGTH_BYTES)
77*5113495bSYour Name 
78*5113495bSYour Name #define STREAMFS_NUM_SUBBUF_CYP 255
79*5113495bSYour Name 
80*5113495bSYour Name /* Max 37 users in MU case for Pine */
81*5113495bSYour Name #define PINE_CFR_MU_USERS 37
82*5113495bSYour Name 
83*5113495bSYour Name #define PINE_MAX_HEADER_LENGTH_WORDS 50
84*5113495bSYour Name 
85*5113495bSYour Name #define PINE_MAX_DATA_LENGTH_BYTES 16384
86*5113495bSYour Name 
87*5113495bSYour Name /* Max size :
88*5113495bSYour Name  * sizeof(csi_cfr_header) + 200 bytes(cfr header) + 16384 bytes(cfr payload)
89*5113495bSYour Name  */
90*5113495bSYour Name #define STREAMFS_MAX_SUBBUF_PINE \
91*5113495bSYour Name 	(sizeof(struct csi_cfr_header) + \
92*5113495bSYour Name 	 (PINE_MAX_HEADER_LENGTH_WORDS * 4) + \
93*5113495bSYour Name 	 PINE_MAX_DATA_LENGTH_BYTES)
94*5113495bSYour Name 
95*5113495bSYour Name #define STREAMFS_NUM_SUBBUF_PINE 255
96*5113495bSYour Name 
97*5113495bSYour Name /* Max 37 users in MU case for Waikiki */
98*5113495bSYour Name #define WAIKIKI_CFR_MU_USERS 37
99*5113495bSYour Name 
100*5113495bSYour Name #define WAIKIKI_MAX_HEADER_LENGTH_WORDS 88
101*5113495bSYour Name 
102*5113495bSYour Name #define WAIKIKI_MAX_DATA_LENGTH_BYTES 64512
103*5113495bSYour Name 
104*5113495bSYour Name /* Max size :
105*5113495bSYour Name  * sizeof(csi_cfr_header) + 352 bytes(cfr header) + 64512 bytes(cfr payload)
106*5113495bSYour Name  * where cfr_header size = rtt upload header len + freeze_tlv len +
107*5113495bSYour Name  *                         uplink user setup info + alignment/reserved bytes
108*5113495bSYour Name  *                       = 16bytes + 32bytes + (8bytes * 37users) + 8bytes
109*5113495bSYour Name  */
110*5113495bSYour Name #define STREAMFS_MAX_SUBBUF_WAIKIKI \
111*5113495bSYour Name 	(sizeof(struct csi_cfr_header) + \
112*5113495bSYour Name 	 (WAIKIKI_MAX_HEADER_LENGTH_WORDS * 4) + \
113*5113495bSYour Name 	 WAIKIKI_MAX_DATA_LENGTH_BYTES)
114*5113495bSYour Name 
115*5113495bSYour Name #define STREAMFS_NUM_SUBBUF_WAIKIKI  127
116*5113495bSYour Name 
117*5113495bSYour Name /* Max 4 users in MU case for Spruce */
118*5113495bSYour Name #define SPRUCE_CFR_MU_USERS 4
119*5113495bSYour Name 
120*5113495bSYour Name #define SPRUCE_MAX_HEADER_LENGTH_WORDS 16
121*5113495bSYour Name 
122*5113495bSYour Name #define SPRUCE_MAX_DATA_LENGTH_BYTES 16384
123*5113495bSYour Name 
124*5113495bSYour Name /* Max size :
125*5113495bSYour Name  * sizeof(csi_cfr_header) + 200 bytes(cfr header) + 16384 bytes(cfr payload)
126*5113495bSYour Name  */
127*5113495bSYour Name #define STREAMFS_MAX_SUBBUF_SPRUCE \
128*5113495bSYour Name 	(sizeof(struct csi_cfr_header) + \
129*5113495bSYour Name 	 (SPRUCE_MAX_HEADER_LENGTH_WORDS * 4) + \
130*5113495bSYour Name 	 SPRUCE_MAX_DATA_LENGTH_BYTES)
131*5113495bSYour Name 
132*5113495bSYour Name #define STREAMFS_NUM_SUBBUF_SPRUCE 255
133*5113495bSYour Name 
134*5113495bSYour Name /* Max 8 users in MU case for QCN6432 */
135*5113495bSYour Name #define QCN6432_CFR_MU_USERS 8
136*5113495bSYour Name 
137*5113495bSYour Name /* uCode header = (14 + (max number of MU users supported *2))*4 Bytes */
138*5113495bSYour Name #define QCN6432_MAX_HEADER_LENGTH_WORDS 30
139*5113495bSYour Name 
140*5113495bSYour Name /* Maximum number of tones that can be uploaded is 1001
141*5113495bSYour Name  * Max data len = Num tones per stream per chain * max chains
142*5113495bSYour Name  * max nss * size of tone
143*5113495bSYour Name  *              = 1001 * 2 * 4 * 4 = 32032 Bytes
144*5113495bSYour Name  * Total length = Max data len + ucode header
145*5113495bSYour Name  *              = 32032 + 120 = 32152 Bytes
146*5113495bSYour Name  */
147*5113495bSYour Name #define QCN6432_MAX_DATA_LENGTH_BYTES 32152
148*5113495bSYour Name 
149*5113495bSYour Name /* Max size :
150*5113495bSYour Name  * sizeof(csi_cfr_header) + 120 bytes(ucode header) + 32152 bytes(cfr payload)
151*5113495bSYour Name  */
152*5113495bSYour Name #define STREAMFS_MAX_SUBBUF_QCN6432 \
153*5113495bSYour Name 	(sizeof(struct csi_cfr_header) + \
154*5113495bSYour Name 	 (QCN6432_MAX_HEADER_LENGTH_WORDS * 4) + \
155*5113495bSYour Name 	 QCN6432_MAX_DATA_LENGTH_BYTES)
156*5113495bSYour Name 
157*5113495bSYour Name /* The number of buffers allotted by two IPC rings is 103.
158*5113495bSYour Name  * Hence, the relayFS should be have more than 103 buffers.
159*5113495bSYour Name  * Considering the maximum size of CFR log size to be 8MB
160*5113495bSYour Name  * and which should be multiple of relayFS buffer pool memory.
161*5113495bSYour Name  *
162*5113495bSYour Name  * Size of a relayFS buffer = csi metadata + QCN6432_MAX_DATA_LENGTH_BYTES
163*5113495bSYour Name  *                          = 310 + 32152
164*5113495bSYour Name  *                          = 32462 Bytes
165*5113495bSYour Name  *
166*5113495bSYour Name  * Num of streamfs sub buffers = 4MB / 32462B
167*5113495bSYour Name  *                             = 128 (approax)
168*5113495bSYour Name  */
169*5113495bSYour Name #define STREAMFS_NUM_SUBBUF_QCN6432 128
170*5113495bSYour Name 
171*5113495bSYour Name /* Max 4 users in MU case for QCA5332 */
172*5113495bSYour Name #define QCA5332_CFR_MU_USERS 4
173*5113495bSYour Name 
174*5113495bSYour Name #define QCA5332_MAX_HEADER_LENGTH_WORDS 22
175*5113495bSYour Name 
176*5113495bSYour Name #define QCA5332_MAX_DATA_LENGTH_BYTES 8192
177*5113495bSYour Name 
178*5113495bSYour Name /* Max size :
179*5113495bSYour Name  * sizeof(csi_cfr_header) + 88 bytes(cfr header) + 8192 bytes(cfr payload)
180*5113495bSYour Name  * where cfr_header size = rtt upload header len + freeze_tlv len +
181*5113495bSYour Name  *                         uplink user setup info + alignment/reserved bytes
182*5113495bSYour Name  *                       = 16bytes + 32bytes + (8bytes * 4users) + 8bytes
183*5113495bSYour Name  */
184*5113495bSYour Name #define STREAMFS_MAX_SUBBUF_QCA5332 \
185*5113495bSYour Name 	(sizeof(struct csi_cfr_header) + \
186*5113495bSYour Name 	 (QCA5332_MAX_HEADER_LENGTH_WORDS * 4) + \
187*5113495bSYour Name 	QCA5332_MAX_DATA_LENGTH_BYTES)
188*5113495bSYour Name 
189*5113495bSYour Name #define STREAMFS_NUM_SUBBUF_QCA5332 255
190*5113495bSYour Name 
191*5113495bSYour Name /* enum macrx_freeze_tlv_version: Reported by uCode in enh_dma_header
192*5113495bSYour Name  * MACRX_FREEZE_TLV_VERSION_1: Single MU UL user info reported by MAC.
193*5113495bSYour Name  * This is used in Cypress/HastingsPrime chips. Corresponding structures are
194*5113495bSYour Name  * macrx_freeze_capture_channel and 1 uplink_user_setup_info.
195*5113495bSYour Name  *
196*5113495bSYour Name  * MACRX_FREEZE_TLV_VERSION_2: Upto 4 MU UL user info reported by MAC.
197*5113495bSYour Name  * This is used in Maple/Spruce/Moselle chips. Corresponding structures are
198*5113495bSYour Name  * macrx_freeze_capture_channel and 2 uplink_user_setup_info.
199*5113495bSYour Name  *
200*5113495bSYour Name  * MACRX_FREEZE_TLV_VERSION_3: Upto 37 MU UL user info reported by MAC.
201*5113495bSYour Name  * This is used in Pine chip. The corresponding structures are
202*5113495bSYour Name  * macrx_freeze_capture_channel_v3 and 37 uplink_user_setup_info.
203*5113495bSYour Name  *
204*5113495bSYour Name  * MACRX_FREEZE_TLV_VERSION_4: Upto 37 MU UL user info reported by MAC.
205*5113495bSYour Name  * This is used in Hamilton 1/2.
206*5113495bSYour Name  *
207*5113495bSYour Name  * MACRX_FREEZE_TLV_VERSION_5: Upto 37 MU UL user info reported by MAC.
208*5113495bSYour Name  * This is used in Waikiki chipsets.
209*5113495bSYour Name  */
210*5113495bSYour Name enum macrx_freeze_tlv_version {
211*5113495bSYour Name 	MACRX_FREEZE_TLV_VERSION_1 = 1,
212*5113495bSYour Name 	MACRX_FREEZE_TLV_VERSION_2 = 2,
213*5113495bSYour Name 	MACRX_FREEZE_TLV_VERSION_3 = 3,
214*5113495bSYour Name 	MACRX_FREEZE_TLV_VERSION_4 = 4,
215*5113495bSYour Name 	MACRX_FREEZE_TLV_VERSION_5 = 5,
216*5113495bSYour Name 	MACRX_FREEZE_TLV_VERSION_MAX
217*5113495bSYour Name };
218*5113495bSYour Name 
219*5113495bSYour Name /* Max 4 users in MU case for Maple */
220*5113495bSYour Name #define MAPLE_CFR_MU_USERS 4
221*5113495bSYour Name 
222*5113495bSYour Name #define MAPLE_MAX_HEADER_LENGTH_WORDS 16
223*5113495bSYour Name 
224*5113495bSYour Name #define MAPLE_MAX_DATA_LENGTH_BYTES 4096
225*5113495bSYour Name 
226*5113495bSYour Name /* Max size :
227*5113495bSYour Name  * sizeof(csi_cfr_header) + 64 bytes(cfr uCode header) +
228*5113495bSYour Name  * 4096 bytes(cfr payload)
229*5113495bSYour Name  */
230*5113495bSYour Name #define STREAMFS_MAX_SUBBUF_MAPLE \
231*5113495bSYour Name 	(sizeof(struct csi_cfr_header) + \
232*5113495bSYour Name 	 (MAPLE_MAX_HEADER_LENGTH_WORDS * 4) + \
233*5113495bSYour Name 	 MAPLE_MAX_DATA_LENGTH_BYTES)
234*5113495bSYour Name 
235*5113495bSYour Name /*
236*5113495bSYour Name  * RelayFS memory required:
237*5113495bSYour Name  * Max sub buffer size * Number of sub buffers
238*5113495bSYour Name  *
239*5113495bSYour Name  * Cascade: (2200B  * 1100) ~= 2MB
240*5113495bSYour Name  * Dakota:  (1100B  * 2200) ~= 2MB
241*5113495bSYour Name  * Hawkeye: (8200B  * 255 ) ~= 2MB
242*5113495bSYour Name  * Cypress: (16438B * 255 ) ~= 4MB
243*5113495bSYour Name  * Pine   : (16894B * 255 ) ~= 4MB
244*5113495bSYour Name  * Maple  : (4470B *  255 ) ~= 1MB
245*5113495bSYour Name  *
246*5113495bSYour Name  */
247*5113495bSYour Name #define STREAMFS_NUM_SUBBUF_MAPLE 255
248*5113495bSYour Name 
249*5113495bSYour Name enum UCODE_UPLOAD_HEADER_VERSION {
250*5113495bSYour Name 	UPLOAD_HEADER_VERSION_1 = 1,
251*5113495bSYour Name 	UPLOAD_HEADER_VERSION_2 = 2,
252*5113495bSYour Name 	UPLOAD_HEADER_VERSION_3 = 3,
253*5113495bSYour Name 	UPLOAD_HEADER_VERSION_4 = 4,
254*5113495bSYour Name 	UPLOAD_HEADER_VERSION_8 = 8,
255*5113495bSYour Name 	UPLOAD_HEADER_VERSION_9 = 9,
256*5113495bSYour Name 	UPLOAD_HEADER_VERSION_MAX
257*5113495bSYour Name };
258*5113495bSYour Name 
259*5113495bSYour Name /*
260*5113495bSYour Name  * @tag: ucode fills this with 0xBA
261*5113495bSYour Name  *
262*5113495bSYour Name  * @length: length of CFR header in words (32-bit)
263*5113495bSYour Name  *
264*5113495bSYour Name  * @upload_done: ucode sets this to 1 to indicate DMA completion
265*5113495bSYour Name  *
266*5113495bSYour Name  * @capture_type:
267*5113495bSYour Name  *
268*5113495bSYour Name  *			0 - None
269*5113495bSYour Name  *			1 - RTT-H (Nss = 1, Nrx)
270*5113495bSYour Name  *			2 - Debug-H (Nss, Nrx)
271*5113495bSYour Name  *			3 - Reserved
272*5113495bSYour Name  *			5 - RTT-H + CIR(Nss, Nrx)
273*5113495bSYour Name  *
274*5113495bSYour Name  * @preamble_type:
275*5113495bSYour Name  *
276*5113495bSYour Name  *			0 - Legacy
277*5113495bSYour Name  *			1 - HT
278*5113495bSYour Name  *			2 - VHT
279*5113495bSYour Name  *			3 - HE
280*5113495bSYour Name  *
281*5113495bSYour Name  * @nss:
282*5113495bSYour Name  *
283*5113495bSYour Name  *			0 - 1-stream
284*5113495bSYour Name  *			1 - 2-stream
285*5113495bSYour Name  *			..	..
286*5113495bSYour Name  *			7 - 8-stream
287*5113495bSYour Name  *
288*5113495bSYour Name  *@num_chains:
289*5113495bSYour Name  *
290*5113495bSYour Name  *			0 - 1-chain
291*5113495bSYour Name  *			1 - 2-chain
292*5113495bSYour Name  *			..  ..
293*5113495bSYour Name  *			7 - 8-chain
294*5113495bSYour Name  *
295*5113495bSYour Name  *@upload_bw_pkt:
296*5113495bSYour Name  *
297*5113495bSYour Name  *			0 - 20 MHz
298*5113495bSYour Name  *			1 - 40 MHz
299*5113495bSYour Name  *			2 - 80 MHz
300*5113495bSYour Name  *			3 - 160 MHz
301*5113495bSYour Name  *
302*5113495bSYour Name  * @sw_peer_id_valid: Indicates whether sw_peer_id field is valid or not,
303*5113495bSYour Name  * sent from MAC to PHY via the MACRX_FREEZE_CAPTURE_CHANNEL TLV
304*5113495bSYour Name  *
305*5113495bSYour Name  * @sw_peer_id: Indicates peer id based on AST search, sent from MAC to PHY
306*5113495bSYour Name  * via the MACRX_FREEZE_CAPTURE_CHANNEL TLV
307*5113495bSYour Name  *
308*5113495bSYour Name  * @phy_ppdu_id: sent from PHY to MAC, copied to MACRX_FREEZE_CAPTURE_CHANNEL
309*5113495bSYour Name  * TLV
310*5113495bSYour Name  *
311*5113495bSYour Name  * @total_bytes: Total size of CFR payload (FFT bins)
312*5113495bSYour Name  *
313*5113495bSYour Name  * @header_version:
314*5113495bSYour Name  *
315*5113495bSYour Name  *			1 - HKV2/Hastings
316*5113495bSYour Name  *			2 - Cypress
317*5113495bSYour Name  *			3 - Hasting Prime
318*5113495bSYour Name  *			4 - Pine
319*5113495bSYour Name  *			8 - Hamilton
320*5113495bSYour Name  *			9 - Waikiki
321*5113495bSYour Name  *
322*5113495bSYour Name  * @target_id:
323*5113495bSYour Name  *
324*5113495bSYour Name  *			1 - Hastings
325*5113495bSYour Name  *			2 - Cypress
326*5113495bSYour Name  *			3 - Hastings Prime
327*5113495bSYour Name  *			4 - Pine
328*5113495bSYour Name  *
329*5113495bSYour Name  * @cfr_fmt:
330*5113495bSYour Name  *
331*5113495bSYour Name  *			0 - raw (32-bit format)
332*5113495bSYour Name  *			1 - compressed (24-bit format)
333*5113495bSYour Name  *
334*5113495bSYour Name  * @mu_rx_data_incl: Indicates whether CFR header contains UL-MU-MIMO info
335*5113495bSYour Name  *
336*5113495bSYour Name  * @freeze_data_incl: Indicates whether CFR header contains
337*5113495bSYour Name  * MACRX_FREEZE_CAPTURE_CHANNEL TLV
338*5113495bSYour Name  *
339*5113495bSYour Name  * @freeze_tlv_version: Indicates the version of freeze_tlv
340*5113495bSYour Name  *			1 - HSP, Cypress
341*5113495bSYour Name  *			2 - Maple/Spruce/Moselle
342*5113495bSYour Name  *			3 - Pine
343*5113495bSYour Name  *
344*5113495bSYour Name  * @decimation_factor: FFT bins decimation
345*5113495bSYour Name  * @mu_rx_num_users: Number of users in UL-MU-PPDU
346*5113495bSYour Name  */
347*5113495bSYour Name struct whal_cfir_enhanced_hdr {
348*5113495bSYour Name 	uint16_t tag              :  8,
349*5113495bSYour Name 		 length           :  6,
350*5113495bSYour Name 		 rsvd1            :  2;
351*5113495bSYour Name 
352*5113495bSYour Name 	uint16_t upload_done        :  1,
353*5113495bSYour Name 		 capture_type       :  3,
354*5113495bSYour Name 		 preamble_type      :  2,
355*5113495bSYour Name 		 nss                :  3,
356*5113495bSYour Name 		 num_chains         :  3,
357*5113495bSYour Name 		 upload_pkt_bw      :  3,
358*5113495bSYour Name 		 sw_peer_id_valid   :  1;
359*5113495bSYour Name 
360*5113495bSYour Name 	uint16_t sw_peer_id         : 16;
361*5113495bSYour Name 
362*5113495bSYour Name 	uint16_t phy_ppdu_id        : 16;
363*5113495bSYour Name 
364*5113495bSYour Name 	uint16_t total_bytes;
365*5113495bSYour Name 
366*5113495bSYour Name 	uint16_t header_version     :4,
367*5113495bSYour Name 		 target_id          :4,
368*5113495bSYour Name 		 cfr_fmt            :1,
369*5113495bSYour Name 		 rsvd2              :1,
370*5113495bSYour Name 		 mu_rx_data_incl    :1,
371*5113495bSYour Name 		 freeze_data_incl   :1,
372*5113495bSYour Name 		 freeze_tlv_version :4;
373*5113495bSYour Name 
374*5113495bSYour Name 	uint16_t mu_rx_num_users   :8,
375*5113495bSYour Name 		 decimation_factor :4,
376*5113495bSYour Name 		 rsvd3             :4;
377*5113495bSYour Name 
378*5113495bSYour Name 	uint16_t rsvd4;
379*5113495bSYour Name };
380*5113495bSYour Name 
381*5113495bSYour Name /*
382*5113495bSYour Name  * freeze_tlv v1/v2 used by Hastings/Cypress/Maple/Spruce/Moselle supports upto
383*5113495bSYour Name  * 4 UL MU users
384*5113495bSYour Name  *
385*5113495bSYour Name  * @freeze:
386*5113495bSYour Name  *		0: Allow channel capture
387*5113495bSYour Name  *		1: Freeze channel capture
388*5113495bSYour Name  *
389*5113495bSYour Name  * @capture_reason: Field only valid when the freeze field is 1. Indicates why
390*5113495bSYour Name  * the MAC asked to capture the channel
391*5113495bSYour Name  *		0: freeze_reason_TM
392*5113495bSYour Name  *		1: freeze_reason_FTM
393*5113495bSYour Name  *		2: freeze_reason_ACK_resp_to_TM_FTM
394*5113495bSYour Name  *		3: freeze_reason_TA_RA_TYPE_FILTER
395*5113495bSYour Name  *		4: freeze readon NDP_NDP
396*5113495bSYour Name  *		5: freeze_reason_ALL_PACKET
397*5113495bSYour Name  *
398*5113495bSYour Name  * @packet_type: Packet type of captured packets.
399*5113495bSYour Name  *		0: Management
400*5113495bSYour Name  *		1: Control
401*5113495bSYour Name  *		2: Data
402*5113495bSYour Name  *		3: Extension
403*5113495bSYour Name  *
404*5113495bSYour Name  * @packet_sub_type: packet subtype of the captured packets.
405*5113495bSYour Name  * @sw_peer_id_valid: It is valid only when the freeze field is set to 1.
406*5113495bSYour Name  *		0: no TA address search on the received frame has been
407*5113495bSYour Name  *		   performed. This is due to the frame not having a TA address
408*5113495bSYour Name  *		   (like ACK frame), or the received frame being from an other
409*5113495bSYour Name  *		   AP to which this device is not associated.
410*5113495bSYour Name  *		1: field sw_peer_id will contain valid information.
411*5113495bSYour Name  *		   This implies that a (successful) address search has been
412*5113495bSYour Name  *		   performed on the TA address of the received frame.
413*5113495bSYour Name  *
414*5113495bSYour Name  * @sw_peer_id: Valid only when sw_peer_id_valid field is set. It is an
415*5113495bSYour Name  * identifier that allows SW to double check that the CSI info stored belongs
416*5113495bSYour Name  * to the device with this SW identifier.
417*5113495bSYour Name  *
418*5113495bSYour Name  * @phy_ppdu_id: ppdu_id of ppdu which has channel capture performed. Field
419*5113495bSYour Name  * only valid when the freeze field is set to 1.
420*5113495bSYour Name  *
421*5113495bSYour Name  * @packet_ta_lower_16: Packet’s lower 16bits transmit address in MAC header.
422*5113495bSYour Name  *
423*5113495bSYour Name  * @packet_ta_mid_16: Packet’s middle 16bits transmit address in MAC header.
424*5113495bSYour Name  *
425*5113495bSYour Name  * @packet_ta_upper_16: Packet’s upper 16bits transmit address in MAC header.
426*5113495bSYour Name  *
427*5113495bSYour Name  * @packet_ra_lower_16: Packet’s lower 16bits receive address in MAC header.
428*5113495bSYour Name  *
429*5113495bSYour Name  * @packet_ra_mid_16: Packet’s middle 16bits receive address in MAC header.
430*5113495bSYour Name  *
431*5113495bSYour Name  * @packet_ra_upper_16: Packet’s upper 16bits receive address in MAC header.
432*5113495bSYour Name  *
433*5113495bSYour Name  * @tsf_timestamp_15_0: MAC side 64bit TSF timestamp when this TLV is sent to
434*5113495bSYour Name  * PHY. Bits [15:0].
435*5113495bSYour Name  *
436*5113495bSYour Name  * @tsf_timestamp_31_16: MAC side 64bit TSF timestamp when this TLV is sent to
437*5113495bSYour Name  * PHY. Bits [31:16].
438*5113495bSYour Name  *
439*5113495bSYour Name  * @tsf_timestamp_47_32: MAC side 64bit TSF timestamp when this TLV is sent to
440*5113495bSYour Name  * PHY. Bits [47:32].
441*5113495bSYour Name  *
442*5113495bSYour Name  * @tsf_timestamp_63_48: MAC side 64bit TSF timestamp when this TLV is sent to
443*5113495bSYour Name  * PHY. Bits [63:48].
444*5113495bSYour Name  *
445*5113495bSYour Name  * @user_index_or_user_mask_5_0: When freeze_tlv_version is 1, this field from
446*5113495bSYour Name  * MAC, indicate to PHY which user's channel information need to be uploaded.
447*5113495bSYour Name  * When freeze_tlv_version is 2 & MU_SUPPORT_IN_TLV is 1, this field indicates
448*5113495bSYour Name  * bitmap of users upto 4 to which channel capture need to be uploaded. And if
449*5113495bSYour Name  * freeze_tlv_version is 2 & MU_SUPPORT_IN_TLV is 0, this field indicate to PHY
450*5113495bSYour Name  * which user's channel information need to be uploaded
451*5113495bSYour Name  *
452*5113495bSYour Name  * @directed: Indicate the frame is directed to us or not when NDPA/NDP capture
453*5113495bSYour Name  * or FTM/TM/ACK capture. 1=directed. For other modes, it is 0.
454*5113495bSYour Name  */
455*5113495bSYour Name struct macrx_freeze_capture_channel {
456*5113495bSYour Name 	uint16_t freeze                          :  1, //[0]
457*5113495bSYour Name 		 capture_reason                  :  3, //[3:1]
458*5113495bSYour Name 		 packet_type                     :  2, //[5:4]
459*5113495bSYour Name 		 packet_sub_type                 :  4, //[9:6]
460*5113495bSYour Name 		 reserved                        :  5, //[14:10]
461*5113495bSYour Name 		 sw_peer_id_valid                :  1; //[15]
462*5113495bSYour Name 	uint16_t sw_peer_id                      : 16; //[15:0]
463*5113495bSYour Name 	uint16_t phy_ppdu_id                     : 16; //[15:0]
464*5113495bSYour Name 	uint16_t packet_ta_lower_16              : 16; //[15:0]
465*5113495bSYour Name 	uint16_t packet_ta_mid_16                : 16; //[15:0]
466*5113495bSYour Name 	uint16_t packet_ta_upper_16              : 16; //[15:0]
467*5113495bSYour Name 	uint16_t packet_ra_lower_16              : 16; //[15:0]
468*5113495bSYour Name 	uint16_t packet_ra_mid_16                : 16; //[15:0]
469*5113495bSYour Name 	uint16_t packet_ra_upper_16              : 16; //[15:0]
470*5113495bSYour Name 	uint16_t tsf_timestamp_15_0              : 16; //[15:0]
471*5113495bSYour Name 	uint16_t tsf_timestamp_31_16             : 16; //[15:0]
472*5113495bSYour Name 	uint16_t tsf_timestamp_47_32             : 16; //[15:0]
473*5113495bSYour Name 	uint16_t tsf_timestamp_63_48             : 16; //[15:0]
474*5113495bSYour Name 	uint16_t user_index_or_user_mask_5_0     :  6, //[5:0]
475*5113495bSYour Name 		 directed                        :  1, //[6]
476*5113495bSYour Name 		 reserved_13                     :  9; //[15:7]
477*5113495bSYour Name };
478*5113495bSYour Name 
479*5113495bSYour Name /*
480*5113495bSYour Name  * freeze_tlv v3 used by Pine
481*5113495bSYour Name  *
482*5113495bSYour Name  * @freeze:
483*5113495bSYour Name  *		0: Allow channel capture
484*5113495bSYour Name  *		1: Freeze channel capture
485*5113495bSYour Name  *
486*5113495bSYour Name  * @capture_reason: Field only valid when the freeze field is 1. Indicates why
487*5113495bSYour Name  * the MAC asked to capture the channel
488*5113495bSYour Name  *		0: freeze_reason_TM
489*5113495bSYour Name  *		1: freeze_reason_FTM
490*5113495bSYour Name  *		2: freeze_reason_ACK_resp_to_TM_FTM
491*5113495bSYour Name  *		3: freeze_reason_TA_RA_TYPE_FILTER
492*5113495bSYour Name  *		4: freeze readon NDP_NDP
493*5113495bSYour Name  *		5: freeze_reason_ALL_PACKET
494*5113495bSYour Name  *
495*5113495bSYour Name  * @packet_type: Packet type of captured packets.
496*5113495bSYour Name  *		0: Management
497*5113495bSYour Name  *		1: Control
498*5113495bSYour Name  *		2: Data
499*5113495bSYour Name  *		3: Extension
500*5113495bSYour Name  *
501*5113495bSYour Name  * @packet_sub_type: packet subtype of the captured packets.
502*5113495bSYour Name  *
503*5113495bSYour Name  * @directed: Indicate the frame is directed to us or not when NDPA/NDP capture
504*5113495bSYour Name  * or FTM/TM/ACK capture. 1=directed. For other modes, it is 0.
505*5113495bSYour Name  *
506*5113495bSYour Name  * @sw_peer_id_valid: It is valid only when the freeze field is set to 1.
507*5113495bSYour Name  *		0: no TA address search on the received frame has been
508*5113495bSYour Name  *		   performed. This is due to the frame not having a TA address
509*5113495bSYour Name  *		   (like ACK frame), or the received frame being from an other
510*5113495bSYour Name  *		   AP to which this device is not associated.
511*5113495bSYour Name  *		1: field sw_peer_id will contain valid information.
512*5113495bSYour Name  *		   This implies that a (successful) address search has been
513*5113495bSYour Name  *		   performed on the TA address of the received frame.
514*5113495bSYour Name  *
515*5113495bSYour Name  * @sw_peer_id: Valid only when sw_peer_id_valid field is set. It is an
516*5113495bSYour Name  * identifier that allows SW to double check that the CSI info stored belongs
517*5113495bSYour Name  * to the device with this SW identifier.
518*5113495bSYour Name  *
519*5113495bSYour Name  * @phy_ppdu_id: ppdu_id of ppdu which has channel capture performed. Field
520*5113495bSYour Name  * only valid when the freeze field is set to 1.
521*5113495bSYour Name  *
522*5113495bSYour Name  * @packet_ta_lower_16: Packet’s lower 16bits transmit address in MAC header.
523*5113495bSYour Name  *
524*5113495bSYour Name  * @packet_ta_mid_16: Packet’s middle 16bits transmit address in MAC header.
525*5113495bSYour Name  *
526*5113495bSYour Name  * @packet_ta_upper_16: Packet’s upper 16bits transmit address in MAC header.
527*5113495bSYour Name  *
528*5113495bSYour Name  * @packet_ra_lower_16: Packet’s lower 16bits receive address in MAC header.
529*5113495bSYour Name  *
530*5113495bSYour Name  * @packet_ra_mid_16: Packet’s middle 16bits receive address in MAC header.
531*5113495bSYour Name  *
532*5113495bSYour Name  * @packet_ra_upper_16: Packet’s upper 16bits receive address in MAC header.
533*5113495bSYour Name  *
534*5113495bSYour Name  * @tsf_timestamp_15_0: MAC side 64bit TSF timestamp when this TLV is sent to
535*5113495bSYour Name  * PHY. Bits [15:0].
536*5113495bSYour Name  *
537*5113495bSYour Name  * @tsf_timestamp_31_16: MAC side 64bit TSF timestamp when this TLV is sent to
538*5113495bSYour Name  * PHY. Bits [31:16].
539*5113495bSYour Name  *
540*5113495bSYour Name  * @tsf_timestamp_47_32: MAC side 64bit TSF timestamp when this TLV is sent to
541*5113495bSYour Name  * PHY. Bits [47:32].
542*5113495bSYour Name  *
543*5113495bSYour Name  * @tsf_63_48_or_user_mask_36_32: Indicates to PHY which user's channel info
544*5113495bSYour Name  * need to be uploaded. Only valid in UL MU case with MU_SUPPORT_IN_TLV = 1.
545*5113495bSYour Name  * Otherwise this indicates to PHY MSBs 63:48 of the MAC side 64bit TSF
546*5113495bSYour Name  * timestamp when this TLV is sent to PHY.
547*5113495bSYour Name  *
548*5113495bSYour Name  * @user_index_or_user_mask_15_0: Indicate to PHY which user's channel info
549*5113495bSYour Name  * need to be uploaded in UL MU case with MU_SUPPORT_IN_TLV = 1. Otherwise it
550*5113495bSYour Name  * indicate PHY which user’s channel information need to be uploaded.
551*5113495bSYour Name  *
552*5113495bSYour Name  * @user_mask_31_16: Indicate to PHY which user’s channel information need to
553*5113495bSYour Name  * be uploaded. Only valid in UL MU case with MU_SUPPORT_IN_TLV = 1.
554*5113495bSYour Name  */
555*5113495bSYour Name struct macrx_freeze_capture_channel_v3 {
556*5113495bSYour Name 	uint16_t freeze                          :  1, //[0]
557*5113495bSYour Name 		 capture_reason                  :  3, //[3:1]
558*5113495bSYour Name 		 packet_type                     :  2, //[5:4]
559*5113495bSYour Name 		 packet_sub_type                 :  4, //[9:6]
560*5113495bSYour Name 		 directed                        :  1, //[10]
561*5113495bSYour Name 		 reserved                        :  4, //[14:11]
562*5113495bSYour Name 		 sw_peer_id_valid                :  1; //[15]
563*5113495bSYour Name 	uint16_t sw_peer_id                      : 16; //[15:0]
564*5113495bSYour Name 	uint16_t phy_ppdu_id                     : 16; //[15:0]
565*5113495bSYour Name 	uint16_t packet_ta_lower_16              : 16; //[15:0]
566*5113495bSYour Name 	uint16_t packet_ta_mid_16                : 16; //[15:0]
567*5113495bSYour Name 	uint16_t packet_ta_upper_16              : 16; //[15:0]
568*5113495bSYour Name 	uint16_t packet_ra_lower_16              : 16; //[15:0]
569*5113495bSYour Name 	uint16_t packet_ra_mid_16                : 16; //[15:0]
570*5113495bSYour Name 	uint16_t packet_ra_upper_16              : 16; //[15:0]
571*5113495bSYour Name 	uint16_t tsf_timestamp_15_0              : 16; //[15:0]
572*5113495bSYour Name 	uint16_t tsf_timestamp_31_16             : 16; //[15:0]
573*5113495bSYour Name 	uint16_t tsf_timestamp_47_32             : 16; //[15:0]
574*5113495bSYour Name 	uint16_t tsf_63_48_or_user_mask_36_32    : 16; //[15:0]
575*5113495bSYour Name 	uint16_t user_index_or_user_mask_15_0    : 16; //[15:0]
576*5113495bSYour Name 	uint16_t user_mask_31_16                 : 16; //[15:0]
577*5113495bSYour Name };
578*5113495bSYour Name 
579*5113495bSYour Name struct uplink_user_setup_info {
580*5113495bSYour Name 	uint32_t bw_info_valid                   :  1, //[0]
581*5113495bSYour Name 		 uplink_receive_type             :  2, //[2:1]
582*5113495bSYour Name 		 reserved_0a                     :  1, //[3]
583*5113495bSYour Name 		 uplink_11ax_mcs                 :  4, //[7:4]
584*5113495bSYour Name 		 ru_width                        :  7, //[14:8]
585*5113495bSYour Name 		 reserved_0b                     :  1, //[15]
586*5113495bSYour Name 		 nss                             :  3, //[18:16]
587*5113495bSYour Name 		 stream_offset                   :  3, //[21:19]
588*5113495bSYour Name 		 sta_dcm                         :  1, //[22]
589*5113495bSYour Name 		 sta_coding                      :  1, //[23]
590*5113495bSYour Name 		 ru_start_index                  :  7, //[30:24]
591*5113495bSYour Name 		 reserved_0c                     :  1; //[31]
592*5113495bSYour Name };
593*5113495bSYour Name 
594*5113495bSYour Name struct macrx_freeze_capture_channel_v5 {
595*5113495bSYour Name 	uint16_t freeze                          :  1, //[0]
596*5113495bSYour Name 		 capture_reason                  :  3, //[3:1]
597*5113495bSYour Name 		 packet_type                     :  2, //[5:4]
598*5113495bSYour Name 		 packet_sub_type                 :  4, //[9:6]
599*5113495bSYour Name 		 reserved                        :  5, //[14:10]
600*5113495bSYour Name 		 sw_peer_id_valid                :  1; //[15]
601*5113495bSYour Name 	uint16_t sw_peer_id                      : 16; //[15:0]
602*5113495bSYour Name 	uint16_t phy_ppdu_id                     : 16; //[15:0]
603*5113495bSYour Name 	uint16_t packet_ta_lower_16              : 16; //[15:0]
604*5113495bSYour Name 	uint16_t packet_ta_mid_16                : 16; //[15:0]
605*5113495bSYour Name 	uint16_t packet_ta_upper_16              : 16; //[15:0]
606*5113495bSYour Name 	uint16_t packet_ra_lower_16              : 16; //[15:0]
607*5113495bSYour Name 	uint16_t packet_ra_mid_16                : 16; //[15:0]
608*5113495bSYour Name 	uint16_t packet_ra_upper_16              : 16; //[15:0]
609*5113495bSYour Name 	uint16_t tsf_timestamp_15_0              : 16; //[15:0]
610*5113495bSYour Name 	uint16_t tsf_timestamp_31_16             : 16; //[15:0]
611*5113495bSYour Name 	uint16_t tsf_timestamp_47_32             : 16; //[15:0]
612*5113495bSYour Name 	uint16_t tsf_timestamp_63_48             : 16; //[15:0]
613*5113495bSYour Name 	uint16_t user_index_or_user_mask_5_0     :  6, //[5:0]
614*5113495bSYour Name 		 directed                        :  1, //[6]
615*5113495bSYour Name 		 reserved_13                     :  9; //[15:7]
616*5113495bSYour Name 	uint16_t user_mask_21_6                  : 16; //[15:0]
617*5113495bSYour Name 	uint16_t user_mask_36_22                 : 15, //[14:0]
618*5113495bSYour Name 		 reserved_15a                    :  1; //[15]
619*5113495bSYour Name };
620*5113495bSYour Name 
621*5113495bSYour Name struct uplink_user_setup_info_v2 {
622*5113495bSYour Name 	uint32_t bw_info_valid                   :  1, //[0]
623*5113495bSYour Name 		 uplink_receive_type             :  2, //[2:1]
624*5113495bSYour Name 		 reserved_0a                     :  1, //[3]
625*5113495bSYour Name 		 uplink_11ax_mcs                 :  4, //[7:4]
626*5113495bSYour Name 		 nss                             :  3, //[10:8]
627*5113495bSYour Name 		 stream_offset                   :  3, //[13:11]
628*5113495bSYour Name 		 sta_dcm                         :  1, //[14]
629*5113495bSYour Name 		 sta_coding                      :  1, //[15]
630*5113495bSYour Name 		 ru_type_80_0                    :  4, //[19:16]
631*5113495bSYour Name 		 ru_type_80_1                    :  4, //[23:20]
632*5113495bSYour Name 		 ru_type_80_2                    :  4, //[27:24]
633*5113495bSYour Name 		 ru_type_80_3                    :  4; //[31:28]
634*5113495bSYour Name 	uint32_t ru_start_index_80_0             :  6, //[5:0]
635*5113495bSYour Name 		 reserved_1a                     :  2, //[7:6]
636*5113495bSYour Name 		 ru_start_index_80_1             :  6, //[13:8]
637*5113495bSYour Name 		 reserved_1b                     :  2, //[15:14]
638*5113495bSYour Name 		 ru_start_index_80_2             :  6, //[21:16]
639*5113495bSYour Name 		 reserved_1c                     :  2, //[23:22]
640*5113495bSYour Name 		 ru_start_index_80_3             :  6, //[29:24]
641*5113495bSYour Name 		 reserved_1d                     :  2; //[31-30]
642*5113495bSYour Name };
643*5113495bSYour Name 
644*5113495bSYour Name /**
645*5113495bSYour Name  * cfr_enh_init_pdev() - Inits cfr pdev and registers necessary handlers.
646*5113495bSYour Name  * @psoc: pointer to psoc object
647*5113495bSYour Name  * @pdev: pointer to pdev object
648*5113495bSYour Name  *
649*5113495bSYour Name  * Return: Registration status for necessary handlers
650*5113495bSYour Name  */
651*5113495bSYour Name QDF_STATUS cfr_enh_init_pdev(
652*5113495bSYour Name 		struct wlan_objmgr_psoc *psoc,
653*5113495bSYour Name 		struct wlan_objmgr_pdev *pdev);
654*5113495bSYour Name 
655*5113495bSYour Name /**
656*5113495bSYour Name  * cfr_enh_deinit_pdev() - De-inits corresponding pdev and handlers.
657*5113495bSYour Name  * @psoc: pointer to psoc object
658*5113495bSYour Name  * @pdev: pointer to pdev object
659*5113495bSYour Name  *
660*5113495bSYour Name  * Return: De-registration status for necessary handlers
661*5113495bSYour Name  */
662*5113495bSYour Name QDF_STATUS cfr_enh_deinit_pdev(
663*5113495bSYour Name 		struct wlan_objmgr_psoc *psoc,
664*5113495bSYour Name 		struct wlan_objmgr_pdev *pdev);
665*5113495bSYour Name 
666*5113495bSYour Name /**
667*5113495bSYour Name  * target_if_cfr_start_lut_age_timer() - Start timer to flush aged-out LUT
668*5113495bSYour Name  * entries
669*5113495bSYour Name  * @pdev: pointer to pdev object
670*5113495bSYour Name  *
671*5113495bSYour Name  * Return: None
672*5113495bSYour Name  */
673*5113495bSYour Name void target_if_cfr_start_lut_age_timer(struct wlan_objmgr_pdev *pdev);
674*5113495bSYour Name 
675*5113495bSYour Name /**
676*5113495bSYour Name  * target_if_cfr_stop_lut_age_timer() - Stop timer to flush aged-out LUT
677*5113495bSYour Name  * entries
678*5113495bSYour Name  * @pdev: pointer to pdev object
679*5113495bSYour Name  *
680*5113495bSYour Name  * Return: None
681*5113495bSYour Name  */
682*5113495bSYour Name void target_if_cfr_stop_lut_age_timer(struct wlan_objmgr_pdev *pdev);
683*5113495bSYour Name 
684*5113495bSYour Name /**
685*5113495bSYour Name  * target_if_cfr_dump_lut_enh() - Dump all valid LUT entries
686*5113495bSYour Name  * @pdev: objmgr PDEV
687*5113495bSYour Name  *
688*5113495bSYour Name  * Return: none
689*5113495bSYour Name  */
690*5113495bSYour Name void target_if_cfr_dump_lut_enh(struct wlan_objmgr_pdev *pdev);
691*5113495bSYour Name 
692*5113495bSYour Name /**
693*5113495bSYour Name  * target_if_cfr_config_rcc() - Start repetitive channel capture
694*5113495bSYour Name  * @pdev: pointer to pdev object
695*5113495bSYour Name  * @rcc_param: rcc configurations
696*5113495bSYour Name  *
697*5113495bSYour Name  * Return: Success/Failure status
698*5113495bSYour Name  */
699*5113495bSYour Name QDF_STATUS target_if_cfr_config_rcc(struct wlan_objmgr_pdev *pdev,
700*5113495bSYour Name 				    struct cfr_rcc_param *rcc_param);
701*5113495bSYour Name 
702*5113495bSYour Name /**
703*5113495bSYour Name  *  target_if_cfr_default_ta_ra_config() - Configure default values to all
704*5113495bSYour Name  *  params(BW/NSS/TA/RA) in TA_RA mode
705*5113495bSYour Name  * @rcc_param: rcc configurations
706*5113495bSYour Name  * @allvalid: Indicates whether all TA_RA params are valid or not.
707*5113495bSYour Name  *            It could be either 0 or 1.
708*5113495bSYour Name  *            1: should be sent to FW during CFR initialization
709*5113495bSYour Name  *            0: should be set, after a successful commit session.
710*5113495bSYour Name  * @reset_cfg: This bitmap is being used to determine which groups'
711*5113495bSYour Name  *            parameters are needed to be reset to its default state.
712*5113495bSYour Name  */
713*5113495bSYour Name void target_if_cfr_default_ta_ra_config(struct cfr_rcc_param *rcc_param,
714*5113495bSYour Name 					bool allvalid, uint16_t reset_cfg);
715*5113495bSYour Name 
716*5113495bSYour Name /**
717*5113495bSYour Name  * target_if_cfr_rx_tlv_process() - Process PPDU status TLVs and store info in
718*5113495bSYour Name  * lookup table
719*5113495bSYour Name  * @pdev: PDEV object
720*5113495bSYour Name  * @nbuf: ppdu info
721*5113495bSYour Name  *
722*5113495bSYour Name  * Return: none
723*5113495bSYour Name  */
724*5113495bSYour Name void target_if_cfr_rx_tlv_process(struct wlan_objmgr_pdev *pdev, void *nbuf);
725*5113495bSYour Name 
726*5113495bSYour Name /**
727*5113495bSYour Name  * target_if_cfr_update_global_cfg() - Update global config after a successful
728*5113495bSYour Name  * commit
729*5113495bSYour Name  * @pdev: pointer to pdev object
730*5113495bSYour Name  *
731*5113495bSYour Name  * Return: None
732*5113495bSYour Name  */
733*5113495bSYour Name void target_if_cfr_update_global_cfg(struct wlan_objmgr_pdev *pdev);
734*5113495bSYour Name #else
cfr_enh_init_pdev(struct wlan_objmgr_psoc * psoc,struct wlan_objmgr_pdev * pdev)735*5113495bSYour Name static inline QDF_STATUS cfr_enh_init_pdev(
736*5113495bSYour Name 		struct wlan_objmgr_psoc *psoc,
737*5113495bSYour Name 		struct wlan_objmgr_pdev *pdev)
738*5113495bSYour Name {
739*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
740*5113495bSYour Name }
741*5113495bSYour Name 
cfr_enh_deinit_pdev(struct wlan_objmgr_psoc * psoc,struct wlan_objmgr_pdev * pdev)742*5113495bSYour Name static inline QDF_STATUS cfr_enh_deinit_pdev(
743*5113495bSYour Name 		struct wlan_objmgr_psoc *psoc,
744*5113495bSYour Name 		struct wlan_objmgr_pdev *pdev)
745*5113495bSYour Name {
746*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
747*5113495bSYour Name }
748*5113495bSYour Name #endif
749*5113495bSYour Name #endif
750