qcacmn: Fix partner link updation

Fix partner link updation in scan entry when AP MLD has more than one
partner link.

Change-Id: I981f16c9de819390d6830ffe7a5b1e438a4f8403
CRs-Fixed: 3125861
This commit is contained in:
Venkateswara Swamy Bandaru
2022-02-23 08:15:44 +05:30
committed by Madan Koyyalamudi
parent a8a078e59a
commit fb75228fd8
3 changed files with 33 additions and 12 deletions

View File

@@ -419,6 +419,7 @@ struct rnr_mld_info {
* @short_ssid: short ssid
* @bss_params: BSS parameters
* @psd_20mhz: 20MHz power spectral density
* @mld_info_valid: valid MLD info
* @mld_info: MLD information
*/
struct rnr_bss_info {
@@ -430,6 +431,7 @@ struct rnr_bss_info {
uint8_t bss_params;
uint8_t psd_20mhz;
#ifdef WLAN_FEATURE_11BE_MLO
bool mld_info_valid;
struct rnr_mld_info mld_info;
#endif
};
@@ -499,9 +501,11 @@ enum tbtt_information_field {
/**
* struct reduced_neighbor_report - Reduced Neighbor Report
* @count: number of RNR info
* @bss_info: RNR BSS Information
*/
struct reduced_neighbor_report {
uint8_t count;
struct rnr_bss_info bss_info[MAX_RNR_BSS];
};

View File

@@ -1,6 +1,6 @@
/*
* Copyright (c) 2017-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2021-2022 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
@@ -765,8 +765,7 @@ util_scan_get_ml_partner_info(struct scan_cache_entry *scan_entry,
return QDF_STATUS_E_FAILURE;
partner_info->num_partner_links =
qdf_min((uint8_t)WLAN_UMAC_MLO_MAX_VDEVS - 1,
scan_entry->ml_info.num_links - 1);
scan_entry->ml_info.num_links;
/* TODO: Make sure that scan_entry->ml_info->link_info is a sorted
* list */
for (i = 0; i < partner_info->num_partner_links; i++) {

View File

@@ -1,6 +1,6 @@
/*
* Copyright (c) 2017-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2021-2022 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
@@ -781,6 +781,8 @@ util_scan_update_rnr_mld(struct rnr_bss_info *rnr,
mld_info_present = true;
break;
};
rnr->mld_info_valid = mld_info_present;
}
#else
static void
@@ -879,7 +881,7 @@ util_scan_parse_rnr_ie(struct scan_cache_entry *scan_entry,
struct ie_header *ie)
{
uint32_t rnr_ie_len;
uint16_t tbtt_count, tbtt_length, i, fieldtype;
uint16_t tbtt_count, tbtt_length, i, fieldtype, idx = 0;
uint8_t *data;
struct neighbor_ap_info_field *neighbor_ap_info;
@@ -903,15 +905,17 @@ util_scan_parse_rnr_ie(struct scan_cache_entry *scan_entry,
for (i = 0; i < (tbtt_count + 1) &&
data < ((uint8_t *)ie + rnr_ie_len + 2); i++) {
if (i < MAX_RNR_BSS)
if (i < MAX_RNR_BSS || idx < MAX_RNR_BSS)
util_scan_update_rnr(
&scan_entry->rnr.bss_info[i],
&scan_entry->rnr.bss_info[idx++],
neighbor_ap_info,
data);
data += tbtt_length;
}
}
scan_entry->rnr.count = idx;
return QDF_STATUS_SUCCESS;
}
@@ -1859,14 +1863,28 @@ static void util_get_partner_link_info(struct scan_cache_entry *scan_entry)
uint8_t perstaprof_len = 0;
struct partner_link_info *link_info = NULL;
uint8_t eid = 0;
uint8_t link_idx = 0;
uint8_t rnr_idx = 0;
struct rnr_bss_info *rnr = NULL;
/* Update partner info from RNR IE */
qdf_mem_copy(&scan_entry->ml_info.link_info[0].link_addr,
&scan_entry->rnr.bss_info[0].bssid, 6);
while ((rnr_idx < MAX_RNR_BSS) && (rnr_idx < scan_entry->rnr.count)) {
if (link_idx >= (MLD_MAX_LINKS - 1))
break;
rnr = &scan_entry->rnr.bss_info[rnr_idx];
if (rnr->mld_info_valid && !rnr->mld_info.mld_id) {
link_info = &scan_entry->ml_info.link_info[link_idx];
qdf_mem_copy(&link_info->link_addr,
&rnr->bssid, QDF_MAC_ADDR_SIZE);
scan_entry->ml_info.link_info[0].link_id =
scan_entry->rnr.bss_info[0].mld_info.link_id;
link_info->link_id = rnr->mld_info.link_id;
link_idx++;
}
rnr_idx++;
}
scan_entry->ml_info.num_links = link_idx;
if (!offset)
return;
@@ -1935,7 +1953,7 @@ static void util_scan_update_ml_info(struct scan_cache_entry *scan_entry)
}
/* TODO: Decode it from ML IE */
scan_entry->ml_info.num_links = 2;
scan_entry->ml_info.num_links = 0;
/**
* Copy Link ID & MAC address of the scan cache entry as first entry