xref: /wlan-dirver/qca-wifi-host-cmn/umac/mlo_mgr/inc/utils_mlo.h (revision 70a19e16789e308182f63b15c75decec7bf0b342)
1 /*
2  * Copyright (c) 2021, The Linux Foundation. All rights reserved.
3  * Copyright (c) 2021-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 /*
19  * DOC: contains MLO manager containing util public api's
20  */
21 #ifndef _WLAN_UTILS_MLO_H_
22 #define _WLAN_UTILS_MLO_H_
23 
24 #include <wlan_cmn_ieee80211.h>
25 #include "wlan_mlo_mgr_public_structs.h"
26 #include <wlan_cm_ucfg_api.h>
27 #include <wlan_objmgr_vdev_obj.h>
28 
29 #ifdef WLAN_FEATURE_11BE_MLO
30 
31 /**
32  * util_gen_link_assoc_req() - Generate link specific assoc request
33  * @frame: Pointer to original association request. This should not contain the
34  * 802.11 header, and must start from the fixed fields in the association
35  * request. This is required due to some caller semantics built into the end to
36  * end design.
37  * @frame_len: Length of original association request
38  * @isreassoc: Whether this is a re-association request
39  * @link_addr: Secondary link's MAC address
40  * @link_frame: Generated secondary link specific association request. Note that
41  * this will start from the 802.11 header (unlike the original association
42  * request). This should be ignored in the case of failure.
43  * @link_frame_maxsize: Maximum size of generated secondary link specific
44  * association request
45  * @link_frame_len: Pointer to location where populated length of generated
46  * secondary link specific association request should be written. This should be
47  * ignored in the case of failure.
48  *
49  * Generate a link specific logically equivalent association request for the
50  * secondary link from the original association request containing a Multi-Link
51  * element. This applies to both association and re-association requests.
52  * Currently, only two link MLO is supported.
53  *
54  * Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
55  * the reason for error in the case of failure.
56  */
57 QDF_STATUS
58 util_gen_link_assoc_req(uint8_t *frame, qdf_size_t frame_len, bool isreassoc,
59 			struct qdf_mac_addr link_addr,
60 			uint8_t *link_frame,
61 			qdf_size_t link_frame_maxsize,
62 			qdf_size_t *link_frame_len);
63 
64 /**
65  * util_gen_link_assoc_rsp() - Generate link specific assoc response
66  * @frame: Pointer to original association response. This should not contain the
67  * 802.11 header, and must start from the fixed fields in the association
68  * response. This is required due to some caller semantics built into the end to
69  * end design.
70  * @frame_len: Length of original association response
71  * @isreassoc: Whether this is a re-association response
72  * @link_addr: Secondary link's MAC address
73  * @link_frame: Generated secondary link specific association response. Note
74  * that this will start from the 802.11 header (unlike the original association
75  * response). This should be ignored in the case of failure.
76  * @link_frame_maxsize: Maximum size of generated secondary link specific
77  * association response
78  * @link_frame_len: Pointer to location where populated length of generated
79  * secondary link specific association response should be written. This should
80  * be ignored in the case of failure.
81  *
82  * Generate a link specific logically equivalent association response for the
83  * secondary link from the original association response containing a Multi-Link
84  * element. This applies to both association and re-association responses.
85  * Currently, only two link MLO is supported.
86  *
87  * Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
88  * the reason for error in the case of failure.
89  */
90 QDF_STATUS
91 util_gen_link_assoc_rsp(uint8_t *frame, qdf_size_t frame_len, bool isreassoc,
92 			struct qdf_mac_addr link_addr,
93 			uint8_t *link_frame,
94 			qdf_size_t link_frame_maxsize,
95 			qdf_size_t *link_frame_len);
96 
97 /**
98  * util_gen_link_probe_rsp() - Generate link specific probe response
99  * @frame: Pointer to original probe response. This should not contain the
100  * 802.11 header, and must start from the fixed fields in the probe
101  * response. This is required due to some caller semantics built into the end to
102  * end design.
103  * @frame_len: Length of original probe response
104  * @link_addr: Secondary link's MAC address
105  * @link_frame: Generated secondary link specific probe response. Note
106  * that this will start from the 802.11 header (unlike the original probe
107  * response). This should be ignored in the case of failure.
108  * @link_frame_maxsize: Maximum size of generated secondary link specific
109  * probe response
110  * @link_frame_len: Pointer to location where populated length of generated
111  * secondary link specific probe response should be written. This should
112  * be ignored in the case of failure.
113  *
114  * Generate a link specific logically equivalent probe response for the
115  * secondary link from the original probe response containing a Multi-Link
116  * element. This applies to both probe responses.
117  * Currently, only two link MLO is supported.
118  *
119  * Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
120  * the reason for error in the case of failure.
121  */
122 QDF_STATUS
123 util_gen_link_probe_rsp(uint8_t *frame, qdf_size_t frame_len,
124 			struct qdf_mac_addr link_addr,
125 			uint8_t *link_frame,
126 			qdf_size_t link_frame_maxsize,
127 			qdf_size_t *link_frame_len);
128 
129 /**
130  * util_find_mlie - Find the first Multi-Link element or the start of the first
131  * Multi-Link element fragment sequence in a given buffer containing elements,
132  * if a Multi-Link element or element fragment sequence exists in the given
133  * buffer.
134  *
135  * @buf: Buffer to be searched for the Multi-Link element or the start of the
136  * Multi-Link element fragment sequence
137  * @buflen: Length of the buffer
138  * @mlieseq: Pointer to location where the starting address of the Multi-Link
139  * element or Multi-Link element fragment sequence should be updated if found
140  * in the given buffer. The value NULL will be updated to this location if the
141  * element or element fragment sequence is not found. This should be ignored by
142  * the caller if the function returns error.
143  * @mlieseqlen: Pointer to location where the total length of the Multi-Link
144  * element or Multi-Link element fragment sequence should be updated if found
145  * in the given buffer. This should be ignored by the caller if the function
146  * returns error, or if the function indicates that the element or element
147  * fragment sequence was not found by providing a starting address of NULL.
148  *
149  * Find the first Multi-Link element or the start of the first Multi-Link
150  * element fragment sequence in a given buffer containing elements, if a
151  * Multi-Link element or element fragment sequence exists in the given buffer.
152  * The buffer should contain only 802.11 Information elements, and thus should
153  * not contain other information like 802.11 header, 802.11 frame body
154  * components like fields that are not elements (e.g. Capability Information
155  * field, Beacon Interval field), etc.
156  *
157  * Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
158  * the reason for error in the case of failure
159  */
160 QDF_STATUS
161 util_find_mlie(uint8_t *buf, qdf_size_t buflen, uint8_t **mlieseq,
162 	       qdf_size_t *mlieseqlen);
163 
164 /**
165  * util_find_mlie_by_variant - Find the first Multi-Link element or the start of
166  * the first Multi-Link element fragment sequence in a given buffer containing
167  * elements based on variant, if a Multi-Link element or element fragment
168  * sequence exists in the given buffer.
169  *
170  * @buf: Buffer to be searched for the Multi-Link element or the start of the
171  * Multi-Link element fragment sequence
172  * @buflen: Length of the buffer
173  * @mlieseq: Based on the variant, pointer to location where the starting
174  * address of the Multi-Link element or Multi-Link element fragment sequence
175  * should be updated if found in the given buffer. The value NULL will be
176  * updated to this location if the element or element fragment sequence is not
177  * found. This should be ignored by the caller if the function returns error.
178  * @mlieseqlen: Pointer to location where the total length of the Multi-Link
179  * element or Multi-Link element fragment sequence should be updated if found
180  * in the given buffer. This should be ignored by the caller if the function
181  * returns error, or if the function indicates that the element or element
182  * fragment sequence was not found by providing a starting address of NULL.
183  * @variant: Multi-Link element variant.  The value should be interpreted by the
184  * caller as a member of enum wlan_ml_variant. (This enum is not directly used
185  * as an argument, so that non-MLO code that happens to call this function does
186  * not need to be aware of the definition of the enum, though such a call would
187  * ultimately result in an error).
188  *
189  * Based on variant, find the Multi-Link element or the start of the Multi-Link
190  * element fragment sequence in a given buffer containing elements, if a
191  * Multi-Link element or element fragment sequence exists in the given buffer.
192  * The buffer should contain only 802.11 Information elements, and thus should
193  * not contain other information like 802.11 header, 802.11 frame body
194  * components like fields that are not elements (e.g. Capability Information
195  * field, Beacon Interval field), etc.
196  *
197  * Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
198  * the reason for error in the case of failure
199  */
200 QDF_STATUS
201 util_find_mlie_by_variant(uint8_t *buf, qdf_size_t buflen, uint8_t **mlieseq,
202 			  qdf_size_t *mlieseqlen, int variant);
203 
204 /**
205  * util_get_mlie_variant() - Get ML IE variant
206  * @mlieseq: Starting address of the Multi-Link element or Multi-Link element
207  * fragment sequence
208  * @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
209  * fragment sequence
210  * @variant: Pointer to the location where the value of the variant should be
211  * updated. On success, the value should be interpreted by the caller as a
212  * member of enum wlan_ml_variant. (This enum is not directly used as an
213  * argument, so that non-MLO code that happens to call this function does not
214  * need to be aware of the definition of the enum, though such a call would
215  * ultimately result in an error). The value should be ignored by the caller if
216  * the function returns error.
217  *
218  * Get the variant of the given Multi-Link element or element fragment sequence.
219  *
220  * Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
221  * the reason for error in the case of failure
222  */
223 QDF_STATUS
224 util_get_mlie_variant(uint8_t *mlieseq, qdf_size_t mlieseqlen,
225 		      int *variant);
226 
227 /**
228  * util_get_bvmlie_mldmacaddr() - Get the MLD MAC address
229  * @mlieseq: Starting address of the Multi-Link element or Multi-Link element
230  * fragment sequence
231  * @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
232  * fragment sequence
233  * @mldmacaddr: Pointer to the location where the MLD MAC address should be
234  * updated. This should be ignored by the caller if the function returns error.
235  *
236  * Get the MLD MAC address from a given Basic variant Multi-Link element
237  * or element fragment sequence.
238  *
239  * Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
240  * the reason for error in the case of failure
241  */
242 QDF_STATUS
243 util_get_bvmlie_mldmacaddr(uint8_t *mlieseq, qdf_size_t mlieseqlen,
244 			   struct qdf_mac_addr *mldmacaddr);
245 
246 /**
247  * util_get_bvmlie_eml_cap() - Get the EML capabilities
248  * @mlieseq: Starting address of the Multi-Link element or Multi-Link element
249  * fragment sequence
250  * @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
251  * fragment sequence
252  * @eml_cap_found: Pointer to the location where a boolean status should be
253  * updated indicating whether the EML cabalility was found or not. This should
254  * be ignored by the caller if the function returns error.
255  * @eml_cap: Pointer to the location where the EML capabilities should be
256  * updated. This should be ignored by the caller if the function indicates
257  * that the EML capability was not found.
258  *
259  * Get the EML capabilities from a given Basic variant Multi-Link element or
260  * element fragment sequence.
261  *
262  * Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
263  * the reason for error in the case of failure
264  */
265 QDF_STATUS
266 util_get_bvmlie_eml_cap(uint8_t *mlieseq, qdf_size_t mlieseqlen,
267 			bool *eml_cap_found,
268 			uint16_t *eml_cap);
269 
270 /**
271  * util_get_bvmlie_msd_cap() - Get the MSD capabilities for Basic variant
272  * MLO IE
273  * @mlieseq: Starting address of the Multi-Link element or Multi-Link element
274  * fragment sequence
275  * @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
276  * fragment sequence
277  * @msd_cap_found: Pointer to the location where a boolean status should be
278  * updated indicating whether the MSD cabalility was found or not. This should
279  * be ignored by the caller if the function returns error.
280  * @msd_cap: Pointer to the location where the MSD capabilities should be
281  * updated. This should be ignored by the caller if the function indicates
282  * that the MSD capability was not found.
283  *
284  * Get the MSD capabilities from a given Basic variant Multi-Link element or
285  * element fragment sequence.
286  *
287  * Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
288  * the reason for error in the case of failure
289  */
290 QDF_STATUS
291 util_get_bvmlie_msd_cap(uint8_t *mlieseq, qdf_size_t mlieseqlen,
292 			bool *msd_cap_found, uint16_t *msd_cap);
293 /**
294  * util_get_bvmlie_primary_linkid() - Get the link identifier
295  * @mlieseq: Starting address of the Multi-Link element or Multi-Link element
296  * fragment sequence
297  * @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
298  * fragment sequence
299  * @linkidfound: Pointer to the location where a boolean status should be
300  * updated indicating whether the link identifier was found or not. This should
301  * be ignored by the caller if the function returns error.
302  * @linkid: Pointer to the location where the value of the link identifier
303  * should be updated. This should be ignored by the caller if the function
304  * returns error, or if the function indicates that the link identifier was not
305  * found.
306  *
307  * Get the link identifier from a given Basic variant Multi-Link element or
308  * element fragment sequence, of the AP that transmits the Multi-Link
309  * element/element fragment sequence or the nontransmitted BSSID in the same
310  * multiple BSSID set as the AP that transmits the Multi-Link element/element
311  * fragment sequence and that is affiliated with the MLD that is described in
312  * the Multi-Link element.
313  *
314  * Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
315  * the reason for error in the case of failure
316  */
317 QDF_STATUS
318 util_get_bvmlie_primary_linkid(uint8_t *mlieseq, qdf_size_t mlieseqlen,
319 			       bool *linkidfound, uint8_t *linkid);
320 
321 /**
322  * util_get_mlie_common_info_len() - Get the MLD common info len
323  * @mlieseq: Starting address of the Multi-Link element or Multi-Link element
324  * fragment sequence
325  * @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
326  * fragment sequence
327  * @commoninfo_len: Pointer to the location where the value of the MLD common
328  * info len should be updated. This should be ignored by the caller if the
329  * function returns error.
330  *
331  * Get the MLD common info len from Multi-Link element transmitted by the AP.
332  *
333  * Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
334  * the reason for error in the case of failure
335  */
336 QDF_STATUS
337 util_get_mlie_common_info_len(uint8_t *mlieseq, qdf_size_t mlieseqlen,
338 			      uint8_t *commoninfo_len);
339 
340 /**
341  * util_get_bvmlie_bssparamchangecnt() - Get the MLD BSS PARAM Change Count
342  * @mlieseq: Starting address of the Multi-Link element or Multi-Link element
343  * fragment sequence
344  * @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
345  * fragment sequence
346  * @bssparamchangecntfound: Pointer to the location where a boolean status
347  * should be updated indicating whether the MLD BSS PARAM Change Count was
348  * found or not. This should be ignored by the caller if the function
349  * returns error.
350  * @bssparamchangecnt: Pointer to the location where the value of the MLD BSS
351  * PARAM Change Count should be updated. This should be ignored by the caller
352  * if the function returns error, or if the function indicates that the MLD
353  * BSS PARAM Change Count was not found.
354  *
355  * Get the MLD BSS PARAM Change Count from Multi-Link element transmitted
356  * by the AP.
357  *
358  * Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
359  * the reason for error in the case of failure
360  */
361 QDF_STATUS
362 util_get_bvmlie_bssparamchangecnt(uint8_t *mlieseq, qdf_size_t mlieseqlen,
363 				  bool *bssparamchangecntfound,
364 				  uint8_t *bssparamchangecnt);
365 
366 /**
367  * util_get_bvmlie_mldcap() - Get the MLD capabilities
368  * @mlieseq: Starting address of the Multi-Link element or Multi-Link element
369  * fragment sequence
370  * @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
371  * fragment sequence
372  * @mldcapfound: Pointer to the location where a boolean status should be
373  * updated indicating whether the MLD capabilities was found or not. This should
374  * be ignored by the caller if the function returns error.
375  * @mldcap: Pointer to the location where the value of the MLD capabilities
376  * should be updated. This should be ignored by the caller if the function
377  * returns error, or if the function indicates that the MLD capabilities was not
378  * found.
379  *
380  * Get the MLD capabilities from a given Basic variant Multi-Link element or
381  * element fragment sequence, of the AP that transmits the Multi-Link
382  * element/element fragment sequence or the nontransmitted BSSID in the same
383  * multiple BSSID set as the AP that transmits the Multi-Link element/element
384  * fragment sequence and that is affiliated with the MLD that is described in
385  * the Multi-Link element.
386  *
387  * Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
388  * the reason for error in the case of failure
389  */
390 QDF_STATUS
391 util_get_bvmlie_mldcap(uint8_t *mlieseq, qdf_size_t mlieseqlen,
392 		       bool *mldcapfound, uint16_t *mldcap);
393 
394 /**
395  * util_get_bvmlie_persta_partner_info() - Get per-STA partner link information
396  * @mlieseq: Starting address of the Multi-Link element or Multi-Link element
397  * fragment sequence
398  * @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
399  * fragment sequence
400  * @partner_info: Pointer to the location where the partner link information
401  * should be updated. This should be ignored by the caller if the function
402  * returns error. Note that success will be returned and the number of links in
403  * this structure will be reported as 0, if no Link Info is found, or no per-STA
404  * profile is found, or if none of the per-STA profiles includes a MAC address
405  * in the STA Info field (assuming no errors are encountered).
406  *
407  * Get partner link information in the per-STA profiles present in a Basic
408  * variant Multi-Link element. The partner link information is returned only for
409  * those per-STA profiles which have a MAC address in the STA Info field.
410  *
411  * Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
412  * the reason for error in the case of failure
413  */
414 QDF_STATUS
415 util_get_bvmlie_persta_partner_info(uint8_t *mlieseq,
416 				    qdf_size_t mlieseqlen,
417 				    struct mlo_partner_info *partner_info);
418 
419 /**
420  * util_get_prvmlie_mldid - Get the MLD ID from a given Probe Request
421  * variant Multi-Link element , of the STA that transmits ML Probe Request
422  * with the Multi-Link element
423  *
424  * @mlieseq: Starting address of the Multi-Link element or Multi-Link element
425  * fragment sequence
426  * @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
427  * fragment sequence
428  * @mldidfound: Pointer to the location where a boolean status should be
429  * updated indicating whether the MLD ID was found or not. This should
430  * be ignored by the caller if the function returns error.
431  * @mldid: Pointer to the location where the value of the MLD ID
432  * should be updated. This should be ignored by the caller if the function
433  * returns error, or if the function indicates that the MLD ID was not
434  * found.
435  *
436  * Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
437  * the reason for error in the case of failure
438  */
439 QDF_STATUS
440 util_get_prvmlie_mldid(uint8_t *mlieseq, qdf_size_t mlieseqlen,
441 		       bool *mldidfound, uint8_t *mldid);
442 
443 /**
444  * util_get_prvmlie_persta_link_id() - Get per-STA probe req link information
445  *
446  * @mlieseq: Starting address of the Multi-Link element or Multi-Link element
447  * fragment sequence
448  * @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
449  * fragment sequence
450  * @probereq_info: Pointer to the location where the probe req link information
451  * should be updated. This should be ignored by the caller if the function
452  * returns error. Note that success will be returned and the number of links in
453  * this structure will be reported as 0, if no Link Info is found, or no per-STA
454  * profile is found.
455  *
456  * Get probe req link information in the per-STA profiles present in a Probe req
457  * variant Multi-Link element.
458  *
459  * Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
460  * the reason for error in the case of failure
461  */
462 QDF_STATUS
463 util_get_prvmlie_persta_link_id(uint8_t *mlieseq,
464 				qdf_size_t mlieseqlen,
465 				struct mlo_probereq_info *probereq_info);
466 
467 /**
468  * util_get_rvmlie_mldmacaddr() - Get the MLD MAC address from a given Reconfig
469  * variant Multi-Link element.
470  *
471  * @mlieseq: Starting address of the Multi-Link element or Multi-Link element
472  * fragment sequence
473  * @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
474  * fragment sequence
475  * @mldmacaddr: Pointer to the location where the MLD MAC address should be
476  * updated. This should be ignored by the caller if the function returns error.
477  *
478  * Get the MLD MAC address from a given Reconfig variant Multi-Link element
479  * or element fragment sequence.
480  *
481  * Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
482  * the reason for error in the case of failure
483  */
484 QDF_STATUS
485 util_get_rvmlie_mldmacaddr(uint8_t *mlieseq, qdf_size_t mlieseqlen,
486 			   struct qdf_mac_addr *mldmacaddr);
487 
488 /**
489  * util_get_rvmlie_persta_link_info() - Get per-STA reconfig link information
490  *
491  * @mlieseq: Starting address of the Multi-Link element or Multi-Link element
492  * fragment sequence
493  * @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
494  * fragment sequence
495  * @reconfig_info: Pointer to the location where the reconfig link information
496  * should be updated. This should be ignored by the caller if the function
497  * returns error. Note that success will be returned and the number of links in
498  * this structure will be reported as 0, if no Link Info is found, or no per-STA
499  * profile is found.
500  *
501  * Get reconfig link information in the per-STA profiles present in a Reconfig
502  * variant Multi-Link element.
503  *
504  * Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
505  * the reason for error in the case of failure.
506  */
507 QDF_STATUS
508 util_get_rvmlie_persta_link_info(uint8_t *mlieseq,
509 				 qdf_size_t mlieseqlen,
510 				 struct ml_rv_info *reconfig_info);
511 
512 #else
513 static inline QDF_STATUS
514 util_gen_link_assoc_req(uint8_t *frame, qdf_size_t frame_len, bool isreassoc,
515 			struct qdf_mac_addr link_addr,
516 			uint8_t *link_frame,
517 			qdf_size_t link_frame_maxsize,
518 			qdf_size_t *link_frame_len)
519 {
520 	return QDF_STATUS_E_NOSUPPORT;
521 }
522 
523 static inline QDF_STATUS
524 util_gen_link_assoc_rsp(uint8_t *frame, qdf_size_t frame_len, bool isreassoc,
525 			struct qdf_mac_addr link_addr,
526 			uint8_t *link_frame,
527 			qdf_size_t link_frame_maxsize,
528 			qdf_size_t *link_frame_len)
529 {
530 	return QDF_STATUS_E_NOSUPPORT;
531 }
532 
533 static inline QDF_STATUS
534 util_find_mlie(uint8_t *buf, qdf_size_t buflen, uint8_t **mlieseq,
535 	       qdf_size_t *mlieseqlen)
536 {
537 	return QDF_STATUS_E_NOSUPPORT;
538 }
539 
540 static inline QDF_STATUS
541 util_find_mlie_by_variant(uint8_t *buf, qdf_size_t buflen, uint8_t **mlieseq,
542 			  qdf_size_t *mlieseqlen)
543 {
544 	return QDF_STATUS_E_FAILURE;
545 }
546 
547 static inline QDF_STATUS
548 util_get_mlie_variant(uint8_t *mlieseq, qdf_size_t mlieseqlen,
549 		      int *variant)
550 {
551 	return QDF_STATUS_E_NOSUPPORT;
552 }
553 
554 static inline QDF_STATUS
555 util_get_mlie_common_info_len(uint8_t *mlieseq, qdf_size_t mlieseqlen,
556 			      uint8_t *commoninfo_len)
557 {
558 	return QDF_STATUS_E_NOSUPPORT;
559 }
560 
561 static inline QDF_STATUS
562 util_get_bvmlie_bssparamchangecnt(uint8_t *mlieseq, qdf_size_t mlieseqlen,
563 				  bool *bssparamchangecntfound,
564 				  uint8_t *bssparamchangecnt)
565 {
566 	return QDF_STATUS_E_NOSUPPORT;
567 }
568 
569 static inline QDF_STATUS
570 util_get_bvmlie_mldmacaddr(uint8_t *mlieseq, qdf_size_t mlieseqlen,
571 			   struct qdf_mac_addr *mldmacaddr)
572 {
573 	return QDF_STATUS_E_NOSUPPORT;
574 }
575 
576 static inline QDF_STATUS
577 util_get_bvmlie_eml_cap(uint8_t *mlieseq, qdf_size_t mlieseqlen,
578 			bool *eml_cap_found,
579 			uint16_t *eml_cap)
580 {
581 	return QDF_STATUS_E_NOSUPPORT;
582 }
583 
584 static inline QDF_STATUS
585 util_get_bvmlie_msd_cap(uint8_t *mlieseq, qdf_size_t mlieseqlen,
586 			bool *msd_cap_found,
587 			uint16_t *msd_cap)
588 {
589 	return QDF_STATUS_E_NOSUPPORT;
590 }
591 
592 static inline QDF_STATUS
593 util_get_bvmlie_primary_linkid(uint8_t *mlieseq, qdf_size_t mlieseqlen,
594 			       bool *linkidfound, uint8_t *linkid)
595 {
596 	return QDF_STATUS_E_NOSUPPORT;
597 }
598 
599 static inline QDF_STATUS
600 util_get_bvmlie_persta_partner_info(uint8_t *mlieseq,
601 				    qdf_size_t mlieseqlen,
602 				    struct mlo_partner_info *partner_info)
603 {
604 	return QDF_STATUS_E_NOSUPPORT;
605 }
606 
607 static inline QDF_STATUS
608 util_get_prvmlie_persta_link_id(uint8_t *mlieseq,
609 				qdf_size_t mlieseqlen,
610 				struct mlo_probereq_info *probereq_info)
611 {
612 	return QDF_STATUS_E_NOSUPPORT;
613 }
614 
615 static inline QDF_STATUS
616 util_get_prvmlie_mldid(uint8_t *mlieseq, qdf_size_t mlieseqlen,
617 		       bool *mldcapfound, uint8_t *mldcap)
618 {
619 	return QDF_STATUS_E_NOSUPPORT;
620 }
621 
622 static inline QDF_STATUS
623 util_get_rvmlie_mldmacaddr(uint8_t *mlieseq, qdf_size_t mlieseqlen,
624 			   struct qdf_mac_addr *mldmacaddr)
625 {
626 	return QDF_STATUS_E_NOSUPPORT;
627 }
628 
629 static inline QDF_STATUS
630 util_get_rvmlie_persta_link_info(uint8_t *mlieseq,
631 				 qdf_size_t mlieseqlen,
632 				 struct ml_rv_info *reconfig_info)
633 {
634 	return QDF_STATUS_E_NOSUPPORT;
635 }
636 #endif /* WLAN_FEATURE_11BE_MLO */
637 #endif /* _WLAN_UTILS_MLO_H_ */
638