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:

committed by
Madan Koyyalamudi

parent
5ecded6e1f
commit
3e6513e3b8
@@ -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
|
||||
|
Reference in New Issue
Block a user