From 0fb9dcb7eba4dc2df31ae2a85ed20c3a45d30df4 Mon Sep 17 00:00:00 2001 From: Chaithanya Garrepalli Date: Fri, 19 Nov 2021 14:39:39 +0530 Subject: [PATCH] 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 --- dp/wifi3.0/dp_main.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ dp/wifi3.0/dp_peer.h | 7 +++++++ 2 files changed, 51 insertions(+) diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index 2177f31eb1..b8e56d2d6f 100644 --- a/dp/wifi3.0/dp_main.c +++ b/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); } diff --git a/dp/wifi3.0/dp_peer.h b/dp/wifi3.0/dp_peer.h index da7468aa35..64d619f9aa 100644 --- a/dp/wifi3.0/dp_peer.h +++ b/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