1 /* 2 * Copyright (c) 2020-2021, The Linux Foundation. All rights reserved. 3 * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved. 4 * 5 * Permission to use, copy, modify, and/or distribute this software for any 6 * purpose with or without fee is hereby granted, provided that the above 7 * copyright notice and this permission notice appear in all copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 */ 17 18 /** 19 * DOC: This file has the dcs dispatcher API which is exposed to outside of dcs 20 * component. 21 */ 22 #ifndef _WLAN_DCS_UCFG_API_H_ 23 #define _WLAN_DCS_UCFG_API_H_ 24 25 #include <qdf_status.h> 26 #include <wlan_objmgr_pdev_obj.h> 27 #include <wlan_dcs_public_structs.h> 28 29 /** 30 * typedef dcs_callback() - DCS callback 31 * @psoc: Pointer to psoc 32 * @mac_id: mac id 33 * @interference_type: interference type 34 * @arg: list of arguments 35 */ 36 typedef void (*dcs_callback)( 37 struct wlan_objmgr_psoc *psoc, 38 uint8_t mac_id, 39 uint8_t interference_type, 40 void *arg); 41 42 /** 43 * typedef dcs_switch_chan_cb() - DCS callback for switching channel 44 * @vdev: Pointer to vdev 45 * @tgt_freq: target channel frequency 46 * @tgt_width: target channel width 47 */ 48 typedef QDF_STATUS (*dcs_switch_chan_cb)(struct wlan_objmgr_vdev *vdev, 49 qdf_freq_t tgt_freq, 50 enum phy_ch_width tgt_width); 51 52 /** 53 * typedef dcs_afc_select_chan_cb() - DCS callback for AFC channel selection 54 * @arg: pointer to argument 55 * @vdev_id: vdev id 56 * @cur_freq: current channel frequency 57 * @cur_bw: current channel bandwidth 58 * @pref_bw: pointer to bandwidth of prefer bandwidth when input, and target 59 * bandwidth switch to when output 60 */ 61 typedef qdf_freq_t (*dcs_afc_select_chan_cb)(void *arg, 62 uint32_t vdev_id, 63 qdf_freq_t cur_freq, 64 enum phy_ch_width cur_bw, 65 enum phy_ch_width *pref_bw); 66 67 #ifdef DCS_INTERFERENCE_DETECTION 68 /** 69 * ucfg_dcs_register_cb() - API to register dcs callback 70 * @psoc: pointer to psoc object 71 * @cbk: dcs callback to be registered 72 * @arg: argument 73 * 74 * This function gets called to register dcs callback function 75 * 76 * Return: None 77 */ 78 void ucfg_dcs_register_cb( 79 struct wlan_objmgr_psoc *psoc, 80 dcs_callback cbk, 81 void *arg); 82 83 /** 84 * ucfg_dcs_register_user_cb() - API to register dcs user callback 85 * @psoc: pointer to psoc object 86 * @mac_id: mac id 87 * @vdev_id: vdev id 88 * @cb: dcs user callback to be registered 89 * 90 * Return: None 91 */ 92 void ucfg_dcs_register_user_cb(struct wlan_objmgr_psoc *psoc, 93 uint8_t mac_id, uint8_t vdev_id, 94 void (*cb)(uint8_t vdev_id, 95 struct wlan_host_dcs_im_user_stats *stats, 96 int status)); 97 98 /** 99 * ucfg_dcs_register_awgn_cb() - API to register dcs awgn callback 100 * @psoc: pointer to psoc object 101 * @cb: dcs switch channel callback to be registered 102 * 103 * Return: QDF_STATUS 104 */ 105 QDF_STATUS ucfg_dcs_register_awgn_cb(struct wlan_objmgr_psoc *psoc, 106 dcs_switch_chan_cb cb); 107 108 /** 109 * ucfg_dcs_register_afc_sel_chan_cb() - API to register SAP channel selection 110 * callback for AFC DCS 111 * @psoc: pointer to psoc object 112 * @cb: dcs user callback to be registered 113 * @arg: argument 114 * 115 * Return: QDF_STATUS 116 */ 117 QDF_STATUS ucfg_dcs_register_afc_sel_chan_cb(struct wlan_objmgr_psoc *psoc, 118 dcs_afc_select_chan_cb cb, 119 void *arg); 120 /** 121 * ucfg_wlan_dcs_cmd(): API to send dcs command 122 * @psoc: pointer to psoc object 123 * @mac_id: mac id 124 * @is_host_pdev_id: pdev_id is host id or not 125 * 126 * This function gets called to send dcs command 127 * 128 * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error 129 */ 130 QDF_STATUS 131 ucfg_wlan_dcs_cmd(struct wlan_objmgr_psoc *psoc, 132 uint32_t mac_id, 133 bool is_host_pdev_id); 134 135 /** 136 * ucfg_config_dcs_enable() - API to config dcs enable 137 * @psoc: pointer to psoc object 138 * @mac_id: mac id 139 * @interference_type: type mask(WLAN_HOST_DCS_CWIM / WLAN_HOST_DCS_WLANIM) 140 * 141 * This function gets called to config dcs enable 142 * 143 * Return: None 144 */ 145 void ucfg_config_dcs_enable(struct wlan_objmgr_psoc *psoc, 146 uint32_t mac_id, 147 uint8_t interference_type); 148 149 /** 150 * ucfg_config_dcs_disable() - API to config dcs disable 151 * @psoc: pointer to psoc object 152 * @mac_id: mac id 153 * @interference_type: type mask(WLAN_HOST_DCS_CWIM / WLAN_HOST_DCS_WLANIM) 154 * 155 * This function gets called to config dcs disable 156 * 157 * Return: None 158 */ 159 void ucfg_config_dcs_disable(struct wlan_objmgr_psoc *psoc, 160 uint32_t mac_id, 161 uint8_t interference_type); 162 163 /** 164 * ucfg_get_dcs_enable() - API to get dcs enable 165 * @psoc: pointer to psoc object 166 * @mac_id: mac id 167 * 168 * This function gets called to get current host 169 * config dcs enable/disable status 170 * 171 * Return: WLANIM/CWIM enable status 172 */ 173 uint8_t ucfg_get_dcs_enable(struct wlan_objmgr_psoc *psoc, uint8_t mac_id); 174 175 /** 176 * ucfg_dcs_clear() - API to clear dcs related information 177 * @psoc: pointer to psoc object 178 * @mac_id: mac id 179 * 180 * This function gets called to clear dcs related information 181 * 182 * Return: None 183 */ 184 void ucfg_dcs_clear(struct wlan_objmgr_psoc *psoc, uint32_t mac_id); 185 186 /** 187 * ucfg_config_dcs_event_data() - config dcs event data to do algorithm 188 * process or not 189 * @psoc: psoc pointer 190 * @mac_id: mac id 191 * @dcs_algorithm_process: dcs algorithm process or not 192 * 193 * The function gets called to config dcs event data to do algorithm 194 * process or not 195 * 196 * Return: None 197 */ 198 void ucfg_config_dcs_event_data(struct wlan_objmgr_psoc *psoc, uint32_t mac_id, 199 bool dcs_algorithm_process); 200 201 /* 202 * ucfg_dcs_reset_user_stats() - API to reset dcs user stats 203 * @psoc: pointer to psoc object 204 * @mac_id: mac id 205 * 206 * Return: None 207 */ 208 void ucfg_dcs_reset_user_stats(struct wlan_objmgr_psoc *psoc, uint8_t mac_id); 209 210 /** 211 * ucfg_dcs_set_user_request() - API to set dcs user stats request counter 212 * @psoc: pointer to psoc object 213 * @mac_id: mac id 214 * @user_request_count: user stats request counter 215 * 216 * Return: None 217 */ 218 void ucfg_dcs_set_user_request(struct wlan_objmgr_psoc *psoc, uint8_t mac_id, 219 uint32_t user_request_count); 220 221 /** 222 * ucfg_dcs_get_ch_util() - API to get channel interference values 223 * @psoc: pointer to psoc object 224 * @mac_id: mac id 225 * @dcs_stats: pointer to wlan_host_dcs_ch_util_stats 226 * 227 * Return: Integer 228 */ 229 QDF_STATUS ucfg_dcs_get_ch_util(struct wlan_objmgr_psoc *psoc, uint8_t mac_id, 230 struct wlan_host_dcs_ch_util_stats *dcs_stats); 231 232 #else 233 static inline void 234 ucfg_dcs_register_cb(struct wlan_objmgr_psoc *psoc, dcs_callback cbk, void *arg) 235 { 236 } 237 238 static inline void 239 ucfg_dcs_register_user_cb(struct wlan_objmgr_psoc *psoc, 240 uint8_t mac_id, uint8_t vdev_id, 241 void (*cb)(uint8_t vdev_id, 242 struct wlan_host_dcs_im_user_stats *stats, 243 int status)) 244 { 245 } 246 247 static inline QDF_STATUS 248 ucfg_wlan_dcs_cmd(struct wlan_objmgr_psoc *psoc, uint32_t mac_id, 249 bool is_host_pdev_id) 250 { 251 return QDF_STATUS_SUCCESS; 252 } 253 254 static inline void 255 ucfg_config_dcs_enable(struct wlan_objmgr_psoc *psoc, uint32_t mac_id, 256 uint8_t interference_type) 257 { 258 } 259 260 static inline void 261 ucfg_config_dcs_disable(struct wlan_objmgr_psoc *psoc, uint32_t mac_id, 262 uint8_t interference_type) 263 { 264 } 265 266 static inline uint8_t 267 ucfg_get_dcs_enable(struct wlan_objmgr_psoc *psoc, uint8_t mac_id) 268 { 269 return 0; 270 } 271 272 static inline void 273 ucfg_dcs_clear(struct wlan_objmgr_psoc *psoc, uint32_t mac_id) 274 { 275 } 276 277 static inline void 278 ucfg_config_dcs_event_data(struct wlan_objmgr_psoc *psoc, uint32_t mac_id, 279 bool dcs_algorithm_process) 280 { 281 } 282 283 static inline void 284 ucfg_dcs_reset_user_stats(struct wlan_objmgr_psoc *psoc, uint8_t mac_id) 285 { 286 } 287 288 static inline void 289 ucfg_dcs_set_user_request(struct wlan_objmgr_psoc *psoc, uint8_t mac_id, 290 uint32_t user_request_count) 291 { 292 } 293 294 static inline QDF_STATUS 295 ucfg_dcs_get_ch_util(struct wlan_objmgr_psoc *psoc, uint8_t mac_id, 296 struct wlan_host_dcs_ch_util_stats *dcs_stats) 297 { 298 return QDF_STATUS_SUCCESS; 299 } 300 #endif 301 #endif /* _WLAN_DCS_UCFG_API_H_ */ 302