1 /* 2 * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved. 3 * 4 * Permission to use, copy, modify, and/or distribute this software for any 5 * purpose with or without fee is hereby granted, provided that the above 6 * copyright notice and this permission notice appear in all copies. 7 * 8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15 */ 16 17 /* 18 * DOC: contains MLO manager public file containing link switch functionality 19 */ 20 #ifndef _WLAN_MLO_MGR_LINK_SWITCH_H_ 21 #define _WLAN_MLO_MGR_LINK_SWITCH_H_ 22 23 #include <wlan_mlo_mgr_public_structs.h> 24 25 struct wlan_channel; 26 27 #define WLAN_MLO_LSWITCH_MAX_HISTORY 5 28 #ifndef WLAN_MAX_ML_BSS_LINKS 29 #define WLAN_MAX_ML_BSS_LINKS 1 30 #endif 31 32 /** 33 * enum wlan_mlo_link_switch_cnf_reason: Link Switch reject reason 34 * 35 * @MLO_LINK_SWITCH_CNF_REASON_BSS_PARAMS_CHANGED: Link's BSS params changed 36 * @MLO_LINK_SWITCH_CNF_REASON_CONCURRECNY_CONFLICT: Rejected because of 37 * Concurrency 38 * @MLO_LINK_SWITCH_CNF_REASON_HOST_INTERNAL_ERROR: Host internal error 39 * @MLO_LINK_SWITCH_CNF_REASON_MAX: Maximum reason for link switch rejection 40 */ 41 enum wlan_mlo_link_switch_cnf_reason { 42 MLO_LINK_SWITCH_CNF_REASON_BSS_PARAMS_CHANGED = 1, 43 MLO_LINK_SWITCH_CNF_REASON_CONCURRECNY_CONFLICT = 2, 44 MLO_LINK_SWITCH_CNF_REASON_HOST_INTERNAL_ERROR = 3, 45 MLO_LINK_SWITCH_CNF_REASON_MAX, 46 }; 47 48 /** 49 * enum wlan_mlo_link_switch_cnf_status: Link Switch Confirmation status 50 * 51 * @MLO_LINK_SWITCH_CNF_STATUS_ACCEPT: Link switch accepted 52 * @MLO_LINK_SWITCH_CNF_STATUS_REJECT: Rejected because link switch cnf reason 53 * @MLO_LINK_SWITCH_CNF_STATUS_MAX: Maximum reason for link status 54 */ 55 enum wlan_mlo_link_switch_cnf_status { 56 MLO_LINK_SWITCH_CNF_STATUS_ACCEPT = 0, 57 MLO_LINK_SWITCH_CNF_STATUS_REJECT = 1, 58 MLO_LINK_SWITCH_CNF_STATUS_MAX, 59 }; 60 61 /** 62 * struct wlan_mlo_link_switch_cnf: structure to hold link switch conf info 63 * 64 * @vdev_id: VDEV ID of link switch link 65 * @status: Link Switch Confirmation status 66 * @reason: Link Switch Reject reason 67 */ 68 struct wlan_mlo_link_switch_cnf { 69 uint32_t vdev_id; 70 enum wlan_mlo_link_switch_cnf_status status; 71 enum wlan_mlo_link_switch_cnf_reason reason; 72 }; 73 74 /** 75 * enum wlan_mlo_link_switch_reason- Reason for link switch 76 * 77 * @MLO_LINK_SWITCH_REASON_RSSI_CHANGE: Link switch reason is because of RSSI 78 * @MLO_LINK_SWITCH_REASON_LOW_QUALITY: Link switch reason is because of low 79 * quality 80 * @MLO_LINK_SWITCH_REASON_C2_CHANGE: Link switch reason is because of C2 Metric 81 * @MLO_LINK_SWITCH_REASON_HOST_FORCE: Link switch reason is because of host 82 * force active/inactive 83 * @MLO_LINK_SWITCH_REASON_T2LM: Link switch reason is because of T2LM 84 * @MLO_LINK_SWITCH_REASON_MAX: Link switch reason max 85 */ 86 enum wlan_mlo_link_switch_reason { 87 MLO_LINK_SWITCH_REASON_RSSI_CHANGE = 1, 88 MLO_LINK_SWITCH_REASON_LOW_QUALITY = 2, 89 MLO_LINK_SWITCH_REASON_C2_CHANGE = 3, 90 MLO_LINK_SWITCH_REASON_HOST_FORCE = 4, 91 MLO_LINK_SWITCH_REASON_T2LM = 5, 92 MLO_LINK_SWITCH_REASON_MAX, 93 }; 94 95 /* 96 * enum mlo_link_switch_req_state - Enum to maintain the current state of 97 * link switch request. 98 * @MLO_LINK_SWITCH_STATE_IDLE: The last link switch request is inactive 99 * @MLO_LINK_SWITCH_STATE_DISCONNECT_CURR_LINK: Current link disconnect 100 * in progress. 101 * @MLO_LINK_SWITCH_STATE_SET_MAC_ADDR: MAC address update in progress 102 * @MLO_LINK_SWITCH_STATE_CONNECT_NEW_LINK: New link connect in progress. 103 * @MLO_LINK_SWITCH_STATE_COMPLETE_SUCCESS: Link switch completed successfully 104 */ 105 enum mlo_link_switch_req_state { 106 MLO_LINK_SWITCH_STATE_IDLE, 107 MLO_LINK_SWITCH_STATE_DISCONNECT_CURR_LINK, 108 MLO_LINK_SWITCH_STATE_SET_MAC_ADDR, 109 MLO_LINK_SWITCH_STATE_CONNECT_NEW_LINK, 110 MLO_LINK_SWITCH_STATE_COMPLETE_SUCCESS, 111 }; 112 113 /** 114 * struct wlan_mlo_link_switch_req - Data Structure because of link switch 115 * request 116 * @restore_vdev_flag: VDEV Flag to be restored post link switch. 117 * @vdev_id: VDEV Id of the link which is under link switch 118 * @curr_ieee_link_id: Current link id of the ML link 119 * @new_ieee_link_id: Link id of the link to which going to link switched 120 * @peer_mld_addr: Peer MLD address 121 * @new_primary_freq: primary frequency of link switch link 122 * @new_phymode: Phy mode of link switch link 123 * @state: Current state of link switch 124 * @reason: Link switch reason 125 * @link_switch_ts: Link switch timestamp 126 */ 127 struct wlan_mlo_link_switch_req { 128 bool restore_vdev_flag; 129 uint8_t vdev_id; 130 uint8_t curr_ieee_link_id; 131 uint8_t new_ieee_link_id; 132 struct qdf_mac_addr peer_mld_addr; 133 uint32_t new_primary_freq; 134 uint32_t new_phymode; 135 enum mlo_link_switch_req_state state; 136 enum wlan_mlo_link_switch_reason reason; 137 qdf_time_t link_switch_ts; 138 }; 139 140 /** 141 * struct mlo_link_switch_stats - hold information regarding link switch stats 142 * @total_num_link_switch: Total number of link switch 143 * @req_reason: Reason of link switch received from FW 144 * @cnf_reason: Confirm reason sent to FW 145 * @req_ts: Link switch timestamp 146 * @lswitch_status: structure to hold link switch status 147 */ 148 struct mlo_link_switch_stats { 149 uint32_t total_num_link_switch; 150 struct { 151 enum wlan_mlo_link_switch_reason req_reason; 152 enum wlan_mlo_link_switch_cnf_reason cnf_reason; 153 qdf_time_t req_ts; 154 } lswitch_status[WLAN_MLO_LSWITCH_MAX_HISTORY]; 155 }; 156 157 /** 158 * struct mlo_link_switch_context - Link switch data structure. 159 * @links_info: Hold information regarding all the links of ml connection 160 * @last_req: Last link switch request received from FW 161 * @lswitch_stats: History of the link switch stats 162 * Includes both fail and success stats. 163 */ 164 struct mlo_link_switch_context { 165 struct mlo_link_info links_info[WLAN_MAX_ML_BSS_LINKS]; 166 struct wlan_mlo_link_switch_req last_req; 167 struct mlo_link_switch_stats lswitch_stats[MLO_LINK_SWITCH_CNF_STATUS_MAX]; 168 }; 169 170 /** 171 * mlo_mgr_update_link_info_mac_addr() - MLO mgr update link info mac address 172 * @vdev: Object manager vdev 173 * @mlo_mac_update: ML link mac addresses update. 174 * 175 * Update link mac addresses for the ML links 176 * Return: none 177 */ 178 void 179 mlo_mgr_update_link_info_mac_addr(struct wlan_objmgr_vdev *vdev, 180 struct wlan_mlo_link_mac_update *mlo_mac_update); 181 182 /** 183 * mlo_mgr_update_link_info_reset() - Reset link info of ml dev context 184 * @ml_dev: MLO device context 185 * 186 * Reset link info of ml links 187 * Return: QDF_STATUS 188 */ 189 void mlo_mgr_update_link_info_reset(struct wlan_mlo_dev_context *ml_dev); 190 191 /** 192 * mlo_mgr_roam_update_ap_link_info() - Update AP links information 193 * @vdev: Object Manager vdev 194 * @link_id: Link id of the AP MLD link 195 * @ap_link_addr: AP link addresses 196 * @channel: wlan channel information of the link 197 * 198 * Update AP link information for each link of AP MLD 199 * Return: void 200 */ 201 void mlo_mgr_roam_update_ap_link_info(struct wlan_objmgr_vdev *vdev, 202 uint8_t link_id, 203 uint8_t *ap_link_addr, 204 struct wlan_channel channel); 205 206 /** 207 * mlo_mgr_update_ap_link_info() - Update AP links information 208 * @vdev: Object Manager vdev 209 * @link_id: Link id of the AP MLD link 210 * @ap_link_addr: AP link addresses 211 * @channel: wlan channel information of the link 212 * 213 * Update AP link information for each link of AP MLD 214 * Return: void 215 */ 216 void mlo_mgr_update_ap_link_info(struct wlan_objmgr_vdev *vdev, uint8_t link_id, 217 uint8_t *ap_link_addr, 218 struct wlan_channel channel); 219 220 /** 221 * mlo_mgr_reset_ap_link_info() - Reset AP links information 222 * @vdev: Object Manager vdev 223 * 224 * Reset AP links information in MLD 225 */ 226 void mlo_mgr_reset_ap_link_info(struct wlan_objmgr_vdev *vdev); 227 228 /** 229 * mlo_mgr_update_ap_channel_info() - Update AP channel information 230 * @vdev: Object Manager vdev 231 * @link_id: Link id of the AP MLD link 232 * @ap_link_addr: AP link addresses 233 * @channel: wlan channel information of the link 234 * 235 * Update AP channel information for each link of AP MLD 236 * Return: void 237 */ 238 void mlo_mgr_update_ap_channel_info(struct wlan_objmgr_vdev *vdev, 239 uint8_t link_id, 240 uint8_t *ap_link_addr, 241 struct wlan_channel channel); 242 243 /** 244 * mlo_mgr_get_ap_link_by_link_id() - Get mlo link info from link id 245 * @vdev: Object Manager vdev 246 * @link_id: Link id of the AP MLD link 247 * 248 * Search for the @link_id in the array in link_ctx in mlo_dev_ctx. 249 * Returns the pointer of mlo_link_info element matching the @link_id, 250 * or else NULL. 251 * 252 * Return: Pointer of link info 253 */ 254 struct mlo_link_info* 255 mlo_mgr_get_ap_link_by_link_id(struct wlan_objmgr_vdev *vdev, int link_id); 256 257 /** 258 * mlo_mgr_get_ap_link() - Assoc mlo link info from link id 259 * @vdev: Object Manager vdev 260 * 261 * Get Assoc link info. 262 * 263 * Return: Pointer of link info 264 */ 265 struct mlo_link_info *mlo_mgr_get_ap_link(struct wlan_objmgr_vdev *vdev); 266 267 #ifdef WLAN_FEATURE_11BE_MLO_ADV_FEATURE 268 /** 269 * mlo_mgr_osif_update_connect_info() - Update connection info to OSIF 270 * layer on successful connection complete. 271 * @vdev: VDEV object manager. 272 * @link_id: IEEE protocol link id. 273 * 274 * The API will call OSIF connection update callback to update IEEE link id 275 * as part of connection to MLO capable BSS. This is specifically needed to 276 * make OSIF aware of all the links part of connection even about the links 277 * for which VDEV doesn't exist. 278 * 279 * Return: void 280 */ 281 void mlo_mgr_osif_update_connect_info(struct wlan_objmgr_vdev *vdev, 282 int32_t link_id); 283 284 /** 285 * mlo_mgr_link_switch_disconnect_done() - Notify MLO manager on link switch 286 * disconnect complete. 287 * @vdev: VDEV object manager 288 * @status: Status of disconnect 289 * 290 * The API to decide on next sequence of tasks based on status on disconnect 291 * request send as part of link switch. If the status is error, then abort 292 * link switch or else continue. 293 * 294 * Return: QDF_STATUS 295 */ 296 QDF_STATUS mlo_mgr_link_switch_disconnect_done(struct wlan_objmgr_vdev *vdev, 297 QDF_STATUS status); 298 299 /** 300 * mlo_mgr_link_switch_set_mac_addr_resp() - Handle response of set MAC addr 301 * for VDEV under going link switch. 302 * @vdev: VDEV object manager 303 * @resp_status: Status of MAC address set request. 304 * 305 * The function will handle the response for set MAC address request sent to FW 306 * as part of link switch. If the response is error, then abort the link switch 307 * and send the appropirate status to FW 308 * 309 * Return: QDF_STATUS 310 */ 311 QDF_STATUS mlo_mgr_link_switch_set_mac_addr_resp(struct wlan_objmgr_vdev *vdev, 312 uint8_t resp_status); 313 314 /** 315 * mlo_mgr_link_switch_start_connect() - Start link switch connect on new link 316 * @vdev: VDEV pointer. 317 * 318 * Call the API to initiate connection for link switch post successful set mac 319 * address on @vdev. 320 * 321 * Return:QDF_STATUS 322 */ 323 QDF_STATUS mlo_mgr_link_switch_start_connect(struct wlan_objmgr_vdev *vdev); 324 325 /** 326 * mlo_mgr_link_switch_connect_done() - Link switch connect done indication. 327 * @vdev: VDEV object manager 328 * @status: Status of connect request. 329 * 330 * The callback from connection manager with connect response. 331 * If the response is failure, don't change the state of link switch. 332 * If the response if success, set link switch state to 333 * MLO_LINK_SWITCH_STATE_COMPLETE_SUCCESS. 334 * Finally call remove link switch cmd from serialization. 335 * 336 * Return: void 337 */ 338 void mlo_mgr_link_switch_connect_done(struct wlan_objmgr_vdev *vdev, 339 QDF_STATUS status); 340 341 /** 342 * mlo_mgr_link_switch_init_state() - Set the current state of link switch 343 * to init state. 344 * @mlo_dev_ctx: MLO dev context 345 * 346 * Sets the current state of link switch to MLO_LINK_SWITCH_STATE_IDLE with 347 * MLO dev context lock held. 348 * 349 * Return: void 350 */ 351 void mlo_mgr_link_switch_init_state(struct wlan_mlo_dev_context *mlo_dev_ctx); 352 353 /** 354 * mlo_mgr_link_switch_trans_next_state() - Transition to next state based 355 * on current state. 356 * @mlo_dev_ctx: MLO dev context 357 * 358 * Move to next state in link switch process based on current state with 359 * MLO dev context lock held. 360 * 361 * Return: void 362 */ 363 void 364 mlo_mgr_link_switch_trans_next_state(struct wlan_mlo_dev_context *mlo_dev_ctx); 365 366 /** 367 * mlo_mgr_link_switch_get_curr_state() - Get the current state of link switch. 368 * @mlo_dev_ctx: MLO dev context. 369 * 370 * Get the current state of link switch with MLO dev context lock held. 371 * 372 * Return: void 373 */ 374 enum mlo_link_switch_req_state 375 mlo_mgr_link_switch_get_curr_state(struct wlan_mlo_dev_context *mlo_dev_ctx); 376 377 /** 378 * mlo_mgr_is_link_switch_in_progress() - Check in link ctx in MLO dev context 379 * if the last received link switch is in progress. 380 * @vdev: VDEV object manager 381 * 382 * The API is to be called for VDEV which has MLO dev context and link context 383 * initialized. Returns the value of 'is_in_progress' flag in last received 384 * link switch request. 385 * 386 * Return: bool 387 */ 388 bool mlo_mgr_is_link_switch_in_progress(struct wlan_objmgr_vdev *vdev); 389 390 /** 391 * mlo_mgr_link_switch_notification() - Notify MLO manager on start 392 * of link switch 393 * @vdev: VDEV object manager 394 * @lswitch_req: Link switch request params from FW 395 * 396 * The link switch notifier callback to MLO manager invoked before starting 397 * link switch disconnect 398 * 399 * Return: QDF_STATUS 400 */ 401 QDF_STATUS mlo_mgr_link_switch_notification(struct wlan_objmgr_vdev *vdev, 402 struct wlan_mlo_link_switch_req *lswitch_req); 403 404 /** 405 * mlo_mgr_is_link_switch_on_assoc_vdev() - API to query whether link switch 406 * is on-going on assoc VDEV. 407 * @vdev: VDEV object manager 408 * 409 * Return: bool 410 */ 411 bool mlo_mgr_is_link_switch_on_assoc_vdev(struct wlan_objmgr_vdev *vdev); 412 413 /** 414 * mlo_mgr_link_switch_get_assoc_vdev() - Get current link switch VDEV 415 * pointer if it is assoc VDEV. 416 * @vdev: VDEV object manager. 417 * 418 * If the current link switch VDEV is assoc VDEV, fetch the pointer of that VDEV 419 * 420 * Return: VDEV object manager pointer 421 */ 422 struct wlan_objmgr_vdev * 423 mlo_mgr_link_switch_get_assoc_vdev(struct wlan_objmgr_vdev *vdev); 424 425 /** 426 * mlo_mgr_ser_link_switch_cmd() - The API will serialize link switch 427 * command in serialization queue. 428 * @vdev: VDEV objmgr pointer 429 * @req: Link switch request parameters 430 * 431 * On receiving link switch request with valid parameters from FW, this 432 * API will serialize the link switch command to procced for link switch 433 * on @vdev once the command comes to active queue. 434 * 435 * Return: QDF_STATUS 436 */ 437 QDF_STATUS mlo_mgr_ser_link_switch_cmd(struct wlan_objmgr_vdev *vdev, 438 struct wlan_mlo_link_switch_req *req); 439 440 /** 441 * mlo_mgr_remove_link_switch_cmd() - The API will remove the link switch 442 * command from active serialization queue. 443 * @vdev: VDEV object manager 444 * 445 * Once link switch process on @vdev is completed either in success of failure 446 * case, the API removes the link switch command from serialization queue. 447 * 448 * Return: void 449 */ 450 void mlo_mgr_remove_link_switch_cmd(struct wlan_objmgr_vdev *vdev); 451 452 /** 453 * mlo_mgr_link_switch_validate_request() - Validate link switch request 454 * received from FW. 455 * @vdev: VDEV object manager 456 * @req: Request params from FW 457 * 458 * The API performs initial validation of link switch params received from FW 459 * before serializing the link switch cmd. If any of the params is invalid or 460 * the current status of MLO manager can't allow link switch, the API returns 461 * failure and link switch has to be terminated. 462 * 463 * Return: QDF_STATUS 464 */ 465 QDF_STATUS 466 mlo_mgr_link_switch_validate_request(struct wlan_objmgr_vdev *vdev, 467 struct wlan_mlo_link_switch_req *req); 468 469 /** 470 * mlo_mgr_link_switch_request_params() - Link switch request params from FW. 471 * @psoc: PSOC object manager 472 * @evt_params: Link switch params received from FW. 473 * 474 * The @params contain link switch request parameters received from FW as 475 * an indication to host to trigger link switch sequence on the specified 476 * VDEV. If the @params are not valid link switch will be terminated. 477 * 478 * Return: QDF_STATUS 479 */ 480 QDF_STATUS mlo_mgr_link_switch_request_params(struct wlan_objmgr_psoc *psoc, 481 void *evt_params); 482 /** 483 * mlo_mgr_link_switch_complete() - Link switch complete notification to FW 484 * @vdev: VDV object manager 485 * 486 * Notify the status of link switch to FW once the link switch sequence is 487 * completed. 488 * 489 * Return: QDF_STATUS; 490 */ 491 QDF_STATUS mlo_mgr_link_switch_complete(struct wlan_objmgr_vdev *vdev); 492 493 /** 494 * mlo_mgr_link_switch_init() - API to initialize link switch 495 * @ml_dev: MLO dev context 496 * 497 * Initializes the MLO link context in @ml_dev and allocates various 498 * buffers needed. 499 * 500 * Return: QDF_STATUS 501 */ 502 QDF_STATUS mlo_mgr_link_switch_init(struct wlan_mlo_dev_context *ml_dev); 503 504 /** 505 * mlo_mgr_link_switch_deinit() - API to de-initialize link switch 506 * @ml_dev: MLO dev context 507 * 508 * De-initialize the MLO link context in @ml_dev on and frees memory 509 * allocated as part of initialization. 510 * 511 * Return: QDF_STATUS 512 */ 513 QDF_STATUS mlo_mgr_link_switch_deinit(struct wlan_mlo_dev_context *ml_dev); 514 #else 515 static inline void 516 mlo_mgr_osif_update_connect_info(struct wlan_objmgr_vdev *vdev, int32_t link_id) 517 { 518 } 519 520 static inline QDF_STATUS 521 mlo_mgr_link_switch_disconnect_done(struct wlan_objmgr_vdev *vdev, 522 QDF_STATUS status) 523 { 524 return QDF_STATUS_SUCCESS; 525 } 526 527 static inline QDF_STATUS 528 mlo_mgr_link_switch_set_mac_addr_resp(struct wlan_objmgr_vdev *vdev, 529 uint8_t resp_status) 530 { 531 return QDF_STATUS_E_NOSUPPORT; 532 } 533 534 static inline QDF_STATUS 535 mlo_mgr_link_switch_start_connect(struct wlan_objmgr_vdev *vdev) 536 { 537 return QDF_STATUS_E_NOSUPPORT; 538 } 539 540 static inline void 541 mlo_mgr_link_switch_connect_done(struct wlan_objmgr_vdev *vdev, 542 QDF_STATUS status) 543 { 544 } 545 546 static inline QDF_STATUS 547 mlo_mgr_link_switch_deinit(struct wlan_mlo_dev_context *ml_dev) 548 { 549 return QDF_STATUS_SUCCESS; 550 } 551 552 static inline QDF_STATUS 553 mlo_mgr_link_switch_init(struct wlan_mlo_dev_context *ml_dev) 554 { 555 return QDF_STATUS_SUCCESS; 556 } 557 558 static inline void 559 mlo_mgr_link_switch_init_state(struct wlan_mlo_dev_context *mlo_dev_ctx) 560 { 561 } 562 563 static inline void 564 mlo_mgr_link_switch_trans_next_state(struct wlan_mlo_dev_context *mlo_dev_ctx) 565 { 566 } 567 568 static inline enum mlo_link_switch_req_state 569 mlo_mgr_link_switch_get_curr_state(struct wlan_mlo_dev_context *mlo_dev_ctx) 570 { 571 return MLO_LINK_SWITCH_STATE_IDLE; 572 } 573 574 static inline bool 575 mlo_mgr_is_link_switch_in_progress(struct wlan_objmgr_vdev *vdev) 576 { 577 return false; 578 } 579 580 static inline QDF_STATUS 581 mlo_mgr_link_switch_notification(struct wlan_objmgr_vdev *vdev, 582 struct wlan_mlo_link_switch_req *lswitch_req) 583 { 584 return QDF_STATUS_E_NOSUPPORT; 585 } 586 587 static inline bool 588 mlo_mgr_is_link_switch_on_assoc_vdev(struct wlan_objmgr_vdev *vdev) 589 { 590 return false; 591 } 592 593 static inline struct wlan_objmgr_vdev * 594 mlo_mgr_link_switch_get_assoc_vdev(struct wlan_objmgr_vdev *vdev) 595 { 596 return NULL; 597 } 598 599 static inline QDF_STATUS 600 mlo_mgr_ser_link_switch_cmd(struct wlan_objmgr_vdev *vdev, 601 struct wlan_mlo_link_switch_req *req) 602 { 603 return QDF_STATUS_E_NOSUPPORT; 604 } 605 606 static inline void 607 mlo_mgr_remove_link_switch_cmd(struct wlan_objmgr_vdev *vdev) 608 { 609 } 610 611 static inline QDF_STATUS 612 mlo_mgr_link_switch_validate_request(struct wlan_objmgr_vdev *vdev, 613 struct wlan_mlo_link_switch_req *req) 614 { 615 return QDF_STATUS_E_NOSUPPORT; 616 } 617 618 static inline QDF_STATUS 619 mlo_mgr_link_switch_request_params(struct wlan_objmgr_psoc *psoc, 620 void *evt_params) 621 { 622 return QDF_STATUS_E_NOSUPPORT; 623 } 624 625 static inline QDF_STATUS 626 mlo_mgr_link_switch_complete(struct wlan_objmgr_vdev *vdev) 627 { 628 return QDF_STATUS_E_NOSUPPORT; 629 } 630 #endif 631 #endif 632