Przeglądaj źródła

qcacmn: ML peer authorize changes

Changes to set authorize bit on ML peer only
after all link peers are authorized by hostapd.

Change-Id: I4b103538533dd459e83ae688408703c4122f025e
Chaithanya Garrepalli 3 lat temu
rodzic
commit
0fb9dcb7eb
2 zmienionych plików z 51 dodań i 0 usunięć
  1. 44 0
      dp/wifi3.0/dp_main.c
  2. 7 0
      dp/wifi3.0/dp_peer.h

+ 44 - 0
dp/wifi3.0/dp_main.c

@@ -6800,6 +6800,49 @@ QDF_STATUS dp_peer_mlo_setup(
 
 	return QDF_STATUS_SUCCESS;
 }
+
+/*
+ * dp_mlo_peer_authorize() - authorize MLO peer
+ * @soc: soc handle
+ * @peer: pointer to link peer
+ *
+ * return void
+ */
+static void dp_mlo_peer_authorize(struct dp_soc *soc,
+				  struct dp_peer *peer)
+{
+	int i;
+	struct dp_peer *link_peer = NULL;
+	struct dp_peer *mld_peer = peer->mld_peer;
+	struct dp_mld_link_peers link_peers_info;
+
+	if (!mld_peer)
+		return;
+
+	/* get link peers with reference */
+	dp_get_link_peers_ref_from_mld_peer(soc, mld_peer,
+					    &link_peers_info,
+					    DP_MOD_ID_CDP);
+
+	for (i = 0; i < link_peers_info.num_links; i++) {
+		link_peer = link_peers_info.link_peers[i];
+
+		if (!link_peer->authorize) {
+			dp_release_link_peers_ref(&link_peers_info,
+						  DP_MOD_ID_CDP);
+			mld_peer->authorize = false;
+			return;
+		}
+	}
+
+	/* if we are here all link peers are authorized,
+	 * authorize ml_peer also
+	 */
+	mld_peer->authorize = true;
+
+	/* release link peers reference */
+	dp_release_link_peers_ref(&link_peers_info, DP_MOD_ID_CDP);
+}
 #endif
 
 /*
@@ -7402,6 +7445,7 @@ dp_peer_authorize(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
 		if (!peer->authorize)
 			dp_peer_flush_frags(soc_hdl, vdev_id, peer_mac);
 
+		dp_mlo_peer_authorize(soc, peer);
 		dp_peer_unref_delete(peer, DP_MOD_ID_CDP);
 	}
 

+ 7 - 0
dp/wifi3.0/dp_peer.h

@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
@@ -1412,6 +1413,12 @@ void dp_peer_mlo_delete(struct dp_soc *soc,
 			struct dp_peer *peer)
 {
 }
+
+static inline
+void dp_mlo_peer_authorize(struct dp_soc *soc,
+			   struct dp_peer *link_peer)
+{
+}
 #endif /* WLAN_FEATURE_11BE_MLO */
 
 static inline