1 /* 2 * Copyright (c) 2016-2018 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 /** 21 * DOC: This file has the DFS dispatcher API which is exposed to outside of DFS 22 * component. 23 */ 24 25 #ifndef _WLAN_DFS_TGT_API_H_ 26 #define _WLAN_DFS_TGT_API_H_ 27 28 #include <wlan_dfs_public_struct.h> 29 30 /* Max number arguments for DFS unit test command */ 31 #define DFS_MAX_NUM_UNIT_TEST_ARGS 3 32 33 /* Command id to send test radar to firmware */ 34 #define DFS_PHYERR_OFFLOAD_TEST_SET_RADAR 0 35 36 /* Number of arguments for DFS unit test command */ 37 #define DFS_UNIT_TEST_NUM_ARGS 3 38 39 /* Segment ID corresponding to primary segment */ 40 #define SEG_ID_PRIMARY 0 41 42 /* Segment ID corresponding to secondary segment */ 43 #define SEG_ID_SECONDARY 1 44 45 /* Index id pointing to command id value */ 46 #define IDX_CMD_ID 0 47 48 /* Index id pointing to pdev id value */ 49 #define IDX_PDEV_ID 1 50 51 /* Index pointing to segment id value */ 52 #define IDX_SEG_ID 2 53 54 /** 55 * struct dfs_emulate_bang_radar_test_cmd - Unit test command structure to send 56 * WMI command to firmware from host 57 * and simulate bangradar event. 58 * @vdev_id: vdev id 59 * @num_args: number of arguments 60 * @args: arguments 61 */ 62 struct dfs_emulate_bang_radar_test_cmd { 63 uint32_t vdev_id; 64 uint32_t num_args; 65 uint32_t args[DFS_MAX_NUM_UNIT_TEST_ARGS]; 66 }; 67 68 extern struct dfs_to_mlme global_dfs_to_mlme; 69 70 /** 71 * tgt_dfs_set_current_channel() - Fill dfs channel structure from 72 * dfs_channel structure. 73 * @pdev: Pointer to DFS pdev object. 74 * @dfs_ch_freq: Frequency in Mhz. 75 * @dfs_ch_flags: Channel flags. 76 * @dfs_ch_flagext: Extended channel flags. 77 * @dfs_ch_ieee: IEEE channel number. 78 * @dfs_ch_vhtop_ch_freq_seg1: Channel Center frequency1. 79 * @dfs_ch_vhtop_ch_freq_seg2: Channel Center frequency2. 80 */ 81 QDF_STATUS tgt_dfs_set_current_channel(struct wlan_objmgr_pdev *pdev, 82 uint16_t dfs_ch_freq, 83 uint64_t dfs_ch_flags, 84 uint16_t dfs_ch_flagext, 85 uint8_t dfs_ch_ieee, 86 uint8_t dfs_ch_vhtop_ch_freq_seg1, 87 uint8_t dfs_ch_vhtop_ch_freq_seg2); 88 89 /** 90 * tgt_dfs_get_radars() - Based on the chipset, calls init radar table functions 91 * @pdev: Pointer to DFS pdev object. 92 * 93 * Wrapper function for dfs_get_radars(). This function called from 94 * outside of DFS component. 95 */ 96 QDF_STATUS tgt_dfs_get_radars(struct wlan_objmgr_pdev *pdev); 97 98 /** 99 * tgt_dfs_process_phyerr() - Process phyerr. 100 * @pdev: Pointer to DFS pdev object. 101 * @buf: Phyerr buffer. 102 * @datalen: phyerr buffer length. 103 * @r_rssi: RSSI. 104 * @r_ext_rssi: Extension channel RSSI. 105 * @r_rs_tstamp: Timestamp. 106 * @r_fulltsf: TSF64. 107 * 108 * Wrapper function for dfs_process_phyerr(). This function called from 109 * outside of DFS component. 110 */ 111 QDF_STATUS tgt_dfs_process_phyerr(struct wlan_objmgr_pdev *pdev, 112 void *buf, 113 uint16_t datalen, 114 uint8_t r_rssi, 115 uint8_t r_ext_rssi, 116 uint32_t r_rs_tstamp, 117 uint64_t r_fulltsf); 118 119 /** 120 * tgt_dfs_process_phyerr_filter_offload() - Process radar event. 121 * Wrapper function for dfs_process_phyerr_filter_offload(). This function 122 * called from outside of DFS component. 123 * @pdev: Pointer to DFS pdev object. 124 * @wlan_radar_event: pointer to radar_event_info. 125 * 126 * Return: QDF_STATUS 127 */ 128 QDF_STATUS tgt_dfs_process_phyerr_filter_offload(struct wlan_objmgr_pdev *pdev, 129 struct radar_event_info *wlan_radar_event); 130 131 /** 132 * tgt_dfs_is_phyerr_filter_offload() - Is phyerr filter offload. 133 * @psoc: Pointer to psoc object. 134 * @is_phyerr_filter_offload: Pointer to is_phyerr_filter_offload. 135 * 136 * Return: QDF_STATUS 137 */ 138 QDF_STATUS tgt_dfs_is_phyerr_filter_offload(struct wlan_objmgr_psoc *psoc, 139 bool *is_phyerr_filter_offload); 140 141 /** 142 * tgt_dfs_destroy_object() - Destroys the DFS object. 143 * @pdev: Pointer to DFS pdev object. 144 * 145 * Wrapper function for dfs_destroy_object(). This function called from 146 * outside of DFS component. 147 */ 148 QDF_STATUS tgt_dfs_destroy_object(struct wlan_objmgr_pdev *pdev); 149 150 /** 151 * tgt_dfs_radar_enable() - Enables the radar. 152 * @pdev: Pointer to DFS pdev object. 153 * @no_cac: If no_cac is 0, it cancels the CAC. 154 * 155 * This is called each time a channel change occurs, to (potentially) enable 156 * the radar code. 157 */ 158 QDF_STATUS tgt_dfs_radar_enable(struct wlan_objmgr_pdev *pdev, 159 int no_cac, uint32_t opmode); 160 161 #ifdef QCA_MCL_DFS_SUPPORT 162 /** 163 * tgt_dfs_set_tx_leakage_threshold() - set tx_leakage_threshold. 164 * @pdev: Pointer to DFS pdev object. 165 * @tx_leakage_threshold: tx leakage threshold for dfs. 166 * 167 * Return QDF_STATUS. 168 */ 169 QDF_STATUS tgt_dfs_set_tx_leakage_threshold(struct wlan_objmgr_pdev *pdev, 170 uint16_t tx_leakage_threshold); 171 #endif 172 173 /** 174 * tgt_dfs_control()- Used to process ioctls related to DFS. 175 * @pdev: Pointer to DFS pdev object. 176 * @id: Command type. 177 * @indata: Input buffer. 178 * @insize: size of the input buffer. 179 * @outdata: A buffer for the results. 180 * @outsize: Size of the output buffer. 181 */ 182 QDF_STATUS tgt_dfs_control(struct wlan_objmgr_pdev *pdev, 183 u_int id, 184 void *indata, 185 uint32_t insize, 186 void *outdata, 187 uint32_t *outsize, 188 int *error); 189 190 /** 191 * tgt_dfs_is_precac_timer_running() - Check whether precac timer is running. 192 * @pdev: Pointer to DFS pdev object. 193 * @is_precac_timer_running: Pointer to save precac timer value. 194 * 195 * Wrapper function for dfs_is_precac_timer_running(). This function called from 196 * outside of DFS component. 197 */ 198 QDF_STATUS tgt_dfs_is_precac_timer_running(struct wlan_objmgr_pdev *pdev, 199 bool *is_precac_timer_running); 200 201 /** 202 * utils_dfs_find_vht80_chan_for_precac() - Find VHT80 channel for precac. 203 * @pdev: Pointer to DFS pdev object. 204 * @chan_mode: Channel mode. 205 * @ch_freq_seg1: Segment1 channel freq. 206 * @cfreq1: cfreq1. 207 * @cfreq2: cfreq2. 208 * @phy_mode: Precac phymode. 209 * @dfs_set_cfreq2: Precac cfreq2 210 * @set_agile: Agile mode flag. 211 * 212 * wrapper function for dfs_find_vht80_chan_for_precacdfs_cancel_cac_timer(). 213 * This function called from outside of dfs component. 214 */ 215 QDF_STATUS tgt_dfs_find_vht80_chan_for_precac(struct wlan_objmgr_pdev *pdev, 216 uint32_t chan_mode, 217 uint8_t ch_freq_seg1, 218 uint32_t *cfreq1, 219 uint32_t *cfreq2, 220 uint32_t *phy_mode, 221 bool *dfs_set_cfreq2, 222 bool *set_agile); 223 224 /** 225 * tgt_dfs_process_radar_ind() - Process radar found indication. 226 * @pdev: Pointer to DFS pdev object. 227 * @radar_found: radar found info. 228 * 229 * Process radar found indication. 230 * 231 * Return QDF_STATUS. 232 */ 233 QDF_STATUS tgt_dfs_process_radar_ind(struct wlan_objmgr_pdev *pdev, 234 struct radar_found_info *radar_found); 235 236 /** 237 * tgt_dfs_cac_complete() - Process cac complete indication. 238 * @pdev: Pointer to DFS pdev object. 239 * @vdev_id: vdev id. 240 * 241 * Process cac complete indication from firmware. 242 * 243 * Return QDF_STATUS. 244 */ 245 QDF_STATUS tgt_dfs_cac_complete(struct wlan_objmgr_pdev *pdev, 246 uint32_t vdev_id); 247 248 /** 249 * tgt_dfs_reg_ev_handler() - Register dfs events. 250 * @psoc: Pointer to psoc. 251 * @dfs_offload: phy err processing offloaded to firmware. 252 * 253 * Register dfs events. 254 * 255 * Return: QDF_STATUS. 256 */ 257 QDF_STATUS tgt_dfs_reg_ev_handler(struct wlan_objmgr_psoc *psoc, 258 bool dfs_offload); 259 260 /** 261 * tgt_dfs_stop() - Clear dfs timers. 262 * @dfs: Pointer to wlan_dfs structure. 263 */ 264 QDF_STATUS tgt_dfs_stop(struct wlan_objmgr_pdev *pdev); 265 266 /** 267 * tgt_dfs_process_emulate_bang_radar_cmd() - Process to emulate dfs bangradar 268 * command. 269 * @pdev: Pointer to DFS pdev object. 270 * 271 * Process to emulate dfs bangradar command. 272 * 273 * Return: QDF_STATUS. 274 */ 275 QDF_STATUS tgt_dfs_process_emulate_bang_radar_cmd(struct wlan_objmgr_pdev *pdev, 276 struct dfs_emulate_bang_radar_test_cmd *dfs_unit_test); 277 278 #ifdef QCA_MCL_DFS_SUPPORT 279 /** 280 * tgt_dfs_set_phyerr_filter_offload() - config phyerr filter offload 281 * @pdev: Pointer to DFS pdev object. 282 * 283 * Return: QDF_STATUS 284 */ 285 QDF_STATUS tgt_dfs_set_phyerr_filter_offload(struct wlan_objmgr_pdev *pdev); 286 #endif 287 #endif /* _WLAN_DFS_TGT_API_H_ */ 288