Browse Source

qcacmn: Pass mld address and assoc link info when creating bss peer

MLO sta needs mld mac and assoc link information to create bss peer
Get mld address and assoc link info from connection manager and pass
it to bss peer creation.

Change-Id: I147ac8365f3c99c6231df589ac17d39122d57362
CRs-Fixed: 2987496
bings 4 years ago
parent
commit
4ea9496323

+ 52 - 1
umac/mlme/connection_mgr/core/src/wlan_cm_connect.c

@@ -485,6 +485,34 @@ static void cm_update_vdev_mlme_macaddr(struct cnx_mgr *cm_ctx,
 {
 }
 #endif
+/**
+ * cm_get_bss_peer_mld_addr() - get bss peer mld mac address
+ * @req: pointer to cm_connect_req
+ *
+ * Return: mld mac address
+ */
+static struct qdf_mac_addr *cm_get_bss_peer_mld_addr(struct cm_connect_req *req)
+{
+	if (req && req->cur_candidate && req->cur_candidate->entry &&
+	    req->cur_candidate->entry->ml_info)
+		return &req->cur_candidate->entry->ml_info->mld_mac_addr;
+	else
+		return NULL;
+}
+
+/**
+ * cm_bss_peer_is_assoc_peer() - is the bss peer to be created assoc peer or not
+ * @req: pointer to cm_connect_req
+ *
+ * Return: true if the bss peer to be created is assoc peer
+ */
+static bool cm_bss_peer_is_assoc_peer(struct cm_connect_req *req)
+{
+	if (req)
+		return !req->req.is_non_assoc_link;
+
+	return false;
+}
 #else
 static inline
 void cm_set_vdev_link_id(struct cnx_mgr *cm_ctx,
@@ -495,6 +523,16 @@ static void cm_update_vdev_mlme_macaddr(struct cnx_mgr *cm_ctx,
 					struct cm_connect_req *req)
 {
 }
+
+static struct qdf_mac_addr *cm_get_bss_peer_mld_addr(struct cm_connect_req *req)
+{
+	return NULL;
+}
+
+static bool cm_bss_peer_is_assoc_peer(struct cm_connect_req *req)
+{
+	return false;
+}
 #endif
 
 static void cm_create_bss_peer(struct cnx_mgr *cm_ctx,
@@ -502,10 +540,23 @@ static void cm_create_bss_peer(struct cnx_mgr *cm_ctx,
 {
 	QDF_STATUS status;
 	struct qdf_mac_addr *bssid;
+	struct qdf_mac_addr *mld_mac;
+	bool is_assoc_link = false;
 
+	if (!cm_ctx) {
+		mlme_err("invalid cm_ctx");
+		return;
+	}
+	if (!req) {
+		mlme_err("invalid req");
+		return;
+	}
 	bssid = &req->cur_candidate->entry->bssid;
 	cm_set_vdev_link_id(cm_ctx, req);
-	status = mlme_cm_bss_peer_create_req(cm_ctx->vdev, bssid);
+	mld_mac = cm_get_bss_peer_mld_addr(req);
+	is_assoc_link = cm_bss_peer_is_assoc_peer(req);
+	status = mlme_cm_bss_peer_create_req(cm_ctx->vdev, bssid,
+					     mld_mac, is_assoc_link);
 	if (QDF_IS_STATUS_ERROR(status)) {
 		struct wlan_cm_connect_resp *resp;
 		uint8_t vdev_id = wlan_vdev_get_id(cm_ctx->vdev);

+ 1 - 1
umac/mlme/connection_mgr/core/src/wlan_cm_host_roam.c

@@ -403,7 +403,7 @@ QDF_STATUS cm_reassoc_disconnect_complete(struct cnx_mgr *cm_ctx,
 	mlme_cm_disconnect_complete_ind(cm_ctx->vdev, resp);
 	bssid = &cm_req->roam_req.cur_candidate->entry->bssid;
 
-	status = mlme_cm_bss_peer_create_req(cm_ctx->vdev, bssid);
+	status = mlme_cm_bss_peer_create_req(cm_ctx->vdev, bssid, NULL, false);
 	if (QDF_IS_STATUS_ERROR(status)) {
 		mlme_err(CM_PREFIX_FMT "Peer create request failed",
 			 CM_PREFIX_REF(vdev_id, cm_id));

+ 8 - 2
umac/mlme/include/wlan_mlme_cmn.h

@@ -205,7 +205,9 @@ struct mlme_ext_ops {
 			struct wlan_cm_vdev_connect_req *req);
 	QDF_STATUS (*mlme_cm_ext_bss_peer_create_req_cb)(
 				struct wlan_objmgr_vdev *vdev,
-				struct qdf_mac_addr *peer_mac);
+				struct qdf_mac_addr *peer_mac,
+				struct qdf_mac_addr *mld_mac,
+				bool is_assoc_link);
 	QDF_STATUS (*mlme_cm_ext_connect_req_cb)(struct wlan_objmgr_vdev *vdev,
 			struct wlan_cm_vdev_connect_req *req);
 	QDF_STATUS (*mlme_cm_ext_connect_complete_ind_cb)(
@@ -476,11 +478,15 @@ QDF_STATUS mlme_cm_bss_select_ind(struct wlan_objmgr_vdev *vdev,
  * request
  * @vdev: VDEV object
  * @peer_mac: Peer mac address
+ * @mld_mac: mld mac address
+ * @is_assoc_link: assoc happens on this link or not
  *
  * Return: QDF_STATUS
  */
 QDF_STATUS mlme_cm_bss_peer_create_req(struct wlan_objmgr_vdev *vdev,
-				       struct qdf_mac_addr *peer_mac);
+				       struct qdf_mac_addr *peer_mac,
+				       struct qdf_mac_addr *mld_mac,
+				       bool is_assoc_link);
 
 /**
  * mlme_cm_connect_req() - Connection manager ext connect request to start vdev

+ 5 - 3
umac/mlme/mlme_objmgr/dispatcher/src/wlan_cmn_mlme_main.c

@@ -281,13 +281,15 @@ QDF_STATUS mlme_cm_bss_select_ind(struct wlan_objmgr_vdev *vdev,
 }
 
 QDF_STATUS mlme_cm_bss_peer_create_req(struct wlan_objmgr_vdev *vdev,
-				       struct qdf_mac_addr *peer_mac)
+				       struct qdf_mac_addr *peer_mac,
+				       struct qdf_mac_addr *mld_mac,
+				       bool is_assoc_link)
 {
 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
 
 	if ((glbl_ops) && glbl_ops->mlme_cm_ext_bss_peer_create_req_cb)
-		ret = glbl_ops->mlme_cm_ext_bss_peer_create_req_cb(vdev,
-								   peer_mac);
+		ret = glbl_ops->mlme_cm_ext_bss_peer_create_req_cb(
+				vdev, peer_mac, mld_mac, is_assoc_link);
 
 	return ret;
 }