1*5113495bSYour Name /* 2*5113495bSYour Name * Copyright (c) 2017-2021 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_UTILS_API_H_ 21*5113495bSYour Name #define _WLAN_SPECTRAL_UTILS_API_H_ 22*5113495bSYour Name #ifdef WLAN_CONV_SPECTRAL_ENABLE 23*5113495bSYour Name #include <wlan_objmgr_cmn.h> 24*5113495bSYour Name #include <wlan_lmac_if_def.h> 25*5113495bSYour Name 26*5113495bSYour Name /* Forward declaration */ 27*5113495bSYour Name struct direct_buf_rx_data; 28*5113495bSYour Name struct spectral_wmi_ops; 29*5113495bSYour Name struct spectral_tgt_ops; 30*5113495bSYour Name 31*5113495bSYour Name /** 32*5113495bSYour Name * wlan_spectral_is_feature_disabled_pdev() - Check if spectral feature 33*5113495bSYour Name * is disabled for a given pdev 34*5113495bSYour Name * @pdev: pointer to pdev 35*5113495bSYour Name * 36*5113495bSYour Name * Return : true if spectral is disabled, else false. 37*5113495bSYour Name */ 38*5113495bSYour Name bool wlan_spectral_is_feature_disabled_pdev(struct wlan_objmgr_pdev *pdev); 39*5113495bSYour Name 40*5113495bSYour Name /** 41*5113495bSYour Name * wlan_spectral_is_feature_disabled_ini() - Check if spectral feature 42*5113495bSYour Name * is disabled in INI 43*5113495bSYour Name * @psoc: pointer to psoc 44*5113495bSYour Name * 45*5113495bSYour Name * Return : true if spectral is disabled, else false. 46*5113495bSYour Name */ 47*5113495bSYour Name bool wlan_spectral_is_feature_disabled_ini(struct wlan_objmgr_psoc *psoc); 48*5113495bSYour Name 49*5113495bSYour Name /** 50*5113495bSYour Name * wlan_spectral_is_feature_disabled_psoc() - Check if spectral feature 51*5113495bSYour Name * is disabled for a given psoc 52*5113495bSYour Name * @psoc: pointer to psoc 53*5113495bSYour Name * 54*5113495bSYour Name * Return : true if spectral is disabled, else false. 55*5113495bSYour Name */ 56*5113495bSYour Name bool wlan_spectral_is_feature_disabled_psoc(struct wlan_objmgr_psoc *psoc); 57*5113495bSYour Name 58*5113495bSYour Name /** 59*5113495bSYour Name * wlan_spectral_is_mode_disabled_pdev() - Check if a given spectral mode 60*5113495bSYour Name * is disabled for a given pdev 61*5113495bSYour Name * @pdev: pointer to pdev 62*5113495bSYour Name * @smode: spectral scan mode 63*5113495bSYour Name * 64*5113495bSYour Name * Return : true if spectral mode is disabled, else false. 65*5113495bSYour Name */ 66*5113495bSYour Name bool wlan_spectral_is_mode_disabled_pdev(struct wlan_objmgr_pdev *pdev, 67*5113495bSYour Name enum spectral_scan_mode smode); 68*5113495bSYour Name 69*5113495bSYour Name /** 70*5113495bSYour Name * wlan_spectral_init() - API to init spectral component 71*5113495bSYour Name * 72*5113495bSYour Name * This API is invoked from dispatcher init during all component init. 73*5113495bSYour Name * This API will register all required handlers for pdev and peer object 74*5113495bSYour Name * create/delete notification. 75*5113495bSYour Name * 76*5113495bSYour Name * Return: SUCCESS, 77*5113495bSYour Name * Failure 78*5113495bSYour Name */ 79*5113495bSYour Name QDF_STATUS wlan_spectral_init(void); 80*5113495bSYour Name 81*5113495bSYour Name /** 82*5113495bSYour Name * wlan_spectral_deinit() - API to deinit spectral component 83*5113495bSYour Name * 84*5113495bSYour Name * This API is invoked from dispatcher deinit during all component deinit. 85*5113495bSYour Name * This API will unregister all registered handlers for pdev and peer object 86*5113495bSYour Name * create/delete notification. 87*5113495bSYour Name * 88*5113495bSYour Name * Return: SUCCESS, 89*5113495bSYour Name * Failure 90*5113495bSYour Name */ 91*5113495bSYour Name QDF_STATUS wlan_spectral_deinit(void); 92*5113495bSYour Name 93*5113495bSYour Name /** 94*5113495bSYour Name * wlan_lmac_if_sptrl_register_rx_ops() - Register lmac interface Rx operations 95*5113495bSYour Name * @rx_ops: Pointer to lmac interface Rx operations structure 96*5113495bSYour Name * 97*5113495bSYour Name * API to register spectral related lmac interface Rx operations 98*5113495bSYour Name * 99*5113495bSYour Name * Return: None 100*5113495bSYour Name */ 101*5113495bSYour Name void 102*5113495bSYour Name wlan_lmac_if_sptrl_register_rx_ops(struct wlan_lmac_if_rx_ops *rx_ops); 103*5113495bSYour Name 104*5113495bSYour Name /** 105*5113495bSYour Name * wlan_register_spectral_wmi_ops() - Register Spectral WMI operations 106*5113495bSYour Name * @psoc: Pointer to psoc object 107*5113495bSYour Name * @wmi_ops: pointer to the structure holding the Spectral WMI 108*5113495bSYour Name * operations 109*5113495bSYour Name * 110*5113495bSYour Name * API to register Spectral WMI operations 111*5113495bSYour Name * 112*5113495bSYour Name * Return: QDF_STATUS 113*5113495bSYour Name */ 114*5113495bSYour Name QDF_STATUS 115*5113495bSYour Name wlan_register_spectral_wmi_ops(struct wlan_objmgr_psoc *psoc, 116*5113495bSYour Name struct spectral_wmi_ops *wmi_ops); 117*5113495bSYour Name 118*5113495bSYour Name /** 119*5113495bSYour Name * wlan_register_spectral_tgt_ops() - Register Spectral target operations 120*5113495bSYour Name * @psoc: Pointer to psoc object 121*5113495bSYour Name * @tgt_ops: pointer to the structure holding the Spectral target 122*5113495bSYour Name * operations 123*5113495bSYour Name * 124*5113495bSYour Name * API to register Spectral target operations 125*5113495bSYour Name * 126*5113495bSYour Name * Return: QDF_STATUS 127*5113495bSYour Name */ 128*5113495bSYour Name QDF_STATUS 129*5113495bSYour Name wlan_register_spectral_tgt_ops(struct wlan_objmgr_psoc *psoc, 130*5113495bSYour Name struct spectral_tgt_ops *tgt_ops); 131*5113495bSYour Name 132*5113495bSYour Name /** 133*5113495bSYour Name * struct spectral_legacy_cbacks - Spectral legacy callbacks 134*5113495bSYour Name * @vdev_get_chan_freq: Get channel frequency 135*5113495bSYour Name * @vdev_get_chan_freq_seg2: Get secondary 80 center frequency 136*5113495bSYour Name * @vdev_get_ch_width: Get channel width 137*5113495bSYour Name * @vdev_get_sec20chan_freq_mhz: Get secondary 20 frequency 138*5113495bSYour Name */ 139*5113495bSYour Name struct spectral_legacy_cbacks { 140*5113495bSYour Name int16_t (*vdev_get_chan_freq)(struct wlan_objmgr_vdev *vdev); 141*5113495bSYour Name int16_t (*vdev_get_chan_freq_seg2)(struct wlan_objmgr_vdev *vdev); 142*5113495bSYour Name enum phy_ch_width (*vdev_get_ch_width)(struct wlan_objmgr_vdev *vdev); 143*5113495bSYour Name int (*vdev_get_sec20chan_freq_mhz)(struct wlan_objmgr_vdev *vdev, 144*5113495bSYour Name uint16_t *sec20chan_freq); 145*5113495bSYour Name }; 146*5113495bSYour Name 147*5113495bSYour Name /** 148*5113495bSYour Name * spectral_vdev_get_chan_freq() - Get vdev channel frequency 149*5113495bSYour Name * @vdev: vdev object 150*5113495bSYour Name * 151*5113495bSYour Name * Return: vdev operating frequency 152*5113495bSYour Name */ 153*5113495bSYour Name int16_t spectral_vdev_get_chan_freq(struct wlan_objmgr_vdev *vdev); 154*5113495bSYour Name 155*5113495bSYour Name /** 156*5113495bSYour Name * spectral_vdev_get_chan_freq_seg2() - Get vdev's secondary 80 center frequency 157*5113495bSYour Name * @vdev: vdev object 158*5113495bSYour Name * 159*5113495bSYour Name * Return: vdev secondary 80 center frequency 160*5113495bSYour Name */ 161*5113495bSYour Name int16_t spectral_vdev_get_chan_freq_seg2(struct wlan_objmgr_vdev *vdev); 162*5113495bSYour Name 163*5113495bSYour Name /** 164*5113495bSYour Name * spectral_vdev_get_sec20chan_freq_mhz() - Get vdev secondary channel frequency 165*5113495bSYour Name * @vdev: vdev object 166*5113495bSYour Name * @sec20chan_freq: secondary channel frequency 167*5113495bSYour Name * 168*5113495bSYour Name * Return: secondary channel freq 169*5113495bSYour Name */ 170*5113495bSYour Name int spectral_vdev_get_sec20chan_freq_mhz(struct wlan_objmgr_vdev *vdev, 171*5113495bSYour Name uint16_t *sec20chan_freq); 172*5113495bSYour Name 173*5113495bSYour Name /** 174*5113495bSYour Name * spectral_register_legacy_cb() - Register spectral legacy callbacks 175*5113495bSYour Name * commands on spectral parameters 176*5113495bSYour Name * @psoc: the physical device object 177*5113495bSYour Name * @legacy_cbacks: Reference to struct spectral_legacy_cbacks from which 178*5113495bSYour Name * function pointers need to be copied 179*5113495bSYour Name * 180*5113495bSYour Name * API to register spectral related legacy callbacks 181*5113495bSYour Name * 182*5113495bSYour Name * Return: QDF_STATUS_SUCCESS upon successful registration, 183*5113495bSYour Name * QDF_STATUS_E_FAILURE upon failure 184*5113495bSYour Name */ 185*5113495bSYour Name QDF_STATUS spectral_register_legacy_cb( 186*5113495bSYour Name struct wlan_objmgr_psoc *psoc, 187*5113495bSYour Name struct spectral_legacy_cbacks *legacy_cbacks); 188*5113495bSYour Name 189*5113495bSYour Name /** 190*5113495bSYour Name * spectral_vdev_get_ch_width() - Get the channel bandwidth 191*5113495bSYour Name * @vdev: Pointer to vdev 192*5113495bSYour Name * 193*5113495bSYour Name * API to get the channel bandwidth of a given vdev 194*5113495bSYour Name * 195*5113495bSYour Name * Return: Enumeration corresponding to the channel bandwidth 196*5113495bSYour Name */ 197*5113495bSYour Name enum phy_ch_width 198*5113495bSYour Name spectral_vdev_get_ch_width(struct wlan_objmgr_vdev *vdev); 199*5113495bSYour Name 200*5113495bSYour Name /** 201*5113495bSYour Name * spectral_pdev_open() - Spectral pdev open handler 202*5113495bSYour Name * @pdev: pointer to pdev object 203*5113495bSYour Name * 204*5113495bSYour Name * API to execute operations on pdev open 205*5113495bSYour Name * 206*5113495bSYour Name * Return: QDF_STATUS_SUCCESS upon successful registration, 207*5113495bSYour Name * QDF_STATUS_E_FAILURE upon failure 208*5113495bSYour Name */ 209*5113495bSYour Name QDF_STATUS spectral_pdev_open(struct wlan_objmgr_pdev *pdev); 210*5113495bSYour Name 211*5113495bSYour Name /** 212*5113495bSYour Name * wlan_spectral_psoc_open() - Spectral psoc open handler 213*5113495bSYour Name * @psoc: pointer to psoc object 214*5113495bSYour Name * 215*5113495bSYour Name * API to execute operations on psoc open 216*5113495bSYour Name * 217*5113495bSYour Name * Return: QDF_STATUS_SUCCESS upon successful registration, 218*5113495bSYour Name * QDF_STATUS_E_FAILURE upon failure 219*5113495bSYour Name */ 220*5113495bSYour Name QDF_STATUS wlan_spectral_psoc_open(struct wlan_objmgr_psoc *psoc); 221*5113495bSYour Name 222*5113495bSYour Name /** 223*5113495bSYour Name * wlan_spectral_psoc_close() - Spectral psoc close handler 224*5113495bSYour Name * @psoc: pointer to psoc object 225*5113495bSYour Name * 226*5113495bSYour Name * API to execute operations on psoc close 227*5113495bSYour Name * 228*5113495bSYour Name * Return: QDF_STATUS_SUCCESS upon successful registration, 229*5113495bSYour Name * QDF_STATUS_E_FAILURE upon failure 230*5113495bSYour Name */ 231*5113495bSYour Name QDF_STATUS wlan_spectral_psoc_close(struct wlan_objmgr_psoc *psoc); 232*5113495bSYour Name 233*5113495bSYour Name /** 234*5113495bSYour Name * wlan_spectral_psoc_enable() - Spectral psoc enable handler 235*5113495bSYour Name * @psoc: pointer to psoc object 236*5113495bSYour Name * 237*5113495bSYour Name * API to execute operations on psoc enable 238*5113495bSYour Name * 239*5113495bSYour Name * Return: QDF_STATUS_SUCCESS upon successful registration, 240*5113495bSYour Name * QDF_STATUS_E_FAILURE upon failure 241*5113495bSYour Name */ 242*5113495bSYour Name QDF_STATUS wlan_spectral_psoc_enable(struct wlan_objmgr_psoc *psoc); 243*5113495bSYour Name 244*5113495bSYour Name /** 245*5113495bSYour Name * wlan_spectral_psoc_disable() - Spectral psoc disable handler 246*5113495bSYour Name * @psoc: pointer to psoc object 247*5113495bSYour Name * 248*5113495bSYour Name * API to execute operations on psoc disable 249*5113495bSYour Name * 250*5113495bSYour Name * Return: QDF_STATUS_SUCCESS upon successful registration, 251*5113495bSYour Name * QDF_STATUS_E_FAILURE upon failure 252*5113495bSYour Name */ 253*5113495bSYour Name QDF_STATUS wlan_spectral_psoc_disable(struct wlan_objmgr_psoc *psoc); 254*5113495bSYour Name 255*5113495bSYour Name /** 256*5113495bSYour Name * spectral_register_dbr() - register Spectral event handler with DDMA 257*5113495bSYour Name * @pdev: pointer to pdev object 258*5113495bSYour Name * 259*5113495bSYour Name * API to register event handler with Direct DMA 260*5113495bSYour Name * 261*5113495bSYour Name * Return: QDF_STATUS_SUCCESS upon successful registration, 262*5113495bSYour Name * QDF_STATUS_E_FAILURE upon failure 263*5113495bSYour Name */ 264*5113495bSYour Name 265*5113495bSYour Name QDF_STATUS spectral_register_dbr(struct wlan_objmgr_pdev *pdev); 266*5113495bSYour Name 267*5113495bSYour Name /** 268*5113495bSYour Name * spectral_unregister_dbr() - unregister Spectral event handler with DDMA 269*5113495bSYour Name * @pdev: pointer to pdev object 270*5113495bSYour Name * 271*5113495bSYour Name * API to unregister event handler with Direct DMA 272*5113495bSYour Name * 273*5113495bSYour Name * Return: QDF_STATUS_SUCCESS upon successful unregistration, 274*5113495bSYour Name * QDF_STATUS_E_FAILURE upon failure 275*5113495bSYour Name */ 276*5113495bSYour Name QDF_STATUS spectral_unregister_dbr(struct wlan_objmgr_pdev *pdev); 277*5113495bSYour Name 278*5113495bSYour Name /** 279*5113495bSYour Name * wlan_spectral_init_pdev_feature_caps() - API to initialize 280*5113495bSYour Name * spectral pdev feature caps 281*5113495bSYour Name * @pdev: pointer to pdev object 282*5113495bSYour Name * 283*5113495bSYour Name * API to initialize Spectral feature caps for a given pdev. 284*5113495bSYour Name * 285*5113495bSYour Name * Return: QDF_STATUS_SUCCESS upon successful initialization, 286*5113495bSYour Name * QDF_STATUS_E_FAILURE upon failure 287*5113495bSYour Name */ 288*5113495bSYour Name QDF_STATUS wlan_spectral_init_pdev_feature_caps(struct wlan_objmgr_pdev *pdev); 289*5113495bSYour Name 290*5113495bSYour Name /** 291*5113495bSYour Name * wlan_spectral_init_psoc_feature_cap() - API to initialize 292*5113495bSYour Name * spectral psoc feature caps 293*5113495bSYour Name * @psoc: pointer to psoc object 294*5113495bSYour Name * 295*5113495bSYour Name * API to initialize Spectral feature caps for a given psoc. 296*5113495bSYour Name * 297*5113495bSYour Name * Return: QDF_STATUS_SUCCESS upon successful initialization, 298*5113495bSYour Name * QDF_STATUS_E_FAILURE upon failure 299*5113495bSYour Name */ 300*5113495bSYour Name QDF_STATUS wlan_spectral_init_psoc_feature_cap(struct wlan_objmgr_psoc *psoc); 301*5113495bSYour Name 302*5113495bSYour Name /** 303*5113495bSYour Name * wlan_spectral_pdev_get_lmac_if_txops() - API to get pointer 304*5113495bSYour Name * to Spectral txops structure 305*5113495bSYour Name * @pdev: pointer to pdev object 306*5113495bSYour Name * 307*5113495bSYour Name * API to get pointer to Spectral txops structure 308*5113495bSYour Name * 309*5113495bSYour Name * Return: Pointer to Spectral txops structure, NULL in case of 310*5113495bSYour Name * error. 311*5113495bSYour Name */ 312*5113495bSYour Name struct wlan_lmac_if_sptrl_tx_ops * 313*5113495bSYour Name wlan_spectral_pdev_get_lmac_if_txops(struct wlan_objmgr_pdev *pdev); 314*5113495bSYour Name 315*5113495bSYour Name #ifdef DIRECT_BUF_RX_ENABLE 316*5113495bSYour Name /** 317*5113495bSYour Name * spectral_dbr_event_handler() - Spectral dbr event handler 318*5113495bSYour Name * @pdev: pointer to pdev object 319*5113495bSYour Name * @payload: dbr event buffer 320*5113495bSYour Name * 321*5113495bSYour Name * API to handle spectral dbr event 322*5113495bSYour Name * 323*5113495bSYour Name * Return: true to release buf 324*5113495bSYour Name */ 325*5113495bSYour Name bool spectral_dbr_event_handler(struct wlan_objmgr_pdev *pdev, 326*5113495bSYour Name struct direct_buf_rx_data *payload); 327*5113495bSYour Name #endif 328*5113495bSYour Name #endif /* WLAN_CONV_SPECTRAL_ENABLE */ 329*5113495bSYour Name #endif /* _WLAN_SPECTRAL_UTILS_API_H_*/ 330