Преглед на файлове

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
Ashish Kumar Dhanotiya преди 4 години
родител
ревизия
30f4cf7c40

+ 52 - 0
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 */
 

+ 30 - 0
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;
+}

+ 183 - 0
umac/mlme/include/wlan_mlme_cmn.h

@@ -23,6 +23,9 @@
 #include <include/wlan_psoc_mlme.h>
 #include <include/wlan_pdev_mlme.h>
 #include <include/wlan_vdev_mlme.h>
+#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

+ 132 - 0
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;