qcacmn: Add support for 2+ mlo links

Add support for generating link specific assoc request/response
and probe response for 2+ mlo links.

Change-Id: Iadd09efeb0b0098baeae25f3b1968826e75dedc4
CRs-Fixed: 3049640
Este commit está contenido en:
Paul Zhang
2023-02-14 10:41:21 +08:00
cometido por Madan Koyyalamudi
padre fe48e79218
commit 79720d811d
Se han modificado 3 ficheros con 235 adiciones y 87 borrados

Ver fichero

@@ -1832,16 +1832,16 @@ static int cm_calculate_mlo_bss_score(struct wlan_objmgr_psoc *psoc,
{
struct scan_cache_entry *entry_partner[MLD_MAX_LINKS - 1];
int32_t rssi[MLD_MAX_LINKS - 1];
uint32_t rssi_score[MLD_MAX_LINKS - 1] = {0, 0};
uint16_t prorated_pct[MLD_MAX_LINKS - 1] = {0, 0};
uint32_t rssi_score[MLD_MAX_LINKS - 1] = {};
uint16_t prorated_pct[MLD_MAX_LINKS - 1] = {};
uint32_t freq[MLD_MAX_LINKS - 1];
uint16_t ch_width[MLD_MAX_LINKS - 1];
uint32_t bandwidth_score[MLD_MAX_LINKS - 1] = {0, 0};
uint32_t congestion_pct[MLD_MAX_LINKS - 1] = {0, 0};
uint32_t congestion_score[MLD_MAX_LINKS - 1] = {0, 0};
uint32_t cong_total_score[MLD_MAX_LINKS - 1] = {0, 0};
uint32_t total_score[MLD_MAX_LINKS - 1] = {0, 0};
uint8_t i;
uint32_t bandwidth_score[MLD_MAX_LINKS - 1] = {};
uint32_t congestion_pct[MLD_MAX_LINKS - 1] = {};
uint32_t congestion_score[MLD_MAX_LINKS - 1] = {};
uint32_t cong_total_score[MLD_MAX_LINKS - 1] = {};
uint32_t total_score[MLD_MAX_LINKS - 1] = {};
uint8_t i, j;
uint16_t chan_width;
uint32_t best_total_score = 0;
uint8_t best_partner_index = 0;
@@ -1853,6 +1853,8 @@ static int cm_calculate_mlo_bss_score(struct wlan_objmgr_psoc *psoc,
struct wlan_objmgr_pdev *pdev;
bool rssi_bad_zone;
bool eht_capab;
struct partner_link_info tmp_link_info;
uint32_t tmp_total_score = 0;
wlan_psoc_mlme_get_11be_capab(psoc, &eht_capab);
if (!eht_capab)
@@ -1864,8 +1866,8 @@ static int cm_calculate_mlo_bss_score(struct wlan_objmgr_psoc *psoc,
cong_score = cm_calculate_congestion_score(entry,
score_params,
&cong_pct, false);
link = &entry->ml_info.link_info[0];
for (i = 0; i < entry->ml_info.num_links; i++) {
link = &entry->ml_info.link_info[0];
if (!link[i].is_valid_link)
continue;
entry_partner[i] = cm_get_entry(scan_list, &link[i].link_addr);
@@ -1929,12 +1931,29 @@ static int cm_calculate_mlo_bss_score(struct wlan_objmgr_psoc *psoc,
cong_score, congestion_score[i],
cong_total_score[i], total_score[i]);
}
*rssi_prorated_pct = prorated_pct[best_partner_index];
/* STA only support at most 2 links, only select 1 partner link */
for (i = 0; i < entry->ml_info.num_links; i++) {
if (i != best_partner_index)
entry->ml_info.link_info[i].is_valid_link = false;
/* reorder the link idx per score */
for (j = 0; j < entry->ml_info.num_links; j++) {
tmp_total_score = total_score[j];
best_partner_index = j;
for (i = j + 1; i < entry->ml_info.num_links; i++) {
if (tmp_total_score < total_score[i]) {
tmp_total_score = total_score[i];
best_partner_index = i;
}
}
if (best_partner_index != j) {
tmp_link_info = entry->ml_info.link_info[j];
entry->ml_info.link_info[j] =
entry->ml_info.link_info[best_partner_index];
entry->ml_info.link_info[best_partner_index] =
tmp_link_info;
total_score[best_partner_index] = total_score[j];
}
total_score[j] = 0;
}
best_total_score += weight_config->mlo_weightage *