Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1 | /* |
Jiachao Wu | c279f97 | 2018-01-22 15:38:33 +0800 | [diff] [blame] | 2 | * Copyright (c) 2012-2018 The Linux Foundation. All rights reserved. |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 3 | * |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 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 | |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 19 | /** |
| 20 | * =========================================================================== |
| 21 | * sapModule.C |
| 22 | * OVERVIEW: |
| 23 | * This software unit holds the implementation of the WLAN SAP modules |
| 24 | * functions providing EXTERNAL APIs. It is also where the global SAP module |
| 25 | * context gets initialised |
| 26 | * DEPENDENCIES: |
| 27 | * Are listed for each API below. |
| 28 | * =========================================================================== |
| 29 | */ |
| 30 | |
| 31 | /* $Header$ */ |
| 32 | |
| 33 | /*---------------------------------------------------------------------------- |
| 34 | * Include Files |
| 35 | * -------------------------------------------------------------------------*/ |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 36 | #include "qdf_trace.h" |
Anurag Chouhan | c554842 | 2016-02-24 18:33:27 +0530 | [diff] [blame] | 37 | #include "qdf_util.h" |
Manishekar Chandrasekaran | f7a1dad | 2016-06-23 06:43:47 +0530 | [diff] [blame] | 38 | #include "qdf_atomic.h" |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 39 | /* Pick up the sme callback registration API */ |
| 40 | #include "sme_api.h" |
| 41 | |
| 42 | /* SAP API header file */ |
| 43 | |
| 44 | #include "sap_internal.h" |
| 45 | #include "sme_inside.h" |
| 46 | #include "cds_ieee80211_common_i.h" |
Naveen Rawat | 3b6068c | 2016-04-14 19:01:06 -0700 | [diff] [blame] | 47 | #include "cds_regdomain.h" |
Tushnim Bhattacharyya | 66348bd | 2017-03-09 15:02:10 -0800 | [diff] [blame] | 48 | #include "wlan_policy_mgr_api.h" |
Tushnim Bhattacharyya | 45ed04f | 2017-03-15 10:15:05 -0700 | [diff] [blame] | 49 | #include <wlan_scan_ucfg_api.h> |
Kiran Kumar Lokere | a3de226 | 2017-04-12 12:15:04 -0700 | [diff] [blame] | 50 | #include "wlan_reg_services_api.h" |
Arif Hussain | cd15163 | 2017-02-11 16:57:19 -0800 | [diff] [blame] | 51 | #include <wlan_dfs_utils_api.h> |
Kiran Kumar Lokere | b1d412e | 2017-04-23 17:19:43 -0700 | [diff] [blame] | 52 | #include <wlan_reg_ucfg_api.h> |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 53 | |
| 54 | /*---------------------------------------------------------------------------- |
| 55 | * Preprocessor Definitions and Constants |
| 56 | * -------------------------------------------------------------------------*/ |
| 57 | #define SAP_DEBUG |
| 58 | |
| 59 | /*---------------------------------------------------------------------------- |
| 60 | * Type Declarations |
| 61 | * -------------------------------------------------------------------------*/ |
| 62 | |
| 63 | /*---------------------------------------------------------------------------- |
| 64 | * Global Data Definitions |
| 65 | * -------------------------------------------------------------------------*/ |
| 66 | |
| 67 | /*---------------------------------------------------------------------------- |
| 68 | * External declarations for global context |
| 69 | * -------------------------------------------------------------------------*/ |
| 70 | /* No! Get this from CDS. */ |
| 71 | /* The main per-Physical Link (per WLAN association) context. */ |
Jeff Johnson | f1cd3c7 | 2017-09-14 07:18:06 -0700 | [diff] [blame] | 72 | static struct sap_context *gp_sap_ctx[SAP_MAX_NUM_SESSION]; |
Manishekar Chandrasekaran | f7a1dad | 2016-06-23 06:43:47 +0530 | [diff] [blame] | 73 | static qdf_atomic_t sap_ctx_ref_count[SAP_MAX_NUM_SESSION]; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 74 | |
| 75 | /*---------------------------------------------------------------------------- |
| 76 | * Static Variable Definitions |
| 77 | * -------------------------------------------------------------------------*/ |
Manishekar Chandrasekaran | f7a1dad | 2016-06-23 06:43:47 +0530 | [diff] [blame] | 78 | static qdf_mutex_t sap_context_lock; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 79 | |
| 80 | /*---------------------------------------------------------------------------- |
| 81 | * Static Function Declarations and Definitions |
| 82 | * -------------------------------------------------------------------------*/ |
| 83 | |
| 84 | /*---------------------------------------------------------------------------- |
| 85 | * Externalized Function Definitions |
| 86 | * -------------------------------------------------------------------------*/ |
| 87 | |
| 88 | /*---------------------------------------------------------------------------- |
| 89 | * Function Declarations and Documentation |
| 90 | * -------------------------------------------------------------------------*/ |
| 91 | |
| 92 | /** |
Manishekar Chandrasekaran | f7a1dad | 2016-06-23 06:43:47 +0530 | [diff] [blame] | 93 | * wlansap_global_init() - Initialize SAP globals |
| 94 | * |
| 95 | * Initializes the SAP global data structures |
| 96 | * |
| 97 | * Return: QDF_STATUS |
| 98 | */ |
| 99 | QDF_STATUS wlansap_global_init(void) |
| 100 | { |
| 101 | uint32_t i; |
| 102 | |
| 103 | if (QDF_IS_STATUS_ERROR(qdf_mutex_create(&sap_context_lock))) { |
| 104 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
| 105 | "failed to init sap_context_lock"); |
| 106 | return QDF_STATUS_E_FAULT; |
| 107 | } |
| 108 | |
| 109 | for (i = 0; i < SAP_MAX_NUM_SESSION; i++) { |
| 110 | gp_sap_ctx[i] = NULL; |
| 111 | qdf_atomic_init(&sap_ctx_ref_count[i]); |
| 112 | } |
| 113 | |
Srinivas Girigowda | 678586c | 2017-03-10 00:13:58 -0800 | [diff] [blame] | 114 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_DEBUG, |
Manishekar Chandrasekaran | f7a1dad | 2016-06-23 06:43:47 +0530 | [diff] [blame] | 115 | "%s: sap global context initialized", __func__); |
| 116 | |
| 117 | return QDF_STATUS_SUCCESS; |
| 118 | } |
| 119 | |
| 120 | /** |
| 121 | * wlansap_global_deinit() - De-initialize SAP globals |
| 122 | * |
| 123 | * De-initializes the SAP global data structures |
| 124 | * |
| 125 | * Return: QDF_STATUS |
| 126 | */ |
| 127 | QDF_STATUS wlansap_global_deinit(void) |
| 128 | { |
| 129 | uint32_t i; |
| 130 | |
| 131 | for (i = 0; i < SAP_MAX_NUM_SESSION; i++) { |
| 132 | if (gp_sap_ctx[i]) { |
| 133 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
| 134 | "we could be leaking context:%d", i); |
| 135 | } |
| 136 | gp_sap_ctx[i] = NULL; |
| 137 | qdf_atomic_init(&sap_ctx_ref_count[i]); |
| 138 | } |
| 139 | |
| 140 | if (QDF_IS_STATUS_ERROR(qdf_mutex_destroy(&sap_context_lock))) { |
| 141 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
| 142 | "failed to destroy sap_context_lock"); |
| 143 | return QDF_STATUS_E_FAULT; |
| 144 | } |
| 145 | |
Srinivas Girigowda | 678586c | 2017-03-10 00:13:58 -0800 | [diff] [blame] | 146 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_DEBUG, |
Manishekar Chandrasekaran | f7a1dad | 2016-06-23 06:43:47 +0530 | [diff] [blame] | 147 | "%s: sap global context deinitialized", __func__); |
| 148 | |
| 149 | return QDF_STATUS_SUCCESS; |
| 150 | } |
| 151 | |
| 152 | /** |
| 153 | * wlansap_save_context() - Save the context in global SAP context |
| 154 | * @ctx: SAP context to be stored |
| 155 | * |
| 156 | * Stores the given SAP context in the global SAP context array |
| 157 | * |
| 158 | * Return: QDF_STATUS |
| 159 | */ |
Jeff Johnson | f1cd3c7 | 2017-09-14 07:18:06 -0700 | [diff] [blame] | 160 | static QDF_STATUS wlansap_save_context(struct sap_context *ctx) |
Manishekar Chandrasekaran | f7a1dad | 2016-06-23 06:43:47 +0530 | [diff] [blame] | 161 | { |
| 162 | uint32_t i; |
| 163 | |
| 164 | qdf_mutex_acquire(&sap_context_lock); |
| 165 | for (i = 0; i < SAP_MAX_NUM_SESSION; i++) { |
| 166 | if (gp_sap_ctx[i] == NULL) { |
| 167 | gp_sap_ctx[i] = ctx; |
| 168 | qdf_atomic_inc(&sap_ctx_ref_count[i]); |
| 169 | qdf_mutex_release(&sap_context_lock); |
Srinivas Girigowda | 678586c | 2017-03-10 00:13:58 -0800 | [diff] [blame] | 170 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_DEBUG, |
| 171 | "%s: sap context saved at index: %d", |
Manishekar Chandrasekaran | f7a1dad | 2016-06-23 06:43:47 +0530 | [diff] [blame] | 172 | __func__, i); |
| 173 | return QDF_STATUS_SUCCESS; |
| 174 | } |
| 175 | } |
| 176 | qdf_mutex_release(&sap_context_lock); |
| 177 | |
| 178 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
| 179 | "%s: failed to save sap context", __func__); |
| 180 | |
| 181 | return QDF_STATUS_E_FAILURE; |
| 182 | } |
| 183 | |
| 184 | /** |
| 185 | * wlansap_context_get() - Verify SAP context and increment ref count |
| 186 | * @ctx: Context to be checked |
| 187 | * |
| 188 | * Verifies the SAP context and increments the reference count maintained for |
| 189 | * the corresponding SAP context. |
| 190 | * |
| 191 | * Return: QDF_STATUS |
| 192 | */ |
Jeff Johnson | f1cd3c7 | 2017-09-14 07:18:06 -0700 | [diff] [blame] | 193 | QDF_STATUS wlansap_context_get(struct sap_context *ctx) |
Manishekar Chandrasekaran | f7a1dad | 2016-06-23 06:43:47 +0530 | [diff] [blame] | 194 | { |
| 195 | uint32_t i; |
| 196 | |
| 197 | qdf_mutex_acquire(&sap_context_lock); |
| 198 | for (i = 0; i < SAP_MAX_NUM_SESSION; i++) { |
| 199 | if (ctx && (gp_sap_ctx[i] == ctx)) { |
| 200 | qdf_atomic_inc(&sap_ctx_ref_count[i]); |
| 201 | qdf_mutex_release(&sap_context_lock); |
| 202 | return QDF_STATUS_SUCCESS; |
| 203 | } |
| 204 | } |
| 205 | qdf_mutex_release(&sap_context_lock); |
| 206 | |
Kiran Kumar Lokere | 9471221 | 2017-10-10 18:06:58 -0700 | [diff] [blame] | 207 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_DEBUG, |
Manishekar Chandrasekaran | f7a1dad | 2016-06-23 06:43:47 +0530 | [diff] [blame] | 208 | "%s: sap session is not valid", __func__); |
| 209 | return QDF_STATUS_E_FAILURE; |
| 210 | } |
| 211 | |
| 212 | /** |
| 213 | * wlansap_context_put() - Check the reference count and free SAP context |
| 214 | * @ctx: SAP context to be checked and freed |
| 215 | * |
| 216 | * Checks the reference count and frees the SAP context |
| 217 | * |
| 218 | * Return: None |
| 219 | */ |
Jeff Johnson | f1cd3c7 | 2017-09-14 07:18:06 -0700 | [diff] [blame] | 220 | void wlansap_context_put(struct sap_context *ctx) |
Manishekar Chandrasekaran | f7a1dad | 2016-06-23 06:43:47 +0530 | [diff] [blame] | 221 | { |
| 222 | uint32_t i; |
| 223 | |
| 224 | if (!ctx) |
| 225 | return; |
| 226 | |
| 227 | qdf_mutex_acquire(&sap_context_lock); |
| 228 | for (i = 0; i < SAP_MAX_NUM_SESSION; i++) { |
| 229 | if (gp_sap_ctx[i] == ctx) { |
| 230 | if (qdf_atomic_dec_and_test(&sap_ctx_ref_count[i])) { |
gaurank kathpalia | e4a628f | 2018-06-12 12:01:50 +0530 | [diff] [blame] | 231 | if (ctx->channelList) { |
| 232 | qdf_mem_free(ctx->channelList); |
| 233 | ctx->channelList = NULL; |
| 234 | ctx->num_of_channel = 0; |
| 235 | } |
Manishekar Chandrasekaran | f7a1dad | 2016-06-23 06:43:47 +0530 | [diff] [blame] | 236 | qdf_mem_free(ctx); |
| 237 | gp_sap_ctx[i] = NULL; |
| 238 | QDF_TRACE(QDF_MODULE_ID_SAP, |
Srinivas Girigowda | 678586c | 2017-03-10 00:13:58 -0800 | [diff] [blame] | 239 | QDF_TRACE_LEVEL_DEBUG, |
Manishekar Chandrasekaran | f7a1dad | 2016-06-23 06:43:47 +0530 | [diff] [blame] | 240 | "%s: sap session freed: %d", |
| 241 | __func__, i); |
| 242 | } |
| 243 | qdf_mutex_release(&sap_context_lock); |
| 244 | return; |
| 245 | } |
| 246 | } |
| 247 | qdf_mutex_release(&sap_context_lock); |
| 248 | } |
| 249 | |
Krunal Soni | 5943765 | 2017-11-21 13:42:14 -0800 | [diff] [blame] | 250 | struct sap_context *sap_create_ctx(void) |
Ryan Hsu | 4252a2f | 2016-01-05 11:18:24 -0800 | [diff] [blame] | 251 | { |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 252 | struct sap_context *sap_ctx; |
Manishekar Chandrasekaran | f7a1dad | 2016-06-23 06:43:47 +0530 | [diff] [blame] | 253 | QDF_STATUS status; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 254 | |
Ryan Hsu | 4252a2f | 2016-01-05 11:18:24 -0800 | [diff] [blame] | 255 | /* dynamically allocate the sapContext */ |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 256 | sap_ctx = qdf_mem_malloc(sizeof(*sap_ctx)); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 257 | |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 258 | if (NULL == sap_ctx) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 259 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 260 | "%s: Invalid SAP pointer from p_cds_gctx", __func__); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 261 | return NULL; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 262 | } |
| 263 | |
Ryan Hsu | 4252a2f | 2016-01-05 11:18:24 -0800 | [diff] [blame] | 264 | /* Clean up SAP control block, initialize all values */ |
Krunal Soni | 074dd2c | 2017-04-14 14:57:34 -0700 | [diff] [blame] | 265 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_DEBUG, FL("Enter")); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 266 | |
Manishekar Chandrasekaran | f7a1dad | 2016-06-23 06:43:47 +0530 | [diff] [blame] | 267 | /* Save the SAP context pointer */ |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 268 | status = wlansap_save_context(sap_ctx); |
Manishekar Chandrasekaran | f7a1dad | 2016-06-23 06:43:47 +0530 | [diff] [blame] | 269 | if (QDF_IS_STATUS_ERROR(status)) { |
| 270 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
| 271 | "%s: failed to save SAP context", __func__); |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 272 | qdf_mem_free(sap_ctx); |
Manishekar Chandrasekaran | f7a1dad | 2016-06-23 06:43:47 +0530 | [diff] [blame] | 273 | return NULL; |
| 274 | } |
Krunal Soni | 074dd2c | 2017-04-14 14:57:34 -0700 | [diff] [blame] | 275 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_DEBUG, FL("Exit")); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 276 | |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 277 | return sap_ctx; |
Krunal Soni | 5943765 | 2017-11-21 13:42:14 -0800 | [diff] [blame] | 278 | } /* sap_create_ctx */ |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 279 | |
Krunal Soni | 5943765 | 2017-11-21 13:42:14 -0800 | [diff] [blame] | 280 | QDF_STATUS sap_init_ctx(struct sap_context *sap_ctx, |
Jeff Johnson | c1e6278 | 2017-11-09 09:50:17 -0800 | [diff] [blame] | 281 | enum QDF_OPMODE mode, |
Dustin Brown | d28772b | 2017-03-17 14:16:07 -0700 | [diff] [blame] | 282 | uint8_t *addr, uint32_t session_id) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 283 | { |
Peng Xu | 66162de | 2016-02-11 17:01:20 -0800 | [diff] [blame] | 284 | QDF_STATUS qdf_ret_status; |
| 285 | tHalHandle hal; |
Sandeep Puligilla | 0806e0f | 2017-03-06 19:25:47 -0800 | [diff] [blame] | 286 | tpAniSirGlobal pmac; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 287 | |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 288 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 289 | "wlansap_start invoked successfully"); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 290 | |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 291 | if (NULL == sap_ctx) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 292 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Jeff Johnson | d8b6057 | 2017-09-15 11:25:05 -0700 | [diff] [blame] | 293 | "%s: Invalid SAP pointer", __func__); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 294 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 295 | } |
| 296 | |
| 297 | /*------------------------------------------------------------------------ |
| 298 | For now, presume security is not enabled. |
| 299 | -----------------------------------------------------------------------*/ |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 300 | sap_ctx->ucSecEnabled = WLANSAP_SECURITY_ENABLED_STATE; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 301 | |
| 302 | /*------------------------------------------------------------------------ |
| 303 | Now configure the roaming profile links. To SSID and bssid. |
| 304 | ------------------------------------------------------------------------*/ |
| 305 | /* We have room for two SSIDs. */ |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 306 | sap_ctx->csr_roamProfile.SSIDs.numOfSSIDs = 1; /* This is true for now. */ |
| 307 | sap_ctx->csr_roamProfile.SSIDs.SSIDList = sap_ctx->SSIDList; /* Array of two */ |
| 308 | sap_ctx->csr_roamProfile.SSIDs.SSIDList[0].SSID.length = 0; |
| 309 | sap_ctx->csr_roamProfile.SSIDs.SSIDList[0].handoffPermitted = false; |
| 310 | sap_ctx->csr_roamProfile.SSIDs.SSIDList[0].ssidHidden = |
| 311 | sap_ctx->SSIDList[0].ssidHidden; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 312 | |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 313 | sap_ctx->csr_roamProfile.BSSIDs.numOfBSSIDs = 1; /* This is true for now. */ |
| 314 | sap_ctx->csr_roamProfile.BSSIDs.bssid = &sap_ctx->bssid; |
| 315 | sap_ctx->csr_roamProfile.csrPersona = mode; |
| 316 | qdf_mem_copy(sap_ctx->self_mac_addr, addr, QDF_MAC_ADDR_SIZE); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 317 | |
| 318 | /* Now configure the auth type in the roaming profile. To open. */ |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 319 | sap_ctx->csr_roamProfile.negotiatedAuthType = eCSR_AUTH_TYPE_OPEN_SYSTEM; /* open is the default */ |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 320 | |
Jeff Johnson | c0db384 | 2017-09-13 18:34:28 -0700 | [diff] [blame] | 321 | hal = (tHalHandle) CDS_GET_HAL_CB(); |
Chandrasekaran, Manishekar | d3cb477 | 2016-02-22 22:21:10 +0530 | [diff] [blame] | 322 | if (!hal) { |
| 323 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
| 324 | "%s: Invalid HAL pointer", __func__); |
| 325 | return QDF_STATUS_E_INVAL; |
| 326 | } |
Sandeep Puligilla | 0806e0f | 2017-03-06 19:25:47 -0800 | [diff] [blame] | 327 | pmac = PMAC_STRUCT(hal); |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 328 | qdf_ret_status = sap_set_session_param(hal, sap_ctx, session_id); |
Krunal Soni | b01de79 | 2017-04-14 11:44:39 -0700 | [diff] [blame] | 329 | if (QDF_STATUS_SUCCESS != qdf_ret_status) { |
| 330 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
| 331 | "In %s calling sap_set_session_param status = %d", |
| 332 | __func__, qdf_ret_status); |
| 333 | return QDF_STATUS_E_FAILURE; |
| 334 | } |
Sandeep Puligilla | 0806e0f | 2017-03-06 19:25:47 -0800 | [diff] [blame] | 335 | /* Register with scan component */ |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 336 | sap_ctx->req_id = ucfg_scan_register_requester(pmac->psoc, "SAP", |
| 337 | sap_scan_event_callback, sap_ctx); |
Sandeep Puligilla | 994f620 | 2017-06-19 18:29:05 -0700 | [diff] [blame] | 338 | |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 339 | return QDF_STATUS_SUCCESS; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 340 | } |
| 341 | |
Krunal Soni | 5943765 | 2017-11-21 13:42:14 -0800 | [diff] [blame] | 342 | QDF_STATUS sap_deinit_ctx(struct sap_context *sap_ctx) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 343 | { |
Krunal Soni | 074dd2c | 2017-04-14 14:57:34 -0700 | [diff] [blame] | 344 | tHalHandle hal; |
Sandeep Puligilla | 0806e0f | 2017-03-06 19:25:47 -0800 | [diff] [blame] | 345 | tpAniSirGlobal pmac; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 346 | |
Ryan Hsu | 4252a2f | 2016-01-05 11:18:24 -0800 | [diff] [blame] | 347 | /* Sanity check - Extract SAP control block */ |
Krunal Soni | 074dd2c | 2017-04-14 14:57:34 -0700 | [diff] [blame] | 348 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_DEBUG, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 349 | "wlansap_stop invoked successfully "); |
| 350 | |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 351 | if (NULL == sap_ctx) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 352 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Jeff Johnson | 3d4c710 | 2017-09-15 11:36:19 -0700 | [diff] [blame] | 353 | "%s: Invalid SAP pointer", __func__); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 354 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 355 | } |
Jeff Johnson | c0db384 | 2017-09-13 18:34:28 -0700 | [diff] [blame] | 356 | hal = CDS_GET_HAL_CB(); |
Krunal Soni | 074dd2c | 2017-04-14 14:57:34 -0700 | [diff] [blame] | 357 | pmac = (tpAniSirGlobal) hal; |
Sandeep Puligilla | 0806e0f | 2017-03-06 19:25:47 -0800 | [diff] [blame] | 358 | if (NULL == pmac) { |
Krunal Soni | 074dd2c | 2017-04-14 14:57:34 -0700 | [diff] [blame] | 359 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Jeff Johnson | 3d4c710 | 2017-09-15 11:36:19 -0700 | [diff] [blame] | 360 | "%s: Invalid MAC context", __func__); |
Sandeep Puligilla | 0806e0f | 2017-03-06 19:25:47 -0800 | [diff] [blame] | 361 | return QDF_STATUS_E_FAULT; |
| 362 | } |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 363 | ucfg_scan_unregister_requester(pmac->psoc, sap_ctx->req_id); |
| 364 | sap_free_roam_profile(&sap_ctx->csr_roamProfile); |
Krunal Soni | f6a367b | 2017-10-31 11:38:57 -0700 | [diff] [blame] | 365 | if (sap_ctx->sessionId != CSR_SESSION_ID_INVALID) { |
| 366 | /* empty queues/lists/pkts if any */ |
| 367 | sap_clear_session_param(hal, sap_ctx, sap_ctx->sessionId); |
| 368 | } |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 369 | |
Jiachao Wu | b8f8921 | 2018-05-24 15:43:59 +0800 | [diff] [blame] | 370 | if (sap_ctx->channelList) { |
| 371 | qdf_mem_free(sap_ctx->channelList); |
| 372 | sap_ctx->channelList = NULL; |
| 373 | sap_ctx->num_of_channel = 0; |
| 374 | } |
| 375 | |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 376 | return QDF_STATUS_SUCCESS; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 377 | } |
| 378 | |
Krunal Soni | 5943765 | 2017-11-21 13:42:14 -0800 | [diff] [blame] | 379 | QDF_STATUS sap_destroy_ctx(struct sap_context *sap_ctx) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 380 | { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 381 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH, |
Krunal Soni | b5d18ae | 2017-11-20 21:52:35 -0800 | [diff] [blame] | 382 | "sap_destroy_ctx invoked"); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 383 | |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 384 | if (NULL == sap_ctx) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 385 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Jeff Johnson | 70955b5 | 2017-09-25 09:19:33 -0700 | [diff] [blame] | 386 | "%s: Invalid SAP pointer", __func__); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 387 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 388 | } |
Ryan Hsu | 4252a2f | 2016-01-05 11:18:24 -0800 | [diff] [blame] | 389 | /* Cleanup SAP control block */ |
Krunal Soni | 074dd2c | 2017-04-14 14:57:34 -0700 | [diff] [blame] | 390 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_DEBUG, FL("Enter")); |
Krunal Soni | 074dd2c | 2017-04-14 14:57:34 -0700 | [diff] [blame] | 391 | /* |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 392 | * wlansap_context_put will release actual sap_ctx memory |
Krunal Soni | 5943765 | 2017-11-21 13:42:14 -0800 | [diff] [blame] | 393 | * allocated during sap_create_ctx |
Krunal Soni | 074dd2c | 2017-04-14 14:57:34 -0700 | [diff] [blame] | 394 | */ |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 395 | wlansap_context_put(sap_ctx); |
Krunal Soni | 074dd2c | 2017-04-14 14:57:34 -0700 | [diff] [blame] | 396 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_DEBUG, FL("Exit")); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 397 | |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 398 | return QDF_STATUS_SUCCESS; |
Krunal Soni | b5d18ae | 2017-11-20 21:52:35 -0800 | [diff] [blame] | 399 | } /* sap_destroy_ctx */ |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 400 | |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 401 | bool wlansap_is_channel_in_nol_list(struct sap_context *sap_ctx, |
Kapil Gupta | 94ca6f6 | 2016-12-11 18:43:12 +0530 | [diff] [blame] | 402 | uint8_t channelNumber, |
| 403 | ePhyChanBondState chanBondState) |
| 404 | { |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 405 | if (!sap_ctx) { |
Kapil Gupta | 94ca6f6 | 2016-12-11 18:43:12 +0530 | [diff] [blame] | 406 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH, |
| 407 | "%s: Invalid SAP pointer from pCtx", __func__); |
| 408 | return QDF_STATUS_E_FAULT; |
| 409 | } |
| 410 | |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 411 | return sap_dfs_is_channel_in_nol_list(sap_ctx, channelNumber, |
Kapil Gupta | 94ca6f6 | 2016-12-11 18:43:12 +0530 | [diff] [blame] | 412 | chanBondState); |
| 413 | } |
| 414 | |
bings | 1826d9c | 2018-01-23 16:14:01 +0800 | [diff] [blame] | 415 | static QDF_STATUS wlansap_mark_leaking_channel(struct wlan_objmgr_pdev *pdev, |
Kapil Gupta | 94ca6f6 | 2016-12-11 18:43:12 +0530 | [diff] [blame] | 416 | uint8_t *leakage_adjusted_lst, |
| 417 | uint8_t chan_bw) |
| 418 | { |
| 419 | |
bings | 1826d9c | 2018-01-23 16:14:01 +0800 | [diff] [blame] | 420 | return utils_dfs_mark_leaking_ch(pdev, chan_bw, 1, |
Kapil Gupta | 94ca6f6 | 2016-12-11 18:43:12 +0530 | [diff] [blame] | 421 | leakage_adjusted_lst); |
| 422 | } |
Kapil Gupta | 94ca6f6 | 2016-12-11 18:43:12 +0530 | [diff] [blame] | 423 | |
Jeff Johnson | 2f6013c | 2017-09-24 19:40:07 -0700 | [diff] [blame] | 424 | bool wlansap_is_channel_leaking_in_nol(struct sap_context *sap_ctx, |
| 425 | uint8_t channel, |
| 426 | uint8_t chan_bw) |
Kapil Gupta | 94ca6f6 | 2016-12-11 18:43:12 +0530 | [diff] [blame] | 427 | { |
Kapil Gupta | 94ca6f6 | 2016-12-11 18:43:12 +0530 | [diff] [blame] | 428 | tpAniSirGlobal mac_ctx; |
| 429 | uint8_t leakage_adjusted_lst[1]; |
| 430 | void *handle = NULL; |
Kapil Gupta | 94ca6f6 | 2016-12-11 18:43:12 +0530 | [diff] [blame] | 431 | |
| 432 | leakage_adjusted_lst[0] = channel; |
Jeff Johnson | c0db384 | 2017-09-13 18:34:28 -0700 | [diff] [blame] | 433 | handle = CDS_GET_HAL_CB(); |
Kapil Gupta | 94ca6f6 | 2016-12-11 18:43:12 +0530 | [diff] [blame] | 434 | mac_ctx = PMAC_STRUCT(handle); |
| 435 | if (!mac_ctx) { |
| 436 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
| 437 | "%s: Invalid mac pointer", __func__); |
| 438 | return QDF_STATUS_E_FAULT; |
| 439 | } |
bings | 1826d9c | 2018-01-23 16:14:01 +0800 | [diff] [blame] | 440 | if (QDF_IS_STATUS_ERROR(wlansap_mark_leaking_channel(mac_ctx->pdev, |
| 441 | leakage_adjusted_lst, chan_bw))) |
Kapil Gupta | 94ca6f6 | 2016-12-11 18:43:12 +0530 | [diff] [blame] | 442 | return true; |
bings | 1826d9c | 2018-01-23 16:14:01 +0800 | [diff] [blame] | 443 | |
| 444 | if (!leakage_adjusted_lst[0]) |
Kapil Gupta | 94ca6f6 | 2016-12-11 18:43:12 +0530 | [diff] [blame] | 445 | return true; |
bings | 1826d9c | 2018-01-23 16:14:01 +0800 | [diff] [blame] | 446 | |
Kapil Gupta | 94ca6f6 | 2016-12-11 18:43:12 +0530 | [diff] [blame] | 447 | return false; |
| 448 | } |
| 449 | |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 450 | #ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 451 | uint16_t wlansap_check_cc_intf(struct sap_context *sap_ctx) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 452 | { |
| 453 | tHalHandle hHal; |
| 454 | uint16_t intf_ch; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 455 | |
Jeff Johnson | c0db384 | 2017-09-13 18:34:28 -0700 | [diff] [blame] | 456 | hHal = (tHalHandle) CDS_GET_HAL_CB(); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 457 | if (NULL == hHal) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 458 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 459 | "%s: Invalid MAC context from p_cds_gctx", __func__); |
| 460 | return 0; |
| 461 | } |
Rachit Kankane | 11ac4bc | 2017-09-18 19:58:07 +0530 | [diff] [blame] | 462 | intf_ch = sme_check_concurrent_channel_overlap(hHal, sap_ctx->channel, |
| 463 | sap_ctx->csr_roamProfile.phyMode, |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 464 | sap_ctx->cc_switch_mode); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 465 | return intf_ch; |
| 466 | } |
| 467 | #endif |
| 468 | |
| 469 | /** |
| 470 | * wlansap_set_scan_acs_channel_params() - Config scan and channel parameters. |
| 471 | * pconfig: Pointer to the SAP config |
| 472 | * psap_ctx: Pointer to the SAP Context. |
| 473 | * pusr_context: Parameter that will be passed |
| 474 | * back in all the SAP callback events. |
| 475 | * |
| 476 | * This api function is used to copy Scan and Channel parameters from sap |
| 477 | * config to sap context. |
| 478 | * |
| 479 | * Return: The result code associated with |
| 480 | * performing the operation |
| 481 | */ |
Jeff Johnson | 464f7ea | 2016-10-07 10:21:26 -0700 | [diff] [blame] | 482 | static QDF_STATUS |
Jeff Johnson | e4c11db | 2018-05-05 23:22:32 -0700 | [diff] [blame] | 483 | wlansap_set_scan_acs_channel_params(tsap_config_t *pconfig, |
Jeff Johnson | f1cd3c7 | 2017-09-14 07:18:06 -0700 | [diff] [blame] | 484 | struct sap_context *psap_ctx, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 485 | void *pusr_context) |
| 486 | { |
| 487 | tHalHandle h_hal = NULL; |
Kiran Kumar Lokere | b1d412e | 2017-04-23 17:19:43 -0700 | [diff] [blame] | 488 | tpAniSirGlobal pmac; |
| 489 | QDF_STATUS status = QDF_STATUS_SUCCESS; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 490 | |
| 491 | if (NULL == pconfig) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 492 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 493 | "%s: Invalid pconfig passed ", __func__); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 494 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 495 | } |
| 496 | |
| 497 | if (NULL == psap_ctx) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 498 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 499 | "%s: Invalid pconfig passed ", __func__); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 500 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 501 | } |
| 502 | |
| 503 | /* Channel selection is auto or configured */ |
| 504 | psap_ctx->channel = pconfig->channel; |
Agrawal Ashish | 6563461 | 2016-08-18 13:24:32 +0530 | [diff] [blame] | 505 | psap_ctx->dfs_mode = pconfig->acs_dfs_mode; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 506 | #ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH |
| 507 | psap_ctx->cc_switch_mode = pconfig->cc_switch_mode; |
| 508 | #endif |
gaolez | e510894 | 2017-03-31 16:56:42 +0800 | [diff] [blame] | 509 | psap_ctx->auto_channel_select_weight = |
| 510 | pconfig->auto_channel_select_weight; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 511 | psap_ctx->pUsrContext = pusr_context; |
| 512 | psap_ctx->enableOverLapCh = pconfig->enOverLapCh; |
| 513 | psap_ctx->acs_cfg = &pconfig->acs_cfg; |
| 514 | psap_ctx->ch_width_orig = pconfig->acs_cfg.ch_width; |
| 515 | psap_ctx->secondary_ch = pconfig->sec_ch; |
| 516 | |
| 517 | /* |
| 518 | * Set the BSSID to your "self MAC Addr" read |
| 519 | * the mac address from Configuation ITEM received |
| 520 | * from HDD |
| 521 | */ |
| 522 | psap_ctx->csr_roamProfile.BSSIDs.numOfBSSIDs = 1; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 523 | |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 524 | /* Save a copy to SAP context */ |
Anurag Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 525 | qdf_mem_copy(psap_ctx->csr_roamProfile.BSSIDs.bssid, |
Anurag Chouhan | 6d76066 | 2016-02-20 16:05:43 +0530 | [diff] [blame] | 526 | pconfig->self_macaddr.bytes, QDF_MAC_ADDR_SIZE); |
Anurag Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 527 | qdf_mem_copy(psap_ctx->self_mac_addr, |
Anurag Chouhan | 6d76066 | 2016-02-20 16:05:43 +0530 | [diff] [blame] | 528 | pconfig->self_macaddr.bytes, QDF_MAC_ADDR_SIZE); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 529 | |
Jeff Johnson | c0db384 | 2017-09-13 18:34:28 -0700 | [diff] [blame] | 530 | h_hal = (tHalHandle)CDS_GET_HAL_CB(); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 531 | if (NULL == h_hal) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 532 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 533 | "%s: Invalid MAC context from pvosGCtx", __func__); |
Kiran Kumar Lokere | b1d412e | 2017-04-23 17:19:43 -0700 | [diff] [blame] | 534 | return QDF_STATUS_E_FAULT; |
| 535 | } |
| 536 | pmac = PMAC_STRUCT(h_hal); |
| 537 | /* |
| 538 | * If concurrent session is running that is already associated |
| 539 | * then we just follow that sessions country info (whether |
| 540 | * present or not doesn't maater as we have to follow whatever |
| 541 | * STA session does) |
| 542 | */ |
| 543 | if ((0 == sme_get_concurrent_operation_channel(h_hal)) && |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 544 | pconfig->ieee80211d) { |
Kiran Kumar Lokere | b1d412e | 2017-04-23 17:19:43 -0700 | [diff] [blame] | 545 | /* Setting the region/country information */ |
| 546 | status = ucfg_reg_set_country(pmac->pdev, |
| 547 | pconfig->countryCode); |
| 548 | if (QDF_IS_STATUS_ERROR(status)) |
| 549 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
| 550 | FL("Failed to set country")); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 551 | } |
| 552 | |
Kiran Kumar Lokere | b1d412e | 2017-04-23 17:19:43 -0700 | [diff] [blame] | 553 | return status; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 554 | } |
bings | 58ce862 | 2017-07-10 15:55:36 +0800 | [diff] [blame] | 555 | |
Nachiket Kukade | d915283 | 2017-10-16 16:18:22 +0530 | [diff] [blame] | 556 | /** |
| 557 | * wlan_sap_get_roam_profile() - Returns sap roam profile. |
| 558 | * @sap_ctx: Pointer to Sap Context. |
| 559 | * |
| 560 | * This function provides the SAP roam profile. |
| 561 | * |
| 562 | * Return: SAP RoamProfile |
| 563 | */ |
Jeff Johnson | 66ee8a9 | 2018-03-17 15:24:26 -0700 | [diff] [blame] | 564 | struct csr_roam_profile *wlan_sap_get_roam_profile(struct sap_context *sap_ctx) |
Nachiket Kukade | d915283 | 2017-10-16 16:18:22 +0530 | [diff] [blame] | 565 | { |
| 566 | if (!sap_ctx) { |
| 567 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
| 568 | FL("Invalid SAP pointer from ctx")); |
| 569 | return NULL; |
| 570 | } |
| 571 | return &sap_ctx->csr_roamProfile; |
| 572 | } |
| 573 | |
Jeff Johnson | ebb7f0a | 2017-09-24 20:00:13 -0700 | [diff] [blame] | 574 | eCsrPhyMode wlan_sap_get_phymode(struct sap_context *sap_ctx) |
bings | 58ce862 | 2017-07-10 15:55:36 +0800 | [diff] [blame] | 575 | { |
bings | 58ce862 | 2017-07-10 15:55:36 +0800 | [diff] [blame] | 576 | if (!sap_ctx) { |
| 577 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
| 578 | FL("Invalid SAP pointer from ctx")); |
| 579 | return 0; |
| 580 | } |
| 581 | return sap_ctx->csr_roamProfile.phyMode; |
| 582 | } |
| 583 | |
Jeff Johnson | ee7a393 | 2017-09-24 20:17:55 -0700 | [diff] [blame] | 584 | uint32_t wlan_sap_get_vht_ch_width(struct sap_context *sap_ctx) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 585 | { |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 586 | if (!sap_ctx) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 587 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Jeff Johnson | ee7a393 | 2017-09-24 20:17:55 -0700 | [diff] [blame] | 588 | FL("Invalid SAP pointer")); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 589 | return 0; |
| 590 | } |
| 591 | |
| 592 | return sap_ctx->ch_params.ch_width; |
| 593 | } |
| 594 | |
Jeff Johnson | 2de14da | 2017-09-24 20:23:37 -0700 | [diff] [blame] | 595 | void wlan_sap_set_vht_ch_width(struct sap_context *sap_ctx, |
| 596 | uint32_t vht_channel_width) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 597 | { |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 598 | if (!sap_ctx) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 599 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Jeff Johnson | 2de14da | 2017-09-24 20:23:37 -0700 | [diff] [blame] | 600 | FL("Invalid SAP pointer")); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 601 | return; |
| 602 | } |
| 603 | |
| 604 | sap_ctx->ch_params.ch_width = vht_channel_width; |
| 605 | } |
| 606 | |
| 607 | /** |
Edhar, Mahesh Kumar | df2ec12 | 2015-11-16 11:33:16 +0530 | [diff] [blame] | 608 | * wlan_sap_validate_channel_switch() - validate target channel switch w.r.t |
| 609 | * concurreny rules set to avoid channel interference. |
| 610 | * @hal - Hal context |
| 611 | * @sap_ch - channel to switch |
| 612 | * @sap_context - sap session context |
| 613 | * |
| 614 | * Return: true if there is no channel interference else return false |
| 615 | */ |
| 616 | #ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH |
| 617 | static bool wlan_sap_validate_channel_switch(tHalHandle hal, uint16_t sap_ch, |
Jeff Johnson | f1cd3c7 | 2017-09-14 07:18:06 -0700 | [diff] [blame] | 618 | struct sap_context *sap_context) |
Edhar, Mahesh Kumar | df2ec12 | 2015-11-16 11:33:16 +0530 | [diff] [blame] | 619 | { |
| 620 | return sme_validate_sap_channel_switch( |
Manikandan Mohan | 22b8372 | 2015-12-15 15:03:23 -0800 | [diff] [blame] | 621 | hal, |
Edhar, Mahesh Kumar | df2ec12 | 2015-11-16 11:33:16 +0530 | [diff] [blame] | 622 | sap_ch, |
| 623 | sap_context->csr_roamProfile.phyMode, |
| 624 | sap_context->cc_switch_mode, |
| 625 | sap_context->sessionId); |
| 626 | } |
| 627 | #else |
| 628 | static inline bool wlan_sap_validate_channel_switch(tHalHandle hal, |
Jeff Johnson | f1cd3c7 | 2017-09-14 07:18:06 -0700 | [diff] [blame] | 629 | uint16_t sap_ch, struct sap_context *sap_context) |
Edhar, Mahesh Kumar | df2ec12 | 2015-11-16 11:33:16 +0530 | [diff] [blame] | 630 | { |
| 631 | return true; |
| 632 | } |
| 633 | #endif |
Himanshu Agarwal | 3316398 | 2018-05-17 18:11:10 +0530 | [diff] [blame] | 634 | |
| 635 | void wlan_sap_set_sap_ctx_acs_cfg(struct sap_context *sap_ctx, |
| 636 | tsap_config_t *sap_config) |
| 637 | { |
| 638 | if (!sap_ctx) { |
| 639 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH, |
| 640 | "%s: Invalid SAP pointer", |
| 641 | __func__); |
| 642 | return; |
| 643 | } |
| 644 | |
| 645 | sap_ctx->acs_cfg = &sap_config->acs_cfg; |
| 646 | } |
| 647 | |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 648 | QDF_STATUS wlansap_start_bss(struct sap_context *sap_ctx, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 649 | tpWLAN_SAPEventCB pSapEventCallback, |
Jeff Johnson | e4c11db | 2018-05-05 23:22:32 -0700 | [diff] [blame] | 650 | tsap_config_t *pConfig, void *pUsrContext) |
Jeff Johnson | e2f7d54 | 2017-09-24 20:52:24 -0700 | [diff] [blame] | 651 | { |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 652 | tWLAN_SAPEvent sapEvent; /* State machine event */ |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 653 | QDF_STATUS qdf_status = QDF_STATUS_SUCCESS; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 654 | tHalHandle hHal; |
| 655 | tpAniSirGlobal pmac = NULL; |
| 656 | |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 657 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH, |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 658 | "wlansap_start_bss: sapContext=%pK", sap_ctx); |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 659 | |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 660 | if (NULL == sap_ctx) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 661 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH, |
Jeff Johnson | e2f7d54 | 2017-09-24 20:52:24 -0700 | [diff] [blame] | 662 | "%s: Invalid SAP pointer", |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 663 | __func__); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 664 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 665 | } |
Rajeev Kumar Sirasanagandla | 301aacb | 2018-08-07 15:48:18 +0530 | [diff] [blame] | 666 | sap_ctx->fsm_state = SAP_INIT; |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 667 | |
| 668 | /* Channel selection is auto or configured */ |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 669 | sap_ctx->channel = pConfig->channel; |
| 670 | sap_ctx->dfs_mode = pConfig->acs_dfs_mode; |
| 671 | sap_ctx->ch_params.ch_width = pConfig->ch_params.ch_width; |
| 672 | sap_ctx->ch_params.center_freq_seg0 = |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 673 | pConfig->ch_params.center_freq_seg0; |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 674 | sap_ctx->ch_params.center_freq_seg1 = |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 675 | pConfig->ch_params.center_freq_seg1; |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 676 | sap_ctx->ch_params.sec_ch_offset = |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 677 | pConfig->ch_params.sec_ch_offset; |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 678 | sap_ctx->ch_width_orig = pConfig->ch_width_orig; |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 679 | #ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 680 | sap_ctx->cc_switch_mode = pConfig->cc_switch_mode; |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 681 | #endif |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 682 | sap_ctx->auto_channel_select_weight = |
gaolez | e510894 | 2017-03-31 16:56:42 +0800 | [diff] [blame] | 683 | pConfig->auto_channel_select_weight; |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 684 | sap_ctx->pUsrContext = pUsrContext; |
| 685 | sap_ctx->enableOverLapCh = pConfig->enOverLapCh; |
| 686 | sap_ctx->acs_cfg = &pConfig->acs_cfg; |
hqu | 8f11faa | 2018-04-27 20:57:05 +0800 | [diff] [blame] | 687 | sap_ctx->secondary_ch = pConfig->sec_ch; |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 688 | sap_ctx->dfs_cac_offload = pConfig->dfs_cac_offload; |
| 689 | sap_ctx->isCacEndNotified = false; |
Sandeep Puligilla | 20aa0c7 | 2017-10-30 12:24:06 -0700 | [diff] [blame] | 690 | sap_ctx->is_chan_change_inprogress = false; |
Vignesh Viswanathan | 200f5c1 | 2018-02-27 14:01:59 +0530 | [diff] [blame] | 691 | sap_ctx->stop_bss_in_progress = false; |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 692 | /* Set the BSSID to your "self MAC Addr" read the mac address |
| 693 | from Configuation ITEM received from HDD */ |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 694 | sap_ctx->csr_roamProfile.BSSIDs.numOfBSSIDs = 1; |
| 695 | qdf_mem_copy(sap_ctx->csr_roamProfile.BSSIDs.bssid, |
| 696 | sap_ctx->self_mac_addr, sizeof(struct qdf_mac_addr)); |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 697 | |
| 698 | /* Save a copy to SAP context */ |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 699 | qdf_mem_copy(sap_ctx->csr_roamProfile.BSSIDs.bssid, |
Anurag Chouhan | 6d76066 | 2016-02-20 16:05:43 +0530 | [diff] [blame] | 700 | pConfig->self_macaddr.bytes, QDF_MAC_ADDR_SIZE); |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 701 | qdf_mem_copy(sap_ctx->self_mac_addr, |
Anurag Chouhan | 6d76066 | 2016-02-20 16:05:43 +0530 | [diff] [blame] | 702 | pConfig->self_macaddr.bytes, QDF_MAC_ADDR_SIZE); |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 703 | |
| 704 | /* copy the configuration items to csrProfile */ |
| 705 | sapconvert_to_csr_profile(pConfig, eCSR_BSS_TYPE_INFRA_AP, |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 706 | &sap_ctx->csr_roamProfile); |
Jeff Johnson | c0db384 | 2017-09-13 18:34:28 -0700 | [diff] [blame] | 707 | hHal = (tHalHandle) CDS_GET_HAL_CB(); |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 708 | if (NULL == hHal) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 709 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH, |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 710 | "%s: Invalid MAC context from p_cds_gctx", |
| 711 | __func__); |
Manikandan Mohan | 3dad1a4 | 2017-06-14 10:50:18 -0700 | [diff] [blame] | 712 | qdf_status = QDF_STATUS_E_FAULT; |
| 713 | goto fail; |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 714 | } |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 715 | pmac = PMAC_STRUCT(hHal); |
Kiran Kumar Lokere | b1d412e | 2017-04-23 17:19:43 -0700 | [diff] [blame] | 716 | /* If concurrent session is running that is already associated |
| 717 | * then we just follow that sessions country info (whether |
| 718 | * present or not doesn't maater as we have to follow whatever |
| 719 | * STA session does) */ |
| 720 | if ((0 == sme_get_concurrent_operation_channel(hHal)) && |
| 721 | pConfig->ieee80211d) { |
| 722 | /* Setting the region/country information */ |
| 723 | qdf_status = ucfg_reg_set_country(pmac->pdev, |
| 724 | pConfig->countryCode); |
| 725 | if (QDF_IS_STATUS_ERROR(qdf_status)) |
| 726 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
| 727 | FL("Failed to set country")); |
| 728 | } |
| 729 | |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 730 | /* |
| 731 | * Copy the DFS Test Mode setting to pmac for |
| 732 | * access in lower layers |
| 733 | */ |
| 734 | pmac->sap.SapDfsInfo.disable_dfs_ch_switch = |
| 735 | pConfig->disableDFSChSwitch; |
gaolez | e2920bd | 2017-03-21 17:38:42 +0800 | [diff] [blame] | 736 | pmac->sap.SapDfsInfo.sap_ch_switch_beacon_cnt = |
| 737 | pConfig->sap_chanswitch_beacon_cnt; |
gaolez | 76d2a16 | 2017-03-21 19:23:58 +0800 | [diff] [blame] | 738 | pmac->sap.SapDfsInfo.sap_ch_switch_mode = |
| 739 | pConfig->sap_chanswitch_mode; |
gaolez | e2920bd | 2017-03-21 17:38:42 +0800 | [diff] [blame] | 740 | |
Zhu Jianmin | c147a54 | 2018-05-21 13:15:40 +0800 | [diff] [blame] | 741 | pmac->sap.sapCtxList[sap_ctx->sessionId].sap_context = sap_ctx; |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 742 | pmac->sap.sapCtxList[sap_ctx->sessionId].sapPersona = |
| 743 | sap_ctx->csr_roamProfile.csrPersona; |
| 744 | pmac->sap.sapCtxList[sap_ctx->sessionId].sessionID = |
| 745 | sap_ctx->sessionId; |
lifeng | 1c16b6b | 2017-09-25 13:59:55 +0800 | [diff] [blame] | 746 | pmac->sap.SapDfsInfo.dfs_beacon_tx_enhanced = |
| 747 | pConfig->dfs_beacon_tx_enhanced; |
lifeng | 7c607dd | 2017-02-21 21:16:49 +0800 | [diff] [blame] | 748 | pmac->sap.SapDfsInfo.reduced_beacon_interval = |
| 749 | pConfig->reduced_beacon_interval; |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 750 | |
| 751 | /* Copy MAC filtering settings to sap context */ |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 752 | sap_ctx->eSapMacAddrAclMode = pConfig->SapMacaddr_acl; |
| 753 | qdf_mem_copy(sap_ctx->acceptMacList, pConfig->accept_mac, |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 754 | sizeof(pConfig->accept_mac)); |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 755 | sap_ctx->nAcceptMac = pConfig->num_accept_mac; |
| 756 | sap_sort_mac_list(sap_ctx->acceptMacList, sap_ctx->nAcceptMac); |
| 757 | qdf_mem_copy(sap_ctx->denyMacList, pConfig->deny_mac, |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 758 | sizeof(pConfig->deny_mac)); |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 759 | sap_ctx->nDenyMac = pConfig->num_deny_mac; |
| 760 | sap_sort_mac_list(sap_ctx->denyMacList, sap_ctx->nDenyMac); |
| 761 | sap_ctx->beacon_tx_rate = pConfig->beacon_tx_rate; |
Jiachao Wu | 712d4fd | 2017-08-23 16:52:34 +0800 | [diff] [blame] | 762 | |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 763 | /* Fill in the event structure for FSM */ |
| 764 | sapEvent.event = eSAP_HDD_START_INFRA_BSS; |
| 765 | sapEvent.params = 0; /* pSapPhysLinkCreate */ |
| 766 | |
| 767 | /* Store the HDD callback in SAP context */ |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 768 | sap_ctx->pfnSapEventCallback = pSapEventCallback; |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 769 | |
| 770 | /* Handle event */ |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 771 | qdf_status = sap_fsm(sap_ctx, &sapEvent); |
Manikandan Mohan | 3dad1a4 | 2017-06-14 10:50:18 -0700 | [diff] [blame] | 772 | fail: |
| 773 | if (QDF_IS_STATUS_ERROR(qdf_status)) |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 774 | sap_free_roam_profile(&sap_ctx->csr_roamProfile); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 775 | |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 776 | return qdf_status; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 777 | } /* wlansap_start_bss */ |
| 778 | |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 779 | QDF_STATUS wlansap_set_mac_acl(struct sap_context *sap_ctx, |
Jeff Johnson | e4c11db | 2018-05-05 23:22:32 -0700 | [diff] [blame] | 780 | tsap_config_t *pConfig) |
Jeff Johnson | 65dd6d9 | 2017-09-24 21:12:49 -0700 | [diff] [blame] | 781 | { |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 782 | QDF_STATUS qdf_status = QDF_STATUS_SUCCESS; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 783 | |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 784 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 785 | "wlansap_set_mac_acl"); |
| 786 | |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 787 | if (NULL == sap_ctx) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 788 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH, |
Jeff Johnson | 65dd6d9 | 2017-09-24 21:12:49 -0700 | [diff] [blame] | 789 | "%s: Invalid SAP pointer", __func__); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 790 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 791 | } |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 792 | /* Copy MAC filtering settings to sap context */ |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 793 | sap_ctx->eSapMacAddrAclMode = pConfig->SapMacaddr_acl; |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 794 | |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 795 | if (eSAP_DENY_UNLESS_ACCEPTED == sap_ctx->eSapMacAddrAclMode) { |
| 796 | qdf_mem_copy(sap_ctx->acceptMacList, |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 797 | pConfig->accept_mac, |
| 798 | sizeof(pConfig->accept_mac)); |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 799 | sap_ctx->nAcceptMac = pConfig->num_accept_mac; |
| 800 | sap_sort_mac_list(sap_ctx->acceptMacList, |
| 801 | sap_ctx->nAcceptMac); |
| 802 | } else if (eSAP_ACCEPT_UNLESS_DENIED == sap_ctx->eSapMacAddrAclMode) { |
| 803 | qdf_mem_copy(sap_ctx->denyMacList, pConfig->deny_mac, |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 804 | sizeof(pConfig->deny_mac)); |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 805 | sap_ctx->nDenyMac = pConfig->num_deny_mac; |
| 806 | sap_sort_mac_list(sap_ctx->denyMacList, sap_ctx->nDenyMac); |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 807 | } |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 808 | |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 809 | return qdf_status; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 810 | } /* wlansap_set_mac_acl */ |
| 811 | |
Vignesh Viswanathan | 200f5c1 | 2018-02-27 14:01:59 +0530 | [diff] [blame] | 812 | void wlansap_set_stop_bss_inprogress(struct sap_context *sap_ctx, |
| 813 | bool in_progress) |
| 814 | { |
| 815 | if (!sap_ctx) { |
| 816 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
| 817 | "%s: Invalid SAP pointer from ctx", __func__); |
| 818 | return; |
| 819 | } |
| 820 | |
| 821 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_DEBUG, |
| 822 | "%s: Set stop_bss_in_progress to %d", |
| 823 | __func__, in_progress); |
| 824 | sap_ctx->stop_bss_in_progress = in_progress; |
| 825 | } |
| 826 | |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 827 | QDF_STATUS wlansap_stop_bss(struct sap_context *sap_ctx) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 828 | { |
| 829 | tWLAN_SAPEvent sapEvent; /* State machine event */ |
Jeff Johnson | 16e29cd | 2017-09-24 21:01:19 -0700 | [diff] [blame] | 830 | QDF_STATUS qdf_status; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 831 | |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 832 | if (NULL == sap_ctx) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 833 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Jeff Johnson | 16e29cd | 2017-09-24 21:01:19 -0700 | [diff] [blame] | 834 | "%s: Invalid SAP pointer", __func__); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 835 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 836 | } |
| 837 | |
| 838 | /* Fill in the event structure for FSM */ |
| 839 | sapEvent.event = eSAP_HDD_STOP_INFRA_BSS; |
| 840 | sapEvent.params = 0; |
| 841 | |
| 842 | /* Handle event */ |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 843 | qdf_status = sap_fsm(sap_ctx, &sapEvent); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 844 | |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 845 | return qdf_status; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 846 | } |
| 847 | |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 848 | /* This routine will set the mode of operation for ACL dynamically*/ |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 849 | QDF_STATUS wlansap_set_acl_mode(struct sap_context *sap_ctx, |
Jeff Johnson | f8ac737 | 2017-09-24 21:24:25 -0700 | [diff] [blame] | 850 | eSapMacAddrACL mode) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 851 | { |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 852 | if (NULL == sap_ctx) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 853 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Jeff Johnson | f8ac737 | 2017-09-24 21:24:25 -0700 | [diff] [blame] | 854 | "%s: Invalid SAP pointer", __func__); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 855 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 856 | } |
| 857 | |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 858 | sap_ctx->eSapMacAddrAclMode = mode; |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 859 | return QDF_STATUS_SUCCESS; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 860 | } |
| 861 | |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 862 | QDF_STATUS wlansap_get_acl_mode(struct sap_context *sap_ctx, |
Jeff Johnson | 1030f8c | 2017-09-24 21:33:40 -0700 | [diff] [blame] | 863 | eSapMacAddrACL *mode) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 864 | { |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 865 | if (NULL == sap_ctx) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 866 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Jeff Johnson | 1030f8c | 2017-09-24 21:33:40 -0700 | [diff] [blame] | 867 | "%s: Invalid SAP pointer", __func__); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 868 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 869 | } |
| 870 | |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 871 | *mode = sap_ctx->eSapMacAddrAclMode; |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 872 | return QDF_STATUS_SUCCESS; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 873 | } |
| 874 | |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 875 | QDF_STATUS wlansap_get_acl_accept_list(struct sap_context *sap_ctx, |
Jeff Johnson | 878f6d5 | 2017-09-25 08:28:53 -0700 | [diff] [blame] | 876 | struct qdf_mac_addr *pAcceptList, |
| 877 | uint8_t *nAcceptList) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 878 | { |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 879 | if (NULL == sap_ctx) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 880 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Jeff Johnson | 878f6d5 | 2017-09-25 08:28:53 -0700 | [diff] [blame] | 881 | "%s: Invalid SAP pointer", __func__); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 882 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 883 | } |
| 884 | |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 885 | memcpy(pAcceptList, sap_ctx->acceptMacList, |
| 886 | (sap_ctx->nAcceptMac * QDF_MAC_ADDR_SIZE)); |
| 887 | *nAcceptList = sap_ctx->nAcceptMac; |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 888 | return QDF_STATUS_SUCCESS; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 889 | } |
| 890 | |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 891 | QDF_STATUS wlansap_get_acl_deny_list(struct sap_context *sap_ctx, |
Jeff Johnson | 49c819f | 2017-09-25 13:48:36 -0700 | [diff] [blame] | 892 | struct qdf_mac_addr *pDenyList, |
| 893 | uint8_t *nDenyList) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 894 | { |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 895 | if (NULL == sap_ctx) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 896 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 897 | "%s: Invalid SAP pointer from p_cds_gctx", __func__); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 898 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 899 | } |
| 900 | |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 901 | memcpy(pDenyList, sap_ctx->denyMacList, |
| 902 | (sap_ctx->nDenyMac * QDF_MAC_ADDR_SIZE)); |
| 903 | *nDenyList = sap_ctx->nDenyMac; |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 904 | return QDF_STATUS_SUCCESS; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 905 | } |
| 906 | |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 907 | QDF_STATUS wlansap_clear_acl(struct sap_context *sap_ctx) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 908 | { |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 909 | uint8_t i; |
| 910 | |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 911 | if (NULL == sap_ctx) { |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 912 | return QDF_STATUS_E_RESOURCES; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 913 | } |
| 914 | |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 915 | for (i = 0; i < (sap_ctx->nDenyMac - 1); i++) { |
| 916 | qdf_mem_zero((sap_ctx->denyMacList + i)->bytes, |
Yingying Tang | 22facc1 | 2016-10-20 17:43:59 +0800 | [diff] [blame] | 917 | QDF_MAC_ADDR_SIZE); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 918 | } |
Yingying Tang | 22facc1 | 2016-10-20 17:43:59 +0800 | [diff] [blame] | 919 | |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 920 | sap_print_acl(sap_ctx->denyMacList, sap_ctx->nDenyMac); |
| 921 | sap_ctx->nDenyMac = 0; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 922 | |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 923 | for (i = 0; i < (sap_ctx->nAcceptMac - 1); i++) { |
| 924 | qdf_mem_zero((sap_ctx->acceptMacList + i)->bytes, |
Yingying Tang | 22facc1 | 2016-10-20 17:43:59 +0800 | [diff] [blame] | 925 | QDF_MAC_ADDR_SIZE); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 926 | } |
Yingying Tang | 22facc1 | 2016-10-20 17:43:59 +0800 | [diff] [blame] | 927 | |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 928 | sap_print_acl(sap_ctx->acceptMacList, sap_ctx->nAcceptMac); |
| 929 | sap_ctx->nAcceptMac = 0; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 930 | |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 931 | return QDF_STATUS_SUCCESS; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 932 | } |
| 933 | |
Jeff Johnson | 42fbe2f | 2017-09-24 17:42:11 -0700 | [diff] [blame] | 934 | QDF_STATUS wlansap_modify_acl(struct sap_context *sap_ctx, |
| 935 | uint8_t *peer_sta_mac, |
| 936 | eSapACLType list_type, eSapACLCmdType cmd) |
| 937 | { |
Srinivas Girigowda | 74a66d6 | 2017-06-21 23:28:25 -0700 | [diff] [blame] | 938 | bool sta_white_list = false, sta_black_list = false; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 939 | uint8_t staWLIndex, staBLIndex; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 940 | |
| 941 | if (NULL == sap_ctx) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 942 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 943 | "%s: Invalid SAP Context", __func__); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 944 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 945 | } |
| 946 | |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 947 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_LOW, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 948 | "Modify ACL entered\n" "Before modification of ACL\n" |
| 949 | "size of accept and deny lists %d %d", sap_ctx->nAcceptMac, |
| 950 | sap_ctx->nDenyMac); |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 951 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 952 | "*** WHITE LIST ***"); |
| 953 | sap_print_acl(sap_ctx->acceptMacList, sap_ctx->nAcceptMac); |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 954 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 955 | "*** BLACK LIST ***"); |
| 956 | sap_print_acl(sap_ctx->denyMacList, sap_ctx->nDenyMac); |
| 957 | |
Jeff Johnson | 42fbe2f | 2017-09-24 17:42:11 -0700 | [diff] [blame] | 958 | /* the expectation is a mac addr will not be in both the lists |
| 959 | * at the same time. It is the responsiblity of userspace to |
| 960 | * ensure this |
| 961 | */ |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 962 | sta_white_list = |
| 963 | sap_search_mac_list(sap_ctx->acceptMacList, sap_ctx->nAcceptMac, |
| 964 | peer_sta_mac, &staWLIndex); |
| 965 | sta_black_list = |
| 966 | sap_search_mac_list(sap_ctx->denyMacList, sap_ctx->nDenyMac, |
| 967 | peer_sta_mac, &staBLIndex); |
| 968 | |
| 969 | if (sta_white_list && sta_black_list) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 970 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 971 | "Peer mac " MAC_ADDRESS_STR |
| 972 | " found in white and black lists." |
| 973 | "Initial lists passed incorrect. Cannot execute this command.", |
| 974 | MAC_ADDR_ARRAY(peer_sta_mac)); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 975 | return QDF_STATUS_E_FAILURE; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 976 | |
| 977 | } |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 978 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_LOW, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 979 | "cmd %d", cmd); |
| 980 | |
| 981 | switch (list_type) { |
| 982 | case eSAP_WHITE_LIST: |
| 983 | if (cmd == ADD_STA_TO_ACL) { |
| 984 | /* error check */ |
| 985 | /* if list is already at max, return failure */ |
| 986 | if (sap_ctx->nAcceptMac == MAX_ACL_MAC_ADDRESS) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 987 | QDF_TRACE(QDF_MODULE_ID_SAP, |
| 988 | QDF_TRACE_LEVEL_ERROR, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 989 | "White list is already maxed out. Cannot accept " |
| 990 | MAC_ADDRESS_STR, |
| 991 | MAC_ADDR_ARRAY(peer_sta_mac)); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 992 | return QDF_STATUS_E_FAILURE; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 993 | } |
| 994 | if (sta_white_list) { |
| 995 | /* Do nothing if already present in white list. Just print a warning */ |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 996 | QDF_TRACE(QDF_MODULE_ID_SAP, |
| 997 | QDF_TRACE_LEVEL_WARN, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 998 | "MAC address already present in white list " |
| 999 | MAC_ADDRESS_STR, |
| 1000 | MAC_ADDR_ARRAY(peer_sta_mac)); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1001 | return QDF_STATUS_SUCCESS; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1002 | } |
| 1003 | if (sta_black_list) { |
| 1004 | /* remove it from black list before adding to the white list */ |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1005 | QDF_TRACE(QDF_MODULE_ID_SAP, |
| 1006 | QDF_TRACE_LEVEL_WARN, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1007 | "STA present in black list so first remove from it"); |
Jeff Johnson | 42fbe2f | 2017-09-24 17:42:11 -0700 | [diff] [blame] | 1008 | sap_remove_mac_from_acl(sap_ctx->denyMacList, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1009 | &sap_ctx->nDenyMac, |
| 1010 | staBLIndex); |
| 1011 | } |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1012 | QDF_TRACE(QDF_MODULE_ID_SAP, |
| 1013 | QDF_TRACE_LEVEL_INFO, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1014 | "... Now add to the white list"); |
| 1015 | sap_add_mac_to_acl(sap_ctx->acceptMacList, |
| 1016 | &sap_ctx->nAcceptMac, |
| 1017 | peer_sta_mac); |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1018 | QDF_TRACE(QDF_MODULE_ID_SAP, |
| 1019 | QDF_TRACE_LEVEL_INFO_LOW, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1020 | "size of accept and deny lists %d %d", |
| 1021 | sap_ctx->nAcceptMac, |
| 1022 | sap_ctx->nDenyMac); |
| 1023 | } else if (cmd == DELETE_STA_FROM_ACL) { |
| 1024 | if (sta_white_list) { |
| 1025 | |
Jeff Johnson | e6bf719 | 2017-11-07 15:16:09 -0800 | [diff] [blame] | 1026 | struct csr_del_sta_params delStaParams; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1027 | |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1028 | QDF_TRACE(QDF_MODULE_ID_SAP, |
| 1029 | QDF_TRACE_LEVEL_INFO, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1030 | "Delete from white list"); |
| 1031 | sap_remove_mac_from_acl(sap_ctx->acceptMacList, |
| 1032 | &sap_ctx->nAcceptMac, |
| 1033 | staWLIndex); |
| 1034 | /* If a client is deleted from white list and it is connected, send deauth */ |
| 1035 | wlansap_populate_del_sta_params(peer_sta_mac, |
| 1036 | eCsrForcedDeauthSta, |
| 1037 | (SIR_MAC_MGMT_DEAUTH >> 4), |
| 1038 | &delStaParams); |
Jeff Johnson | 42fbe2f | 2017-09-24 17:42:11 -0700 | [diff] [blame] | 1039 | wlansap_deauth_sta(sap_ctx, &delStaParams); |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1040 | QDF_TRACE(QDF_MODULE_ID_SAP, |
| 1041 | QDF_TRACE_LEVEL_INFO_LOW, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1042 | "size of accept and deny lists %d %d", |
| 1043 | sap_ctx->nAcceptMac, |
| 1044 | sap_ctx->nDenyMac); |
| 1045 | } else { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1046 | QDF_TRACE(QDF_MODULE_ID_SAP, |
| 1047 | QDF_TRACE_LEVEL_WARN, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1048 | "MAC address to be deleted is not present in the white list " |
| 1049 | MAC_ADDRESS_STR, |
| 1050 | MAC_ADDR_ARRAY(peer_sta_mac)); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1051 | return QDF_STATUS_E_FAILURE; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1052 | } |
| 1053 | } else { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1054 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1055 | "Invalid cmd type passed"); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1056 | return QDF_STATUS_E_FAILURE; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1057 | } |
| 1058 | break; |
| 1059 | |
| 1060 | case eSAP_BLACK_LIST: |
| 1061 | |
| 1062 | if (cmd == ADD_STA_TO_ACL) { |
Jeff Johnson | e6bf719 | 2017-11-07 15:16:09 -0800 | [diff] [blame] | 1063 | struct csr_del_sta_params delStaParams; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1064 | /* error check */ |
| 1065 | /* if list is already at max, return failure */ |
| 1066 | if (sap_ctx->nDenyMac == MAX_ACL_MAC_ADDRESS) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1067 | QDF_TRACE(QDF_MODULE_ID_SAP, |
| 1068 | QDF_TRACE_LEVEL_ERROR, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1069 | "Black list is already maxed out. Cannot accept " |
| 1070 | MAC_ADDRESS_STR, |
| 1071 | MAC_ADDR_ARRAY(peer_sta_mac)); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1072 | return QDF_STATUS_E_FAILURE; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1073 | } |
| 1074 | if (sta_black_list) { |
| 1075 | /* Do nothing if already present in white list */ |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1076 | QDF_TRACE(QDF_MODULE_ID_SAP, |
| 1077 | QDF_TRACE_LEVEL_WARN, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1078 | "MAC address already present in black list " |
| 1079 | MAC_ADDRESS_STR, |
| 1080 | MAC_ADDR_ARRAY(peer_sta_mac)); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1081 | return QDF_STATUS_SUCCESS; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1082 | } |
| 1083 | if (sta_white_list) { |
| 1084 | /* remove it from white list before adding to the black list */ |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1085 | QDF_TRACE(QDF_MODULE_ID_SAP, |
| 1086 | QDF_TRACE_LEVEL_WARN, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1087 | "Present in white list so first remove from it"); |
Jeff Johnson | 42fbe2f | 2017-09-24 17:42:11 -0700 | [diff] [blame] | 1088 | sap_remove_mac_from_acl(sap_ctx->acceptMacList, |
| 1089 | &sap_ctx->nAcceptMac, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1090 | staWLIndex); |
| 1091 | } |
| 1092 | /* If we are adding a client to the black list; if its connected, send deauth */ |
| 1093 | wlansap_populate_del_sta_params(peer_sta_mac, |
| 1094 | eCsrForcedDeauthSta, |
| 1095 | (SIR_MAC_MGMT_DEAUTH >> 4), |
| 1096 | &delStaParams); |
Jeff Johnson | 42fbe2f | 2017-09-24 17:42:11 -0700 | [diff] [blame] | 1097 | wlansap_deauth_sta(sap_ctx, &delStaParams); |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1098 | QDF_TRACE(QDF_MODULE_ID_SAP, |
| 1099 | QDF_TRACE_LEVEL_INFO, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1100 | "... Now add to black list"); |
| 1101 | sap_add_mac_to_acl(sap_ctx->denyMacList, |
| 1102 | &sap_ctx->nDenyMac, peer_sta_mac); |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1103 | QDF_TRACE(QDF_MODULE_ID_SAP, |
| 1104 | QDF_TRACE_LEVEL_INFO_LOW, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1105 | "size of accept and deny lists %d %d", |
| 1106 | sap_ctx->nAcceptMac, |
| 1107 | sap_ctx->nDenyMac); |
| 1108 | } else if (cmd == DELETE_STA_FROM_ACL) { |
| 1109 | if (sta_black_list) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1110 | QDF_TRACE(QDF_MODULE_ID_SAP, |
| 1111 | QDF_TRACE_LEVEL_INFO, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1112 | "Delete from black list"); |
| 1113 | sap_remove_mac_from_acl(sap_ctx->denyMacList, |
| 1114 | &sap_ctx->nDenyMac, |
| 1115 | staBLIndex); |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1116 | QDF_TRACE(QDF_MODULE_ID_SAP, |
| 1117 | QDF_TRACE_LEVEL_INFO_LOW, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1118 | "no accept and deny mac %d %d", |
| 1119 | sap_ctx->nAcceptMac, |
| 1120 | sap_ctx->nDenyMac); |
| 1121 | } else { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1122 | QDF_TRACE(QDF_MODULE_ID_SAP, |
| 1123 | QDF_TRACE_LEVEL_WARN, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1124 | "MAC address to be deleted is not present in the black list " |
| 1125 | MAC_ADDRESS_STR, |
| 1126 | MAC_ADDR_ARRAY(peer_sta_mac)); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1127 | return QDF_STATUS_E_FAILURE; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1128 | } |
| 1129 | } else { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1130 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1131 | "Invalid cmd type passed"); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1132 | return QDF_STATUS_E_FAILURE; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1133 | } |
| 1134 | break; |
| 1135 | |
| 1136 | default: |
| 1137 | { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1138 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1139 | "Invalid list type passed %d", list_type); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1140 | return QDF_STATUS_E_FAILURE; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1141 | } |
| 1142 | } |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1143 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_LOW, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1144 | "After modification of ACL"); |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1145 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1146 | "*** WHITE LIST ***"); |
| 1147 | sap_print_acl(sap_ctx->acceptMacList, sap_ctx->nAcceptMac); |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1148 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1149 | "*** BLACK LIST ***"); |
| 1150 | sap_print_acl(sap_ctx->denyMacList, sap_ctx->nDenyMac); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1151 | return QDF_STATUS_SUCCESS; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1152 | } |
| 1153 | |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 1154 | QDF_STATUS wlansap_disassoc_sta(struct sap_context *sap_ctx, |
Jeff Johnson | e6bf719 | 2017-11-07 15:16:09 -0800 | [diff] [blame] | 1155 | struct csr_del_sta_params *p_del_sta_params) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1156 | { |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 1157 | if (NULL == sap_ctx) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1158 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Jeff Johnson | 92e867c | 2017-09-25 13:58:52 -0700 | [diff] [blame] | 1159 | "%s: Invalid SAP pointer", __func__); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1160 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1161 | } |
| 1162 | |
Jeff Johnson | c0db384 | 2017-09-13 18:34:28 -0700 | [diff] [blame] | 1163 | sme_roam_disconnect_sta(CDS_GET_HAL_CB(), |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 1164 | sap_ctx->sessionId, p_del_sta_params); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1165 | |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1166 | return QDF_STATUS_SUCCESS; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1167 | } |
| 1168 | |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 1169 | QDF_STATUS wlansap_deauth_sta(struct sap_context *sap_ctx, |
Jeff Johnson | e6bf719 | 2017-11-07 15:16:09 -0800 | [diff] [blame] | 1170 | struct csr_del_sta_params *pDelStaParams) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1171 | { |
Anurag Chouhan | f04e84f | 2016-03-03 10:12:12 +0530 | [diff] [blame] | 1172 | QDF_STATUS qdf_ret_status = QDF_STATUS_E_FAILURE; |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1173 | QDF_STATUS qdf_status = QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1174 | |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 1175 | if (NULL == sap_ctx) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1176 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Jeff Johnson | e7ff1d0 | 2017-09-25 14:03:34 -0700 | [diff] [blame] | 1177 | "%s: Invalid SAP pointer", __func__); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1178 | return qdf_status; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1179 | } |
| 1180 | |
Anurag Chouhan | f04e84f | 2016-03-03 10:12:12 +0530 | [diff] [blame] | 1181 | qdf_ret_status = |
Jeff Johnson | c0db384 | 2017-09-13 18:34:28 -0700 | [diff] [blame] | 1182 | sme_roam_deauth_sta(CDS_GET_HAL_CB(), |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 1183 | sap_ctx->sessionId, pDelStaParams); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1184 | |
Anurag Chouhan | f04e84f | 2016-03-03 10:12:12 +0530 | [diff] [blame] | 1185 | if (qdf_ret_status == QDF_STATUS_SUCCESS) { |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1186 | qdf_status = QDF_STATUS_SUCCESS; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1187 | } |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1188 | return qdf_status; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1189 | } |
| 1190 | |
Edhar, Mahesh Kumar | bd8b391 | 2015-11-25 19:28:12 +0530 | [diff] [blame] | 1191 | /** |
Jeff Johnson | c7e4d16 | 2018-05-12 16:20:34 -0700 | [diff] [blame] | 1192 | * wlansap_update_csa_channel_params() - function to populate channel width and |
Edhar, Mahesh Kumar | bd8b391 | 2015-11-25 19:28:12 +0530 | [diff] [blame] | 1193 | * bonding modes. |
| 1194 | * @sap_context: sap adapter context |
| 1195 | * @channel: target channel |
| 1196 | * |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1197 | * Return: The QDF_STATUS code associated with performing the operation |
Edhar, Mahesh Kumar | bd8b391 | 2015-11-25 19:28:12 +0530 | [diff] [blame] | 1198 | */ |
Jeff Johnson | f1cd3c7 | 2017-09-14 07:18:06 -0700 | [diff] [blame] | 1199 | static QDF_STATUS |
| 1200 | wlansap_update_csa_channel_params(struct sap_context *sap_context, |
| 1201 | uint32_t channel) |
Edhar, Mahesh Kumar | bd8b391 | 2015-11-25 19:28:12 +0530 | [diff] [blame] | 1202 | { |
| 1203 | void *hal; |
| 1204 | tpAniSirGlobal mac_ctx; |
Edhar, Mahesh Kumar | bd8b391 | 2015-11-25 19:28:12 +0530 | [diff] [blame] | 1205 | uint8_t bw; |
| 1206 | |
Jeff Johnson | c0db384 | 2017-09-13 18:34:28 -0700 | [diff] [blame] | 1207 | hal = CDS_GET_HAL_CB(); |
Edhar, Mahesh Kumar | bd8b391 | 2015-11-25 19:28:12 +0530 | [diff] [blame] | 1208 | if (!hal) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1209 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Edhar, Mahesh Kumar | bd8b391 | 2015-11-25 19:28:12 +0530 | [diff] [blame] | 1210 | "%s: Invalid hal pointer from p_cds_gctx", __func__); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1211 | return QDF_STATUS_E_FAULT; |
Edhar, Mahesh Kumar | bd8b391 | 2015-11-25 19:28:12 +0530 | [diff] [blame] | 1212 | } |
| 1213 | |
| 1214 | mac_ctx = PMAC_STRUCT(hal); |
| 1215 | |
Amar Singhal | b8d4f15 | 2016-02-10 10:21:43 -0800 | [diff] [blame] | 1216 | if (channel <= CHAN_ENUM_14) { |
Edhar, Mahesh Kumar | bd8b391 | 2015-11-25 19:28:12 +0530 | [diff] [blame] | 1217 | /* |
| 1218 | * currently OBSS scan is done in hostapd, so to avoid |
| 1219 | * SAP coming up in HT40 on channel switch we are |
| 1220 | * disabling channel bonding in 2.4Ghz. |
| 1221 | */ |
Edhar, Mahesh Kumar | bd8b391 | 2015-11-25 19:28:12 +0530 | [diff] [blame] | 1222 | mac_ctx->sap.SapDfsInfo.new_chanWidth = 0; |
| 1223 | |
| 1224 | } else { |
Himanshu Agarwal | f5c5b10 | 2018-05-22 20:13:57 +0530 | [diff] [blame] | 1225 | if (sap_context->csr_roamProfile.phyMode == |
| 1226 | eCSR_DOT11_MODE_11ac || |
| 1227 | sap_context->csr_roamProfile.phyMode == |
| 1228 | eCSR_DOT11_MODE_11ac_ONLY) |
Edhar, Mahesh Kumar | bd8b391 | 2015-11-25 19:28:12 +0530 | [diff] [blame] | 1229 | bw = BW80; |
Edhar, Mahesh Kumar | bd8b391 | 2015-11-25 19:28:12 +0530 | [diff] [blame] | 1230 | else |
Himanshu Agarwal | f5c5b10 | 2018-05-22 20:13:57 +0530 | [diff] [blame] | 1231 | bw = BW40_HIGH_PRIMARY; |
Edhar, Mahesh Kumar | bd8b391 | 2015-11-25 19:28:12 +0530 | [diff] [blame] | 1232 | |
| 1233 | for (; bw >= BW20; bw--) { |
| 1234 | uint16_t op_class; |
| 1235 | |
Kiran Kumar Lokere | a3de226 | 2017-04-12 12:15:04 -0700 | [diff] [blame] | 1236 | op_class = wlan_reg_dmn_get_opclass_from_channel( |
Edhar, Mahesh Kumar | bd8b391 | 2015-11-25 19:28:12 +0530 | [diff] [blame] | 1237 | mac_ctx->scan.countryCodeCurrent, |
| 1238 | channel, bw); |
| 1239 | if (!op_class) |
| 1240 | continue; |
| 1241 | |
| 1242 | if (bw == BW80) { |
Edhar, Mahesh Kumar | bd8b391 | 2015-11-25 19:28:12 +0530 | [diff] [blame] | 1243 | mac_ctx->sap.SapDfsInfo.new_chanWidth = |
| 1244 | CH_WIDTH_80MHZ; |
| 1245 | } else if (bw == BW40_HIGH_PRIMARY) { |
| 1246 | mac_ctx->sap.SapDfsInfo.new_chanWidth = |
| 1247 | CH_WIDTH_40MHZ; |
Edhar, Mahesh Kumar | bd8b391 | 2015-11-25 19:28:12 +0530 | [diff] [blame] | 1248 | } else if (bw == BW40_LOW_PRIMARY) { |
| 1249 | mac_ctx->sap.SapDfsInfo.new_chanWidth = |
| 1250 | CH_WIDTH_40MHZ; |
Edhar, Mahesh Kumar | bd8b391 | 2015-11-25 19:28:12 +0530 | [diff] [blame] | 1251 | } else { |
| 1252 | mac_ctx->sap.SapDfsInfo.new_chanWidth = |
| 1253 | CH_WIDTH_20MHZ; |
Edhar, Mahesh Kumar | bd8b391 | 2015-11-25 19:28:12 +0530 | [diff] [blame] | 1254 | } |
| 1255 | break; |
| 1256 | } |
| 1257 | |
| 1258 | } |
| 1259 | |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1260 | return QDF_STATUS_SUCCESS; |
Edhar, Mahesh Kumar | bd8b391 | 2015-11-25 19:28:12 +0530 | [diff] [blame] | 1261 | } |
| 1262 | |
Chandrasekaran, Manishekar | a74bb02 | 2016-01-12 18:37:43 +0530 | [diff] [blame] | 1263 | /** |
| 1264 | * wlansap_set_channel_change_with_csa() - Set channel change with CSA |
Jeff Johnson | 52a2ce3 | 2017-09-25 14:13:27 -0700 | [diff] [blame] | 1265 | * @sapContext: Pointer to SAP context |
Chandrasekaran, Manishekar | a74bb02 | 2016-01-12 18:37:43 +0530 | [diff] [blame] | 1266 | * @targetChannel: Target channel |
| 1267 | * @target_bw: Target bandwidth |
Min Liu | 2fef579 | 2018-01-19 17:59:42 +0800 | [diff] [blame] | 1268 | * @strict: if true switch to the requested channel always, |
| 1269 | * SCC/MCC check will be ignored, |
| 1270 | * fail otherwise |
Chandrasekaran, Manishekar | a74bb02 | 2016-01-12 18:37:43 +0530 | [diff] [blame] | 1271 | * |
| 1272 | * This api function does a channel change to the target channel specified. |
| 1273 | * CSA IE is included in the beacons before doing a channel change. |
| 1274 | * |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1275 | * Return: QDF_STATUS |
Chandrasekaran, Manishekar | a74bb02 | 2016-01-12 18:37:43 +0530 | [diff] [blame] | 1276 | */ |
Jeff Johnson | 52a2ce3 | 2017-09-25 14:13:27 -0700 | [diff] [blame] | 1277 | QDF_STATUS wlansap_set_channel_change_with_csa(struct sap_context *sapContext, |
| 1278 | uint32_t targetChannel, |
| 1279 | enum phy_ch_width target_bw, |
| 1280 | bool strict) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1281 | { |
| 1282 | |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1283 | tWLAN_SAPEvent sapEvent; |
| 1284 | tpAniSirGlobal pMac = NULL; |
| 1285 | void *hHal = NULL; |
Edhar, Mahesh Kumar | df2ec12 | 2015-11-16 11:33:16 +0530 | [diff] [blame] | 1286 | bool valid; |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1287 | QDF_STATUS status; |
Bala Venkatesh | 5479cf8 | 2018-06-09 20:02:38 +0530 | [diff] [blame] | 1288 | bool sta_sap_scc_on_dfs_chan; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1289 | |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1290 | if (NULL == sapContext) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1291 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Jeff Johnson | 52a2ce3 | 2017-09-25 14:13:27 -0700 | [diff] [blame] | 1292 | "%s: Invalid SAP pointer", __func__); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1293 | |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1294 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1295 | } |
Edhar, Mahesh Kumar | bd8b391 | 2015-11-25 19:28:12 +0530 | [diff] [blame] | 1296 | |
Jeff Johnson | c0db384 | 2017-09-13 18:34:28 -0700 | [diff] [blame] | 1297 | hHal = CDS_GET_HAL_CB(); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1298 | if (NULL == hHal) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1299 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1300 | "%s: Invalid HAL pointer from p_cds_gctx", __func__); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1301 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1302 | } |
| 1303 | pMac = PMAC_STRUCT(hHal); |
| 1304 | |
Tushnim Bhattacharyya | 9a92999 | 2017-06-18 00:59:09 -0700 | [diff] [blame] | 1305 | if (strict && !policy_mgr_is_safe_channel(pMac->psoc, targetChannel)) { |
| 1306 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
| 1307 | "%u is unsafe channel", targetChannel); |
| 1308 | return QDF_STATUS_E_FAULT; |
| 1309 | } |
Manishekar Chandrasekaran | 9e8c7be | 2016-08-03 14:57:14 +0530 | [diff] [blame] | 1310 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO, |
Manishekar Chandrasekaran | 1004ad9 | 2016-09-04 22:01:47 +0530 | [diff] [blame] | 1311 | "%s: sap chan:%d target:%d conn on 5GHz:%d", |
Manishekar Chandrasekaran | 9e8c7be | 2016-08-03 14:57:14 +0530 | [diff] [blame] | 1312 | __func__, sapContext->channel, targetChannel, |
Tushnim Bhattacharyya | 66348bd | 2017-03-09 15:02:10 -0800 | [diff] [blame] | 1313 | policy_mgr_is_any_mode_active_on_band_along_with_session( |
| 1314 | pMac->psoc, sapContext->sessionId, POLICY_MGR_BAND_5)); |
Manishekar Chandrasekaran | 9e8c7be | 2016-08-03 14:57:14 +0530 | [diff] [blame] | 1315 | |
Bala Venkatesh | 5479cf8 | 2018-06-09 20:02:38 +0530 | [diff] [blame] | 1316 | sta_sap_scc_on_dfs_chan = |
| 1317 | policy_mgr_is_sta_sap_scc_allowed_on_dfs_chan(pMac->psoc); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1318 | /* |
| 1319 | * Now, validate if the passed channel is valid in the |
| 1320 | * current regulatory domain. |
| 1321 | */ |
| 1322 | if (sapContext->channel != targetChannel && |
Kiran Kumar Lokere | a3de226 | 2017-04-12 12:15:04 -0700 | [diff] [blame] | 1323 | ((wlan_reg_get_channel_state(pMac->pdev, targetChannel) == |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1324 | CHANNEL_STATE_ENABLE) || |
Kiran Kumar Lokere | a3de226 | 2017-04-12 12:15:04 -0700 | [diff] [blame] | 1325 | (wlan_reg_get_channel_state(pMac->pdev, targetChannel) == |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1326 | CHANNEL_STATE_DFS && |
Bala Venkatesh | 5479cf8 | 2018-06-09 20:02:38 +0530 | [diff] [blame] | 1327 | (!policy_mgr_is_any_mode_active_on_band_along_with_session( |
Tushnim Bhattacharyya | 66348bd | 2017-03-09 15:02:10 -0800 | [diff] [blame] | 1328 | pMac->psoc, sapContext->sessionId, |
Bala Venkatesh | 5479cf8 | 2018-06-09 20:02:38 +0530 | [diff] [blame] | 1329 | POLICY_MGR_BAND_5) || |
| 1330 | sta_sap_scc_on_dfs_chan)))) { |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1331 | /* |
Edhar, Mahesh Kumar | df2ec12 | 2015-11-16 11:33:16 +0530 | [diff] [blame] | 1332 | * validate target channel switch w.r.t various concurrency |
| 1333 | * rules set. |
| 1334 | */ |
Min Liu | 2fef579 | 2018-01-19 17:59:42 +0800 | [diff] [blame] | 1335 | if (!strict) { |
| 1336 | valid = wlan_sap_validate_channel_switch(hHal, |
| 1337 | targetChannel, sapContext); |
| 1338 | if (!valid) { |
| 1339 | QDF_TRACE(QDF_MODULE_ID_SAP, |
| 1340 | QDF_TRACE_LEVEL_ERROR, |
| 1341 | FL("Channel switch to %u is not allowed due to concurrent channel interference"), |
| 1342 | targetChannel); |
| 1343 | return QDF_STATUS_E_FAULT; |
| 1344 | } |
Edhar, Mahesh Kumar | df2ec12 | 2015-11-16 11:33:16 +0530 | [diff] [blame] | 1345 | } |
| 1346 | /* |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1347 | * Post a CSA IE request to SAP state machine with |
| 1348 | * target channel information and also CSA IE required |
Rajeev Kumar Sirasanagandla | 301aacb | 2018-08-07 15:48:18 +0530 | [diff] [blame] | 1349 | * flag set in sapContext only, if SAP is in SAP_STARTED |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1350 | * state. |
| 1351 | */ |
Rajeev Kumar Sirasanagandla | 301aacb | 2018-08-07 15:48:18 +0530 | [diff] [blame] | 1352 | if (sapContext->fsm_state == SAP_STARTED) { |
Edhar, Mahesh Kumar | bd8b391 | 2015-11-25 19:28:12 +0530 | [diff] [blame] | 1353 | status = wlansap_update_csa_channel_params(sapContext, |
| 1354 | targetChannel); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1355 | if (status != QDF_STATUS_SUCCESS) |
Edhar, Mahesh Kumar | bd8b391 | 2015-11-25 19:28:12 +0530 | [diff] [blame] | 1356 | return status; |
Edhar, Mahesh Kumar | df2ec12 | 2015-11-16 11:33:16 +0530 | [diff] [blame] | 1357 | |
| 1358 | /* |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1359 | * Copy the requested target channel |
| 1360 | * to sap context. |
| 1361 | */ |
| 1362 | pMac->sap.SapDfsInfo.target_channel = targetChannel; |
Kiran Kumar Lokere | 999e58c | 2016-01-07 02:18:39 -0800 | [diff] [blame] | 1363 | pMac->sap.SapDfsInfo.new_ch_params.ch_width = |
| 1364 | pMac->sap.SapDfsInfo.new_chanWidth; |
Chandrasekaran, Manishekar | a74bb02 | 2016-01-12 18:37:43 +0530 | [diff] [blame] | 1365 | |
| 1366 | /* By this time, the best bandwidth is calculated for |
| 1367 | * the given target channel. Now, if there was a |
| 1368 | * request from user to move to a selected bandwidth, |
| 1369 | * we can see if it can be honored. |
| 1370 | * |
| 1371 | * Ex1: BW80 was selected for the target channel and |
| 1372 | * user wants BW40, it can be allowed |
| 1373 | * Ex2: BW40 was selected for the target channel and |
| 1374 | * user wants BW80, it cannot be allowed for the given |
| 1375 | * target channel. |
| 1376 | * |
| 1377 | * So, the MIN of the selected channel bandwidth and |
| 1378 | * user input is used for the bandwidth |
| 1379 | */ |
| 1380 | if (target_bw != CH_WIDTH_MAX) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1381 | QDF_TRACE(QDF_MODULE_ID_SAP, |
| 1382 | QDF_TRACE_LEVEL_INFO, |
Chandrasekaran, Manishekar | a74bb02 | 2016-01-12 18:37:43 +0530 | [diff] [blame] | 1383 | "%s: target bw:%d new width:%d", |
| 1384 | __func__, target_bw, |
| 1385 | pMac->sap.SapDfsInfo. |
| 1386 | new_ch_params.ch_width); |
| 1387 | pMac->sap.SapDfsInfo.new_ch_params.ch_width = |
| 1388 | pMac->sap.SapDfsInfo.new_chanWidth = |
Anurag Chouhan | 6d76066 | 2016-02-20 16:05:43 +0530 | [diff] [blame] | 1389 | QDF_MIN(pMac->sap.SapDfsInfo. |
Chandrasekaran, Manishekar | a74bb02 | 2016-01-12 18:37:43 +0530 | [diff] [blame] | 1390 | new_ch_params.ch_width, |
| 1391 | target_bw); |
| 1392 | } |
Kiran Kumar Lokere | a3de226 | 2017-04-12 12:15:04 -0700 | [diff] [blame] | 1393 | wlan_reg_set_channel_params(pMac->pdev, targetChannel, |
Sandeep Puligilla | 1cc23f6 | 2016-04-27 16:52:49 -0700 | [diff] [blame] | 1394 | 0, &pMac->sap.SapDfsInfo.new_ch_params); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1395 | /* |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1396 | * Set the CSA IE required flag. |
| 1397 | */ |
| 1398 | pMac->sap.SapDfsInfo.csaIERequired = true; |
| 1399 | |
| 1400 | /* |
| 1401 | * Set the radar found status to allow the channel |
| 1402 | * change to happen same as in the case of a radar |
| 1403 | * detection. Since, this will allow SAP to be in |
| 1404 | * correct state and also resume the netif queues |
| 1405 | * that were suspended in HDD before the channel |
| 1406 | * request was issued. |
| 1407 | */ |
| 1408 | pMac->sap.SapDfsInfo.sap_radar_found_status = true; |
Edhar, Mahesh Kumar | 695468e | 2015-10-19 12:06:20 +0530 | [diff] [blame] | 1409 | pMac->sap.SapDfsInfo.cac_state = |
| 1410 | eSAP_DFS_DO_NOT_SKIP_CAC; |
| 1411 | sap_cac_reset_notify(hHal); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1412 | |
| 1413 | /* |
Chandrasekaran, Manishekar | 8104abd | 2016-01-29 18:10:27 +0530 | [diff] [blame] | 1414 | * Post the eSAP_CHANNEL_SWITCH_ANNOUNCEMENT_START |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1415 | * to SAP state machine to process the channel |
| 1416 | * request with CSA IE set in the beacons. |
| 1417 | */ |
| 1418 | sapEvent.event = |
Chandrasekaran, Manishekar | 8104abd | 2016-01-29 18:10:27 +0530 | [diff] [blame] | 1419 | eSAP_CHANNEL_SWITCH_ANNOUNCEMENT_START; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1420 | sapEvent.params = 0; |
| 1421 | sapEvent.u1 = 0; |
| 1422 | sapEvent.u2 = 0; |
| 1423 | |
| 1424 | sap_fsm(sapContext, &sapEvent); |
| 1425 | |
| 1426 | } else { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1427 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Rajeev Kumar Sirasanagandla | 301aacb | 2018-08-07 15:48:18 +0530 | [diff] [blame] | 1428 | "%s: Failed to request Channel Change, since SAP is not in SAP_STARTED state", |
| 1429 | __func__); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1430 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1431 | } |
| 1432 | |
| 1433 | } else { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1434 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1435 | "%s: Channel = %d is not valid in the current" |
| 1436 | "regulatory domain", __func__, targetChannel); |
| 1437 | |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1438 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1439 | } |
| 1440 | |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1441 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH, |
Chandrasekaran, Manishekar | 8104abd | 2016-01-29 18:10:27 +0530 | [diff] [blame] | 1442 | "%s: Posted eSAP_CHANNEL_SWITCH_ANNOUNCEMENT_START successfully to sap_fsm for Channel = %d", |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1443 | __func__, targetChannel); |
| 1444 | |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1445 | return QDF_STATUS_SUCCESS; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1446 | } |
| 1447 | |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 1448 | QDF_STATUS wlansap_set_key_sta(struct sap_context *sap_ctx, |
Jeff Johnson | e6b25d9 | 2017-09-25 14:30:32 -0700 | [diff] [blame] | 1449 | tCsrRoamSetKey *pSetKeyInfo) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1450 | { |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1451 | QDF_STATUS qdf_status = QDF_STATUS_SUCCESS; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1452 | void *hHal = NULL; |
Anurag Chouhan | f04e84f | 2016-03-03 10:12:12 +0530 | [diff] [blame] | 1453 | QDF_STATUS qdf_ret_status = QDF_STATUS_E_FAILURE; |
Krunal Soni | bfd0549 | 2017-10-03 15:48:37 -0700 | [diff] [blame] | 1454 | uint32_t roamId = INVALID_ROAM_ID; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1455 | |
Rajeev Kumar Sirasanagandla | 301aacb | 2018-08-07 15:48:18 +0530 | [diff] [blame] | 1456 | if (!sap_ctx) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1457 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Jeff Johnson | e6b25d9 | 2017-09-25 14:30:32 -0700 | [diff] [blame] | 1458 | "%s: Invalid SAP pointer", |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 1459 | __func__); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1460 | return QDF_STATUS_E_FAULT; |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 1461 | } |
Jeff Johnson | c0db384 | 2017-09-13 18:34:28 -0700 | [diff] [blame] | 1462 | hHal = CDS_GET_HAL_CB(); |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 1463 | if (NULL == hHal) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1464 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Jeff Johnson | e6b25d9 | 2017-09-25 14:30:32 -0700 | [diff] [blame] | 1465 | "%s: Invalid HAL pointer", |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 1466 | __func__); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1467 | return QDF_STATUS_E_FAULT; |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 1468 | } |
Anurag Chouhan | f04e84f | 2016-03-03 10:12:12 +0530 | [diff] [blame] | 1469 | qdf_ret_status = |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 1470 | sme_roam_set_key(hHal, sap_ctx->sessionId, pSetKeyInfo, |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 1471 | &roamId); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1472 | |
Anurag Chouhan | f04e84f | 2016-03-03 10:12:12 +0530 | [diff] [blame] | 1473 | if (qdf_ret_status == QDF_STATUS_SUCCESS) |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1474 | qdf_status = QDF_STATUS_SUCCESS; |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 1475 | else |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1476 | qdf_status = QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1477 | |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1478 | return qdf_status; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1479 | } |
| 1480 | |
Jeff Johnson | 617fe64 | 2017-09-24 17:52:51 -0700 | [diff] [blame] | 1481 | QDF_STATUS wlan_sap_getstation_ie_information(struct sap_context *sap_ctx, |
| 1482 | uint32_t *len, uint8_t *buf) |
| 1483 | { |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1484 | QDF_STATUS qdf_status = QDF_STATUS_E_FAILURE; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1485 | uint32_t ie_len = 0; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1486 | |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1487 | if (NULL == sap_ctx) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1488 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Jeff Johnson | 617fe64 | 2017-09-24 17:52:51 -0700 | [diff] [blame] | 1489 | FL("Invalid SAP pointer")); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1490 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1491 | } |
| 1492 | |
| 1493 | if (len) { |
| 1494 | ie_len = *len; |
| 1495 | *len = sap_ctx->nStaWPARSnReqIeLength; |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1496 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1497 | FL("WPAIE len : %x"), *len); |
| 1498 | if ((buf) && (ie_len >= sap_ctx->nStaWPARSnReqIeLength)) { |
Anurag Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 1499 | qdf_mem_copy(buf, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1500 | sap_ctx->pStaWpaRsnReqIE, |
| 1501 | sap_ctx->nStaWPARSnReqIeLength); |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1502 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1503 | FL("WPAIE: %02x:%02x:%02x:%02x:%02x:%02x"), |
| 1504 | buf[0], buf[1], buf[2], buf[3], buf[4], |
| 1505 | buf[5]); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1506 | qdf_status = QDF_STATUS_SUCCESS; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1507 | } |
| 1508 | } |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1509 | return qdf_status; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1510 | } |
| 1511 | |
Jeff Johnson | cd1ee1e | 2017-09-25 14:50:49 -0700 | [diff] [blame] | 1512 | QDF_STATUS wlan_sap_update_next_channel(struct sap_context *sap_ctx, |
| 1513 | uint8_t channel, |
| 1514 | enum phy_ch_width chan_bw) |
Kapil Gupta | 8878ad9 | 2017-02-13 11:56:04 +0530 | [diff] [blame] | 1515 | { |
Kapil Gupta | 8878ad9 | 2017-02-13 11:56:04 +0530 | [diff] [blame] | 1516 | if (!sap_ctx) { |
| 1517 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
| 1518 | "%s: Invalid SAP pointer", __func__); |
| 1519 | return QDF_STATUS_E_FAULT; |
| 1520 | } |
| 1521 | |
| 1522 | sap_ctx->dfs_vendor_channel = channel; |
| 1523 | sap_ctx->dfs_vendor_chan_bw = chan_bw; |
| 1524 | |
| 1525 | return QDF_STATUS_SUCCESS; |
| 1526 | } |
| 1527 | |
Qiwei Cai | e689a26 | 2018-07-26 15:50:22 +0800 | [diff] [blame^] | 1528 | #ifdef FEATURE_SAP_COND_CHAN_SWITCH |
Jeff Johnson | 108566e | 2017-09-25 14:54:35 -0700 | [diff] [blame] | 1529 | QDF_STATUS wlan_sap_set_pre_cac_status(struct sap_context *sap_ctx, |
| 1530 | bool status, tHalHandle handle) |
Manishekar Chandrasekaran | 9e8c7be | 2016-08-03 14:57:14 +0530 | [diff] [blame] | 1531 | { |
Manishekar Chandrasekaran | 9e8c7be | 2016-08-03 14:57:14 +0530 | [diff] [blame] | 1532 | tpAniSirGlobal mac_ctx = PMAC_STRUCT(handle); |
| 1533 | |
| 1534 | if (!mac_ctx) { |
| 1535 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
| 1536 | "%s: Invalid mac pointer", __func__); |
| 1537 | return QDF_STATUS_E_FAULT; |
| 1538 | } |
| 1539 | |
| 1540 | if (!sap_ctx) { |
| 1541 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
| 1542 | "%s: Invalid SAP pointer", __func__); |
| 1543 | return QDF_STATUS_E_FAULT; |
| 1544 | } |
| 1545 | |
| 1546 | sap_ctx->is_pre_cac_on = status; |
| 1547 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_DEBUG, |
| 1548 | "%s: is_pre_cac_on:%d", __func__, sap_ctx->is_pre_cac_on); |
| 1549 | |
| 1550 | return QDF_STATUS_SUCCESS; |
| 1551 | } |
| 1552 | |
Jeff Johnson | 2cdcfdc | 2017-09-25 15:00:22 -0700 | [diff] [blame] | 1553 | QDF_STATUS wlan_sap_set_chan_before_pre_cac(struct sap_context *sap_ctx, |
| 1554 | uint8_t chan_before_pre_cac) |
Manishekar Chandrasekaran | 9e8c7be | 2016-08-03 14:57:14 +0530 | [diff] [blame] | 1555 | { |
Manishekar Chandrasekaran | 9e8c7be | 2016-08-03 14:57:14 +0530 | [diff] [blame] | 1556 | if (!sap_ctx) { |
| 1557 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
| 1558 | "%s: Invalid SAP pointer", __func__); |
| 1559 | return QDF_STATUS_E_FAULT; |
| 1560 | } |
| 1561 | |
| 1562 | sap_ctx->chan_before_pre_cac = chan_before_pre_cac; |
| 1563 | return QDF_STATUS_SUCCESS; |
| 1564 | } |
Qiwei Cai | e689a26 | 2018-07-26 15:50:22 +0800 | [diff] [blame^] | 1565 | #endif /* FEATURE_SAP_COND_CHAN_SWITCH */ |
Manishekar Chandrasekaran | 9e8c7be | 2016-08-03 14:57:14 +0530 | [diff] [blame] | 1566 | |
Jeff Johnson | a68cc53 | 2017-09-25 15:18:30 -0700 | [diff] [blame] | 1567 | QDF_STATUS wlan_sap_set_pre_cac_complete_status(struct sap_context *sap_ctx, |
| 1568 | bool status) |
Manishekar Chandrasekaran | 9e8c7be | 2016-08-03 14:57:14 +0530 | [diff] [blame] | 1569 | { |
Manishekar Chandrasekaran | 9e8c7be | 2016-08-03 14:57:14 +0530 | [diff] [blame] | 1570 | if (!sap_ctx) { |
| 1571 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
| 1572 | "%s: Invalid SAP pointer", __func__); |
| 1573 | return QDF_STATUS_E_FAULT; |
| 1574 | } |
| 1575 | |
| 1576 | sap_ctx->pre_cac_complete = status; |
| 1577 | |
| 1578 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_DEBUG, |
| 1579 | "%s: pre cac complete status:%d session:%d", |
| 1580 | __func__, status, sap_ctx->sessionId); |
| 1581 | |
| 1582 | return QDF_STATUS_SUCCESS; |
| 1583 | } |
| 1584 | |
| 1585 | /** |
| 1586 | * wlan_sap_is_pre_cac_active() - Checks if pre cac in in progress |
| 1587 | * @handle: Global MAC handle |
| 1588 | * |
| 1589 | * Checks if pre cac is in progress in any of the SAP contexts |
| 1590 | * |
| 1591 | * Return: True is pre cac is active, false otherwise |
| 1592 | */ |
| 1593 | bool wlan_sap_is_pre_cac_active(tHalHandle handle) |
| 1594 | { |
| 1595 | tpAniSirGlobal mac = NULL; |
| 1596 | int i; |
| 1597 | |
| 1598 | mac = PMAC_STRUCT(handle); |
| 1599 | if (!mac) { |
| 1600 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH, |
| 1601 | "%s: Invalid mac context", __func__); |
| 1602 | return false; |
| 1603 | } |
| 1604 | |
| 1605 | for (i = 0; i < SAP_MAX_NUM_SESSION; i++) { |
Jeff Johnson | f1cd3c7 | 2017-09-14 07:18:06 -0700 | [diff] [blame] | 1606 | struct sap_context *context = |
Zhu Jianmin | c147a54 | 2018-05-21 13:15:40 +0800 | [diff] [blame] | 1607 | mac->sap.sapCtxList[i].sap_context; |
Manishekar Chandrasekaran | 9e8c7be | 2016-08-03 14:57:14 +0530 | [diff] [blame] | 1608 | if (context && context->is_pre_cac_on) |
| 1609 | return true; |
| 1610 | } |
| 1611 | return false; |
| 1612 | } |
| 1613 | |
| 1614 | /** |
| 1615 | * wlan_sap_get_pre_cac_vdev_id() - Get vdev id of the pre cac interface |
| 1616 | * @handle: Global handle |
| 1617 | * @vdev_id: vdev id |
| 1618 | * |
| 1619 | * Fetches the vdev id of the pre cac interface |
| 1620 | * |
| 1621 | * Return: QDF_STATUS |
| 1622 | */ |
| 1623 | QDF_STATUS wlan_sap_get_pre_cac_vdev_id(tHalHandle handle, uint8_t *vdev_id) |
| 1624 | { |
| 1625 | tpAniSirGlobal mac = NULL; |
| 1626 | uint8_t i; |
| 1627 | |
| 1628 | mac = PMAC_STRUCT(handle); |
| 1629 | if (!mac) { |
| 1630 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH, |
| 1631 | "%s: Invalid mac context", __func__); |
| 1632 | return QDF_STATUS_E_FAULT; |
| 1633 | } |
| 1634 | |
| 1635 | for (i = 0; i < SAP_MAX_NUM_SESSION; i++) { |
Jeff Johnson | f1cd3c7 | 2017-09-14 07:18:06 -0700 | [diff] [blame] | 1636 | struct sap_context *context = |
Zhu Jianmin | c147a54 | 2018-05-21 13:15:40 +0800 | [diff] [blame] | 1637 | mac->sap.sapCtxList[i].sap_context; |
Manishekar Chandrasekaran | 9e8c7be | 2016-08-03 14:57:14 +0530 | [diff] [blame] | 1638 | if (context && context->is_pre_cac_on) { |
| 1639 | *vdev_id = i; |
| 1640 | return QDF_STATUS_SUCCESS; |
| 1641 | } |
| 1642 | } |
| 1643 | return QDF_STATUS_E_FAILURE; |
| 1644 | } |
| 1645 | |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 1646 | QDF_STATUS wlansap_register_mgmt_frame(struct sap_context *sap_ctx, |
Jeff Johnson | 4a7ff43 | 2017-09-24 18:10:00 -0700 | [diff] [blame] | 1647 | uint16_t frameType, |
| 1648 | uint8_t *matchData, |
| 1649 | uint16_t matchLen) |
| 1650 | { |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1651 | void *hHal = NULL; |
Anurag Chouhan | f04e84f | 2016-03-03 10:12:12 +0530 | [diff] [blame] | 1652 | QDF_STATUS qdf_ret_status = QDF_STATUS_E_FAILURE; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1653 | |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 1654 | if (NULL == sap_ctx) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1655 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 1656 | "%s: Invalid SAP pointer from pCtx", |
| 1657 | __func__); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1658 | return QDF_STATUS_E_FAULT; |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 1659 | } |
Jeff Johnson | c0db384 | 2017-09-13 18:34:28 -0700 | [diff] [blame] | 1660 | hHal = CDS_GET_HAL_CB(); |
Krunal Soni | 074dd2c | 2017-04-14 14:57:34 -0700 | [diff] [blame] | 1661 | if (NULL == hHal) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1662 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Krunal Soni | 074dd2c | 2017-04-14 14:57:34 -0700 | [diff] [blame] | 1663 | FL("hal pointer null")); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1664 | return QDF_STATUS_E_FAULT; |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 1665 | } |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1666 | |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 1667 | qdf_ret_status = sme_register_mgmt_frame(hHal, sap_ctx->sessionId, |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 1668 | frameType, matchData, |
| 1669 | matchLen); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1670 | |
Anurag Chouhan | f04e84f | 2016-03-03 10:12:12 +0530 | [diff] [blame] | 1671 | if (QDF_STATUS_SUCCESS == qdf_ret_status) { |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1672 | return QDF_STATUS_SUCCESS; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1673 | } |
| 1674 | |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1675 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1676 | "Failed to Register MGMT frame"); |
| 1677 | |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1678 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1679 | } |
| 1680 | |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 1681 | QDF_STATUS wlansap_de_register_mgmt_frame(struct sap_context *sap_ctx, |
Jeff Johnson | 42e7c40 | 2017-09-24 18:18:10 -0700 | [diff] [blame] | 1682 | uint16_t frameType, |
| 1683 | uint8_t *matchData, |
| 1684 | uint16_t matchLen) |
| 1685 | { |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1686 | void *hHal = NULL; |
Anurag Chouhan | f04e84f | 2016-03-03 10:12:12 +0530 | [diff] [blame] | 1687 | QDF_STATUS qdf_ret_status = QDF_STATUS_E_FAILURE; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1688 | |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 1689 | if (NULL == sap_ctx) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1690 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 1691 | "%s: Invalid SAP pointer from pCtx", |
| 1692 | __func__); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1693 | return QDF_STATUS_E_FAULT; |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 1694 | } |
Jeff Johnson | c0db384 | 2017-09-13 18:34:28 -0700 | [diff] [blame] | 1695 | hHal = CDS_GET_HAL_CB(); |
Krunal Soni | 074dd2c | 2017-04-14 14:57:34 -0700 | [diff] [blame] | 1696 | if (NULL == hHal) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1697 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Krunal Soni | 074dd2c | 2017-04-14 14:57:34 -0700 | [diff] [blame] | 1698 | FL("hal pointer null")); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1699 | return QDF_STATUS_E_FAULT; |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 1700 | } |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1701 | |
Anurag Chouhan | f04e84f | 2016-03-03 10:12:12 +0530 | [diff] [blame] | 1702 | qdf_ret_status = |
Jeff Johnson | e13d806 | 2017-09-28 06:54:55 -0700 | [diff] [blame] | 1703 | sme_deregister_mgmt_frame(hHal, sap_ctx->sessionId, frameType, |
Peng Xu | f5d60c8 | 2015-10-02 17:17:03 -0700 | [diff] [blame] | 1704 | matchData, matchLen); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1705 | |
Anurag Chouhan | f04e84f | 2016-03-03 10:12:12 +0530 | [diff] [blame] | 1706 | if (QDF_STATUS_SUCCESS == qdf_ret_status) { |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1707 | return QDF_STATUS_SUCCESS; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1708 | } |
| 1709 | |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1710 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1711 | "Failed to Deregister MGMT frame"); |
| 1712 | |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1713 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1714 | } |
| 1715 | |
Jeff Johnson | 164b3bb | 2017-09-25 19:34:14 -0700 | [diff] [blame] | 1716 | QDF_STATUS wlansap_channel_change_request(struct sap_context *sapContext, |
| 1717 | uint8_t target_channel) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1718 | { |
Anurag Chouhan | f04e84f | 2016-03-03 10:12:12 +0530 | [diff] [blame] | 1719 | QDF_STATUS qdf_ret_status = QDF_STATUS_E_FAILURE; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1720 | void *hHal = NULL; |
| 1721 | tpAniSirGlobal mac_ctx = NULL; |
| 1722 | eCsrPhyMode phy_mode; |
Amar Singhal | 5cccafe | 2017-02-15 12:42:58 -0800 | [diff] [blame] | 1723 | struct ch_params *ch_params; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1724 | |
Naveen Rawat | b4ea70f | 2018-03-23 17:10:01 -0700 | [diff] [blame] | 1725 | if (!target_channel) { |
| 1726 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
| 1727 | "%s: channel 0 requested", __func__); |
| 1728 | return QDF_STATUS_E_FAULT; |
| 1729 | } |
| 1730 | |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1731 | if (NULL == sapContext) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1732 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1733 | "%s: Invalid SAP pointer", __func__); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1734 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1735 | } |
| 1736 | |
Jeff Johnson | c0db384 | 2017-09-13 18:34:28 -0700 | [diff] [blame] | 1737 | hHal = CDS_GET_HAL_CB(); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1738 | if (NULL == hHal) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1739 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1740 | "%s: Invalid HAL pointer from p_cds_gctx", __func__); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1741 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1742 | } |
| 1743 | mac_ctx = PMAC_STRUCT(hHal); |
| 1744 | phy_mode = sapContext->csr_roamProfile.phyMode; |
Wu Gao | a61310a | 2016-11-29 17:02:36 +0800 | [diff] [blame] | 1745 | |
Vignesh Viswanathan | 694bec3 | 2018-07-11 14:37:39 +0530 | [diff] [blame] | 1746 | /* Update phy_mode if the target channel is in the other band */ |
| 1747 | if (WLAN_CHAN_IS_5GHZ(target_channel) && |
| 1748 | ((phy_mode == eCSR_DOT11_MODE_11g) || |
| 1749 | (phy_mode == eCSR_DOT11_MODE_11g_ONLY))) |
| 1750 | phy_mode = eCSR_DOT11_MODE_11a; |
| 1751 | else if (WLAN_CHAN_IS_2GHZ(target_channel) && |
| 1752 | (phy_mode == eCSR_DOT11_MODE_11a)) |
| 1753 | phy_mode = eCSR_DOT11_MODE_11g; |
| 1754 | |
| 1755 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_DEBUG, |
| 1756 | "%s: phy_mode: %d, target_channel: %d new phy_mode: %d", |
| 1757 | __func__, sapContext->csr_roamProfile.phyMode, |
| 1758 | target_channel, phy_mode); |
| 1759 | sapContext->csr_roamProfile.phyMode = phy_mode; |
| 1760 | |
Wu Gao | a61310a | 2016-11-29 17:02:36 +0800 | [diff] [blame] | 1761 | if (sapContext->csr_roamProfile.ChannelInfo.numOfChannels == 0 || |
| 1762 | sapContext->csr_roamProfile.ChannelInfo.ChannelList == NULL) { |
| 1763 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
| 1764 | FL("Invalid channel list")); |
| 1765 | return QDF_STATUS_E_FAULT; |
| 1766 | } |
Abhishek Singh | 518323d | 2015-10-19 17:42:01 +0530 | [diff] [blame] | 1767 | sapContext->csr_roamProfile.ChannelInfo.ChannelList[0] = target_channel; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1768 | /* |
| 1769 | * We are getting channel bonding mode from sapDfsInfor structure |
| 1770 | * because we've implemented channel width fallback mechanism for DFS |
| 1771 | * which will result in channel width changing dynamically. |
| 1772 | */ |
Sandeep Puligilla | 2111d3c | 2016-02-03 01:46:15 -0800 | [diff] [blame] | 1773 | ch_params = &mac_ctx->sap.SapDfsInfo.new_ch_params; |
Kiran Kumar Lokere | a3de226 | 2017-04-12 12:15:04 -0700 | [diff] [blame] | 1774 | wlan_reg_set_channel_params(mac_ctx->pdev, target_channel, |
| 1775 | 0, ch_params); |
Sandeep Puligilla | 2111d3c | 2016-02-03 01:46:15 -0800 | [diff] [blame] | 1776 | sapContext->ch_params.ch_width = ch_params->ch_width; |
Abhishek Singh | 518323d | 2015-10-19 17:42:01 +0530 | [diff] [blame] | 1777 | /* Update the channel as this will be used to |
| 1778 | * send event to supplicant |
| 1779 | */ |
| 1780 | sapContext->channel = target_channel; |
Sandeep Puligilla | 2111d3c | 2016-02-03 01:46:15 -0800 | [diff] [blame] | 1781 | sapContext->csr_roamProfile.ch_params.ch_width = ch_params->ch_width; |
Manishekar Chandrasekaran | ec26759 | 2016-05-26 19:10:04 +0530 | [diff] [blame] | 1782 | sapContext->csr_roamProfile.ch_params.sec_ch_offset = |
| 1783 | ch_params->sec_ch_offset; |
| 1784 | sapContext->csr_roamProfile.ch_params.center_freq_seg0 = |
| 1785 | ch_params->center_freq_seg0; |
| 1786 | sapContext->csr_roamProfile.ch_params.center_freq_seg1 = |
| 1787 | ch_params->center_freq_seg1; |
Arif Hussain | cd15163 | 2017-02-11 16:57:19 -0800 | [diff] [blame] | 1788 | sap_dfs_set_current_channel(sapContext); |
Manishekar Chandrasekaran | ec26759 | 2016-05-26 19:10:04 +0530 | [diff] [blame] | 1789 | |
Anurag Chouhan | f04e84f | 2016-03-03 10:12:12 +0530 | [diff] [blame] | 1790 | qdf_ret_status = sme_roam_channel_change_req(hHal, sapContext->bssid, |
Sandeep Puligilla | 2111d3c | 2016-02-03 01:46:15 -0800 | [diff] [blame] | 1791 | ch_params, &sapContext->csr_roamProfile); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1792 | |
Manishekar Chandrasekaran | ec26759 | 2016-05-26 19:10:04 +0530 | [diff] [blame] | 1793 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO, |
Vignesh Viswanathan | 694bec3 | 2018-07-11 14:37:39 +0530 | [diff] [blame] | 1794 | "%s: chan:%d phy_mode %d width:%d offset:%d seg0:%d seg1:%d", |
| 1795 | __func__, sapContext->channel, phy_mode, ch_params->ch_width, |
Manishekar Chandrasekaran | ec26759 | 2016-05-26 19:10:04 +0530 | [diff] [blame] | 1796 | ch_params->sec_ch_offset, ch_params->center_freq_seg0, |
| 1797 | ch_params->center_freq_seg1); |
| 1798 | |
Anurag Chouhan | f04e84f | 2016-03-03 10:12:12 +0530 | [diff] [blame] | 1799 | if (qdf_ret_status == QDF_STATUS_SUCCESS) { |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1800 | sap_signal_hdd_event(sapContext, NULL, |
| 1801 | eSAP_CHANNEL_CHANGE_EVENT, |
| 1802 | (void *) eSAP_STATUS_SUCCESS); |
| 1803 | |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1804 | return QDF_STATUS_SUCCESS; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1805 | } |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1806 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1807 | } |
| 1808 | |
Jeff Johnson | 3abdd24 | 2017-09-25 19:21:33 -0700 | [diff] [blame] | 1809 | QDF_STATUS wlansap_start_beacon_req(struct sap_context *sap_ctx) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1810 | { |
Anurag Chouhan | f04e84f | 2016-03-03 10:12:12 +0530 | [diff] [blame] | 1811 | QDF_STATUS qdf_ret_status = QDF_STATUS_E_FAILURE; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1812 | void *hHal = NULL; |
| 1813 | uint8_t dfsCacWaitStatus = 0; |
| 1814 | tpAniSirGlobal pMac = NULL; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1815 | |
Jeff Johnson | 3abdd24 | 2017-09-25 19:21:33 -0700 | [diff] [blame] | 1816 | if (NULL == sap_ctx) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1817 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1818 | "%s: Invalid SAP pointer", __func__); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1819 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1820 | } |
| 1821 | |
Jeff Johnson | c0db384 | 2017-09-13 18:34:28 -0700 | [diff] [blame] | 1822 | hHal = CDS_GET_HAL_CB(); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1823 | if (NULL == hHal) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1824 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Jeff Johnson | 3abdd24 | 2017-09-25 19:21:33 -0700 | [diff] [blame] | 1825 | "%s: Invalid HAL pointer", __func__); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1826 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1827 | } |
| 1828 | pMac = PMAC_STRUCT(hHal); |
| 1829 | |
| 1830 | /* No Radar was found during CAC WAIT, So start Beaconing */ |
| 1831 | if (pMac->sap.SapDfsInfo.sap_radar_found_status == false) { |
| 1832 | /* CAC Wait done without any Radar Detection */ |
| 1833 | dfsCacWaitStatus = true; |
Jeff Johnson | 3abdd24 | 2017-09-25 19:21:33 -0700 | [diff] [blame] | 1834 | sap_ctx->pre_cac_complete = false; |
Anurag Chouhan | f04e84f | 2016-03-03 10:12:12 +0530 | [diff] [blame] | 1835 | qdf_ret_status = sme_roam_start_beacon_req(hHal, |
Jeff Johnson | 3abdd24 | 2017-09-25 19:21:33 -0700 | [diff] [blame] | 1836 | sap_ctx->bssid, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1837 | dfsCacWaitStatus); |
Anurag Chouhan | f04e84f | 2016-03-03 10:12:12 +0530 | [diff] [blame] | 1838 | if (qdf_ret_status == QDF_STATUS_SUCCESS) { |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1839 | return QDF_STATUS_SUCCESS; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1840 | } |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1841 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1842 | } |
| 1843 | |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1844 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1845 | } |
| 1846 | |
Jeff Johnson | bfeafc6 | 2017-09-25 18:50:01 -0700 | [diff] [blame] | 1847 | QDF_STATUS wlansap_dfs_send_csa_ie_request(struct sap_context *sap_ctx) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1848 | { |
Anurag Chouhan | f04e84f | 2016-03-03 10:12:12 +0530 | [diff] [blame] | 1849 | QDF_STATUS qdf_ret_status = QDF_STATUS_E_FAILURE; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1850 | void *hHal = NULL; |
| 1851 | tpAniSirGlobal pMac = NULL; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1852 | |
Jeff Johnson | bfeafc6 | 2017-09-25 18:50:01 -0700 | [diff] [blame] | 1853 | if (NULL == sap_ctx) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1854 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1855 | "%s: Invalid SAP pointer", __func__); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1856 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1857 | } |
| 1858 | |
Jeff Johnson | c0db384 | 2017-09-13 18:34:28 -0700 | [diff] [blame] | 1859 | hHal = CDS_GET_HAL_CB(); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1860 | if (NULL == hHal) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1861 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Jeff Johnson | bfeafc6 | 2017-09-25 18:50:01 -0700 | [diff] [blame] | 1862 | "%s: Invalid HAL pointer", __func__); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1863 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1864 | } |
| 1865 | pMac = PMAC_STRUCT(hHal); |
| 1866 | |
Sandeep Puligilla | 2111d3c | 2016-02-03 01:46:15 -0800 | [diff] [blame] | 1867 | pMac->sap.SapDfsInfo.new_ch_params.ch_width = |
| 1868 | pMac->sap.SapDfsInfo.new_chanWidth; |
Kiran Kumar Lokere | a3de226 | 2017-04-12 12:15:04 -0700 | [diff] [blame] | 1869 | wlan_reg_set_channel_params(pMac->pdev, |
| 1870 | pMac->sap.SapDfsInfo.target_channel, |
| 1871 | 0, &pMac->sap.SapDfsInfo.new_ch_params); |
Sandeep Puligilla | 2111d3c | 2016-02-03 01:46:15 -0800 | [diff] [blame] | 1872 | |
Chandrasekaran Manishekar | 4fcb7f5 | 2016-03-07 19:09:20 +0530 | [diff] [blame] | 1873 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO, |
| 1874 | "%s: chan:%d req:%d width:%d off:%d", |
| 1875 | __func__, pMac->sap.SapDfsInfo.target_channel, |
| 1876 | pMac->sap.SapDfsInfo.csaIERequired, |
| 1877 | pMac->sap.SapDfsInfo.new_ch_params.ch_width, |
| 1878 | pMac->sap.SapDfsInfo.new_ch_params.sec_ch_offset); |
| 1879 | |
Anurag Chouhan | f04e84f | 2016-03-03 10:12:12 +0530 | [diff] [blame] | 1880 | qdf_ret_status = sme_roam_csa_ie_request(hHal, |
Jeff Johnson | bfeafc6 | 2017-09-25 18:50:01 -0700 | [diff] [blame] | 1881 | sap_ctx->bssid, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1882 | pMac->sap.SapDfsInfo.target_channel, |
| 1883 | pMac->sap.SapDfsInfo.csaIERequired, |
Kiran Kumar Lokere | 999e58c | 2016-01-07 02:18:39 -0800 | [diff] [blame] | 1884 | &pMac->sap.SapDfsInfo.new_ch_params); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1885 | |
Anurag Chouhan | f04e84f | 2016-03-03 10:12:12 +0530 | [diff] [blame] | 1886 | if (qdf_ret_status == QDF_STATUS_SUCCESS) { |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1887 | return QDF_STATUS_SUCCESS; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1888 | } |
| 1889 | |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1890 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1891 | } |
| 1892 | |
| 1893 | /*========================================================================== |
| 1894 | FUNCTION wlansap_get_dfs_ignore_cac |
| 1895 | |
| 1896 | DESCRIPTION |
| 1897 | This API is used to get the value of ignore_cac value |
| 1898 | |
| 1899 | DEPENDENCIES |
| 1900 | NA. |
| 1901 | |
| 1902 | PARAMETERS |
| 1903 | IN |
| 1904 | hHal : HAL pointer |
| 1905 | pIgnore_cac : pointer to ignore_cac variable |
| 1906 | |
| 1907 | RETURN VALUE |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1908 | The QDF_STATUS code associated with performing the operation |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1909 | |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1910 | QDF_STATUS_SUCCESS: Success |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1911 | |
| 1912 | SIDE EFFECTS |
| 1913 | ============================================================================*/ |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1914 | QDF_STATUS wlansap_get_dfs_ignore_cac(tHalHandle hHal, uint8_t *pIgnore_cac) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1915 | { |
| 1916 | tpAniSirGlobal pMac = NULL; |
| 1917 | |
| 1918 | if (NULL != hHal) { |
| 1919 | pMac = PMAC_STRUCT(hHal); |
| 1920 | } else { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1921 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1922 | "%s: Invalid hHal pointer", __func__); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1923 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1924 | } |
| 1925 | |
| 1926 | *pIgnore_cac = pMac->sap.SapDfsInfo.ignore_cac; |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1927 | return QDF_STATUS_SUCCESS; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1928 | } |
| 1929 | |
| 1930 | /*========================================================================== |
| 1931 | FUNCTION wlansap_set_dfs_ignore_cac |
| 1932 | |
| 1933 | DESCRIPTION |
| 1934 | This API is used to Set the value of ignore_cac value |
| 1935 | |
| 1936 | DEPENDENCIES |
| 1937 | NA. |
| 1938 | |
| 1939 | PARAMETERS |
| 1940 | IN |
| 1941 | hHal : HAL pointer |
| 1942 | ignore_cac : value to set for ignore_cac variable in DFS global structure. |
| 1943 | |
| 1944 | RETURN VALUE |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1945 | The QDF_STATUS code associated with performing the operation |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1946 | |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1947 | QDF_STATUS_SUCCESS: Success |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1948 | |
| 1949 | SIDE EFFECTS |
| 1950 | ============================================================================*/ |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1951 | QDF_STATUS wlansap_set_dfs_ignore_cac(tHalHandle hHal, uint8_t ignore_cac) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1952 | { |
| 1953 | tpAniSirGlobal pMac = NULL; |
| 1954 | |
| 1955 | if (NULL != hHal) { |
| 1956 | pMac = PMAC_STRUCT(hHal); |
| 1957 | } else { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1958 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1959 | "%s: Invalid hHal pointer", __func__); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1960 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1961 | } |
| 1962 | |
| 1963 | pMac->sap.SapDfsInfo.ignore_cac = (ignore_cac >= true) ? |
| 1964 | true : false; |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1965 | return QDF_STATUS_SUCCESS; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1966 | } |
| 1967 | |
| 1968 | /** |
| 1969 | * wlansap_set_dfs_restrict_japan_w53() - enable/disable dfS for japan |
| 1970 | * @hHal : HAL pointer |
| 1971 | * @disable_Dfs_JapanW3 :Indicates if Japan W53 is disabled when set to 1 |
| 1972 | * Indicates if Japan W53 is enabled when set to 0 |
| 1973 | * |
| 1974 | * This API is used to enable or disable Japan W53 Band |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1975 | * Return: The QDF_STATUS code associated with performing the operation |
| 1976 | * QDF_STATUS_SUCCESS: Success |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1977 | */ |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1978 | QDF_STATUS |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1979 | wlansap_set_dfs_restrict_japan_w53(tHalHandle hHal, uint8_t disable_Dfs_W53) |
| 1980 | { |
| 1981 | tpAniSirGlobal pMac = NULL; |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1982 | QDF_STATUS status; |
Amar Singhal | 5cccafe | 2017-02-15 12:42:58 -0800 | [diff] [blame] | 1983 | enum dfs_reg dfs_region; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1984 | |
| 1985 | if (NULL != hHal) { |
| 1986 | pMac = PMAC_STRUCT(hHal); |
| 1987 | } else { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 1988 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1989 | "%s: Invalid hHal pointer", __func__); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 1990 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1991 | } |
| 1992 | |
Amar Singhal | 7f55e34 | 2017-05-24 15:23:06 -0700 | [diff] [blame] | 1993 | wlan_reg_get_dfs_region(pMac->pdev, &dfs_region); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 1994 | |
| 1995 | /* |
| 1996 | * Set the JAPAN W53 restriction only if the current |
| 1997 | * regulatory domain is JAPAN. |
| 1998 | */ |
Amar Singhal | 5cccafe | 2017-02-15 12:42:58 -0800 | [diff] [blame] | 1999 | if (DFS_MKK_REG == dfs_region) { |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2000 | pMac->sap.SapDfsInfo.is_dfs_w53_disabled = disable_Dfs_W53; |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 2001 | QDF_TRACE(QDF_MODULE_ID_SAP, |
| 2002 | QDF_TRACE_LEVEL_INFO_LOW, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2003 | FL("sapdfs: SET DFS JAPAN W53 DISABLED = %d"), |
| 2004 | pMac->sap.SapDfsInfo.is_dfs_w53_disabled); |
| 2005 | |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 2006 | status = QDF_STATUS_SUCCESS; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2007 | } else { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 2008 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2009 | FL |
Srinivas Girigowda | 678586c | 2017-03-10 00:13:58 -0800 | [diff] [blame] | 2010 | ("Regdomain not japan, set disable JP W53 not valid")); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2011 | |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 2012 | status = QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2013 | } |
| 2014 | |
| 2015 | return status; |
| 2016 | } |
| 2017 | |
Jeff Johnson | bc110a7 | 2017-09-25 15:22:18 -0700 | [diff] [blame] | 2018 | bool sap_is_auto_channel_select(struct sap_context *sapcontext) |
bings | 394afdd | 2017-01-09 11:22:38 +0800 | [diff] [blame] | 2019 | { |
bings | 394afdd | 2017-01-09 11:22:38 +0800 | [diff] [blame] | 2020 | if (NULL == sapcontext) { |
| 2021 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
| 2022 | "%s: Invalid SAP pointer", __func__); |
Jeff Johnson | bc110a7 | 2017-09-25 15:22:18 -0700 | [diff] [blame] | 2023 | return false; |
bings | 394afdd | 2017-01-09 11:22:38 +0800 | [diff] [blame] | 2024 | } |
| 2025 | return sapcontext->channel == AUTO_CHANNEL_SELECT; |
| 2026 | } |
| 2027 | |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2028 | #ifdef FEATURE_AP_MCC_CH_AVOIDANCE |
| 2029 | /** |
| 2030 | * wlan_sap_set_channel_avoidance() - sets sap mcc channel avoidance ini param |
| 2031 | * @hal: hal handle |
| 2032 | * @sap_channel_avoidance: ini parameter value |
| 2033 | * |
| 2034 | * sets sap mcc channel avoidance ini param, to be called in sap_start |
| 2035 | * |
| 2036 | * Return: success of failure of operation |
| 2037 | */ |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 2038 | QDF_STATUS |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2039 | wlan_sap_set_channel_avoidance(tHalHandle hal, bool sap_channel_avoidance) |
| 2040 | { |
| 2041 | tpAniSirGlobal mac_ctx = NULL; |
Srinivas Girigowda | 4d65ebe | 2017-10-13 21:41:42 -0700 | [diff] [blame] | 2042 | |
Pragaspathi Thilagaraj | b11dbe4 | 2018-07-23 16:42:17 +0530 | [diff] [blame] | 2043 | if (NULL != hal) { |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2044 | mac_ctx = PMAC_STRUCT(hal); |
Pragaspathi Thilagaraj | b11dbe4 | 2018-07-23 16:42:17 +0530 | [diff] [blame] | 2045 | } else { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 2046 | QDF_TRACE(QDF_MODULE_ID_SAP, |
| 2047 | QDF_TRACE_LEVEL_ERROR, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2048 | FL("hal or mac_ctx pointer NULL")); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 2049 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2050 | } |
| 2051 | mac_ctx->sap.sap_channel_avoidance = sap_channel_avoidance; |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 2052 | return QDF_STATUS_SUCCESS; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2053 | } |
| 2054 | #endif /* FEATURE_AP_MCC_CH_AVOIDANCE */ |
| 2055 | |
| 2056 | /** |
| 2057 | * wlansap_set_dfs_preferred_channel_location() - set dfs preferred channel |
| 2058 | * @hHal : HAL pointer |
| 2059 | * @dfs_Preferred_Channels_location : |
| 2060 | * 0 - Indicates No preferred channel location restrictions |
| 2061 | * 1 - Indicates SAP Indoor Channels operation only. |
| 2062 | * 2 - Indicates SAP Outdoor Channels operation only. |
| 2063 | * |
| 2064 | * This API is used to set sap preferred channels location |
| 2065 | * to resetrict the DFS random channel selection algorithm |
| 2066 | * either Indoor/Outdoor channels only. |
| 2067 | * |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 2068 | * Return: The QDF_STATUS code associated with performing the operation |
| 2069 | * QDF_STATUS_SUCCESS: Success and error code otherwise. |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2070 | */ |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 2071 | QDF_STATUS |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2072 | wlansap_set_dfs_preferred_channel_location(tHalHandle hHal, |
| 2073 | uint8_t |
| 2074 | dfs_Preferred_Channels_location) |
| 2075 | { |
| 2076 | tpAniSirGlobal pMac = NULL; |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 2077 | QDF_STATUS status; |
Amar Singhal | 5cccafe | 2017-02-15 12:42:58 -0800 | [diff] [blame] | 2078 | enum dfs_reg dfs_region; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2079 | |
| 2080 | if (NULL != hHal) { |
| 2081 | pMac = PMAC_STRUCT(hHal); |
| 2082 | } else { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 2083 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2084 | "%s: Invalid hHal pointer", __func__); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 2085 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2086 | } |
| 2087 | |
Amar Singhal | 7f55e34 | 2017-05-24 15:23:06 -0700 | [diff] [blame] | 2088 | wlan_reg_get_dfs_region(pMac->pdev, &dfs_region); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2089 | |
| 2090 | /* |
| 2091 | * The Indoor/Outdoor only random channel selection |
| 2092 | * restriction is currently enforeced only for |
| 2093 | * JAPAN regulatory domain. |
| 2094 | */ |
Amar Singhal | 5cccafe | 2017-02-15 12:42:58 -0800 | [diff] [blame] | 2095 | if (DFS_MKK_REG == dfs_region) { |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2096 | pMac->sap.SapDfsInfo.sap_operating_chan_preferred_location = |
| 2097 | dfs_Preferred_Channels_location; |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 2098 | QDF_TRACE(QDF_MODULE_ID_SAP, |
| 2099 | QDF_TRACE_LEVEL_INFO_LOW, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2100 | FL |
| 2101 | ("sapdfs:Set Preferred Operating Channel location=%d"), |
| 2102 | pMac->sap.SapDfsInfo. |
| 2103 | sap_operating_chan_preferred_location); |
| 2104 | |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 2105 | status = QDF_STATUS_SUCCESS; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2106 | } else { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 2107 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2108 | FL |
| 2109 | ("sapdfs:NOT JAPAN REG, Invalid Set preferred chans location")); |
| 2110 | |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 2111 | status = QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2112 | } |
| 2113 | |
| 2114 | return status; |
| 2115 | } |
| 2116 | |
| 2117 | /*========================================================================== |
| 2118 | FUNCTION wlansap_set_dfs_target_chnl |
| 2119 | |
| 2120 | DESCRIPTION |
| 2121 | This API is used to set next target chnl as provided channel. |
| 2122 | you can provide any valid channel to this API. |
| 2123 | |
| 2124 | DEPENDENCIES |
| 2125 | NA. |
| 2126 | |
| 2127 | PARAMETERS |
| 2128 | IN |
| 2129 | hHal : HAL pointer |
| 2130 | target_channel : target channel to be set |
| 2131 | |
| 2132 | RETURN VALUE |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 2133 | The QDF_STATUS code associated with performing the operation |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2134 | |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 2135 | QDF_STATUS_SUCCESS: Success |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2136 | |
| 2137 | SIDE EFFECTS |
| 2138 | ============================================================================*/ |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 2139 | QDF_STATUS wlansap_set_dfs_target_chnl(tHalHandle hHal, uint8_t target_channel) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2140 | { |
| 2141 | tpAniSirGlobal pMac = NULL; |
| 2142 | |
| 2143 | if (NULL != hHal) { |
| 2144 | pMac = PMAC_STRUCT(hHal); |
| 2145 | } else { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 2146 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2147 | "%s: Invalid hHal pointer", __func__); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 2148 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2149 | } |
| 2150 | if (target_channel > 0) { |
| 2151 | pMac->sap.SapDfsInfo.user_provided_target_channel = |
| 2152 | target_channel; |
| 2153 | } else { |
| 2154 | pMac->sap.SapDfsInfo.user_provided_target_channel = 0; |
| 2155 | } |
| 2156 | |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 2157 | return QDF_STATUS_SUCCESS; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2158 | } |
| 2159 | |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 2160 | QDF_STATUS |
Jeff Johnson | e4c11db | 2018-05-05 23:22:32 -0700 | [diff] [blame] | 2161 | wlansap_update_sap_config_add_ie(tsap_config_t *pConfig, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2162 | const uint8_t *pAdditionIEBuffer, |
| 2163 | uint16_t additionIELength, |
| 2164 | eUpdateIEsType updateType) |
| 2165 | { |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 2166 | QDF_STATUS status = QDF_STATUS_SUCCESS; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2167 | uint8_t bufferValid = false; |
| 2168 | uint16_t bufferLength = 0; |
| 2169 | uint8_t *pBuffer = NULL; |
| 2170 | |
| 2171 | if (NULL == pConfig) { |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 2172 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2173 | } |
| 2174 | |
| 2175 | if ((pAdditionIEBuffer != NULL) && (additionIELength != 0)) { |
| 2176 | /* initialize the buffer pointer so that pe can copy */ |
| 2177 | if (additionIELength > 0) { |
| 2178 | bufferLength = additionIELength; |
Anurag Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 2179 | pBuffer = qdf_mem_malloc(bufferLength); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2180 | if (NULL == pBuffer) { |
Krishna Kumaar Natarajan | 4f1d772 | 2017-03-03 21:12:51 -0800 | [diff] [blame] | 2181 | QDF_TRACE(QDF_MODULE_ID_SAP, |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 2182 | QDF_TRACE_LEVEL_ERROR, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2183 | FL("Could not allocate the buffer ")); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 2184 | return QDF_STATUS_E_NOMEM; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2185 | } |
Anurag Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 2186 | qdf_mem_copy(pBuffer, pAdditionIEBuffer, bufferLength); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2187 | bufferValid = true; |
Krishna Kumaar Natarajan | 4f1d772 | 2017-03-03 21:12:51 -0800 | [diff] [blame] | 2188 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO, |
| 2189 | FL("update_type: %d"), updateType); |
| 2190 | qdf_trace_hex_dump(QDF_MODULE_ID_SAP, |
| 2191 | QDF_TRACE_LEVEL_INFO, pBuffer, bufferLength); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2192 | } |
| 2193 | } |
| 2194 | |
| 2195 | switch (updateType) { |
| 2196 | case eUPDATE_IE_PROBE_BCN: |
Jiachao Wu | c279f97 | 2018-01-22 15:38:33 +0800 | [diff] [blame] | 2197 | if (pConfig->pProbeRespBcnIEsBuffer) |
| 2198 | qdf_mem_free(pConfig->pProbeRespBcnIEsBuffer); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2199 | if (bufferValid) { |
| 2200 | pConfig->probeRespBcnIEsLen = bufferLength; |
| 2201 | pConfig->pProbeRespBcnIEsBuffer = pBuffer; |
| 2202 | } else { |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2203 | pConfig->probeRespBcnIEsLen = 0; |
| 2204 | pConfig->pProbeRespBcnIEsBuffer = NULL; |
Krishna Kumaar Natarajan | 4f1d772 | 2017-03-03 21:12:51 -0800 | [diff] [blame] | 2205 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO, |
| 2206 | FL("No Probe Resp beacone IE received in set beacon")); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2207 | } |
| 2208 | break; |
| 2209 | case eUPDATE_IE_PROBE_RESP: |
Jiachao Wu | c279f97 | 2018-01-22 15:38:33 +0800 | [diff] [blame] | 2210 | if (pConfig->pProbeRespIEsBuffer) |
| 2211 | qdf_mem_free(pConfig->pProbeRespIEsBuffer); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2212 | if (bufferValid) { |
| 2213 | pConfig->probeRespIEsBufferLen = bufferLength; |
| 2214 | pConfig->pProbeRespIEsBuffer = pBuffer; |
| 2215 | } else { |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2216 | pConfig->probeRespIEsBufferLen = 0; |
| 2217 | pConfig->pProbeRespIEsBuffer = NULL; |
Krishna Kumaar Natarajan | 4f1d772 | 2017-03-03 21:12:51 -0800 | [diff] [blame] | 2218 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO, |
| 2219 | FL("No Probe Response IE received in set beacon")); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2220 | } |
| 2221 | break; |
| 2222 | case eUPDATE_IE_ASSOC_RESP: |
Jiachao Wu | c279f97 | 2018-01-22 15:38:33 +0800 | [diff] [blame] | 2223 | if (pConfig->pAssocRespIEsBuffer) |
| 2224 | qdf_mem_free(pConfig->pAssocRespIEsBuffer); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2225 | if (bufferValid) { |
| 2226 | pConfig->assocRespIEsLen = bufferLength; |
| 2227 | pConfig->pAssocRespIEsBuffer = pBuffer; |
| 2228 | } else { |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2229 | pConfig->assocRespIEsLen = 0; |
| 2230 | pConfig->pAssocRespIEsBuffer = NULL; |
Krishna Kumaar Natarajan | 4f1d772 | 2017-03-03 21:12:51 -0800 | [diff] [blame] | 2231 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO, |
| 2232 | FL("No Assoc Response IE received in set beacon")); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2233 | } |
| 2234 | break; |
| 2235 | default: |
Krishna Kumaar Natarajan | 4f1d772 | 2017-03-03 21:12:51 -0800 | [diff] [blame] | 2236 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2237 | FL("No matching buffer type %d"), updateType); |
| 2238 | if (pBuffer != NULL) |
Anurag Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 2239 | qdf_mem_free(pBuffer); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2240 | break; |
| 2241 | } |
| 2242 | |
| 2243 | return status; |
| 2244 | } |
| 2245 | |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 2246 | QDF_STATUS |
Jeff Johnson | e4c11db | 2018-05-05 23:22:32 -0700 | [diff] [blame] | 2247 | wlansap_reset_sap_config_add_ie(tsap_config_t *pConfig, eUpdateIEsType updateType) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2248 | { |
| 2249 | if (NULL == pConfig) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 2250 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2251 | "%s: Invalid Config pointer", __func__); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 2252 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2253 | } |
| 2254 | |
| 2255 | switch (updateType) { |
| 2256 | case eUPDATE_IE_ALL: /*only used to reset */ |
| 2257 | case eUPDATE_IE_PROBE_RESP: |
Arunk Khandavalli | 96c122f | 2017-10-17 11:49:36 +0530 | [diff] [blame] | 2258 | if (pConfig->pProbeRespIEsBuffer) { |
| 2259 | qdf_mem_free(pConfig->pProbeRespIEsBuffer); |
| 2260 | pConfig->probeRespIEsBufferLen = 0; |
| 2261 | pConfig->pProbeRespIEsBuffer = NULL; |
| 2262 | } |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2263 | if (eUPDATE_IE_ALL != updateType) |
| 2264 | break; |
| 2265 | |
| 2266 | case eUPDATE_IE_ASSOC_RESP: |
Arunk Khandavalli | 96c122f | 2017-10-17 11:49:36 +0530 | [diff] [blame] | 2267 | if (pConfig->pAssocRespIEsBuffer) { |
| 2268 | qdf_mem_free(pConfig->pAssocRespIEsBuffer); |
| 2269 | pConfig->assocRespIEsLen = 0; |
| 2270 | pConfig->pAssocRespIEsBuffer = NULL; |
| 2271 | } |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2272 | if (eUPDATE_IE_ALL != updateType) |
| 2273 | break; |
| 2274 | |
| 2275 | case eUPDATE_IE_PROBE_BCN: |
Arunk Khandavalli | 96c122f | 2017-10-17 11:49:36 +0530 | [diff] [blame] | 2276 | if (pConfig->pProbeRespBcnIEsBuffer) { |
| 2277 | qdf_mem_free(pConfig->pProbeRespBcnIEsBuffer); |
| 2278 | pConfig->probeRespBcnIEsLen = 0; |
| 2279 | pConfig->pProbeRespBcnIEsBuffer = NULL; |
| 2280 | } |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2281 | if (eUPDATE_IE_ALL != updateType) |
| 2282 | break; |
| 2283 | |
| 2284 | default: |
| 2285 | if (eUPDATE_IE_ALL != updateType) |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 2286 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2287 | FL("Invalid buffer type %d"), updateType); |
| 2288 | break; |
| 2289 | } |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 2290 | return QDF_STATUS_SUCCESS; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2291 | } |
| 2292 | |
| 2293 | /*========================================================================== |
| 2294 | FUNCTION wlansap_extend_to_acs_range |
| 2295 | |
| 2296 | DESCRIPTION Function extends give channel range to consider ACS chan bonding |
| 2297 | |
| 2298 | DEPENDENCIES PARAMETERS |
| 2299 | |
| 2300 | IN /OUT |
| 2301 | *startChannelNum : ACS extend start ch |
| 2302 | *endChannelNum : ACS extended End ch |
| 2303 | *bandStartChannel: Band start ch |
| 2304 | *bandEndChannel : Band end ch |
| 2305 | |
| 2306 | RETURN VALUE NONE |
| 2307 | |
| 2308 | SIDE EFFECTS |
| 2309 | ============================================================================*/ |
Kiran Kumar Lokere | a3de226 | 2017-04-12 12:15:04 -0700 | [diff] [blame] | 2310 | void wlansap_extend_to_acs_range(tHalHandle hal, uint8_t *startChannelNum, |
| 2311 | uint8_t *endChannelNum, uint8_t *bandStartChannel, |
| 2312 | uint8_t *bandEndChannel) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2313 | { |
| 2314 | #define ACS_WLAN_20M_CH_INC 4 |
| 2315 | #define ACS_2G_EXTEND ACS_WLAN_20M_CH_INC |
| 2316 | #define ACS_5G_EXTEND (ACS_WLAN_20M_CH_INC * 3) |
| 2317 | |
| 2318 | uint8_t tmp_startChannelNum = 0, tmp_endChannelNum = 0; |
Kiran Kumar Lokere | a3de226 | 2017-04-12 12:15:04 -0700 | [diff] [blame] | 2319 | tpAniSirGlobal mac_ctx; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2320 | |
Kiran Kumar Lokere | a3de226 | 2017-04-12 12:15:04 -0700 | [diff] [blame] | 2321 | mac_ctx = PMAC_STRUCT(hal); |
| 2322 | if (!mac_ctx) { |
| 2323 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
| 2324 | "%s: Invalid mac_ctx", __func__); |
| 2325 | return; |
| 2326 | } |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2327 | if (*startChannelNum <= 14 && *endChannelNum <= 14) { |
Amar Singhal | b8d4f15 | 2016-02-10 10:21:43 -0800 | [diff] [blame] | 2328 | *bandStartChannel = CHAN_ENUM_1; |
| 2329 | *bandEndChannel = CHAN_ENUM_14; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2330 | tmp_startChannelNum = *startChannelNum > 5 ? |
| 2331 | (*startChannelNum - ACS_2G_EXTEND) : 1; |
| 2332 | tmp_endChannelNum = (*endChannelNum + ACS_2G_EXTEND) <= 14 ? |
| 2333 | (*endChannelNum + ACS_2G_EXTEND) : 14; |
| 2334 | } else if (*startChannelNum >= 36 && *endChannelNum >= 36) { |
Amar Singhal | b8d4f15 | 2016-02-10 10:21:43 -0800 | [diff] [blame] | 2335 | *bandStartChannel = CHAN_ENUM_36; |
Kiran Kumar Lokere | 1a43bcf | 2018-05-15 15:51:58 -0700 | [diff] [blame] | 2336 | *bandEndChannel = CHAN_ENUM_173; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2337 | tmp_startChannelNum = (*startChannelNum - ACS_5G_EXTEND) > 36 ? |
| 2338 | (*startChannelNum - ACS_5G_EXTEND) : 36; |
Kiran Kumar Lokere | 1a43bcf | 2018-05-15 15:51:58 -0700 | [diff] [blame] | 2339 | tmp_endChannelNum = (*endChannelNum + ACS_5G_EXTEND) <= |
| 2340 | WNI_CFG_CURRENT_CHANNEL_STAMAX ? |
| 2341 | (*endChannelNum + ACS_5G_EXTEND) : |
| 2342 | WNI_CFG_CURRENT_CHANNEL_STAMAX; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2343 | } else { |
Amar Singhal | b8d4f15 | 2016-02-10 10:21:43 -0800 | [diff] [blame] | 2344 | *bandStartChannel = CHAN_ENUM_1; |
Kiran Kumar Lokere | 1a43bcf | 2018-05-15 15:51:58 -0700 | [diff] [blame] | 2345 | *bandEndChannel = CHAN_ENUM_173; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2346 | tmp_startChannelNum = *startChannelNum > 5 ? |
| 2347 | (*startChannelNum - ACS_2G_EXTEND) : 1; |
Kiran Kumar Lokere | 1a43bcf | 2018-05-15 15:51:58 -0700 | [diff] [blame] | 2348 | tmp_endChannelNum = (*endChannelNum + ACS_5G_EXTEND) <= |
| 2349 | WNI_CFG_CURRENT_CHANNEL_STAMAX ? |
| 2350 | (*endChannelNum + ACS_5G_EXTEND) : |
| 2351 | WNI_CFG_CURRENT_CHANNEL_STAMAX; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2352 | } |
| 2353 | |
| 2354 | /* Note if the ACS range include only DFS channels, do not cross range |
| 2355 | * Active scanning in adjacent non DFS channels results in transmission |
| 2356 | * spikes in DFS specturm channels which is due to emission spill. |
| 2357 | * Remove the active channels from extend ACS range for DFS only range |
| 2358 | */ |
Kiran Kumar Lokere | a3de226 | 2017-04-12 12:15:04 -0700 | [diff] [blame] | 2359 | if (wlan_reg_is_dfs_ch(mac_ctx->pdev, *startChannelNum)) { |
| 2360 | while (!wlan_reg_is_dfs_ch(mac_ctx->pdev, |
| 2361 | tmp_startChannelNum) && |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2362 | tmp_startChannelNum < *startChannelNum) |
| 2363 | tmp_startChannelNum += ACS_WLAN_20M_CH_INC; |
| 2364 | |
| 2365 | *startChannelNum = tmp_startChannelNum; |
| 2366 | } |
Kiran Kumar Lokere | a3de226 | 2017-04-12 12:15:04 -0700 | [diff] [blame] | 2367 | if (wlan_reg_is_dfs_ch(mac_ctx->pdev, *endChannelNum)) { |
| 2368 | while (!wlan_reg_is_dfs_ch(mac_ctx->pdev, |
| 2369 | tmp_endChannelNum) && |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2370 | tmp_endChannelNum > *endChannelNum) |
| 2371 | tmp_endChannelNum -= ACS_WLAN_20M_CH_INC; |
| 2372 | |
| 2373 | *endChannelNum = tmp_endChannelNum; |
| 2374 | } |
| 2375 | } |
| 2376 | |
Jeff Johnson | ed4ed17 | 2017-09-25 18:36:16 -0700 | [diff] [blame] | 2377 | QDF_STATUS wlan_sap_set_vendor_acs(struct sap_context *sap_context, |
| 2378 | bool is_vendor_acs) |
Kapil Gupta | 8878ad9 | 2017-02-13 11:56:04 +0530 | [diff] [blame] | 2379 | { |
Kapil Gupta | 8878ad9 | 2017-02-13 11:56:04 +0530 | [diff] [blame] | 2380 | if (!sap_context) { |
| 2381 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
| 2382 | "%s: Invalid SAP pointer", __func__); |
| 2383 | return QDF_STATUS_E_FAULT; |
| 2384 | } |
Himanshu Agarwal | dfc4dca | 2017-08-29 19:49:05 +0530 | [diff] [blame] | 2385 | sap_context->vendor_acs_dfs_lte_enabled = is_vendor_acs; |
Kapil Gupta | 8878ad9 | 2017-02-13 11:56:04 +0530 | [diff] [blame] | 2386 | |
| 2387 | return QDF_STATUS_SUCCESS; |
| 2388 | } |
Jeff Johnson | b26e270 | 2017-09-25 18:31:14 -0700 | [diff] [blame] | 2389 | |
Wen Gong | 01a2c63 | 2018-04-11 18:34:55 +0800 | [diff] [blame] | 2390 | #ifdef DFS_COMPONENT_ENABLE |
Jeff Johnson | b3c4f7e | 2017-09-25 18:23:05 -0700 | [diff] [blame] | 2391 | QDF_STATUS wlansap_set_dfs_nol(struct sap_context *sap_ctx, |
| 2392 | eSapDfsNolType conf) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2393 | { |
Arif Hussain | cd15163 | 2017-02-11 16:57:19 -0800 | [diff] [blame] | 2394 | void *hal = NULL; |
| 2395 | tpAniSirGlobal mac = NULL; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2396 | |
Arif Hussain | cd15163 | 2017-02-11 16:57:19 -0800 | [diff] [blame] | 2397 | if (!sap_ctx) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 2398 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Jeff Johnson | b3c4f7e | 2017-09-25 18:23:05 -0700 | [diff] [blame] | 2399 | "%s: Invalid SAP pointer", __func__); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 2400 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2401 | } |
Arif Hussain | cd15163 | 2017-02-11 16:57:19 -0800 | [diff] [blame] | 2402 | |
Jeff Johnson | c0db384 | 2017-09-13 18:34:28 -0700 | [diff] [blame] | 2403 | hal = CDS_GET_HAL_CB(); |
Arif Hussain | cd15163 | 2017-02-11 16:57:19 -0800 | [diff] [blame] | 2404 | if (!hal) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 2405 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Jeff Johnson | b3c4f7e | 2017-09-25 18:23:05 -0700 | [diff] [blame] | 2406 | "%s: Invalid HAL pointer", __func__); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 2407 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2408 | } |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2409 | |
Arif Hussain | cd15163 | 2017-02-11 16:57:19 -0800 | [diff] [blame] | 2410 | mac = PMAC_STRUCT(hal); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2411 | |
| 2412 | if (conf == eSAP_DFS_NOL_CLEAR) { |
Arif Hussain | cd15163 | 2017-02-11 16:57:19 -0800 | [diff] [blame] | 2413 | struct wlan_objmgr_pdev *pdev; |
| 2414 | |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 2415 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2416 | "%s: clear the DFS NOL", __func__); |
| 2417 | |
Arif Hussain | cd15163 | 2017-02-11 16:57:19 -0800 | [diff] [blame] | 2418 | pdev = mac->pdev; |
| 2419 | if (!pdev) { |
| 2420 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
| 2421 | "%s: null pdev", __func__); |
| 2422 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2423 | } |
Arif Hussain | 4549efa | 2017-10-10 17:10:47 -0700 | [diff] [blame] | 2424 | utils_dfs_clear_nol_channels(pdev); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2425 | } else if (conf == eSAP_DFS_NOL_RANDOMIZE) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 2426 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2427 | "%s: Randomize the DFS NOL", __func__); |
| 2428 | |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2429 | } else { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 2430 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2431 | "%s: unsupport type %d", __func__, conf); |
| 2432 | } |
| 2433 | |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 2434 | return QDF_STATUS_SUCCESS; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2435 | } |
Wen Gong | 01a2c63 | 2018-04-11 18:34:55 +0800 | [diff] [blame] | 2436 | #endif |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2437 | |
| 2438 | /** |
| 2439 | * wlansap_populate_del_sta_params() - populate delete station parameter |
| 2440 | * @mac: Pointer to peer mac address. |
| 2441 | * @reason_code: Reason code for the disassoc/deauth. |
| 2442 | * @subtype: Subtype points to either disassoc/deauth frame. |
| 2443 | * @pDelStaParams: Address where parameters to be populated. |
| 2444 | * |
| 2445 | * This API is used to populate delete station parameter structure |
| 2446 | * |
| 2447 | * Return: none |
| 2448 | */ |
| 2449 | |
| 2450 | void wlansap_populate_del_sta_params(const uint8_t *mac, |
| 2451 | uint16_t reason_code, |
| 2452 | uint8_t subtype, |
Jeff Johnson | e6bf719 | 2017-11-07 15:16:09 -0800 | [diff] [blame] | 2453 | struct csr_del_sta_params *pDelStaParams) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2454 | { |
| 2455 | if (NULL == mac) |
Anurag Chouhan | c554842 | 2016-02-24 18:33:27 +0530 | [diff] [blame] | 2456 | qdf_set_macaddr_broadcast(&pDelStaParams->peerMacAddr); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2457 | else |
Anurag Chouhan | 600c3a0 | 2016-03-01 10:33:54 +0530 | [diff] [blame] | 2458 | qdf_mem_copy(pDelStaParams->peerMacAddr.bytes, mac, |
Anurag Chouhan | 6d76066 | 2016-02-20 16:05:43 +0530 | [diff] [blame] | 2459 | QDF_MAC_ADDR_SIZE); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2460 | |
| 2461 | if (reason_code == 0) |
| 2462 | pDelStaParams->reason_code = eSIR_MAC_DEAUTH_LEAVING_BSS_REASON; |
| 2463 | else |
| 2464 | pDelStaParams->reason_code = reason_code; |
| 2465 | |
| 2466 | if (subtype == (SIR_MAC_MGMT_DEAUTH >> 4) || |
| 2467 | subtype == (SIR_MAC_MGMT_DISASSOC >> 4)) |
| 2468 | pDelStaParams->subtype = subtype; |
| 2469 | else |
| 2470 | pDelStaParams->subtype = (SIR_MAC_MGMT_DEAUTH >> 4); |
| 2471 | |
Srinivas Girigowda | 678586c | 2017-03-10 00:13:58 -0800 | [diff] [blame] | 2472 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_DEBUG, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2473 | FL( |
| 2474 | "Delete STA with RC:%hu subtype:%hhu MAC::" |
| 2475 | MAC_ADDRESS_STR), |
| 2476 | pDelStaParams->reason_code, pDelStaParams->subtype, |
| 2477 | MAC_ADDR_ARRAY(pDelStaParams->peerMacAddr.bytes)); |
| 2478 | } |
| 2479 | |
Jeff Johnson | 630fd6a | 2017-09-25 15:27:39 -0700 | [diff] [blame] | 2480 | QDF_STATUS wlansap_acs_chselect(struct sap_context *sap_context, |
| 2481 | tpWLAN_SAPEventCB pacs_event_callback, |
Jeff Johnson | e4c11db | 2018-05-05 23:22:32 -0700 | [diff] [blame] | 2482 | tsap_config_t *pconfig, |
Jeff Johnson | 630fd6a | 2017-09-25 15:27:39 -0700 | [diff] [blame] | 2483 | void *pusr_context) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2484 | { |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2485 | tHalHandle h_hal = NULL; |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 2486 | QDF_STATUS qdf_status = QDF_STATUS_E_FAILURE; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2487 | tpAniSirGlobal pmac = NULL; |
| 2488 | |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2489 | if (NULL == sap_context) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 2490 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Jeff Johnson | 630fd6a | 2017-09-25 15:27:39 -0700 | [diff] [blame] | 2491 | "%s: Invalid SAP pointer", __func__); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2492 | |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 2493 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2494 | } |
| 2495 | |
Jeff Johnson | c0db384 | 2017-09-13 18:34:28 -0700 | [diff] [blame] | 2496 | h_hal = (tHalHandle)CDS_GET_HAL_CB(); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2497 | if (NULL == h_hal) { |
Anurag Chouhan | b2dc16f | 2016-02-25 11:47:37 +0530 | [diff] [blame] | 2498 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Jeff Johnson | 630fd6a | 2017-09-25 15:27:39 -0700 | [diff] [blame] | 2499 | "%s: Invalid MAC context", __func__); |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 2500 | return QDF_STATUS_E_FAULT; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2501 | } |
| 2502 | |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2503 | pmac = PMAC_STRUCT(h_hal); |
| 2504 | sap_context->acs_cfg = &pconfig->acs_cfg; |
| 2505 | sap_context->ch_width_orig = pconfig->acs_cfg.ch_width; |
| 2506 | sap_context->csr_roamProfile.phyMode = pconfig->acs_cfg.hw_mode; |
| 2507 | |
Peng Xu | 66162de | 2016-02-11 17:01:20 -0800 | [diff] [blame] | 2508 | /* |
| 2509 | * Now, configure the scan and ACS channel params |
| 2510 | * to issue a scan request. |
| 2511 | */ |
| 2512 | wlansap_set_scan_acs_channel_params(pconfig, sap_context, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2513 | pusr_context); |
| 2514 | |
Peng Xu | 66162de | 2016-02-11 17:01:20 -0800 | [diff] [blame] | 2515 | /* |
| 2516 | * Copy the HDD callback function to report the |
| 2517 | * ACS result after scan in SAP context callback function. |
| 2518 | */ |
| 2519 | sap_context->pfnSapEventCallback = pacs_event_callback; |
| 2520 | /* |
| 2521 | * init dfs channel nol |
| 2522 | */ |
| 2523 | sap_init_dfs_channel_nol_list(sap_context); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2524 | |
Peng Xu | 66162de | 2016-02-11 17:01:20 -0800 | [diff] [blame] | 2525 | /* |
| 2526 | * Issue the scan request. This scan request is |
| 2527 | * issued before the start BSS is done so |
| 2528 | * |
| 2529 | * 1. No need to pass the second parameter |
| 2530 | * as the SAP state machine is not started yet |
| 2531 | * and there is no need for any event posting. |
| 2532 | * |
| 2533 | * 2. Set third parameter to TRUE to indicate the |
| 2534 | * channel selection function to register a |
Jeff Johnson | c7e4d16 | 2018-05-12 16:20:34 -0700 | [diff] [blame] | 2535 | * different scan callback function to process |
Peng Xu | 66162de | 2016-02-11 17:01:20 -0800 | [diff] [blame] | 2536 | * the results pre start BSS. |
| 2537 | */ |
Abhishek Singh | 53791fa | 2018-06-14 14:02:50 +0530 | [diff] [blame] | 2538 | qdf_status = sap_channel_sel(sap_context); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2539 | |
Peng Xu | 66162de | 2016-02-11 17:01:20 -0800 | [diff] [blame] | 2540 | if (QDF_STATUS_E_ABORTED == qdf_status) { |
| 2541 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2542 | "In %s,DFS not supported in the current operating mode", |
| 2543 | __func__); |
Peng Xu | 66162de | 2016-02-11 17:01:20 -0800 | [diff] [blame] | 2544 | return QDF_STATUS_E_FAILURE; |
| 2545 | } else if (QDF_STATUS_E_CANCELED == qdf_status) { |
| 2546 | /* |
| 2547 | * ERROR is returned when either the SME scan request |
| 2548 | * failed or ACS is overridden due to other constrainst |
| 2549 | * So send selected channel to HDD |
| 2550 | */ |
| 2551 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
| 2552 | FL("Scan Req Failed/ACS Overridden")); |
| 2553 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
| 2554 | FL("Selected channel = %d"), |
| 2555 | sap_context->channel); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2556 | |
Peng Xu | 66162de | 2016-02-11 17:01:20 -0800 | [diff] [blame] | 2557 | return sap_signal_hdd_event(sap_context, NULL, |
| 2558 | eSAP_ACS_CHANNEL_SELECTED, |
| 2559 | (void *) eSAP_STATUS_SUCCESS); |
| 2560 | } else if (QDF_STATUS_SUCCESS == qdf_status) { |
| 2561 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH, |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2562 | FL("Successfully Issued a Pre Start Bss Scan Request")); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2563 | } |
Anurag Chouhan | fb54ab0 | 2016-02-18 18:00:46 +0530 | [diff] [blame] | 2564 | return qdf_status; |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2565 | } |
| 2566 | |
| 2567 | /** |
| 2568 | * wlan_sap_enable_phy_error_logs() - Enable DFS phy error logs |
| 2569 | * @hal: global hal handle |
| 2570 | * @enable_log: value to set |
| 2571 | * |
| 2572 | * Since the frequency of DFS phy error is very high, enabling logs for them |
| 2573 | * all the times can cause crash and will also create lot of useless logs |
| 2574 | * causing difficulties in debugging other issue. This function will be called |
| 2575 | * from iwpriv cmd to eanble such logs temporarily. |
| 2576 | * |
| 2577 | * Return: void |
| 2578 | */ |
bings | 10f2645 | 2018-01-21 15:37:46 +0800 | [diff] [blame] | 2579 | void wlan_sap_enable_phy_error_logs(tHalHandle hal, uint32_t enable_log) |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2580 | { |
bings | 10f2645 | 2018-01-21 15:37:46 +0800 | [diff] [blame] | 2581 | int error; |
| 2582 | |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2583 | tpAniSirGlobal mac_ctx = PMAC_STRUCT(hal); |
Srinivas Girigowda | 4d65ebe | 2017-10-13 21:41:42 -0700 | [diff] [blame] | 2584 | |
bings | 10f2645 | 2018-01-21 15:37:46 +0800 | [diff] [blame] | 2585 | mac_ctx->sap.enable_dfs_phy_error_logs = !!enable_log; |
| 2586 | tgt_dfs_control(mac_ctx->pdev, DFS_SET_DEBUG_LEVEL, &enable_log, |
| 2587 | sizeof(uint32_t), NULL, NULL, &error); |
Prakash Dhavali | 7090c5f | 2015-11-02 17:55:19 -0800 | [diff] [blame] | 2588 | } |
Kai Liu | bdd5fcb | 2016-09-28 22:55:44 +0800 | [diff] [blame] | 2589 | |
Jeff Johnson | 92675a5 | 2017-09-25 15:35:19 -0700 | [diff] [blame] | 2590 | uint32_t wlansap_get_chan_width(struct sap_context *sap_ctx) |
Kai Liu | bdd5fcb | 2016-09-28 22:55:44 +0800 | [diff] [blame] | 2591 | { |
Jeff Johnson | 92675a5 | 2017-09-25 15:35:19 -0700 | [diff] [blame] | 2592 | return wlan_sap_get_vht_ch_width(sap_ctx); |
Kai Liu | bdd5fcb | 2016-09-28 22:55:44 +0800 | [diff] [blame] | 2593 | } |
Yingying Tang | b4832f7 | 2016-10-20 13:44:55 +0800 | [diff] [blame] | 2594 | |
Yingying Tang | b4832f7 | 2016-10-20 13:44:55 +0800 | [diff] [blame] | 2595 | QDF_STATUS wlansap_set_tx_leakage_threshold(tHalHandle hal, |
| 2596 | uint16_t tx_leakage_threshold) |
| 2597 | { |
| 2598 | tpAniSirGlobal mac; |
| 2599 | |
| 2600 | if (NULL == hal) { |
| 2601 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
| 2602 | "%s: Invalid hal pointer", __func__); |
| 2603 | return QDF_STATUS_E_FAULT; |
| 2604 | } |
| 2605 | |
| 2606 | mac = PMAC_STRUCT(hal); |
bings | 1826d9c | 2018-01-23 16:14:01 +0800 | [diff] [blame] | 2607 | tgt_dfs_set_tx_leakage_threshold(mac->pdev, tx_leakage_threshold); |
Yingying Tang | b4832f7 | 2016-10-20 13:44:55 +0800 | [diff] [blame] | 2608 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO, |
| 2609 | "%s: leakage_threshold %d", __func__, |
bings | 1826d9c | 2018-01-23 16:14:01 +0800 | [diff] [blame] | 2610 | tx_leakage_threshold); |
Yingying Tang | b4832f7 | 2016-10-20 13:44:55 +0800 | [diff] [blame] | 2611 | return QDF_STATUS_SUCCESS; |
| 2612 | } |
Wu Gao | 3671743 | 2016-11-21 15:09:48 +0800 | [diff] [blame] | 2613 | |
Jeff Johnson | 104433a | 2017-09-25 15:39:43 -0700 | [diff] [blame] | 2614 | QDF_STATUS wlansap_set_invalid_session(struct sap_context *sap_ctx) |
Wu Gao | 3671743 | 2016-11-21 15:09:48 +0800 | [diff] [blame] | 2615 | { |
Jeff Johnson | 104433a | 2017-09-25 15:39:43 -0700 | [diff] [blame] | 2616 | if (NULL == sap_ctx) { |
Wu Gao | 3671743 | 2016-11-21 15:09:48 +0800 | [diff] [blame] | 2617 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
Jeff Johnson | 104433a | 2017-09-25 15:39:43 -0700 | [diff] [blame] | 2618 | FL("Invalid SAP pointer")); |
Wu Gao | 3671743 | 2016-11-21 15:09:48 +0800 | [diff] [blame] | 2619 | return QDF_STATUS_E_FAILURE; |
| 2620 | } |
| 2621 | |
Jeff Johnson | 104433a | 2017-09-25 15:39:43 -0700 | [diff] [blame] | 2622 | sap_ctx->sessionId = CSR_SESSION_ID_INVALID; |
Wu Gao | 3671743 | 2016-11-21 15:09:48 +0800 | [diff] [blame] | 2623 | |
| 2624 | return QDF_STATUS_SUCCESS; |
| 2625 | } |
Wu Gao | 3545e64 | 2017-07-14 19:24:41 +0800 | [diff] [blame] | 2626 | |
Jeff Johnson | 14ec068 | 2017-09-25 15:44:03 -0700 | [diff] [blame] | 2627 | void wlansap_cleanup_cac_timer(struct sap_context *sap_ctx) |
Wu Gao | 3545e64 | 2017-07-14 19:24:41 +0800 | [diff] [blame] | 2628 | { |
| 2629 | tHalHandle hal; |
Wu Gao | 3545e64 | 2017-07-14 19:24:41 +0800 | [diff] [blame] | 2630 | tpAniSirGlobal pmac; |
| 2631 | |
Jeff Johnson | 14ec068 | 2017-09-25 15:44:03 -0700 | [diff] [blame] | 2632 | if (!sap_ctx) { |
Wu Gao | 35a5cfe | 2017-07-27 16:31:02 +0800 | [diff] [blame] | 2633 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
| 2634 | FL("Invalid SAP context")); |
Wu Gao | 3545e64 | 2017-07-14 19:24:41 +0800 | [diff] [blame] | 2635 | return; |
Wu Gao | 35a5cfe | 2017-07-27 16:31:02 +0800 | [diff] [blame] | 2636 | } |
Wu Gao | 3545e64 | 2017-07-14 19:24:41 +0800 | [diff] [blame] | 2637 | |
Jeff Johnson | c0db384 | 2017-09-13 18:34:28 -0700 | [diff] [blame] | 2638 | hal = CDS_GET_HAL_CB(); |
Wu Gao | 35a5cfe | 2017-07-27 16:31:02 +0800 | [diff] [blame] | 2639 | if (!hal) { |
| 2640 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
| 2641 | FL("Invalid hal pointer")); |
| 2642 | return; |
| 2643 | } |
| 2644 | |
Wu Gao | 3545e64 | 2017-07-14 19:24:41 +0800 | [diff] [blame] | 2645 | pmac = PMAC_STRUCT(hal); |
| 2646 | if (pmac->sap.SapDfsInfo.is_dfs_cac_timer_running) { |
| 2647 | qdf_mc_timer_stop(&pmac->sap.SapDfsInfo. |
| 2648 | sap_dfs_cac_timer); |
| 2649 | pmac->sap.SapDfsInfo.is_dfs_cac_timer_running = 0; |
| 2650 | qdf_mc_timer_destroy( |
| 2651 | &pmac->sap.SapDfsInfo.sap_dfs_cac_timer); |
| 2652 | QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, |
| 2653 | FL("sapdfs, force cleanup running dfs cac timer")); |
| 2654 | } |
| 2655 | } |