1 /* 2 * Copyright (c) 2017-2020 The Linux Foundation. All rights reserved. 3 * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved. 4 * 5 * 6 * Permission to use, copy, modify, and/or distribute this software for 7 * any purpose with or without fee is hereby granted, provided that the 8 * above copyright notice and this permission notice appear in all 9 * copies. 10 * 11 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 12 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 13 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 14 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 15 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 16 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 17 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 18 * PERFORMANCE OF THIS SOFTWARE. 19 */ 20 21 #ifndef _SPECTRAL_DEFS_I_H_ 22 #define _SPECTRAL_DEFS_I_H_ 23 24 #include <wlan_objmgr_cmn.h> 25 #include <wlan_objmgr_global_obj.h> 26 #include <wlan_objmgr_psoc_obj.h> 27 #include <wlan_objmgr_pdev_obj.h> 28 #include <wlan_objmgr_vdev_obj.h> 29 #include <qdf_list.h> 30 #include <qdf_timer.h> 31 #include <qdf_util.h> 32 #include <wlan_spectral_public_structs.h> 33 #include <wlan_spectral_utils_api.h> 34 #include <spectral_ioctl.h> 35 36 #define spectral_fatal(format, args...) \ 37 QDF_TRACE_FATAL(QDF_MODULE_ID_SPECTRAL, format, ## args) 38 #define spectral_err(format, args...) \ 39 QDF_TRACE_ERROR(QDF_MODULE_ID_SPECTRAL, format, ## args) 40 #define spectral_warn(format, args...) \ 41 QDF_TRACE_WARN(QDF_MODULE_ID_SPECTRAL, format, ## args) 42 #define spectral_info(format, args...) \ 43 QDF_TRACE_INFO(QDF_MODULE_ID_SPECTRAL, format, ## args) 44 #define spectral_debug(format, args...) \ 45 QDF_TRACE_DEBUG(QDF_MODULE_ID_SPECTRAL, format, ## args) 46 47 #define spectral_fatal_nofl(format, args...) \ 48 QDF_TRACE_FATAL_NO_FL(QDF_MODULE_ID_SPECTRAL, format, ## args) 49 #define spectral_err_nofl(format, args...) \ 50 QDF_TRACE_ERROR_NO_FL(QDF_MODULE_ID_SPECTRAL, format, ## args) 51 #define spectral_warn_nofl(format, args...) \ 52 QDF_TRACE_WARN_NO_FL(QDF_MODULE_ID_SPECTRAL, format, ## args) 53 #define spectral_info_nofl(format, args...) \ 54 QDF_TRACE_INFO_NO_FL(QDF_MODULE_ID_SPECTRAL, format, ## args) 55 #define spectral_debug_nofl(format, args...) \ 56 QDF_TRACE_DEBUG_NO_FL(QDF_MODULE_ID_SPECTRAL, format, ## args) 57 58 #define spectral_fatal_rl(format, args...) \ 59 QDF_TRACE_FATAL_RL(QDF_MODULE_ID_SPECTRAL, format, ## args) 60 #define spectral_err_rl(format, args...) \ 61 QDF_TRACE_ERROR_RL(QDF_MODULE_ID_SPECTRAL, format, ## args) 62 #define spectral_warn_rl(format, args...) \ 63 QDF_TRACE_WARN_RL(QDF_MODULE_ID_SPECTRAL, format, ## args) 64 #define spectral_info_rl(format, args...) \ 65 QDF_TRACE_INFO_RL(QDF_MODULE_ID_SPECTRAL, format, ## args) 66 #define spectral_debug_rl(format, args...) \ 67 QDF_TRACE_DEBUG_RL(QDF_MODULE_ID_SPECTRAL, format, ## args) 68 69 #define spectral_fatal_rl_nofl(format, args...) \ 70 QDF_TRACE_FATAL_RL_NO_FL(QDF_MODULE_ID_SPECTRAL, format, ## args) 71 #define spectral_err_rl_nofl(format, args...) \ 72 QDF_TRACE_ERROR_RL_NO_FL(QDF_MODULE_ID_SPECTRAL, format, ## args) 73 #define spectral_warn_rl_nofl(format, args...) \ 74 QDF_TRACE_WARN_RL_NO_FL(QDF_MODULE_ID_SPECTRAL, format, ## args) 75 #define spectral_info_rl_nofl(format, args...) \ 76 QDF_TRACE_INFO_RL_NO_FL(QDF_MODULE_ID_SPECTRAL, format, ## args) 77 #define spectral_debug_rl_nofl(format, args...) \ 78 QDF_TRACE_DEBUG_RL_NO_FL(QDF_MODULE_ID_SPECTRAL, format, ## args) 79 80 /** 81 * struct pdev_spectral - Radio specific spectral object 82 * @psptrl_pdev: Back-pointer to struct wlan_objmgr_pdev 83 * @spectral_sock: Spectral Netlink socket for sending samples to 84 * applications 85 * @psptrl_target_handle: reference to spectral lmac object 86 * @skb: Socket buffer for sending samples to applications 87 * @spectral_pid : Spectral port ID 88 */ 89 struct pdev_spectral { 90 struct wlan_objmgr_pdev *psptrl_pdev; 91 struct sock *spectral_sock; 92 void *psptrl_target_handle; 93 struct sk_buff *skb[SPECTRAL_MSG_TYPE_MAX]; 94 uint32_t spectral_pid; 95 }; 96 97 struct spectral_wmi_ops; 98 struct spectral_tgt_ops; 99 100 /** 101 * struct spectral_context - spectral global context 102 * @psoc_obj: Reference to psoc global object 103 * @psoc_target_handle: Reference to psoc target_if object 104 * @legacy_cbacks: Spectral legacy callbacks 105 * 106 * Call back functions to invoke independent of OL/DA 107 * @sptrlc_spectral_control: 108 * @sptrlc_ucfg_phyerr_config: ucfg handler for phyerr 109 * @sptrlc_pdev_spectral_init: Init pdev Spectral 110 * @sptrlc_pdev_spectral_deinit: Deinit pdev Spectral 111 * @sptrlc_psoc_spectral_init: Spectral psoc init 112 * @sptrlc_psoc_spectral_deinit: Spectral psoc deinit 113 * @sptrlc_set_spectral_config: Set spectral configurations 114 * @sptrlc_get_spectral_config: Get spectral configurations 115 * @sptrlc_start_spectral_scan: Start spectral scan 116 * @sptrlc_stop_spectral_scan: Stop spectral scan 117 * @sptrlc_is_spectral_active: Check if spectral scan is active 118 * @sptrlc_is_spectral_enabled: Check if spectral is enabled 119 * @sptrlc_set_debug_level: Set debug level 120 * @sptrlc_get_debug_level: Get debug level 121 * @sptrlc_get_spectral_capinfo: Get spectral capability info 122 * @sptrlc_get_spectral_diagstats: Get spectral diag status 123 * @sptrlc_register_spectral_wmi_ops: Register Spectral WMI operations 124 * @sptrlc_register_spectral_tgt_ops: Register Spectral target operations 125 * @sptrlc_register_netlink_cb: Register Netlink callbacks 126 * @sptrlc_use_nl_bcast: Check whether to use Netlink broadcast/unicast 127 * @sptrlc_deregister_netlink_cb: De-register Netlink callbacks 128 * @sptrlc_process_spectral_report: Process spectral report 129 * @sptrlc_set_dma_debug: Set DMA debug 130 */ 131 struct spectral_context { 132 struct wlan_objmgr_psoc *psoc_obj; 133 void *psoc_target_handle; 134 struct spectral_legacy_cbacks legacy_cbacks; 135 QDF_STATUS (*sptrlc_spectral_control) 136 (struct wlan_objmgr_pdev *pdev, 137 struct spectral_cp_request *sscan_req); 138 int (*sptrlc_ucfg_phyerr_config)(struct wlan_objmgr_pdev *pdev, 139 void *ad); 140 void * (*sptrlc_pdev_spectral_init)(struct wlan_objmgr_pdev *pdev); 141 void (*sptrlc_pdev_spectral_deinit)(struct wlan_objmgr_pdev *pdev); 142 void * (*sptrlc_psoc_spectral_init)(struct wlan_objmgr_psoc *psoc); 143 void (*sptrlc_psoc_spectral_deinit)(struct wlan_objmgr_psoc *psoc); 144 QDF_STATUS (*sptrlc_set_spectral_config) 145 (struct wlan_objmgr_pdev *pdev, 146 const struct spectral_cp_param *param, 147 const enum spectral_scan_mode smode, 148 enum spectral_cp_error_code *err); 149 QDF_STATUS (*sptrlc_get_spectral_config) 150 (struct wlan_objmgr_pdev *pdev, 151 struct spectral_config *sptrl_config, 152 const enum spectral_scan_mode smode); 153 QDF_STATUS (*sptrlc_start_spectral_scan) 154 (struct wlan_objmgr_pdev *pdev, 155 uint8_t vdev_id, 156 const enum spectral_scan_mode smode, 157 enum spectral_cp_error_code *err); 158 QDF_STATUS (*sptrlc_stop_spectral_scan) 159 (struct wlan_objmgr_pdev *pdev, 160 enum spectral_scan_mode smode, 161 enum spectral_cp_error_code *err); 162 bool (*sptrlc_is_spectral_active)(struct wlan_objmgr_pdev *pdev, 163 enum spectral_scan_mode smode); 164 bool (*sptrlc_is_spectral_enabled)(struct wlan_objmgr_pdev *pdev, 165 enum spectral_scan_mode smode); 166 QDF_STATUS (*sptrlc_set_debug_level)(struct wlan_objmgr_pdev *pdev, 167 uint32_t debug_level); 168 uint32_t (*sptrlc_get_debug_level)(struct wlan_objmgr_pdev *pdev); 169 QDF_STATUS (*sptrlc_get_spectral_capinfo)(struct wlan_objmgr_pdev *pdev, 170 struct spectral_caps *scaps); 171 QDF_STATUS (*sptrlc_get_spectral_diagstats) 172 (struct wlan_objmgr_pdev *pdev, 173 struct spectral_diag_stats *stats); 174 QDF_STATUS (*sptrlc_register_spectral_wmi_ops)( 175 struct wlan_objmgr_psoc *psoc, 176 struct spectral_wmi_ops *wmi_ops); 177 QDF_STATUS (*sptrlc_register_spectral_tgt_ops)( 178 struct wlan_objmgr_psoc *psoc, 179 struct spectral_tgt_ops *tgt_ops); 180 void (*sptrlc_register_netlink_cb)( 181 struct wlan_objmgr_pdev *pdev, 182 struct spectral_nl_cb *nl_cb); 183 bool (*sptrlc_use_nl_bcast)(struct wlan_objmgr_pdev *pdev); 184 void (*sptrlc_deregister_netlink_cb)(struct wlan_objmgr_pdev *pdev); 185 int (*sptrlc_process_spectral_report)( 186 struct wlan_objmgr_pdev *pdev, 187 void *payload); 188 QDF_STATUS (*sptrlc_set_dma_debug)( 189 struct wlan_objmgr_pdev *pdev, 190 enum spectral_dma_debug dma_debug_type, 191 bool dma_debug_enable); 192 }; 193 194 #endif /* _SPECTRAL_DEFS_I_H_ */ 195