qcacld-3.0: Fix num_tx_chains_11a not updated for a/b/g mode

At present, num_tx_chains_11a value is updated from the last
setting of num_tx_chains_11a in dynamic_cfg. If last setting
num_tx_chains_11a is 1, new num_tx_chains[NSS_CHAINS_BAND_5GHZ]
changed to 2 by vendor command, it will not be updated to 2.
Fix by update them based on new num_tx_chains[NSS_CHAINS_BAND_5GHZ]
value and ini config.

Change-Id: Id25e8f8d0427b77c2191dfc352b5827be543a191
CRs-Fixed: 3683946
This commit is contained in:
Liangwei Dong
2023-12-13 10:14:46 +08:00
committed by Ravindra Konda
parent 6b87d33890
commit bcabff0e72

View File

@@ -4402,6 +4402,7 @@ sme_store_nss_chains_cfg_in_vdev(struct wlan_objmgr_vdev *vdev,
static void static void
sme_populate_user_config(struct wlan_mlme_nss_chains *dynamic_cfg, sme_populate_user_config(struct wlan_mlme_nss_chains *dynamic_cfg,
struct wlan_mlme_nss_chains *user_cfg, struct wlan_mlme_nss_chains *user_cfg,
struct wlan_mlme_nss_chains *ini_cfg,
enum nss_chains_band_info band) enum nss_chains_band_info band)
{ {
if (!user_cfg->num_rx_chains[band]) if (!user_cfg->num_rx_chains[band])
@@ -4420,17 +4421,23 @@ sme_populate_user_config(struct wlan_mlme_nss_chains *dynamic_cfg,
user_cfg->tx_nss[band] = user_cfg->tx_nss[band] =
dynamic_cfg->tx_nss[band]; dynamic_cfg->tx_nss[band];
if (!user_cfg->num_tx_chains_11a) if (!user_cfg->num_tx_chains_11a) {
user_cfg->num_tx_chains_11a = user_cfg->num_tx_chains_11a =
dynamic_cfg->num_tx_chains_11a; QDF_MIN(user_cfg->num_tx_chains[NSS_CHAINS_BAND_5GHZ],
ini_cfg->num_tx_chains_11a);
}
if (!user_cfg->num_tx_chains_11b) if (!user_cfg->num_tx_chains_11b) {
user_cfg->num_tx_chains_11b = user_cfg->num_tx_chains_11b =
dynamic_cfg->num_tx_chains_11b; QDF_MIN(user_cfg->num_tx_chains[NSS_CHAINS_BAND_2GHZ],
ini_cfg->num_tx_chains_11b);
}
if (!user_cfg->num_tx_chains_11g) if (!user_cfg->num_tx_chains_11g) {
user_cfg->num_tx_chains_11g = user_cfg->num_tx_chains_11g =
dynamic_cfg->num_tx_chains_11g; QDF_MIN(user_cfg->num_tx_chains[NSS_CHAINS_BAND_2GHZ],
ini_cfg->num_tx_chains_11g);
}
if (!user_cfg->disable_rx_mrc[band]) if (!user_cfg->disable_rx_mrc[band])
user_cfg->disable_rx_mrc[band] = user_cfg->disable_rx_mrc[band] =
@@ -4543,7 +4550,7 @@ sme_validate_nss_chains_config(struct wlan_objmgr_vdev *vdev,
for (band = NSS_CHAINS_BAND_2GHZ; band < NSS_CHAINS_BAND_MAX; band++) { for (band = NSS_CHAINS_BAND_2GHZ; band < NSS_CHAINS_BAND_MAX; band++) {
sme_populate_user_config(dynamic_cfg, sme_populate_user_config(dynamic_cfg,
user_cfg, band); user_cfg, ini_cfg, band);
status = sme_validate_from_ini_config(user_cfg, status = sme_validate_from_ini_config(user_cfg,
ini_cfg, ini_cfg,
band); band);
@@ -4742,6 +4749,30 @@ sme_update_nss_in_mlme_cfg(mac_handle_t mac_handle,
vdev_op_mode, band); vdev_op_mode, band);
} }
static void sme_dump_nss_cfg(struct wlan_mlme_nss_chains *user_cfg)
{
sme_debug("num_tx_chains 2g %d 5g %d",
user_cfg->num_tx_chains[NSS_CHAINS_BAND_2GHZ],
user_cfg->num_tx_chains[NSS_CHAINS_BAND_5GHZ]);
sme_debug("num_rx_chains 2g %d 5g %d",
user_cfg->num_rx_chains[NSS_CHAINS_BAND_2GHZ],
user_cfg->num_rx_chains[NSS_CHAINS_BAND_5GHZ]);
sme_debug("tx_nss 2g %d 5g %d",
user_cfg->tx_nss[NSS_CHAINS_BAND_2GHZ],
user_cfg->tx_nss[NSS_CHAINS_BAND_5GHZ]);
sme_debug("rx_nss 2g %d 5g %d",
user_cfg->rx_nss[NSS_CHAINS_BAND_2GHZ],
user_cfg->rx_nss[NSS_CHAINS_BAND_5GHZ]);
sme_debug("num_tx_chains_11b %d",
user_cfg->num_tx_chains_11b);
sme_debug("num_tx_chains_11g %d",
user_cfg->num_tx_chains_11g);
sme_debug("num_tx_chains_11a %d",
user_cfg->num_tx_chains_11a);
}
QDF_STATUS QDF_STATUS
sme_nss_chains_update(mac_handle_t mac_handle, sme_nss_chains_update(mac_handle_t mac_handle,
struct wlan_mlme_nss_chains *user_cfg, struct wlan_mlme_nss_chains *user_cfg,
@@ -4782,6 +4813,11 @@ sme_nss_chains_update(mac_handle_t mac_handle,
status = sme_validate_nss_chains_config(vdev, user_cfg, status = sme_validate_nss_chains_config(vdev, user_cfg,
dynamic_cfg); dynamic_cfg);
sme_debug("dynamic_cfg");
sme_dump_nss_cfg(dynamic_cfg);
sme_debug("user_cfg");
sme_dump_nss_cfg(user_cfg);
if (QDF_IS_STATUS_ERROR(status)) if (QDF_IS_STATUS_ERROR(status))
goto release_lock; goto release_lock;