1 /* 2 * Copyright (c) 2017-2020 The Linux Foundation. All rights reserved. 3 * 4 * 5 * Permission to use, copy, modify, and/or distribute this software for 6 * any purpose with or without fee is hereby granted, provided that the 7 * above copyright notice and this permission notice appear in all 8 * copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 11 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 12 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 13 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 14 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 15 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 16 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 17 * PERFORMANCE OF THIS SOFTWARE. 18 */ 19 20 #ifndef _WLAN_SPECTRAL_TGT_API_H_ 21 #define _WLAN_SPECTRAL_TGT_API_H_ 22 23 #include <wlan_objmgr_cmn.h> 24 #include <qdf_types.h> 25 #include "../../core/spectral_cmn_api_i.h" 26 27 /** 28 * tgt_get_pdev_target_handle() - Get pdev target_if handle 29 * @pdev: Pointer to pdev 30 * 31 * Get handle to pdev target_if internal Spectral data 32 * 33 * Return: Handle to pdev target_if internal Spectral data on success, NULL on 34 * failure 35 */ 36 void *tgt_get_pdev_target_handle(struct wlan_objmgr_pdev *pdev); 37 38 /** 39 * tgt_get_psoc_target_handle() - Get psoc target_if handle 40 * @psoc: Pointer to psoc 41 * 42 * Get handle to psoc target_if internal Spectral data 43 * 44 * Return: Handle to psoc target_if internal Spectral data on success, NULL on 45 * failure 46 */ 47 void *tgt_get_psoc_target_handle(struct wlan_objmgr_psoc *psoc); 48 49 /** 50 * tgt_spectral_control()- handler for demultiplexing requests from higher layer 51 * @pdev: Reference to global pdev object 52 * @sscan_req: pointer to Spectral scan request 53 * 54 * This function processes the spectral config command 55 * and appropriate handlers are invoked. 56 * 57 * Return: QDF_STATUS_SUCCESS/QDF_STATUS_E_FAILURE 58 */ 59 QDF_STATUS tgt_spectral_control(struct wlan_objmgr_pdev *pdev, 60 struct spectral_cp_request *sscan_req); 61 62 /** 63 * tgt_pdev_spectral_init() - implementation for spectral init 64 * @pdev: Pointer to pdev 65 * 66 * Return: On success, pointer to Spectral target_if internal private data, on 67 * failure, NULL 68 */ 69 void *tgt_pdev_spectral_init(struct wlan_objmgr_pdev *pdev); 70 71 /** 72 * tgt_pdev_spectral_deinit() - implementation for spectral de-init 73 * @pdev: Pointer to pdev 74 * 75 * Return: None 76 */ 77 void tgt_pdev_spectral_deinit(struct wlan_objmgr_pdev *pdev); 78 79 /** 80 * tgt_psoc_spectral_init() - implementation for spectral init 81 * @psoc: Pointer to psoc 82 * 83 * Return: On success, pointer to Spectral psoc target_if internal private data, 84 * on failure, NULL 85 */ 86 void *tgt_psoc_spectral_init(struct wlan_objmgr_psoc *psoc); 87 88 /** 89 * tgt_psoc_spectral_deinit() - implementation for spectral de-init 90 * @psoc: Pointer to psoc 91 * 92 * Return: None 93 */ 94 void tgt_psoc_spectral_deinit(struct wlan_objmgr_psoc *psoc); 95 96 /** 97 * tgt_set_spectral_config() - Set spectral config 98 * @pdev: Pointer to pdev object 99 * @param: Pointer object describing Spectral parameter 100 * @smode: Spectral scan mode 101 * @err: Spectral control path error code 102 * 103 * Implementation for setting spectral config 104 * 105 * Return: QDF_STATUS_SUCCESS on success, else QDF_STATUS_E_FAILURE 106 */ 107 QDF_STATUS tgt_set_spectral_config(struct wlan_objmgr_pdev *pdev, 108 const struct spectral_cp_param *param, 109 const enum spectral_scan_mode smode, 110 enum spectral_cp_error_code *err); 111 112 /** 113 * tgt_get_spectral_config() - Get spectral configuration 114 * @pdev: Pointer to pdev object 115 * @param: Pointer to spectral_config structure in which the configuration 116 * should be returned 117 * @smode: Spectral scan mode 118 * 119 * Implementation for getting the current spectral configuration 120 * 121 * Return: QDF_STATUS_SUCCESS on success, else QDF_STATUS_E_FAILURE 122 */ 123 QDF_STATUS tgt_get_spectral_config(struct wlan_objmgr_pdev *pdev, 124 struct spectral_config *sptrl_config, 125 const enum spectral_scan_mode smode); 126 127 /** 128 * tgt_start_spectral_scan() - Start spectral scan 129 * @pdev: Pointer to pdev object 130 * @smode: Spectral scan mode 131 * @err: Spectral control path error code 132 * 133 * Implementation for starting spectral scan 134 * 135 * Return: QDF_STATUS_SUCCESS on success, else QDF_STATUS_E_FAILURE 136 */ 137 QDF_STATUS tgt_start_spectral_scan(struct wlan_objmgr_pdev *pdev, 138 enum spectral_scan_mode smode, 139 enum spectral_cp_error_code *err); 140 141 /** 142 * tgt_stop_spectral_scan() - Stop spectral scan 143 * @pdev: Pointer to pdev object 144 * @smode: Spectral scan mode 145 * @err: Spectral control path error code 146 * 147 * Implementation for stop spectral scan 148 * 149 * Return: QDF_STATUS_SUCCESS on success, else QDF_STATUS_E_FAILURE 150 */ 151 QDF_STATUS tgt_stop_spectral_scan(struct wlan_objmgr_pdev *pdev, 152 enum spectral_scan_mode smode, 153 enum spectral_cp_error_code *err); 154 155 /** 156 * tgt_is_spectral_active() - Get whether Spectral is active 157 * @pdev: Pointer to pdev object 158 * @smode: Spectral scan mode 159 * 160 * Implementation to get whether Spectral is active 161 * 162 * Return: True if Spectral is active, false if Spectral is not active 163 */ 164 bool tgt_is_spectral_active(struct wlan_objmgr_pdev *pdev, 165 enum spectral_scan_mode smode); 166 167 /** 168 * tgt_is_spectral_enabled() - Get whether Spectral is active 169 * @pdev: Pointer to pdev object 170 * @smode: Spectral scan mode 171 * 172 * Implementation to get whether Spectral is active 173 * 174 * Return: True if Spectral is active, false if Spectral is not active 175 */ 176 bool tgt_is_spectral_enabled(struct wlan_objmgr_pdev *pdev, 177 enum spectral_scan_mode smode); 178 179 /** 180 * tgt_set_debug_level() - Set debug level for Spectral 181 * @pdev: Pointer to pdev object 182 * @debug_level: Debug level 183 * 184 * Implementation to set the debug level for Spectral 185 * 186 * Return: QDF_STATUS_SUCCESS on success, else QDF_STATUS_E_FAILURE 187 */ 188 QDF_STATUS tgt_set_debug_level(struct wlan_objmgr_pdev *pdev, 189 u_int32_t debug_level); 190 191 /** 192 * tgt_get_debug_level() - Get debug level for Spectral 193 * @pdev: Pointer to pdev object 194 * 195 * Implementation to get the debug level for Spectral 196 * 197 * Return: Current debug level 198 */ 199 uint32_t tgt_get_debug_level(struct wlan_objmgr_pdev *pdev); 200 201 /** 202 * tgt_get_spectral_capinfo() - Get Spectral capability information 203 * @pdev: Pointer to pdev object 204 * @scaps: Buffer into which data should be copied 205 * 206 * Implementation to get the spectral capability information 207 * 208 * Return: QDF_STATUS_SUCCESS on success, else QDF_STATUS_E_FAILURE 209 */ 210 QDF_STATUS tgt_get_spectral_capinfo(struct wlan_objmgr_pdev *pdev, 211 struct spectral_caps *scaps); 212 213 /** 214 * tgt_get_spectral_diagstats() - Get Spectral diagnostic statistics 215 * @pdev: Pointer to pdev object 216 * @stats: Buffer into which data should be copied 217 * 218 * Implementation to get the spectral diagnostic statistics 219 * 220 * Return: QDF_STATUS_SUCCESS on success, else QDF_STATUS_E_FAILURE 221 */ 222 QDF_STATUS tgt_get_spectral_diagstats(struct wlan_objmgr_pdev *pdev, 223 struct spectral_diag_stats *stats); 224 225 /** 226 * tgt_register_spectral_wmi_ops() - Register Spectral WMI operations 227 * @psoc: Pointer to psoc bject 228 * @wmi_ops: Pointer to the structure having Spectral WMI operations 229 * 230 * Implementation to register Spectral WMI operations in spectral 231 * internal data structure 232 * 233 * Return: QDF_STATUS 234 */ 235 QDF_STATUS tgt_register_spectral_wmi_ops(struct wlan_objmgr_psoc *psoc, 236 struct spectral_wmi_ops *wmi_ops); 237 238 /** 239 * tgt_register_spectral_tgt_ops() - Register Spectral target operations 240 * @psoc: Pointer to psoc bject 241 * @tgt_ops: Pointer to the structure having Spectral target operations 242 * 243 * Implementation to register Spectral target operations in spectral 244 * internal data structure 245 * 246 * Return: QDF_STATUS 247 */ 248 QDF_STATUS tgt_register_spectral_tgt_ops(struct wlan_objmgr_psoc *psoc, 249 struct spectral_tgt_ops *tgt_ops); 250 251 /** 252 * tgt_spectral_register_nl_cb() - Register Netlink callbacks 253 * @pdev: Pointer to pdev object 254 * @nl_cb: Netlink callbacks to register 255 * 256 * Return: void 257 */ 258 void tgt_spectral_register_nl_cb(struct wlan_objmgr_pdev *pdev, 259 struct spectral_nl_cb *nl_cb); 260 261 /** 262 * tgt_spectral_use_nl_bcast() - Get whether to use broadcast/unicast while 263 * sending Netlink messages to the application layer 264 * @pdev: Pointer to pdev object 265 * 266 * Return: true for broadcast, false for unicast 267 */ 268 bool tgt_spectral_use_nl_bcast(struct wlan_objmgr_pdev *pdev); 269 270 /** 271 * tgt_spectral_deregister_nl_cb() - De-register Netlink callbacks 272 * @pdev: Pointer to pdev object 273 * 274 * Return: void 275 */ 276 void tgt_spectral_deregister_nl_cb(struct wlan_objmgr_pdev *pdev); 277 278 /** 279 * tgt_spectral_process_report() - Process spectral report 280 * @pdev: Pointer to pdev object 281 * @payload: Pointer to spectral report buffer 282 * 283 * Return: status 284 */ 285 int 286 tgt_spectral_process_report(struct wlan_objmgr_pdev *pdev, 287 void *payload); 288 289 /** 290 * tgt_spectral_register_to_dbr() - Register to direct DMA 291 * @pdev: Pointer to pdev object 292 * 293 * Return: QDF_STATUS 294 */ 295 QDF_STATUS 296 tgt_spectral_register_to_dbr(struct wlan_objmgr_pdev *pdev); 297 298 /** 299 * tgt_spectral_unregister_to_dbr() - Register to direct DMA 300 * @pdev: Pointer to pdev object 301 * 302 * Return: QDF_STATUS 303 */ 304 QDF_STATUS 305 tgt_spectral_unregister_to_dbr(struct wlan_objmgr_pdev *pdev); 306 307 /** 308 * tgt_spectral_get_target_type() - Get target type 309 * @psoc: Pointer to psoc object 310 * 311 * Return: target type 312 */ 313 uint32_t 314 tgt_spectral_get_target_type(struct wlan_objmgr_psoc *psoc); 315 316 /** 317 * tgt_set_spectral_dma_debug() - Set DMA debug for Spectral 318 * @pdev: Pointer to pdev object 319 * @dma_debug_type: Type of Spectral DMA debug i.e., ring or buffer debug 320 * @dma_debug_enable: Value to be set for @dma_debug_type 321 * 322 * Return: QDF_STATUS of operation 323 */ 324 QDF_STATUS tgt_set_spectral_dma_debug(struct wlan_objmgr_pdev *pdev, 325 enum spectral_dma_debug dma_debug_type, 326 bool dma_debug_enable); 327 328 /** 329 * tgt_spectral_register_events() - Register Spectral WMI event handlers 330 * @psoc: Pointer to psoc object 331 * 332 * Return: QDF_STATUS of operation 333 */ 334 QDF_STATUS 335 tgt_spectral_register_events(struct wlan_objmgr_psoc *psoc); 336 337 /** 338 * tgt_spectral_unregister_events() - Unregister Spectral WMI event handlers 339 * @psoc: Pointer to psoc object 340 * 341 * Return: QDF_STATUS of operation 342 */ 343 QDF_STATUS 344 tgt_spectral_unregister_events(struct wlan_objmgr_psoc *psoc); 345 #endif /* _WLAN_SPECTRAL_TGT_API_H_ */ 346