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