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
Šī revīzija ir iekļauta:
Bing Sun
2022-01-18 14:11:15 +08:00
revīziju iesūtīja Madan Koyyalamudi
vecāks 5ecded6e1f
revīzija 3e6513e3b8
12 mainīti faili ar 623 papildinājumiem un 15 dzēšanām

Parādīt failu

@@ -1269,6 +1269,30 @@ static void mlme_init_twt_cfg(struct wlan_objmgr_psoc *psoc,
static void mlme_init_eht_cap_in_cfg(struct wlan_objmgr_psoc *psoc,
struct wlan_mlme_cfg *mlme_cfg)
{
struct wlan_mlme_eht_caps *eht_caps = &mlme_cfg->eht_caps;
eht_caps->dot11_eht_cap.su_beamformer =
cfg_default(CFG_EHT_SU_BEAMFORMER);
eht_caps->dot11_eht_cap.su_beamformee =
cfg_default(CFG_EHT_SU_BEAMFORMEE);
eht_caps->dot11_eht_cap.mu_bformer_le_80mhz =
cfg_default(CFG_EHT_MU_BFORMER_LE_80MHZ);
eht_caps->dot11_eht_cap.mu_bformer_160mhz =
cfg_default(CFG_EHT_MU_BFORMER_160MHZ);
eht_caps->dot11_eht_cap.mu_bformer_320mhz =
cfg_default(CFG_EHT_MU_BFORMER_320MHZ);
eht_caps->dot11_eht_cap.bfee_ss_le_80mhz =
cfg_default(CFG_EHT_BFEE_SS_LE_80MHZ);
eht_caps->dot11_eht_cap.bfee_ss_160mhz =
cfg_default(CFG_EHT_BFEE_SS_160MHZ);
eht_caps->dot11_eht_cap.bfee_ss_320mhz =
cfg_default(CFG_EHT_BFEE_SS_320MHZ);
eht_caps->dot11_eht_cap.num_sounding_dim_le_80mhz =
cfg_default(CFG_EHT_NUM_SOUNDING_DIM_LE_80MHZ);
eht_caps->dot11_eht_cap.num_sounding_dim_160mhz =
cfg_default(CFG_EHT_NUM_SOUNDING_DIM_160MHZ);
eht_caps->dot11_eht_cap.num_sounding_dim_320mhz =
cfg_default(CFG_EHT_NUM_SOUNDING_DIM_320MHZ);
}
#else
static void mlme_init_eht_cap_in_cfg(struct wlan_objmgr_psoc *psoc,

Parādīt failu

@@ -1,5 +1,6 @@
/*
* Copyright (c) 2018-2020 The Linux Foundation. All rights reserved.
* Copyright (c) 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
@@ -59,6 +60,7 @@
#include "cfg_mlme_fe_rrm.h"
#include "cfg_mlme_mwc.h"
#include "cfg_mlme_reg.h"
#include "cfg_mlme_eht_caps.h"
/* Please Maintain Alphabetic Order here */
#define CFG_MLME_ALL \
@@ -98,6 +100,7 @@
CFG_WEP_PARAMS_ALL \
CFG_WIFI_POS_ALL \
CFG_WMM_PARAMS_ALL\
CFG_WPS_ALL
CFG_WPS_ALL \
CFG_EHT_CAPS_ALL
#endif /* __CFG_MLME_H */

Parādīt failu

@@ -0,0 +1,332 @@
/*
* Copyright (c) 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
* above copyright notice and this permission notice appear in all
* copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
/**
* DOC: This file contains centralized definitions of converged configuration.
*/
#ifndef __CFG_MLME_EHT_CAPS_H
#define __CFG_MLME_EHT_CAPS_H
/*
* <ini>
* eht_su_beamformer - Enable SU beamformer
* @Min: 0
* @Max: 1
* @Default: 0
*
* This ini is used to enable or disable SU beamformer
*
* Related: None
*
* Supported Feature: 11be
*
* Usage: Internal
*
* </ini>
*/
#define CFG_EHT_SU_BEAMFORMER CFG_BOOL( \
"eht_su_beamformer", \
0, \
"EHT Su Beamformer")
/*
* <ini>
* eht_su_beamformee - Enable SU beamformee
* @Min: 0
* @Max: 1
* @Default: 0
*
* This ini is used to enable or disable SU beamformee
*
* Related: None
*
* Supported Feature: 11be
*
* Usage: Internal
*
* </ini>
*/
#define CFG_EHT_SU_BEAMFORMEE CFG_BOOL( \
"eht_su_beamformee", \
0, \
"EHT Su Beamformee")
/*
* <ini>
* mu_bformer_le_80mhz - Enable MU beamformer for BW <= 80
* @Min: 0
* @Max: 1
* @Default: 0
*
* This ini is used to enable or disable MU beamformer for BW <= 80
*
* Related: None
*
* Supported Feature: 11be
*
* Usage: Internal
*
* </ini>
*/
#define CFG_EHT_MU_BFORMER_LE_80MHZ CFG_BOOL( \
"mu_bformer_le_80mhz", \
0, \
"EHT MU Beamformer BW <= 80 MHz")
/*
* <ini>
* mu_bformer_160mhz - Enable MU beamformer for BW == 160
* @Min: 0
* @Max: 1
* @Default: 0
*
* This ini is used to enable or disable MU beamformer for BW == 160
*
* Related: None
*
* Supported Feature: 11be
*
* Usage: Internal
*
* </ini>
*/
#define CFG_EHT_MU_BFORMER_160MHZ CFG_BOOL( \
"mu_bformer_160mhz", \
0, \
"EHT MU Beamformer BW = 160 MHz")
/*
* <ini>
* mu_bformer_320mhz - Enable MU beamformer for BW == 320
* @Min: 0
* @Max: 1
* @Default: 0
*
* This ini is used to enable or disable MU beamformer for BW == 320
*
* Related: None
*
* Supported Feature: 11be
*
* Usage: Internal
*
* </ini>
*/
#define CFG_EHT_MU_BFORMER_320MHZ CFG_BOOL( \
"mu_bformer_320mhz", \
0, \
"EHT MU Beamformer BW = 320 MHz")
/*
* <ini>
* eht_bfee_ss_le_80mhz - For a PPDU bandwidth less than or equal to 80 MHz,
* indicates the maximum number of spatial streams that
* the STA can receive in an EHT sounding NDP.
* @Min: 0
* @Max: 7
* @Default: 0
*
* If the SU Beamformee subfield is 1, set to the maximum number of spatial
* streams that the STA is capable of receiving in an EHT sounding NDP minus 1.
* The minimum value of this field is 3.
* Reserved if the SU Beamformee field is 0.
*
* Related: NA
*
* Supported Feature: 11be
*
* Usage: Internal
*
* </ini>
*/
#define CFG_EHT_BFEE_SS_LE_80MHZ CFG_UINT( \
"eht_bfee_ss_le_80mhz", \
3, \
7, \
3, \
CFG_VALUE_OR_DEFAULT, \
"EHT Beamformee SS <= 80 MHz")
/*
* <ini>
* eht_bfee_ss_160mhz - For a PPDU bandwidth of 160 MHz, indicates the
* maximum number of spatial streams that the STA
* can receive in an EHT sounding NDP.
* @Min: 0
* @Max: 7
* @Default: 0
*
* If the SU Beamformee subfield is 1, set to the maximum number of spatial
* streams that the STA is capable of receiving in an EHT sounding NDP minus 1.
* The minimum value of this field is 3.
* Reserved if the SU Beamformee field is 0.
*
* Related: NA
*
* Supported Feature: 11be
*
* Usage: Internal
*
* </ini>
*/
#define CFG_EHT_BFEE_SS_160MHZ CFG_UINT( \
"eht_bfee_ss_160mhz", \
3, \
7, \
3, \
CFG_VALUE_OR_DEFAULT, \
"EHT Beamformee SS = 160 MHz")
/*
* <ini>
* eht_bfee_ss_320mhz - For a PPDU bandwidth of 320 MHz, indicates the
* maximum number of spatial streams that the STA
* can receive in an EHT sounding NDP.
* @Min: 0
* @Max: 7
* @Default: 0
*
* If the SU Beamformee subfield is 1, set to the maximum number of spatial
* streams that the STA is capable of receiving in an EHT sounding NDP minus 1.
* The minimum value of this field is 3.
* Reserved if the SU Beamformee field is 0.
*
* Related: NA
*
* Supported Feature: 11be
*
* Usage: Internal
*
* </ini>
*/
#define CFG_EHT_BFEE_SS_320MHZ CFG_UINT( \
"eht_bfee_ss_320mhz", \
3, \
7, \
3, \
CFG_VALUE_OR_DEFAULT, \
"EHT Beamformee SS = 320 MHz")
/*
* <ini>
* eht_num_sounding_dim_le_80mhz - For bandwidth less than or equal to 80 MHz,
* indicates the beamformer's capability
* indicating the maximum value of the TXVECTOR
* parameter NUM_STS for an EHT sounding NDP
* @Min: 0
* @Max: 7
* @Default: 0
*
* If the SU Beamformer subfield is 1, set to the supported maximum
* TXVECTOR parameter NUM_STS value minus 1.
* Reserved if the SU Beamformer subfield is 0.
*
* Related: NA
*
* Supported Feature: 11be
*
* Usage: Internal
*
* </ini>
*/
#define CFG_EHT_NUM_SOUNDING_DIM_LE_80MHZ CFG_UINT( \
"eht_num_sounding_dim_le_80mhz", \
0, \
7, \
0, \
CFG_VALUE_OR_DEFAULT, \
"EHT Number Of Sounding Dimensions <= 80 MHz")
/*
* <ini>
* eht_num_sounding_dim_160mhz - For bandwidth of 160 MHz, indicates the
* beamformer's capability indicating the
* maximum value of the TXVECTOR parameter
* NUM_STS for an EHT sounding NDP
* @Min: 0
* @Max: 7
* @Default: 0
*
* If the SU Beamformer subfield is 1, set to the supported maximum
* TXVECTOR parameter NUM_STS value minus 1.
* Reserved if the SU Beamformer subfield is 0 or the Supported Channel
* Width Set field does not indicate support for bandwidth of 160 MHz.
*
* Related: NA
*
* Supported Feature: 11be
*
* Usage: Internal
*
* </ini>
*/
#define CFG_EHT_NUM_SOUNDING_DIM_160MHZ CFG_UINT( \
"eht_num_sounding_dim_160mhz", \
0, \
7, \
0, \
CFG_VALUE_OR_DEFAULT, \
"EHT Number Of Sounding Dimensions = 160 MHz")
/*
* <ini>
* eht_num_sounding_dim_320mhz - For bandwidth of 320 MHz, indicates the
* beamformer's capability indicating the
* maximum value of the TXVECTOR parameter
* NUM_STS for an EHT sounding NDP
* @Min: 0
* @Max: 7
* @Default: 0
*
* If the SU Beamformer subfield is 1, set to the supported maximum
* TXVECTOR parameter NUM_STS value minus 1.
* Reserved if the SU Beamformer subfield is 0 or the Supported Channel
* Width Set field does not indicate support for bandwidth of 320 MHz.
*
* Related: NA
*
* Supported Feature: 11be
*
* Usage: Internal
*
* </ini>
*/
#define CFG_EHT_NUM_SOUNDING_DIM_320MHZ CFG_UINT( \
"eht_num_sounding_dim_320mhz", \
0, \
7, \
0, \
CFG_VALUE_OR_DEFAULT, \
"EHT Number Of Sounding Dimensions = 320 MHz")
#define CFG_EHT_CAPS_ALL \
CFG(CFG_EHT_SU_BEAMFORMER) \
CFG(CFG_EHT_SU_BEAMFORMEE) \
CFG(CFG_EHT_MU_BFORMER_LE_80MHZ) \
CFG(CFG_EHT_MU_BFORMER_160MHZ) \
CFG(CFG_EHT_MU_BFORMER_320MHZ) \
CFG(CFG_EHT_BFEE_SS_LE_80MHZ) \
CFG(CFG_EHT_BFEE_SS_160MHZ) \
CFG(CFG_EHT_BFEE_SS_320MHZ) \
CFG(CFG_EHT_NUM_SOUNDING_DIM_LE_80MHZ) \
CFG(CFG_EHT_NUM_SOUNDING_DIM_160MHZ) \
CFG(CFG_EHT_NUM_SOUNDING_DIM_320MHZ)
#endif /* __CFG_MLME_EHT_CAPS_H */

Parādīt failu

@@ -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