xref: /wlan-driver/qca-wifi-host-cmn/umac/wifi_pos/src/wifi_pos_api.c (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2017-2020 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
4*5113495bSYour Name  *
5*5113495bSYour Name  * Permission to use, copy, modify, and/or distribute this software for
6*5113495bSYour Name  * any purpose with or without fee is hereby granted, provided that the
7*5113495bSYour Name  * above copyright notice and this permission notice appear in all
8*5113495bSYour Name  * copies.
9*5113495bSYour Name  *
10*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11*5113495bSYour Name  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12*5113495bSYour Name  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13*5113495bSYour Name  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14*5113495bSYour Name  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15*5113495bSYour Name  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16*5113495bSYour Name  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17*5113495bSYour Name  * PERFORMANCE OF THIS SOFTWARE.
18*5113495bSYour Name  */
19*5113495bSYour Name /**
20*5113495bSYour Name  * DOC: wifi_pos_api.c
21*5113495bSYour Name  * This file defines the APIs wifi_pos component.
22*5113495bSYour Name  */
23*5113495bSYour Name 
24*5113495bSYour Name #include <wlan_lmac_if_def.h>
25*5113495bSYour Name #include "wifi_pos_api.h"
26*5113495bSYour Name #include "wifi_pos_utils_i.h"
27*5113495bSYour Name #include "wifi_pos_main_i.h"
28*5113495bSYour Name #include "os_if_wifi_pos.h"
29*5113495bSYour Name #include "target_if_wifi_pos.h"
30*5113495bSYour Name #include "wlan_objmgr_cmn.h"
31*5113495bSYour Name #include "wlan_objmgr_global_obj.h"
32*5113495bSYour Name #include "wlan_objmgr_psoc_obj.h"
33*5113495bSYour Name #include "wlan_objmgr_peer_obj.h"
34*5113495bSYour Name #include "wlan_lmac_if_def.h"
35*5113495bSYour Name 
36*5113495bSYour Name struct wlan_lmac_if_wifi_pos_rx_ops *
wifi_pos_get_rx_ops(struct wlan_objmgr_psoc * psoc)37*5113495bSYour Name wifi_pos_get_rx_ops(struct wlan_objmgr_psoc *psoc)
38*5113495bSYour Name {
39*5113495bSYour Name 	struct wlan_lmac_if_rx_ops *rx_ops;
40*5113495bSYour Name 
41*5113495bSYour Name 	if (!psoc) {
42*5113495bSYour Name 		wifi_pos_err("psoc is null");
43*5113495bSYour Name 		return NULL;
44*5113495bSYour Name 	}
45*5113495bSYour Name 
46*5113495bSYour Name 	rx_ops = wlan_psoc_get_lmac_if_rxops(psoc);
47*5113495bSYour Name 	if (!rx_ops) {
48*5113495bSYour Name 		wifi_pos_err("rx_ops is NULL");
49*5113495bSYour Name 		return NULL;
50*5113495bSYour Name 	}
51*5113495bSYour Name 
52*5113495bSYour Name 	return &rx_ops->wifi_pos_rx_ops;
53*5113495bSYour Name }
54*5113495bSYour Name 
wifi_pos_get_legacy_ops(void)55*5113495bSYour Name struct wifi_pos_legacy_ops *wifi_pos_get_legacy_ops(void)
56*5113495bSYour Name {
57*5113495bSYour Name 	struct wifi_pos_psoc_priv_obj *wifi_pos_obj =
58*5113495bSYour Name 			wifi_pos_get_psoc_priv_obj(wifi_pos_get_psoc());
59*5113495bSYour Name 
60*5113495bSYour Name 	if (!wifi_pos_obj)
61*5113495bSYour Name 		return NULL;
62*5113495bSYour Name 
63*5113495bSYour Name 	return wifi_pos_obj->legacy_ops;
64*5113495bSYour Name }
65*5113495bSYour Name 
66*5113495bSYour Name QDF_STATUS
wifi_pos_set_legacy_ops(struct wlan_objmgr_psoc * psoc,struct wifi_pos_legacy_ops * legacy_ops)67*5113495bSYour Name wifi_pos_set_legacy_ops(struct wlan_objmgr_psoc *psoc,
68*5113495bSYour Name 			struct wifi_pos_legacy_ops *legacy_ops)
69*5113495bSYour Name {
70*5113495bSYour Name 	struct wifi_pos_psoc_priv_obj *wifi_pos_obj =
71*5113495bSYour Name 			wifi_pos_get_psoc_priv_obj(wifi_pos_get_psoc());
72*5113495bSYour Name 
73*5113495bSYour Name 	if (!wifi_pos_obj)
74*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
75*5113495bSYour Name 
76*5113495bSYour Name 	wifi_pos_obj->legacy_ops = legacy_ops;
77*5113495bSYour Name 
78*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
79*5113495bSYour Name }
80*5113495bSYour Name 
81*5113495bSYour Name struct wlan_lmac_if_wifi_pos_tx_ops *
wifi_pos_get_tx_ops(struct wlan_objmgr_psoc * psoc)82*5113495bSYour Name wifi_pos_get_tx_ops(struct wlan_objmgr_psoc *psoc)
83*5113495bSYour Name {
84*5113495bSYour Name 	struct wlan_lmac_if_tx_ops *tx_ops;
85*5113495bSYour Name 
86*5113495bSYour Name 	if (!psoc) {
87*5113495bSYour Name 		wifi_pos_err("psoc is null");
88*5113495bSYour Name 		return NULL;
89*5113495bSYour Name 	}
90*5113495bSYour Name 
91*5113495bSYour Name 	tx_ops = wlan_psoc_get_lmac_if_txops(psoc);
92*5113495bSYour Name 	if (!tx_ops) {
93*5113495bSYour Name 		wifi_pos_err("tx_ops is NULL");
94*5113495bSYour Name 		return NULL;
95*5113495bSYour Name 	}
96*5113495bSYour Name 
97*5113495bSYour Name 	return &tx_ops->wifi_pos_tx_ops;
98*5113495bSYour Name }
99*5113495bSYour Name 
wifi_pos_init(void)100*5113495bSYour Name QDF_STATUS wifi_pos_init(void)
101*5113495bSYour Name {
102*5113495bSYour Name 	QDF_STATUS status;
103*5113495bSYour Name 
104*5113495bSYour Name 	wifi_pos_lock_init();
105*5113495bSYour Name 
106*5113495bSYour Name 	/* register psoc create handler functions. */
107*5113495bSYour Name 	status = wlan_objmgr_register_psoc_create_handler(
108*5113495bSYour Name 		WLAN_UMAC_COMP_WIFI_POS,
109*5113495bSYour Name 		wifi_pos_psoc_obj_created_notification,
110*5113495bSYour Name 		NULL);
111*5113495bSYour Name 	if (QDF_IS_STATUS_ERROR(status)) {
112*5113495bSYour Name 		wifi_pos_err("register_psoc_create_handler failed, status: %d",
113*5113495bSYour Name 			     status);
114*5113495bSYour Name 		return status;
115*5113495bSYour Name 	}
116*5113495bSYour Name 
117*5113495bSYour Name 	/* register psoc delete handler functions. */
118*5113495bSYour Name 	status = wlan_objmgr_register_psoc_destroy_handler(
119*5113495bSYour Name 		WLAN_UMAC_COMP_WIFI_POS,
120*5113495bSYour Name 		wifi_pos_psoc_obj_destroyed_notification,
121*5113495bSYour Name 		NULL);
122*5113495bSYour Name 	if (QDF_IS_STATUS_ERROR(status)) {
123*5113495bSYour Name 		wifi_pos_err("register_psoc_destroy_handler failed, status: %d",
124*5113495bSYour Name 			     status);
125*5113495bSYour Name 		goto fail_psoc_destroy_handler;
126*5113495bSYour Name 	}
127*5113495bSYour Name 
128*5113495bSYour Name 	status = wlan_objmgr_register_vdev_create_handler(
129*5113495bSYour Name 			WLAN_UMAC_COMP_WIFI_POS,
130*5113495bSYour Name 			wifi_pos_vdev_created_notification, NULL);
131*5113495bSYour Name 	if (QDF_IS_STATUS_ERROR(status)) {
132*5113495bSYour Name 		wifi_pos_err("register_vdev_create_handler failed, status: %d",
133*5113495bSYour Name 			     status);
134*5113495bSYour Name 		goto fail_vdev_create_handler;
135*5113495bSYour Name 	}
136*5113495bSYour Name 
137*5113495bSYour Name 	status = wlan_objmgr_register_vdev_destroy_handler(
138*5113495bSYour Name 			WLAN_UMAC_COMP_WIFI_POS,
139*5113495bSYour Name 			wifi_pos_vdev_destroyed_notification, NULL);
140*5113495bSYour Name 	if (QDF_IS_STATUS_ERROR(status)) {
141*5113495bSYour Name 		wifi_pos_err("register_vdev_destroy_handler failed, status: %d",
142*5113495bSYour Name 			     status);
143*5113495bSYour Name 		goto fail_vdev_destroy_handler;
144*5113495bSYour Name 	}
145*5113495bSYour Name 
146*5113495bSYour Name 	status =  wlan_objmgr_register_peer_create_handler(
147*5113495bSYour Name 			WLAN_UMAC_COMP_WIFI_POS,
148*5113495bSYour Name 			wifi_pos_peer_object_created_notification,
149*5113495bSYour Name 			NULL);
150*5113495bSYour Name 	if (QDF_IS_STATUS_ERROR(status)) {
151*5113495bSYour Name 		wifi_pos_err("peer create register notification failed");
152*5113495bSYour Name 		goto fail_peer_create_handler;
153*5113495bSYour Name 	}
154*5113495bSYour Name 
155*5113495bSYour Name 	status = wlan_objmgr_register_peer_destroy_handler(
156*5113495bSYour Name 				WLAN_UMAC_COMP_WIFI_POS,
157*5113495bSYour Name 				wifi_pos_peer_object_destroyed_notification,
158*5113495bSYour Name 				NULL);
159*5113495bSYour Name 	if (QDF_IS_STATUS_ERROR(status)) {
160*5113495bSYour Name 		wifi_pos_err("peer destroy register notification failed");
161*5113495bSYour Name 		goto fail_peer_destroy_handler;
162*5113495bSYour Name 	}
163*5113495bSYour Name 
164*5113495bSYour Name 	return status;
165*5113495bSYour Name 
166*5113495bSYour Name fail_peer_destroy_handler:
167*5113495bSYour Name 	wlan_objmgr_unregister_peer_create_handler(
168*5113495bSYour Name 			WLAN_UMAC_COMP_WIFI_POS,
169*5113495bSYour Name 			wifi_pos_peer_object_created_notification,
170*5113495bSYour Name 			NULL);
171*5113495bSYour Name fail_peer_create_handler:
172*5113495bSYour Name 	wlan_objmgr_unregister_vdev_destroy_handler(
173*5113495bSYour Name 			WLAN_UMAC_COMP_WIFI_POS,
174*5113495bSYour Name 			wifi_pos_vdev_destroyed_notification, NULL);
175*5113495bSYour Name 
176*5113495bSYour Name fail_vdev_destroy_handler:
177*5113495bSYour Name 	wlan_objmgr_unregister_vdev_create_handler(
178*5113495bSYour Name 			WLAN_UMAC_COMP_WIFI_POS,
179*5113495bSYour Name 			wifi_pos_vdev_created_notification, NULL);
180*5113495bSYour Name 
181*5113495bSYour Name fail_vdev_create_handler:
182*5113495bSYour Name 	wlan_objmgr_unregister_psoc_destroy_handler(
183*5113495bSYour Name 			WLAN_UMAC_COMP_WIFI_POS,
184*5113495bSYour Name 			wifi_pos_psoc_obj_destroyed_notification, NULL);
185*5113495bSYour Name 
186*5113495bSYour Name fail_psoc_destroy_handler:
187*5113495bSYour Name 	wlan_objmgr_unregister_psoc_create_handler(
188*5113495bSYour Name 			WLAN_UMAC_COMP_WIFI_POS,
189*5113495bSYour Name 			wifi_pos_psoc_obj_created_notification, NULL);
190*5113495bSYour Name 
191*5113495bSYour Name 	return status;
192*5113495bSYour Name }
193*5113495bSYour Name 
wifi_pos_deinit(void)194*5113495bSYour Name QDF_STATUS wifi_pos_deinit(void)
195*5113495bSYour Name {
196*5113495bSYour Name 	QDF_STATUS status;
197*5113495bSYour Name 
198*5113495bSYour Name 	status = wlan_objmgr_unregister_peer_destroy_handler(
199*5113495bSYour Name 				WLAN_UMAC_COMP_WIFI_POS,
200*5113495bSYour Name 				wifi_pos_peer_object_destroyed_notification,
201*5113495bSYour Name 				NULL);
202*5113495bSYour Name 	if (QDF_IS_STATUS_ERROR(status))
203*5113495bSYour Name 		wifi_pos_err("unable to unregister peer destroy handle");
204*5113495bSYour Name 
205*5113495bSYour Name 	status = wlan_objmgr_unregister_peer_create_handler(
206*5113495bSYour Name 				WLAN_UMAC_COMP_WIFI_POS,
207*5113495bSYour Name 				wifi_pos_peer_object_created_notification,
208*5113495bSYour Name 				NULL);
209*5113495bSYour Name 	if (QDF_IS_STATUS_ERROR(status))
210*5113495bSYour Name 		wifi_pos_err("unable to unregister peer create handle");
211*5113495bSYour Name 
212*5113495bSYour Name 	status = wlan_objmgr_unregister_vdev_destroy_handler(
213*5113495bSYour Name 				WLAN_UMAC_COMP_WIFI_POS,
214*5113495bSYour Name 				wifi_pos_vdev_destroyed_notification, NULL);
215*5113495bSYour Name 	if (QDF_IS_STATUS_ERROR(status))
216*5113495bSYour Name 		wifi_pos_err("unregister_vdev_destroy_handler failed, status: %d",
217*5113495bSYour Name 			     status);
218*5113495bSYour Name 
219*5113495bSYour Name 	status = wlan_objmgr_unregister_vdev_create_handler(
220*5113495bSYour Name 				WLAN_UMAC_COMP_WIFI_POS,
221*5113495bSYour Name 				wifi_pos_vdev_created_notification, NULL);
222*5113495bSYour Name 	if (QDF_IS_STATUS_ERROR(status))
223*5113495bSYour Name 		wifi_pos_err("unregister_vdev_create_handler failed, status: %d",
224*5113495bSYour Name 			     status);
225*5113495bSYour Name 
226*5113495bSYour Name 	/* deregister psoc create handler functions. */
227*5113495bSYour Name 	status = wlan_objmgr_unregister_psoc_create_handler(
228*5113495bSYour Name 				WLAN_UMAC_COMP_WIFI_POS,
229*5113495bSYour Name 				wifi_pos_psoc_obj_created_notification,
230*5113495bSYour Name 				NULL);
231*5113495bSYour Name 	if (QDF_IS_STATUS_ERROR(status)) {
232*5113495bSYour Name 		wifi_pos_err("unregister_psoc_create_handler failed, status: %d",
233*5113495bSYour Name 			     status);
234*5113495bSYour Name 		return status;
235*5113495bSYour Name 	}
236*5113495bSYour Name 
237*5113495bSYour Name 	/* deregister psoc delete handler functions. */
238*5113495bSYour Name 	status = wlan_objmgr_unregister_psoc_destroy_handler(
239*5113495bSYour Name 				WLAN_UMAC_COMP_WIFI_POS,
240*5113495bSYour Name 				wifi_pos_psoc_obj_destroyed_notification,
241*5113495bSYour Name 				NULL);
242*5113495bSYour Name 	if (QDF_IS_STATUS_ERROR(status)) {
243*5113495bSYour Name 		wifi_pos_err("unregister_psoc_destroy_handler failed, status: %d",
244*5113495bSYour Name 			     status);
245*5113495bSYour Name 	}
246*5113495bSYour Name 
247*5113495bSYour Name 	wifi_pos_lock_deinit();
248*5113495bSYour Name 
249*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
250*5113495bSYour Name }
251*5113495bSYour Name 
wifi_pos_psoc_enable(struct wlan_objmgr_psoc * psoc)252*5113495bSYour Name QDF_STATUS wifi_pos_psoc_enable(struct wlan_objmgr_psoc *psoc)
253*5113495bSYour Name {
254*5113495bSYour Name 	QDF_STATUS status;
255*5113495bSYour Name 	struct wlan_lmac_if_wifi_pos_tx_ops *tx_ops;
256*5113495bSYour Name 
257*5113495bSYour Name 	tx_ops = wifi_pos_get_tx_ops(psoc);
258*5113495bSYour Name 	if (!tx_ops) {
259*5113495bSYour Name 		wifi_pos_err("tx_ops is null");
260*5113495bSYour Name 		return QDF_STATUS_E_NULL_VALUE;
261*5113495bSYour Name 	}
262*5113495bSYour Name 
263*5113495bSYour Name 	status = tx_ops->wifi_pos_register_events(psoc);
264*5113495bSYour Name 
265*5113495bSYour Name 	if (QDF_IS_STATUS_ERROR(status))
266*5113495bSYour Name 		wifi_pos_err("target_if_wifi_pos_register_events failed");
267*5113495bSYour Name 
268*5113495bSYour Name 	return status;
269*5113495bSYour Name }
270*5113495bSYour Name 
wifi_pos_psoc_disable(struct wlan_objmgr_psoc * psoc)271*5113495bSYour Name QDF_STATUS wifi_pos_psoc_disable(struct wlan_objmgr_psoc *psoc)
272*5113495bSYour Name {
273*5113495bSYour Name 	QDF_STATUS status;
274*5113495bSYour Name 	struct wlan_lmac_if_wifi_pos_tx_ops *tx_ops;
275*5113495bSYour Name 
276*5113495bSYour Name 	tx_ops = wifi_pos_get_tx_ops(psoc);
277*5113495bSYour Name 	if (!tx_ops) {
278*5113495bSYour Name 		wifi_pos_err("tx_ops is null");
279*5113495bSYour Name 		return QDF_STATUS_E_NULL_VALUE;
280*5113495bSYour Name 	}
281*5113495bSYour Name 
282*5113495bSYour Name 	status = tx_ops->wifi_pos_deregister_events(psoc);
283*5113495bSYour Name 
284*5113495bSYour Name 	if (QDF_IS_STATUS_ERROR(status))
285*5113495bSYour Name 		wifi_pos_err("target_if_wifi_pos_deregister_events failed");
286*5113495bSYour Name 
287*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
288*5113495bSYour Name }
289*5113495bSYour Name 
290*5113495bSYour Name struct wlan_wifi_pos_peer_priv_obj *
wifi_pos_get_peer_private_object(struct wlan_objmgr_peer * peer)291*5113495bSYour Name wifi_pos_get_peer_private_object(struct wlan_objmgr_peer *peer)
292*5113495bSYour Name {
293*5113495bSYour Name 	struct wlan_wifi_pos_peer_priv_obj *peer_priv;
294*5113495bSYour Name 
295*5113495bSYour Name 	if (!peer) {
296*5113495bSYour Name 		wifi_pos_err("Peer is NULL");
297*5113495bSYour Name 		return NULL;
298*5113495bSYour Name 	}
299*5113495bSYour Name 
300*5113495bSYour Name 	peer_priv =
301*5113495bSYour Name 		wlan_objmgr_peer_get_comp_private_obj(peer,
302*5113495bSYour Name 						      WLAN_UMAC_COMP_WIFI_POS);
303*5113495bSYour Name 
304*5113495bSYour Name 	return peer_priv;
305*5113495bSYour Name }
306*5113495bSYour Name 
wifi_pos_set_oem_target_type(struct wlan_objmgr_psoc * psoc,uint32_t val)307*5113495bSYour Name void wifi_pos_set_oem_target_type(struct wlan_objmgr_psoc *psoc, uint32_t val)
308*5113495bSYour Name {
309*5113495bSYour Name 	struct wifi_pos_psoc_priv_obj *wifi_pos_psoc =
310*5113495bSYour Name 			wifi_pos_get_psoc_priv_obj(psoc);
311*5113495bSYour Name 
312*5113495bSYour Name 	if (!wifi_pos_psoc) {
313*5113495bSYour Name 		wifi_pos_err("wifi_pos priv obj is null");
314*5113495bSYour Name 		return;
315*5113495bSYour Name 	}
316*5113495bSYour Name 
317*5113495bSYour Name 	qdf_spin_lock_bh(&wifi_pos_psoc->wifi_pos_lock);
318*5113495bSYour Name 	wifi_pos_psoc->oem_target_type = val;
319*5113495bSYour Name 	qdf_spin_unlock_bh(&wifi_pos_psoc->wifi_pos_lock);
320*5113495bSYour Name }
321*5113495bSYour Name 
wifi_pos_set_oem_fw_version(struct wlan_objmgr_psoc * psoc,uint32_t val)322*5113495bSYour Name void wifi_pos_set_oem_fw_version(struct wlan_objmgr_psoc *psoc, uint32_t val)
323*5113495bSYour Name {
324*5113495bSYour Name 	struct wifi_pos_psoc_priv_obj *wifi_pos_psoc =
325*5113495bSYour Name 			wifi_pos_get_psoc_priv_obj(psoc);
326*5113495bSYour Name 
327*5113495bSYour Name 	if (!wifi_pos_psoc) {
328*5113495bSYour Name 		wifi_pos_err("wifi_pos priv obj is null");
329*5113495bSYour Name 		return;
330*5113495bSYour Name 	}
331*5113495bSYour Name 
332*5113495bSYour Name 	qdf_spin_lock_bh(&wifi_pos_psoc->wifi_pos_lock);
333*5113495bSYour Name 	wifi_pos_psoc->oem_fw_version = val;
334*5113495bSYour Name 	qdf_spin_unlock_bh(&wifi_pos_psoc->wifi_pos_lock);
335*5113495bSYour Name }
336*5113495bSYour Name 
wifi_pos_set_drv_ver_major(struct wlan_objmgr_psoc * psoc,uint8_t val)337*5113495bSYour Name void wifi_pos_set_drv_ver_major(struct wlan_objmgr_psoc *psoc, uint8_t val)
338*5113495bSYour Name {
339*5113495bSYour Name 	struct wifi_pos_psoc_priv_obj *wifi_pos_psoc =
340*5113495bSYour Name 			wifi_pos_get_psoc_priv_obj(psoc);
341*5113495bSYour Name 
342*5113495bSYour Name 	if (!wifi_pos_psoc) {
343*5113495bSYour Name 		wifi_pos_err("wifi_pos priv obj is null");
344*5113495bSYour Name 		return;
345*5113495bSYour Name 	}
346*5113495bSYour Name 
347*5113495bSYour Name 	qdf_spin_lock_bh(&wifi_pos_psoc->wifi_pos_lock);
348*5113495bSYour Name 	wifi_pos_psoc->driver_version.major = val;
349*5113495bSYour Name 	qdf_spin_unlock_bh(&wifi_pos_psoc->wifi_pos_lock);
350*5113495bSYour Name }
351*5113495bSYour Name 
wifi_pos_set_drv_ver_minor(struct wlan_objmgr_psoc * psoc,uint8_t val)352*5113495bSYour Name void wifi_pos_set_drv_ver_minor(struct wlan_objmgr_psoc *psoc, uint8_t val)
353*5113495bSYour Name {
354*5113495bSYour Name 	struct wifi_pos_psoc_priv_obj *wifi_pos_psoc =
355*5113495bSYour Name 			wifi_pos_get_psoc_priv_obj(psoc);
356*5113495bSYour Name 
357*5113495bSYour Name 	if (!wifi_pos_psoc) {
358*5113495bSYour Name 		wifi_pos_err("wifi_pos priv obj is null");
359*5113495bSYour Name 		return;
360*5113495bSYour Name 	}
361*5113495bSYour Name 
362*5113495bSYour Name 	qdf_spin_lock_bh(&wifi_pos_psoc->wifi_pos_lock);
363*5113495bSYour Name 	wifi_pos_psoc->driver_version.minor = val;
364*5113495bSYour Name 	qdf_spin_unlock_bh(&wifi_pos_psoc->wifi_pos_lock);
365*5113495bSYour Name }
366*5113495bSYour Name 
wifi_pos_set_drv_ver_patch(struct wlan_objmgr_psoc * psoc,uint8_t val)367*5113495bSYour Name void wifi_pos_set_drv_ver_patch(struct wlan_objmgr_psoc *psoc, uint8_t val)
368*5113495bSYour Name {
369*5113495bSYour Name 	struct wifi_pos_psoc_priv_obj *wifi_pos_psoc =
370*5113495bSYour Name 			wifi_pos_get_psoc_priv_obj(psoc);
371*5113495bSYour Name 
372*5113495bSYour Name 	if (!wifi_pos_psoc) {
373*5113495bSYour Name 		wifi_pos_err("wifi_pos priv obj is null");
374*5113495bSYour Name 		return;
375*5113495bSYour Name 	}
376*5113495bSYour Name 
377*5113495bSYour Name 	qdf_spin_lock_bh(&wifi_pos_psoc->wifi_pos_lock);
378*5113495bSYour Name 	wifi_pos_psoc->driver_version.patch = val;
379*5113495bSYour Name 	qdf_spin_unlock_bh(&wifi_pos_psoc->wifi_pos_lock);
380*5113495bSYour Name }
381*5113495bSYour Name 
wifi_pos_set_drv_ver_build(struct wlan_objmgr_psoc * psoc,uint8_t val)382*5113495bSYour Name void wifi_pos_set_drv_ver_build(struct wlan_objmgr_psoc *psoc, uint8_t val)
383*5113495bSYour Name {
384*5113495bSYour Name 	struct wifi_pos_psoc_priv_obj *wifi_pos_psoc =
385*5113495bSYour Name 			wifi_pos_get_psoc_priv_obj(psoc);
386*5113495bSYour Name 
387*5113495bSYour Name 	if (!wifi_pos_psoc) {
388*5113495bSYour Name 		wifi_pos_err("wifi_pos priv obj is null");
389*5113495bSYour Name 		return;
390*5113495bSYour Name 	}
391*5113495bSYour Name 
392*5113495bSYour Name 	qdf_spin_lock_bh(&wifi_pos_psoc->wifi_pos_lock);
393*5113495bSYour Name 	wifi_pos_psoc->driver_version.build = val;
394*5113495bSYour Name 	qdf_spin_unlock_bh(&wifi_pos_psoc->wifi_pos_lock);
395*5113495bSYour Name }
396*5113495bSYour Name 
wifi_pos_set_dwell_time_min(struct wlan_objmgr_psoc * psoc,uint16_t val)397*5113495bSYour Name void wifi_pos_set_dwell_time_min(struct wlan_objmgr_psoc *psoc, uint16_t val)
398*5113495bSYour Name {
399*5113495bSYour Name 	struct wifi_pos_psoc_priv_obj *wifi_pos_psoc =
400*5113495bSYour Name 			wifi_pos_get_psoc_priv_obj(psoc);
401*5113495bSYour Name 
402*5113495bSYour Name 	if (!wifi_pos_psoc) {
403*5113495bSYour Name 		wifi_pos_err("wifi_pos priv obj is null");
404*5113495bSYour Name 		return;
405*5113495bSYour Name 	}
406*5113495bSYour Name 
407*5113495bSYour Name 	qdf_spin_lock_bh(&wifi_pos_psoc->wifi_pos_lock);
408*5113495bSYour Name 	wifi_pos_psoc->allowed_dwell_time_min = val;
409*5113495bSYour Name 	qdf_spin_unlock_bh(&wifi_pos_psoc->wifi_pos_lock);
410*5113495bSYour Name }
wifi_pos_set_dwell_time_max(struct wlan_objmgr_psoc * psoc,uint16_t val)411*5113495bSYour Name void wifi_pos_set_dwell_time_max(struct wlan_objmgr_psoc *psoc, uint16_t val)
412*5113495bSYour Name {
413*5113495bSYour Name 	struct wifi_pos_psoc_priv_obj *wifi_pos_psoc =
414*5113495bSYour Name 			wifi_pos_get_psoc_priv_obj(psoc);
415*5113495bSYour Name 
416*5113495bSYour Name 	if (!wifi_pos_psoc) {
417*5113495bSYour Name 		wifi_pos_err("wifi_pos priv obj is null");
418*5113495bSYour Name 		return;
419*5113495bSYour Name 	}
420*5113495bSYour Name 
421*5113495bSYour Name 	qdf_spin_lock_bh(&wifi_pos_psoc->wifi_pos_lock);
422*5113495bSYour Name 	wifi_pos_psoc->allowed_dwell_time_max = val;
423*5113495bSYour Name 	qdf_spin_unlock_bh(&wifi_pos_psoc->wifi_pos_lock);
424*5113495bSYour Name }
425*5113495bSYour Name 
wifi_pos_set_current_dwell_time_max(struct wlan_objmgr_psoc * psoc,uint16_t val)426*5113495bSYour Name void wifi_pos_set_current_dwell_time_max(struct wlan_objmgr_psoc *psoc,
427*5113495bSYour Name 					 uint16_t val)
428*5113495bSYour Name {
429*5113495bSYour Name 	struct wifi_pos_psoc_priv_obj *wifi_pos_psoc =
430*5113495bSYour Name 			wifi_pos_get_psoc_priv_obj(psoc);
431*5113495bSYour Name 
432*5113495bSYour Name 	if (!wifi_pos_psoc) {
433*5113495bSYour Name 		wifi_pos_err("wifi_pos priv obj is null");
434*5113495bSYour Name 		return;
435*5113495bSYour Name 	}
436*5113495bSYour Name 
437*5113495bSYour Name 	qdf_spin_lock_bh(&wifi_pos_psoc->wifi_pos_lock);
438*5113495bSYour Name 	wifi_pos_psoc->current_dwell_time_max = val;
439*5113495bSYour Name 	qdf_spin_unlock_bh(&wifi_pos_psoc->wifi_pos_lock);
440*5113495bSYour Name }
441*5113495bSYour Name 
wifi_pos_set_current_dwell_time_min(struct wlan_objmgr_psoc * psoc,uint16_t val)442*5113495bSYour Name void wifi_pos_set_current_dwell_time_min(struct wlan_objmgr_psoc *psoc,
443*5113495bSYour Name 					 uint16_t val)
444*5113495bSYour Name {
445*5113495bSYour Name 	struct wifi_pos_psoc_priv_obj *wifi_pos_psoc =
446*5113495bSYour Name 			wifi_pos_get_psoc_priv_obj(psoc);
447*5113495bSYour Name 
448*5113495bSYour Name 	if (!wifi_pos_psoc) {
449*5113495bSYour Name 		wifi_pos_err("wifi_pos priv obj is null");
450*5113495bSYour Name 		return;
451*5113495bSYour Name 	}
452*5113495bSYour Name 
453*5113495bSYour Name 	qdf_spin_lock_bh(&wifi_pos_psoc->wifi_pos_lock);
454*5113495bSYour Name 	wifi_pos_psoc->current_dwell_time_max = val;
455*5113495bSYour Name 	qdf_spin_unlock_bh(&wifi_pos_psoc->wifi_pos_lock);
456*5113495bSYour Name }
457*5113495bSYour Name 
wifi_pos_get_app_pid(struct wlan_objmgr_psoc * psoc)458*5113495bSYour Name uint32_t wifi_pos_get_app_pid(struct wlan_objmgr_psoc *psoc)
459*5113495bSYour Name {
460*5113495bSYour Name 	uint32_t app_pid;
461*5113495bSYour Name 	struct wifi_pos_psoc_priv_obj *wifi_pos_psoc =
462*5113495bSYour Name 				wifi_pos_get_psoc_priv_obj(psoc);
463*5113495bSYour Name 
464*5113495bSYour Name 	if (!wifi_pos_psoc) {
465*5113495bSYour Name 		wifi_pos_err("wifi_pos priv obj is null");
466*5113495bSYour Name 		return 0;
467*5113495bSYour Name 	}
468*5113495bSYour Name 
469*5113495bSYour Name 	qdf_spin_lock_bh(&wifi_pos_psoc->wifi_pos_lock);
470*5113495bSYour Name 	app_pid = wifi_pos_psoc->app_pid;
471*5113495bSYour Name 	qdf_spin_unlock_bh(&wifi_pos_psoc->wifi_pos_lock);
472*5113495bSYour Name 
473*5113495bSYour Name 	return app_pid;
474*5113495bSYour Name 
475*5113495bSYour Name }
476*5113495bSYour Name 
wifi_pos_is_app_registered(struct wlan_objmgr_psoc * psoc)477*5113495bSYour Name bool wifi_pos_is_app_registered(struct wlan_objmgr_psoc *psoc)
478*5113495bSYour Name {
479*5113495bSYour Name 	bool is_app_registered;
480*5113495bSYour Name 	struct wifi_pos_psoc_priv_obj *wifi_pos_psoc =
481*5113495bSYour Name 				wifi_pos_get_psoc_priv_obj(psoc);
482*5113495bSYour Name 
483*5113495bSYour Name 	if (!wifi_pos_psoc) {
484*5113495bSYour Name 		wifi_pos_err("wifi_pos priv obj is null");
485*5113495bSYour Name 		return false;
486*5113495bSYour Name 	}
487*5113495bSYour Name 
488*5113495bSYour Name 	qdf_spin_lock_bh(&wifi_pos_psoc->wifi_pos_lock);
489*5113495bSYour Name 	is_app_registered = wifi_pos_psoc->is_app_registered;
490*5113495bSYour Name 	qdf_spin_unlock_bh(&wifi_pos_psoc->wifi_pos_lock);
491*5113495bSYour Name 
492*5113495bSYour Name 	return is_app_registered;
493*5113495bSYour Name }
494*5113495bSYour Name 
495*5113495bSYour Name #ifdef WLAN_FEATURE_CIF_CFR
wifi_pos_init_cir_cfr_rings(struct wlan_objmgr_psoc * psoc,void * hal_soc,uint8_t num_mac,void * buf)496*5113495bSYour Name QDF_STATUS wifi_pos_init_cir_cfr_rings(struct wlan_objmgr_psoc *psoc,
497*5113495bSYour Name 				   void *hal_soc, uint8_t num_mac, void *buf)
498*5113495bSYour Name {
499*5113495bSYour Name 	return target_if_wifi_pos_init_cir_cfr_rings(psoc, hal_soc,
500*5113495bSYour Name 						     num_mac, buf);
501*5113495bSYour Name }
502*5113495bSYour Name #endif
503*5113495bSYour Name 
504*5113495bSYour Name QDF_STATUS
wifi_pos_register_get_phy_mode_cb(struct wlan_objmgr_psoc * psoc,void (* handler)(qdf_freq_t,uint32_t,uint32_t *))505*5113495bSYour Name wifi_pos_register_get_phy_mode_cb(struct wlan_objmgr_psoc *psoc,
506*5113495bSYour Name 				  void (*handler)(qdf_freq_t, uint32_t,
507*5113495bSYour Name 						  uint32_t *))
508*5113495bSYour Name {
509*5113495bSYour Name 	struct wifi_pos_psoc_priv_obj *wifi_pos_psoc;
510*5113495bSYour Name 
511*5113495bSYour Name 	if (!psoc) {
512*5113495bSYour Name 		wifi_pos_err("psoc is null");
513*5113495bSYour Name 		return QDF_STATUS_E_NULL_VALUE;
514*5113495bSYour Name 	}
515*5113495bSYour Name 
516*5113495bSYour Name 	if (!handler) {
517*5113495bSYour Name 		wifi_pos_err("Null callback");
518*5113495bSYour Name 		return QDF_STATUS_E_NULL_VALUE;
519*5113495bSYour Name 	}
520*5113495bSYour Name 	wifi_pos_psoc = wifi_pos_get_psoc_priv_obj(psoc);
521*5113495bSYour Name 	if (!wifi_pos_psoc) {
522*5113495bSYour Name 		wifi_pos_err("wifi_pos priv obj is null");
523*5113495bSYour Name 		return QDF_STATUS_E_NULL_VALUE;
524*5113495bSYour Name 	}
525*5113495bSYour Name 
526*5113495bSYour Name 	wifi_pos_psoc->wifi_pos_get_phy_mode = handler;
527*5113495bSYour Name 
528*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
529*5113495bSYour Name }
530*5113495bSYour Name 
wifi_pos_register_get_fw_phy_mode_for_freq_cb(struct wlan_objmgr_psoc * psoc,void (* handler)(uint32_t,uint32_t,uint32_t *))531*5113495bSYour Name QDF_STATUS wifi_pos_register_get_fw_phy_mode_for_freq_cb(
532*5113495bSYour Name 				struct wlan_objmgr_psoc *psoc,
533*5113495bSYour Name 				void (*handler)(uint32_t, uint32_t, uint32_t *))
534*5113495bSYour Name {
535*5113495bSYour Name 	struct wifi_pos_psoc_priv_obj *wifi_pos_psoc;
536*5113495bSYour Name 
537*5113495bSYour Name 	if (!psoc) {
538*5113495bSYour Name 		wifi_pos_err("psoc is null");
539*5113495bSYour Name 		return QDF_STATUS_E_NULL_VALUE;
540*5113495bSYour Name 	}
541*5113495bSYour Name 
542*5113495bSYour Name 	if (!handler) {
543*5113495bSYour Name 		wifi_pos_err("Null callback");
544*5113495bSYour Name 		return QDF_STATUS_E_NULL_VALUE;
545*5113495bSYour Name 	}
546*5113495bSYour Name 	wifi_pos_psoc = wifi_pos_get_psoc_priv_obj(psoc);
547*5113495bSYour Name 	if (!wifi_pos_psoc) {
548*5113495bSYour Name 		wifi_pos_err("wifi_pos priv obj is null");
549*5113495bSYour Name 		return QDF_STATUS_E_NULL_VALUE;
550*5113495bSYour Name 	}
551*5113495bSYour Name 
552*5113495bSYour Name 	wifi_pos_psoc->wifi_pos_get_fw_phy_mode_for_freq = handler;
553*5113495bSYour Name 
554*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
555*5113495bSYour Name }
556*5113495bSYour Name 
557*5113495bSYour Name #ifndef CNSS_GENL
wifi_pos_register_get_pdev_id_by_dev_name(struct wlan_objmgr_psoc * psoc,QDF_STATUS (* handler)(char * dev_name,uint8_t * pdev_id,struct wlan_objmgr_psoc ** psoc))558*5113495bSYour Name QDF_STATUS wifi_pos_register_get_pdev_id_by_dev_name(
559*5113495bSYour Name 		struct wlan_objmgr_psoc *psoc,
560*5113495bSYour Name 		QDF_STATUS (*handler)(char *dev_name, uint8_t *pdev_id,
561*5113495bSYour Name 				      struct wlan_objmgr_psoc **psoc))
562*5113495bSYour Name {
563*5113495bSYour Name 	struct wifi_pos_psoc_priv_obj *wifi_pos_psoc = NULL;
564*5113495bSYour Name 	struct wlan_objmgr_psoc *tmp_psoc = wifi_pos_get_psoc();
565*5113495bSYour Name 
566*5113495bSYour Name 	if (!psoc) {
567*5113495bSYour Name 		wifi_pos_err("psoc is null");
568*5113495bSYour Name 		return QDF_STATUS_E_NULL_VALUE;
569*5113495bSYour Name 	}
570*5113495bSYour Name 
571*5113495bSYour Name 	if (!handler) {
572*5113495bSYour Name 		wifi_pos_err("Null callback");
573*5113495bSYour Name 		return QDF_STATUS_E_NULL_VALUE;
574*5113495bSYour Name 	}
575*5113495bSYour Name 
576*5113495bSYour Name 	if (tmp_psoc)
577*5113495bSYour Name 		wifi_pos_psoc = wifi_pos_get_psoc_priv_obj(tmp_psoc);
578*5113495bSYour Name 
579*5113495bSYour Name 	if (!wifi_pos_psoc) {
580*5113495bSYour Name 		wifi_pos_err("wifi_pos priv obj is null");
581*5113495bSYour Name 		return QDF_STATUS_E_NULL_VALUE;
582*5113495bSYour Name 	}
583*5113495bSYour Name 
584*5113495bSYour Name 	wifi_pos_psoc->wifi_pos_get_pdev_id_by_dev_name = handler;
585*5113495bSYour Name 
586*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
587*5113495bSYour Name }
588*5113495bSYour Name 
589*5113495bSYour Name #ifdef WLAN_RTT_MEASUREMENT_NOTIFICATION
wifi_pos_register_measurement_request_notification(struct wlan_objmgr_psoc * psoc,QDF_STATUS (* handler)(struct wlan_objmgr_pdev * pdev,struct rtt_channel_info * chinfo))590*5113495bSYour Name QDF_STATUS wifi_pos_register_measurement_request_notification(
591*5113495bSYour Name 		struct wlan_objmgr_psoc *psoc,
592*5113495bSYour Name 		QDF_STATUS (*handler)(struct wlan_objmgr_pdev *pdev,
593*5113495bSYour Name 				      struct rtt_channel_info *chinfo))
594*5113495bSYour Name {
595*5113495bSYour Name 	struct wifi_pos_psoc_priv_obj *wifi_pos_psoc = NULL;
596*5113495bSYour Name 	struct wlan_objmgr_psoc *tmp_psoc = wifi_pos_get_psoc();
597*5113495bSYour Name 
598*5113495bSYour Name 	if (!psoc) {
599*5113495bSYour Name 		wifi_pos_err("psoc is null");
600*5113495bSYour Name 		return QDF_STATUS_E_NULL_VALUE;
601*5113495bSYour Name 	}
602*5113495bSYour Name 
603*5113495bSYour Name 	if (!handler) {
604*5113495bSYour Name 		wifi_pos_err("Null callback");
605*5113495bSYour Name 		return QDF_STATUS_E_NULL_VALUE;
606*5113495bSYour Name 	}
607*5113495bSYour Name 
608*5113495bSYour Name 	if (tmp_psoc)
609*5113495bSYour Name 		wifi_pos_psoc = wifi_pos_get_psoc_priv_obj(tmp_psoc);
610*5113495bSYour Name 
611*5113495bSYour Name 	if (!wifi_pos_psoc) {
612*5113495bSYour Name 		wifi_pos_err("wifi_pos priv obj is null");
613*5113495bSYour Name 		return QDF_STATUS_E_NULL_VALUE;
614*5113495bSYour Name 	}
615*5113495bSYour Name 
616*5113495bSYour Name 	wifi_pos_psoc->wifi_pos_measurement_request_notification = handler;
617*5113495bSYour Name 
618*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
619*5113495bSYour Name }
620*5113495bSYour Name #endif /* WLAN_RTT_MEASUREMENT_NOTIFICATION */
621*5113495bSYour Name 
wifi_pos_register_get_max_fw_phymode_for_channels(struct wlan_objmgr_psoc * psoc,QDF_STATUS (* handler)(struct wlan_objmgr_pdev * pdev,struct wifi_pos_channel_power * chan_list,uint16_t wifi_pos_num_chans))622*5113495bSYour Name QDF_STATUS wifi_pos_register_get_max_fw_phymode_for_channels(
623*5113495bSYour Name 		struct wlan_objmgr_psoc *psoc,
624*5113495bSYour Name 		QDF_STATUS (*handler)(struct wlan_objmgr_pdev *pdev,
625*5113495bSYour Name 				      struct wifi_pos_channel_power *chan_list,
626*5113495bSYour Name 				      uint16_t wifi_pos_num_chans))
627*5113495bSYour Name {
628*5113495bSYour Name 	struct wifi_pos_psoc_priv_obj *wifi_pos_psoc = NULL;
629*5113495bSYour Name 	struct wlan_objmgr_psoc *tmp_psoc = wifi_pos_get_psoc();
630*5113495bSYour Name 
631*5113495bSYour Name 	if (!psoc) {
632*5113495bSYour Name 		wifi_pos_err("psoc is null");
633*5113495bSYour Name 		return QDF_STATUS_E_NULL_VALUE;
634*5113495bSYour Name 	}
635*5113495bSYour Name 
636*5113495bSYour Name 	if (!handler) {
637*5113495bSYour Name 		wifi_pos_err("Null callback");
638*5113495bSYour Name 		return QDF_STATUS_E_NULL_VALUE;
639*5113495bSYour Name 	}
640*5113495bSYour Name 
641*5113495bSYour Name 	if (tmp_psoc)
642*5113495bSYour Name 		wifi_pos_psoc = wifi_pos_get_psoc_priv_obj(tmp_psoc);
643*5113495bSYour Name 
644*5113495bSYour Name 	if (!wifi_pos_psoc) {
645*5113495bSYour Name 		wifi_pos_err("wifi_pos priv obj is null");
646*5113495bSYour Name 		return QDF_STATUS_E_NULL_VALUE;
647*5113495bSYour Name 	}
648*5113495bSYour Name 
649*5113495bSYour Name 	wifi_pos_psoc->wifi_pos_get_max_fw_phymode_for_channels = handler;
650*5113495bSYour Name 
651*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
652*5113495bSYour Name }
653*5113495bSYour Name #endif /* CNSS_GENL */
654*5113495bSYour Name 
wifi_pos_register_send_action(struct wlan_objmgr_psoc * psoc,void (* handler)(struct wlan_objmgr_psoc * psoc,uint32_t sub_type,uint8_t * buf,uint32_t buf_len))655*5113495bSYour Name QDF_STATUS wifi_pos_register_send_action(
656*5113495bSYour Name 				struct wlan_objmgr_psoc *psoc,
657*5113495bSYour Name 				void (*handler)(struct wlan_objmgr_psoc *psoc,
658*5113495bSYour Name 						uint32_t sub_type,
659*5113495bSYour Name 						uint8_t *buf,
660*5113495bSYour Name 						uint32_t buf_len))
661*5113495bSYour Name {
662*5113495bSYour Name 	struct wifi_pos_psoc_priv_obj *wifi_pos_psoc = NULL;
663*5113495bSYour Name 	struct wlan_objmgr_psoc *tmp_psoc = wifi_pos_get_psoc();
664*5113495bSYour Name 
665*5113495bSYour Name 	if (!psoc) {
666*5113495bSYour Name 		wifi_pos_err("psoc is null");
667*5113495bSYour Name 		return QDF_STATUS_E_NULL_VALUE;
668*5113495bSYour Name 	}
669*5113495bSYour Name 
670*5113495bSYour Name 	if (!handler) {
671*5113495bSYour Name 		wifi_pos_err("Null callback");
672*5113495bSYour Name 		return QDF_STATUS_E_NULL_VALUE;
673*5113495bSYour Name 	}
674*5113495bSYour Name 
675*5113495bSYour Name 	if (tmp_psoc)
676*5113495bSYour Name 		wifi_pos_psoc = wifi_pos_get_psoc_priv_obj(tmp_psoc);
677*5113495bSYour Name 
678*5113495bSYour Name 	if (!wifi_pos_psoc) {
679*5113495bSYour Name 		wifi_pos_err("wifi_pos priv obj is null");
680*5113495bSYour Name 		return QDF_STATUS_E_NULL_VALUE;
681*5113495bSYour Name 	}
682*5113495bSYour Name 
683*5113495bSYour Name 	wifi_pos_psoc->wifi_pos_send_action = handler;
684*5113495bSYour Name 
685*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
686*5113495bSYour Name }
687*5113495bSYour Name 
wifi_pos_register_osif_callbacks(struct wifi_pos_osif_ops * ops)688*5113495bSYour Name QDF_STATUS wifi_pos_register_osif_callbacks(struct wifi_pos_osif_ops *ops)
689*5113495bSYour Name {
690*5113495bSYour Name 	struct wifi_pos_psoc_priv_obj *wifi_pos_obj =
691*5113495bSYour Name 			wifi_pos_get_psoc_priv_obj(wifi_pos_get_psoc());
692*5113495bSYour Name 
693*5113495bSYour Name 	if (!wifi_pos_obj) {
694*5113495bSYour Name 		wifi_pos_err("wifi_pos priv obj is null");
695*5113495bSYour Name 		return QDF_STATUS_E_NULL_VALUE;
696*5113495bSYour Name 	}
697*5113495bSYour Name 
698*5113495bSYour Name 	wifi_pos_obj->osif_cb = ops;
699*5113495bSYour Name 
700*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
701*5113495bSYour Name }
702*5113495bSYour Name 
wifi_pos_get_osif_callbacks(void)703*5113495bSYour Name struct wifi_pos_osif_ops *wifi_pos_get_osif_callbacks(void)
704*5113495bSYour Name {
705*5113495bSYour Name 	struct wifi_pos_psoc_priv_obj *wifi_pos_obj =
706*5113495bSYour Name 			wifi_pos_get_psoc_priv_obj(wifi_pos_get_psoc());
707*5113495bSYour Name 
708*5113495bSYour Name 	if (!wifi_pos_obj) {
709*5113495bSYour Name 		wifi_pos_err("wifi_pos priv obj is null");
710*5113495bSYour Name 		return NULL;
711*5113495bSYour Name 	}
712*5113495bSYour Name 
713*5113495bSYour Name 	return wifi_pos_obj->osif_cb;
714*5113495bSYour Name }
715*5113495bSYour Name 
716*5113495bSYour Name #if defined(WIFI_POS_CONVERGED) && defined(WLAN_FEATURE_RTT_11AZ_SUPPORT)
wifi_pos_set_rsta_sec_ltf_cap(bool val)717*5113495bSYour Name void wifi_pos_set_rsta_sec_ltf_cap(bool val)
718*5113495bSYour Name {
719*5113495bSYour Name 	struct wifi_pos_psoc_priv_obj *wifi_pos_psoc =
720*5113495bSYour Name 			wifi_pos_get_psoc_priv_obj(wifi_pos_get_psoc());
721*5113495bSYour Name 
722*5113495bSYour Name 	if (!wifi_pos_psoc) {
723*5113495bSYour Name 		wifi_pos_alert("unable to get wifi_pos psoc obj");
724*5113495bSYour Name 		return;
725*5113495bSYour Name 	}
726*5113495bSYour Name 
727*5113495bSYour Name 	qdf_spin_lock_bh(&wifi_pos_psoc->wifi_pos_lock);
728*5113495bSYour Name 	wifi_pos_psoc->enable_rsta_secure_ltf_support = val;
729*5113495bSYour Name 	qdf_spin_unlock_bh(&wifi_pos_psoc->wifi_pos_lock);
730*5113495bSYour Name }
731*5113495bSYour Name 
wifi_pos_get_rsta_sec_ltf_cap(void)732*5113495bSYour Name bool wifi_pos_get_rsta_sec_ltf_cap(void)
733*5113495bSYour Name {
734*5113495bSYour Name 	bool value;
735*5113495bSYour Name 	struct wifi_pos_psoc_priv_obj *wifi_pos_psoc =
736*5113495bSYour Name 			wifi_pos_get_psoc_priv_obj(wifi_pos_get_psoc());
737*5113495bSYour Name 
738*5113495bSYour Name 	if (!wifi_pos_psoc) {
739*5113495bSYour Name 		wifi_pos_alert("unable to get wifi_pos psoc obj");
740*5113495bSYour Name 		return false;
741*5113495bSYour Name 	}
742*5113495bSYour Name 
743*5113495bSYour Name 	qdf_spin_lock_bh(&wifi_pos_psoc->wifi_pos_lock);
744*5113495bSYour Name 	value = wifi_pos_psoc->enable_rsta_secure_ltf_support;
745*5113495bSYour Name 	qdf_spin_unlock_bh(&wifi_pos_psoc->wifi_pos_lock);
746*5113495bSYour Name 
747*5113495bSYour Name 	return value;
748*5113495bSYour Name }
749*5113495bSYour Name 
wifi_pos_set_rsta_11az_ranging_cap(uint32_t val)750*5113495bSYour Name void wifi_pos_set_rsta_11az_ranging_cap(uint32_t val)
751*5113495bSYour Name {
752*5113495bSYour Name 	struct wifi_pos_psoc_priv_obj *wifi_pos_psoc =
753*5113495bSYour Name 			wifi_pos_get_psoc_priv_obj(wifi_pos_get_psoc());
754*5113495bSYour Name 
755*5113495bSYour Name 	if (!wifi_pos_psoc) {
756*5113495bSYour Name 		wifi_pos_alert("unable to get wifi_pos psoc obj");
757*5113495bSYour Name 		return;
758*5113495bSYour Name 	}
759*5113495bSYour Name 
760*5113495bSYour Name 	qdf_spin_lock_bh(&wifi_pos_psoc->wifi_pos_lock);
761*5113495bSYour Name 	wifi_pos_psoc->enable_rsta_11az_ranging = val;
762*5113495bSYour Name 	qdf_spin_unlock_bh(&wifi_pos_psoc->wifi_pos_lock);
763*5113495bSYour Name }
764*5113495bSYour Name 
wifi_pos_get_rsta_11az_ranging_cap(void)765*5113495bSYour Name uint32_t wifi_pos_get_rsta_11az_ranging_cap(void)
766*5113495bSYour Name {
767*5113495bSYour Name 	uint32_t value;
768*5113495bSYour Name 	struct wifi_pos_psoc_priv_obj *wifi_pos_psoc =
769*5113495bSYour Name 			wifi_pos_get_psoc_priv_obj(wifi_pos_get_psoc());
770*5113495bSYour Name 
771*5113495bSYour Name 	if (!wifi_pos_psoc) {
772*5113495bSYour Name 		wifi_pos_alert("unable to get wifi_pos psoc obj");
773*5113495bSYour Name 		return false;
774*5113495bSYour Name 	}
775*5113495bSYour Name 
776*5113495bSYour Name 	qdf_spin_lock_bh(&wifi_pos_psoc->wifi_pos_lock);
777*5113495bSYour Name 	value = wifi_pos_psoc->enable_rsta_11az_ranging;
778*5113495bSYour Name 	qdf_spin_unlock_bh(&wifi_pos_psoc->wifi_pos_lock);
779*5113495bSYour Name 
780*5113495bSYour Name 	return value;
781*5113495bSYour Name }
782*5113495bSYour Name #endif
783