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