1 /*
2 * Copyright (c) 2017-2021 The Linux Foundation. All rights reserved.
3 * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
4 *
5 * Permission to use, copy, modify, and/or distribute this software for
6 * any purpose with or without fee is hereby granted, provided that the
7 * above copyright notice and this permission notice appear in all
8 * copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17 * PERFORMANCE OF THIS SOFTWARE.
18 */
19
20 /**
21 * DOC: wlan_tdls_ucfg_api.h
22 *
23 * TDLS north bound interface declaration
24 */
25
26 #if !defined(_WLAN_TDLS_UCFG_API_H_)
27 #define _WLAN_TDLS_UCFG_API_H_
28
29 #include <scheduler_api.h>
30 #include <wlan_tdls_public_structs.h>
31 #include <wlan_objmgr_cmn.h>
32 #include <wlan_objmgr_psoc_obj.h>
33 #include <wlan_objmgr_pdev_obj.h>
34 #include <wlan_objmgr_vdev_obj.h>
35
36 #ifdef FEATURE_WLAN_TDLS
37
38 /**
39 * ucfg_tdls_init() - TDLS module initialization API
40 *
41 * Return: QDF_STATUS
42 */
43 QDF_STATUS ucfg_tdls_init(void);
44
45 /**
46 * ucfg_tdls_deinit() - TDLS module deinitialization API
47 *
48 * Return: QDF_STATUS
49 */
50 QDF_STATUS ucfg_tdls_deinit(void);
51
52 /**
53 * ucfg_tdls_psoc_open() - TDLS module psoc open API
54 * @psoc: psoc object
55 *
56 * Return: QDF_STATUS
57 */
58 QDF_STATUS ucfg_tdls_psoc_open(struct wlan_objmgr_psoc *psoc);
59
60 /**
61 * ucfg_tdls_psoc_close() - TDLS module psoc close API
62 * @psoc: psoc object
63 *
64 * Return: QDF_STATUS
65 */
66 QDF_STATUS ucfg_tdls_psoc_close(struct wlan_objmgr_psoc *psoc);
67
68 /**
69 * ucfg_tdls_update_config() - TDLS module start
70 * @psoc: psoc object
71 * @req: tdls start paramets
72 *
73 * Return: QDF_STATUS
74 */
75 QDF_STATUS ucfg_tdls_update_config(struct wlan_objmgr_psoc *psoc,
76 struct tdls_start_params *req);
77
78 /**
79 * ucfg_tdls_update_fw_wideband_capability() - Update FW TDLS wideband
80 * capability in TDLS component
81 *
82 * @psoc: psoc object
83 * @is_fw_tdls_wideband_capable: if fw is tdls wideband capable then it is true
84 *
85 * Return: void
86 */
87 void ucfg_tdls_update_fw_wideband_capability(struct wlan_objmgr_psoc *psoc,
88 bool is_fw_tdls_wideband_capable);
89
90 /**
91 * ucfg_tdls_is_fw_wideband_capable() - Get FW TDLS wideband capability from
92 * TDLS component.
93 * @psoc: psoc object
94 *
95 * Return: true if fw supports tdls wideband
96 */
97 bool ucfg_tdls_is_fw_wideband_capable(struct wlan_objmgr_psoc *psoc);
98
99 #ifdef WLAN_FEATURE_11AX
100 /**
101 * ucfg_tdls_update_fw_11ax_capability() - Update FW TDLS 11ax capability in
102 * TDLS Component
103 * @psoc: psoc object
104 * @is_fw_tdls_11ax_capable: bool if fw is tdls 11ax capable then it is true
105 *
106 * Return: void
107 */
108 void ucfg_tdls_update_fw_11ax_capability(struct wlan_objmgr_psoc *psoc,
109 bool is_fw_tdls_11ax_capable);
110
111 /**
112 * ucfg_update_fw_tdls_6g_capability() - Update FW TDLS 6g capability in TDLS
113 * Component
114 * @psoc: psoc object
115 * @is_fw_tdls_6g_capable: set to true if firmware supports TDLS on 6G band
116 *
117 * Return: void
118 */
119 void ucfg_update_fw_tdls_6g_capability(struct wlan_objmgr_psoc *psoc,
120 bool is_fw_tdls_6g_capable);
121
122 /**
123 * ucfg_tdls_is_fw_11ax_capable() - Get FW TDLS 11ax capability from TLDS
124 * component.
125 * @psoc: psoc object
126 *
127 * Return: true if fw supports tdls 11ax
128 */
129 bool ucfg_tdls_is_fw_11ax_capable(struct wlan_objmgr_psoc *psoc);
130
131 /**
132 * ucfg_tdls_is_fw_6g_capable() - Get FW TDLS 6g capability from TLDS
133 * component.
134 * @psoc: psoc object
135 *
136 * Return: true if fw supports tdls on 6ghz band
137 */
138 bool ucfg_tdls_is_fw_6g_capable(struct wlan_objmgr_psoc *psoc);
139
140 #else
141 static inline
ucfg_tdls_update_fw_11ax_capability(struct wlan_objmgr_psoc * psoc,bool is_fw_tdls_11ax_capable)142 void ucfg_tdls_update_fw_11ax_capability(struct wlan_objmgr_psoc *psoc,
143 bool is_fw_tdls_11ax_capable)
144 {
145 }
146
147 static inline
ucfg_tdls_is_fw_11ax_capable(struct wlan_objmgr_psoc * psoc)148 bool ucfg_tdls_is_fw_11ax_capable(struct wlan_objmgr_psoc *psoc)
149 {
150 return false;
151 }
152
153 static inline
ucfg_update_fw_tdls_6g_capability(struct wlan_objmgr_psoc * psoc,bool is_fw_tdls_6g_capable)154 void ucfg_update_fw_tdls_6g_capability(struct wlan_objmgr_psoc *psoc,
155 bool is_fw_tdls_6g_capable)
156 {
157 }
158
159 static inline
ucfg_tdls_is_fw_6g_capable(struct wlan_objmgr_psoc * psoc)160 bool ucfg_tdls_is_fw_6g_capable(struct wlan_objmgr_psoc *psoc)
161 {
162 return false;
163 }
164 #endif
165
166 #ifdef WLAN_FEATURE_11BE
167 /**
168 * ucfg_tdls_update_fw_mlo_capability() - update fw mlo capability
169 * @psoc: psoc object
170 * @is_fw_tdls_mlo_capable: bool value
171 *
172 * Return: none
173 */
174 void ucfg_tdls_update_fw_mlo_capability(struct wlan_objmgr_psoc *psoc,
175 bool is_fw_tdls_mlo_capable);
176 #else
177 static inline
ucfg_tdls_update_fw_mlo_capability(struct wlan_objmgr_psoc * psoc,bool is_fw_tdls_mlo_capable)178 void ucfg_tdls_update_fw_mlo_capability(struct wlan_objmgr_psoc *psoc,
179 bool is_fw_tdls_mlo_capable)
180 {
181 }
182 #endif
183
184 /**
185 * ucfg_tdls_link_vdev_is_matching() - check whether vdev is matching link vdev
186 * @vdev: vdev object
187 *
188 * Return: bool
189 */
190 bool ucfg_tdls_link_vdev_is_matching(struct wlan_objmgr_vdev *vdev);
191
192 /**
193 * ucfg_tdls_get_tdls_link_vdev() - get tdls link vdev
194 * @vdev: vdev object
195 * @dbg_id: debug id
196 *
197 * Return: vdev pointer
198 */
199 struct wlan_objmgr_vdev *
200 ucfg_tdls_get_tdls_link_vdev(struct wlan_objmgr_vdev *vdev,
201 wlan_objmgr_ref_dbgid dbg_id);
202
203 /**
204 * ucfg_tdls_put_tdls_link_vdev() - put tdls link vdev
205 * @vdev: vdev odject
206 * @dbg_id: debug id
207 *
208 * Return: void
209 */
210 void ucfg_tdls_put_tdls_link_vdev(struct wlan_objmgr_vdev *vdev,
211 wlan_objmgr_ref_dbgid dbg_id);
212
213 /**
214 * ucfg_tdls_psoc_enable() - TDLS module enable API
215 * @psoc: psoc object
216 *
217 * Return: QDF_STATUS
218 */
219 QDF_STATUS ucfg_tdls_psoc_enable(struct wlan_objmgr_psoc *psoc);
220
221 /**
222 * ucfg_tdls_psoc_disable() - TDLS module disable API
223 * @psoc: psoc object
224 *
225 * Return: QDF_STATUS
226 */
227 QDF_STATUS ucfg_tdls_psoc_disable(struct wlan_objmgr_psoc *psoc);
228
229 /**
230 * ucfg_tdls_add_peer() - handle TDLS add peer
231 * @vdev: vdev object
232 * @add_peer_req: add peer request parameters
233 *
234 * Return: QDF_STATUS
235 */
236 QDF_STATUS ucfg_tdls_add_peer(struct wlan_objmgr_vdev *vdev,
237 struct tdls_add_peer_params *add_peer_req);
238
239 /**
240 * ucfg_tdls_update_peer() - handle TDLS update peer
241 * @vdev: vdev object
242 * @update_peer: update TDLS request parameters
243 *
244 * Return: QDF_STATUS
245 */
246 QDF_STATUS ucfg_tdls_update_peer(struct wlan_objmgr_vdev *vdev,
247 struct tdls_update_peer_params *update_peer);
248
249 /**
250 * ucfg_tdls_oper() - handle TDLS oper functions
251 * @vdev: vdev object
252 * @macaddr: MAC address of TDLS peer
253 * @cmd: oper cmd
254 *
255 * Return: QDF_STATUS
256 */
257 QDF_STATUS ucfg_tdls_oper(struct wlan_objmgr_vdev *vdev,
258 const uint8_t *macaddr, enum tdls_command_type cmd);
259
260 /**
261 * ucfg_tdls_get_all_peers() - get all tdls peers from the list
262 * @vdev: vdev object
263 * @buf: output buffer
264 * @buflen: length of written data
265 *
266 * Return: QDF_STATUS
267 */
268 QDF_STATUS ucfg_tdls_get_all_peers(struct wlan_objmgr_vdev *vdev,
269 char *buf, int buflen);
270
271 /**
272 * ucfg_tdls_send_mgmt_frame() - send TDLS mgmt frame
273 * @mgmt_req: pointer to TDLS action frame request struct
274 *
275 * This will TDLS action frames to peer
276 *
277 * Return: QDF_STATUS
278 */
279 QDF_STATUS ucfg_tdls_send_mgmt_frame(
280 struct tdls_action_frame_request *mgmt_req);
281
282 /**
283 * ucfg_tdls_responder() - set responder in TDLS peer
284 * @msg_req: responder msg
285 *
286 * Return: QDF_STATUS
287 */
288 QDF_STATUS ucfg_tdls_responder(struct tdls_set_responder_req *msg_req);
289
290 /**
291 * ucfg_tdls_teardown_links() - notify TDLS modules to teardown all TDLS links.
292 * @psoc: psoc object
293 *
294 * Return: QDF_STATUS
295 */
296 QDF_STATUS ucfg_tdls_teardown_links(struct wlan_objmgr_psoc *psoc);
297
298 /**
299 * ucfg_tdls_teardown_links_sync() - teardown all TDLS links.
300 * @psoc: psoc object
301 * @vdev: Vdev object pointer
302 *
303 * Return: None
304 */
305 void ucfg_tdls_teardown_links_sync(struct wlan_objmgr_psoc *psoc,
306 struct wlan_objmgr_vdev *vdev);
307
308 /**
309 * ucfg_tdls_notify_reset_adapter() - notify reset adapter
310 * @vdev: vdev object manager
311 *
312 * Return: QDF_STATUS
313 */
314 QDF_STATUS ucfg_tdls_notify_reset_adapter(struct wlan_objmgr_vdev *vdev);
315
316 /**
317 * ucfg_tdls_set_operating_mode() - set operating mode
318 * @set_mode_params: set mode params
319 *
320 * Return: QDF_STATUS
321 */
322 QDF_STATUS ucfg_tdls_set_operating_mode(
323 struct tdls_set_mode_params *set_mode_params);
324
325 /**
326 * ucfg_tdls_update_rx_pkt_cnt() - update rx pkt count
327 * @vdev: tdls vdev object
328 * @mac_addr: peer mac address
329 * @dest_mac_addr: dest mac address
330 *
331 * Return: None
332 */
333 void ucfg_tdls_update_rx_pkt_cnt(struct wlan_objmgr_vdev *vdev,
334 struct qdf_mac_addr *mac_addr,
335 struct qdf_mac_addr *dest_mac_addr);
336
337 /**
338 * ucfg_tdls_update_tx_pkt_cnt() - update tx pkt count
339 * @vdev: tdls vdev object
340 * @mac_addr: peer mac address
341 *
342 * Return: None
343 */
344 void ucfg_tdls_update_tx_pkt_cnt(struct wlan_objmgr_vdev *vdev,
345 struct qdf_mac_addr *mac_addr);
346
347 /**
348 * ucfg_tdls_antenna_switch() - tdls antenna switch
349 * @vdev: tdls vdev object
350 * @mode: antenna mode
351 *
352 * Return: QDF_STATUS
353 */
354 QDF_STATUS ucfg_tdls_antenna_switch(struct wlan_objmgr_vdev *vdev,
355 uint32_t mode);
356
357 /**
358 * ucfg_set_tdls_offchannel() - Handle TDLS set offchannel
359 * @vdev: vdev object
360 * @offchannel: updated offchannel
361 *
362 * Return: QDF_STATUS
363 */
364 QDF_STATUS ucfg_set_tdls_offchannel(struct wlan_objmgr_vdev *vdev,
365 int offchannel);
366
367 /**
368 * ucfg_set_tdls_offchan_mode() - Handle TDLS set offchannel mode
369 * @vdev: vdev object
370 * @offchanmode: updated off-channel mode
371 *
372 * Return: QDF_STATUS
373 */
374 QDF_STATUS ucfg_set_tdls_offchan_mode(struct wlan_objmgr_vdev *vdev,
375 int offchanmode);
376
377 /**
378 * ucfg_set_tdls_secoffchanneloffset() - Handle TDLS set offchannel offset
379 * @vdev: vdev object
380 * @offchanoffset: tdls off-channel offset
381 *
382 * Return: QDF_STATUS
383 */
384 QDF_STATUS ucfg_set_tdls_secoffchanneloffset(struct wlan_objmgr_vdev *vdev,
385 int offchanoffset);
386
387 /**
388 * ucfg_tdls_discovery_on_going() - check discovery is on going
389 * @vdev: vdev object
390 *
391 * Return: true if tdls discovery on going else false
392 */
393 bool ucfg_tdls_discovery_on_going(struct wlan_objmgr_vdev *vdev);
394
395 /**
396 * ucfg_tdls_get_mlo_vdev() - get mlo vdev for tdls
397 * @vdev: vdev object
398 * @index: index of vdev in mlo list
399 * @dbg_id: debug id
400 *
401 * Return: vdev pointer
402 */
403 struct wlan_objmgr_vdev *ucfg_tdls_get_mlo_vdev(struct wlan_objmgr_vdev *vdev,
404 uint8_t index,
405 wlan_objmgr_ref_dbgid dbg_id);
406
407 /**
408 * ucfg_tdls_release_mlo_vdev() - release mlo vdev for tdls
409 * @vdev: vdev object
410 * @dbg_id: debug id
411 *
412 * Return: void
413 */
414 void ucfg_tdls_release_mlo_vdev(struct wlan_objmgr_vdev *vdev,
415 wlan_objmgr_ref_dbgid dbg_id);
416 /**
417 * ucfg_tdls_set_rssi() - API to set TDLS RSSI on peer given by mac
418 * @vdev: vdev object
419 * @mac: MAC address of Peer
420 * @rssi: rssi value
421 *
422 * Set RSSI on TDLS peer
423 *
424 * Return: QDF_STATUS
425 */
426 QDF_STATUS ucfg_tdls_set_rssi(struct wlan_objmgr_vdev *vdev,
427 uint8_t *mac, int8_t rssi);
428
429 /**
430 * ucfg_tdls_notify_connect_failure() - This api is called if STA/P2P
431 * connection fails on one iface and to enable/disable TDLS on the other
432 * STA/P2P iface which is already connected.It is a wrapper function to
433 * API wlan_tdls_notify_connect_failure()
434 * @psoc: psoc object
435 *
436 * Return: void
437 */
438 void ucfg_tdls_notify_connect_failure(struct wlan_objmgr_psoc *psoc);
439
440 /**
441 * ucfg_get_tdls_conn_peer_count() - This api is called to get number of
442 * connected TDLS peer
443 * @vdev: vdev object
444 *
445 * Return: tdls connected peer count
446 */
447 uint16_t ucfg_get_tdls_conn_peer_count(struct wlan_objmgr_vdev *vdev);
448
449 /**
450 * ucfg_get_tdls_vdev() - Ucfg api to get tdls specific vdev object
451 * @psoc: wlan psoc object manager
452 * @dbg_id: debug id
453 *
454 * If TDLS is enabled on any vdev then return the corresponding vdev.
455 *
456 * This api increases the ref count of the returned vdev.
457 * Return: vdev manager pointer or NULL.
458 */
459 struct wlan_objmgr_vdev *ucfg_get_tdls_vdev(struct wlan_objmgr_psoc *psoc,
460 wlan_objmgr_ref_dbgid dbg_id);
461
462 /**
463 * ucfg_tdls_check_is_tdls_allowed() - Ucfg api to check is tdls allowed or not
464 * @vdev: vdev object
465 *
466 * Function determines the whether TDLS allowed in the system
467 *
468 * Return: true or false
469 */
470 bool ucfg_tdls_check_is_tdls_allowed(struct wlan_objmgr_vdev *vdev);
471
472 /**
473 * ucfg_tdls_set_user_tdls_enable() - ucfg api to set tdls is enable or not
474 * from userspace
475 * @vdev: vdev object
476 * @is_user_tdls_enable: true if tdls is enabled from userspace
477 *
478 * Return: void
479 */
480 void ucfg_tdls_set_user_tdls_enable(struct wlan_objmgr_vdev *vdev,
481 bool is_user_tdls_enable);
482
483 #else
484 static inline
ucfg_tdls_link_vdev_is_matching(struct wlan_objmgr_vdev * vdev)485 bool ucfg_tdls_link_vdev_is_matching(struct wlan_objmgr_vdev *vdev)
486 {
487 return false;
488 }
489
490 static inline
491 struct wlan_objmgr_vdev *
ucfg_tdls_get_tdls_link_vdev(struct wlan_objmgr_vdev * vdev,wlan_objmgr_ref_dbgid dbg_id)492 ucfg_tdls_get_tdls_link_vdev(struct wlan_objmgr_vdev *vdev,
493 wlan_objmgr_ref_dbgid dbg_id)
494 {
495 return NULL;
496 }
497
498 static inline
ucfg_tdls_put_tdls_link_vdev(struct wlan_objmgr_vdev * vdev,wlan_objmgr_ref_dbgid dbg_id)499 void ucfg_tdls_put_tdls_link_vdev(struct wlan_objmgr_vdev *vdev,
500 wlan_objmgr_ref_dbgid dbg_id)
501 {
502 }
503
504 static inline
ucfg_tdls_init(void)505 QDF_STATUS ucfg_tdls_init(void)
506 {
507 return QDF_STATUS_SUCCESS;
508 }
509
510 static inline
ucfg_tdls_deinit(void)511 QDF_STATUS ucfg_tdls_deinit(void)
512 {
513 return QDF_STATUS_SUCCESS;
514 }
515
516 static inline
ucfg_tdls_psoc_open(struct wlan_objmgr_psoc * psoc)517 QDF_STATUS ucfg_tdls_psoc_open(struct wlan_objmgr_psoc *psoc)
518 {
519 return QDF_STATUS_SUCCESS;
520 }
521
522 static inline
ucfg_tdls_psoc_close(struct wlan_objmgr_psoc * psoc)523 QDF_STATUS ucfg_tdls_psoc_close(struct wlan_objmgr_psoc *psoc)
524 {
525 return QDF_STATUS_SUCCESS;
526 }
527
528 static inline
ucfg_tdls_psoc_enable(struct wlan_objmgr_psoc * psoc)529 QDF_STATUS ucfg_tdls_psoc_enable(struct wlan_objmgr_psoc *psoc)
530 {
531 return QDF_STATUS_SUCCESS;
532 }
533
534 static inline
ucfg_tdls_psoc_disable(struct wlan_objmgr_psoc * psoc)535 QDF_STATUS ucfg_tdls_psoc_disable(struct wlan_objmgr_psoc *psoc)
536 {
537 return QDF_STATUS_SUCCESS;
538 }
539
540 static inline
ucfg_tdls_update_rx_pkt_cnt(struct wlan_objmgr_vdev * vdev,struct qdf_mac_addr * mac_addr,struct qdf_mac_addr * dest_mac_addr)541 void ucfg_tdls_update_rx_pkt_cnt(struct wlan_objmgr_vdev *vdev,
542 struct qdf_mac_addr *mac_addr,
543 struct qdf_mac_addr *dest_mac_addr)
544 {
545 }
546
547 static inline
ucfg_tdls_update_tx_pkt_cnt(struct wlan_objmgr_vdev * vdev,struct qdf_mac_addr * mac_addr)548 void ucfg_tdls_update_tx_pkt_cnt(struct wlan_objmgr_vdev *vdev,
549 struct qdf_mac_addr *mac_addr)
550 {
551 }
552
553 static inline
ucfg_tdls_teardown_links(struct wlan_objmgr_psoc * psoc)554 QDF_STATUS ucfg_tdls_teardown_links(struct wlan_objmgr_psoc *psoc)
555 {
556 return QDF_STATUS_SUCCESS;
557 }
558
559 static inline
ucfg_tdls_teardown_links_sync(struct wlan_objmgr_psoc * psoc,struct wlan_objmgr_vdev * vdev)560 void ucfg_tdls_teardown_links_sync(struct wlan_objmgr_psoc *psoc,
561 struct wlan_objmgr_vdev *vdev)
562 {
563 }
564
565 static inline
ucfg_tdls_set_rssi(struct wlan_objmgr_vdev * vdev,uint8_t * mac,int8_t rssi)566 QDF_STATUS ucfg_tdls_set_rssi(struct wlan_objmgr_vdev *vdev,
567 uint8_t *mac, int8_t rssi)
568 {
569 return QDF_STATUS_SUCCESS;
570 }
571
572 static inline
ucfg_tdls_notify_connect_failure(struct wlan_objmgr_psoc * psoc)573 void ucfg_tdls_notify_connect_failure(struct wlan_objmgr_psoc *psoc)
574 {
575 }
576
577 static inline
ucfg_get_tdls_vdev(struct wlan_objmgr_psoc * psoc,wlan_objmgr_ref_dbgid dbg_id)578 struct wlan_objmgr_vdev *ucfg_get_tdls_vdev(struct wlan_objmgr_psoc *psoc,
579 wlan_objmgr_ref_dbgid dbg_id)
580 {
581 return NULL;
582 }
583
584 static inline
ucfg_tdls_check_is_tdls_allowed(struct wlan_objmgr_vdev * vdev)585 bool ucfg_tdls_check_is_tdls_allowed(struct wlan_objmgr_vdev *vdev)
586 {
587 return false;
588 }
589
590 static inline
ucfg_tdls_set_user_tdls_enable(struct wlan_objmgr_vdev * vdev,bool is_user_tdls_enable)591 void ucfg_tdls_set_user_tdls_enable(struct wlan_objmgr_vdev *vdev,
592 bool is_user_tdls_enable)
593 {
594 }
595
596 static inline
ucfg_tdls_update_fw_11ax_capability(struct wlan_objmgr_psoc * psoc,bool is_fw_tdls_11ax_capable)597 void ucfg_tdls_update_fw_11ax_capability(struct wlan_objmgr_psoc *psoc,
598 bool is_fw_tdls_11ax_capable)
599 {
600 }
601
602 static inline
ucfg_tdls_is_fw_11ax_capable(struct wlan_objmgr_psoc * psoc)603 bool ucfg_tdls_is_fw_11ax_capable(struct wlan_objmgr_psoc *psoc)
604 {
605 return false;
606 }
607 #endif /* FEATURE_WLAN_TDLS */
608 #endif
609