xref: /wlan-dirver/qca-wifi-host-cmn/wmi/inc/wmi_unified_11be_tlv.h (revision 70a19e16789e308182f63b15c75decec7bf0b342)
1 /*
2  * Copyright (c) 2021, The Linux Foundation. All rights reserved.
3  * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
4  *
5  * Permission to use, copy, modify, and/or distribute this software for any
6  * purpose with or without fee is hereby granted, provided that the above
7  * copyright notice and this permission notice appear in all copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16  */
17 
18 #ifndef _WMI_UNIFIED_11BE_TLV_H_
19 #define _WMI_UNIFIED_11BE_TLV_H_
20 
21 #ifdef WLAN_FEATURE_11BE_MLO
22 /**
23  *  vdev_create_mlo_params_size() - Get MLO params size in vdev create
24  *  @param: pointer to vdev create request param
25  *  Return: size of MLO params in vdev create
26  */
27 size_t vdev_create_mlo_params_size(struct vdev_create_params *param);
28 /**
29  *  vdev_create_add_mlo_params() - Add MLO params in vdev create cmd
30  *  @buf_ptr: pointer to vdev create buffer.
31  *  @param: pointer to vdev create request param
32  *
33  *  Return: pointer to new offset of vdev create buffer
34  */
35 uint8_t *vdev_create_add_mlo_params(uint8_t *buf_ptr,
36 				    struct vdev_create_params *param);
37 /**
38  *  vdev_start_mlo_params_size() - Get MLO params size in vdev start
39  *  @req: Vdev start request params
40  *
41  *  Return: size of MLO params in vdev start
42  */
43 size_t vdev_start_mlo_params_size(struct vdev_start_params *req);
44 /**
45  *  vdev_start_add_mlo_params() - Add MLO params in vdev start cmd
46  *  @buf_ptr: pointer to vdev start buffer.
47  *  @req: pointer to vdev create request param
48  *
49  *  Return: pointer to new offset of cmd buffer
50  */
51 uint8_t *vdev_start_add_mlo_params(uint8_t *buf_ptr,
52 				   struct vdev_start_params *req);
53 /**
54  *  vdev_start_add_ml_partner_links() - Add MLO partner links in vdev start cmd
55  *  @buf_ptr: pointer to vdev start cmd buffer.
56  *  @req: pointer to vdev start request param
57  *
58  *  Return: pointer to new offset of cmd buffer
59  */
60 uint8_t *vdev_start_add_ml_partner_links(uint8_t *buf_ptr,
61 					 struct vdev_start_params *req);
62 /**
63  * bcn_tmpl_mlo_param_size() - Get ML param size in beacon template
64  * @param: Pointer to beacon template param
65  *
66  * Return: size of ML params in beacon template
67  */
68 size_t bcn_tmpl_mlo_param_size(struct beacon_tmpl_params *param);
69 
70 /**
71  * bcn_tmpl_add_ml_partner_links - Add MLO partner links in beacon template
72  *                                 command
73  * @buf_ptr: pointer to beacon cmd buffer.
74  * @param: pointer to beacon template params
75  *
76  * Return: pointer to new offset of cmd buffer
77  */
78 uint8_t *bcn_tmpl_add_ml_partner_links(uint8_t *buf_ptr,
79 				       struct beacon_tmpl_params *param);
80 
81 /**
82  * bcn_tmpl_ml_info_size() - Get ML info size in beacon template
83  * @param: Pointer to beacon template param
84  *
85  * Return: size of ML info in beacon template
86  */
87 size_t bcn_tmpl_ml_info_size(struct beacon_tmpl_params *param);
88 
89 /**
90  * bcn_tmpl_add_ml_info() - Add MLO info to update Critical Update info in
91  *                                 beacon template command
92  * @buf_ptr: pointer to beacon cmd buffer.
93  * @param: pointer to beacon template params
94  *
95  * Return: pointer to new offset of cmd buffer
96  */
97 uint8_t *bcn_tmpl_add_ml_info(uint8_t *buf_ptr,
98 			      struct beacon_tmpl_params *param);
99 /**
100  * prb_resp_tmpl_ml_info_size() - Get ML info size in 20TU probe resp template
101  * @param: Pointer to 20TU probe response template param
102  *
103  * Return: size of ML info in 20TU probe response template
104  */
105 size_t prb_resp_tmpl_ml_info_size(struct wmi_probe_resp_params *param);
106 
107 /**
108  * prb_resp_tmpl_add_ml_info() - Add MLO info to update Critical Update info in
109  *                             20TU probe response template command
110  * @buf_ptr: pointer to 20TU probe response cmd buffer.
111  * @param: pointer to 20TU probe response template params
112  *
113  * Return: pointer to new offset of cmd buffer
114  */
115 uint8_t *prb_resp_tmpl_add_ml_info(uint8_t *buf_ptr,
116 				   struct wmi_probe_resp_params *param);
117 /**
118  *  peer_create_add_mlo_params() - Add MLO params in peer create cmd
119  *  @buf_ptr: pointer to peer create cmd buffer.
120  *  @req: pointer to peer create request param
121  *
122  *  Return: pointer to new offset of cmd buffer
123  */
124 uint8_t *peer_create_add_mlo_params(uint8_t *buf_ptr,
125 				    struct peer_create_params *req);
126 /**
127  *  peer_create_mlo_params_size() - Get ML params size in peer create
128  *  @req: pointer to peer create request param
129  *
130  *  Return: size of ML params in peer create cmd
131  */
132 size_t peer_create_mlo_params_size(struct peer_create_params *req);
133 /**
134  *  peer_assoc_mlo_params_size() - Get ML params size in peer assoc
135  *  @req: pointer to peer assoc request param
136  *
137  *  Return: size of ML params in peer assoc cmd
138  */
139 size_t peer_assoc_mlo_params_size(struct peer_assoc_params *req);
140 /**
141  *  peer_assoc_add_mlo_params() - Add MLO params in peer assoc cmd
142  *  @buf_ptr: pointer to peer assoc cmd buffer.
143  *  @req: pointer to peer assoc request param
144  *
145  *  Return: pointer to new offset of cmd buffer
146  */
147 uint8_t *peer_assoc_add_mlo_params(uint8_t *buf_ptr,
148 				   struct peer_assoc_params *req);
149 /**
150  *  peer_assoc_add_ml_partner_links() - Add MLO partner links in peer assoc cmd
151  *  @buf_ptr: pointer to peer assoc cmd buffer.
152  *  @req: pointer to peer assoc request param
153  *
154  *  Return: pointer to new offset of cmd buffer
155  */
156 uint8_t *peer_assoc_add_ml_partner_links(uint8_t *buf_ptr,
157 					 struct peer_assoc_params *req);
158 /**
159  * peer_assoc_t2lm_params_size() - Get T2LM param size in peer assoc
160  * @req: pointer to peer create request param
161  *
162  *  Return: size of ML params in peer create cmd
163  */
164 size_t peer_assoc_t2lm_params_size(struct peer_assoc_params *req);
165 /**
166  *  peer_assoc_add_tid_to_link_map() - Add TID-to-link mapping in peer assoc cmd
167  *  @buf_ptr: pointer to peer assoc cmd buffer.
168  *  @req: pointer to peer assoc request param
169  *
170  *  Return: pointer to new offset of cmd buffer
171  */
172 uint8_t *peer_assoc_add_tid_to_link_map(uint8_t *buf_ptr,
173 					struct peer_assoc_params *req);
174 
175 /**
176  *  peer_delete_mlo_params_size() - Get MLO params size in pdev delete
177  *  @req: peer delete request params
178  *
179  *  Return: size of MLO params in vdev start
180  */
181 size_t peer_delete_mlo_params_size(struct peer_delete_cmd_params *req);
182 
183 /**
184  *  peer_delete_add_mlo_params() - Add MLO params in peer delete cmd
185  *  @buf_ptr: pointer to peer delete cmd  buffer.
186  *  @req: pointer to peer delete request param
187  *
188  *  Return: pointer to new offset of cmd buffer
189  */
190 uint8_t *peer_delete_add_mlo_params(uint8_t *buf_ptr,
191 				    struct peer_delete_cmd_params *req);
192 
193 /** wmi_11be_tlv_attach_tlv - Attach 11be relaated callbacks
194  *  @wmi_handle: WMI handle
195  */
196 void wmi_11be_attach_tlv(wmi_unified_t wmi_handle);
197 
198 /**
199  * extract_mgmt_rx_mlo_link_removal_tlv_count() - Extract the number of link
200  * removal TLVs from MGMT Rx event
201  * @num_link_removal_tlvs: Number of link removal TLVs
202  * @hdr: MGMT Rx event parameters to be populated
203  *
204  * Return: None
205  */
206 static inline void
207 extract_mgmt_rx_mlo_link_removal_tlv_count(
208 	int num_link_removal_tlvs,
209 	struct mgmt_rx_event_params *hdr)
210 {
211 	hdr->num_link_removal_info = num_link_removal_tlvs;
212 }
213 #else
214 static uint8_t *vdev_create_add_mlo_params(uint8_t *buf_ptr,
215 					   struct vdev_create_params *param)
216 {
217 	WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0);
218 	return buf_ptr + WMI_TLV_HDR_SIZE;
219 }
220 
221 static size_t vdev_create_mlo_params_size(struct vdev_create_params *param)
222 {
223 	return WMI_TLV_HDR_SIZE;
224 }
225 
226 static uint8_t *vdev_start_add_mlo_params(uint8_t *buf_ptr,
227 					  struct vdev_start_params *req)
228 {
229 	WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0);
230 	return buf_ptr + WMI_TLV_HDR_SIZE;
231 }
232 
233 static size_t vdev_start_mlo_params_size(struct vdev_start_params *req)
234 {
235 	return WMI_TLV_HDR_SIZE;
236 }
237 
238 static uint8_t *vdev_start_add_ml_partner_links(uint8_t *buf_ptr,
239 						struct vdev_start_params *req)
240 {
241 	WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0);
242 	return buf_ptr + WMI_TLV_HDR_SIZE;
243 }
244 
245 static size_t bcn_tmpl_mlo_param_size(struct beacon_tmpl_params *param)
246 {
247 	return WMI_TLV_HDR_SIZE;
248 }
249 
250 static uint8_t *bcn_tmpl_add_ml_partner_links(uint8_t *buf_ptr,
251 					      struct beacon_tmpl_params *param)
252 {
253 	WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0);
254 	return buf_ptr + WMI_TLV_HDR_SIZE;
255 }
256 
257 static size_t bcn_tmpl_ml_info_size(struct beacon_tmpl_params *param)
258 {
259 	return WMI_TLV_HDR_SIZE;
260 }
261 
262 static uint8_t *bcn_tmpl_add_ml_info(uint8_t *buf_ptr,
263 				     struct beacon_tmpl_params *param)
264 {
265 	WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0);
266 	return buf_ptr + WMI_TLV_HDR_SIZE;
267 }
268 
269 static size_t prb_resp_tmpl_ml_info_size(struct wmi_probe_resp_params *param)
270 {
271 	return WMI_TLV_HDR_SIZE;
272 }
273 
274 static uint8_t *prb_resp_tmpl_add_ml_info(uint8_t *buf_ptr,
275 					  struct wmi_probe_resp_params *param)
276 {
277 	WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0);
278 	return buf_ptr + WMI_TLV_HDR_SIZE;
279 }
280 
281 static uint8_t *peer_create_add_mlo_params(uint8_t *buf_ptr,
282 					  struct peer_create_params *req)
283 {
284 	WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0);
285 	return buf_ptr + WMI_TLV_HDR_SIZE;
286 }
287 
288 static size_t peer_create_mlo_params_size(struct peer_create_params *req)
289 {
290 	return WMI_TLV_HDR_SIZE;
291 }
292 
293 static size_t peer_assoc_mlo_params_size(struct peer_assoc_params *req)
294 {
295 	size_t peer_assoc_mlo_size =
296 			WMI_TLV_HDR_SIZE +
297 			WMI_TLV_HDR_SIZE;
298 
299 	return peer_assoc_mlo_size;
300 }
301 
302 static uint8_t *peer_assoc_add_mlo_params(uint8_t *buf_ptr,
303 					  struct peer_assoc_params *req)
304 {
305 	WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0);
306 	return buf_ptr + WMI_TLV_HDR_SIZE;
307 }
308 
309 static uint8_t *peer_assoc_add_ml_partner_links(uint8_t *buf_ptr,
310 						struct peer_assoc_params *req)
311 {
312 	WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0);
313 	return buf_ptr + WMI_TLV_HDR_SIZE;
314 }
315 
316 static size_t peer_assoc_t2lm_params_size(struct peer_assoc_params *req)
317 {
318 	return WMI_TLV_HDR_SIZE;
319 }
320 
321 static uint8_t *peer_assoc_add_tid_to_link_map(uint8_t *buf_ptr,
322 					       struct peer_assoc_params *req)
323 {
324 	WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0);
325 	return buf_ptr + WMI_TLV_HDR_SIZE;
326 }
327 
328 static size_t peer_delete_mlo_params_size(struct peer_delete_cmd_params *req)
329 {
330 	return WMI_TLV_HDR_SIZE;
331 }
332 
333 static uint8_t *peer_delete_add_mlo_params(uint8_t *buf_ptr,
334 					   struct peer_delete_cmd_params *req)
335 {
336 	WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0);
337 	return buf_ptr + WMI_TLV_HDR_SIZE;
338 }
339 
340 static void wmi_11be_attach_tlv(wmi_unified_t wmi_handle)
341 { }
342 
343 static inline void
344 extract_mgmt_rx_mlo_link_removal_tlv_count(
345 	int num_link_removal_tlvs,
346 	struct mgmt_rx_event_params *hdr)
347 {
348 }
349 #endif /*WLAN_FEATURE_11BE_MLO*/
350 #endif /*_WMI_UNIFIED_11BE_TLV_H_*/
351