diff --git a/core/hdd/src/wlan_hdd_ioctl.c b/core/hdd/src/wlan_hdd_ioctl.c index 5b72f8c1ed..97abc5a165 100644 --- a/core/hdd/src/wlan_hdd_ioctl.c +++ b/core/hdd/src/wlan_hdd_ioctl.c @@ -6846,6 +6846,39 @@ static int drv_cmd_set_antenna_mode(struct hdd_adapter *adapter, return hdd_set_antenna_mode(adapter, hdd_ctx, mode); } +/** + * hdd_get_dynamic_antenna_mode() -get the dynamic antenna mode for vdev + * @antenna_mode: pointer to antenna mode of vdev + * @dynamic_nss_chains_support: feature support for dynamic nss chains update + * @vdev: Pointer to vdev + * + * This API will check for the num of chains configured for the vdev, and fill + * that info in the antenna mode if the dynamic chains per vdev are supported. + * + * Return: None + */ +static void +hdd_get_dynamic_antenna_mode(uint32_t *antenna_mode, + bool dynamic_nss_chains_support, + struct wlan_objmgr_vdev *vdev) +{ + struct wlan_mlme_nss_chains *nss_chains_dynamic_cfg; + + if (!dynamic_nss_chains_support) + return; + + nss_chains_dynamic_cfg = mlme_get_dynamic_vdev_config(vdev); + if (!nss_chains_dynamic_cfg) { + hdd_err("nss chain dynamic config NULL"); + return; + } + /* + * At present, this command doesn't include band, so by default + * it will return the band 2ghz present rf chains. + */ + *antenna_mode = nss_chains_dynamic_cfg->num_rx_chains[BAND_2GHZ]; +} + /** * drv_cmd_get_antenna_mode() - GET ANTENNA MODE driver command * handler @@ -6868,6 +6901,10 @@ static inline int drv_cmd_get_antenna_mode(struct hdd_adapter *adapter, uint8_t len = 0; antenna_mode = hdd_ctx->current_antenna_mode; + /* Overwrite this antenna mode if dynamic vdev chains are supported */ + hdd_get_dynamic_antenna_mode(&antenna_mode, + hdd_ctx->dynamic_nss_chains_support, + adapter->vdev); len = scnprintf(extra, sizeof(extra), "%s %d", command, antenna_mode); len = QDF_MIN(priv_data->total_len, len + 1);