1 /* 2 * Copyright (c) 2020-2021 The Linux Foundation. All rights reserved. 3 * 4 * Permission to use, copy, modify, and/or distribute this software for any 5 * purpose with or without fee is hereby granted, provided that the above 6 * copyright notice and this permission notice appear in all copies. 7 * 8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15 */ 16 17 /** 18 * DOC: wlan_cm_api.h 19 * 20 * This file maintains declarations of public apis 21 */ 22 23 #ifndef __WLAN_CM_API_H 24 #define __WLAN_CM_API_H 25 26 #include "wlan_cm_public_struct.h" 27 #include "wlan_ext_mlme_obj_types.h" 28 29 /** 30 * wlan_cm_start_connect() - connect start request 31 * @vdev: vdev pointer 32 * @req: connect req 33 * 34 * Return: QDF_STATUS 35 */ 36 QDF_STATUS wlan_cm_start_connect(struct wlan_objmgr_vdev *vdev, 37 struct wlan_cm_connect_req *req); 38 39 /** 40 * wlan_cm_disconnect() - disconnect start request 41 * @vdev: vdev pointer 42 * @source: disconnect source 43 * @reason_code: disconnect reason 44 * @bssid: bssid of AP to disconnect, can be null if not known 45 * 46 * Context: can be called from any context 47 * 48 * Return: QDF_STATUS 49 */ 50 QDF_STATUS wlan_cm_disconnect(struct wlan_objmgr_vdev *vdev, 51 enum wlan_cm_source source, 52 enum wlan_reason_code reason_code, 53 struct qdf_mac_addr *bssid); 54 55 /** 56 * wlan_cm_disconnect_sync() - disconnect request with wait till 57 * completed 58 * @vdev: vdev pointer 59 * @source: disconnect source 60 * @reason_code: disconnect reason 61 * 62 * Context: Only call for north bound disconnect req, if wait till complete 63 * is required, e.g. during vdev delete. Do not call from scheduler context. 64 * 65 * Return: QDF_STATUS 66 */ 67 QDF_STATUS wlan_cm_disconnect_sync(struct wlan_objmgr_vdev *vdev, 68 enum wlan_cm_source source, 69 enum wlan_reason_code reason_code); 70 71 /** 72 * wlan_cm_bss_select_ind_rsp() - Connection manager resp for bss 73 * select indication 74 * @vdev: vdev pointer 75 * @status: Status 76 * 77 * Return: QDF_STATUS 78 */ 79 QDF_STATUS wlan_cm_bss_select_ind_rsp(struct wlan_objmgr_vdev *vdev, 80 QDF_STATUS status); 81 82 /** 83 * wlan_cm_bss_peer_create_rsp() - Connection manager bss peer create response 84 * @vdev: vdev pointer 85 * @status: Status 86 * @peer_mac: Peer mac address 87 * 88 * Return: QDF_STATUS 89 */ 90 QDF_STATUS wlan_cm_bss_peer_create_rsp(struct wlan_objmgr_vdev *vdev, 91 QDF_STATUS status, 92 struct qdf_mac_addr *peer_mac); 93 94 /** 95 * wlan_cm_connect_rsp() - Connection manager connect response 96 * @vdev: vdev pointer 97 * @resp: Connect response 98 * 99 * Return: QDF_STATUS 100 */ 101 QDF_STATUS wlan_cm_connect_rsp(struct wlan_objmgr_vdev *vdev, 102 struct wlan_cm_connect_resp *resp); 103 104 /** 105 * wlan_cm_bss_peer_delete_ind() - Connection manager peer delete indication 106 * @vdev: vdev pointer 107 * @peer_mac: Peer mac address 108 * 109 * Return: QDF_STATUS 110 */ 111 QDF_STATUS wlan_cm_bss_peer_delete_ind(struct wlan_objmgr_vdev *vdev, 112 struct qdf_mac_addr *peer_mac); 113 114 /** 115 * wlan_cm_bss_peer_delete_rsp() - Connection manager peer delete response 116 * @vdev: vdev pointer 117 * @status: status 118 * 119 * Return: QDF_STATUS 120 */ 121 QDF_STATUS wlan_cm_bss_peer_delete_rsp(struct wlan_objmgr_vdev *vdev, 122 uint32_t status); 123 124 /** 125 * wlan_cm_disconnect_rsp() - Connection manager disconnect response 126 * @vdev: vdev pointer 127 * @resp: disconnect response 128 * 129 * Return: QDF_STATUS 130 */ 131 QDF_STATUS wlan_cm_disconnect_rsp(struct wlan_objmgr_vdev *vdev, 132 struct wlan_cm_discon_rsp *resp); 133 134 /** 135 * wlan_cm_set_max_connect_attempts() - Set max connect attempts 136 * @vdev: vdev pointer 137 * @max_connect_attempts: max connect attempts to be set. 138 * 139 * Set max connect attempts. Max value is limited to CM_MAX_CONNECT_ATTEMPTS. 140 * 141 * Return: void 142 */ 143 void wlan_cm_set_max_connect_attempts(struct wlan_objmgr_vdev *vdev, 144 uint8_t max_connect_attempts); 145 146 /** 147 * wlan_cm_set_max_connect_timeout() - Set max connect timeout 148 * @vdev: vdev pointer 149 * @max_connect_timeout: max connect timeout to be set. 150 * 151 * Set max connect timeout. 152 * 153 * Return: void 154 */ 155 void wlan_cm_set_max_connect_timeout(struct wlan_objmgr_vdev *vdev, 156 uint32_t max_connect_timeout); 157 158 /** 159 * wlan_cm_is_vdev_connecting() - check if vdev is in conneting state 160 * @vdev: vdev pointer 161 * 162 * Return: bool 163 */ 164 bool wlan_cm_is_vdev_connecting(struct wlan_objmgr_vdev *vdev); 165 166 /** 167 * wlan_cm_is_vdev_connected() - check if vdev is in conneted state 168 * @vdev: vdev pointer 169 * 170 * Return: bool 171 */ 172 bool wlan_cm_is_vdev_connected(struct wlan_objmgr_vdev *vdev); 173 174 /** 175 * wlan_cm_is_vdev_active() - check if vdev is in active state ie conneted or 176 * roaming state 177 * @vdev: vdev pointer 178 * 179 * Return: bool 180 */ 181 bool wlan_cm_is_vdev_active(struct wlan_objmgr_vdev *vdev); 182 183 /** 184 * wlan_cm_is_vdev_disconnecting() - check if vdev is in disconneting state 185 * @vdev: vdev pointer 186 * 187 * Return: bool 188 */ 189 bool wlan_cm_is_vdev_disconnecting(struct wlan_objmgr_vdev *vdev); 190 191 /** 192 * wlan_cm_is_vdev_disconnected() - check if vdev is disconnected/init state 193 * @vdev: vdev pointer 194 * 195 * Return: bool 196 */ 197 bool wlan_cm_is_vdev_disconnected(struct wlan_objmgr_vdev *vdev); 198 199 /** 200 * wlan_cm_is_vdev_roaming() - check if vdev is in roaming state 201 * @vdev: vdev pointer 202 * 203 * Return: bool 204 */ 205 bool wlan_cm_is_vdev_roaming(struct wlan_objmgr_vdev *vdev); 206 207 #ifdef WLAN_FEATURE_ROAM_OFFLOAD 208 /** 209 * wlan_cm_is_vdev_roam_started() - check if vdev is in roaming state and 210 * roam started sub stated 211 * @vdev: vdev pointer 212 * 213 * Return: bool 214 */ 215 bool wlan_cm_is_vdev_roam_started(struct wlan_objmgr_vdev *vdev); 216 217 /** 218 * wlan_cm_is_vdev_roam_sync_inprogress() - check if vdev is in roaming state 219 * and roam sync substate 220 * @vdev: vdev pointer 221 * 222 * Return: bool 223 */ 224 bool wlan_cm_is_vdev_roam_sync_inprogress(struct wlan_objmgr_vdev *vdev); 225 #else 226 static inline bool wlan_cm_is_vdev_roam_started(struct wlan_objmgr_vdev *vdev) 227 { 228 return false; 229 } 230 231 static inline 232 bool wlan_cm_is_vdev_roam_sync_inprogress(struct wlan_objmgr_vdev *vdev) 233 { 234 return false; 235 } 236 #endif 237 238 #ifdef WLAN_FEATURE_HOST_ROAM 239 /** 240 * wlan_cm_is_vdev_roam_preauth_state() - check if vdev is in roaming state and 241 * preauth is in progress 242 * @vdev: vdev pointer 243 * 244 * Return: bool 245 */ 246 bool wlan_cm_is_vdev_roam_preauth_state(struct wlan_objmgr_vdev *vdev); 247 248 /** 249 * wlan_cm_is_vdev_roam_reassoc_state() - check if vdev is in roaming state 250 * and reassoc is in progress 251 * @vdev: vdev pointer 252 * 253 * Return: bool 254 */ 255 bool wlan_cm_is_vdev_roam_reassoc_state(struct wlan_objmgr_vdev *vdev); 256 #else 257 static inline 258 bool wlan_cm_is_vdev_roam_preauth_state(struct wlan_objmgr_vdev *vdev) 259 { 260 return false; 261 } 262 263 static inline 264 bool wlan_cm_is_vdev_roam_reassoc_state(struct wlan_objmgr_vdev *vdev) 265 { 266 return false; 267 } 268 #endif 269 270 /** 271 * wlan_cm_get_active_connect_req() - Get copy of active connect request 272 * @vdev: vdev pointer 273 * @req: pointer to the copy of the active connect request 274 * * 275 * Context: Should be called only in the conext of the 276 * cm request activation 277 * 278 * Return: true and connect req if any request is active 279 */ 280 bool wlan_cm_get_active_connect_req(struct wlan_objmgr_vdev *vdev, 281 struct wlan_cm_vdev_connect_req *req); 282 283 #ifdef WLAN_FEATURE_HOST_ROAM 284 /** 285 * wlan_cm_get_active_reassoc_req() - Get copy of active reassoc request 286 * @vdev: vdev pointer 287 * @req: pointer to the copy of the active reassoc request 288 * * 289 * Context: Should be called only in the conext of the 290 * cm request activation 291 * 292 * Return: true and reassoc req if any request is active 293 */ 294 bool wlan_cm_get_active_reassoc_req(struct wlan_objmgr_vdev *vdev, 295 struct wlan_cm_vdev_reassoc_req *req); 296 #else 297 static inline 298 bool wlan_cm_get_active_reassoc_req(struct wlan_objmgr_vdev *vdev, 299 struct wlan_cm_vdev_reassoc_req *req) 300 { 301 return false; 302 } 303 #endif 304 305 /** 306 * wlan_cm_get_active_disconnect_req() - Get copy of active disconnect request 307 * @vdev: vdev pointer 308 * @req: pointer to the copy of the active disconnect request 309 * * 310 * Context: Should be called only in the conext of the 311 * cm request activation 312 * 313 * Return: true and disconnect req if any request is active 314 */ 315 bool wlan_cm_get_active_disconnect_req(struct wlan_objmgr_vdev *vdev, 316 struct wlan_cm_vdev_discon_req *req); 317 318 /** 319 * wlan_cm_reason_code_to_str() - return string conversion of reason code 320 * @reason: reason code. 321 * 322 * This utility function helps log string conversion of reason code. 323 * 324 * Return: string conversion of reason code, if match found; 325 * "Unknown" otherwise. 326 */ 327 const char *wlan_cm_reason_code_to_str(enum wlan_reason_code reason); 328 329 /** 330 * wlan_cm_get_active_req_type() - return cm active request type 331 * @vdev: vdev pointer 332 * 333 * This function returns the cm active request type 334 * 335 * Return: active request type if any, otherwise return 0 336 */ 337 enum wlan_cm_active_request_type 338 wlan_cm_get_active_req_type(struct wlan_objmgr_vdev *vdev); 339 340 /** 341 * wlan_cm_get_ext_hdl() - Get connection manager ext context from vdev 342 * @vdev: vdev pointer 343 * 344 * Return: pointer to connection manager ext context 345 */ 346 cm_ext_t *wlan_cm_get_ext_hdl(struct wlan_objmgr_vdev *vdev); 347 348 #ifdef WLAN_FEATURE_HOST_ROAM 349 /** 350 * wlan_cm_reassoc_rsp() - Connection manager reassoc response 351 * @vdev: vdev pointer 352 * @resp: Connect response 353 * 354 * Return: QDF_STATUS 355 */ 356 QDF_STATUS wlan_cm_reassoc_rsp(struct wlan_objmgr_vdev *vdev, 357 struct wlan_cm_connect_resp *resp); 358 #else 359 static inline 360 QDF_STATUS wlan_cm_reassoc_rsp(struct wlan_objmgr_vdev *vdev, 361 struct wlan_cm_connect_resp *resp) 362 { 363 return QDF_STATUS_SUCCESS; 364 } 365 #endif 366 367 /** 368 * wlan_cm_hw_mode_change_resp() - HW mode change response 369 * @pdev: pdev pointer 370 * @vdev_id: vdev id 371 * @cm_id: connection ID which gave the hw mode change request 372 * @status: status of the HW mode change. 373 * 374 * Return: void 375 */ 376 #ifdef WLAN_POLICY_MGR_ENABLE 377 void wlan_cm_hw_mode_change_resp(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id, 378 wlan_cm_id cm_id, QDF_STATUS status); 379 #endif /* ifdef POLICY_MGR_ENABLE */ 380 381 #ifdef SM_ENG_HIST_ENABLE 382 /** 383 * wlan_cm_sm_history_print() - Prints SM history 384 * @vdev: Objmgr vdev 385 * 386 * API to print CM SM history 387 * 388 * Return: void 389 */ 390 void wlan_cm_sm_history_print(struct wlan_objmgr_vdev *vdev); 391 392 /** 393 * wlan_cm_req_history_print() - Prints CM request history 394 * @vdev: Objmgr vdev 395 * 396 * API to print CM request history 397 * 398 * Return: void 399 */ 400 void wlan_cm_req_history_print(struct wlan_objmgr_vdev *vdev); 401 #else 402 static inline void wlan_cm_sm_history_print(struct wlan_objmgr_vdev *vdev) 403 { 404 } 405 406 static inline void wlan_cm_req_history_print(struct wlan_objmgr_vdev *vdev) 407 {} 408 #endif 409 410 #ifdef CONN_MGR_ADV_FEATURE 411 /** 412 * wlan_cm_set_candidate_advance_filter_cb() - Set CM candidate advance 413 * filter cb 414 * @vdev: Objmgr vdev 415 * @filter_fun: CM candidate advance filter cb 416 * 417 * Return: void 418 */ 419 static inline 420 void wlan_cm_set_candidate_advance_filter_cb( 421 struct wlan_objmgr_vdev *vdev, 422 void (*filter_fun)(struct wlan_objmgr_vdev *vdev, 423 struct scan_filter *filter)) 424 { 425 } 426 427 /** 428 * wlan_cm_set_candidate_custom_sort_cb() - Set CM candidate custom sort cb 429 * @vdev: Objmgr vdev 430 * @sort_fun: CM candidate custom sort cb 431 * 432 * Return: void 433 */ 434 static inline 435 void wlan_cm_set_candidate_custom_sort_cb( 436 struct wlan_objmgr_vdev *vdev, 437 void (*sort_fun)(struct wlan_objmgr_vdev *vdev, 438 qdf_list_t *list)) 439 { 440 } 441 #else 442 void wlan_cm_set_candidate_advance_filter_cb( 443 struct wlan_objmgr_vdev *vdev, 444 void (*filter_fun)(struct wlan_objmgr_vdev *vdev, 445 struct scan_filter *filter)); 446 447 void wlan_cm_set_candidate_custom_sort_cb( 448 struct wlan_objmgr_vdev *vdev, 449 void (*sort_fun)(struct wlan_objmgr_vdev *vdev, 450 qdf_list_t *list)); 451 #endif 452 453 /** 454 * wlan_cm_get_rnr() - get rnr 455 * @vdev:vdev 456 * @cm_id: connect mgr id 457 * 458 * Return: rnr pointer 459 */ 460 struct reduced_neighbor_report *wlan_cm_get_rnr(struct wlan_objmgr_vdev *vdev, 461 wlan_cm_id cm_id); 462 #endif /* __WLAN_CM_UCFG_API_H */ 463