1 /*
2 * Copyright (c) 2012-2020 The Linux Foundation. All rights reserved.
3 * Copyright (c) 2021-2024 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: wifi_pos_api.h
22 * This file declares public APIs of wifi positioning component
23 */
24 #ifndef _WIFI_POS_API_H_
25 #define _WIFI_POS_API_H_
26
27 /* Include files */
28 #include "wifi_pos_utils_pub.h"
29 #include "wifi_pos_utils_i.h"
30
31 /* forward reference */
32 struct wlan_objmgr_psoc;
33 struct wifi_pos_driver_caps;
34
35 #ifdef WIFI_POS_CONVERGED
36 struct wifi_pos_osif_ops;
37 #endif
38
39 /**
40 * enum RTT_FIELD_ID - identifies which field is being specified
41 * @META_DATA_SUB_TYPE: oem data req sub type
42 * @META_DATA_CHANNEL_MHZ: channel mhz info
43 * @META_DATA_PDEV: pdev info
44 */
45 enum RTT_FIELD_ID {
46 META_DATA_SUB_TYPE,
47 META_DATA_CHANNEL_MHZ,
48 META_DATA_PDEV,
49 };
50
51 /**
52 * struct wifi_pos_field - wifi positioning field element
53 * @id: RTT field id
54 * @offset: data offset in field info buffer
55 * @length: length of related data in field info buffer
56 */
57 struct wifi_pos_field {
58 uint32_t id;
59 uint32_t offset;
60 uint32_t length;
61 };
62
63 /**
64 * struct wifi_pos_field_info - wifi positioning field info buffer
65 * @count: number of @wifi_pos_field elements
66 * @fields: buffer to hold @wifi_pos_field elements
67 */
68 struct wifi_pos_field_info {
69 uint32_t count;
70 QDF_FLEX_ARRAY(struct wifi_pos_field, fields);
71 };
72
73 /* Length of interface name */
74 #define INTERFACE_LEN 16
75 /**
76 * struct wifi_pos_interface - wifi positioning interface structure
77 * @length: interface length
78 * @dev_name: device name
79 */
80 struct wifi_pos_interface {
81 uint8_t length;
82 char dev_name[INTERFACE_LEN];
83 };
84
85 #ifdef WIFI_POS_CONVERGED
86 /**
87 * enum oem_err_msg - err msg returned to user space
88 * @OEM_ERR_NULL_CONTEXT: NULL context
89 * @OEM_ERR_APP_NOT_REGISTERED: OEM App is not registered
90 * @OEM_ERR_INVALID_SIGNATURE: Invalid signature
91 * @OEM_ERR_NULL_MESSAGE_HEADER: Invalid message header
92 * @OEM_ERR_INVALID_MESSAGE_TYPE: Invalid message type
93 * @OEM_ERR_INVALID_MESSAGE_LENGTH: Invalid length in message body
94 * @OEM_ERR_REQUEST_REJECTED: Request is rejected by the driver
95 */
96 enum oem_err_msg {
97 OEM_ERR_NULL_CONTEXT = 1,
98 OEM_ERR_APP_NOT_REGISTERED,
99 OEM_ERR_INVALID_SIGNATURE,
100 OEM_ERR_NULL_MESSAGE_HEADER,
101 OEM_ERR_INVALID_MESSAGE_TYPE,
102 OEM_ERR_INVALID_MESSAGE_LENGTH,
103 OEM_ERR_REQUEST_REJECTED
104 };
105
106 /* this struct is needed since MLME is not converged yet */
107 struct wifi_pos_ch_info {
108 uint8_t chan_id;
109 uint32_t mhz;
110 uint32_t band_center_freq1;
111 uint32_t band_center_freq2;
112 uint32_t info;
113 uint32_t reg_info_1;
114 uint32_t reg_info_2;
115 uint8_t nss;
116 uint32_t rate_flags;
117 uint8_t sec_ch_offset;
118 uint32_t ch_width;
119 };
120
121 /**
122 * struct wifi_pos_ch_info_rsp - Channel information
123 * @chan_id: channel id
124 * @reserved0: reserved for padding and future use
125 * @mhz: primary 20 MHz channel frequency in Mhz
126 * @band_center_freq1: Center frequency 1 in MHz
127 * @band_center_freq2: Center frequency 2 in MHz, valid only for 11ac
128 * VHT 80+80 mode
129 * @info: channel info
130 * @reg_info_1: regulatory information field 1 which contains min power,
131 * max power, reg power and reg class id
132 * @reg_info_2: regulatory information field 2 which contains antennamax
133 */
134 struct wifi_pos_ch_info_rsp {
135 uint32_t chan_id;
136 uint32_t reserved0;
137 uint32_t mhz;
138 uint32_t band_center_freq1;
139 uint32_t band_center_freq2;
140 uint32_t info;
141 uint32_t reg_info_1;
142 uint32_t reg_info_2;
143 } qdf_packed;
144
145 /**
146 * struct wifi_pos_peer_status_info - Status information for a given peer
147 * @peer_mac_addr: peer mac address
148 * @peer_status: peer status: 1: CONNECTED, 2: DISCONNECTED
149 * @vdev_id: vdev_id for the peer mac
150 * @peer_capability: peer capability: 0: RTT/RTT2, 1: RTT3. Default is 0
151 * @reserved0: reserved0
152 * @peer_chan_info: channel info on which peer is connected
153 */
154 struct wifi_pos_peer_status_info {
155 uint8_t peer_mac_addr[ETH_ALEN];
156 uint8_t peer_status;
157 uint8_t vdev_id;
158 uint32_t peer_capability;
159 uint32_t reserved0;
160 struct wifi_pos_ch_info_rsp peer_chan_info;
161 } qdf_packed;
162
163 /**
164 * struct wifi_pos_req_msg - wifi pos request struct
165 * @msg_type: message type
166 * @pid: process id
167 * @buf: request buffer
168 * @buf_len: request buffer length
169 * @field_info_buf: buffer containing field info
170 * @field_info_buf_len: length of field info buffer
171 * @rsp_version: nl type or ani type
172 * @interface: contains interface name and length
173 */
174 struct wifi_pos_req_msg {
175 enum wifi_pos_cmd_ids msg_type;
176 uint32_t pid;
177 uint8_t *buf;
178 uint32_t buf_len;
179 struct wifi_pos_field_info *field_info_buf;
180 uint32_t field_info_buf_len;
181 uint32_t rsp_version;
182 struct wifi_pos_interface interface;
183 };
184
185 /**
186 * ucfg_wifi_pos_process_req: ucfg API to be called from HDD/OS_IF to process a
187 * wifi_pos request from userspace
188 * @psoc: pointer to psoc object
189 * @req: wifi_pos request msg
190 * @send_rsp_cb: callback pointer required to send msg to userspace
191 *
192 * Return: status of operation
193 */
194 QDF_STATUS ucfg_wifi_pos_process_req(struct wlan_objmgr_psoc *psoc,
195 struct wifi_pos_req_msg *req,
196 wifi_pos_send_rsp_handler send_rsp_cb);
197
198 /**
199 * wifi_pos_init: initializes WIFI POS component, called by dispatcher init
200 *
201 * Return: status of operation
202 */
203 QDF_STATUS wifi_pos_init(void);
204
205 /**
206 * wifi_pos_deinit: de-initializes WIFI POS component, called by dispatcher init
207 *
208 * Return: status of operation
209 */
210 QDF_STATUS wifi_pos_deinit(void);
211
212 /**
213 * wifi_pos_psoc_enable: psoc enable API for wifi positioning component
214 * @psoc: pointer to PSOC
215 *
216 * Return: status of operation
217 */
218 QDF_STATUS wifi_pos_psoc_enable(struct wlan_objmgr_psoc *psoc);
219
220 /**
221 * wifi_pos_psoc_disable: psoc disable API for wifi positioning component
222 * @psoc: pointer to PSOC
223 *
224 * Return: status of operation
225 */
226 QDF_STATUS wifi_pos_psoc_disable(struct wlan_objmgr_psoc *psoc);
227
228 /**
229 * wifi_pos_set_oem_target_type: public API to set param in wifi_pos private
230 * object
231 * @psoc: pointer to PSOC
232 * @val: value to set
233 *
234 * Return: None
235 */
236 void wifi_pos_set_oem_target_type(struct wlan_objmgr_psoc *psoc, uint32_t val);
237
238 /**
239 * wifi_pos_set_oem_fw_version: public API to set param in wifi_pos private
240 * object
241 * @psoc: pointer to PSOC
242 * @val: value to set
243 *
244 * Return: None
245 */
246 void wifi_pos_set_oem_fw_version(struct wlan_objmgr_psoc *psoc, uint32_t val);
247
248 /**
249 * wifi_pos_set_drv_ver_major: public API to set param in wifi_pos private
250 * object
251 * @psoc: pointer to PSOC
252 * @val: value to set
253 *
254 * Return: None
255 */
256 void wifi_pos_set_drv_ver_major(struct wlan_objmgr_psoc *psoc, uint8_t val);
257
258 /**
259 * wifi_pos_set_drv_ver_minor: public API to set param in wifi_pos private
260 * object
261 * @psoc: pointer to PSOC
262 * @val: value to set
263 *
264 * Return: None
265 */
266 void wifi_pos_set_drv_ver_minor(struct wlan_objmgr_psoc *psoc, uint8_t val);
267
268 /**
269 * wifi_pos_set_drv_ver_patch: public API to set param in wifi_pos private
270 * object
271 * @psoc: pointer to PSOC
272 * @val: value to set
273 *
274 * Return: None
275 */
276 void wifi_pos_set_drv_ver_patch(struct wlan_objmgr_psoc *psoc, uint8_t val);
277
278 /**
279 * wifi_pos_set_drv_ver_build: public API to set param in wifi_pos private
280 * object
281 * @psoc: pointer to PSOC
282 * @val: value to set
283 *
284 * Return: None
285 */
286 void wifi_pos_set_drv_ver_build(struct wlan_objmgr_psoc *psoc, uint8_t val);
287
288 /**
289 * wifi_pos_set_dwell_time_min: public API to set param in wifi_pos private
290 * object
291 * @psoc: pointer to PSOC
292 * @val: value to set
293 *
294 * Return: None
295 */
296 void wifi_pos_set_dwell_time_min(struct wlan_objmgr_psoc *psoc, uint16_t val);
297
298 /**
299 * wifi_pos_set_dwell_time_max: public API to set param in wifi_pos private
300 * object
301 * @psoc: pointer to PSOC
302 * @val: value to set
303 *
304 * Return: None
305 */
306 void wifi_pos_set_dwell_time_max(struct wlan_objmgr_psoc *psoc, uint16_t val);
307
308 /**
309 * wifi_pos_set_current_dwell_time_min: public API to set param in wifi_pos
310 * private object
311 * @psoc: pointer to PSOC
312 * @val: value to set
313 *
314 * Return: None
315 */
316 void wifi_pos_set_current_dwell_time_min(struct wlan_objmgr_psoc *psoc,
317 uint16_t val);
318
319 /**
320 * wifi_pos_set_current_dwell_time_max: public API to set param in wifi_pos
321 * private object
322 * @psoc: pointer to PSOC
323 * @val: value to set
324 *
325 * Return: None
326 */
327 void wifi_pos_set_current_dwell_time_max(struct wlan_objmgr_psoc *psoc,
328 uint16_t val);
329
330 /**
331 * wifi_pos_populate_caps() - populate oem capabilities
332 * @psoc: psoc object
333 * @caps: pointer to populate the capabilities
334 *
335 * Return: error code
336 */
337 QDF_STATUS wifi_pos_populate_caps(struct wlan_objmgr_psoc *psoc,
338 struct wifi_pos_driver_caps *caps);
339
340 struct wlan_lmac_if_rx_ops;
341 /**
342 * wifi_pos_register_rx_ops: function to register with lmac rx ops
343 * @rx_ops: lmac rx ops struct object
344 *
345 * Return: None
346 */
347 void wifi_pos_register_rx_ops(struct wlan_lmac_if_rx_ops *rx_ops);
348
349 /**
350 * wifi_pos_get_tx_ops: api to get tx ops
351 * @psoc: pointer to psoc object
352 *
353 * Return: tx ops
354 */
355 struct wlan_lmac_if_wifi_pos_tx_ops *
356 wifi_pos_get_tx_ops(struct wlan_objmgr_psoc *psoc);
357
358 /**
359 * wifi_pos_get_rx_ops: api to get rx ops
360 * @psoc: pointer to psoc object
361 *
362 * Return: rx ops
363 */
364 struct wlan_lmac_if_wifi_pos_rx_ops *
365 wifi_pos_get_rx_ops(struct wlan_objmgr_psoc *psoc);
366
367 /**
368 * ucfg_wifi_pos_get_ftm_cap: API to get fine timing measurement caps
369 * @psoc: psoc object
370 *
371 * Return: FTM value
372 */
373 uint32_t ucfg_wifi_pos_get_ftm_cap(struct wlan_objmgr_psoc *psoc);
374
375 /**
376 * ucfg_wifi_pos_set_ftm_cap: API to set fine timing measurement caps
377 * @psoc: psoc object
378 * @val: value to set
379 *
380 * Return: None
381 */
382 void ucfg_wifi_pos_set_ftm_cap(struct wlan_objmgr_psoc *psoc, uint32_t val);
383
384 /**
385 * ucfg_wifi_pos_set_oem_6g_supported: API to set oem target 6g enabled/disabled
386 * @psoc: psoc object
387 * @val: value to set
388 *
389 * Return: None
390 */
391 void ucfg_wifi_pos_set_oem_6g_supported(struct wlan_objmgr_psoc *psoc,
392 bool val);
393
394 /**
395 * ucfg_wifi_pos_is_nl_rsp: API to check if response is nl or ani type
396 * @psoc: psoc object
397 *
398 * Return: true if response is nl type
399 */
400 bool ucfg_wifi_pos_is_nl_rsp(struct wlan_objmgr_psoc *psoc);
401
402 /**
403 * wifi_pos_get_app_pid: returns oem app pid.
404 * @psoc: pointer to psoc object
405 *
406 * Return: oem app pid
407 */
408 uint32_t wifi_pos_get_app_pid(struct wlan_objmgr_psoc *psoc);
409
410 /**
411 * wifi_pos_is_app_registered: indicates if oem app is registered.
412 * @psoc: pointer to psoc object
413 *
414 * Return: true if app is registered, false otherwise
415 */
416 bool wifi_pos_is_app_registered(struct wlan_objmgr_psoc *psoc);
417
418 /**
419 * wifi_pos_get_psoc: API to get global PSOC object
420 *
421 * Since request from userspace is not associated with any vdev/pdev/psoc, this
422 * API is used to get global psoc object.
423 * Return: global psoc object.
424 */
425 struct wlan_objmgr_psoc *wifi_pos_get_psoc(void);
426
427 /**
428 * wifi_pos_get_legacy_ops() - Get wifi pos legacy ops
429 *
430 * Return: Pointer to legacy ops
431 */
432 struct wifi_pos_legacy_ops *wifi_pos_get_legacy_ops(void);
433
434 /**
435 * wifi_pos_set_legacy_ops() - Set Wifi Pos legacy ops
436 * @psoc: PSOC pointer
437 * @legacy_ops: Legacy ops
438 *
439 * Return: QDF_STATUS
440 */
441 QDF_STATUS
442 wifi_pos_set_legacy_ops(struct wlan_objmgr_psoc *psoc,
443 struct wifi_pos_legacy_ops *legacy_ops);
444 #else
wifi_pos_init(void)445 static inline QDF_STATUS wifi_pos_init(void)
446 {
447 return QDF_STATUS_SUCCESS;
448 }
449
wifi_pos_deinit(void)450 static inline QDF_STATUS wifi_pos_deinit(void)
451 {
452 return QDF_STATUS_SUCCESS;
453 }
454
wifi_pos_psoc_enable(struct wlan_objmgr_psoc * psoc)455 static inline QDF_STATUS wifi_pos_psoc_enable(struct wlan_objmgr_psoc *psoc)
456 {
457 return QDF_STATUS_SUCCESS;
458 }
459
wifi_pos_psoc_disable(struct wlan_objmgr_psoc * psoc)460 static inline QDF_STATUS wifi_pos_psoc_disable(struct wlan_objmgr_psoc *psoc)
461 {
462 return QDF_STATUS_SUCCESS;
463 }
464 #endif
465
466 #if defined(WLAN_FEATURE_CIF_CFR) && defined(WIFI_POS_CONVERGED)
467 /**
468 * wifi_pos_init_cir_cfr_rings: API to set DMA ring cap in wifi pos psoc private
469 * object
470 * @psoc: pointer to psoc object
471 * @hal_soc: hal soc pointer
472 * @num_mac: number of macs
473 * @buf: buffer containing dma ring cap
474 *
475 * Return: status of operation.
476 */
477 QDF_STATUS wifi_pos_init_cir_cfr_rings(struct wlan_objmgr_psoc *psoc,
478 void *hal_soc, uint8_t num_mac, void *buf);
479 #else
wifi_pos_init_cir_cfr_rings(struct wlan_objmgr_psoc * psoc,void * hal_soc,uint8_t num_mac,void * buf)480 static inline QDF_STATUS wifi_pos_init_cir_cfr_rings(
481 struct wlan_objmgr_psoc *psoc,
482 void *hal_soc, uint8_t num_mac, void *buf)
483 {
484 return QDF_STATUS_SUCCESS;
485 }
486 #endif
487
488 /**
489 * wifi_pos_register_get_fw_phy_mode_for_freq_cb: API to register callback
490 * to get current PHY mode
491 * @psoc: pointer to psoc object
492 * @handler: callback to be registered
493 *
494 * Return: QDF_STATUS_SUCCESS in case of success, error codes in
495 * case of failure
496 */
497 QDF_STATUS wifi_pos_register_get_fw_phy_mode_for_freq_cb(
498 struct wlan_objmgr_psoc *psoc,
499 void (*handler)(uint32_t, uint32_t, uint32_t *));
500
501 /**
502 * wifi_pos_register_get_phy_mode_cb: API to register callback to get
503 * current PHY mode
504 * @psoc: pointer to psoc object
505 * @handler: callback to be registered
506 *
507 * Return: QDF_STATUS_SUCCESS in case of success, error codes in
508 * case of failure
509 */
510 QDF_STATUS wifi_pos_register_get_phy_mode_cb(
511 struct wlan_objmgr_psoc *psoc,
512 void (*handler)(qdf_freq_t, uint32_t, uint32_t *));
513
514 /**
515 * wifi_pos_register_send_action: API to register callback to send
516 * action frames
517 * @psoc: pointer to psoc object
518 * @handler: callback to be registered
519 *
520 * Return: QDF_STATUS_SUCCESS in case of success, error codes in
521 * case of failure
522 */
523 QDF_STATUS wifi_pos_register_send_action(
524 struct wlan_objmgr_psoc *psoc,
525 void (*handler)(struct wlan_objmgr_psoc *psoc,
526 uint32_t sub_type,
527 uint8_t *buf,
528 uint32_t buf_len));
529
530 #ifndef CNSS_GENL
531 /**
532 * ucfg_wifi_psoc_get_pdev_id_by_dev_name: ucfg API to get pdev_id and psoc from
533 * devname.
534 * @dev_name: dev name received from LOWI application
535 * @pdev_id: get pdev_id from dev_name
536 * @psoc: get psoc corresponding psoc from dev_name
537 */
538 QDF_STATUS ucfg_wifi_psoc_get_pdev_id_by_dev_name(
539 char *dev_name, uint8_t *pdev_id,
540 struct wlan_objmgr_psoc **psoc);
541
542 /**
543 * wifi_pos_register_get_pdev_id_by_dev_name: API to register callback to get
544 * pdev_id from dev name
545 * @psoc: pointer to global psoc object
546 * @handler: callback to be registered
547 *
548 * Return: QDF_STATUS_SUCCESS in case of success, error codes in
549 * case of failure
550 */
551 QDF_STATUS wifi_pos_register_get_pdev_id_by_dev_name(
552 struct wlan_objmgr_psoc *psoc,
553 QDF_STATUS (*handler)(char *dev_name, uint8_t *pdev_id,
554 struct wlan_objmgr_psoc **psoc));
555
556 /**
557 * wifi_pos_register_get_max_fw_phymode_for_channels: API to register callback
558 * to get FW phymode for the given channels.
559 * @psoc: pointer to global psoc object
560 * @handler: callback to be registered
561 *
562 * Return: QDF_STATUS_SUCCESS in case of success, error codes in case of failure
563 */
564 QDF_STATUS wifi_pos_register_get_max_fw_phymode_for_channels(
565 struct wlan_objmgr_psoc *psoc,
566 QDF_STATUS (*handler)(struct wlan_objmgr_pdev *pdev,
567 struct wifi_pos_channel_power *chan_list,
568 uint16_t wifi_pos_num_chans));
569 #endif /* CNSS_GENL */
570
571 #if !defined(CNSS_GENL) && defined(WLAN_RTT_MEASUREMENT_NOTIFICATION)
572 /**
573 * ucfg_wifi_pos_measurement_request_notification: ucfg API to notify
574 * measurement request received from the LOWI application
575 * @pdev: Pointer to pdev structure
576 * @req: Pointer to wifi_pos_req_msg structure
577 *
578 * Return: QDF_STATUS_SUCCESS in case of success, error codes in
579 * case of failure
580 */
581 QDF_STATUS ucfg_wifi_pos_measurement_request_notification(
582 struct wlan_objmgr_pdev *pdev,
583 struct wifi_pos_req_msg *req);
584
585 /**
586 * wifi_pos_register_measurement_request_notification: API to register a
587 * callback that needs to be called when the driver receives a measurement
588 * request from the LOWI application.
589 * @psoc: pointer to global psoc object
590 * @handler: callback to be registered
591 *
592 * Return: QDF_STATUS_SUCCESS in case of success, error codes in case of
593 * failure.
594 */
595 QDF_STATUS wifi_pos_register_measurement_request_notification(
596 struct wlan_objmgr_psoc *psoc,
597 QDF_STATUS (*handler)(struct wlan_objmgr_pdev *pdev,
598 struct rtt_channel_info *chinfo));
599 #else
ucfg_wifi_pos_measurement_request_notification(struct wlan_objmgr_pdev * pdev,struct wifi_pos_req_msg * req)600 static inline QDF_STATUS ucfg_wifi_pos_measurement_request_notification(
601 struct wlan_objmgr_pdev *pdev,
602 struct wifi_pos_req_msg *req)
603 {
604 return QDF_STATUS_SUCCESS;
605 }
606
wifi_pos_register_measurement_request_notification(struct wlan_objmgr_psoc * psoc,QDF_STATUS (* handler)(struct wlan_objmgr_pdev * pdev,struct rtt_channel_info * chinfo))607 static inline QDF_STATUS wifi_pos_register_measurement_request_notification(
608 struct wlan_objmgr_psoc *psoc,
609 QDF_STATUS (*handler)(struct wlan_objmgr_pdev *pdev,
610 struct rtt_channel_info *chinfo))
611 {
612 return QDF_STATUS_SUCCESS;
613 }
614 #endif /*!defined(CNSS_GENL) && defined(WLAN_RTT_MEASUREMENT_NOTIFICATION)*/
615
616 /**
617 * wifi_pos_send_report_resp: Send report to osif
618 * @psoc: pointer to psoc object
619 * @req_id: Request id
620 * @dest_mac: destination mac address
621 * @err_code: Error code to be sent
622 *
623 * Return: QDF_STATUS_SUCCESS in case of success, error codes in
624 * case of failure
625 */
626 QDF_STATUS wifi_pos_send_report_resp(struct wlan_objmgr_psoc *psoc,
627 int req_id, uint8_t *dest_mac,
628 int err_code);
629
630 /**
631 * wifi_pos_convert_host_pdev_id_to_target: convert host pdev_id to target
632 * pdev_id
633 * @psoc: pointer to psoc object
634 * @host_pdev_id: host pdev id
635 * @target_pdev_id: target pdev id
636 *
637 * Return: QDF_STATUS_SUCCESS in case of success, error codes in
638 * case of failure
639 */
640 QDF_STATUS wifi_pos_convert_host_pdev_id_to_target(
641 struct wlan_objmgr_psoc *psoc, uint32_t host_pdev_id,
642 uint32_t *target_pdev_id);
643
644 #ifdef WIFI_POS_CONVERGED
645 /**
646 * wifi_pos_get_peer_private_object() - Wifi Pos get peer private object
647 * @peer: Peer object pointer
648 *
649 * Return: Peer private object pointer
650 */
651 struct wlan_wifi_pos_peer_priv_obj *
652 wifi_pos_get_peer_private_object(struct wlan_objmgr_peer *peer);
653
654 /**
655 * wifi_pos_register_osif_callbacks() - Register OSIF callbacks
656 * @ops: Osif callbacks pointer
657 *
658 * Return: QDF_STATUS
659 */
660 QDF_STATUS wifi_pos_register_osif_callbacks(struct wifi_pos_osif_ops *ops);
661
662 /**
663 * wifi_pos_get_osif_callbacks() - Get OS IF callbacks
664 *
665 * Return: struct wifi_pos_osif_ops pointer
666 */
667 struct wifi_pos_osif_ops *wifi_pos_get_osif_callbacks(void);
668 #endif /* WIFI_POS_CONVERGED */
669
670 #if defined(WIFI_POS_CONVERGED) && defined(WLAN_FEATURE_RTT_11AZ_SUPPORT)
671 /**
672 * wifi_pos_set_rsta_sec_ltf_cap() - Set RSTA secure LTF capability
673 * @val: Value
674 *
675 * Return: None
676 **/
677 void
678 wifi_pos_set_rsta_sec_ltf_cap(bool val);
679
680 /**
681 * wifi_pos_get_rsta_sec_ltf_cap - Get RSTA secure LTF capability
682 *
683 * Return: True or false
684 */
685 bool wifi_pos_get_rsta_sec_ltf_cap(void);
686
687 /**
688 * wifi_pos_set_rsta_11az_ranging_cap() - Enable/Disable R-STA 11az ranging
689 * @val: Value to set
690 */
691 void wifi_pos_set_rsta_11az_ranging_cap(uint32_t val);
692
693 /**
694 * wifi_pos_get_rsta_11az_ranging_cap() - Get if RSTA 11az ranging is enabled
695 *
696 * Return: value if 11az TB/NTB ranging is enabled
697 */
698 uint32_t wifi_pos_get_rsta_11az_ranging_cap(void);
699 #endif
700 #endif /* _WIFI_POS_API_H_ */
701