/* If we have MLO enabled, then the firmware needs to enable * address translation for the station(s) we add. That depends * on having EHT enabled in firmware, which in turn depends on * mac80211 in the code below. * However, mac80211 doesn't enable HE/EHT until it has parsed * the association response successfully, so just skip all that * and enable both when we have MLO.
*/ if (ieee80211_vif_is_mld(vif)) {
iwl_mvm_mld_set_he_support(mvm, vif, cmd, cmd_ver); if (cmd_ver == 2)
cmd->wifi_gen_v2.eht_support = cpu_to_le32(1); else
cmd->wifi_gen.eht_support = 1; return;
}
rcu_read_lock(); for (link_id = 0; link_id < ARRAY_SIZE((vif)->link_conf); link_id++) {
link_conf = rcu_dereference(vif->link_conf[link_id]); if (!link_conf) continue;
if (link_conf->he_support)
iwl_mvm_mld_set_he_support(mvm, vif, cmd, cmd_ver);
/* It's not reasonable to have EHT without HE and FW API doesn't * support it. Ignore EHT in this case.
*/ if (!link_conf->he_support && link_conf->eht_support) continue;
if (link_conf->eht_support) { if (cmd_ver == 2)
cmd->wifi_gen_v2.eht_support = cpu_to_le32(1); else
cmd->wifi_gen.eht_support = 1; break;
}
}
rcu_read_unlock();
}
staticint iwl_mvm_mld_mac_ctxt_send_cmd(struct iwl_mvm *mvm, struct iwl_mac_config_cmd *cmd)
{ int ret = iwl_mvm_send_cmd_pdu(mvm,
WIDE_ID(MAC_CONF_GROUP, MAC_CONFIG_CMD),
0, sizeof(*cmd), cmd); if (ret)
IWL_ERR(mvm, "Failed to send MAC_CONFIG_CMD (action:%d): %d\n",
le32_to_cpu(cmd->action), ret); return ret;
}
/* Fill the common data for all mac context types */
iwl_mvm_mld_mac_ctxt_cmd_common(mvm, vif, &cmd, action);
/* * We always want to hear MCAST frames, if we're not authorized yet, * we'll drop them.
*/
cmd.filter_flags |= cpu_to_le32(MAC_CFG_FILTER_ACCEPT_GRP);
if (vif->p2p)
cmd.client.ctwin =
iwl_mvm_mac_ctxt_cmd_p2p_sta_get_oppps_ctwin(mvm, vif);
if (vif->cfg.assoc && !force_assoc_off) { struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif);
cmd.client.is_assoc = 1;
if (!mvmvif->authorized &&
fw_has_capa(&mvm->fw->ucode_capa,
IWL_UCODE_TLV_CAPA_COEX_HIGH_PRIO))
cmd.client.data_policy |=
cpu_to_le16(COEX_HIGH_PRIORITY_ENABLE);
} else {
cmd.client.is_assoc = 0;
/* Allow beacons to pass through as long as we are not * associated, or we do not have dtim period information.
*/
cmd.filter_flags |= cpu_to_le32(MAC_CFG_FILTER_ACCEPT_BEACON);
}
cmd.client.assoc_id = cpu_to_le16(vif->cfg.aid); if (ieee80211_vif_is_mld(vif)) {
esr_transition_timeout =
u16_get_bits(vif->cfg.eml_cap,
IEEE80211_EML_CAP_TRANSITION_TIMEOUT);
/* Override the filter flags to accept all management frames. This is * needed to support both P2P device discovery using probe requests and * P2P service discovery using action frames
*/
cmd.filter_flags = cpu_to_le32(MAC_CFG_FILTER_ACCEPT_CONTROL_AND_MGMT);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.