xref: /wlan-driver/qca-wifi-host-cmn/umac/wifi_pos/inc/wifi_pos_utils_i.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
4*5113495bSYour Name  *
5*5113495bSYour Name  * Permission to use, copy, modify, and/or distribute this software for
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_utils_i.h
22*5113495bSYour Name  * This file defines the prototypes for the utility helper functions
23*5113495bSYour Name  * for the wifi_pos component.
24*5113495bSYour Name  */
25*5113495bSYour Name 
26*5113495bSYour Name #ifdef WIFI_POS_CONVERGED
27*5113495bSYour Name #ifndef _WIFI_POS_UTILS_H_
28*5113495bSYour Name #define _WIFI_POS_UTILS_H_
29*5113495bSYour Name /* Include files */
30*5113495bSYour Name #include "qdf_types.h"
31*5113495bSYour Name #include "qdf_status.h"
32*5113495bSYour Name #include "ol_defines.h"
33*5113495bSYour Name #include "qdf_trace.h"
34*5113495bSYour Name #include "qdf_module.h"
35*5113495bSYour Name #include "wifi_pos_utils_pub.h"
36*5113495bSYour Name #include "wlan_objmgr_vdev_obj.h"
37*5113495bSYour Name #include "wlan_cmn.h"
38*5113495bSYour Name 
39*5113495bSYour Name struct wlan_objmgr_psoc;
40*5113495bSYour Name struct wifi_pos_req_msg;
41*5113495bSYour Name 
42*5113495bSYour Name #define wifi_pos_alert(params...) \
43*5113495bSYour Name 	QDF_TRACE_FATAL(QDF_MODULE_ID_WIFIPOS, params)
44*5113495bSYour Name #define wifi_pos_err(params...) \
45*5113495bSYour Name 	QDF_TRACE_ERROR(QDF_MODULE_ID_WIFIPOS, params)
46*5113495bSYour Name #define wifi_pos_warn(params...) \
47*5113495bSYour Name 	QDF_TRACE_WARN(QDF_MODULE_ID_WIFIPOS, params)
48*5113495bSYour Name #define wifi_pos_notice(params...) \
49*5113495bSYour Name 	QDF_TRACE_INFO(QDF_MODULE_ID_WIFIPOS, params)
50*5113495bSYour Name #define wifi_pos_debug(params...) \
51*5113495bSYour Name 	QDF_TRACE_DEBUG(QDF_MODULE_ID_WIFIPOS, params)
52*5113495bSYour Name 
53*5113495bSYour Name #define wifipos_nofl_alert(params...) \
54*5113495bSYour Name 	QDF_TRACE_FATAL_NO_FL(QDF_MODULE_ID_WIFIPOS, params)
55*5113495bSYour Name #define wifipos_nofl_err(params...) \
56*5113495bSYour Name 	QDF_TRACE_ERROR_NO_FL(QDF_MODULE_ID_WIFIPOS, params)
57*5113495bSYour Name #define wifipos_nofl_warn(params...) \
58*5113495bSYour Name 	QDF_TRACE_WARN_NO_FL(QDF_MODULE_ID_WIFIPOS, params)
59*5113495bSYour Name #define wifipos_nofl_notice(params...) \
60*5113495bSYour Name 	QDF_TRACE_INFO_NO_FL(QDF_MODULE_ID_WIFIPOS, params)
61*5113495bSYour Name #define wifipos_nofl_debug(params...) \
62*5113495bSYour Name 	QDF_TRACE_DEBUG_NO_FL(QDF_MODULE_ID_WIFIPOS, params)
63*5113495bSYour Name 
64*5113495bSYour Name #define OEM_APP_SIGNATURE_STR      "QUALCOMM-OEM-APP"
65*5113495bSYour Name #define OEM_APP_SIGNATURE_LEN      (sizeof(OEM_APP_SIGNATURE_STR) - 1)
66*5113495bSYour Name 
67*5113495bSYour Name #ifndef OEM_DATA_RSP_SIZE
68*5113495bSYour Name #define OEM_DATA_RSP_SIZE 1724
69*5113495bSYour Name /* Header + VHT80 CIR * 2 chains */
70*5113495bSYour Name #define OEM_DATA_DMA_BUFF_SIZE (64 + 512 * 4 * 2)
71*5113495bSYour Name #endif
72*5113495bSYour Name 
73*5113495bSYour Name /**
74*5113495bSYour Name  * struct app_reg_rsp_vdev_info - vdev info struct
75*5113495bSYour Name  * @dev_mode: device mode
76*5113495bSYour Name  * @vdev_id: vdev id
77*5113495bSYour Name  *
78*5113495bSYour Name  */
79*5113495bSYour Name struct app_reg_rsp_vdev_info {
80*5113495bSYour Name 	uint8_t dev_mode;
81*5113495bSYour Name 	uint8_t vdev_id;
82*5113495bSYour Name } qdf_packed;
83*5113495bSYour Name 
84*5113495bSYour Name /**
85*5113495bSYour Name  * struct wifi_app_reg_rsp - app registration response struct
86*5113495bSYour Name  * @num_inf: number of interfaces active
87*5113495bSYour Name  * @vdevs: array indicating all active vdev's information
88*5113495bSYour Name  *
89*5113495bSYour Name  */
90*5113495bSYour Name struct wifi_app_reg_rsp {
91*5113495bSYour Name 	uint8_t num_inf;
92*5113495bSYour Name 	QDF_FLEX_ARRAY(struct app_reg_rsp_vdev_info, vdevs);
93*5113495bSYour Name } qdf_packed;
94*5113495bSYour Name 
95*5113495bSYour Name /**
96*5113495bSYour Name  * struct oem_data_req - data request to be sent to firmware
97*5113495bSYour Name  * @data_len: len of data
98*5113495bSYour Name  * @data: buffer containing data
99*5113495bSYour Name  *
100*5113495bSYour Name  */
101*5113495bSYour Name struct oem_data_req {
102*5113495bSYour Name 	uint32_t data_len;
103*5113495bSYour Name 	uint8_t *data;
104*5113495bSYour Name };
105*5113495bSYour Name 
106*5113495bSYour Name /**
107*5113495bSYour Name  * struct oem_data_rsp - response from firmware to data request sent earlier
108*5113495bSYour Name  * @rsp_len_1: len of data_1
109*5113495bSYour Name  * @data_1: first part of payload
110*5113495bSYour Name  * @rsp_len_2: len of data_2
111*5113495bSYour Name  * @data_2: second part of payload
112*5113495bSYour Name  * @dma_len: len of DMAed data
113*5113495bSYour Name  * @vaddr: virtual address of DMA data start
114*5113495bSYour Name  *
115*5113495bSYour Name  */
116*5113495bSYour Name struct oem_data_rsp {
117*5113495bSYour Name 	uint32_t rsp_len_1;
118*5113495bSYour Name 	uint8_t *data_1;
119*5113495bSYour Name 	uint32_t rsp_len_2;
120*5113495bSYour Name 	uint8_t *data_2;
121*5113495bSYour Name 	uint32_t dma_len;
122*5113495bSYour Name 	void *vaddr;
123*5113495bSYour Name };
124*5113495bSYour Name 
125*5113495bSYour Name /**
126*5113495bSYour Name  * struct wifi_pos_err_rpt - Error report response for userspace.
127*5113495bSYour Name  * @tag_len: tlv header of the message.
128*5113495bSYour Name  * @info: Report info. Reserved for error report.
129*5113495bSYour Name  * @dest_mac: Mac address of the sta in the request.
130*5113495bSYour Name  * @reserved: Reserved in error report.
131*5113495bSYour Name  */
132*5113495bSYour Name struct wifi_pos_err_rpt {
133*5113495bSYour Name 	uint32_t tag_len;
134*5113495bSYour Name 	uint32_t info;
135*5113495bSYour Name 	uint8_t  dest_mac[QDF_MAC_ADDR_SIZE + 2];
136*5113495bSYour Name 	uint32_t reserved;
137*5113495bSYour Name } qdf_packed;
138*5113495bSYour Name 
139*5113495bSYour Name #define OEM_MSG_RSP_HEAD_TAG_ID 33
140*5113495bSYour Name #define OEM_MEAS_RSP_HEAD_TAG_ID 41
141*5113495bSYour Name /**
142*5113495bSYour Name  * struct wifi_pos_err_msg_report - Error report message
143*5113495bSYour Name  * @msg_tag_len: Message tlv header
144*5113495bSYour Name  * @msg_subtype: Message subtype
145*5113495bSYour Name  * @req_id: id corresponding to the request.
146*5113495bSYour Name  * @fragment_info: Valid only for fragments.
147*5113495bSYour Name  * @pdev_id: pdev_id of radion.
148*5113495bSYour Name  * @time_left: time left in the measurement req.
149*5113495bSYour Name  * @err_rpt: Error report data.
150*5113495bSYour Name  */
151*5113495bSYour Name struct wifi_pos_err_msg_report {
152*5113495bSYour Name 	uint32_t msg_tag_len;
153*5113495bSYour Name 	uint32_t msg_subtype;
154*5113495bSYour Name 	uint32_t req_id;
155*5113495bSYour Name 	uint32_t fragment_info;
156*5113495bSYour Name 	uint32_t pdev_id;
157*5113495bSYour Name 	uint32_t time_left;
158*5113495bSYour Name 	struct wifi_pos_err_rpt err_rpt;
159*5113495bSYour Name } qdf_packed;
160*5113495bSYour Name 
161*5113495bSYour Name /**
162*5113495bSYour Name  * struct wifi_pos_dma_rings_cap - capabilities requested by firmware.
163*5113495bSYour Name  * @pdev_id: pdev_id or mac_id of ring
164*5113495bSYour Name  * @min_num_ptr: minimum depth of ring required
165*5113495bSYour Name  * @min_buf_size: minimum size of each buffer
166*5113495bSYour Name  * @min_buf_align: minimum alignment of buffer memory
167*5113495bSYour Name  */
168*5113495bSYour Name struct wifi_pos_dma_rings_cap {
169*5113495bSYour Name 	uint32_t pdev_id;
170*5113495bSYour Name 	uint32_t min_num_ptr;
171*5113495bSYour Name 	uint32_t min_buf_size;
172*5113495bSYour Name 	uint32_t min_buf_align;
173*5113495bSYour Name };
174*5113495bSYour Name 
175*5113495bSYour Name /**
176*5113495bSYour Name  * struct wifi_pos_dma_buf_info - buffer info struct containing phy to virtual
177*5113495bSYour Name  * mapping.
178*5113495bSYour Name  * @cookie: this identifies location of DMA buffer in pool array
179*5113495bSYour Name  * @paddr: aligned physical address as exchanged with firmware
180*5113495bSYour Name  * @vaddr: virtual address - unaligned. this helps in freeing later
181*5113495bSYour Name  * @offset: offset of aligned address from unaligned
182*5113495bSYour Name  */
183*5113495bSYour Name struct wifi_pos_dma_buf_info {
184*5113495bSYour Name 	uint32_t cookie;
185*5113495bSYour Name 	void *paddr;
186*5113495bSYour Name 	void *vaddr;
187*5113495bSYour Name 	uint8_t offset;
188*5113495bSYour Name };
189*5113495bSYour Name 
190*5113495bSYour Name /**
191*5113495bSYour Name  * struct wifi_pos_dma_rings_cfg - DMA ring parameters to be programmed to FW.
192*5113495bSYour Name  * @pdev_id: pdev_id of ring
193*5113495bSYour Name  * @num_ptr: depth of ring
194*5113495bSYour Name  * @ring_alloc_size: size of the ring allocation
195*5113495bSYour Name  * @base_paddr_unaligned: base physical addr unaligned
196*5113495bSYour Name  * @base_vaddr_unaligned: base virtual addr unaligned
197*5113495bSYour Name  * @base_paddr_aligned: base physical addr aligned
198*5113495bSYour Name  * @base_vaddr_aligned: base virtual addr unaligned
199*5113495bSYour Name  * @head_idx_addr: head index addr
200*5113495bSYour Name  * @tail_idx_addr: tail index addr
201*5113495bSYour Name  * @srng: hal srng
202*5113495bSYour Name  */
203*5113495bSYour Name struct wifi_pos_dma_rings_cfg {
204*5113495bSYour Name 	uint32_t pdev_id;
205*5113495bSYour Name 	uint32_t num_ptr;
206*5113495bSYour Name 	uint32_t ring_alloc_size;
207*5113495bSYour Name 	void *base_paddr_unaligned;
208*5113495bSYour Name 	void *base_vaddr_unaligned;
209*5113495bSYour Name 	void *base_paddr_aligned;
210*5113495bSYour Name 	void *base_vaddr_aligned;
211*5113495bSYour Name 	void *head_idx_addr;
212*5113495bSYour Name 	void *tail_idx_addr;
213*5113495bSYour Name 	void *srng;
214*5113495bSYour Name };
215*5113495bSYour Name 
216*5113495bSYour Name typedef void (*wifi_pos_send_rsp_handler)(struct wlan_objmgr_psoc *, uint32_t,
217*5113495bSYour Name 					  enum wifi_pos_cmd_ids,
218*5113495bSYour Name 					  uint32_t, uint8_t *);
219*5113495bSYour Name 
220*5113495bSYour Name /**
221*5113495bSYour Name  * struct wifi_pos_legacy_ops  - wifi pos module legacy callbacks
222*5113495bSYour Name  * @pasn_peer_create_cb: PASN peer create callback
223*5113495bSYour Name  * @pasn_peer_delete_cb: PASN peer delete callback
224*5113495bSYour Name  * @pasn_vdev_delete_resume_cb: PASN resume vdev delete callback
225*5113495bSYour Name  */
226*5113495bSYour Name struct wifi_pos_legacy_ops {
227*5113495bSYour Name 	QDF_STATUS (*pasn_peer_create_cb)(struct wlan_objmgr_psoc *psoc,
228*5113495bSYour Name 					  struct qdf_mac_addr *peer_addr,
229*5113495bSYour Name 					  uint8_t vdev_id);
230*5113495bSYour Name 	QDF_STATUS (*pasn_peer_delete_cb)(struct wlan_objmgr_psoc *psoc,
231*5113495bSYour Name 					  struct qdf_mac_addr *peer_addr,
232*5113495bSYour Name 					  uint8_t vdev_id,
233*5113495bSYour Name 					  bool no_fw_peer_delete);
234*5113495bSYour Name 	QDF_STATUS (*pasn_vdev_delete_resume_cb)(struct wlan_objmgr_vdev *vdev);
235*5113495bSYour Name };
236*5113495bSYour Name 
237*5113495bSYour Name /**
238*5113495bSYour Name  * struct wifi_pos_psoc_priv_obj - psoc obj data for wifi_pos
239*5113495bSYour Name  * @app_pid: pid of app registered to host driver
240*5113495bSYour Name  * @is_app_registered: indicates if app is registered
241*5113495bSYour Name  * @fine_time_meas_cap: FTM cap for different roles, reflection of ini
242*5113495bSYour Name  * @ftm_rr: configured value of FTM Ranging Request capability
243*5113495bSYour Name  * @lci_capability: configured value of LCI capability
244*5113495bSYour Name  * @rsvd: reserved
245*5113495bSYour Name  * @oem_target_type
246*5113495bSYour Name  * @oem_target_type: oem target type, populated from HDD
247*5113495bSYour Name  * @oem_fw_version: firmware version, populated from HDD
248*5113495bSYour Name  * @driver_version: driver version, populated from HDD
249*5113495bSYour Name  * @allowed_dwell_time_min: allowed dwell time min, populated from HDD
250*5113495bSYour Name  * @allowed_dwell_time_max: allowed dwell time max, populated from HDD
251*5113495bSYour Name  * @current_dwell_time_min: current dwell time min, populated from HDD
252*5113495bSYour Name  * @current_dwell_time_max: current dwell time max, populated from HDD
253*5113495bSYour Name  * @hal_soc: hal_soc
254*5113495bSYour Name  * @num_rings: DMA ring cap requested by firmware
255*5113495bSYour Name  * @dma_cap: dma cap as read from service ready ext event
256*5113495bSYour Name  * @dma_cfg: DMA ring cfg to be programmed to firmware
257*5113495bSYour Name  * @dma_buf_pool: DMA buffer pools maintained at host: this will be 2-D array
258*5113495bSYour Name  * where with num_rows = number of rings num_elements in each row = ring depth
259*5113495bSYour Name  * @osif_cb: Callbacks to OS_IF
260*5113495bSYour Name  * @wifi_pos_lock: lock to access wifi pos priv object
261*5113495bSYour Name  * @oem_6g_support_disable: oem target 6ghz support is disabled if set
262*5113495bSYour Name  * @enable_rsta_secure_ltf_support: Enable RSTA secure LTF support
263*5113495bSYour Name  * @enable_rsta_11az_ranging: Enable RSTA 802.11 az secure ranging support
264*5113495bSYour Name  * @wifi_pos_req_handler: function pointer to handle TLV or non-TLV
265*5113495bSYour Name  * @wifi_pos_send_rsp: function pointer to send msg to userspace APP
266*5113495bSYour Name  * @wifi_pos_get_phy_mode: function pointer to get wlan phymode for given
267*5113495bSYour Name  *                         channel, channel width
268*5113495bSYour Name  * @wifi_pos_get_fw_phy_mode_for_freq: function pointer to get fw phymode
269*5113495bSYour Name  *                                     for given freq and channel width
270*5113495bSYour Name  * @wifi_pos_send_action: function pointer to send registered action frames
271*5113495bSYour Name  *                        to userspace APP
272*5113495bSYour Name  * @wifi_pos_get_pdev_id_by_dev_name: get pdev_id from device name
273*5113495bSYour Name  * @wifi_pos_measurement_request_notification: Call this API when the driver
274*5113495bSYour Name  *                                             receives measurement request
275*5113495bSYour Name  *                                             from the LOWI application
276*5113495bSYour Name  * @legacy_ops: wifi pos legacy callbacks
277*5113495bSYour Name  * @rsp_version: rsp version
278*5113495bSYour Name  *
279*5113495bSYour Name  * wifi pos request messages
280*5113495bSYour Name  * <----- fine_time_meas_cap (in bits) ----->
281*5113495bSYour Name  *+----------+-----+-----+------+------+-------+-------+-----+-----+
282*5113495bSYour Name  *|   8-31   |  7  |  6  |   5  |   4  |   3   |   2   |  1  |  0  |
283*5113495bSYour Name  *+----------+-----+-----+------+------+-------+-------+-----+-----+
284*5113495bSYour Name  *| reserved | SAP | SAP |P2P-GO|P2P-GO|P2P-CLI|P2P-CLI| STA | STA |
285*5113495bSYour Name  *|          |resp |init |resp  |init  |resp   |init   |resp |init |
286*5113495bSYour Name  *+----------+-----+-----+------+------+-------+-------+-----+-----+
287*5113495bSYour Name  * resp - responder role; init- initiator role
288*5113495bSYour Name  * @wifi_pos_get_max_fw_phymode_for_channels: function pointer to get max
289*5113495bSYour Name  *            supported FW phymode for the given channels
290*5113495bSYour Name  *
291*5113495bSYour Name  */
292*5113495bSYour Name struct wifi_pos_psoc_priv_obj {
293*5113495bSYour Name 	uint32_t app_pid;
294*5113495bSYour Name 	bool is_app_registered;
295*5113495bSYour Name 	uint32_t fine_time_meas_cap;
296*5113495bSYour Name 	uint32_t ftm_rr:1;
297*5113495bSYour Name 	uint32_t lci_capability:1;
298*5113495bSYour Name 	uint32_t rsvd:30;
299*5113495bSYour Name 
300*5113495bSYour Name 	uint32_t oem_target_type;
301*5113495bSYour Name 	uint32_t oem_fw_version;
302*5113495bSYour Name 	struct wifi_pos_driver_version driver_version;
303*5113495bSYour Name 	uint16_t allowed_dwell_time_min;
304*5113495bSYour Name 	uint16_t allowed_dwell_time_max;
305*5113495bSYour Name 	uint16_t current_dwell_time_min;
306*5113495bSYour Name 	uint16_t current_dwell_time_max;
307*5113495bSYour Name 
308*5113495bSYour Name 	void *hal_soc;
309*5113495bSYour Name 	uint8_t num_rings;
310*5113495bSYour Name 	struct wifi_pos_dma_rings_cap *dma_cap;
311*5113495bSYour Name 	struct wifi_pos_dma_rings_cfg *dma_cfg;
312*5113495bSYour Name 	struct wifi_pos_dma_buf_info **dma_buf_pool;
313*5113495bSYour Name 
314*5113495bSYour Name 	struct wifi_pos_osif_ops *osif_cb;
315*5113495bSYour Name 
316*5113495bSYour Name 	qdf_spinlock_t wifi_pos_lock;
317*5113495bSYour Name 	bool oem_6g_support_disable;
318*5113495bSYour Name 	bool enable_rsta_secure_ltf_support;
319*5113495bSYour Name 	uint32_t enable_rsta_11az_ranging;
320*5113495bSYour Name 	struct wifi_pos_legacy_ops *legacy_ops;
321*5113495bSYour Name 	QDF_STATUS (*wifi_pos_req_handler)(struct wlan_objmgr_psoc *psoc,
322*5113495bSYour Name 				    struct wifi_pos_req_msg *req);
323*5113495bSYour Name 	wifi_pos_send_rsp_handler wifi_pos_send_rsp;
324*5113495bSYour Name 	void (*wifi_pos_get_phy_mode)(qdf_freq_t freq, uint32_t chan_width,
325*5113495bSYour Name 				      enum wlan_phymode *phy_mode);
326*5113495bSYour Name 	void (*wifi_pos_get_fw_phy_mode_for_freq)(uint32_t, uint32_t,
327*5113495bSYour Name 						  uint32_t *);
328*5113495bSYour Name 	void (*wifi_pos_send_action)(struct wlan_objmgr_psoc *psoc,
329*5113495bSYour Name 				     uint32_t oem_subtype, uint8_t *buf,
330*5113495bSYour Name 				     uint32_t len);
331*5113495bSYour Name 	QDF_STATUS (*wifi_pos_get_pdev_id_by_dev_name)(
332*5113495bSYour Name 			char *dev_name, uint8_t *pdev_id,
333*5113495bSYour Name 			struct wlan_objmgr_psoc **psoc);
334*5113495bSYour Name 	QDF_STATUS (*wifi_pos_measurement_request_notification)(
335*5113495bSYour Name 			struct wlan_objmgr_pdev *pdev,
336*5113495bSYour Name 			struct rtt_channel_info *chinfo);
337*5113495bSYour Name 	uint32_t rsp_version;
338*5113495bSYour Name 	QDF_STATUS (*wifi_pos_get_max_fw_phymode_for_channels)(
339*5113495bSYour Name 			struct wlan_objmgr_pdev *pdev,
340*5113495bSYour Name 			struct wifi_pos_channel_power *chan_list,
341*5113495bSYour Name 			uint16_t wifi_pos_num_chans);
342*5113495bSYour Name };
343*5113495bSYour Name 
344*5113495bSYour Name /**
345*5113495bSYour Name  * wifi_pos_get_psoc_priv_obj: API to get wifi_psoc private object
346*5113495bSYour Name  * @psoc: pointer to psoc object
347*5113495bSYour Name  *
348*5113495bSYour Name  * Return: psoc private object on success, NULL otherwise
349*5113495bSYour Name  */
350*5113495bSYour Name struct wifi_pos_psoc_priv_obj *wifi_pos_get_psoc_priv_obj(
351*5113495bSYour Name 		struct wlan_objmgr_psoc *psoc);
352*5113495bSYour Name 
353*5113495bSYour Name /**
354*5113495bSYour Name  * wifi_pos_lock_init: API to init lock used protect use of psoc global pointer
355*5113495bSYour Name  * variable
356*5113495bSYour Name  *
357*5113495bSYour Name  * Return: none.
358*5113495bSYour Name  */
359*5113495bSYour Name void wifi_pos_lock_init(void);
360*5113495bSYour Name 
361*5113495bSYour Name /**
362*5113495bSYour Name  * wifi_pos_lock_deinit: API to deinit lock used protect use of psoc global
363*5113495bSYour Name  * pointer variable
364*5113495bSYour Name  *
365*5113495bSYour Name  * Return: none.
366*5113495bSYour Name  */
367*5113495bSYour Name void wifi_pos_lock_deinit(void);
368*5113495bSYour Name 
369*5113495bSYour Name /**
370*5113495bSYour Name  * wifi_pos_set_psoc: API to set global PSOC object
371*5113495bSYour Name  * @psoc: pointer to psoc object
372*5113495bSYour Name  *
373*5113495bSYour Name  * Since request from userspace is not associated with any vdev/pdev/psoc, this
374*5113495bSYour Name  * API is used to set global psoc object.
375*5113495bSYour Name  *
376*5113495bSYour Name  * Return: none.
377*5113495bSYour Name  */
378*5113495bSYour Name void wifi_pos_set_psoc(struct wlan_objmgr_psoc *psoc);
379*5113495bSYour Name 
380*5113495bSYour Name /**
381*5113495bSYour Name  * wifi_pos_get_psoc: API to get global PSOC object
382*5113495bSYour Name  *
383*5113495bSYour Name  * Since request from userspace is not associated with any vdev/pdev/psoc, this
384*5113495bSYour Name  * API is used to get global psoc object.
385*5113495bSYour Name  * Return: global psoc object.
386*5113495bSYour Name  */
387*5113495bSYour Name struct wlan_objmgr_psoc *wifi_pos_get_psoc(void);
388*5113495bSYour Name 
389*5113495bSYour Name /**
390*5113495bSYour Name  * wifi_pos_clear_psoc: API to clear global PSOC object
391*5113495bSYour Name  *
392*5113495bSYour Name  * Return: none.
393*5113495bSYour Name  */
394*5113495bSYour Name void wifi_pos_clear_psoc(void);
395*5113495bSYour Name 
396*5113495bSYour Name /**
397*5113495bSYour Name  * wifi_pos_populate_caps: API to get OEM caps
398*5113495bSYour Name  * @psoc: psoc object
399*5113495bSYour Name  * @caps: capabilities buffer to populate
400*5113495bSYour Name  *
401*5113495bSYour Name  * Return: status of operation.
402*5113495bSYour Name  */
403*5113495bSYour Name QDF_STATUS wifi_pos_populate_caps(struct wlan_objmgr_psoc *psoc,
404*5113495bSYour Name 				  struct wifi_pos_driver_caps *caps);
405*5113495bSYour Name 
406*5113495bSYour Name /**
407*5113495bSYour Name  * wifi_pos_get_app_pid: returns oem app pid.
408*5113495bSYour Name  * @psoc: pointer to psoc object
409*5113495bSYour Name  *
410*5113495bSYour Name  * Return: oem app pid
411*5113495bSYour Name  */
412*5113495bSYour Name uint32_t wifi_pos_get_app_pid(struct wlan_objmgr_psoc *psoc);
413*5113495bSYour Name 
414*5113495bSYour Name /**
415*5113495bSYour Name  * wifi_pos_is_app_registered: indicates if oem app is registered.
416*5113495bSYour Name  * @psoc: pointer to psoc object
417*5113495bSYour Name  *
418*5113495bSYour Name  * Return: true if app is registered, false otherwise
419*5113495bSYour Name  */
420*5113495bSYour Name bool wifi_pos_is_app_registered(struct wlan_objmgr_psoc *psoc);
421*5113495bSYour Name 
422*5113495bSYour Name /**
423*5113495bSYour Name  * wifi_pos_get_vdev_priv_obj() - Get WIfi pos module vdev private
424*5113495bSYour Name  * object
425*5113495bSYour Name  * @vdev: vdev pointer
426*5113495bSYour Name  *
427*5113495bSYour Name  * Return: Pointer to vdev private obj
428*5113495bSYour Name  */
429*5113495bSYour Name struct wifi_pos_vdev_priv_obj *
430*5113495bSYour Name wifi_pos_get_vdev_priv_obj(struct wlan_objmgr_vdev *vdev);
431*5113495bSYour Name 
432*5113495bSYour Name #endif /* _WIFI_POS_UTILS_H_ */
433*5113495bSYour Name #endif /* WIFI_POS_CONVERGED */
434