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