IEEE80211_MLD_MAX_NUM_LINKS
#define ATH12K_NUM_MAX_LINKS (IEEE80211_MLD_MAX_NUM_LINKS + ATH12K_SCAN_MAX_LINKS)
struct ath12k_vif_cache *cache[IEEE80211_MLD_MAX_NUM_LINKS];
struct ath12k_link_sta __rcu *link[IEEE80211_MLD_MAX_NUM_LINKS];
IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(link_id, &links, IEEE80211_MLD_MAX_NUM_LINKS) {
if (link_id < IEEE80211_MLD_MAX_NUM_LINKS) {
if (arvif->link_id < IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(link_id, &links_map, IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(link_id, &links, IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(link_id, &links_map, IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(link_id, &links_map, IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(link_id, &links_map, IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(link_id, &links, IEEE80211_MLD_MAX_NUM_LINKS) {
(arvif->link_id < IEEE80211_MLD_MAX_NUM_LINKS)) {
for_each_set_bit(link_id, &links, IEEE80211_MLD_MAX_NUM_LINKS) {
if (arvif->link_id < IEEE80211_MLD_MAX_NUM_LINKS)
struct ieee80211_bss_conf *ol[IEEE80211_MLD_MAX_NUM_LINKS])
for_each_set_bit(link_id, &to_add, IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(link_id, &to_remove, IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(link_id, &links, IEEE80211_MLD_MAX_NUM_LINKS) {
if (link_id >= IEEE80211_MLD_MAX_NUM_LINKS)
for_each_set_bit(link_id, &links, IEEE80211_MLD_MAX_NUM_LINKS) {
if (key->link_id >= 0 && key->link_id < IEEE80211_MLD_MAX_NUM_LINKS) {
if (WARN_ON(link_id >= IEEE80211_MLD_MAX_NUM_LINKS))
if (arvif->link_id >= IEEE80211_MLD_MAX_NUM_LINKS)
if (arsta->link_id >= IEEE80211_MLD_MAX_NUM_LINKS)
if (!arsta || link_id >= IEEE80211_MLD_MAX_NUM_LINKS)
for_each_set_bit(link_id, &links, IEEE80211_MLD_MAX_NUM_LINKS) {
u8 mlo_vdev_id_lst[IEEE80211_MLD_MAX_NUM_LINKS] = {};
u32 mlo_freq_list[IEEE80211_MLD_MAX_NUM_LINKS] = {};
for_each_set_bit(link_id, &links, IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(link_id, &useful_links, IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(link_id, &links_map, IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(link_id, &valid_links, IEEE80211_MLD_MAX_NUM_LINKS) {
if (arsta->link_id >= IEEE80211_MLD_MAX_NUM_LINKS) {
if (link_id >= IEEE80211_MLD_MAX_NUM_LINKS)
for_each_set_bit(link_id, &valid_links, IEEE80211_MLD_MAX_NUM_LINKS) {
if (link_id >= IEEE80211_MLD_MAX_NUM_LINKS)
struct ieee80211_bss_conf *ol[IEEE80211_MLD_MAX_NUM_LINKS]);
#define ATH12K_FIRST_SCAN_LINK IEEE80211_MLD_MAX_NUM_LINKS
#define ATH12K_SCAN_LINKS_MASK GENMASK(ATH12K_NUM_MAX_LINKS, IEEE80211_MLD_MAX_NUM_LINKS)
if (arvif->link_id < IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(link_id, &links, IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(link_id, &links, IEEE80211_MLD_MAX_NUM_LINKS) {
if (link_id >= IEEE80211_MLD_MAX_NUM_LINKS) {
IEEE80211_MLD_MAX_NUM_LINKS) {
if (arvif->link_id >= IEEE80211_MLD_MAX_NUM_LINKS) {
if (IWL_FW_CHECK(mld, mlo_key->link_id >= IEEE80211_MLD_MAX_NUM_LINKS ||
struct iwl_mld_link __rcu *link[IEEE80211_MLD_MAX_NUM_LINKS];
struct ieee80211_bss_conf *old[IEEE80211_MLD_MAX_NUM_LINKS])
for (int i = 0; i < IEEE80211_MLD_MAX_NUM_LINKS; i++) {
for (int i = 0; i < IEEE80211_MLD_MAX_NUM_LINKS; i++) {
for (int i = 0; i < IEEE80211_MLD_MAX_NUM_LINKS; i++) {
for_each_set_bit(link_id, &usable_links, IEEE80211_MLD_MAX_NUM_LINKS) {
struct iwl_mld_link_sel_data data[IEEE80211_MLD_MAX_NUM_LINKS];
struct ieee80211_channel *channels[IEEE80211_MLD_MAX_NUM_LINKS];
for_each_set_bit(link_id, &usable_links, IEEE80211_MLD_MAX_NUM_LINKS) {
IEEE80211_MLD_MAX_NUM_LINKS) {
IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(link_id, &links_to_rem, IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(link_id, &links_to_add, IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(link_id, &links_to_add, IEEE80211_MLD_MAX_NUM_LINKS) {
struct iwl_mld_link_sta __rcu *link[IEEE80211_MLD_MAX_NUM_LINKS];
for (link_id = 0; link_id < IEEE80211_MLD_MAX_NUM_LINKS; link_id++)
struct ieee80211_bss_conf *old[IEEE80211_MLD_MAX_NUM_LINKS])
struct iwl_mvm_vif_link_info *new_link[IEEE80211_MLD_MAX_NUM_LINKS] = {};
for (i = 0; i < IEEE80211_MLD_MAX_NUM_LINKS; i++) {
for (i = 0; i < IEEE80211_MLD_MAX_NUM_LINKS; i++) {
for (i = 0; i < IEEE80211_MLD_MAX_NUM_LINKS; i++)
IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(link_id, &links_to_rem, IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(link_id, &links_to_add, IEEE80211_MLD_MAX_NUM_LINKS) {
IEEE80211_MLD_MAX_NUM_LINKS) {
IEEE80211_MLD_MAX_NUM_LINKS) {
IEEE80211_MLD_MAX_NUM_LINKS) {
struct iwl_mvm_vif_link_info *link[IEEE80211_MLD_MAX_NUM_LINKS];
struct iwl_mvm_link_sta __rcu *link[IEEE80211_MLD_MAX_NUM_LINKS];
} data[IEEE80211_MLD_MAX_NUM_LINKS];
for_each_set_bit(link_id, &usable_links, IEEE80211_MLD_MAX_NUM_LINKS) {
struct mt76_vif_link __rcu *link[IEEE80211_MLD_MAX_NUM_LINKS];
for_each_set_bit(i, &valid, IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(link_id, &old_links, IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(link_id, &old_links, IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(i, &valid, IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(i, &valid, IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(i, &valid, IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(i, &valid, IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(i, &valid, IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(i, &valid, IEEE80211_MLD_MAX_NUM_LINKS) {
struct ieee80211_bss_conf *old[IEEE80211_MLD_MAX_NUM_LINKS])
struct mt792x_bss_conf *mconfs[IEEE80211_MLD_MAX_NUM_LINKS] = {}, *mconf;
struct mt792x_link_sta *mlinks[IEEE80211_MLD_MAX_NUM_LINKS] = {}, *mlink;
for_each_set_bit(link_id, &rem, IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(link_id, &add, IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(link_id, &add, IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(link_id, &add, IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(link_id, &add, IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(link_id, &new_links, IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(i, &valid, IEEE80211_MLD_MAX_NUM_LINKS) {
struct mt792x_link_sta __rcu *link[IEEE80211_MLD_MAX_NUM_LINKS];
struct mt792x_bss_conf __rcu *link_conf[IEEE80211_MLD_MAX_NUM_LINKS];
IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(link_id, &links, IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(link_id, &new_links, IEEE80211_MLD_MAX_NUM_LINKS) {
struct ieee80211_bss_conf *old[IEEE80211_MLD_MAX_NUM_LINKS])
for_each_set_bit(link_id, &links, IEEE80211_MLD_MAX_NUM_LINKS) {
struct mt7996_sta_link __rcu *link[IEEE80211_MLD_MAX_NUM_LINKS];
struct mt7996_vif_link_info link_info[IEEE80211_MLD_MAX_NUM_LINKS];
unsigned int sel_link_id = IEEE80211_MLD_MAX_NUM_LINKS;
for_each_set_bit(link_id, &usable_links, IEEE80211_MLD_MAX_NUM_LINKS) {
if (sel_link_id == IEEE80211_MLD_MAX_NUM_LINKS)
for (link_id = 0; link_id < IEEE80211_MLD_MAX_NUM_LINKS; link_id++)
for (link_id = 0; link_id < IEEE80211_MLD_MAX_NUM_LINKS; link_id++)
if (unlikely(link_id >= IEEE80211_MLD_MAX_NUM_LINKS ||
struct ieee80211_bss_conf *link_conf[IEEE80211_MLD_MAX_NUM_LINKS];
struct rtw89_vif_link *links[IEEE80211_MLD_MAX_NUM_LINKS];
for (link_id = 0; link_id < IEEE80211_MLD_MAX_NUM_LINKS; link_id++) \
struct rtw89_sta_link *links[IEEE80211_MLD_MAX_NUM_LINKS];
for (link_id = 0; link_id < IEEE80211_MLD_MAX_NUM_LINKS; link_id++) \
for_each_set_bit(link_id, &clr_links, IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(link_id, &set_links, IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(link_id, &links, IEEE80211_MLD_MAX_NUM_LINKS) {
struct ieee80211_bss_conf *old[IEEE80211_MLD_MAX_NUM_LINKS])
for_each_set_bit(link_id, &clr_links, IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(link_id, &set_links, IEEE80211_MLD_MAX_NUM_LINKS) {
u32 skip_beacons[IEEE80211_MLD_MAX_NUM_LINKS];
struct ieee80211_bss_conf *old[IEEE80211_MLD_MAX_NUM_LINKS])
for_each_set_bit(i, &rem, IEEE80211_MLD_MAX_NUM_LINKS)
for_each_set_bit(i, &add, IEEE80211_MLD_MAX_NUM_LINKS) {
IEEE80211_MLD_MAX_NUM_LINKS - 1)
struct mac80211_hwsim_link_data link_data[IEEE80211_MLD_MAX_NUM_LINKS];
} links[IEEE80211_MLD_MAX_NUM_LINKS];
struct link_station_info *links[IEEE80211_MLD_MAX_NUM_LINKS];
struct cfg80211_assoc_link add_links[IEEE80211_MLD_MAX_NUM_LINKS];
struct cfg80211_assoc_link links[IEEE80211_MLD_MAX_NUM_LINKS];
} links[IEEE80211_MLD_MAX_NUM_LINKS];
} links[IEEE80211_MLD_MAX_NUM_LINKS];
struct cfg80211_bss *bss[IEEE80211_MLD_MAX_NUM_LINKS];
} links[IEEE80211_MLD_MAX_NUM_LINKS];
} links[IEEE80211_MLD_MAX_NUM_LINKS];
struct ieee80211_bss_conf __rcu *link_conf[IEEE80211_MLD_MAX_NUM_LINKS];
struct ieee80211_link_sta __rcu *link[IEEE80211_MLD_MAX_NUM_LINKS];
struct ieee80211_bss_conf *old[IEEE80211_MLD_MAX_NUM_LINKS]);
for (link_id = 0; link_id < IEEE80211_MLD_MAX_NUM_LINKS; link_id++) {
for (link_id = 0; link_id < IEEE80211_MLD_MAX_NUM_LINKS; link_id++) {
for (link_id = 0; link_id < IEEE80211_MLD_MAX_NUM_LINKS; link_id++) {
if (WARN_ON(link_id >= IEEE80211_MLD_MAX_NUM_LINKS))
if (WARN_ON(link_id >= IEEE80211_MLD_MAX_NUM_LINKS))
if (WARN_ON(link_id >= IEEE80211_MLD_MAX_NUM_LINKS))
if (WARN_ON(link_id >= IEEE80211_MLD_MAX_NUM_LINKS))
if (WARN_ON(link_id >= IEEE80211_MLD_MAX_NUM_LINKS))
struct ieee80211_bss_conf *old[IEEE80211_MLD_MAX_NUM_LINKS])
for_each_set_bit(link_id, &links_to_rem, IEEE80211_MLD_MAX_NUM_LINKS) {
IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(link_id, &links_to_rem, IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(link_id, &links_to_add, IEEE80211_MLD_MAX_NUM_LINKS) {
struct ieee80211_bss_conf *old[IEEE80211_MLD_MAX_NUM_LINKS]);
struct ieee80211_link_data __rcu *link[IEEE80211_MLD_MAX_NUM_LINKS];
} link[IEEE80211_MLD_MAX_NUM_LINKS];
for (link_id = 0; link_id < IEEE80211_MLD_MAX_NUM_LINKS; link_id++) {
for (link_id = 0; link_id < IEEE80211_MLD_MAX_NUM_LINKS; link_id++)
for (i = 0; i < IEEE80211_MLD_MAX_NUM_LINKS; i++) {
for (j = i + 1; j < IEEE80211_MLD_MAX_NUM_LINKS; j++) {
struct link_container *links[IEEE80211_MLD_MAX_NUM_LINKS] = {}, *link;
struct ieee80211_bss_conf *old[IEEE80211_MLD_MAX_NUM_LINKS];
struct ieee80211_link_data *old_data[IEEE80211_MLD_MAX_NUM_LINKS];
for_each_set_bit(link_id, &add, IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(link_id, &rem, IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(link_id, &add, IEEE80211_MLD_MAX_NUM_LINKS) {
for (link_id = 0; link_id < IEEE80211_MLD_MAX_NUM_LINKS; link_id++) {
for_each_set_bit(link_id, &add, IEEE80211_MLD_MAX_NUM_LINKS) {
struct link_container *links[IEEE80211_MLD_MAX_NUM_LINKS];
struct ieee80211_bss_conf *link_confs[IEEE80211_MLD_MAX_NUM_LINKS];
for (i = 0; i < IEEE80211_MLD_MAX_NUM_LINKS; i++)
for_each_set_bit(link_id, &rem, IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(link_id, &add, IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(link_id, &add, IEEE80211_MLD_MAX_NUM_LINKS) {
for_each_set_bit(link_id, &add, IEEE80211_MLD_MAX_NUM_LINKS) {
for (link_id = 0; link_id < IEEE80211_MLD_MAX_NUM_LINKS; link_id++) {
for (link_id = 0; link_id < IEEE80211_MLD_MAX_NUM_LINKS; link_id++) {
for (link_id = 0; link_id < IEEE80211_MLD_MAX_NUM_LINKS; link_id++) {
for (link_id = 0; link_id < IEEE80211_MLD_MAX_NUM_LINKS; link_id++) {
for (link_id = 0; link_id < IEEE80211_MLD_MAX_NUM_LINKS; link_id++) {
for (link_id = 0; link_id < IEEE80211_MLD_MAX_NUM_LINKS; link_id++) {
for (link_id = 0; link_id < IEEE80211_MLD_MAX_NUM_LINKS;
for (link_id = 0; link_id < IEEE80211_MLD_MAX_NUM_LINKS;
for (link_id = 0; link_id < IEEE80211_MLD_MAX_NUM_LINKS;
for_each_set_bit(link_id, &valid_links, IEEE80211_MLD_MAX_NUM_LINKS) {
for (link_id = 0; link_id < IEEE80211_MLD_MAX_NUM_LINKS; link_id++) {
for (link_id = 0; link_id < IEEE80211_MLD_MAX_NUM_LINKS; link_id++) {
u64 changed[IEEE80211_MLD_MAX_NUM_LINKS])
for (link_id = 0; link_id < IEEE80211_MLD_MAX_NUM_LINKS; link_id++) {
link_id < IEEE80211_MLD_MAX_NUM_LINKS;
for (link_id = 0; link_id < IEEE80211_MLD_MAX_NUM_LINKS;
for (link_id = 0; link_id < IEEE80211_MLD_MAX_NUM_LINKS; link_id++) {
u64 changed[IEEE80211_MLD_MAX_NUM_LINKS] = {};
for (link_id = 0; link_id < IEEE80211_MLD_MAX_NUM_LINKS; link_id++) {
for (link_id = 0; link_id < IEEE80211_MLD_MAX_NUM_LINKS; link_id++) {
for (link_id = 0; link_id < IEEE80211_MLD_MAX_NUM_LINKS; link_id++) {
u16 link_removal_timeout[IEEE80211_MLD_MAX_NUM_LINKS] = {};
if (link_id >= IEEE80211_MLD_MAX_NUM_LINKS)
for_each_set_bit(link_id, &removed_links, IEEE80211_MLD_MAX_NUM_LINKS) {
const struct element *sta_profiles[IEEE80211_MLD_MAX_NUM_LINKS] = {};
ssize_t sta_profiles_len[IEEE80211_MLD_MAX_NUM_LINKS] = {};
link_id >= IEEE80211_MLD_MAX_NUM_LINKS)
for (link_id = 0; link_id < IEEE80211_MLD_MAX_NUM_LINKS; link_id++) {
for (i = 0; i < IEEE80211_MLD_MAX_NUM_LINKS; i++)
for (i = 0; i < IEEE80211_MLD_MAX_NUM_LINKS; i++) {
for (link_id = 0; link_id < IEEE80211_MLD_MAX_NUM_LINKS; link_id++) {
struct link_sta_info __rcu *link[IEEE80211_MLD_MAX_NUM_LINKS];
for_each_set_bit(link, &links, IEEE80211_MLD_MAX_NUM_LINKS) {
if (WARN_ON(link_id >= IEEE80211_MLD_MAX_NUM_LINKS))
if (WARN_ON(link_id >= IEEE80211_MLD_MAX_NUM_LINKS))
BUILD_BUG_ON(IEEE80211_LINK_UNSPECIFIED < IEEE80211_MLD_MAX_NUM_LINKS);
struct ieee80211_bss_conf *old[IEEE80211_MLD_MAX_NUM_LINKS] = {
for (link_id = 0; link_id < IEEE80211_MLD_MAX_NUM_LINKS;
for (link_id = 0; link_id < IEEE80211_MLD_MAX_NUM_LINKS;
IEEE80211_MLD_MAX_NUM_LINKS,
for (link_id = 0; link_id < IEEE80211_MLD_MAX_NUM_LINKS;
NLA_POLICY_MAX(NLA_U8, IEEE80211_MLD_MAX_NUM_LINKS),
for (i = 0; i < IEEE80211_MLD_MAX_NUM_LINKS; i++) {
for (i = 0; i < IEEE80211_MLD_MAX_NUM_LINKS; i++) {
NLA_POLICY_RANGE(NLA_U8, 0, IEEE80211_MLD_MAX_NUM_LINKS - 1),
*sta_prof[IEEE80211_MLD_MAX_NUM_LINKS];
ssize_t sta_prof_len[IEEE80211_MLD_MAX_NUM_LINKS];
if (idx >= IEEE80211_MLD_MAX_NUM_LINKS)
for (idx = 0; idx < IEEE80211_MLD_MAX_NUM_LINKS && res->sta_prof[idx];
for (i = 0; i < IEEE80211_MLD_MAX_NUM_LINKS; i++)