1 /* 2 * Copyright (c) 2019-2021 The Linux Foundation. All rights reserved. 3 * 4 * Permission to use, copy, modify, and/or distribute this software for 5 * any purpose with or without fee is hereby granted, provided that the 6 * above copyright notice and this permission notice appear in all 7 * copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 10 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 11 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 12 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 13 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 14 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 15 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 16 * PERFORMANCE OF THIS SOFTWARE. 17 */ 18 19 #ifndef _WLAN_CFR_UCFG_API_H_ 20 #define _WLAN_CFR_UCFG_API_H_ 21 22 #include <wlan_objmgr_peer_obj.h> 23 #include <wlan_objmgr_pdev_obj.h> 24 #include <wlan_cfr_public_structs.h> 25 #include <wlan_cfr_utils_api.h> 26 27 /** 28 * ucfg_cfr_start_capture() - function to start cfr capture for connected client 29 * @pdev: pointer to pdev object 30 * @peer: pointer to peer object 31 * @cfr_params: config params to cfr capture 32 * 33 * Return: status of start capture. 34 */ 35 int ucfg_cfr_start_capture(struct wlan_objmgr_pdev *pdev, 36 struct wlan_objmgr_peer *peer, 37 struct cfr_capture_params *cfr_params); 38 39 /** 40 * ucfg_cfr_get_capture_status() - function to populate capture status 41 * @pdev: pointer to pdev object 42 * @status: capture status 43 * 44 * Return: none 45 */ 46 void ucfg_cfr_get_capture_status(struct wlan_objmgr_pdev *pdev, 47 enum cfr_capt_status *status); 48 49 /** 50 * ucfg_cfr_stop_capture() - function to stop cfr capture for connected client 51 * @pdev: pointer to pdev object 52 * @peer: pointer to peer object 53 * 54 * Return: status of stop capture. 55 */ 56 int ucfg_cfr_stop_capture(struct wlan_objmgr_pdev *pdev, 57 struct wlan_objmgr_peer *peer); 58 59 /** 60 * ucfg_cfr_start_capture_probe_req() - function to start cfr capture for 61 * unassociated clients 62 * @pdev: pointer to pdev object 63 * @unassoc_mac: mac address of un-associated client 64 * @cfr_params: config params to cfr capture 65 * 66 * Return: status of start capture. 67 */ 68 int ucfg_cfr_start_capture_probe_req(struct wlan_objmgr_pdev *pdev, 69 struct qdf_mac_addr *unassoc_mac, 70 struct cfr_capture_params *params); 71 72 /** 73 * ucfg_cfr_stop_capture_probe_req() - function to stop cfr capture for 74 * unassociated cleints 75 * @pdev: pointer to pdev object 76 * @unassoc_mac: mac address of un-associated client 77 * 78 * Return: status of stop capture. 79 */ 80 int ucfg_cfr_stop_capture_probe_req(struct wlan_objmgr_pdev *pdev, 81 struct qdf_mac_addr *unassoc_mac); 82 83 /** 84 * ucfg_cfr_list_peers() - Lists total number of peers with cfr capture enabled 85 * @pdev: pointer to pdev object 86 * 87 * Return: number of peers with cfr capture enabled 88 */ 89 int ucfg_cfr_list_peers(struct wlan_objmgr_pdev *pdev); 90 91 /** 92 * ucfg_cfr_set_timer() - function to enable cfr timer 93 * @pdev: pointer to pdev object 94 * @value: value to be set 95 * 96 * Return: status of timer enable 97 */ 98 int ucfg_cfr_set_timer(struct wlan_objmgr_pdev *pdev, uint32_t value); 99 100 /** 101 * ucfg_cfr_get_timer() - function to get cfr_timer_enable 102 * @pdev: pointer to pdev object 103 * 104 * Return: value of cfr_timer_enable 105 */ 106 int ucfg_cfr_get_timer(struct wlan_objmgr_pdev *pdev); 107 108 /** 109 * ucfg_cfr_stop_indication() - User space API to write cfr stop string 110 * @vdev - pointer to vdev object 111 * 112 * Write stop string and indicate to up layer. 113 * 114 * Return: status of write CFR stop string 115 */ 116 QDF_STATUS ucfg_cfr_stop_indication(struct wlan_objmgr_vdev *vdev); 117 118 #ifdef WLAN_CFR_ADRASTEA 119 /** 120 * ucfg_cfr_capture_data() - API called when HTT msg for CFR dump ind received 121 * @psoc: pointer to psoc object 122 * @vdev_id : vdev id 123 * @hdr: CFR header 124 * @mem_index: start offset index of dump in mem 125 * 126 * Return: None 127 */ 128 void ucfg_cfr_capture_data(struct wlan_objmgr_psoc *psoc, uint32_t vdev_id, 129 struct csi_cfr_header *hdr, uint32_t mem_index); 130 #else 131 static inline 132 void ucfg_cfr_capture_data(struct wlan_objmgr_psoc *psoc, uint32_t vdev_id, 133 struct csi_cfr_header *hdr, uint32_t mem_index) 134 { 135 } 136 #endif 137 138 #ifdef WLAN_ENH_CFR_ENABLE 139 /* Channel capture recipe filters */ 140 enum capture_type { 141 RCC_DIRECTED_FTM_FILTER, 142 RCC_ALL_FTM_ACK_FILTER, 143 RCC_DIRECTED_NDPA_NDP_FILTER, 144 RCC_NDPA_NDP_ALL_FILTER, 145 RCC_TA_RA_FILTER, 146 RCC_ALL_PACKET_FILTER, 147 RCC_DIS_ALL_MODE, 148 }; 149 150 /** 151 * ucfg_cfr_set_rcc_mode() - function to set RCC mode 152 * @vdev: pointer to vdev object 153 * @mode: capture type passed by user 154 * @value: Enable/Disable capture mode 155 * 156 * Return: status if the mode is set or not 157 */ 158 QDF_STATUS ucfg_cfr_set_rcc_mode(struct wlan_objmgr_vdev *vdev, 159 enum capture_type mode, uint8_t value); 160 161 /** 162 * ucfg_cfr_get_rcc_enabled() - function to get RCC mode 163 * @vdev: pointer to vdev object 164 * 165 * Return: if the rcc is enabled or not 166 */ 167 bool ucfg_cfr_get_rcc_enabled(struct wlan_objmgr_vdev *vdev); 168 169 /** 170 * ucfg_cfr_set_tara_config() - function to configure TA/RA address and mask 171 * @vdev: pointer to vdev object 172 * @params: user config 173 * 174 * Return: status 175 */ 176 QDF_STATUS ucfg_cfr_set_tara_config(struct wlan_objmgr_vdev *vdev, 177 struct cfr_wlanconfig_param *params); 178 179 /** 180 * ucfg_cfr_set_bw_nss() - function to configure nss and bandwidth 181 * @vdev: pointer to vdev object 182 * @params: user config 183 * 184 * Return: status 185 */ 186 QDF_STATUS ucfg_cfr_set_bw_nss(struct wlan_objmgr_vdev *vdev, 187 struct cfr_wlanconfig_param *params); 188 189 /** 190 * ucfg_cfr_set_frame_type_subtype() - function to configure frame type/subtype 191 * @vdev: pointer to vdev object 192 * @params: user config 193 * 194 * Return: status 195 */ 196 QDF_STATUS 197 ucfg_cfr_set_frame_type_subtype(struct wlan_objmgr_vdev *vdev, 198 struct cfr_wlanconfig_param *params); 199 200 /** 201 * ucfg_cfr_set_capture_duration() - function to configure capture duration 202 * @vdev: pointer to vdev object 203 * @params: user config 204 * 205 * Return: status 206 */ 207 QDF_STATUS 208 ucfg_cfr_set_capture_duration(struct wlan_objmgr_vdev *vdev, 209 struct cfr_wlanconfig_param *params); 210 211 /** 212 * ucfg_cfr_set_capture_interval() - function to configure capture interval 213 * @vdev: pointer to vdev object 214 * @params: user config 215 * 216 * Return: status 217 */ 218 QDF_STATUS 219 ucfg_cfr_set_capture_interval(struct wlan_objmgr_vdev *vdev, 220 struct cfr_wlanconfig_param *params); 221 222 /** 223 * ucfg_cfr_set_tara_filterin_as_fp() - function to FP/MO filtering for m_TA_RA 224 * @vdev: pointer to vdev object 225 * @params: user config 226 * 227 * Return: status 228 */ 229 QDF_STATUS 230 ucfg_cfr_set_tara_filterin_as_fp(struct wlan_objmgr_vdev *vdev, 231 struct cfr_wlanconfig_param *params); 232 233 /** 234 * ucfg_cfr_set_capture_count() - function to configure capture count 235 * @vdev: pointer to vdev object 236 * @params: user config 237 * 238 * Return: status 239 */ 240 QDF_STATUS 241 ucfg_cfr_set_capture_count(struct wlan_objmgr_vdev *vdev, 242 struct cfr_wlanconfig_param *params); 243 244 /** 245 * ucfg_cfr_set_capture_interval_mode_sel() - function to configure capture 246 * interval mode nob 247 * @vdev: pointer to vdev object 248 * @params: user confi 249 * 250 * Return: status 251 */ 252 QDF_STATUS 253 ucfg_cfr_set_capture_interval_mode_sel(struct wlan_objmgr_vdev *vdev, 254 struct cfr_wlanconfig_param *params); 255 256 /** 257 * ucfg_cfr_set_en_bitmap() - function to configure 16-bit bitmap in TA_RA mode 258 * @vdev: pointer to vdev object 259 * @params: user config 260 * 261 * Return: status 262 */ 263 QDF_STATUS ucfg_cfr_set_en_bitmap(struct wlan_objmgr_vdev *vdev, 264 struct cfr_wlanconfig_param *params); 265 266 /** 267 * ucfg_cfr_set_reset_bitmap() - function to clear all 9 params for all 16 268 * groups in TA_RA mode 269 * @vdev: pointer to vdev object 270 * @params: user config 271 * 272 * Return: status 273 */ 274 QDF_STATUS ucfg_cfr_set_reset_bitmap(struct wlan_objmgr_vdev *vdev, 275 struct cfr_wlanconfig_param *params); 276 277 /** 278 * ucfg_cfr_set_ul_mu_user_mask() - function to configure UL MU user mask 279 * @vdev: pointer to vdev object 280 * @params: user config 281 * 282 * Return: status 283 */ 284 QDF_STATUS 285 ucfg_cfr_set_ul_mu_user_mask(struct wlan_objmgr_vdev *vdev, 286 struct cfr_wlanconfig_param *params); 287 288 /** 289 * ucfg_cfr_set_freeze_tlv_delay_cnt() - function to configure freeze TLV delay 290 * count threshold 291 * @vdev: pointer to vdev object 292 * @params: user config 293 * 294 * Return: status 295 */ 296 QDF_STATUS 297 ucfg_cfr_set_freeze_tlv_delay_cnt(struct wlan_objmgr_vdev *vdev, 298 struct cfr_wlanconfig_param *params); 299 300 /** 301 * ucfg_cfr_committed_rcc_config() - function to commit user config 302 * @vdev: pointer to vdev object 303 * 304 * Return: status 305 */ 306 QDF_STATUS ucfg_cfr_committed_rcc_config(struct wlan_objmgr_vdev *vdev); 307 308 /** 309 * ucfg_cfr_get_cfg() - function to display user config 310 * @vdev: pointer to vdev object 311 * 312 * Return: status 313 */ 314 QDF_STATUS ucfg_cfr_get_cfg(struct wlan_objmgr_vdev *vdev); 315 316 /** 317 * ucfg_cfr_rcc_dump_dbg_counters() - function to display PPDU counters 318 * @vdev: pointer to vdev object 319 * 320 * Return: status 321 */ 322 QDF_STATUS ucfg_cfr_rcc_dump_dbg_counters(struct wlan_objmgr_vdev *vdev); 323 324 /** 325 * ucfg_cfr_rcc_clr_dbg_counters() - function to clear CFR PPDU counters 326 * @vdev: pointer to vdev object 327 * 328 * Return: status 329 */ 330 QDF_STATUS ucfg_cfr_rcc_clr_dbg_counters(struct wlan_objmgr_vdev *vdev); 331 332 /** 333 * ucfg_cfr_rcc_dump_lut() - function to display lookup table 334 * @vdev: pointer to vdev object 335 * 336 * Return: status 337 */ 338 QDF_STATUS ucfg_cfr_rcc_dump_lut(struct wlan_objmgr_vdev *vdev); 339 340 /** 341 * ucfg_cfr_subscribe_ppdu_desc() - User space interface to 342 * subscribe/unsubscribe WDI PPDU desc event 343 * @pdev: pointer to pdev_object 344 * @is_subscribe: subscribe or unsubscribei 345 * 346 * return QDF status 347 */ 348 QDF_STATUS ucfg_cfr_subscribe_ppdu_desc(struct wlan_objmgr_pdev *pdev, 349 bool is_subscribe); 350 351 #ifdef WLAN_CFR_PM 352 /** 353 * ucfg_cfr_suspend() - User space interface to 354 * set suspend status to CFR 355 * @pdev: pointer to pdev_object 356 * 357 * return QDF status 358 */ 359 QDF_STATUS ucfg_cfr_suspend(struct wlan_objmgr_pdev *pdev); 360 361 /** 362 * ucfg_cfr_resume() - User space interface to 363 * set resume status to CFR 364 * @pdev: pointer to pdev_object 365 * 366 * return QDF status 367 */ 368 QDF_STATUS ucfg_cfr_resume(struct wlan_objmgr_pdev *pdev); 369 #else 370 static inline QDF_STATUS 371 ucfg_cfr_suspend(struct wlan_objmgr_pdev *pdev) 372 { 373 return QDF_STATUS_E_NOSUPPORT; 374 } 375 376 static inline QDF_STATUS 377 ucfg_cfr_resume(struct wlan_objmgr_pdev *pdev) 378 { 379 return QDF_STATUS_E_NOSUPPORT; 380 } 381 #endif /* end of WLAN_CFR_PM */ 382 #endif 383 #endif 384