/* If we have MLO enabled, then the firmware needs to enable *addresstranslationforthestation(s)weadd.Thatdepends *onhavingEHTenabledinfirmware,whichinturndependson *mac80211inthecodebelow. *However,mac80211doesn'tenableHE/EHTuntilithasparsed *theassociationresponsesuccessfully,sojustskipallthat *andenablebothwhenwehaveMLO.
*/ 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 *supportit.IgnoreEHTinthiscase.
*/ 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;
}
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,orwedonothavedtimperiodinformation.
*/
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 *neededtosupportbothP2Pdevicediscoveryusingproberequestsand *P2Pservicediscoveryusingactionframes
*/
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.