qcacld-3.0: Update the session he cap if channel is changed

Update the session he capabilities when SAP switches to new
channel and if new channel band or channel width is different from
current session channel info.

Change-Id: I1a91864eb6f26189c37b2dc715e6b6d7fb950458
CRs-Fixed: 2863366
This commit is contained in:
Kiran Kumar Lokere 2021-01-27 15:13:07 -08:00 • committed by snandini
commit 6cf1003125
2 changed files with 37 additions and 0 deletions

View file

@ -5007,6 +5007,7 @@ static void lim_process_sme_channel_change_request(struct mac_context *mac_ctx,
uint8_t session_id; /* PE session_id */
int8_t max_tx_pwr;
uint32_t target_freq;
bool is_curr_ch_2g, is_new_ch_2g, update_he_cap;
if (!msg_buf) {
pe_err("msg_buf is NULL");
@ -5057,6 +5058,27 @@ static void lim_process_sme_channel_change_request(struct mac_context *mac_ctx,
lim_is_session_he_capable(session_entry))) {
lim_update_session_he_capable_chan_switch
(mac_ctx, session_entry, target_freq);
is_new_ch_2g = wlan_reg_is_24ghz_ch_freq(target_freq);
is_curr_ch_2g = wlan_reg_is_24ghz_ch_freq(
session_entry->curr_op_freq);
if ((is_new_ch_2g && !is_curr_ch_2g) ||
(!is_new_ch_2g && is_curr_ch_2g))
update_he_cap = true;
else
update_he_cap = false;
if (!update_he_cap) {
if ((session_entry->ch_width !=
ch_change_req->ch_width) &&
(session_entry->ch_width > CH_WIDTH_80MHZ ||
ch_change_req->ch_width > CH_WIDTH_80MHZ))
update_he_cap = true;
}
if (update_he_cap) {
session_entry->curr_op_freq = target_freq;
session_entry->ch_width = ch_change_req->ch_width;
lim_copy_bss_he_cap(session_entry);
lim_update_he_bw_cap_mcs(session_entry, NULL);
}
} else if (wlan_reg_is_6ghz_chan_freq(target_freq)) {
pe_debug("Invalid target_freq %d for dot11mode %d cur HE %d",
target_freq, ch_change_req->dot11mode,

View file

@ -6896,6 +6896,8 @@ void lim_update_usr_he_cap(struct mac_context *mac_ctx, struct pe_session *sessi
uint8_t extracted_buff[DOT11F_IE_HE_CAP_MAX_LEN + 2];
QDF_STATUS status;
struct sir_vht_config *vht_cfg = &session->vht_config;
struct mlme_legacy_priv *mlme_priv;
qdf_mem_zero(extracted_buff, sizeof(extracted_buff));
status = lim_strip_ie(mac_ctx, add_ie->probeRespBCNData_buff,
&add_ie->probeRespBCNDataLen,
@ -6937,6 +6939,19 @@ void lim_update_usr_he_cap(struct mac_context *mac_ctx, struct pe_session *sessi
vht_cfg->mu_beam_formee = 0;
vht_cfg->csnof_beamformer_antSup = 0;
}
mlme_priv = wlan_vdev_mlme_get_ext_hdl(session->vdev);
if (mlme_priv) {
mlme_priv->he_config.mu_beamformer = he_cap->mu_beamformer;
mlme_priv->he_config.su_beamformer = he_cap->su_beamformer;
mlme_priv->he_config.su_beamformee = he_cap->su_beamformee;
mlme_priv->he_config.bfee_sts_lt_80 = he_cap->bfee_sts_lt_80;
mlme_priv->he_config.bfee_sts_gt_80 = he_cap->bfee_sts_gt_80;
mlme_priv->he_config.num_sounding_lt_80 =
he_cap->num_sounding_lt_80;
mlme_priv->he_config.num_sounding_gt_80 =
he_cap->num_sounding_gt_80;
}
wma_set_he_txbf_params(session->vdev_id, he_cap->su_beamformer,
he_cap->su_beamformee, he_cap->mu_beamformer);
}