From 619e46370d050cdab192e417a1318f5b1c83a835 Mon Sep 17 00:00:00 2001 From: gaurank kathpalia Date: Tue, 29 Sep 2020 07:54:03 +0530 Subject: [PATCH] qcacmn: Add public API for connection manager Add public util API for connection manager to get connection states and set max connection attempts. Change-Id: I66d4318c7465e3926d6bacdc70dbb849827bf2c4 CRs-Fixed: 2787323 --- .../connection_mgr/core/src/wlan_cm_connect.c | 59 +++------ .../core/src/wlan_cm_disconnect.c | 9 +- .../connection_mgr/core/src/wlan_cm_main.c | 2 + .../connection_mgr/core/src/wlan_cm_main.h | 6 +- .../core/src/wlan_cm_main_api.h | 64 +++++++++- .../mlme/connection_mgr/core/src/wlan_cm_sm.c | 5 +- .../connection_mgr/core/src/wlan_cm_util.c | 120 +++++++++++++++++- .../dispatcher/inc/wlan_cm_api.h | 52 ++++++++ .../dispatcher/inc/wlan_cm_ucfg_api.h | 53 ++++++-- .../dispatcher/src/wlan_cm_api.c | 31 +++++ .../dispatcher/src/wlan_cm_ucfg_api.c | 40 ++++++ 11 files changed, 370 insertions(+), 71 deletions(-) diff --git a/umac/mlme/connection_mgr/core/src/wlan_cm_connect.c b/umac/mlme/connection_mgr/core/src/wlan_cm_connect.c index b8de8fbab6ed..87e9ddcc940c 100644 --- a/umac/mlme/connection_mgr/core/src/wlan_cm_connect.c +++ b/umac/mlme/connection_mgr/core/src/wlan_cm_connect.c @@ -111,10 +111,8 @@ cm_ser_connect_cb(struct wlan_serialization_command *cmd, vdev = cmd->vdev; cm_ctx = cm_get_cm_ctx(vdev); - if (!cm_ctx) { - mlme_err("cm_ctx is NULL, reason: %d", reason); + if (!cm_ctx) return QDF_STATUS_E_NULL_VALUE; - } switch (reason) { case WLAN_SER_CB_ACTIVATE_CMD: @@ -308,7 +306,6 @@ void cm_hw_mode_change_resp(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id, cm_ctx = cm_get_cm_ctx(vdev); if (!cm_ctx) { - mlme_err("cm ctx NULL"); wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_CM_ID); return; } @@ -629,9 +626,10 @@ static QDF_STATUS cm_get_valid_candidate(struct cnx_mgr *cm_ctx, QDF_STATUS status = QDF_STATUS_SUCCESS; if (cm_req->connect_req.connect_attempts >= - CM_MAX_CANDIDATE_TO_BE_TRIED) { - mlme_info("Max %d candidates tried for the conenction", - cm_req->connect_req.connect_attempts); + cm_ctx->max_connect_attempts) { + mlme_info("%d attempts tried for the connect req (cm id %d), max %d", + cm_req->connect_req.connect_attempts, + cm_req->cm_id, cm_ctx->max_connect_attempts); return QDF_STATUS_E_FAILURE; } @@ -744,10 +742,8 @@ QDF_STATUS cm_try_next_candidate(struct cnx_mgr *cm_ctx, struct cm_req *cm_req; cm_req = cm_get_req_by_cm_id(cm_ctx, resp->cm_id); - if (!cm_req) { - mlme_err("cm req NULL connect fail"); + if (!cm_req) return QDF_STATUS_E_FAILURE; - } status = cm_get_valid_candidate(cm_ctx, cm_req); if (QDF_IS_STATUS_ERROR(status)) @@ -786,10 +782,8 @@ QDF_STATUS cm_connect_active(struct cnx_mgr *cm_ctx, wlan_cm_id *cm_id) struct wlan_cm_connect_req *req; cm_req = cm_get_req_by_cm_id(cm_ctx, *cm_id); - if (!cm_req) { - mlme_err("cm req NULL for *cm_id %x", *cm_id); + if (!cm_req) return QDF_STATUS_E_INVAL; - } cm_ctx->active_cm_id = *cm_id; req = &cm_req->connect_req.req; @@ -822,10 +816,8 @@ cm_peer_create_on_bss_select_ind_resp(struct cnx_mgr *cm_ctx, wlan_cm_id *cm_id) struct cm_req *cm_req; cm_req = cm_get_req_by_cm_id(cm_ctx, *cm_id); - if (!cm_req) { - mlme_err("cm req NULL for *cm_id %x", *cm_id); + if (!cm_req) return QDF_STATUS_E_FAILURE; - } cm_create_bss_peer(cm_ctx, &cm_req->connect_req); @@ -840,10 +832,8 @@ cm_resume_connect_after_peer_create(struct cnx_mgr *cm_ctx, wlan_cm_id *cm_id) QDF_STATUS status; cm_req = cm_get_req_by_cm_id(cm_ctx, *cm_id); - if (!cm_req) { - mlme_err("cm req NULL for *cm_id %x", *cm_id); + if (!cm_req) return QDF_STATUS_E_FAILURE; - } /* * fill vdev crypto for the peer. */ @@ -906,14 +896,10 @@ QDF_STATUS cm_connect_complete(struct cnx_mgr *cm_ctx, return QDF_STATUS_SUCCESS; sm_state = cm_get_state(cm_ctx); - mlme_cm_osif_connect_complete(cm_ctx->vdev, resp); mlme_cm_connect_complete_ind(cm_ctx->vdev, resp); - - if (sm_state == WLAN_CM_S_INIT || sm_state == WLAN_CM_S_CONNECTED) { - cm_inform_if_mgr_connect_complete(cm_ctx->vdev, - resp->connect_status); - cm_inform_blm_connect_complete(cm_ctx->vdev, resp); - } + mlme_cm_osif_connect_complete(cm_ctx->vdev, resp); + cm_inform_if_mgr_connect_complete(cm_ctx->vdev, resp->connect_status); + cm_inform_blm_connect_complete(cm_ctx->vdev, resp); /* Update scan entry in case connect is success or fails with bssid */ if (!qdf_is_macaddr_zero(&resp->bssid)) { @@ -932,8 +918,8 @@ QDF_STATUS cm_connect_complete(struct cnx_mgr *cm_ctx, } /* - * update fils/wep key and inform legacy, update bcn filter and scan - * entry mlme info,, start OBSS scan for open mode. + * update fils/wep key and inform legacy, update bcn filter, + * start OBSS scan for open mode. */ cm_remove_cmd(cm_ctx, resp->cm_id); @@ -965,10 +951,8 @@ QDF_STATUS cm_connect_rsp(struct wlan_objmgr_vdev *vdev, uint32_t prefix; cm_ctx = cm_get_cm_ctx(vdev); - if (!cm_ctx) { - mlme_err("cm ctx NULL"); + if (!cm_ctx) return QDF_STATUS_E_INVAL; - } cm_id = cm_ctx->active_cm_id; prefix = CM_ID_GET_PREFIX(cm_id); @@ -1024,10 +1008,8 @@ QDF_STATUS cm_bss_select_ind_rsp(struct wlan_objmgr_vdev *vdev, struct wlan_cm_connect_rsp *resp; cm_ctx = cm_get_cm_ctx(vdev); - if (!cm_ctx) { - mlme_err("cm ctx NULL"); + if (!cm_ctx) return QDF_STATUS_E_INVAL; - } cm_id = cm_ctx->active_cm_id; prefix = CM_ID_GET_PREFIX(cm_id); @@ -1086,10 +1068,8 @@ QDF_STATUS cm_bss_peer_create_rsp(struct wlan_objmgr_vdev *vdev, struct wlan_cm_connect_rsp *resp; cm_ctx = cm_get_cm_ctx(vdev); - if (!cm_ctx) { - mlme_err("cm ctx NULL"); + if (!cm_ctx) return QDF_STATUS_E_INVAL; - } cm_id = cm_ctx->active_cm_id; prefix = CM_ID_GET_PREFIX(cm_id); @@ -1252,11 +1232,8 @@ QDF_STATUS cm_connect_start_req(struct wlan_objmgr_vdev *vdev, QDF_STATUS status; cm_ctx = cm_get_cm_ctx(vdev); - - if (!cm_ctx) { - mlme_err("cm ctx NULL"); + if (!cm_ctx) return QDF_STATUS_E_INVAL; - } cm_vdev_scan_cancel(wlan_vdev_get_pdev(cm_ctx->vdev), cm_ctx->vdev); diff --git a/umac/mlme/connection_mgr/core/src/wlan_cm_disconnect.c b/umac/mlme/connection_mgr/core/src/wlan_cm_disconnect.c index cb5348877dd8..791483b68d5d 100644 --- a/umac/mlme/connection_mgr/core/src/wlan_cm_disconnect.c +++ b/umac/mlme/connection_mgr/core/src/wlan_cm_disconnect.c @@ -137,10 +137,8 @@ QDF_STATUS cm_disconnect_active(struct cnx_mgr *cm_ctx, wlan_cm_id *cm_id) struct cm_req *cm_req; cm_req = cm_get_req_by_cm_id(cm_ctx, *cm_id); - if (!cm_req) { - mlme_err("cm req NULL connect fail"); + if (!cm_req) return QDF_STATUS_E_INVAL; - } cm_ctx->active_cm_id = *cm_id; @@ -185,11 +183,8 @@ QDF_STATUS cm_disconnect_start_req(struct wlan_objmgr_vdev *vdev, QDF_STATUS status; cm_ctx = cm_get_cm_ctx(vdev); - - if (!cm_ctx) { - mlme_err("cm ctx NULL"); + if (!cm_ctx) return QDF_STATUS_E_INVAL; - } /* * This would be freed as part of removal from cm req list if adding diff --git a/umac/mlme/connection_mgr/core/src/wlan_cm_main.c b/umac/mlme/connection_mgr/core/src/wlan_cm_main.c index 102e00b1446c..585cf3c318af 100644 --- a/umac/mlme/connection_mgr/core/src/wlan_cm_main.c +++ b/umac/mlme/connection_mgr/core/src/wlan_cm_main.c @@ -84,6 +84,8 @@ QDF_STATUS wlan_cm_init(struct vdev_mlme_obj *vdev_mlme) vdev_mlme->cnx_mgr_ctx = NULL; return QDF_STATUS_E_NOMEM; } + vdev_mlme->cnx_mgr_ctx->max_connect_attempts = + CM_MAX_CONNECT_ATTEMPTS; qdf_list_create(&vdev_mlme->cnx_mgr_ctx->req_list, CM_MAX_REQ); cm_req_lock_create(vdev_mlme->cnx_mgr_ctx); diff --git a/umac/mlme/connection_mgr/core/src/wlan_cm_main.h b/umac/mlme/connection_mgr/core/src/wlan_cm_main.h index 856bfdb3fe40..9a34423e2082 100644 --- a/umac/mlme/connection_mgr/core/src/wlan_cm_main.h +++ b/umac/mlme/connection_mgr/core/src/wlan_cm_main.h @@ -28,8 +28,8 @@ #ifdef FEATURE_CM_ENABLE #include -/* Max candidate to be tried to connect */ -#define CM_MAX_CANDIDATE_TO_BE_TRIED 5 +/* Max candidate/attempts to be tried to connect */ +#define CM_MAX_CONNECT_ATTEMPTS 5 /* Max time to wait for scan for SSID */ #define CM_SCAN_MAX_TIME 5000 /* Max connect/disconnect/roam req that can be queued at a time */ @@ -169,6 +169,7 @@ struct connect_ies { * @req_ie: request ies for connect/disconnect set by osif/user separately from * connect req * @global_cmd_id: global cmd id for getting cm id for connect/disconnect req + * @max_connect_attempts: Max attempts to be tried for a connect req */ struct cnx_mgr { struct wlan_objmgr_vdev *vdev; @@ -185,6 +186,7 @@ struct cnx_mgr { bool force_rsne_override; struct connect_ies req_ie; qdf_atomic_t global_cmd_id; + uint8_t max_connect_attempts; }; /** diff --git a/umac/mlme/connection_mgr/core/src/wlan_cm_main_api.h b/umac/mlme/connection_mgr/core/src/wlan_cm_main_api.h index 0c97ef20f786..2e12fcaa6e58 100644 --- a/umac/mlme/connection_mgr/core/src/wlan_cm_main_api.h +++ b/umac/mlme/connection_mgr/core/src/wlan_cm_main_api.h @@ -308,13 +308,17 @@ static inline bool cm_ser_get_blocking_cmd(void) */ wlan_cm_id cm_get_cm_id(struct cnx_mgr *cm_ctx, enum wlan_cm_source source); +struct cnx_mgr *cm_get_cm_ctx_fl(struct wlan_objmgr_vdev *vdev, + const char *func, uint32_t line); + /** * cm_get_cm_ctx() - Get connection manager context from vdev * @vdev: vdev object pointer * * Return: pointer to connection manager context */ -struct cnx_mgr *cm_get_cm_ctx(struct wlan_objmgr_vdev *vdev); +#define cm_get_cm_ctx(vdev) \ + cm_get_cm_ctx_fl(vdev, __func__, __LINE__) /** * cm_reset_active_cm_id() - Reset active cm_id from cm context, if its same as @@ -417,6 +421,9 @@ QDF_STATUS cm_add_req_to_list_and_indicate_osif(struct cnx_mgr *cm_ctx, struct cm_req *cm_req, enum wlan_cm_source source); +struct cm_req *cm_get_req_by_cm_id_fl(struct cnx_mgr *cm_ctx, wlan_cm_id cm_id, + const char *func, uint32_t line); + /** * cm_get_req_by_cm_id() - Get cm req matching the cm id * @cm_ctx: connection manager context @@ -428,7 +435,8 @@ QDF_STATUS cm_add_req_to_list_and_indicate_osif(struct cnx_mgr *cm_ctx, * * Return: cm req from the req list whose cm id matches the argument */ -struct cm_req *cm_get_req_by_cm_id(struct cnx_mgr *cm_ctx, wlan_cm_id cm_id); +#define cm_get_req_by_cm_id(cm_ctx, cm_id) \ + cm_get_req_by_cm_id_fl(cm_ctx, cm_id, __func__, __LINE__) /** * cm_vdev_scan_cancel() - cancel all scans for vdev @@ -440,4 +448,56 @@ struct cm_req *cm_get_req_by_cm_id(struct cnx_mgr *cm_ctx, wlan_cm_id cm_id); void cm_vdev_scan_cancel(struct wlan_objmgr_pdev *pdev, struct wlan_objmgr_vdev *vdev); +/** + * cm_set_max_connect_attempts() - Set max connect attempts + * @vdev: vdev pointer + * @max_connect_attempts: max connect attempts to be set. + * + * Set max connect attempts. Max value is limited to CM_MAX_CONNECT_ATTEMPTS. + * + * Return: void + */ +void cm_set_max_connect_attempts(struct wlan_objmgr_vdev *vdev, + uint8_t max_connect_attempts); + +/** + * cm_is_vdev_connecting() - check if vdev is in conneting state + * @vdev: vdev pointer + * + * Return: bool + */ +bool cm_is_vdev_connecting(struct wlan_objmgr_vdev *vdev); + +/** + * cm_is_vdev_connected() - check if vdev is in conneted state + * @vdev: vdev pointer + * + * Return: bool + */ +bool cm_is_vdev_connected(struct wlan_objmgr_vdev *vdev); + +/** + * cm_is_vdev_disconnecting() - check if vdev is in disconneting state + * @vdev: vdev pointer + * + * Return: bool + */ +bool cm_is_vdev_disconnecting(struct wlan_objmgr_vdev *vdev); + +/** + * cm_is_vdev_disconnected() - check if vdev is disconnected/init state + * @vdev: vdev pointer + * + * Return: bool + */ +bool cm_is_vdev_disconnected(struct wlan_objmgr_vdev *vdev); + +/** + * cm_is_vdev_roaming() - check if vdev is in roaming state + * @vdev: vdev pointer + * + * Return: bool + */ +bool cm_is_vdev_roaming(struct wlan_objmgr_vdev *vdev); + #endif /* __WLAN_CM_MAIN_API_H__ */ diff --git a/umac/mlme/connection_mgr/core/src/wlan_cm_sm.c b/umac/mlme/connection_mgr/core/src/wlan_cm_sm.c index 16de6016d54e..21f613466aa8 100644 --- a/umac/mlme/connection_mgr/core/src/wlan_cm_sm.c +++ b/umac/mlme/connection_mgr/core/src/wlan_cm_sm.c @@ -853,10 +853,9 @@ QDF_STATUS cm_sm_deliver_event(struct wlan_objmgr_vdev *vdev, } cm_ctx = cm_get_cm_ctx(vdev); - if (!cm_ctx) { - mlme_err("cm_ctx is NULL"); + if (!cm_ctx) return QDF_STATUS_E_FAILURE; - } + cm_lock_acquire(cm_ctx); /* store entry state and sub state for prints */ diff --git a/umac/mlme/connection_mgr/core/src/wlan_cm_util.c b/umac/mlme/connection_mgr/core/src/wlan_cm_util.c index d18e04740cec..2e4eeb0044c0 100644 --- a/umac/mlme/connection_mgr/core/src/wlan_cm_util.c +++ b/umac/mlme/connection_mgr/core/src/wlan_cm_util.c @@ -47,15 +47,21 @@ wlan_cm_id cm_get_cm_id(struct cnx_mgr *cm_ctx, enum wlan_cm_source source) return cmd_id; } -struct cnx_mgr *cm_get_cm_ctx(struct wlan_objmgr_vdev *vdev) +struct cnx_mgr *cm_get_cm_ctx_fl(struct wlan_objmgr_vdev *vdev, + const char *func, uint32_t line) { struct vdev_mlme_obj *vdev_mlme; + struct cnx_mgr *cm_ctx = NULL; vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev); - if (!vdev_mlme) - return NULL; + if (vdev_mlme) + cm_ctx = vdev_mlme->cnx_mgr_ctx; - return vdev_mlme->cnx_mgr_ctx; + if (!cm_ctx) + mlme_nofl_err("%s:%u: cm_ctx NULL vdev %d", func, line, + wlan_vdev_get_id(vdev)); + + return cm_ctx; } void cm_reset_active_cm_id(struct wlan_objmgr_vdev *vdev, wlan_cm_id cm_id) @@ -174,7 +180,8 @@ exit: return match; } -struct cm_req *cm_get_req_by_cm_id(struct cnx_mgr *cm_ctx, wlan_cm_id cm_id) +struct cm_req *cm_get_req_by_cm_id_fl(struct cnx_mgr *cm_ctx, wlan_cm_id cm_id, + const char *func, uint32_t line) { qdf_list_node_t *cur_node = NULL, *next_node = NULL; struct cm_req * cm_req; @@ -195,6 +202,9 @@ struct cm_req *cm_get_req_by_cm_id(struct cnx_mgr *cm_ctx, wlan_cm_id cm_id) } cm_req_lock_release(cm_ctx); + mlme_nofl_info("%s:%u: cm req not found for cm id %d", func, + line, cm_id); + return NULL; } @@ -400,3 +410,103 @@ void cm_vdev_scan_cancel(struct wlan_objmgr_pdev *pdev, if (QDF_IS_STATUS_ERROR(status)) mlme_err("Cancel scan request failed"); } + +void cm_set_max_connect_attempts(struct wlan_objmgr_vdev *vdev, + uint8_t max_connect_attempts) +{ + struct cnx_mgr *cm_ctx; + + cm_ctx = cm_get_cm_ctx(vdev); + if (!cm_ctx) + return; + + cm_ctx->max_connect_attempts = + QDF_MIN(max_connect_attempts, CM_MAX_CONNECT_ATTEMPTS); + mlme_debug("max connect attempts set to %d, requested %d", + cm_ctx->max_connect_attempts, max_connect_attempts); +} + +bool cm_is_vdev_connecting(struct wlan_objmgr_vdev *vdev) +{ + struct cnx_mgr *cm_ctx; + enum wlan_cm_sm_state state; + + cm_ctx = cm_get_cm_ctx(vdev); + if (!cm_ctx) + return false; + + state = cm_get_state(cm_ctx); + + if (state == WLAN_CM_S_CONNECTING) + return true; + + return false; +} + +bool cm_is_vdev_connected(struct wlan_objmgr_vdev *vdev) +{ + struct cnx_mgr *cm_ctx; + enum wlan_cm_sm_state state; + + cm_ctx = cm_get_cm_ctx(vdev); + if (!cm_ctx) + return false; + + state = cm_get_state(cm_ctx); + + if (state == WLAN_CM_S_CONNECTED) + return true; + + return false; +} + +bool cm_is_vdev_disconnecting(struct wlan_objmgr_vdev *vdev) +{ + struct cnx_mgr *cm_ctx; + enum wlan_cm_sm_state state; + + cm_ctx = cm_get_cm_ctx(vdev); + if (!cm_ctx) + return false; + + state = cm_get_state(cm_ctx); + + if (state == WLAN_CM_S_DISCONNECTING) + return true; + + return false; +} + +bool cm_is_vdev_disconnected(struct wlan_objmgr_vdev *vdev) +{ + struct cnx_mgr *cm_ctx; + enum wlan_cm_sm_state state; + + cm_ctx = cm_get_cm_ctx(vdev); + if (!cm_ctx) + return false; + + state = cm_get_state(cm_ctx); + + if (state == WLAN_CM_S_INIT) + return true; + + return false; +} + +bool cm_is_vdev_roaming(struct wlan_objmgr_vdev *vdev) +{ + struct cnx_mgr *cm_ctx; + enum wlan_cm_sm_state state; + + cm_ctx = cm_get_cm_ctx(vdev); + if (!cm_ctx) + return false; + + state = cm_get_state(cm_ctx); + + if (state == WLAN_CM_S_ROAMING) + return true; + + return false; +} diff --git a/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_api.h b/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_api.h index 2a9b1d08f086..6a1cd46689a7 100644 --- a/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_api.h +++ b/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_api.h @@ -109,6 +109,58 @@ QDF_STATUS wlan_cm_bss_peer_delete_rsp(struct wlan_objmgr_vdev *vdev, QDF_STATUS wlan_cm_disconnect_rsp(struct wlan_objmgr_vdev *vdev, struct wlan_cm_discon_rsp cm_discon_rsp); +/** + * wlan_cm_set_max_connect_attempts() - Set max connect attempts + * @vdev: vdev pointer + * @max_connect_attempts: max connect attempts to be set. + * + * Set max connect attempts. Max value is limited to CM_MAX_CONNECT_ATTEMPTS. + * + * Return: void + */ +void wlan_cm_set_max_connect_attempts(struct wlan_objmgr_vdev *vdev, + uint8_t max_connect_attempts); + +/** + * wlan_cm_is_vdev_connecting() - check if vdev is in conneting state + * @vdev: vdev pointer + * + * Return: bool + */ +bool wlan_cm_is_vdev_connecting(struct wlan_objmgr_vdev *vdev); + +/** + * wlan_cm_is_vdev_connected() - check if vdev is in conneted state + * @vdev: vdev pointer + * + * Return: bool + */ +bool wlan_cm_is_vdev_connected(struct wlan_objmgr_vdev *vdev); + +/** + * wlan_cm_is_vdev_disconnecting() - check if vdev is in disconneting state + * @vdev: vdev pointer + * + * Return: bool + */ +bool wlan_cm_is_vdev_disconnecting(struct wlan_objmgr_vdev *vdev); + +/** + * wlan_cm_is_vdev_disconnected() - check if vdev is disconnected/init state + * @vdev: vdev pointer + * + * Return: bool + */ +bool wlan_cm_is_vdev_disconnected(struct wlan_objmgr_vdev *vdev); + +/** + * wlan_cm_is_vdev_roaming() - check if vdev is in roaming state + * @vdev: vdev pointer + * + * Return: bool + */ +bool wlan_cm_is_vdev_roaming(struct wlan_objmgr_vdev *vdev); + /** * wlan_cm_reason_code_to_str() - return string conversion of reason code * @reason: reason code. diff --git a/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_ucfg_api.h b/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_ucfg_api.h index 15cef3b96545..066f902d3df4 100644 --- a/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_ucfg_api.h +++ b/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_ucfg_api.h @@ -34,13 +34,8 @@ * * Return: QDF_STATUS */ -static inline QDF_STATUS ucfg_cm_start_connect(struct wlan_objmgr_vdev *vdev, - struct wlan_cm_connect_req *req) -{ - return wlan_cm_start_connect(vdev, req); -} - + struct wlan_cm_connect_req *req); /** * ucfg_cm_start_disconnect() - disconnect start request @@ -49,12 +44,48 @@ QDF_STATUS ucfg_cm_start_connect(struct wlan_objmgr_vdev *vdev, * * Return: QDF_STATUS */ -static inline QDF_STATUS ucfg_cm_start_disconnect(struct wlan_objmgr_vdev *vdev, - struct wlan_cm_disconnect_req *req) -{ - return wlan_cm_start_disconnect(vdev, req); -} + struct wlan_cm_disconnect_req *req); + +/** + * ucfg_cm_is_vdev_connecting() - check if vdev is in conneting state + * @vdev: vdev pointer + * + * Return: bool + */ +bool ucfg_cm_is_vdev_connecting(struct wlan_objmgr_vdev *vdev); + +/** + * ucfg_cm_is_vdev_connected() - check if vdev is in conneted state + * @vdev: vdev pointer + * + * Return: bool + */ +bool ucfg_cm_is_vdev_connected(struct wlan_objmgr_vdev *vdev); + +/** + * ucfg_cm_is_vdev_disconnecting() - check if vdev is in disconneting state + * @vdev: vdev pointer + * + * Return: bool + */ +bool ucfg_cm_is_vdev_disconnecting(struct wlan_objmgr_vdev *vdev); + +/** + * ucfg_cm_is_vdev_disconnected() - check if vdev is disconnected/init state + * @vdev: vdev pointer + * + * Return: bool + */ +bool ucfg_cm_is_vdev_disconnected(struct wlan_objmgr_vdev *vdev); + +/** + * ucfg_cm_is_vdev_roaming() - check if vdev is in roaming state + * @vdev: vdev pointer + * + * Return: bool + */ +bool ucfg_cm_is_vdev_roaming(struct wlan_objmgr_vdev *vdev); /** * ucfg_cm_reason_code_to_str() - return string conversion of reason code diff --git a/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_api.c b/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_api.c index 7454f392265e..d8055d7af30a 100644 --- a/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_api.c +++ b/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_api.c @@ -72,6 +72,37 @@ QDF_STATUS wlan_cm_disconnect_rsp(struct wlan_objmgr_vdev *vdev, return QDF_STATUS_SUCCESS; } +void wlan_cm_set_max_connect_attempts(struct wlan_objmgr_vdev *vdev, + uint8_t max_connect_attempts) +{ + cm_set_max_connect_attempts(vdev, max_connect_attempts); +} + +bool wlan_cm_is_vdev_connecting(struct wlan_objmgr_vdev *vdev) +{ + return cm_is_vdev_connecting(vdev); +} + +bool wlan_cm_is_vdev_connected(struct wlan_objmgr_vdev *vdev) +{ + return cm_is_vdev_connecting(vdev); +} + +bool wlan_cm_is_vdev_disconnecting(struct wlan_objmgr_vdev *vdev) +{ + return cm_is_vdev_connecting(vdev); +} + +bool wlan_cm_is_vdev_disconnected(struct wlan_objmgr_vdev *vdev) +{ + return cm_is_vdev_connecting(vdev); +} + +bool wlan_cm_is_vdev_roaming(struct wlan_objmgr_vdev *vdev) +{ + return cm_is_vdev_connecting(vdev); +} + const char *wlan_cm_reason_code_to_str(enum wlan_reason_code reason) { if (reason > REASON_PROP_START) diff --git a/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_ucfg_api.c b/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_ucfg_api.c index 579c71306e3d..3cc6db56f715 100644 --- a/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_ucfg_api.c +++ b/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_ucfg_api.c @@ -19,3 +19,43 @@ * * This file maintains definitaions public ucfg apis. */ + +#include +#include "connection_mgr/core/src/wlan_cm_main_api.h" + +QDF_STATUS ucfg_cm_start_connect(struct wlan_objmgr_vdev *vdev, + struct wlan_cm_connect_req *req) +{ + return cm_connect_start_req(vdev, req); +} + +QDF_STATUS ucfg_cm_start_disconnect(struct wlan_objmgr_vdev *vdev, + struct wlan_cm_disconnect_req *req) +{ + return cm_disconnect_start_req(vdev, req); +} + +bool ucfg_cm_is_vdev_connecting(struct wlan_objmgr_vdev *vdev) +{ + return cm_is_vdev_connecting(vdev); +} + +bool ucfg_cm_is_vdev_connected(struct wlan_objmgr_vdev *vdev) +{ + return cm_is_vdev_connecting(vdev); +} + +bool ucfg_cm_is_vdev_disconnecting(struct wlan_objmgr_vdev *vdev) +{ + return cm_is_vdev_connecting(vdev); +} + +bool ucfg_cm_is_vdev_disconnected(struct wlan_objmgr_vdev *vdev) +{ + return cm_is_vdev_connecting(vdev); +} + +bool ucfg_cm_is_vdev_roaming(struct wlan_objmgr_vdev *vdev) +{ + return cm_is_vdev_connecting(vdev); +}