xref: /wlan-dirver/qca-wifi-host-cmn/wmi/inc/wmi_unified_11be_tlv.h (revision cfe8cda78633be00818878028ff51fc658a66c94)
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  *  peer_create_add_mlo_params() - Add MLO params in peer create cmd
101  *  @buf_ptr: pointer to peer create cmd buffer.
102  *  @req: pointer to peer create request param
103  *
104  *  Return: pointer to new offset of cmd buffer
105  */
106 uint8_t *peer_create_add_mlo_params(uint8_t *buf_ptr,
107 				    struct peer_create_params *req);
108 /**
109  *  peer_create_mlo_params_size() - Get ML params size in peer create
110  *  @req: pointer to peer create request param
111  *
112  *  Return: size of ML params in peer create cmd
113  */
114 size_t peer_create_mlo_params_size(struct peer_create_params *req);
115 /**
116  *  peer_assoc_mlo_params_size() - Get ML params size in peer assoc
117  *  @req: pointer to peer assoc request param
118  *
119  *  Return: size of ML params in peer assoc cmd
120  */
121 size_t peer_assoc_mlo_params_size(struct peer_assoc_params *req);
122 /**
123  *  peer_assoc_add_mlo_params() - Add MLO params in peer assoc cmd
124  *  @buf_ptr: pointer to peer assoc cmd buffer.
125  *  @req: pointer to peer assoc request param
126  *
127  *  Return: pointer to new offset of cmd buffer
128  */
129 uint8_t *peer_assoc_add_mlo_params(uint8_t *buf_ptr,
130 				   struct peer_assoc_params *req);
131 /**
132  *  peer_assoc_add_ml_partner_links() - Add MLO partner links in peer assoc cmd
133  *  @buf_ptr: pointer to peer assoc cmd buffer.
134  *  @req: pointer to peer assoc request param
135  *
136  *  Return: pointer to new offset of cmd buffer
137  */
138 uint8_t *peer_assoc_add_ml_partner_links(uint8_t *buf_ptr,
139 					 struct peer_assoc_params *req);
140 /**
141  * peer_assoc_t2lm_params_size() - Get T2LM param size in peer assoc
142  * @req: pointer to peer create request param
143  *
144  *  Return: size of ML params in peer create cmd
145  */
146 size_t peer_assoc_t2lm_params_size(struct peer_assoc_params *req);
147 /**
148  *  peer_assoc_add_tid_to_link_map() - Add TID-to-link mapping in peer assoc cmd
149  *  @buf_ptr: pointer to peer assoc cmd buffer.
150  *  @req: pointer to peer assoc request param
151  *
152  *  Return: pointer to new offset of cmd buffer
153  */
154 uint8_t *peer_assoc_add_tid_to_link_map(uint8_t *buf_ptr,
155 					struct peer_assoc_params *req);
156 
157 /**
158  *  peer_delete_mlo_params_size() - Get MLO params size in pdev delete
159  *  @req: peer delete request params
160  *
161  *  Return: size of MLO params in vdev start
162  */
163 size_t peer_delete_mlo_params_size(struct peer_delete_cmd_params *req);
164 
165 /**
166  *  peer_delete_add_mlo_params() - Add MLO params in peer delete cmd
167  *  @buf_ptr: pointer to peer delete cmd  buffer.
168  *  @req: pointer to peer delete request param
169  *
170  *  Return: pointer to new offset of cmd buffer
171  */
172 uint8_t *peer_delete_add_mlo_params(uint8_t *buf_ptr,
173 				    struct peer_delete_cmd_params *req);
174 
175 /** wmi_11be_tlv_attach_tlv - Attach 11be relaated callbacks
176  *  @wmi_handle: WMI handle
177  */
178 void wmi_11be_attach_tlv(wmi_unified_t wmi_handle);
179 #else
180 static uint8_t *vdev_create_add_mlo_params(uint8_t *buf_ptr,
181 					   struct vdev_create_params *param)
182 {
183 	WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0);
184 	return buf_ptr + WMI_TLV_HDR_SIZE;
185 }
186 
187 static size_t vdev_create_mlo_params_size(struct vdev_create_params *param)
188 {
189 	return WMI_TLV_HDR_SIZE;
190 }
191 
192 static uint8_t *vdev_start_add_mlo_params(uint8_t *buf_ptr,
193 					  struct vdev_start_params *req)
194 {
195 	WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0);
196 	return buf_ptr + WMI_TLV_HDR_SIZE;
197 }
198 
199 static size_t vdev_start_mlo_params_size(struct vdev_start_params *req)
200 {
201 	return WMI_TLV_HDR_SIZE;
202 }
203 
204 static uint8_t *vdev_start_add_ml_partner_links(uint8_t *buf_ptr,
205 						struct vdev_start_params *req)
206 {
207 	WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0);
208 	return buf_ptr + WMI_TLV_HDR_SIZE;
209 }
210 
211 static size_t bcn_tmpl_mlo_param_size(struct beacon_tmpl_params *param)
212 {
213 	return WMI_TLV_HDR_SIZE;
214 }
215 
216 static uint8_t *bcn_tmpl_add_ml_partner_links(uint8_t *buf_ptr,
217 					      struct beacon_tmpl_params *param)
218 {
219 	WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0);
220 	return buf_ptr + WMI_TLV_HDR_SIZE;
221 }
222 
223 static size_t bcn_tmpl_ml_info_size(struct beacon_tmpl_params *param)
224 {
225 	return WMI_TLV_HDR_SIZE;
226 }
227 
228 static uint8_t *bcn_tmpl_add_ml_info(uint8_t *buf_ptr,
229 				     struct beacon_tmpl_params *param)
230 {
231 	WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0);
232 	return buf_ptr + WMI_TLV_HDR_SIZE;
233 }
234 
235 static uint8_t *peer_create_add_mlo_params(uint8_t *buf_ptr,
236 					  struct peer_create_params *req)
237 {
238 	WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0);
239 	return buf_ptr + WMI_TLV_HDR_SIZE;
240 }
241 
242 static size_t peer_create_mlo_params_size(struct peer_create_params *req)
243 {
244 	return WMI_TLV_HDR_SIZE;
245 }
246 
247 static size_t peer_assoc_mlo_params_size(struct peer_assoc_params *req)
248 {
249 	size_t peer_assoc_mlo_size =
250 			WMI_TLV_HDR_SIZE +
251 			WMI_TLV_HDR_SIZE;
252 
253 	return peer_assoc_mlo_size;
254 }
255 
256 static uint8_t *peer_assoc_add_mlo_params(uint8_t *buf_ptr,
257 					  struct peer_assoc_params *req)
258 {
259 	WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0);
260 	return buf_ptr + WMI_TLV_HDR_SIZE;
261 }
262 
263 static uint8_t *peer_assoc_add_ml_partner_links(uint8_t *buf_ptr,
264 						struct peer_assoc_params *req)
265 {
266 	WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0);
267 	return buf_ptr + WMI_TLV_HDR_SIZE;
268 }
269 
270 static size_t peer_assoc_t2lm_params_size(struct peer_assoc_params *req)
271 {
272 	return WMI_TLV_HDR_SIZE;
273 }
274 
275 static uint8_t *peer_assoc_add_tid_to_link_map(uint8_t *buf_ptr,
276 					       struct peer_assoc_params *req)
277 {
278 	WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0);
279 	return buf_ptr + WMI_TLV_HDR_SIZE;
280 }
281 
282 static size_t peer_delete_mlo_params_size(struct peer_delete_cmd_params *req)
283 {
284 	return WMI_TLV_HDR_SIZE;
285 }
286 
287 static uint8_t *peer_delete_add_mlo_params(uint8_t *buf_ptr,
288 					   struct peer_delete_cmd_params *req)
289 {
290 	WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0);
291 	return buf_ptr + WMI_TLV_HDR_SIZE;
292 }
293 
294 static void wmi_11be_attach_tlv(wmi_unified_t wmi_handle)
295 { }
296 #endif /*WLAN_FEATURE_11BE_MLO*/
297 #endif /*_WMI_UNIFIED_11BE_TLV_H_*/
298