qcacld-3.0: Use peer STA bandwidth for MCS calculation

STA is associating on 20 MHz, whereas the SAP is operating
in 80 MHz. During the rate set preparation for the client,
instead of intersecting the 20 MHz MCS(sent by the peer in
EHT Cap) with the self cap of APUT, the validation happens
for the 80 MHz MCS set of STA and APUT. However, while sending
peer assoc to firmware, the 20 MHz MCS rate set of the client
is being used.

To fix this, generate the EHT MCS rate set of the client by
intersecting the MCS params corresponding to the STA's assoc
channel width.

Change-Id: I1baf79a3705922531d2ff3db8199633a35793129
CRs-Fixed: 3849051
Este commit está contenido en:
Surya Prakash Sivaraj
2024-06-26 17:11:17 +05:30
cometido por Ravindra Konda
padre eef3281ef7
commit 5030ad43aa
Se han modificado 5 ficheros con 10 adiciones y 9 borrados

Ver fichero

@@ -1575,7 +1575,7 @@ QDF_STATUS lim_populate_own_rate_set(struct mac_context *mac_ctx,
lim_populate_he_mcs_set(mac_ctx, rates, he_caps,
session_entry, session_entry->nss);
lim_populate_eht_mcs_set(mac_ctx, rates, eht_caps,
session_entry, session_entry->nss);
session_entry, session_entry->ch_width);
return QDF_STATUS_SUCCESS;
}
@@ -1830,7 +1830,7 @@ QDF_STATUS lim_populate_peer_rate_set(struct mac_context *mac,
lim_populate_he_mcs_set(mac, pRates, peer_he_caps,
pe_session, pe_session->nss);
lim_populate_eht_mcs_set(mac, pRates, eht_caps,
pe_session, pe_session->nss);
pe_session, pe_session->ch_width);
pe_debug("nss 1x1 %d nss %d", pe_session->supported_nss_1x1,
pe_session->nss);
@@ -2066,7 +2066,7 @@ QDF_STATUS lim_populate_matching_rate_set(struct mac_context *mac_ctx,
lim_populate_he_mcs_set(mac_ctx, &sta_ds->supportedRates, he_caps,
session_entry, session_entry->nss);
lim_populate_eht_mcs_set(mac_ctx, &sta_ds->supportedRates, eht_caps,
session_entry, session_entry->nss);
session_entry, sta_ds->ch_width);
/*
* Set the erpEnabled bit if the phy is in G mode and at least
* one A rate is supported

Ver fichero

@@ -3333,7 +3333,7 @@ lim_tdls_populate_eht_mcs(struct mac_context *mac_ctx, tpDphHashNode stads,
{
lim_populate_eht_mcs_set(mac_ctx, &stads->supportedRates,
&stads->eht_config, session_entry,
session_entry->nss);
session_entry->ch_width);
}
#else
static void

Ver fichero

@@ -8553,7 +8553,7 @@ QDF_STATUS lim_populate_eht_mcs_set(struct mac_context *mac_ctx,
struct supported_rates *rates,
tDot11fIEeht_cap *peer_eht_caps,
struct pe_session *session_entry,
uint8_t nss)
enum phy_ch_width ch_width)
{
if ((!peer_eht_caps) || (!peer_eht_caps->present)) {
pe_debug("peer not eht capable or eht_caps NULL");
@@ -8564,7 +8564,7 @@ QDF_STATUS lim_populate_eht_mcs_set(struct mac_context *mac_ctx,
return QDF_STATUS_SUCCESS;
}
switch (session_entry->ch_width) {
switch (ch_width) {
case CH_WIDTH_320MHZ:
lim_populate_eht_320_mcs_set(mac_ctx, rates, peer_eht_caps);
fallthrough;

Ver fichero

@@ -1827,7 +1827,7 @@ QDF_STATUS lim_strip_eht_cap_ie(struct mac_context *mac_ctx,
* @rates: pointer to supported rate set
* @peer_eht_caps: pointer to peer EHT capabilities
* @session_entry: pe session entry
* @nss: number of spatial streams
* @ch_width: channel width of the association
*
* Populates EHT mcs rate set based on peer and self capabilities
*
@@ -1837,7 +1837,7 @@ QDF_STATUS lim_populate_eht_mcs_set(struct mac_context *mac_ctx,
struct supported_rates *rates,
tDot11fIEeht_cap *peer_eht_caps,
struct pe_session *session_entry,
uint8_t nss);
enum phy_ch_width ch_width);
/**
* lim_update_eht_bw_cap_mcs(): Update eht mcs map per bandwidth
@@ -2204,7 +2204,7 @@ QDF_STATUS lim_populate_eht_mcs_set(struct mac_context *mac_ctx,
struct supported_rates *rates,
tDot11fIEeht_cap *peer_eht_caps,
struct pe_session *session_entry,
uint8_t nss)
enum phy_ch_width ch_width)
{
return QDF_STATUS_SUCCESS;
}

Ver fichero

@@ -8938,6 +8938,7 @@ QDF_STATUS lim_ieee80211_unpack_ehtcap(const uint8_t *eht_cap_ie,
ehtcap_ie_get(ehtcap->mcs_nss_map_bytes[idx],
EHTCAP_TX_MCS_NSS_MAP_IDX,
EHTCAP_TX_MCS_NSS_MAP_BITS);
idx++;
dot11f_eht_cap->bw_20_rx_max_nss_for_mcs_8_and_9 =
ehtcap_ie_get(ehtcap->mcs_nss_map_bytes[idx],