xref: /wlan-dirver/qca-wifi-host-cmn/umac/mlo_mgr/inc/wlan_mlo_mgr_sta.h (revision 901120c066e139c7f8a2c8e4820561fdd83c67ef)
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 public file containing STA functionality
20  */
21 #ifndef _WLAN_MLO_MGR_STA_H_
22 #define _WLAN_MLO_MGR_STA_H_
23 
24 #include <wlan_cm_ucfg_api.h>
25 #include <wlan_objmgr_vdev_obj.h>
26 #include <wlan_mlo_mgr_cmn.h>
27 #ifdef WLAN_FEATURE_11BE_MLO
28 #include <wlan_mlo_mgr_public_structs.h>
29 
30 /**
31  * mlo_connect - Start the connection process
32  * @vdev: pointer to vdev
33  * @req: connection request
34  *
35  * Return: QDF_STATUS
36  */
37 QDF_STATUS mlo_connect(struct wlan_objmgr_vdev *vdev,
38 		       struct wlan_cm_connect_req *req);
39 
40 /**
41  * mlo_sta_link_connect_notify - Called by connection manager to notify the
42  * STA link connect is complete
43  * @vdev: pointer to vdev
44  * @mlo_ie: MLO information element
45  *
46  * Connection manager will notify the MLO manager when the link has started
47  * and MLO manager will start the subsequent connections, if necessary
48  *
49  * Return: none
50  */
51 void
52 mlo_sta_link_connect_notify(struct wlan_objmgr_vdev *vdev,
53 			    struct wlan_cm_connect_resp *rsp);
54 
55 /**
56  * mlo_disconnect - Start the disconnection process
57  * @vdev: pointer to vdev
58  * @source: source of the request (can be connect or disconnect request)
59  * @reason_code: reason for disconnect
60  * @bssid: BSSID
61  *
62  * Return: QDF_STATUS
63  */
64 QDF_STATUS mlo_disconnect(struct wlan_objmgr_vdev *vdev,
65 			  enum wlan_cm_source source,
66 			  enum wlan_reason_code reason_code,
67 			  struct qdf_mac_addr *bssid);
68 
69 /**
70  * mlo_sync_disconnect - Start the sync disconnection process
71  * @vdev: pointer to vdev
72  * @source: source of the request (can be connect or disconnect request)
73  * @reason_code: reason for disconnect
74  * @bssid: BSSID
75  *
76  * Return: QDF_STATUS
77  */
78 QDF_STATUS mlo_sync_disconnect(struct wlan_objmgr_vdev *vdev,
79 			       enum wlan_cm_source source,
80 			       enum wlan_reason_code reason_code,
81 			       struct qdf_mac_addr *bssid);
82 
83 /**
84  * mlo_sta_link_disconn_notify - Notifies that STA link disconnect completion
85  * @vdev: pointer to vdev
86  * @resp: disconnect resp
87  *
88  * Return: none
89  */
90 void mlo_sta_link_disconn_notify(struct wlan_objmgr_vdev *vdev,
91 				 struct wlan_cm_discon_rsp *resp);
92 
93 /**
94  * mlo_is_mld_sta - Check if MLD associated with the vdev is a station
95  * @vdev: pointer to vdev
96  *
97  * Return: true if MLD is a station, false otherwise
98  */
99 bool mlo_is_mld_sta(struct wlan_objmgr_vdev *vdev);
100 
101 /**
102  * ucfg_mlo_is_mld_disconnected - Check whether MLD is disconnected
103  * @vdev: pointer to vdev
104  *
105  * Return: true if mld is disconnected, false otherwise
106  */
107 bool ucfg_mlo_is_mld_disconnected(struct wlan_objmgr_vdev *vdev);
108 
109 #ifndef WLAN_FEATURE_11BE_MLO_ADV_FEATURE
110 /**
111  * ucfg_mlo_is_mld_connected - Check whether MLD is connected
112  * @vdev: pointer to vdev
113  *
114  * Return: true if mld is connected, false otherwise
115  */
116 bool ucfg_mlo_is_mld_connected(struct wlan_objmgr_vdev *vdev);
117 
118 /**
119  * ucfg_mlo_mld_clear_mlo_cap - Clear MLO cap for all vdevs in MLD
120  * @vdev: pointer to vdev
121  *
122  * Return: None
123  */
124 void ucfg_mlo_mld_clear_mlo_cap(struct wlan_objmgr_vdev *vdev);
125 #endif
126 
127 /**
128  * ucfg_mlo_get_assoc_link_vdev - API to get assoc link vdev
129  * @mlo_dev_ctx: mlo dev ctx
130  *
131  * Return: MLD assoc link vdev
132  */
133 struct wlan_objmgr_vdev *
134 ucfg_mlo_get_assoc_link_vdev(struct wlan_objmgr_vdev *vdev);
135 
136 /**
137  * wlan_mlo_get_assoc_link_vdev - API to get assoc link vdev
138  * @mlo_dev_ctx: mlo dev ctx
139  *
140  * Return: MLD assoc link vdev
141  */
142 struct wlan_objmgr_vdev *
143 wlan_mlo_get_assoc_link_vdev(struct wlan_objmgr_vdev *vdev);
144 
145 /**
146  * mlo_update_connected_links_bmap: update connected links bitmap
147  * @mlo_dev_ctx: mlo dev context ptr
148  * @ml_partner_info: ml parnter info ptr
149  *
150  * Return: none
151  */
152 void
153 mlo_update_connected_links_bmap(struct wlan_mlo_dev_context *mlo_dev_ctx,
154 				struct mlo_partner_info ml_parnter_info);
155 
156 /**
157  * mlo_clear_connected_links: clear connected links bitmap
158  * @vdev: vdev object
159  *
160  * Return: none
161  */
162 void mlo_clear_connected_links_bmap(struct wlan_objmgr_vdev *vdev);
163 
164 /**
165  * API to have operation on ml vdevs
166  */
167 typedef void (*mlo_vdev_op_handler)(struct wlan_objmgr_vdev *vdev,
168 				    void *arg);
169 
170 /**
171  * mlo_iterate_connected_vdev_list: Iterate on connected ML links
172  * @vdev: vdev object
173  * @handler: the handler will be called for each object in ML list
174  * @arg: argument to be passed to handler
175  *
176  * Return: none
177  */
178 static inline
179 void mlo_iterate_connected_vdev_list(struct wlan_objmgr_vdev *vdev,
180 				     mlo_vdev_op_handler handler,
181 				     void *arg)
182 {
183 	struct wlan_mlo_dev_context *mlo_dev_ctx = vdev->mlo_dev_ctx;
184 	struct wlan_mlo_sta *sta_ctx = NULL;
185 	uint8_t i = 0;
186 
187 	if (!mlo_dev_ctx || !(wlan_vdev_mlme_is_mlo_vdev(vdev)))
188 		return;
189 
190 	sta_ctx = mlo_dev_ctx->sta_ctx;
191 	if (!sta_ctx)
192 		return;
193 
194 	for (i =  0; i < WLAN_UMAC_MLO_MAX_VDEVS; i++) {
195 		if (!mlo_dev_ctx->wlan_vdev_list[i])
196 			continue;
197 		if (qdf_test_bit(i, sta_ctx->wlan_connected_links)) {
198 			if (handler)
199 				handler(mlo_dev_ctx->wlan_vdev_list[i], arg);
200 		}
201 	}
202 }
203 
204 /**
205  * call_handler_for_standalone_ap: Iterate on all standalone ML vdevs in
206  * ML AP context and call handler only for standalone AP
207  *
208  * @vdev: vdev object
209  * @handler: the handler will be called for each object in ML list
210  * @arg: argument to be passed to handler
211  *
212  * Return: none
213  */
214 static inline void
215 call_handler_for_standalone_ap(struct wlan_mlo_dev_context *ap_dev_ctx,
216 			       mlo_vdev_op_handler handler, void *arg)
217 {
218 	struct wlan_objmgr_vdev *ml_ap_vdev = NULL;
219 	int i;
220 
221 	for (i =  0; i < WLAN_UMAC_MLO_MAX_VDEVS; i++) {
222 		/* For each vdev in ML AP context, check if its PDEV has any
223 		 * STA. If it doesn't, call the handler for that particular
224 		 * VDEV.
225 		 */
226 		if (!ap_dev_ctx->wlan_vdev_list[i])
227 			continue;
228 		ml_ap_vdev = ap_dev_ctx->wlan_vdev_list[i];
229 		handler(ml_ap_vdev, arg);
230 	}
231 }
232 
233 /*
234  * mlo_iterate_ml_standalone_vdev_list: Iterate on all standalone ML vdevs in
235  * ML link
236  *
237  * @vdev: vdev object
238  * @handler: the handler will be called for each object in ML list
239  * @arg: argument to be passed to handler
240  *
241  * Return: none
242  */
243 static inline
244 void mlo_iterate_ml_standalone_vdev_list(struct wlan_objmgr_vdev *vdev,
245 					 mlo_vdev_op_handler handler,
246 					 void *arg)
247 {
248 	struct wlan_mlo_dev_context *mlo_dev_ctx = vdev->mlo_dev_ctx;
249 	struct wlan_mlo_sta *sta_ctx = NULL;
250 	uint8_t i = 0;
251 	struct wlan_objmgr_pdev *pdev = NULL;
252 	struct wlan_objmgr_vdev *vdev_temp = NULL;
253 	struct wlan_mlo_dev_context *ap_ml_ctx;
254 	qdf_list_t *vdev_list;
255 
256 	if (!mlo_dev_ctx || !(wlan_vdev_mlme_is_mlo_vdev(vdev)) || !handler)
257 		return;
258 
259 	sta_ctx = mlo_dev_ctx->sta_ctx;
260 	if (!sta_ctx)
261 		return;
262 
263 	/* If repeater is configured as dependent WDS repeater,
264 	 * bring up/bring down all the standalone AP vaps in it once all
265 	 * the other AP vaps present in the AP ML context are up/down.
266 	 */
267 
268 	for (i =  0; i < WLAN_UMAC_MLO_MAX_VDEVS; i++) {
269 		if (!mlo_dev_ctx->wlan_vdev_list[i])
270 			continue;
271 
272 		pdev = wlan_vdev_get_pdev(mlo_dev_ctx->wlan_vdev_list[i]);
273 		vdev_list = &pdev->pdev_objmgr.wlan_vdev_list;
274 		vdev_temp = wlan_pdev_vdev_list_peek_head(vdev_list);
275 		while (vdev_temp) {
276 			// Get all VDEVs of the STA vap from its PDEV
277 			if ((vdev_temp != vdev) &&
278 			    wlan_vdev_mlme_get_opmode(vdev_temp) ==
279 			    QDF_SAP_MODE) {
280 				ap_ml_ctx = vdev_temp->mlo_dev_ctx;
281 				if (!ap_ml_ctx)
282 					return;
283 
284 				call_handler_for_standalone_ap(ap_ml_ctx,
285 							       handler, arg);
286 			}
287 
288 			vdev_temp = wlan_vdev_get_next_vdev_of_pdev(
289 							vdev_list, vdev_temp);
290 		}
291 	}
292 }
293 
294 /**
295  * mlo_update_connect_req_links: update connect req links index
296  * @vdev: vdev object
297  * @value: set/clear the bit
298  *
299  * Return: none
300  */
301 static inline void
302 mlo_update_connect_req_links(struct wlan_objmgr_vdev *vdev, uint8_t value)
303 {
304 	struct wlan_mlo_dev_context *mlo_dev_ctx = vdev->mlo_dev_ctx;
305 	struct wlan_mlo_sta *sta_ctx = NULL;
306 	uint8_t i = 0;
307 
308 	if (!mlo_dev_ctx)
309 		return;
310 
311 	sta_ctx = mlo_dev_ctx->sta_ctx;
312 	if (!sta_ctx)
313 		return;
314 
315 	for (i = 0; i < WLAN_UMAC_MLO_MAX_VDEVS; i++) {
316 		if (!mlo_dev_ctx->wlan_vdev_list[i])
317 			continue;
318 
319 		if (vdev == mlo_dev_ctx->wlan_vdev_list[i]) {
320 			if (value)
321 				qdf_set_bit(i, sta_ctx->wlan_connect_req_links);
322 			else
323 				qdf_clear_bit(
324 					i, sta_ctx->wlan_connect_req_links);
325 		}
326 	}
327 }
328 
329 /**
330  * mlo_is_vdev_connect_req_link: API to check if vdev is in active connection
331  * @vdev: vdev object
332  *
333  * Return: true is vdev is participating in active connect else false
334  */
335 static inline bool
336 mlo_is_vdev_connect_req_link(struct wlan_objmgr_vdev *vdev)
337 {
338 	struct wlan_mlo_dev_context *mlo_dev_ctx = vdev->mlo_dev_ctx;
339 	struct wlan_mlo_sta *sta_ctx = NULL;
340 
341 	if (!mlo_dev_ctx)
342 		return false;
343 
344 	sta_ctx = mlo_dev_ctx->sta_ctx;
345 	if (!sta_ctx)
346 		return false;
347 
348 	if (qdf_test_bit(
349 		mlo_get_link_vdev_ix(vdev->mlo_dev_ctx, vdev),
350 		sta_ctx->wlan_connect_req_links))
351 		return true;
352 
353 	return false;
354 }
355 
356 /**
357  * mlo_clear_connect_req_links: clear connect req links bitmap
358  * @vdev: vdev object
359  *
360  * Return: none
361  */
362 static inline
363 void mlo_clear_connect_req_links_bmap(struct wlan_objmgr_vdev *vdev)
364 {
365 	struct wlan_mlo_dev_context *mlo_dev_ctx = vdev->mlo_dev_ctx;
366 	struct wlan_mlo_sta *sta_ctx = NULL;
367 
368 	if (!mlo_dev_ctx)
369 		return;
370 
371 	sta_ctx = mlo_dev_ctx->sta_ctx;
372 	if (!sta_ctx)
373 		return;
374 
375 	qdf_mem_zero(sta_ctx->wlan_connect_req_links,
376 		     sizeof(sta_ctx->wlan_connect_req_links));
377 }
378 
379 /**
380  * mlo_update_connected_links: update connected links index
381  * @vdev: vdev object
382  * @value: set/clear the bit
383  *
384  * Return: none
385  */
386 static inline void
387 mlo_update_connected_links(struct wlan_objmgr_vdev *vdev, uint8_t value)
388 {
389 	struct wlan_mlo_dev_context *mlo_dev_ctx = vdev->mlo_dev_ctx;
390 	struct wlan_mlo_sta *sta_ctx = NULL;
391 	uint8_t i = 0;
392 
393 	if (!mlo_dev_ctx)
394 		return;
395 
396 	sta_ctx = mlo_dev_ctx->sta_ctx;
397 	if (!sta_ctx)
398 		return;
399 
400 	for (i = 0; i < WLAN_UMAC_MLO_MAX_VDEVS; i++) {
401 		if (!mlo_dev_ctx->wlan_vdev_list[i])
402 			continue;
403 
404 		if (vdev == mlo_dev_ctx->wlan_vdev_list[i]) {
405 			if (value)
406 				qdf_set_bit(i, sta_ctx->wlan_connected_links);
407 			else
408 				qdf_clear_bit(i, sta_ctx->wlan_connected_links);
409 		}
410 	}
411 }
412 
413 #ifndef WLAN_FEATURE_11BE_MLO_ADV_FEATURE
414 /**
415  * mlo_get_ml_vdev_by_mac: get ml vdev from mac
416  * @vdev: vdev object
417  * @macaddr: mac of vdev to be returned
418  *
419  * Return: vdev object if found else NULL
420  */
421 struct wlan_objmgr_vdev *
422 mlo_get_ml_vdev_by_mac(struct wlan_objmgr_vdev *vdev,
423 		       struct qdf_mac_addr *macaddr);
424 #endif
425 
426 /**
427  * mlo_set_keys_saved: set mlo keys saved bool for vdev
428  * @vdev: vdev object
429  * @mac_address: peer mac address
430  * @value: bool true or false
431  * Return: none
432  */
433 void mlo_set_keys_saved(struct wlan_objmgr_vdev *vdev,
434 			struct qdf_mac_addr *mac_address, bool value);
435 
436 /**
437  * mlo_get_keys_saved: get if mlo keys are saved for vdev
438  * @vdev: vdev object
439  * @mac_address: peer mac address
440  * Return: boolean value true or false
441  */
442 bool mlo_get_keys_saved(struct wlan_objmgr_vdev *vdev, uint8_t *mac_address);
443 
444 /**
445  * mlo_get_chan_freq_by_bssid - Get channel freq by bssid
446  * @pdev: pdev pointer
447  * @bssid: link mac address
448  *
449  * Return: chan frequency
450  */
451 qdf_freq_t
452 mlo_get_chan_freq_by_bssid(struct wlan_objmgr_pdev *pdev,
453 			   struct qdf_mac_addr *bssid);
454 
455 /**
456  * mlo_get_assoc_rsp - Get Assoc response from mlo manager
457  * @vdev: vdev obj mgr
458  * @assoc_rsp_frame: association response frame ptr
459  *
460  * Return: none
461  */
462 void mlo_get_assoc_rsp(struct wlan_objmgr_vdev *vdev,
463 		       struct element_info *assoc_rsp_frame);
464 
465 /**
466  * mlo_sta_save_quiet_status - save quiet status for given link of mlo station
467  * @mlo_dev_ctx: mlo context
468  * @link_id: link id
469  * @quiet_status: True if quiet starts. False if quiet stops.
470  *
471  * Return: QDF_STATUS
472  */
473 QDF_STATUS mlo_sta_save_quiet_status(struct wlan_mlo_dev_context *mlo_dev_ctx,
474 				     uint8_t link_id,
475 				     bool quiet_status);
476 
477 /**
478  * mlo_is_sta_in_quiet_status - is the link of given mlo sta is in quiet status
479  * @mlo_dev_ctx: mlo context
480  * @link_id: link id
481  *
482  * Return: true if the link of given mlo sta is in quiet status
483  */
484 bool mlo_is_sta_in_quiet_status(struct wlan_mlo_dev_context *mlo_dev_ctx,
485 				uint8_t link_id);
486 
487 /**
488  * mlo_is_sta_inactivity_allowed_with_quiet() - Is link OK to force inactivity
489  *                                              based on current quiet status
490  *                                              of mlo connection
491  * @psoc: pointer to psoc
492  * @vdev_id_list: vdev id list
493  * @num_mlo: number of mlo vdev
494  * @mlo_idx: list of index of vdev_id_list if it is vdev id of mlo vdev
495  * @affected_links: number of links to be set inactivity
496  * @affected_list: list of vdev id to be set inactivity
497  *
498  * Return: true if any link not in mlo_vdev_list is not in quiet mode
499  */
500 bool mlo_is_sta_inactivity_allowed_with_quiet(struct wlan_objmgr_psoc *psoc,
501 					      uint8_t *vdev_id_list,
502 					      uint8_t num_mlo, uint8_t *mlo_idx,
503 					      uint8_t affected_links,
504 					      uint8_t *affected_list);
505 
506 /**
507  * mlo_is_sta_csa_synced - Is mlo sta csa parameters are synced or not
508  * @mlo_dev_ctx: mlo context
509  * @link_id: link id
510  *
511  * Return: true if mlo sta csa parameters of given link id is synced
512  */
513 bool mlo_is_sta_csa_synced(struct wlan_mlo_dev_context *mlo_dev_ctx,
514 			   uint8_t link_id);
515 
516 /**
517  * mlo_sta_csa_save_params - Save csa parameters for mlo station
518  * @mlo_dev_ctx: mlo context
519  * @link_id: link id
520  * @csa_param: csa parameters to be saved
521  *
522  * Return: QDF_STATUS
523  */
524 QDF_STATUS mlo_sta_csa_save_params(struct wlan_mlo_dev_context *mlo_dev_ctx,
525 				   uint8_t link_id,
526 				   struct csa_offload_params *csa_param);
527 
528 /**
529  * mlo_sta_up_active_notify - mlo sta up active notify
530  * @vdev: vdev obj mgr
531  *
532  * Return: QDF_STATUS
533  */
534 QDF_STATUS mlo_sta_up_active_notify(struct wlan_objmgr_vdev *vdev);
535 
536 /**
537  * mlo_is_sta_csa_param_handled - Is given csa_param handled or not
538  * @vdev: vdev obj mgr
539  * @csa_param: csa parameters to be checked
540  *
541  * Return: true if given csa parameters is handled
542  */
543 bool mlo_is_sta_csa_param_handled(struct wlan_objmgr_vdev *vdev,
544 				  struct csa_offload_params *csa_param);
545 
546 /**
547  * mlo_internal_disconnect_links - Internal disconnect for connection manager
548  * @vdev: vdev obj mgr
549  *
550  * Return: none
551  */
552 void mlo_internal_disconnect_links(struct wlan_objmgr_vdev *vdev);
553 
554 /**
555  * mlo_sta_get_vdev_list() - get mlo vdev list
556  * @vdev: vdev pointer
557  * @vdev_count: vdev count
558  * @wlan_vdev_list: vdev list
559  *
560  * Return: None
561  */
562 void mlo_sta_get_vdev_list(struct wlan_objmgr_vdev *vdev, uint16_t *vdev_count,
563 			   struct wlan_objmgr_vdev **wlan_vdev_list);
564 #else
565 static inline
566 QDF_STATUS mlo_connect(struct wlan_objmgr_vdev *vdev,
567 		       struct wlan_cm_connect_req *req)
568 {
569 	return wlan_cm_start_connect(vdev, req);
570 }
571 
572 static inline
573 void mlo_sta_link_connect_notify(struct wlan_objmgr_vdev *vdev,
574 				 struct wlan_cm_connect_resp *rsp)
575 { }
576 
577 static inline
578 QDF_STATUS mlo_disconnect(struct wlan_objmgr_vdev *vdev,
579 			  enum wlan_cm_source source,
580 			  enum wlan_reason_code reason_code,
581 			  struct qdf_mac_addr *bssid)
582 {
583 	QDF_STATUS status;
584 
585 	status = wlan_cm_disconnect(vdev, source,
586 				    reason_code,
587 				    bssid);
588 	return status;
589 }
590 
591 static inline
592 QDF_STATUS mlo_sync_disconnect(struct wlan_objmgr_vdev *vdev,
593 			       enum wlan_cm_source source,
594 			       enum wlan_reason_code reason_code,
595 			       struct qdf_mac_addr *bssid)
596 {
597 	return wlan_cm_disconnect_sync(vdev, CM_OSIF_DISCONNECT,
598 				       reason_code);
599 }
600 
601 static inline
602 void mlo_sta_link_disconn_notify(struct wlan_objmgr_vdev *vdev,
603 				 struct wlan_cm_discon_rsp *resp)
604 { }
605 
606 #ifndef WLAN_FEATURE_11BE_MLO_ADV_FEATURE
607 static inline
608 bool ucfg_mlo_is_mld_connected(struct wlan_objmgr_vdev *vdev)
609 {
610 	return true;
611 }
612 
613 static inline
614 bool ucfg_mlo_is_mld_disconnected(struct wlan_objmgr_vdev *vdev)
615 {
616 	return true;
617 }
618 #endif
619 
620 static inline
621 bool mlo_is_mld_sta(struct wlan_objmgr_vdev *vdev)
622 {
623 	return false;
624 }
625 
626 static inline
627 struct wlan_objmgr_vdev *
628 ucfg_mlo_get_assoc_link_vdev(struct wlan_objmgr_vdev *vdev)
629 {
630 	return vdev;
631 }
632 
633 static inline void
634 mlo_update_connect_req_links(struct wlan_objmgr_vdev *vdev, uint8_t value)
635 { }
636 
637 static inline void
638 mlo_update_connected_links_bmap(struct wlan_mlo_dev_context *mlo_dev_ctx,
639 				struct mlo_partner_info ml_parnter_info)
640 { }
641 
642 static inline bool
643 mlo_is_vdev_connect_req_link(struct wlan_objmgr_vdev *vdev)
644 {
645 	return true;
646 }
647 
648 static inline void
649 mlo_update_connected_links(struct wlan_objmgr_vdev *vdev, uint8_t value)
650 { }
651 
652 static inline void
653 mlo_clear_connect_req_links_bmap(struct wlan_objmgr_vdev *vdev)
654 { }
655 
656 static inline void
657 mlo_clear_connected_links_bmap(struct wlan_objmgr_vdev *vdev)
658 { }
659 
660 static inline struct wlan_objmgr_vdev *
661 mlo_get_ml_vdev_by_mac(struct wlan_objmgr_vdev *vdev,
662 		       struct qdf_mac_addr *macaddr)
663 {
664 	return vdev;
665 }
666 
667 static inline qdf_freq_t
668 mlo_get_chan_freq_by_bssid(struct wlan_objmgr_pdev *pdev,
669 			   struct qdf_mac_addr *bssid)
670 {
671 	return 0;
672 }
673 
674 static inline void
675 mlo_get_assoc_rsp(struct wlan_objmgr_vdev *vdev,
676 		  struct element_info *assoc_rsp_frame)
677 {
678 }
679 
680 static inline bool
681 mlo_is_sta_csa_param_handled(struct wlan_objmgr_vdev *vdev,
682 			     struct csa_offload_params *csa_param)
683 {
684 	return false;
685 }
686 
687 static inline void mlo_internal_disconnect_links(struct wlan_objmgr_vdev *vdev)
688 {
689 }
690 
691 static inline
692 void mlo_sta_get_vdev_list(struct wlan_objmgr_vdev *vdev,
693 			   uint16_t *vdev_count,
694 			   struct wlan_objmgr_vdev **wlan_vdev_list)
695 {
696 }
697 
698 static inline
699 void mlo_set_keys_saved(struct wlan_objmgr_vdev *vdev,
700 			struct qdf_mac_addr *mac_address, bool value)
701 {
702 }
703 
704 static inline
705 bool mlo_get_keys_saved(struct wlan_objmgr_vdev *vdev,
706 			uint8_t *mac_address)
707 {
708 	return false;
709 }
710 #endif
711 #endif
712