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