From ac9c2d3346c490e3bbdf4e04279cbe80930aa317 Mon Sep 17 00:00:00 2001 From: Subhranil Choudhury Date: Thu, 23 Jul 2020 12:23:23 +0530 Subject: [PATCH] qca-wifi: Multi-Link Fast-lane switch fix The change is to take care of primary radio setting when STA/AP vaps of fast-lane radios switch. Change-Id: Iee6815a73f5e95e48887e3dc683ede1d2b2091c7 --- qca_multi_link/src/qca_multi_link.c | 30 +++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/qca_multi_link/src/qca_multi_link.c b/qca_multi_link/src/qca_multi_link.c index d494a7a50e..fa225a6050 100644 --- a/qca_multi_link/src/qca_multi_link.c +++ b/qca_multi_link/src/qca_multi_link.c @@ -81,6 +81,31 @@ static inline bool is_no_backhaul_radio(struct wiphy *no_bl_wiphy) return false; } +static inline bool is_other_fast_lane_radio_primary(struct wiphy *fl_wiphy) +{ + qdf_list_node_t *next_node = NULL; + + if (!fl_wiphy) { + return false; + } + + if (qdf_list_empty(&qca_multi_link_cfg.fast_lane_list)) { + return false; + } + + qdf_list_peek_front(&qca_multi_link_cfg.fast_lane_list, + (qdf_list_node_t **)&next_node); + while (next_node) { + struct qca_multi_link_list_node *fast_lane_node + = (struct qca_multi_link_list_node *)next_node; + if ((fast_lane_node->wiphy != fl_wiphy) + && (fast_lane_node->wiphy == qca_multi_link_cfg.primary_wiphy)) { + return true; + } + } + return false; +} + /** * qca_multi_link_is_primary_radio() - Check if this is a primary radio * @@ -98,6 +123,11 @@ static inline bool qca_multi_link_is_primary_radio(struct wiphy *dev_wiphy) } else { is_primary = (dev_wiphy == qca_multi_link_cfg.primary_wiphy)?true:false; } + + if ((is_primary == false) && is_fast_lane_radio(dev_wiphy)) { + is_primary = is_other_fast_lane_radio_primary(dev_wiphy); + } + return is_primary; }