qcacld-3.0: Implement beamforming configuration for EHT

Intersecting EHT beamforming configuration from ini and FW
indication, then save it to eht caps of mlme.
For sta, update mlme EHT beamforming configuration to FW
through WMI_VDEV_PARAM_SET_EHT_MU_MODE directly.
For ap, intersecting mlme EHT beamforming configuration and user
configuration, then send result to FW.

Change-Id: I3d6185896af9fc58eb1fb6db913d4a425f72c696
CRs-Fixed: 3113235
This commit is contained in:
Bing Sun
2022-01-18 14:11:15 +08:00
committed by Madan Koyyalamudi
parent 5ecded6e1f
commit 3e6513e3b8
12 changed files with 623 additions and 15 deletions

View File

@@ -1,6 +1,6 @@
/*
* Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
@@ -974,6 +974,7 @@ QDF_STATUS mlme_update_tgt_eht_caps_in_cfg(struct wlan_objmgr_psoc *psoc,
{
struct wlan_mlme_psoc_ext_obj *mlme_obj = mlme_get_psoc_ext_obj(psoc);
tDot11fIEeht_cap *eht_cap = &wma_cfg->eht_cap;
tDot11fIEeht_cap *mlme_eht_cap;
if (!mlme_obj)
return QDF_STATUS_E_FAILURE;
@@ -981,6 +982,55 @@ QDF_STATUS mlme_update_tgt_eht_caps_in_cfg(struct wlan_objmgr_psoc *psoc,
mlme_obj->cfg.eht_caps.dot11_eht_cap.present = 1;
qdf_mem_copy(&mlme_obj->cfg.eht_caps.dot11_eht_cap, eht_cap,
sizeof(tDot11fIEeht_cap));
mlme_eht_cap = &mlme_obj->cfg.eht_caps.dot11_eht_cap;
if (mlme_obj->cfg.vht_caps.vht_cap_info.su_bformer) {
mlme_eht_cap->su_beamformer = eht_cap->su_beamformer;
if (cfg_in_range(CFG_EHT_NUM_SOUNDING_DIM_LE_80MHZ,
eht_cap->num_sounding_dim_le_80mhz))
mlme_eht_cap->num_sounding_dim_le_80mhz =
eht_cap->num_sounding_dim_le_80mhz;
if (cfg_in_range(CFG_EHT_NUM_SOUNDING_DIM_160MHZ,
eht_cap->num_sounding_dim_160mhz))
mlme_eht_cap->num_sounding_dim_160mhz =
eht_cap->num_sounding_dim_160mhz;
if (cfg_in_range(CFG_EHT_NUM_SOUNDING_DIM_320MHZ,
eht_cap->num_sounding_dim_320mhz))
mlme_eht_cap->num_sounding_dim_320mhz =
eht_cap->num_sounding_dim_320mhz;
mlme_eht_cap->mu_bformer_le_80mhz =
eht_cap->mu_bformer_le_80mhz;
mlme_eht_cap->mu_bformer_160mhz = eht_cap->mu_bformer_160mhz;
mlme_eht_cap->mu_bformer_320mhz = eht_cap->mu_bformer_320mhz;
} else {
mlme_eht_cap->su_beamformer = 0;
mlme_eht_cap->num_sounding_dim_le_80mhz = 0;
mlme_eht_cap->num_sounding_dim_160mhz = 0;
mlme_eht_cap->num_sounding_dim_320mhz = 0;
mlme_eht_cap->mu_bformer_le_80mhz = 0;
mlme_eht_cap->mu_bformer_160mhz = 0;
mlme_eht_cap->mu_bformer_320mhz = 0;
}
if (mlme_obj->cfg.vht_caps.vht_cap_info.su_bformee) {
mlme_eht_cap->su_beamformee = eht_cap->su_beamformee;
if (cfg_in_range(CFG_EHT_BFEE_SS_LE_80MHZ,
eht_cap->bfee_ss_le_80mhz))
mlme_eht_cap->bfee_ss_le_80mhz =
eht_cap->bfee_ss_le_80mhz;
if (cfg_in_range(CFG_EHT_BFEE_SS_160MHZ,
eht_cap->bfee_ss_160mhz))
mlme_eht_cap->bfee_ss_160mhz = eht_cap->bfee_ss_160mhz;
if (cfg_in_range(CFG_EHT_BFEE_SS_320MHZ,
eht_cap->bfee_ss_320mhz))
mlme_eht_cap->bfee_ss_320mhz = eht_cap->bfee_ss_320mhz;
} else {
mlme_eht_cap->su_beamformee = 0;
mlme_eht_cap->bfee_ss_le_80mhz = 0;
mlme_eht_cap->bfee_ss_160mhz = 0;
mlme_eht_cap->bfee_ss_320mhz = 0;
}
return QDF_STATUS_SUCCESS;
}
#endif