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