xref: /wlan-driver/qcacld-3.0/core/hdd/inc/wlan_hdd_mlo.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2021, The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
4*5113495bSYour Name  *
5*5113495bSYour Name  * Permission to use, copy, modify, and/or distribute this software for any
6*5113495bSYour Name  * purpose with or without fee is hereby granted, provided that the above
7*5113495bSYour Name  * copyright notice and this permission notice appear in all copies.
8*5113495bSYour Name  *
9*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10*5113495bSYour Name  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11*5113495bSYour Name  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12*5113495bSYour Name  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13*5113495bSYour Name  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14*5113495bSYour Name  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15*5113495bSYour Name  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16*5113495bSYour Name  */
17*5113495bSYour Name 
18*5113495bSYour Name /**
19*5113495bSYour Name  * DOC: wlan_hdd_mlo.h
20*5113495bSYour Name  *
21*5113495bSYour Name  * WLAN Host Device Driver file for 802.11be (Extremely High Throughput)
22*5113495bSYour Name  * support.
23*5113495bSYour Name  *
24*5113495bSYour Name  */
25*5113495bSYour Name #if !defined(WLAN_HDD_MLO_H)
26*5113495bSYour Name #define WLAN_HDD_MLO_H
27*5113495bSYour Name #include <wlan_hdd_main.h>
28*5113495bSYour Name #include "wlan_osif_features.h"
29*5113495bSYour Name 
30*5113495bSYour Name /**
31*5113495bSYour Name  * struct hdd_adapter_create_param - adapter create parameters
32*5113495bSYour Name  * @only_wdev_register:  Register only the wdev not the netdev
33*5113495bSYour Name  * @associate_with_ml_adapter: Vdev points to the same netdev adapter
34*5113495bSYour Name  * @is_ml_adapter: is a ml adapter with associated netdev
35*5113495bSYour Name  * @is_add_virtual_iface: is netdev create request from add virtual interface
36*5113495bSYour Name  * @is_single_link: Is the adapter single link ML
37*5113495bSYour Name  * @num_sessions: No of session to create on start adapter
38*5113495bSYour Name  * @is_pre_cac_adapter: is a pre cac adapter with associated netdev
39*5113495bSYour Name  * @unused: Reserved spare bits
40*5113495bSYour Name  */
41*5113495bSYour Name struct hdd_adapter_create_param {
42*5113495bSYour Name 	uint32_t only_wdev_register:1,
43*5113495bSYour Name 		 associate_with_ml_adapter:1,
44*5113495bSYour Name 		 is_ml_adapter:1,
45*5113495bSYour Name 		 is_add_virtual_iface:1,
46*5113495bSYour Name 		 is_single_link:1,
47*5113495bSYour Name 		 num_sessions:4,
48*5113495bSYour Name 		 is_pre_cac_adapter:1,
49*5113495bSYour Name 		 unused:22;
50*5113495bSYour Name };
51*5113495bSYour Name 
52*5113495bSYour Name #ifdef WLAN_FEATURE_11BE_MLO
53*5113495bSYour Name #define MAX_SIMULTANEOUS_STA_ML_LINKS 1
54*5113495bSYour Name #define MAX_NUM_STA_ML_LINKS 3
55*5113495bSYour Name #endif
56*5113495bSYour Name 
57*5113495bSYour Name #if defined(WLAN_FEATURE_11BE_MLO) && defined(CFG80211_11BE_BASIC)
58*5113495bSYour Name #define hdd_adapter_is_ml_adapter(x)   ((x)->mlo_adapter_info.is_ml_adapter)
59*5113495bSYour Name 
60*5113495bSYour Name /* MLO_STATE_COMMANDS */
61*5113495bSYour Name #define FEATURE_ML_LINK_STATE_COMMANDS					\
62*5113495bSYour Name 	{								\
63*5113495bSYour Name 		.info.vendor_id = QCA_NL80211_VENDOR_ID,		\
64*5113495bSYour Name 		.info.subcmd = QCA_NL80211_VENDOR_SUBCMD_MLO_LINK_STATE,\
65*5113495bSYour Name 		.flags = WIPHY_VENDOR_CMD_NEED_WDEV |			\
66*5113495bSYour Name 			 WIPHY_VENDOR_CMD_NEED_NETDEV |			\
67*5113495bSYour Name 			 WIPHY_VENDOR_CMD_NEED_RUNNING,			\
68*5113495bSYour Name 		.doit = wlan_hdd_cfg80211_process_ml_link_state,	\
69*5113495bSYour Name 		vendor_command_policy(ml_link_state_request_policy,	\
70*5113495bSYour Name 				QCA_WLAN_VENDOR_ATTR_LINK_STATE_MAX)	\
71*5113495bSYour Name 	},
72*5113495bSYour Name 
73*5113495bSYour Name #ifndef WLAN_HDD_MULTI_VDEV_SINGLE_NDEV
74*5113495bSYour Name #define hdd_adapter_is_link_adapter(x) ((x)->mlo_adapter_info.is_link_adapter)
75*5113495bSYour Name #define hdd_adapter_is_sl_ml_adapter(x) \
76*5113495bSYour Name 			   ((x)->mlo_adapter_info.is_single_link_ml)
77*5113495bSYour Name #define hdd_adapter_is_associated_with_ml_adapter(x) \
78*5113495bSYour Name 			   ((x)->mlo_adapter_info.associate_with_ml_adapter)
79*5113495bSYour Name #define hdd_adapter_get_mlo_adapter_from_link(x) \
80*5113495bSYour Name 			   ((x)->mlo_adapter_info.ml_adapter)
81*5113495bSYour Name 
82*5113495bSYour Name #else
83*5113495bSYour Name #define hdd_adapter_is_link_adapter(x) (0)
84*5113495bSYour Name #define hdd_adapter_is_sl_ml_adapter(x) (0)
85*5113495bSYour Name #define hdd_adapter_is_associated_with_ml_adapter(x) (0)
86*5113495bSYour Name #define hdd_adapter_get_mlo_adapter_from_link(x) (NULL)
87*5113495bSYour Name #endif /* WLAN_HDD_MULTI_VDEV_SINGLE_NDEV */
88*5113495bSYour Name #else
89*5113495bSYour Name #define hdd_adapter_is_link_adapter(x) (0)
90*5113495bSYour Name #define hdd_adapter_is_ml_adapter(x)   (0)
91*5113495bSYour Name #define hdd_adapter_is_sl_ml_adapter(x) (0)
92*5113495bSYour Name #define hdd_adapter_is_associated_with_ml_adapter(x) (0)
93*5113495bSYour Name #define hdd_adapter_get_mlo_adapter_from_link(x) (NULL)
94*5113495bSYour Name #endif /* WLAN_FEATURE_11BE_MLO && CFG80211_11BE_BASIC */
95*5113495bSYour Name 
96*5113495bSYour Name #if defined(WLAN_FEATURE_11BE_MLO) && defined(CFG80211_11BE_BASIC)
97*5113495bSYour Name #ifndef WLAN_HDD_MULTI_VDEV_SINGLE_NDEV
98*5113495bSYour Name /**
99*5113495bSYour Name  * struct hdd_mlo_adapter_info - Mlo specific adapter information
100*5113495bSYour Name  * @is_ml_adapter: Whether this is the main ml adaper attached to netdev
101*5113495bSYour Name  * @is_link_adapter: Whether this a link adapter without netdev
102*5113495bSYour Name  * @associate_with_ml_adapter: adapter which shares the vdev object with the ml
103*5113495bSYour Name  * adapter
104*5113495bSYour Name  * @num_of_vdev_links: Num of vdevs/links part of the association
105*5113495bSYour Name  * @is_single_link_ml: Is the adapter a single link ML adapter
106*5113495bSYour Name  * @unused: Reserved spare bits
107*5113495bSYour Name  * @ml_adapter: ML adapter backpointer
108*5113495bSYour Name  * @link_adapter: backpointers to link adapters part of association
109*5113495bSYour Name  */
110*5113495bSYour Name struct hdd_mlo_adapter_info {
111*5113495bSYour Name 	uint32_t is_ml_adapter:1,
112*5113495bSYour Name 		 is_link_adapter:1,
113*5113495bSYour Name 		 associate_with_ml_adapter:1,
114*5113495bSYour Name 		 num_of_vdev_links:2,
115*5113495bSYour Name 		 is_single_link_ml:1,
116*5113495bSYour Name 		 unused:26;
117*5113495bSYour Name 	struct hdd_adapter *ml_adapter;
118*5113495bSYour Name 	struct hdd_adapter *link_adapter[WLAN_MAX_MLD];
119*5113495bSYour Name };
120*5113495bSYour Name #else
121*5113495bSYour Name struct hdd_mlo_adapter_info {
122*5113495bSYour Name 	uint32_t is_ml_adapter:1,
123*5113495bSYour Name 		 unused:31;
124*5113495bSYour Name };
125*5113495bSYour Name #endif
126*5113495bSYour Name #endif
127*5113495bSYour Name 
128*5113495bSYour Name #if defined(WLAN_FEATURE_11BE_MLO) && defined(CFG80211_11BE_BASIC) && \
129*5113495bSYour Name 	!defined(WLAN_HDD_MULTI_VDEV_SINGLE_NDEV)
130*5113495bSYour Name /**
131*5113495bSYour Name  * hdd_register_wdev() - Function to register only wdev
132*5113495bSYour Name  * @sta_adapter : Station adapter linked with netdevice
133*5113495bSYour Name  * @link_adapter: Link adapter
134*5113495bSYour Name  * @adapter_params: Adapter params
135*5113495bSYour Name  *
136*5113495bSYour Name  * Function to register only the wdev not the netdev
137*5113495bSYour Name  * Return: none
138*5113495bSYour Name  */
139*5113495bSYour Name void hdd_register_wdev(struct hdd_adapter *sta_adapter,
140*5113495bSYour Name 		       struct hdd_adapter *link_adapter,
141*5113495bSYour Name 		       struct hdd_adapter_create_param *adapter_params);
142*5113495bSYour Name /**
143*5113495bSYour Name  * hdd_wlan_unregister_mlo_interfaces() - Function to unregister mlo
144*5113495bSYour Name  * interfaces
145*5113495bSYour Name  * @adapter: Link adapter
146*5113495bSYour Name  * @rtnl_held: RTNL held or not
147*5113495bSYour Name  *
148*5113495bSYour Name  * Function to unregister only the link adapter/wdev.
149*5113495bSYour Name  * Return: none
150*5113495bSYour Name  */
151*5113495bSYour Name QDF_STATUS hdd_wlan_unregister_mlo_interfaces(struct hdd_adapter *adapter,
152*5113495bSYour Name 					      bool rtnl_held);
153*5113495bSYour Name /**
154*5113495bSYour Name  * hdd_wlan_register_mlo_interfaces() - Function to register mlo wdev interfaces
155*5113495bSYour Name  * @hdd_ctx: hdd context
156*5113495bSYour Name  *
157*5113495bSYour Name  * Function to register mlo wdev interfaces.
158*5113495bSYour Name  * Return: none
159*5113495bSYour Name  */
160*5113495bSYour Name void hdd_wlan_register_mlo_interfaces(struct hdd_context *hdd_ctx);
161*5113495bSYour Name 
162*5113495bSYour Name /**
163*5113495bSYour Name  * hdd_get_assoc_link_adapter() - get assoc link adapter
164*5113495bSYour Name  * @ml_adapter: ML adapter
165*5113495bSYour Name  *
166*5113495bSYour Name  * This function returns assoc link adapter.
167*5113495bSYour Name  * For single link ML adapter, function returns
168*5113495bSYour Name  * same adapter pointer.
169*5113495bSYour Name  *
170*5113495bSYour Name  * Return: adapter or NULL
171*5113495bSYour Name  */
172*5113495bSYour Name struct hdd_adapter *hdd_get_assoc_link_adapter(struct hdd_adapter *ml_adapter);
173*5113495bSYour Name 
174*5113495bSYour Name /**
175*5113495bSYour Name  * hdd_adapter_set_sl_ml_adapter() - Set adapter as sl ml adapter
176*5113495bSYour Name  * @adapter: HDD adapter
177*5113495bSYour Name  *
178*5113495bSYour Name  * This function sets adapter as single link ML adapter
179*5113495bSYour Name  * Return: None
180*5113495bSYour Name  */
181*5113495bSYour Name void hdd_adapter_set_sl_ml_adapter(struct hdd_adapter *adapter);
182*5113495bSYour Name 
183*5113495bSYour Name /**
184*5113495bSYour Name  * hdd_adapter_clear_sl_ml_adapter() - Set adapter as sl ml adapter
185*5113495bSYour Name  * @adapter: HDD adapter
186*5113495bSYour Name  *
187*5113495bSYour Name  * This function clears adapter single link ML adapter flag
188*5113495bSYour Name  * Return: None
189*5113495bSYour Name  */
190*5113495bSYour Name void hdd_adapter_clear_sl_ml_adapter(struct hdd_adapter *adapter);
191*5113495bSYour Name 
192*5113495bSYour Name /**
193*5113495bSYour Name  * hdd_get_ml_adapter() - get an ml adapter
194*5113495bSYour Name  * @hdd_ctx: HDD context
195*5113495bSYour Name  *
196*5113495bSYour Name  * This function returns ml adapter from adapter list
197*5113495bSYour Name  * Return: adapter or NULL
198*5113495bSYour Name  */
199*5113495bSYour Name struct hdd_adapter *hdd_get_ml_adapter(struct hdd_context *hdd_ctx);
200*5113495bSYour Name 
201*5113495bSYour Name #else
202*5113495bSYour Name static inline
hdd_wlan_unregister_mlo_interfaces(struct hdd_adapter * adapter,bool rtnl_held)203*5113495bSYour Name QDF_STATUS hdd_wlan_unregister_mlo_interfaces(struct hdd_adapter *adapter,
204*5113495bSYour Name 					      bool rtnl_held)
205*5113495bSYour Name {
206*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
207*5113495bSYour Name }
208*5113495bSYour Name 
209*5113495bSYour Name static inline
hdd_wlan_register_mlo_interfaces(struct hdd_context * hdd_ctx)210*5113495bSYour Name void hdd_wlan_register_mlo_interfaces(struct hdd_context *hdd_ctx)
211*5113495bSYour Name {
212*5113495bSYour Name }
213*5113495bSYour Name 
214*5113495bSYour Name static inline
hdd_register_wdev(struct hdd_adapter * sta_adapter,struct hdd_adapter * link_adapter,struct hdd_adapter_create_param * adapter_params)215*5113495bSYour Name void hdd_register_wdev(struct hdd_adapter *sta_adapter,
216*5113495bSYour Name 		       struct hdd_adapter *link_adapter,
217*5113495bSYour Name 		       struct hdd_adapter_create_param *adapter_params)
218*5113495bSYour Name {
219*5113495bSYour Name }
220*5113495bSYour Name 
221*5113495bSYour Name static inline
hdd_get_assoc_link_adapter(struct hdd_adapter * ml_adapter)222*5113495bSYour Name struct hdd_adapter *hdd_get_assoc_link_adapter(struct hdd_adapter *ml_adapter)
223*5113495bSYour Name {
224*5113495bSYour Name 	return NULL;
225*5113495bSYour Name }
226*5113495bSYour Name 
227*5113495bSYour Name static inline void
hdd_adapter_set_sl_ml_adapter(struct hdd_adapter * adapter)228*5113495bSYour Name hdd_adapter_set_sl_ml_adapter(struct hdd_adapter *adapter)
229*5113495bSYour Name {
230*5113495bSYour Name }
231*5113495bSYour Name 
232*5113495bSYour Name static inline void
hdd_adapter_clear_sl_ml_adapter(struct hdd_adapter * adapter)233*5113495bSYour Name hdd_adapter_clear_sl_ml_adapter(struct hdd_adapter *adapter)
234*5113495bSYour Name {
235*5113495bSYour Name }
236*5113495bSYour Name 
237*5113495bSYour Name static inline
hdd_get_ml_adapter(struct hdd_context * hdd_ctx)238*5113495bSYour Name struct hdd_adapter *hdd_get_ml_adapter(struct hdd_context *hdd_ctx)
239*5113495bSYour Name {
240*5113495bSYour Name 	return NULL;
241*5113495bSYour Name }
242*5113495bSYour Name #endif
243*5113495bSYour Name 
244*5113495bSYour Name #if defined(WLAN_FEATURE_11BE_MLO) && defined(CFG80211_11BE_BASIC)
245*5113495bSYour Name /**
246*5113495bSYour Name  * hdd_adapter_set_ml_adapter() - set adapter as ml adapter
247*5113495bSYour Name  * @adapter: HDD adapter
248*5113495bSYour Name  *
249*5113495bSYour Name  * This function sets adapter as ml adapter
250*5113495bSYour Name  * Return: None
251*5113495bSYour Name  */
252*5113495bSYour Name void hdd_adapter_set_ml_adapter(struct hdd_adapter *adapter);
253*5113495bSYour Name 
254*5113495bSYour Name /**
255*5113495bSYour Name  * hdd_adapter_link_switch_notification() - Get HDD notification on link switch
256*5113495bSYour Name  * start.
257*5113495bSYour Name  * @vdev: VDEV on which link switch will happen
258*5113495bSYour Name  * @non_trans_vdev_id: VDEV not part of link switch.
259*5113495bSYour Name  *
260*5113495bSYour Name  * Return: QDF_STATUS.
261*5113495bSYour Name  */
262*5113495bSYour Name QDF_STATUS hdd_adapter_link_switch_notification(struct wlan_objmgr_vdev *vdev,
263*5113495bSYour Name 						uint8_t non_trans_vdev_id);
264*5113495bSYour Name 
265*5113495bSYour Name /**
266*5113495bSYour Name  * hdd_mlo_t2lm_register_callback() - Register T2LM callback
267*5113495bSYour Name  * @vdev: Pointer to vdev
268*5113495bSYour Name  *
269*5113495bSYour Name  * Return: None
270*5113495bSYour Name  */
271*5113495bSYour Name void hdd_mlo_t2lm_register_callback(struct wlan_objmgr_vdev *vdev);
272*5113495bSYour Name 
273*5113495bSYour Name /**
274*5113495bSYour Name  * hdd_mlo_t2lm_unregister_callback() - Unregister T2LM callback
275*5113495bSYour Name  * @vdev: Pointer to vdev
276*5113495bSYour Name  *
277*5113495bSYour Name  * Return: None
278*5113495bSYour Name  */
279*5113495bSYour Name void hdd_mlo_t2lm_unregister_callback(struct wlan_objmgr_vdev *vdev);
280*5113495bSYour Name 
281*5113495bSYour Name /**
282*5113495bSYour Name  * wlan_handle_mlo_link_state_operation() - mlo link state operation
283*5113495bSYour Name  * @adapter: HDD adapter
284*5113495bSYour Name  * @wiphy: wiphy pointer
285*5113495bSYour Name  * @vdev: vdev handler
286*5113495bSYour Name  * @hdd_ctx: hdd context
287*5113495bSYour Name  * @data: pointer to incoming NL vendor data
288*5113495bSYour Name  * @data_len: length of @data
289*5113495bSYour Name  *
290*5113495bSYour Name  * Based on the data get or set the mlo link state
291*5113495bSYour Name  *
292*5113495bSYour Name  * Return: 0 on success and error number otherwise.
293*5113495bSYour Name  */
294*5113495bSYour Name int wlan_handle_mlo_link_state_operation(struct hdd_adapter *adapter,
295*5113495bSYour Name 					 struct wiphy *wiphy,
296*5113495bSYour Name 					 struct wlan_objmgr_vdev *vdev,
297*5113495bSYour Name 					 struct hdd_context *hdd_ctx,
298*5113495bSYour Name 					 const void *data, int data_len);
299*5113495bSYour Name 
300*5113495bSYour Name extern const struct nla_policy
301*5113495bSYour Name ml_link_state_request_policy[QCA_WLAN_VENDOR_ATTR_LINK_STATE_MAX + 1];
302*5113495bSYour Name 
303*5113495bSYour Name /**
304*5113495bSYour Name  * wlan_hdd_send_t2lm_event() - Send t2lm info to userspace
305*5113495bSYour Name  * @vdev: vdev handler
306*5113495bSYour Name  * @t2lm: tid to link mapping info
307*5113495bSYour Name  *
308*5113495bSYour Name  * This function is called when driver needs to send vendor specific
309*5113495bSYour Name  * t2lm info to userspace
310*5113495bSYour Name  */
311*5113495bSYour Name QDF_STATUS wlan_hdd_send_t2lm_event(struct wlan_objmgr_vdev *vdev,
312*5113495bSYour Name 				    struct wlan_t2lm_info *t2lm);
313*5113495bSYour Name 
314*5113495bSYour Name /**
315*5113495bSYour Name  * wlan_hdd_cfg80211_process_ml_link_state() - process ml link state
316*5113495bSYour Name  * @wiphy: wiphy pointer
317*5113495bSYour Name  * @wdev: pointer to struct wireless_dev
318*5113495bSYour Name  * @data: pointer to incoming NL vendor data
319*5113495bSYour Name  * @data_len: length of @data
320*5113495bSYour Name  *
321*5113495bSYour Name  * Set (or) get the ml link state.
322*5113495bSYour Name  *
323*5113495bSYour Name  * Return:  0 on success; error number otherwise.
324*5113495bSYour Name  */
325*5113495bSYour Name int wlan_hdd_cfg80211_process_ml_link_state(struct wiphy *wiphy,
326*5113495bSYour Name 					    struct wireless_dev *wdev,
327*5113495bSYour Name 					    const void *data, int data_len);
328*5113495bSYour Name /**
329*5113495bSYour Name  * hdd_update_link_state_cached_timestamp() - update link state cached timestamp
330*5113495bSYour Name  * @adapter: HDD adapter
331*5113495bSYour Name  *
332*5113495bSYour Name  * Return: none
333*5113495bSYour Name  */
334*5113495bSYour Name void hdd_update_link_state_cached_timestamp(struct hdd_adapter *adapter);
335*5113495bSYour Name 
336*5113495bSYour Name /**
337*5113495bSYour Name  * hdd_derive_link_address_from_mld() - Function to derive link address from
338*5113495bSYour Name  * MLD address which is passed as input argument.
339*5113495bSYour Name  * @psoc: PSOC object manager
340*5113495bSYour Name  * @mld_addr: Input MLD address
341*5113495bSYour Name  * @link_addr_list: Start index of array to hold derived MAC addresses
342*5113495bSYour Name  * @max_idx: Number of addresses to derive
343*5113495bSYour Name  *
344*5113495bSYour Name  * The API will generate link addresses from the input MLD address and saves
345*5113495bSYour Name  * each link address as an array in @link_addr_list.
346*5113495bSYour Name  *
347*5113495bSYour Name  * If CFG_MLO_SAME_LINK_MLD_ADDR is enabled, then API will not derive first
348*5113495bSYour Name  * link address and will use MLD address in that place.
349*5113495bSYour Name  *
350*5113495bSYour Name  * Return: QDF_STATUS
351*5113495bSYour Name  */
352*5113495bSYour Name QDF_STATUS hdd_derive_link_address_from_mld(struct wlan_objmgr_psoc *psoc,
353*5113495bSYour Name 					    struct qdf_mac_addr *mld_addr,
354*5113495bSYour Name 					    struct qdf_mac_addr *link_addr_list,
355*5113495bSYour Name 					    uint8_t max_idx);
356*5113495bSYour Name 
357*5113495bSYour Name #ifdef WLAN_HDD_MULTI_VDEV_SINGLE_NDEV
358*5113495bSYour Name /**
359*5113495bSYour Name  * hdd_adapter_restore_link_vdev_map() - Change the VDEV to link info mapping
360*5113495bSYour Name  * in adapter.
361*5113495bSYour Name  * @adapter: HDD adapter pointer
362*5113495bSYour Name  * @same_vdev_mac_map: Maintain VDEV to MAC address mapping during the restore.
363*5113495bSYour Name  *
364*5113495bSYour Name  * This API restores the VDEV to HDD link info mapping to its initial order
365*5113495bSYour Name  * which could have got remapped in the process of link switch. If
366*5113495bSYour Name  * @same_vdev_mac_map is set to %true then the MAC address to VDEV mapping is
367*5113495bSYour Name  * preserved.
368*5113495bSYour Name  *
369*5113495bSYour Name  * Returns: %true if any mapping changes or %false otherwise.
370*5113495bSYour Name  */
371*5113495bSYour Name bool hdd_adapter_restore_link_vdev_map(struct hdd_adapter *adapter,
372*5113495bSYour Name 				       bool same_vdev_mac_map);
373*5113495bSYour Name 
374*5113495bSYour Name /**
375*5113495bSYour Name  * hdd_mlo_mgr_register_osif_ops() - Register OSIF ops with global MLO manager
376*5113495bSYour Name  * for callback to notify.
377*5113495bSYour Name  *
378*5113495bSYour Name  * The @ops contain callback functions which are triggered to update OSIF about
379*5113495bSYour Name  * necessary events from MLO manager.
380*5113495bSYour Name  *
381*5113495bSYour Name  * Return: QDF_STATUS
382*5113495bSYour Name  */
383*5113495bSYour Name QDF_STATUS hdd_mlo_mgr_register_osif_ops(void);
384*5113495bSYour Name 
385*5113495bSYour Name /**
386*5113495bSYour Name  * hdd_mlo_mgr_unregister_osif_ops() - Deregister OSIF ops with
387*5113495bSYour Name  * global MLO manager
388*5113495bSYour Name  *
389*5113495bSYour Name  * Deregister the calbacks registered with global MLO manager for OSIF
390*5113495bSYour Name  *
391*5113495bSYour Name  * Return: QDF_STATUS
392*5113495bSYour Name  */
393*5113495bSYour Name QDF_STATUS hdd_mlo_mgr_unregister_osif_ops(void);
394*5113495bSYour Name #else
395*5113495bSYour Name static inline bool
hdd_adapter_restore_link_vdev_map(struct hdd_adapter * adapter,bool same_vdev_mac_map)396*5113495bSYour Name hdd_adapter_restore_link_vdev_map(struct hdd_adapter *adapter,
397*5113495bSYour Name 				  bool same_vdev_mac_map)
398*5113495bSYour Name {
399*5113495bSYour Name 	return false;
400*5113495bSYour Name }
401*5113495bSYour Name 
hdd_mlo_mgr_register_osif_ops(void)402*5113495bSYour Name static inline QDF_STATUS hdd_mlo_mgr_register_osif_ops(void)
403*5113495bSYour Name {
404*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
405*5113495bSYour Name }
406*5113495bSYour Name 
hdd_mlo_mgr_unregister_osif_ops(void)407*5113495bSYour Name static inline QDF_STATUS hdd_mlo_mgr_unregister_osif_ops(void)
408*5113495bSYour Name {
409*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
410*5113495bSYour Name }
411*5113495bSYour Name #endif
412*5113495bSYour Name #else
413*5113495bSYour Name static inline void
hdd_adapter_set_ml_adapter(struct hdd_adapter * adapter)414*5113495bSYour Name hdd_adapter_set_ml_adapter(struct hdd_adapter *adapter)
415*5113495bSYour Name {
416*5113495bSYour Name }
417*5113495bSYour Name 
hdd_mlo_mgr_register_osif_ops(void)418*5113495bSYour Name static inline QDF_STATUS hdd_mlo_mgr_register_osif_ops(void)
419*5113495bSYour Name {
420*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
421*5113495bSYour Name }
422*5113495bSYour Name 
hdd_mlo_mgr_unregister_osif_ops(void)423*5113495bSYour Name static inline QDF_STATUS hdd_mlo_mgr_unregister_osif_ops(void)
424*5113495bSYour Name {
425*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
426*5113495bSYour Name }
427*5113495bSYour Name 
428*5113495bSYour Name static inline
hdd_mlo_t2lm_register_callback(struct wlan_objmgr_vdev * vdev)429*5113495bSYour Name void hdd_mlo_t2lm_register_callback(struct wlan_objmgr_vdev *vdev)
430*5113495bSYour Name {
431*5113495bSYour Name }
432*5113495bSYour Name 
433*5113495bSYour Name static inline
hdd_mlo_t2lm_unregister_callback(struct wlan_objmgr_vdev * vdev)434*5113495bSYour Name void hdd_mlo_t2lm_unregister_callback(struct wlan_objmgr_vdev *vdev)
435*5113495bSYour Name {
436*5113495bSYour Name }
437*5113495bSYour Name 
438*5113495bSYour Name static inline int
wlan_handle_mlo_link_state_operation(struct hdd_adapter * adapter,struct wiphy * wiphy,struct wlan_objmgr_vdev * vdev,struct hdd_context * hdd_ctx,const void * data,int data_len)439*5113495bSYour Name wlan_handle_mlo_link_state_operation(struct hdd_adapter *adapter,
440*5113495bSYour Name 				     struct wiphy *wiphy,
441*5113495bSYour Name 				     struct wlan_objmgr_vdev *vdev,
442*5113495bSYour Name 				     struct hdd_context *hdd_ctx,
443*5113495bSYour Name 				     const void *data, int data_len)
444*5113495bSYour Name {
445*5113495bSYour Name 	return 0;
446*5113495bSYour Name }
447*5113495bSYour Name 
448*5113495bSYour Name static inline
wlan_hdd_cfg80211_process_ml_link_state(struct wiphy * wiphy,struct wireless_dev * wdev,const void * data,int data_len)449*5113495bSYour Name int wlan_hdd_cfg80211_process_ml_link_state(struct wiphy *wiphy,
450*5113495bSYour Name 					    struct wireless_dev *wdev,
451*5113495bSYour Name 					    const void *data, int data_len)
452*5113495bSYour Name {
453*5113495bSYour Name 	return -ENOTSUPP;
454*5113495bSYour Name }
455*5113495bSYour Name 
456*5113495bSYour Name static inline
hdd_derive_link_address_from_mld(struct wlan_objmgr_psoc * psoc,struct qdf_mac_addr * mld_addr,struct qdf_mac_addr * link_addr_list,uint8_t max_idx)457*5113495bSYour Name QDF_STATUS hdd_derive_link_address_from_mld(struct wlan_objmgr_psoc *psoc,
458*5113495bSYour Name 					    struct qdf_mac_addr *mld_addr,
459*5113495bSYour Name 					    struct qdf_mac_addr *link_addr_list,
460*5113495bSYour Name 					    uint8_t max_idx)
461*5113495bSYour Name {
462*5113495bSYour Name 	return QDF_STATUS_E_NOSUPPORT;
463*5113495bSYour Name }
464*5113495bSYour Name 
465*5113495bSYour Name static inline
wlan_hdd_send_t2lm_event(struct wlan_objmgr_vdev * vdev,struct wlan_t2lm_info * t2lm)466*5113495bSYour Name QDF_STATUS wlan_hdd_send_t2lm_event(struct wlan_objmgr_vdev *vdev,
467*5113495bSYour Name 				    struct wlan_t2lm_info *t2lm)
468*5113495bSYour Name {
469*5113495bSYour Name 	return QDF_STATUS_E_NOSUPPORT;
470*5113495bSYour Name }
471*5113495bSYour Name 
472*5113495bSYour Name static inline
hdd_update_link_state_cached_timestamp(struct hdd_adapter * adapter)473*5113495bSYour Name void hdd_update_link_state_cached_timestamp(struct hdd_adapter *adapter)
474*5113495bSYour Name {
475*5113495bSYour Name }
476*5113495bSYour Name 
477*5113495bSYour Name #define FEATURE_ML_LINK_STATE_COMMANDS
478*5113495bSYour Name #endif
479*5113495bSYour Name #endif
480