From 30f4cf7c40b6197b038992c2befe5d02e85f401b Mon Sep 17 00:00:00 2001 From: Ashish Kumar Dhanotiya Date: Mon, 10 Aug 2020 11:32:44 +0530 Subject: [PATCH] qcacmn: Add mlme apis and callbacks for connection manager Add support for mlme apis and callbacks for connection manager infrastructure. Change-Id: Ia7a4060dc2bda41962569a298875bde7cd7ba283 CRs-Fixed: 2758028 --- .../dispatcher/inc/wlan_cm_api.h | 52 +++++ .../dispatcher/src/wlan_cm_api.c | 30 +++ umac/mlme/include/wlan_mlme_cmn.h | 183 ++++++++++++++++++ .../dispatcher/src/wlan_cmn_mlme_main.c | 132 +++++++++++++ 4 files changed, 397 insertions(+) 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 22e1472a3a0d..7b5cb163ea2d 100644 --- a/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_api.h +++ b/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_api.h @@ -46,6 +46,58 @@ QDF_STATUS wlan_cm_start_connect(struct wlan_objmgr_vdev *vdev, QDF_STATUS wlan_cm_start_disconnect(struct wlan_objmgr_vdev *vdev, struct wlan_cm_disconnect_req *req); +/** + * wlan_cm_bss_peer_create_rsp() - Connection manager bss peer create response + * @vdev: vdev pointer + * @status: Status + * @peer_mac: Peer mac address + * + * Return: QDF_STATUS + */ +QDF_STATUS wlan_cm_bss_peer_create_rsp(struct wlan_objmgr_vdev *vdev, + uint32_t status, + struct qdf_mac_addr *peer_mac); + +/** + * wlan_cm_connect_rsp() - Connection manager connect response + * @vdev: vdev pointer + * @cm_conn_rsp: Connect response + * + * Return: QDF_STATUS + */ +QDF_STATUS wlan_cm_connect_rsp(struct wlan_objmgr_vdev *vdev, + struct wlan_cm_connect_rsp *cm_conn_rsp); + +/** + * wlan_cm_bss_peer_delete_ind() - Connection manager peer delete indication + * @vdev: vdev pointer + * @peer_mac: Peer mac address + * + * Return: QDF_STATUS + */ +QDF_STATUS wlan_cm_bss_peer_delete_ind(struct wlan_objmgr_vdev *vdev, + struct qdf_mac_addr *peer_mac); + +/** + * wlan_cm_bss_peer_delete_rsp() - Connection manager peer delete response + * @vdev: vdev pointer + * @status: status + * + * Return: QDF_STATUS + */ +QDF_STATUS wlan_cm_bss_peer_delete_rsp(struct wlan_objmgr_vdev *vdev, + uint32_t status); + +/** + * wlan_cm_disconnect_rsp() - Connection manager disconnect response + * @vdev: vdev pointer + * @cm_discon_rsp: disconnect response + * + * Return: QDF_STATUS + */ +QDF_STATUS wlan_cm_disconnect_rsp(struct wlan_objmgr_vdev *vdev, + struct wlan_cm_discon_rsp cm_discon_rsp); + #endif #endif /* __WLAN_CM_UCFG_API_H */ 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 0e10d2f25a92..d468ace1f14e 100644 --- a/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_api.c +++ b/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_api.c @@ -35,3 +35,33 @@ QDF_STATUS wlan_cm_start_disconnect(struct wlan_objmgr_vdev *vdev, return cm_disconnect_start_req(vdev, req); } +QDF_STATUS wlan_cm_bss_peer_create_rsp(struct wlan_objmgr_vdev *vdev, + uint32_t status, + struct qdf_mac_addr *peer_mac) +{ + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS wlan_cm_connect_rsp(struct wlan_objmgr_vdev *vdev, + struct wlan_cm_connect_rsp *cm_conn_rsp) +{ + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS wlan_cm_bss_peer_delete_ind(struct wlan_objmgr_vdev *vdev, + struct qdf_mac_addr *peer_mac) +{ + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS wlan_cm_bss_peer_delete_rsp(struct wlan_objmgr_vdev *vdev, + uint32_t status) +{ + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS wlan_cm_disconnect_rsp(struct wlan_objmgr_vdev *vdev, + struct wlan_cm_discon_rsp cm_discon_rsp) +{ + return QDF_STATUS_SUCCESS; +} diff --git a/umac/mlme/include/wlan_mlme_cmn.h b/umac/mlme/include/wlan_mlme_cmn.h index 3991f6aee827..5ebabf0e790c 100644 --- a/umac/mlme/include/wlan_mlme_cmn.h +++ b/umac/mlme/include/wlan_mlme_cmn.h @@ -23,6 +23,9 @@ #include #include #include +#ifdef FEATURE_CM_ENABLE +#include "wlan_cm_public_struct.h" +#endif /** * struct vdev_mlme_ext_ops - VDEV MLME legacy callbacks structure @@ -49,6 +52,19 @@ * required by serialization * @mlme_multi_vdev_restart_resp: callback to process multivdev restart * response + * @mlme_cm_ext_connect_start: Callback to start connect request + * @mlme_cm_ext_connect_active: Callback to indicate connect active + * @mlme_cm_ext_bss_peer_create_req: Callback to bss peer create request + * @mlme_cm_ext_connect_req: Callback for connect request to LIM + * @mlme_cm_ext_connect_complete: Callback to indicate connect complete + * @mlme_cm_ext_disconnect_start : Callback to start disconnect request + * @mlme_cm_ext_disconnect_active: Callback to indicate disconnect active + * @mlme_cm_ext_bss_peer_delete_req: Callback to bss peer delete request + * @mlme_cm_ext_disconnect_complete: Callback to indicate disconnect + * complete + * @mlme_cm_ext_osif_connect: Callback to indicate connect complete + * @mlme_cm_ext_osif_disconnect: Callback to indicate disconnect complete + * @mlme_cm_ext_vdev_down: Callback to send vdev down to FW */ struct mlme_ext_ops { QDF_STATUS (*mlme_psoc_ext_hdl_create)( @@ -80,6 +96,42 @@ struct mlme_ext_ops { QDF_STATUS (*mlme_multi_vdev_restart_resp)( struct wlan_objmgr_psoc *psoc, struct multi_vdev_restart_resp *resp); +#ifdef FEATURE_CM_ENABLE + QDF_STATUS (*mlme_cm_ext_connect_start)( + struct wlan_objmgr_vdev *vdev, + struct wlan_cm_connect_req *cm_conn_req); + QDF_STATUS (*mlme_cm_ext_connect_active)( + struct wlan_objmgr_vdev *vdev, + struct wlan_cm_vdev_connect_req *vdev_connect_req); + QDF_STATUS (*mlme_cm_ext_bss_peer_create_req)( + struct wlan_objmgr_vdev *vdev, + struct qdf_mac_addr *peer_mac); + QDF_STATUS (*mlme_cm_ext_connect_req)( + struct wlan_objmgr_vdev *vdev, + struct wlan_cm_vdev_connect_req *vdev_connect_req); + QDF_STATUS (*mlme_cm_ext_connect_complete)( + struct wlan_objmgr_vdev *vdev, + struct wlan_cm_connect_rsp *connect_rsp); + QDF_STATUS (*mlme_cm_ext_disconnect_start)( + struct wlan_objmgr_vdev *vdev, + struct wlan_cm_disconnect_req *cm_conn_req); + QDF_STATUS (*mlme_cm_ext_disconnect_active) + (struct wlan_objmgr_vdev *vdev, + struct wlan_cm_vdev_discon_req *vdev_disconnect_req); + QDF_STATUS (*mlme_cm_ext_bss_peer_delete_req)( + struct wlan_objmgr_vdev *vdev); + QDF_STATUS (*mlme_cm_ext_disconnect_complete)( + struct wlan_objmgr_vdev *vdev, + struct wlan_cm_discon_rsp *cm_disconnect_rsp); + QDF_STATUS (*mlme_cm_ext_osif_connect)( + struct wlan_objmgr_vdev *vdev, + struct wlan_cm_connect_rsp *cm_connect_rsp); + QDF_STATUS (*mlme_cm_ext_osif_disconnect)( + struct wlan_objmgr_vdev *vdev, + struct wlan_cm_discon_rsp *cm_disconnect_rsp); + QDF_STATUS (*mlme_cm_ext_vdev_down)( + struct wlan_objmgr_vdev *vdev); +#endif }; /** @@ -277,4 +329,135 @@ QDF_STATUS wlan_cmn_mlme_deinit(void); */ QDF_STATUS mlme_vdev_ops_ext_hdl_delete_rsp(struct wlan_objmgr_psoc *psoc, struct vdev_delete_response *rsp); + +#ifdef FEATURE_CM_ENABLE +/** + * mlme_cm_ops_ext_connect_start - Connection manager connect start + * handler + * @vdev: VDEV object + * @req: Connection manager connect request + * + * Return: QDF_STATUS + */ +QDF_STATUS mlme_cm_ops_ext_connect_start(struct wlan_objmgr_vdev *vdev, + struct wlan_cm_connect_req *req); + +/** + * mlme_cm_ops_ext_connect_active - Connection manager indicate connect + * active handler + * @vdev: VDEV object + * @req: Vdev connect request + * + * Return: QDF_STATUS + */ +QDF_STATUS mlme_cm_ops_ext_connect_active(struct wlan_objmgr_vdev *vdev, + struct wlan_cm_vdev_connect_req *req); + +/** + * mlme_cm_ops_ext_bss_peer_create_req - Connection manager bss peer + * create request handler + * @vdev: VDEV object + * @peer_mac: Peer mac address + * + * Return: QDF_STATUS + */ +QDF_STATUS mlme_cm_ops_ext_bss_peer_create_req(struct wlan_objmgr_vdev *vdev, + struct qdf_mac_addr *peer_mac); + +/** + * mlme_cm_ops_ext_connect_req - Connection manager connect request handler + * @vdev: VDEV object + * @req: Vdev connect request + * + * Return: QDF_STATUS + */ +QDF_STATUS mlme_cm_ops_ext_connect_req(struct wlan_objmgr_vdev *vdev, + struct wlan_cm_vdev_connect_req *req); + +/** + * mlme_cm_ops_ext_connect_complete - Connection manager connect complete + * handler + * @vdev: VDEV object + * @rsp: Connection manager connect response + * + * Return: QDF_STATUS + */ +QDF_STATUS mlme_cm_ops_ext_connect_complete(struct wlan_objmgr_vdev *vdev, + struct wlan_cm_connect_rsp *rsp); + +/** + * mlme_cm_ops_ext_disconnect_start - Connection manager disconnect start + * handler + * @vdev: VDEV object + * @req: Connection manager disconnect request + * + * Return: QDF_STATUS + */ +QDF_STATUS mlme_cm_ops_ext_disconnect_start(struct wlan_objmgr_vdev *vdev, + struct wlan_cm_disconnect_req *req); + +/** + * mlme_cm_ops_ext_disconnect_active - Connection manager disconnect + * active handler + * @vdev: VDEV object + * @req: vdev disconnect request + * + * Return: QDF_STATUS + */ +QDF_STATUS +mlme_cm_ops_ext_disconnect_active(struct wlan_objmgr_vdev *vdev, + struct wlan_cm_vdev_discon_req *req); + +/** + * mlme_cm_ops_ext_bss_peer_delete_req - Connection manager bss peer delete + * request handler + * @vdev: VDEV object + * + * Return: QDF_STATUS + */ +QDF_STATUS +mlme_cm_ops_ext_bss_peer_delete_req(struct wlan_objmgr_vdev *vdev); + +/** + * mlme_cm_ops_ext_disconnect_complete - Connection manager disconnect + * complete handler + * @vdev: VDEV object + * @rsp: Connection manager disconnect response + * + * Return: QDF_STATUS + */ +QDF_STATUS mlme_cm_ops_ext_disconnect_complete(struct wlan_objmgr_vdev *vdev, + struct wlan_cm_discon_rsp *rsp); + +/** + * mlme_cm_ops_ext_osif_connect - Connection manager osif connect handler + * @vdev: VDEV object + * @rsp: Connection manager connect response + * + * Return: QDF_STATUS + */ +QDF_STATUS mlme_cm_ops_ext_osif_connect(struct wlan_objmgr_vdev *vdev, + struct wlan_cm_connect_rsp *rsp); + +/** + * mlme_cm_ops_ext_osif_disconnect - Connection manager osif disconnect + * handler + * @vdev: VDEV object + * @rsp: Connection manager disconnect response + * + * Return: QDF_STATUS + */ +QDF_STATUS mlme_cm_ops_ext_osif_disconnect(struct wlan_objmgr_vdev *vdev, + struct wlan_cm_discon_rsp *rsp); + +/** + * mlme_cm_ops_ext_osif_disconnect - Function to send vdev down to FW + * @vdev: VDEV object + * + * Return: QDF_STATUS + */ +QDF_STATUS mlme_cm_ext_vdev_down(struct wlan_objmgr_vdev *vdev); + +#endif + #endif diff --git a/umac/mlme/mlme_objmgr/dispatcher/src/wlan_cmn_mlme_main.c b/umac/mlme/mlme_objmgr/dispatcher/src/wlan_cmn_mlme_main.c index 8098c90cc1a2..2b1278b88480 100644 --- a/umac/mlme/mlme_objmgr/dispatcher/src/wlan_cmn_mlme_main.c +++ b/umac/mlme/mlme_objmgr/dispatcher/src/wlan_cmn_mlme_main.c @@ -217,6 +217,138 @@ QDF_STATUS mlme_vdev_ops_ext_hdl_multivdev_restart_resp( return ret; } +#ifdef FEATURE_CM_ENABLE +QDF_STATUS mlme_cm_ops_ext_connect_start(struct wlan_objmgr_vdev *vdev, + struct wlan_cm_connect_req *req) +{ + QDF_STATUS ret = QDF_STATUS_SUCCESS; + + if ((glbl_ops) && glbl_ops->mlme_cm_ext_connect_start) + ret = glbl_ops->mlme_cm_ext_connect_start(vdev, req); + + return ret; +} + +QDF_STATUS mlme_cm_ops_ext_connect_active(struct wlan_objmgr_vdev *vdev, + struct wlan_cm_vdev_connect_req *req) +{ + QDF_STATUS ret = QDF_STATUS_SUCCESS; + + if ((glbl_ops) && glbl_ops->mlme_cm_ext_connect_active) + ret = glbl_ops->mlme_cm_ext_connect_active(vdev, req); + + return ret; +} + +QDF_STATUS mlme_cm_ops_ext_bss_peer_create_req(struct wlan_objmgr_vdev *vdev, + struct qdf_mac_addr *peer_mac) +{ + QDF_STATUS ret = QDF_STATUS_SUCCESS; + + if ((glbl_ops) && glbl_ops->mlme_cm_ext_bss_peer_create_req) + ret = glbl_ops->mlme_cm_ext_bss_peer_create_req(vdev, + peer_mac); + + return ret; +} + +QDF_STATUS mlme_cm_ops_ext_connect_req(struct wlan_objmgr_vdev *vdev, + struct wlan_cm_vdev_connect_req *req) +{ + QDF_STATUS ret = QDF_STATUS_SUCCESS; + + if ((glbl_ops) && glbl_ops->mlme_cm_ext_connect_req) + ret = glbl_ops->mlme_cm_ext_connect_req(vdev, req); + + return ret; +} + +QDF_STATUS mlme_cm_ops_ext_connect_complete(struct wlan_objmgr_vdev *vdev, + struct wlan_cm_connect_rsp *rsp) +{ + QDF_STATUS ret = QDF_STATUS_SUCCESS; + + if ((glbl_ops) && glbl_ops->mlme_cm_ext_connect_complete) + ret = glbl_ops->mlme_cm_ext_connect_complete(vdev, rsp); + + return ret; +} + +QDF_STATUS mlme_cm_ops_ext_disconnect_start(struct wlan_objmgr_vdev *vdev, + struct wlan_cm_disconnect_req *req) +{ + QDF_STATUS ret = QDF_STATUS_SUCCESS; + + if ((glbl_ops) && glbl_ops->mlme_cm_ext_disconnect_start) + ret = glbl_ops->mlme_cm_ext_disconnect_start(vdev, req); + + return ret; +} + +QDF_STATUS +mlme_cm_ops_ext_disconnect_active(struct wlan_objmgr_vdev *vdev, + struct wlan_cm_vdev_discon_req *req) +{ + QDF_STATUS ret = QDF_STATUS_SUCCESS; + + if ((glbl_ops) && glbl_ops->mlme_cm_ext_disconnect_active) + ret = glbl_ops->mlme_cm_ext_disconnect_active(vdev, req); + + return ret; +} + +QDF_STATUS mlme_cm_ops_ext_bss_peer_delete_req(struct wlan_objmgr_vdev *vdev) +{ + QDF_STATUS ret = QDF_STATUS_SUCCESS; + + if ((glbl_ops) && glbl_ops->mlme_cm_ext_bss_peer_delete_req) + ret = glbl_ops->mlme_cm_ext_bss_peer_delete_req(vdev); + + return ret; +} + +QDF_STATUS mlme_cm_ops_ext_disconnect_complete(struct wlan_objmgr_vdev *vdev, + struct wlan_cm_discon_rsp *rsp) +{ + QDF_STATUS ret = QDF_STATUS_SUCCESS; + + if ((glbl_ops) && glbl_ops->mlme_cm_ext_disconnect_complete) + ret = glbl_ops->mlme_cm_ext_disconnect_complete(vdev, rsp); + + return ret; +} + +QDF_STATUS mlme_cm_ops_ext_osif_connect(struct wlan_objmgr_vdev *vdev, + struct wlan_cm_connect_rsp *rsp) +{ + QDF_STATUS ret = QDF_STATUS_SUCCESS; + + if ((glbl_ops) && glbl_ops->mlme_cm_ext_osif_connect) + ret = glbl_ops->mlme_cm_ext_osif_connect(vdev, rsp); + + return ret; +} + +QDF_STATUS mlme_cm_ops_ext_osif_disconnect(struct wlan_objmgr_vdev *vdev, + struct wlan_cm_discon_rsp *rsp) +{ + QDF_STATUS ret = QDF_STATUS_SUCCESS; + + if ((glbl_ops) && glbl_ops->mlme_cm_ext_osif_disconnect) + ret = glbl_ops->mlme_cm_ext_osif_disconnect(vdev, rsp); + + return ret; +} + +QDF_STATUS mlme_cm_ext_vdev_down(struct wlan_objmgr_vdev *vdev) +{ + QDF_STATUS ret = QDF_STATUS_SUCCESS; + + if ((glbl_ops) && glbl_ops->mlme_cm_ext_vdev_down) + ret = glbl_ops->mlme_cm_ext_vdev_down(vdev); + return ret; +} +#endif void mlme_set_ops_register_cb(mlme_get_global_ops_cb ops_cb) { glbl_ops_cb = ops_cb;