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