|
@@ -2190,7 +2190,9 @@ static uint8_t util_get_link_info_offset(uint8_t *ml_ie, bool *is_ml_ie_valid)
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
-static void util_get_ml_bv_partner_link_info(struct scan_cache_entry *scan_entry)
|
|
|
|
|
|
+static void
|
|
|
|
+util_get_ml_bv_partner_link_info(struct wlan_objmgr_pdev *pdev,
|
|
|
|
+ struct scan_cache_entry *scan_entry)
|
|
{
|
|
{
|
|
uint8_t *ml_ie = scan_entry->ie_list.multi_link_bv;
|
|
uint8_t *ml_ie = scan_entry->ie_list.multi_link_bv;
|
|
uint8_t *end_ptr = NULL;
|
|
uint8_t *end_ptr = NULL;
|
|
@@ -2205,6 +2207,10 @@ static void util_get_ml_bv_partner_link_info(struct scan_cache_entry *scan_entry
|
|
uint8_t rnr_idx = 0;
|
|
uint8_t rnr_idx = 0;
|
|
struct rnr_bss_info *rnr = NULL;
|
|
struct rnr_bss_info *rnr = NULL;
|
|
qdf_size_t ml_ie_len = ml_ie[TAG_LEN_POS] + sizeof(struct ie_header);
|
|
qdf_size_t ml_ie_len = ml_ie[TAG_LEN_POS] + sizeof(struct ie_header);
|
|
|
|
+ uint16_t freq;
|
|
|
|
+ struct scan_cache_entry *tmp_entry;
|
|
|
|
+ struct qdf_mac_addr bcast_addr = QDF_MAC_ADDR_BCAST_INIT;
|
|
|
|
+ struct scan_mbssid_info *mbssid;
|
|
|
|
|
|
/* Update partner info from RNR IE */
|
|
/* Update partner info from RNR IE */
|
|
while ((rnr_idx < MAX_RNR_BSS) && (rnr_idx < scan_entry->rnr.count)) {
|
|
while ((rnr_idx < MAX_RNR_BSS) && (rnr_idx < scan_entry->rnr.count)) {
|
|
@@ -2212,15 +2218,39 @@ static void util_get_ml_bv_partner_link_info(struct scan_cache_entry *scan_entry
|
|
break;
|
|
break;
|
|
rnr = &scan_entry->rnr.bss_info[rnr_idx];
|
|
rnr = &scan_entry->rnr.bss_info[rnr_idx];
|
|
if (rnr->mld_info_valid && !rnr->mld_info.mld_id) {
|
|
if (rnr->mld_info_valid && !rnr->mld_info.mld_id) {
|
|
|
|
+ mbssid = &scan_entry->mbssid_info;
|
|
|
|
+ freq =
|
|
|
|
+ wlan_reg_chan_opclass_to_freq(rnr->channel_number,
|
|
|
|
+ rnr->operating_class,
|
|
|
|
+ true);
|
|
|
|
+
|
|
|
|
+ if ((!scan_entry->mbssid_info.profile_count) &&
|
|
|
|
+ !(rnr->bss_params & TBTT_BSS_PARAM_TRANS_BSSID_BIT)) {
|
|
|
|
+ tmp_entry =
|
|
|
|
+ scm_scan_get_scan_entry_by_mac_freq(pdev,
|
|
|
|
+ &rnr->bssid, freq);
|
|
|
|
+ if (tmp_entry) {
|
|
|
|
+ qdf_mem_copy(mbssid,
|
|
|
|
+ &tmp_entry->mbssid_info,
|
|
|
|
+ sizeof(*mbssid));
|
|
|
|
+ util_scan_free_cache_entry(tmp_entry);
|
|
|
|
+ } else {
|
|
|
|
+ qdf_mem_copy(mbssid->non_trans_bssid,
|
|
|
|
+ rnr->bssid.bytes,
|
|
|
|
+ QDF_MAC_ADDR_SIZE);
|
|
|
|
+ qdf_mem_copy(mbssid->trans_bssid,
|
|
|
|
+ bcast_addr.bytes,
|
|
|
|
+ QDF_MAC_ADDR_SIZE);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
link_info = &scan_entry->ml_info.link_info[link_idx];
|
|
link_info = &scan_entry->ml_info.link_info[link_idx];
|
|
qdf_mem_copy(&link_info->link_addr,
|
|
qdf_mem_copy(&link_info->link_addr,
|
|
&rnr->bssid, QDF_MAC_ADDR_SIZE);
|
|
&rnr->bssid, QDF_MAC_ADDR_SIZE);
|
|
|
|
|
|
link_info->link_id = rnr->mld_info.link_id;
|
|
link_info->link_id = rnr->mld_info.link_id;
|
|
- link_info->freq =
|
|
|
|
- wlan_reg_chan_opclass_to_freq(rnr->channel_number,
|
|
|
|
- rnr->operating_class,
|
|
|
|
- true);
|
|
|
|
|
|
+ link_info->freq = freq;
|
|
|
|
+
|
|
if (!link_info->freq)
|
|
if (!link_info->freq)
|
|
scm_debug("freq 0 rnr channel %u op_class %u",
|
|
scm_debug("freq 0 rnr channel %u op_class %u",
|
|
rnr->channel_number,
|
|
rnr->channel_number,
|
|
@@ -2321,7 +2351,8 @@ static void util_get_ml_bv_partner_link_info(struct scan_cache_entry *scan_entry
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-static void util_scan_update_ml_info(struct scan_cache_entry *scan_entry)
|
|
|
|
|
|
+static void util_scan_update_ml_info(struct wlan_objmgr_pdev *pdev,
|
|
|
|
+ struct scan_cache_entry *scan_entry)
|
|
{
|
|
{
|
|
uint8_t *ml_ie = scan_entry->ie_list.multi_link_bv;
|
|
uint8_t *ml_ie = scan_entry->ie_list.multi_link_bv;
|
|
uint16_t multi_link_ctrl;
|
|
uint16_t multi_link_ctrl;
|
|
@@ -2372,10 +2403,11 @@ static void util_scan_update_ml_info(struct scan_cache_entry *scan_entry)
|
|
scan_entry->ml_info.self_link_id = ml_ie[offset] & 0x0F;
|
|
scan_entry->ml_info.self_link_id = ml_ie[offset] & 0x0F;
|
|
}
|
|
}
|
|
|
|
|
|
- util_get_ml_bv_partner_link_info(scan_entry);
|
|
|
|
|
|
+ util_get_ml_bv_partner_link_info(pdev, scan_entry);
|
|
}
|
|
}
|
|
#else
|
|
#else
|
|
-static void util_scan_update_ml_info(struct scan_cache_entry *scan_entry)
|
|
|
|
|
|
+static void util_scan_update_ml_info(struct wlan_objmgr_pdev *pdev,
|
|
|
|
+ struct scan_cache_entry *scan_entry)
|
|
{
|
|
{
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|
|
@@ -2557,7 +2589,7 @@ util_scan_gen_scan_entry(struct wlan_objmgr_pdev *pdev,
|
|
return QDF_STATUS_E_FAILURE;
|
|
return QDF_STATUS_E_FAILURE;
|
|
}
|
|
}
|
|
|
|
|
|
- util_scan_update_ml_info(scan_entry);
|
|
|
|
|
|
+ util_scan_update_ml_info(pdev, scan_entry);
|
|
|
|
|
|
scan_node->entry = scan_entry;
|
|
scan_node->entry = scan_entry;
|
|
qdf_list_insert_front(scan_list, &scan_node->node);
|
|
qdf_list_insert_front(scan_list, &scan_node->node);
|
|
@@ -3210,6 +3242,8 @@ util_handle_nontx_prof(uint8_t *mbssid_elem, uint8_t *subelement,
|
|
mbssid_elem[MBSSID_INDICATOR_POS],
|
|
mbssid_elem[MBSSID_INDICATOR_POS],
|
|
mbssid_index_ie[BSS_INDEX_POS],
|
|
mbssid_index_ie[BSS_INDEX_POS],
|
|
new_bssid);
|
|
new_bssid);
|
|
|
|
+ qdf_mem_copy(mbssid_info->non_trans_bssid, new_bssid,
|
|
|
|
+ QDF_MAC_ADDR_SIZE);
|
|
}
|
|
}
|
|
/* In single MBSS IE, there could be subelement holding
|
|
/* In single MBSS IE, there could be subelement holding
|
|
* remaining vendor IEs of non tx profile from last MBSS IE
|
|
* remaining vendor IEs of non tx profile from last MBSS IE
|