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