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_UCFG_API_H_ 26 #define _WLAN_DFS_UCFG_API_H_ 27 28 #include <wlan_objmgr_psoc_obj.h> 29 #include <wlan_objmgr_pdev_obj.h> 30 31 /** 32 * struct dfs_to_mlme - These are MLME function pointer used by DFS component. 33 * @pdev_component_obj_attach: Attach DFS object to PDEV. 34 * @pdev_component_obj_detach: Detach DFS object from PDEV. 35 * @pdev_get_comp_private_obj: Get DFS object from PDEV. 36 * @dfs_channel_mark_radar: Mark the channel as RADAR. 37 * @dfs_start_rcsa: Send RCSA to RootAP. 38 * @mlme_mark_dfs: Calls dfs_action function. 39 * @mlme_start_csa: Sends CSA. 40 * @mlme_proc_cac: Process the CAC completion event. 41 * @mlme_deliver_event_up_afrer_cac: Send a CAC timeout, VAP up event to user 42 * space 43 * @mlme_get_dfs_ch_nchans: Get number of channels in the channel 44 * list. 45 * @mlme_get_extchan: Gets the extension channel. 46 * @mlme_set_no_chans_available: Sets no_chans_available flag. 47 * @mlme_ieee2mhz: Gets Channel freq from ieee number. 48 * @mlme_find_dot11_channel: Find dot11 channel. 49 * @mlme_get_dfs_ch_channels: Get the channel list. 50 * @mlme_dfs_ch_flags_ext: Gets channel extension flag. 51 * @mlme_channel_change_by_precac: Channel change triggered by PreCAC. 52 * @mlme_nol_timeout_notification: NOL timeout notification. 53 * @mlme_clist_update: Updates the channel list. 54 * @mlme_get_cac_timeout: Gets the CAC timeout. 55 */ 56 struct dfs_to_mlme { 57 QDF_STATUS (*pdev_component_obj_attach)(struct wlan_objmgr_pdev *pdev, 58 enum wlan_umac_comp_id id, 59 void *comp_priv_obj, 60 QDF_STATUS status); 61 QDF_STATUS (*pdev_component_obj_detach)(struct wlan_objmgr_pdev *pdev, 62 enum wlan_umac_comp_id id, 63 void *comp_priv_obj); 64 struct wlan_dfs *(*pdev_get_comp_private_obj)( 65 struct wlan_objmgr_pdev *pdev); 66 QDF_STATUS (*dfs_channel_mark_radar)(struct wlan_objmgr_pdev *pdev, 67 uint16_t freq, 68 uint8_t vhtop_ch_freq_seg2, 69 uint64_t flags); 70 QDF_STATUS (*dfs_start_rcsa)(struct wlan_objmgr_pdev *pdev, 71 bool *wait_for_csa); 72 QDF_STATUS (*mlme_mark_dfs)(struct wlan_objmgr_pdev *pdev, 73 uint8_t ieee, 74 uint16_t freq, 75 uint8_t vhtop_ch_freq_seg2, 76 uint64_t flags); 77 QDF_STATUS (*mlme_start_csa)(struct wlan_objmgr_pdev *pdev, 78 uint8_t ieee_chan, uint16_t freq, 79 uint8_t cfreq2, uint64_t flags); 80 QDF_STATUS (*mlme_proc_cac)(struct wlan_objmgr_pdev *pdev); 81 QDF_STATUS (*mlme_deliver_event_up_afrer_cac)( 82 struct wlan_objmgr_pdev *pdev); 83 QDF_STATUS (*mlme_get_dfs_ch_nchans)(struct wlan_objmgr_pdev *pdev, 84 int *nchans); 85 QDF_STATUS (*mlme_get_extchan)(struct wlan_objmgr_pdev *pdev, 86 uint16_t *dfs_ch_freq, 87 uint64_t *dfs_ch_flags, 88 uint16_t *dfs_ch_flagext, 89 uint8_t *dfs_ch_ieee, 90 uint8_t *dfs_ch_vhtop_ch_freq_seg1, 91 uint8_t *dfs_ch_vhtop_ch_freq_seg2); 92 QDF_STATUS (*mlme_set_no_chans_available)(struct wlan_objmgr_pdev *pdev, 93 int val); 94 QDF_STATUS (*mlme_ieee2mhz)(struct wlan_objmgr_pdev *pdev, 95 int ieee, 96 uint64_t flag, 97 int *freq); 98 QDF_STATUS (*mlme_find_dot11_channel)(struct wlan_objmgr_pdev *pdev, 99 uint8_t ieee, 100 uint8_t des_cfreq2, 101 int mode, 102 uint16_t *dfs_ch_freq, 103 uint64_t *dfs_ch_flags, 104 uint16_t *dfs_ch_flagext, 105 uint8_t *dfs_ch_ieee, 106 uint8_t *dfs_ch_vhtop_ch_freq_seg1, 107 uint8_t *dfs_ch_vhtop_ch_freq_seg2); 108 109 QDF_STATUS (*mlme_get_dfs_ch_channels)(struct wlan_objmgr_pdev *pdev, 110 uint16_t *dfs_ch_freq, 111 uint64_t *dfs_ch_flags, 112 uint16_t *dfs_ch_flagext, 113 uint8_t *dfs_ch_ieee, 114 uint8_t *dfs_ch_vhtop_ch_freq_seg1, 115 uint8_t *dfs_ch_vhtop_ch_freq_seg2, 116 int index); 117 QDF_STATUS (*mlme_dfs_ch_flags_ext)(struct wlan_objmgr_pdev *pdev, 118 uint16_t *flag_ext); 119 QDF_STATUS (*mlme_channel_change_by_precac)( 120 struct wlan_objmgr_pdev *pdev); 121 QDF_STATUS (*mlme_nol_timeout_notification)( 122 struct wlan_objmgr_pdev *pdev); 123 QDF_STATUS (*mlme_clist_update)(struct wlan_objmgr_pdev *pdev, 124 void *nollist, 125 int nentries); 126 QDF_STATUS (*mlme_get_cac_timeout)(struct wlan_objmgr_pdev *pdev, 127 uint16_t dfs_ch_freq, 128 uint8_t c_vhtop_ch_freq_seg2, 129 uint64_t dfs_ch_flags, 130 int *cac_timeout); 131 }; 132 133 extern struct dfs_to_mlme global_dfs_to_mlme; 134 135 /** 136 * wlan_dfs_pdev_obj_create_notification() - DFS pdev object create handler. 137 * @pdev: Pointer to DFS pdev object. 138 */ 139 QDF_STATUS wlan_dfs_pdev_obj_create_notification(struct wlan_objmgr_pdev *pdev, 140 void *arg); 141 142 /** 143 * wlan_dfs_pdev_obj_destroy_notification() - DFS pdev object delete handler. 144 * @pdev: Pointer to DFS pdev object. 145 */ 146 QDF_STATUS wlan_dfs_pdev_obj_destroy_notification(struct wlan_objmgr_pdev *pdev, 147 void *arg); 148 149 /** 150 * ucfg_dfs_is_ap_cac_timer_running() - Returns the dfs cac timer. 151 * @pdev: Pointer to DFS pdev object. 152 * @is_ap_cac_timer_running: Pointer to save dfs_cac_timer_running value. 153 * 154 * Wrapper function for dfs_is_ap_cac_timer_running(). 155 * This function called from outside of dfs component. 156 */ 157 QDF_STATUS ucfg_dfs_is_ap_cac_timer_running(struct wlan_objmgr_pdev *pdev, 158 int *is_ap_cac_timer_running); 159 160 /** 161 * ucfg_dfs_getnol() - Wrapper function for dfs_get_nol() 162 * @pdev: Pointer to DFS pdev object. 163 * @dfs_nolinfo: Pointer to dfsreq_nolinfo structure. 164 * 165 * Wrapper function for dfs_getnol(). 166 * This function called from outside of dfs component. 167 */ 168 QDF_STATUS ucfg_dfs_getnol(struct wlan_objmgr_pdev *pdev, void *dfs_nolinfo); 169 170 /** 171 * ucfg_dfs_override_cac_timeout() - Override the default CAC timeout. 172 * @pdev: Pointer to DFS pdev object. 173 * @cac_timeout: CAC timeout value. 174 * 175 * Wrapper function for dfs_override_cac_timeout(). 176 * This function called from outside of dfs component. 177 */ 178 QDF_STATUS ucfg_dfs_override_cac_timeout(struct wlan_objmgr_pdev *pdev, 179 int cac_timeout, int *status); 180 181 /** 182 * ucfg_dfs_get_override_cac_timeout() - Get override CAC timeout value. 183 * @pdev: Pointer to DFS pdev object. 184 * @cac_timeout: Pointer to save the CAC timeout value. 185 * 186 * Wrapper function for dfs_get_override_cac_timeout(). 187 * This function called from outside of dfs component. 188 */ 189 QDF_STATUS ucfg_dfs_get_override_cac_timeout(struct wlan_objmgr_pdev *pdev, 190 int *cac_timeout, int *status); 191 192 /** 193 * ucfg_dfs_get_override_precac_timeout() - Get precac timeout. 194 * @pdev: Pointer to DFS pdev object. 195 * @precac_timeout: Get precac timeout value in this variable. 196 * 197 * Wrapper function for dfs_get_override_precac_timeout(). 198 * This function called from outside of dfs component. 199 */ 200 QDF_STATUS ucfg_dfs_get_override_precac_timeout(struct wlan_objmgr_pdev *pdev, 201 int *precac_timeout); 202 203 /** 204 * ucfg_dfs_override_precac_timeout() - Override the default precac timeout. 205 * @pdev: Pointer to DFS pdev object. 206 * @precac_timeout: Precac timeout value. 207 * 208 * Wrapper function for dfs_override_precac_timeout(). 209 * This function called from outside of dfs component. 210 */ 211 QDF_STATUS ucfg_dfs_override_precac_timeout(struct wlan_objmgr_pdev *pdev, 212 int precac_timeout); 213 214 /** 215 * ucfg_dfs_set_precac_enable() - Set precac enable flag. 216 * @pdev: Pointer to DFS pdev object. 217 * @value: input value for dfs_precac_enable flag. 218 * 219 * Wrapper function for dfs_set_precac_enable(). 220 * This function called from outside of dfs component. 221 */ 222 QDF_STATUS ucfg_dfs_set_precac_enable(struct wlan_objmgr_pdev *pdev, 223 uint32_t value); 224 225 /** 226 * ucfg_dfs_get_precac_enable() - Get precac enable flag. 227 * @pdev: Pointer to DFS pdev object. 228 * @buff: Pointer to save precac_enable value. 229 * 230 * Wrapper function for dfs_get_precac_enable(). 231 * This function called from outside of dfs component. 232 */ 233 QDF_STATUS ucfg_dfs_get_precac_enable(struct wlan_objmgr_pdev *pdev, int *buff); 234 235 #ifdef QCA_MCL_DFS_SUPPORT 236 /** 237 * ucfg_dfs_update_config() - Update DFS user config. 238 * @psoc: Pointer to psoc. 239 * @req: DFS user config. 240 * 241 * Return: QDF_STATUS 242 */ 243 QDF_STATUS ucfg_dfs_update_config(struct wlan_objmgr_psoc *psoc, 244 struct dfs_user_config *req); 245 #endif 246 #endif /* _WLAN_DFS_UCFG_API_H_ */ 247