mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-11-08 19:55:16 -05:00
qcacld-3.0: Refactor MLME CFG items and APIs for VHT
VHT Part3: Add the basic infra for MLME CFG items and the APIs to be used from other components for VHT. Change-Id: I8cd30439d7ac3de7b550aa5042353cf30e04cbda CRs-Fixed: 2322304
This commit is contained in:
parent
7780a005cd
commit
b074f2f7fc
36 changed files with 1129 additions and 1497 deletions
|
|
@ -25,6 +25,8 @@
|
|||
#include "wlan_scan_public_structs.h"
|
||||
#include "cfg_mlme_threshold.h"
|
||||
|
||||
#define NUM_OF_SOUNDING_DIMENSIONS 1 /*Nss - 1, (Nss = 2 for 2x2)*/
|
||||
|
||||
struct wlan_mlme_psoc_obj *mlme_get_psoc_obj(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
struct wlan_mlme_psoc_obj *mlme_obj;
|
||||
|
|
@ -462,8 +464,6 @@ static void mlme_init_vht_cap_cfg(struct wlan_objmgr_psoc *psoc,
|
|||
{
|
||||
vht_cap_info->supp_chan_width =
|
||||
cfg_default(CFG_VHT_SUPP_CHAN_WIDTH);
|
||||
vht_cap_info->tx_bfee_ant_supp =
|
||||
cfg_default(CFG_VHT_BEAMFORMEE_ANT_SUPP);
|
||||
vht_cap_info->num_soundingdim =
|
||||
cfg_default(CFG_VHT_NUM_SOUNDING_DIMENSIONS);
|
||||
vht_cap_info->htc_vhtc =
|
||||
|
|
@ -478,39 +478,47 @@ static void mlme_init_vht_cap_cfg(struct wlan_objmgr_psoc *psoc,
|
|||
cfg_default(CFG_VHT_RX_SUPP_DATA_RATE);
|
||||
vht_cap_info->tx_supp_data_rate =
|
||||
cfg_default(CFG_VHT_TX_SUPP_DATA_RATE);
|
||||
vht_cap_info->enable_txbf_20mhz =
|
||||
cfg_default(CFG_VHT_ENABLE_TXBF_20MHZ);
|
||||
vht_cap_info->txop_ps =
|
||||
cfg_default(CFG_VHT_TXOP_PS);
|
||||
vht_cap_info->rx_mcs_map =
|
||||
WNI_CFG_VHT_RX_MCS_MAP_STADEF;
|
||||
vht_cap_info->tx_mcs_map =
|
||||
WNI_CFG_VHT_TX_MCS_MAP_STADEF;
|
||||
vht_cap_info->basic_mcs_set =
|
||||
CFG_VHT_BASIC_MCS_SET_STADEF;
|
||||
vht_cap_info->su_bformer =
|
||||
cfg_default(CFG_VHT_SU_BEAMFORMER_CAP);
|
||||
|
||||
vht_cap_info->tx_bfee_ant_supp =
|
||||
cfg_get(psoc, CFG_VHT_BEAMFORMEE_ANT_SUPP);
|
||||
|
||||
vht_cap_info->enable_txbf_20mhz =
|
||||
cfg_get(psoc, CFG_VHT_ENABLE_TXBF_20MHZ);
|
||||
vht_cap_info->ampdu_len =
|
||||
cfg_get(psoc, CFG_VHT_MPDU_LEN);
|
||||
|
||||
vht_cap_info->ldpc_coding_cap =
|
||||
cfg_get(psoc, CFG_VHT_LDPC_CODING_CAP);
|
||||
cfg_get(psoc, CFG_RX_LDPC_ENABLE);
|
||||
vht_cap_info->short_gi_80mhz =
|
||||
cfg_get(psoc, CFG_VHT_SHORT_GI_80MHZ);
|
||||
cfg_get(psoc, CFG_SHORT_GI_40MHZ);
|
||||
vht_cap_info->short_gi_160mhz =
|
||||
cfg_get(psoc, CFG_VHT_SHORT_GI_160_AND_80_PLUS_80MHZ);
|
||||
cfg_get(psoc, CFG_SHORT_GI_40MHZ);
|
||||
vht_cap_info->tx_stbc =
|
||||
cfg_get(psoc, CFG_VHT_TXSTBC);
|
||||
cfg_get(psoc, CFG_TX_STBC_ENABLE);
|
||||
vht_cap_info->rx_stbc =
|
||||
cfg_get(psoc, CFG_VHT_RXSTBC);
|
||||
vht_cap_info->su_bformer =
|
||||
cfg_get(psoc, CFG_VHT_SU_BEAMFORMER_CAP);
|
||||
vht_cap_info->su_bformee =
|
||||
cfg_get(psoc, CFG_VHT_SU_BEAMFORMEE_CAP);
|
||||
cfg_get(psoc, CFG_RX_STBC_ENABLE);
|
||||
|
||||
if (vht_cap_info->enable_txbf_20mhz)
|
||||
vht_cap_info->su_bformee =
|
||||
cfg_default(CFG_VHT_SU_BEAMFORMEE_CAP);
|
||||
|
||||
vht_cap_info->mu_bformer =
|
||||
cfg_get(psoc, CFG_VHT_MU_BEAMFORMER_CAP);
|
||||
cfg_default(CFG_VHT_MU_BEAMFORMER_CAP);
|
||||
|
||||
vht_cap_info->enable_mu_bformee =
|
||||
cfg_get(psoc, CFG_VHT_ENABLE_MU_BFORMEE_CAP_FEATURE);
|
||||
vht_cap_info->txop_ps =
|
||||
cfg_get(psoc, CFG_VHT_TXOP_PS);
|
||||
vht_cap_info->ampdu_len_exponent =
|
||||
cfg_get(psoc, CFG_VHT_AMPDU_LEN_EXPONENT);
|
||||
vht_cap_info->rx_mcs_map =
|
||||
cfg_get(psoc, CFG_VHT_RX_MCS_MAP);
|
||||
vht_cap_info->tx_mcs_map =
|
||||
cfg_get(psoc, CFG_VHT_TX_MCS_MAP);
|
||||
vht_cap_info->basic_mcs_set =
|
||||
cfg_get(psoc, CFG_VHT_BASIC_MCS_SET);
|
||||
vht_cap_info->channel_width =
|
||||
cfg_get(psoc, CFG_VHT_CHANNEL_WIDTH);
|
||||
vht_cap_info->rx_mcs =
|
||||
|
|
@ -533,6 +541,17 @@ static void mlme_init_vht_cap_cfg(struct wlan_objmgr_psoc *psoc,
|
|||
cfg_get(psoc, CFG_ENABLE_VHT_FOR_24GHZ);
|
||||
vht_cap_info->vendor_24ghz_band =
|
||||
cfg_get(psoc, CFG_ENABLE_VENDOR_VHT_FOR_24GHZ);
|
||||
vht_cap_info->tx_bfee_sap =
|
||||
cfg_get(psoc, CFG_VHT_ENABLE_TXBF_SAP_MODE);
|
||||
vht_cap_info->vendor_vhtie =
|
||||
cfg_get(psoc, CFG_ENABLE_SUBFEE_IN_VENDOR_VHTIE);
|
||||
|
||||
if (vht_cap_info->enable2x2)
|
||||
vht_cap_info->enable_tx_su =
|
||||
cfg_get(psoc, CFG_VHT_ENABLE_TX_SU_BEAM_FORMER);
|
||||
|
||||
if (vht_cap_info->enable2x2 && vht_cap_info->enable_tx_su)
|
||||
vht_cap_info->num_soundingdim = NUM_OF_SOUNDING_DIMENSIONS;
|
||||
}
|
||||
|
||||
static void mlme_init_rates_in_cfg(struct wlan_objmgr_psoc *psoc,
|
||||
|
|
|
|||
|
|
@ -31,14 +31,39 @@
|
|||
CFG_VALUE_OR_DEFAULT, \
|
||||
"VHT SUPPORTED CHAN WIDTH SET")
|
||||
|
||||
#define CFG_VHT_BEAMFORMEE_ANT_SUPP CFG_UINT( \
|
||||
"tx_bfee_ant_supp", \
|
||||
/*
|
||||
* <ini>
|
||||
* gTxBFCsnValue - ini to set VHT/HE STS Caps field
|
||||
* @Min: 0
|
||||
* @Max: 7
|
||||
* @Default: 7
|
||||
*
|
||||
* This ini is used to configure the STS capability shown in AC/AX mode
|
||||
* MGMT frame IE, the final STS field shown in VHT/HE IE will be calculated
|
||||
* by MIN of (INI set, target report value). Only if gTxBFEnable is enabled
|
||||
* and SU/MU BEAMFORMEE Caps is shown, then STS Caps make sense.
|
||||
*
|
||||
* Related: gTxBFEnable.
|
||||
*
|
||||
* Supported Feature: STA/SAP
|
||||
*
|
||||
* Usage: Internal
|
||||
*
|
||||
* </ini>
|
||||
*/
|
||||
#define CFG_VHT_BEAMFORMEE_ANT_SUPP CFG_INI_UINT( \
|
||||
"txBFCsnValue", \
|
||||
0, \
|
||||
8, \
|
||||
8, \
|
||||
7, \
|
||||
7, \
|
||||
CFG_VALUE_OR_DEFAULT, \
|
||||
"VHT BEAMFORMEE ANTENNA SUPPORTED CAP")
|
||||
|
||||
#define CFG_VHT_ENABLE_TX_SU_BEAM_FORMER CFG_INI_BOOL( \
|
||||
"gEnableTxSUBeamformer", \
|
||||
0, \
|
||||
"vht tx su beam former")
|
||||
|
||||
#define CFG_VHT_NUM_SOUNDING_DIMENSIONS CFG_UINT( \
|
||||
"num_soundingdim", \
|
||||
0, \
|
||||
|
|
@ -86,80 +111,31 @@
|
|||
CFG_VALUE_OR_DEFAULT, \
|
||||
"VHT TX SUPP DATA RATE")
|
||||
|
||||
#define CFG_VHT_ENABLE_TXBF_20MHZ CFG_BOOL( \
|
||||
"enable_txbf_20mhz", \
|
||||
#define CFG_VHT_ENABLE_TXBF_20MHZ CFG_INI_BOOL( \
|
||||
"gTxBFEnable", \
|
||||
0, \
|
||||
"VHT ENABLE TXBF 20MHZ")
|
||||
|
||||
#define CFG_VHT_LDPC_CODING_CAP CFG_INI_BOOL( \
|
||||
"ldpc_coding_cap", \
|
||||
0, \
|
||||
"VHT LDPC CODING CAP")
|
||||
|
||||
#define CFG_VHT_SHORT_GI_80MHZ CFG_INI_BOOL( \
|
||||
"short_gi_80mhz", \
|
||||
1, \
|
||||
"VHT SHORT GI 80MHZ")
|
||||
|
||||
#define CFG_VHT_SHORT_GI_160_AND_80_PLUS_80MHZ CFG_INI_BOOL( \
|
||||
"short_gi_160mhz", \
|
||||
0, \
|
||||
"VHT SHORT GI 160 AND 80 PLUS 80MHZ")
|
||||
|
||||
#define CFG_VHT_TXSTBC CFG_INI_BOOL( \
|
||||
"tx_stbc", \
|
||||
0, \
|
||||
"VHT Tx STBC")
|
||||
|
||||
#define CFG_VHT_RXSTBC CFG_INI_BOOL( \
|
||||
"rx_stbc", \
|
||||
1, \
|
||||
"VHT Rx STBC")
|
||||
|
||||
#define CFG_VHT_SU_BEAMFORMER_CAP CFG_INI_BOOL( \
|
||||
#define CFG_VHT_SU_BEAMFORMER_CAP CFG_BOOL( \
|
||||
"su_bformer", \
|
||||
0, \
|
||||
"VHT SU BEAMFORMER CAP")
|
||||
|
||||
#define CFG_VHT_SU_BEAMFORMEE_CAP CFG_INI_BOOL( \
|
||||
#define CFG_VHT_SU_BEAMFORMEE_CAP CFG_BOOL( \
|
||||
"su_bformee", \
|
||||
1, \
|
||||
"VHT SU BEAMFORMEE CAP")
|
||||
|
||||
#define CFG_VHT_MU_BEAMFORMER_CAP CFG_INI_BOOL( \
|
||||
#define CFG_VHT_MU_BEAMFORMER_CAP CFG_BOOL( \
|
||||
"mu_bformer", \
|
||||
0, \
|
||||
"VHT MU BEAMFORMER CAP")
|
||||
|
||||
#define CFG_VHT_TXOP_PS CFG_INI_BOOL( \
|
||||
#define CFG_VHT_TXOP_PS CFG_BOOL( \
|
||||
"txop_ps", \
|
||||
0, \
|
||||
"VHT TXOP PS")
|
||||
|
||||
#define CFG_VHT_RX_MCS_MAP CFG_INI_UINT( \
|
||||
"rx_mcs_map", \
|
||||
0, \
|
||||
65535, \
|
||||
65534, \
|
||||
CFG_VALUE_OR_DEFAULT, \
|
||||
"VHT RX MCS MAP")
|
||||
|
||||
#define CFG_VHT_TX_MCS_MAP CFG_INI_UINT( \
|
||||
"tx_mcs_map", \
|
||||
0, \
|
||||
65535, \
|
||||
65534, \
|
||||
CFG_VALUE_OR_DEFAULT, \
|
||||
"VHT TX MCS MAP")
|
||||
|
||||
#define CFG_VHT_BASIC_MCS_SET CFG_INI_UINT( \
|
||||
"basic_mcs_set", \
|
||||
0, \
|
||||
65535, \
|
||||
65534, \
|
||||
CFG_VALUE_OR_DEFAULT, \
|
||||
"VHT BASIC MCS SET")
|
||||
|
||||
/*
|
||||
* <ini>
|
||||
* gVhtChannelWidth - Channel width capability for 11ac
|
||||
|
|
@ -427,16 +403,44 @@
|
|||
CFG_VALUE_OR_DEFAULT, \
|
||||
"VHT MPDU Length")
|
||||
|
||||
/*
|
||||
* Enable / Disable Tx beamformee in SAP mode
|
||||
* Default: Disable
|
||||
*/
|
||||
#define CFG_VHT_ENABLE_TXBF_SAP_MODE CFG_INI_BOOL( \
|
||||
"gEnableTxBFeeSAP", \
|
||||
0, \
|
||||
"Enable tx bf sap mode")
|
||||
|
||||
/*
|
||||
* <ini>
|
||||
* enable_subfee_vendor_vhtie - ini to enable/disable SU Bformee in vendor VHTIE
|
||||
* @Min: 0
|
||||
* @Max: 1
|
||||
* @Default: 1
|
||||
*
|
||||
* This ini is used to enable/disable SU Bformee in vendor vht ie if gTxBFEnable
|
||||
* is enabled. if gTxBFEnable is 0 this will not have any effect.
|
||||
*
|
||||
* Related: gTxBFEnable.
|
||||
*
|
||||
* Supported Feature: STA
|
||||
*
|
||||
* Usage: External
|
||||
*
|
||||
* </ini>
|
||||
*/
|
||||
#define CFG_ENABLE_SUBFEE_IN_VENDOR_VHTIE CFG_INI_BOOL( \
|
||||
"enable_subfee_vendor_vhtie", \
|
||||
0, \
|
||||
"Enable subfee in vendor vht ie")
|
||||
|
||||
#define CFG_VHT_CAPS_ALL \
|
||||
CFG(CFG_VHT_SUPP_CHAN_WIDTH) \
|
||||
CFG(CFG_VHT_LDPC_CODING_CAP) \
|
||||
CFG(CFG_VHT_SHORT_GI_80MHZ) \
|
||||
CFG(CFG_VHT_SHORT_GI_160_AND_80_PLUS_80MHZ) \
|
||||
CFG(CFG_VHT_TXSTBC) \
|
||||
CFG(CFG_VHT_RXSTBC) \
|
||||
CFG(CFG_VHT_SU_BEAMFORMER_CAP) \
|
||||
CFG(CFG_VHT_SU_BEAMFORMEE_CAP) \
|
||||
CFG(CFG_VHT_BEAMFORMEE_ANT_SUPP) \
|
||||
CFG(CFG_VHT_ENABLE_TX_SU_BEAM_FORMER) \
|
||||
CFG(CFG_VHT_NUM_SOUNDING_DIMENSIONS) \
|
||||
CFG(CFG_VHT_MU_BEAMFORMER_CAP) \
|
||||
CFG(CFG_VHT_TXOP_PS) \
|
||||
|
|
@ -444,11 +448,8 @@
|
|||
CFG(CFG_VHT_LINK_ADAPTATION_CAP) \
|
||||
CFG(CFG_VHT_RX_ANT_PATTERN) \
|
||||
CFG(CFG_VHT_TX_ANT_PATTERN) \
|
||||
CFG(CFG_VHT_RX_MCS_MAP) \
|
||||
CFG(CFG_VHT_TX_MCS_MAP) \
|
||||
CFG(CFG_VHT_RX_SUPP_DATA_RATE) \
|
||||
CFG(CFG_VHT_TX_SUPP_DATA_RATE) \
|
||||
CFG(CFG_VHT_BASIC_MCS_SET) \
|
||||
CFG(CFG_VHT_ENABLE_TXBF_20MHZ) \
|
||||
CFG(CFG_VHT_CHANNEL_WIDTH) \
|
||||
CFG(CFG_VHT_ENABLE_RX_MCS_8_9) \
|
||||
|
|
@ -463,6 +464,8 @@
|
|||
CFG(CFG_ENABLE_VHT_FOR_24GHZ) \
|
||||
CFG(CFG_ENABLE_VENDOR_VHT_FOR_24GHZ) \
|
||||
CFG(CFG_VHT_AMPDU_LEN_EXPONENT) \
|
||||
CFG(CFG_VHT_MPDU_LEN)
|
||||
CFG(CFG_VHT_MPDU_LEN) \
|
||||
CFG(CFG_VHT_ENABLE_TXBF_SAP_MODE) \
|
||||
CFG(CFG_ENABLE_SUBFEE_IN_VENDOR_VHTIE)
|
||||
|
||||
#endif /* __CFG_MLME_VHT_CAPS_H */
|
||||
|
|
|
|||
|
|
@ -726,7 +726,18 @@ QDF_STATUS wlan_mlme_cfg_get_vht_chan_width(struct wlan_objmgr_psoc *psoc,
|
|||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS wlan_mlme_cfg_set_vht_chan_width(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t value);
|
||||
uint8_t value);
|
||||
|
||||
/**
|
||||
* wlan_mlme_cfg_get_vht_chan_width() - sets vht supported channel width into
|
||||
* cfg item
|
||||
* @psoc: psoc context
|
||||
* @value: data to be set
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS wlan_mlme_cfg_get_vht_chan_width(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t *value);
|
||||
|
||||
/**
|
||||
* wlan_mlme_cfg_get_vht_ldpc_coding_cap() - gets vht ldpc coding cap from
|
||||
|
|
@ -737,7 +748,7 @@ QDF_STATUS wlan_mlme_cfg_set_vht_chan_width(struct wlan_objmgr_psoc *psoc,
|
|||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS wlan_mlme_cfg_get_vht_ldpc_coding_cap(struct wlan_objmgr_psoc *psoc,
|
||||
bool *value);
|
||||
bool *value);
|
||||
|
||||
/**
|
||||
* wlan_mlme_cfg_set_vht_ldpc_coding_cap() - sets vht ldpc coding cap into
|
||||
|
|
@ -773,26 +784,26 @@ QDF_STATUS wlan_mlme_cfg_set_vht_short_gi_80mhz(struct wlan_objmgr_psoc *psoc,
|
|||
bool value);
|
||||
|
||||
/**
|
||||
* wlan_mlme_cfg_get_vht_short_gi_160mhz() - gets vht short gi 160MHz from
|
||||
* wlan_mlme_cfg_get_short_gi_160_mhz() - gets vht short gi 160MHz from
|
||||
* cfg item
|
||||
* @psoc: psoc context
|
||||
* @value: pointer to get required data
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS wlan_mlme_cfg_get_vht_short_gi_160mhz(struct wlan_objmgr_psoc *psoc,
|
||||
bool *value);
|
||||
QDF_STATUS wlan_mlme_cfg_get_short_gi_160_mhz(struct wlan_objmgr_psoc *psoc,
|
||||
bool *value);
|
||||
|
||||
/**
|
||||
* wlan_mlme_cfg_set_vht_short_gi_160mhz() - sets vht short gi 160MHz into
|
||||
* wlan_mlme_cfg_set_short_gi_160_mhz() - sets vht short gi 160MHz into
|
||||
* cfg item
|
||||
* @psoc: psoc context
|
||||
* @value: data to be set
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS wlan_mlme_cfg_set_vht_short_gi_160mhz(struct wlan_objmgr_psoc *psoc,
|
||||
bool value);
|
||||
QDF_STATUS wlan_mlme_cfg_set_short_gi_160_mhz(struct wlan_objmgr_psoc *psoc,
|
||||
bool value);
|
||||
|
||||
/**
|
||||
* wlan_mlme_cfg_get_vht_tx_stbc() - gets vht tx stbc from
|
||||
|
|
@ -805,6 +816,17 @@ QDF_STATUS wlan_mlme_cfg_set_vht_short_gi_160mhz(struct wlan_objmgr_psoc *psoc,
|
|||
QDF_STATUS wlan_mlme_cfg_get_vht_tx_stbc(struct wlan_objmgr_psoc *psoc,
|
||||
bool *value);
|
||||
|
||||
/**
|
||||
* wlan_mlme_cfg_get_vht_rx_stbc() - gets vht rx stbc from
|
||||
* cfg item
|
||||
* @psoc: psoc context
|
||||
* @value: pointer to get required data
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS wlan_mlme_cfg_get_vht_rx_stbc(struct wlan_objmgr_psoc *psoc,
|
||||
bool *value);
|
||||
|
||||
/**
|
||||
* wlan_mlme_cfg_set_vht_tx_stbc() - sets vht tx stbc into
|
||||
* cfg item
|
||||
|
|
@ -872,7 +894,8 @@ QDF_STATUS wlan_mlme_cfg_set_vht_su_bformee(struct wlan_objmgr_psoc *psoc,
|
|||
bool value);
|
||||
|
||||
/**
|
||||
* wlan_mlme_cfg_set_vht_tx_bfee_ant_supp() - sets vht Beamformee antenna support cap
|
||||
* wlan_mlme_cfg_set_vht_tx_bfee_ant_supp() - sets vht Beamformee antenna
|
||||
* support cap
|
||||
* into cfg item
|
||||
* @psoc: psoc context
|
||||
* @value: data to be set
|
||||
|
|
@ -882,6 +905,18 @@ QDF_STATUS wlan_mlme_cfg_set_vht_su_bformee(struct wlan_objmgr_psoc *psoc,
|
|||
QDF_STATUS wlan_mlme_cfg_set_vht_tx_bfee_ant_supp(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t value);
|
||||
|
||||
/**
|
||||
* wlan_mlme_cfg_get_vht_tx_bfee_ant_supp() - sets vht Beamformee antenna
|
||||
* support cap
|
||||
* into cfg item
|
||||
* @psoc: psoc context
|
||||
* @value: data to be set
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS wlan_mlme_cfg_get_vht_tx_bfee_ant_supp(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t *value);
|
||||
|
||||
/**
|
||||
* wlan_mlme_cfg_set_vht_num_sounding_dim() - sets vht no of sounding dimensions
|
||||
* into cfg item
|
||||
|
|
@ -1071,6 +1106,26 @@ QDF_STATUS wlan_mlme_cfg_get_vht_basic_mcs_set(struct wlan_objmgr_psoc *psoc,
|
|||
QDF_STATUS wlan_mlme_cfg_set_vht_basic_mcs_set(struct wlan_objmgr_psoc *psoc,
|
||||
uint32_t value);
|
||||
|
||||
/**
|
||||
* wlan_mlme_get_vht_enable_tx_bf() - VHT Rx MCS capability for 1x1 mode
|
||||
* @psoc: psoc context
|
||||
* @value: data to be set
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS wlan_mlme_get_vht_enable_tx_bf(struct wlan_objmgr_psoc *psoc,
|
||||
bool *value);
|
||||
|
||||
/**
|
||||
* wlan_mlme_get_vht_enable_tx_su_beam() - VHT enable tx su beam
|
||||
* @psoc: psoc context
|
||||
* @value: data to be set
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS wlan_mlme_get_vht_enable_tx_su_beam(struct wlan_objmgr_psoc *psoc,
|
||||
bool *value);
|
||||
|
||||
/**
|
||||
* wlan_mlme_get_vht_channel_width() - gets Channel width capability
|
||||
* for 11ac
|
||||
|
|
@ -1192,4 +1247,23 @@ QDF_STATUS wlan_mlme_get_vht_for_24ghz(struct wlan_objmgr_psoc *psoc,
|
|||
QDF_STATUS wlan_mlme_get_vendor_vht_for_24ghz(struct wlan_objmgr_psoc *psoc,
|
||||
bool *value);
|
||||
|
||||
/**
|
||||
* mlme_update_vht_cap() - update vht capabilities
|
||||
* @psoc: psoc context
|
||||
* @cfg: data to be set
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS mlme_update_vht_cap(struct wlan_objmgr_psoc *psoc,
|
||||
struct wma_tgt_vht_cap *cfg);
|
||||
|
||||
/**
|
||||
* mlme_update_nss_vht_cap() - Update the number of spatial
|
||||
* streams supported for vht
|
||||
* @psoc: psoc context
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS mlme_update_nss_vht_cap(struct wlan_objmgr_psoc *psoc);
|
||||
|
||||
#endif /* _WLAN_MLME_API_H_ */
|
||||
|
|
|
|||
|
|
@ -29,6 +29,16 @@
|
|||
#define CFG_PMKID_MODES_OKC (0x1)
|
||||
#define CFG_PMKID_MODES_PMKSA_CACHING (0x2)
|
||||
|
||||
#define CFG_VHT_BASIC_MCS_SET_STADEF 0xFFFE
|
||||
|
||||
#define CFG_VHT_RX_MCS_MAP_STAMIN 0
|
||||
#define CFG_VHT_RX_MCS_MAP_STAMAX 65535
|
||||
#define CFG_VHT_RX_MCS_MAP_STADEF 65534
|
||||
|
||||
#define CFG_VHT_TX_MCS_MAP_STAMIN 0
|
||||
#define CFG_VHT_TX_MCS_MAP_STAMAX 65535
|
||||
#define CFG_VHT_TX_MCS_MAP_STADEF 65534
|
||||
|
||||
#define CFG_STR_DATA_LEN 17
|
||||
#define CFG_EDCA_DATA_LEN 17
|
||||
|
||||
|
|
@ -312,6 +322,7 @@ struct wlan_mlme_mbo {
|
|||
* @tx_supp_data_rate: Tx highest supported data rate
|
||||
* @basic_mcs_set: Basic MCS set
|
||||
* @enable_txbf_20mhz: enable tx bf for 20mhz
|
||||
* @enable_tx_su: enable VHT tx su beam former
|
||||
* @channel_width: Channel width capability for 11ac
|
||||
* @rx_mcs: VHT Rx MCS capability for 1x1 mode
|
||||
* @tx_mcs: VHT Tx MCS capability for 1x1 mode
|
||||
|
|
@ -328,6 +339,8 @@ struct wlan_mlme_mbo {
|
|||
* ie in 2.4 GHz band
|
||||
* @ampdu_len_exponent: To handle maximum receive AMPDU ampdu len exponent
|
||||
* @ampdu_len: To handle maximum receive AMPDU ampdu len
|
||||
* @tx_bfee_sap: enable tx bfee SAp
|
||||
* @subfee_vendor_vhtie: enable subfee vendor vht ie
|
||||
*/
|
||||
struct mlme_vht_capabilities_info {
|
||||
uint8_t supp_chan_width;
|
||||
|
|
@ -352,9 +365,10 @@ struct mlme_vht_capabilities_info {
|
|||
uint32_t tx_supp_data_rate;
|
||||
uint32_t basic_mcs_set;
|
||||
bool enable_txbf_20mhz;
|
||||
bool enable_tx_su;
|
||||
uint8_t channel_width;
|
||||
uint8_t rx_mcs;
|
||||
uint8_t tx_mcs;
|
||||
uint32_t rx_mcs;
|
||||
uint32_t tx_mcs;
|
||||
uint8_t rx_mcs2x2;
|
||||
uint8_t tx_mcs2x2;
|
||||
bool enable_vht20_mcs9;
|
||||
|
|
@ -366,6 +380,8 @@ struct mlme_vht_capabilities_info {
|
|||
bool vendor_24ghz_band;
|
||||
uint8_t ampdu_len_exponent;
|
||||
uint8_t ampdu_len;
|
||||
bool tx_bfee_sap;
|
||||
bool vendor_vhtie;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -1045,6 +1045,23 @@ QDF_STATUS ucfg_mlme_cfg_set_vht_chan_width(struct wlan_objmgr_psoc *psoc,
|
|||
return wlan_mlme_cfg_set_vht_chan_width(psoc, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* ucfg_mlme_cfg_get_vht_chan_width() - gets vht supported channel width into
|
||||
* cfg item
|
||||
* @psoc: psoc context
|
||||
* @value: data to be set
|
||||
*
|
||||
* Inline UCFG API to be used by HDD/OSIF callers
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS or QDF_STATUS_FAILURE
|
||||
*/
|
||||
static inline
|
||||
QDF_STATUS ucfg_mlme_cfg_get_vht_chan_width(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t *value)
|
||||
{
|
||||
return wlan_mlme_cfg_get_vht_chan_width(psoc, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* ucfg_mlme_cfg_set_vht_ldpc_coding_cap() - sets vht ldpc coding cap into
|
||||
* cfg item
|
||||
|
|
@ -1062,6 +1079,42 @@ ucfg_mlme_cfg_set_vht_ldpc_coding_cap(struct wlan_objmgr_psoc *psoc,
|
|||
return wlan_mlme_cfg_set_vht_ldpc_coding_cap(psoc, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* ucfg_mlme_cfg_get_short_gi_160_mhz() - gets basic set SHORT GI 160MHZ from
|
||||
* cfg item
|
||||
* @psoc: psoc context
|
||||
* @value: data to be set
|
||||
*
|
||||
* Inline UCFG API to be used by HDD/OSIF callers to get the
|
||||
* ignore_peer_ht_opmode flag value
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS or QDF_STATUS_FAILURE
|
||||
*/
|
||||
static inline QDF_STATUS
|
||||
ucfg_mlme_cfg_get_short_gi_160_mhz(struct wlan_objmgr_psoc *psoc,
|
||||
bool *value)
|
||||
{
|
||||
return wlan_mlme_cfg_get_short_gi_160_mhz(psoc, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* ucfg_mlme_cfg_set_short_gi_160_mhz() - sets basic set SHORT GI 160MHZ into
|
||||
* cfg item
|
||||
* @psoc: psoc context
|
||||
* @value: data to be set
|
||||
*
|
||||
* Inline UCFG API to be used by HDD/OSIF callers to get the
|
||||
* ignore_peer_ht_opmode flag value
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS or QDF_STATUS_FAILURE
|
||||
*/
|
||||
static inline QDF_STATUS
|
||||
ucfg_mlme_cfg_set_short_gi_160_mhz(struct wlan_objmgr_psoc *psoc,
|
||||
bool value)
|
||||
{
|
||||
return wlan_mlme_cfg_set_short_gi_160_mhz(psoc, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* ucfg_mlme_cfg_get_vht_tx_stbc() - gets vht tx stbc from
|
||||
* cfg item
|
||||
|
|
@ -1080,6 +1133,24 @@ ucfg_mlme_cfg_get_vht_tx_stbc(struct wlan_objmgr_psoc *psoc,
|
|||
return wlan_mlme_cfg_get_vht_tx_stbc(psoc, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* ucfg_mlme_cfg_get_vht_rx_stbc() - gets vht tx stbc from
|
||||
* cfg item
|
||||
* @psoc: psoc context
|
||||
* @value: pointer to get required data
|
||||
*
|
||||
* Inline UCFG API to be used by HDD/OSIF callers to get the
|
||||
* ignore_peer_ht_opmode flag value
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS or QDF_STATUS_FAILURE
|
||||
*/
|
||||
static inline QDF_STATUS
|
||||
ucfg_mlme_cfg_get_vht_rx_stbc(struct wlan_objmgr_psoc *psoc,
|
||||
bool *value)
|
||||
{
|
||||
return wlan_mlme_cfg_get_vht_rx_stbc(psoc, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* ucfg_mlme_cfg_set_vht_tx_bfee_ant_supp() - sets vht Beamformee antenna
|
||||
* support cap into cfg item
|
||||
|
|
@ -1097,6 +1168,23 @@ ucfg_mlme_cfg_set_vht_tx_bfee_ant_supp(struct wlan_objmgr_psoc *psoc,
|
|||
return wlan_mlme_cfg_set_vht_tx_bfee_ant_supp(psoc, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* ucfg_mlme_cfg_get_vht_tx_bfee_ant_supp() - gets vht Beamformee antenna
|
||||
* support cap into cfg item
|
||||
* @psoc: psoc context
|
||||
* @value: data to be set
|
||||
*
|
||||
* Inline UCFG API to be used by HDD/OSIF callers
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS or QDF_STATUS_FAILURE
|
||||
*/
|
||||
static inline QDF_STATUS
|
||||
ucfg_mlme_cfg_get_vht_tx_bfee_ant_supp(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t *value)
|
||||
{
|
||||
return wlan_mlme_cfg_get_vht_tx_bfee_ant_supp(psoc, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* ucfg_mlme_cfg_get_vht_rx_mcs_map() - gets vht rx mcs map from
|
||||
* cfg item
|
||||
|
|
@ -1237,6 +1325,40 @@ ucfg_mlme_cfg_set_vht_basic_mcs_set(struct wlan_objmgr_psoc *psoc,
|
|||
return wlan_mlme_cfg_set_vht_basic_mcs_set(psoc, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* ucfg_mlme_get_vht_enable_tx_bf() - gets enable TXBF for 20MHZ
|
||||
* for 11ac
|
||||
* @psoc: psoc context
|
||||
* @value: data to be set
|
||||
*
|
||||
* Inline UCFG API to be used by HDD/OSIF callers to get the
|
||||
* ignore_peer_ht_opmode flag value
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS or QDF_STATUS_FAILURE
|
||||
*/
|
||||
static inline QDF_STATUS
|
||||
ucfg_mlme_get_vht_enable_tx_bf(struct wlan_objmgr_psoc *psoc, bool *value)
|
||||
{
|
||||
return wlan_mlme_get_vht_enable_tx_bf(psoc, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* ucfg_mlme_get_vht_enable_tx_su_beam() - gets enable enable_tx_su_beam
|
||||
* for 11ac
|
||||
* @psoc: psoc context
|
||||
* @value: data to be set
|
||||
*
|
||||
* Inline UCFG API to be used by HDD/OSIF callers to get the
|
||||
* ignore_peer_ht_opmode flag value
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS or QDF_STATUS_FAILURE
|
||||
*/
|
||||
static inline QDF_STATUS
|
||||
ucfg_mlme_get_vht_enable_tx_su_beam(struct wlan_objmgr_psoc *psoc, bool *value)
|
||||
{
|
||||
return wlan_mlme_get_vht_enable_tx_su_beam(psoc, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* ucfg_mlme_get_vht_channel_width() - gets Channel width capability
|
||||
* for 11ac
|
||||
|
|
@ -1433,4 +1555,39 @@ ucfg_mlme_get_vendor_vht_for_24ghz(struct wlan_objmgr_psoc *psoc, bool *value)
|
|||
{
|
||||
return wlan_mlme_get_vendor_vht_for_24ghz(psoc, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* ucfg_mlme_update_vht_cap() - Update vht capabilities
|
||||
* @psoc: psoc context
|
||||
* @value: data to be set
|
||||
*
|
||||
* Inline UCFG API to be used by HDD/OSIF callers to get the
|
||||
* ignore_peer_ht_opmode flag value
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS or QDF_STATUS_FAILURE
|
||||
*/
|
||||
static inline QDF_STATUS
|
||||
ucfg_mlme_update_vht_cap(struct wlan_objmgr_psoc *psoc,
|
||||
struct wma_tgt_vht_cap *cfg)
|
||||
{
|
||||
return mlme_update_vht_cap(psoc, cfg);
|
||||
}
|
||||
|
||||
/**
|
||||
* ucfg_mlme_update_nss_vht_cap() -Update the number of spatial
|
||||
* streams supported for vht
|
||||
* @psoc: psoc context
|
||||
* @value: data to be set
|
||||
*
|
||||
* Inline UCFG API to be used by HDD/OSIF callers to get the
|
||||
* ignore_peer_ht_opmode flag value
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS or QDF_STATUS_FAILURE
|
||||
*/
|
||||
static inline QDF_STATUS
|
||||
ucfg_mlme_update_nss_vht_cap(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
return mlme_update_nss_vht_cap(psoc);
|
||||
}
|
||||
|
||||
#endif /* _WLAN_MLME_UCFG_API_H_ */
|
||||
|
|
|
|||
|
|
@ -1230,6 +1230,21 @@ wlan_mlme_cfg_set_vht_chan_width(struct wlan_objmgr_psoc *psoc, uint8_t value)
|
|||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
wlan_mlme_cfg_get_vht_chan_width(struct wlan_objmgr_psoc *psoc, uint8_t *value)
|
||||
{
|
||||
struct wlan_mlme_psoc_obj *mlme_obj;
|
||||
|
||||
mlme_obj = mlme_get_psoc_obj(psoc);
|
||||
if (!mlme_obj) {
|
||||
mlme_err("Failed to get MLME Obj");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
*value = mlme_obj->cfg.vht_caps.vht_cap_info.supp_chan_width;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
wlan_mlme_cfg_set_vht_ldpc_coding_cap(struct wlan_objmgr_psoc *psoc,
|
||||
|
|
@ -1248,6 +1263,39 @@ wlan_mlme_cfg_set_vht_ldpc_coding_cap(struct wlan_objmgr_psoc *psoc,
|
|||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
wlan_mlme_cfg_set_short_gi_160_mhz(struct wlan_objmgr_psoc *psoc,
|
||||
bool value)
|
||||
{
|
||||
struct wlan_mlme_psoc_obj *mlme_obj;
|
||||
|
||||
mlme_obj = mlme_get_psoc_obj(psoc);
|
||||
if (!mlme_obj) {
|
||||
mlme_err("Failed to get MLME Obj");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
mlme_obj->cfg.vht_caps.vht_cap_info.short_gi_160mhz = value;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
wlan_mlme_cfg_get_short_gi_160_mhz(struct wlan_objmgr_psoc *psoc, bool *value)
|
||||
{
|
||||
struct wlan_mlme_psoc_obj *mlme_obj;
|
||||
|
||||
mlme_obj = mlme_get_psoc_obj(psoc);
|
||||
if (!mlme_obj) {
|
||||
mlme_err("Failed to get MLME Obj");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
*value = mlme_obj->cfg.vht_caps.vht_cap_info.short_gi_160mhz;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
wlan_mlme_cfg_get_vht_tx_stbc(struct wlan_objmgr_psoc *psoc, bool *value)
|
||||
{
|
||||
|
|
@ -1264,6 +1312,21 @@ wlan_mlme_cfg_get_vht_tx_stbc(struct wlan_objmgr_psoc *psoc, bool *value)
|
|||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
wlan_mlme_cfg_get_vht_rx_stbc(struct wlan_objmgr_psoc *psoc, bool *value)
|
||||
{
|
||||
struct wlan_mlme_psoc_obj *mlme_obj;
|
||||
|
||||
mlme_obj = mlme_get_psoc_obj(psoc);
|
||||
if (!mlme_obj) {
|
||||
mlme_err("Failed to get MLME Obj");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
*value = mlme_obj->cfg.vht_caps.vht_cap_info.rx_stbc;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
wlan_mlme_cfg_set_vht_tx_bfee_ant_supp(struct wlan_objmgr_psoc *psoc,
|
||||
|
|
@ -1282,6 +1345,23 @@ wlan_mlme_cfg_set_vht_tx_bfee_ant_supp(struct wlan_objmgr_psoc *psoc,
|
|||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
wlan_mlme_cfg_get_vht_tx_bfee_ant_supp(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t *value)
|
||||
{
|
||||
struct wlan_mlme_psoc_obj *mlme_obj;
|
||||
|
||||
mlme_obj = mlme_get_psoc_obj(psoc);
|
||||
if (!mlme_obj) {
|
||||
mlme_err("Failed to get MLME Obj");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
*value = mlme_obj->cfg.vht_caps.vht_cap_info.tx_bfee_ant_supp;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
wlan_mlme_cfg_get_vht_rx_mcs_map(struct wlan_objmgr_psoc *psoc,
|
||||
uint32_t *value)
|
||||
|
|
@ -1418,6 +1498,38 @@ wlan_mlme_cfg_set_vht_basic_mcs_set(struct wlan_objmgr_psoc *psoc,
|
|||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
wlan_mlme_get_vht_enable_tx_bf(struct wlan_objmgr_psoc *psoc, bool *value)
|
||||
{
|
||||
struct wlan_mlme_psoc_obj *mlme_obj;
|
||||
|
||||
mlme_obj = mlme_get_psoc_obj(psoc);
|
||||
if (!mlme_obj) {
|
||||
mlme_err("Failed to get MLME Obj");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
*value = mlme_obj->cfg.vht_caps.vht_cap_info.enable_txbf_20mhz;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
wlan_mlme_get_vht_enable_tx_su_beam(struct wlan_objmgr_psoc *psoc, bool *value)
|
||||
{
|
||||
struct wlan_mlme_psoc_obj *mlme_obj;
|
||||
|
||||
mlme_obj = mlme_get_psoc_obj(psoc);
|
||||
if (!mlme_obj) {
|
||||
mlme_err("Failed to get MLME Obj");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
*value = mlme_obj->cfg.vht_caps.vht_cap_info.enable_tx_su;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
wlan_mlme_get_vht_channel_width(struct wlan_objmgr_psoc *psoc, uint8_t *value)
|
||||
{
|
||||
|
|
@ -1610,3 +1722,142 @@ wlan_mlme_get_vendor_vht_for_24ghz(struct wlan_objmgr_psoc *psoc, bool *value)
|
|||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS mlme_update_vht_cap(struct wlan_objmgr_psoc *psoc,
|
||||
struct wma_tgt_vht_cap *cfg)
|
||||
{
|
||||
struct wlan_mlme_psoc_obj *mlme_obj;
|
||||
struct mlme_vht_capabilities_info vht_cap_info;
|
||||
uint32_t value = 0;
|
||||
bool hw_rx_ldpc_enabled;
|
||||
|
||||
mlme_obj = mlme_get_psoc_obj(psoc);
|
||||
if (!mlme_obj) {
|
||||
mlme_err("Failed to get MLME Obj");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
vht_cap_info = mlme_obj->cfg.vht_caps.vht_cap_info;
|
||||
|
||||
/*
|
||||
* VHT max MPDU length:
|
||||
* override if user configured value is too high
|
||||
* that the target cannot support
|
||||
*/
|
||||
if (vht_cap_info.ampdu_len > cfg->vht_max_mpdu)
|
||||
vht_cap_info.ampdu_len = cfg->vht_max_mpdu;
|
||||
|
||||
value = (CFG_VHT_BASIC_MCS_SET_STADEF & VHT_MCS_1x1) |
|
||||
vht_cap_info.basic_mcs_set;
|
||||
if (vht_cap_info.enable2x2)
|
||||
value = (value & VHT_MCS_2x2) | (vht_cap_info.rx_mcs2x2 << 2);
|
||||
vht_cap_info.basic_mcs_set = value;
|
||||
|
||||
value = (CFG_VHT_RX_MCS_MAP_STADEF & VHT_MCS_1x1) | vht_cap_info.rx_mcs;
|
||||
if (vht_cap_info.enable2x2)
|
||||
value = (value & VHT_MCS_2x2) | (vht_cap_info.rx_mcs2x2 << 2);
|
||||
vht_cap_info.rx_mcs_map = value;
|
||||
|
||||
value = (CFG_VHT_TX_MCS_MAP_STADEF & VHT_MCS_1x1) | vht_cap_info.tx_mcs;
|
||||
if (vht_cap_info.enable2x2)
|
||||
value = (value & VHT_MCS_2x2) | (vht_cap_info.tx_mcs2x2 << 2);
|
||||
vht_cap_info.tx_mcs_map = value;
|
||||
|
||||
/* Set HW RX LDPC capability */
|
||||
hw_rx_ldpc_enabled = !!cfg->vht_rx_ldpc;
|
||||
if (hw_rx_ldpc_enabled != vht_cap_info.ldpc_coding_cap)
|
||||
vht_cap_info.ldpc_coding_cap = hw_rx_ldpc_enabled;
|
||||
|
||||
/* set the Guard interval 80MHz */
|
||||
if (vht_cap_info.short_gi_80mhz && !cfg->vht_short_gi_80)
|
||||
vht_cap_info.short_gi_80mhz = cfg->vht_short_gi_80;
|
||||
|
||||
/* Set VHT TX STBC cap */
|
||||
if (vht_cap_info.tx_stbc && !cfg->vht_tx_stbc)
|
||||
vht_cap_info.tx_stbc = cfg->vht_tx_stbc;
|
||||
|
||||
/* Set VHT RX STBC cap */
|
||||
if (vht_cap_info.rx_stbc && !cfg->vht_rx_stbc)
|
||||
vht_cap_info.rx_stbc = cfg->vht_rx_stbc;
|
||||
|
||||
/* Set VHT SU Beamformer cap */
|
||||
if (vht_cap_info.su_bformer && !cfg->vht_su_bformer)
|
||||
vht_cap_info.su_bformer = cfg->vht_su_bformer;
|
||||
|
||||
/* check and update SU BEAMFORMEE capabality */
|
||||
if (vht_cap_info.enable_txbf_20mhz && !cfg->vht_su_bformee)
|
||||
vht_cap_info.su_bformee = cfg->vht_su_bformee;
|
||||
|
||||
/* Set VHT MU Beamformer cap */
|
||||
if (vht_cap_info.mu_bformer && !cfg->vht_mu_bformer)
|
||||
vht_cap_info.mu_bformer = cfg->vht_mu_bformer;
|
||||
|
||||
/* Set VHT MU Beamformee cap */
|
||||
if (vht_cap_info.enable_mu_bformee && !cfg->vht_mu_bformee)
|
||||
vht_cap_info.enable_mu_bformee = cfg->vht_mu_bformee;
|
||||
|
||||
/*
|
||||
* VHT max AMPDU len exp:
|
||||
* override if user configured value is too high
|
||||
* that the target cannot support.
|
||||
* Even though Rome publish ampdu_len=7, it can
|
||||
* only support 4 because of some h/w bug.
|
||||
*/
|
||||
if (vht_cap_info.ampdu_len_exponent > cfg->vht_max_ampdu_len_exp)
|
||||
vht_cap_info.ampdu_len_exponent = cfg->vht_max_ampdu_len_exp;
|
||||
|
||||
/* Set VHT TXOP PS CAP */
|
||||
if (vht_cap_info.txop_ps && !cfg->vht_txop_ps)
|
||||
vht_cap_info.txop_ps = cfg->vht_txop_ps;
|
||||
|
||||
/* set the Guard interval 160MHz */
|
||||
if (vht_cap_info.short_gi_160mhz && !cfg->vht_short_gi_160)
|
||||
vht_cap_info.short_gi_160mhz = cfg->vht_short_gi_160;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
|
||||
}
|
||||
|
||||
QDF_STATUS mlme_update_nss_vht_cap(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
struct wlan_mlme_psoc_obj *mlme_obj;
|
||||
struct mlme_vht_capabilities_info vht_cap_info;
|
||||
uint32_t temp = 0;
|
||||
|
||||
mlme_obj = mlme_get_psoc_obj(psoc);
|
||||
if (!mlme_obj) {
|
||||
mlme_err("Failed to get MLME Obj");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
vht_cap_info = mlme_obj->cfg.vht_caps.vht_cap_info;
|
||||
|
||||
temp = vht_cap_info.basic_mcs_set;
|
||||
temp = (temp & 0xFFFC) | vht_cap_info.rx_mcs;
|
||||
if (vht_cap_info.enable2x2)
|
||||
temp = (temp & 0xFFF3) | (vht_cap_info.rx_mcs2x2 << 2);
|
||||
else
|
||||
temp |= 0x000C;
|
||||
|
||||
vht_cap_info.basic_mcs_set = temp;
|
||||
|
||||
temp = vht_cap_info.rx_mcs_map;
|
||||
temp = (temp & 0xFFFC) | vht_cap_info.rx_mcs;
|
||||
if (vht_cap_info.enable2x2)
|
||||
temp = (temp & 0xFFF3) | (vht_cap_info.rx_mcs2x2 << 2);
|
||||
else
|
||||
temp |= 0x000C;
|
||||
|
||||
vht_cap_info.rx_mcs_map = temp;
|
||||
|
||||
temp = vht_cap_info.tx_mcs_map;
|
||||
temp = (temp & 0xFFFC) | vht_cap_info.tx_mcs;
|
||||
if (vht_cap_info.enable2x2)
|
||||
temp = (temp & 0xFFF3) | (vht_cap_info.tx_mcs2x2 << 2);
|
||||
else
|
||||
temp |= 0x000C;
|
||||
|
||||
vht_cap_info.tx_mcs_map = temp;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4468,78 +4468,6 @@ enum hdd_link_speed_rpt_type {
|
|||
#define CFG_ENABLE_MCC_ADATIVE_SCHEDULER_ENABLED_MAX (1)
|
||||
#define CFG_ENABLE_MCC_ADATIVE_SCHEDULER_ENABLED_DEFAULT (1)
|
||||
|
||||
#define CFG_VHT_SU_BEAMFORMEE_CAP_FEATURE "gTxBFEnable"
|
||||
#define CFG_VHT_SU_BEAMFORMEE_CAP_FEATURE_MIN (WNI_CFG_VHT_SU_BEAMFORMEE_CAP_STAMIN)
|
||||
#define CFG_VHT_SU_BEAMFORMEE_CAP_FEATURE_MAX (WNI_CFG_VHT_SU_BEAMFORMEE_CAP_STAMAX)
|
||||
#define CFG_VHT_SU_BEAMFORMEE_CAP_FEATURE_DEFAULT (WNI_CFG_VHT_SU_BEAMFORMEE_CAP_STADEF)
|
||||
|
||||
/*
|
||||
* <ini>
|
||||
* enable_subfee_vendor_vhtie - ini to enable/disable SU Bformee in vendor VHTIE
|
||||
* @Min: 0
|
||||
* @Max: 1
|
||||
* @Default: 1
|
||||
*
|
||||
* This ini is used to enable/disable SU Bformee in vendor vht ie if gTxBFEnable
|
||||
* is enabled. if gTxBFEnable is 0 this will not have any effect.
|
||||
*
|
||||
* Related: gTxBFEnable.
|
||||
*
|
||||
* Supported Feature: STA
|
||||
*
|
||||
* Usage: External
|
||||
*
|
||||
* </ini>
|
||||
*/
|
||||
#define CFG_ENABLE_SUBFEE_IN_VENDOR_VHTIE_NAME "enable_subfee_vendor_vhtie"
|
||||
#define CFG_ENABLE_SUBFEE_IN_VENDOR_VHTIE_MIN (0)
|
||||
#define CFG_ENABLE_SUBFEE_IN_VENDOR_VHTIE_MAX (1)
|
||||
#define CFG_ENABLE_SUBFEE_IN_VENDOR_VHTIE_DEFAULT (1)
|
||||
|
||||
/*
|
||||
* Enable / Disable Tx beamformee in SAP mode
|
||||
* Default: Disable
|
||||
*/
|
||||
#define CFG_VHT_ENABLE_TXBF_SAP_MODE "gEnableTxBFeeSAP"
|
||||
#define CFG_VHT_ENABLE_TXBF_SAP_MODE_MIN (0)
|
||||
#define CFG_VHT_ENABLE_TXBF_SAP_MODE_MAX (1)
|
||||
#define CFG_VHT_ENABLE_TXBF_SAP_MODE_DEFAULT (0)
|
||||
|
||||
/*
|
||||
* <ini>
|
||||
* gTxBFCsnValue - ini to set VHT/HE STS Caps field
|
||||
* @Min: 0
|
||||
* @Max: 7
|
||||
* @Default: 7
|
||||
*
|
||||
* This ini is used to configure the STS capability shown in AC/AX mode
|
||||
* MGMT frame IE, the final STS field shown in VHT/HE IE will be calculated
|
||||
* by MIN of (INI set, target report value). Only if gTxBFEnable is enabled
|
||||
* and SU/MU BEAMFORMEE Caps is shown, then STS Caps make sense.
|
||||
*
|
||||
* Related: gTxBFEnable.
|
||||
*
|
||||
* Supported Feature: STA/SAP
|
||||
*
|
||||
* Usage: Internal
|
||||
*
|
||||
* </ini>
|
||||
*/
|
||||
#define CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED "gTxBFCsnValue"
|
||||
#define CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED_MIN (WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED_STAMIN)
|
||||
#define CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED_MAX (WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED_STAMAX - 1)
|
||||
#define CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED_DEFAULT (WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED_STADEF - 1)
|
||||
|
||||
#define CFG_VHT_ENABLE_TXBF_IN_20MHZ "gEnableTxBFin20MHz"
|
||||
#define CFG_VHT_ENABLE_TXBF_IN_20MHZ_MIN (0)
|
||||
#define CFG_VHT_ENABLE_TXBF_IN_20MHZ_MAX (1)
|
||||
#define CFG_VHT_ENABLE_TXBF_IN_20MHZ_DEFAULT (0)
|
||||
|
||||
#define CFG_VHT_ENABLE_TX_SU_BEAM_FORMER "gEnableTxSUBeamformer"
|
||||
#define CFG_VHT_ENABLE_TX_SU_BEAM_FORMER_MIN (0)
|
||||
#define CFG_VHT_ENABLE_TX_SU_BEAM_FORMER_MAX (1)
|
||||
#define CFG_VHT_ENABLE_TX_SU_BEAM_FORMER_DEFAULT (0)
|
||||
|
||||
#define CFG_DISABLE_LDPC_WITH_TXBF_AP "gDisableLDPCWithTxbfAP"
|
||||
#define CFG_DISABLE_LDPC_WITH_TXBF_AP_MIN (0)
|
||||
#define CFG_DISABLE_LDPC_WITH_TXBF_AP_MAX (1)
|
||||
|
|
@ -8202,30 +8130,12 @@ struct hdd_config {
|
|||
uint32_t bad_peer_tput_ieee80211ac;
|
||||
uint32_t bad_peer_limit_ieee80211ac;
|
||||
#endif
|
||||
uint8_t vhtChannelWidth;
|
||||
uint8_t vhtRxMCS;
|
||||
uint8_t vhtTxMCS;
|
||||
bool enableTxBF;
|
||||
bool enable_subfee_vendor_vhtie;
|
||||
bool enable_txbf_sap_mode;
|
||||
bool enable_vht20_mcs9;
|
||||
uint8_t txBFCsnValue;
|
||||
bool enable_su_tx_bformer;
|
||||
uint8_t vhtRxMCS2x2;
|
||||
uint8_t vhtTxMCS2x2;
|
||||
bool enable2x2;
|
||||
uint32_t vdev_type_nss_2g;
|
||||
uint32_t vdev_type_nss_5g;
|
||||
bool enableMuBformee;
|
||||
bool enableVhtpAid;
|
||||
bool enableVhtGid;
|
||||
bool enableTxBFin20MHz;
|
||||
uint8_t enableAmpduPs;
|
||||
uint8_t enableHtSmps;
|
||||
uint8_t htSmps;
|
||||
bool enableFirstScan2GOnly;
|
||||
bool enableRxSTBC;
|
||||
bool enableTxSTBC;
|
||||
uint8_t enable_tx_ldpc;
|
||||
uint8_t enable_rx_ldpc;
|
||||
bool prevent_link_down;
|
||||
|
|
@ -8234,8 +8144,6 @@ struct hdd_config {
|
|||
uint8_t enableMCCAdaptiveScheduler;
|
||||
bool enableSSR;
|
||||
bool enable_data_stall_det;
|
||||
bool enableVhtFor24GHzBand;
|
||||
bool enable_sap_vendor_vht;
|
||||
bool bFastRoamInConIniFeatureEnabled;
|
||||
bool fEnableSNRMonitoring;
|
||||
/*PNO related parameters */
|
||||
|
|
@ -8258,8 +8166,7 @@ struct hdd_config {
|
|||
uint32_t ibssPs1RxChainInAtimEnable;
|
||||
|
||||
bool enable_ip_tcp_udp_checksum_offload;
|
||||
uint8_t fVhtAmpduLenExponent;
|
||||
uint32_t vhtMpduLen;
|
||||
uint32_t IpaConfig;
|
||||
bool IpaClkScalingEnable;
|
||||
#ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH
|
||||
uint32_t WlanMccToSccSwitchMode;
|
||||
|
|
|
|||
|
|
@ -3260,6 +3260,18 @@ void hdd_pld_ipa_uc_shutdown_pipes(void);
|
|||
* Return: per_index_score within the max limit
|
||||
*/
|
||||
uint32_t hdd_limit_max_per_index_score(uint32_t per_index_score);
|
||||
|
||||
/**
|
||||
* hdd_update_score_config - API to update candidate scoring related params
|
||||
* configuration parameters
|
||||
* @score_config: score config to update
|
||||
* @cfg: config params
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS hdd_update_score_config(
|
||||
struct scoring_config *score_config, struct hdd_context *hdd_ctx);
|
||||
|
||||
/**
|
||||
* hdd_get_stainfo() - get stainfo for the specified peer
|
||||
* @astainfo: array of the station info in which the sta info
|
||||
|
|
|
|||
|
|
@ -1688,20 +1688,6 @@ struct reg_table_entry g_registry_table[] = {
|
|||
CFG_ENABLE_FIRST_SCAN_2G_ONLY_MIN,
|
||||
CFG_ENABLE_FIRST_SCAN_2G_ONLY_MAX),
|
||||
|
||||
REG_VARIABLE(CFG_ENABLE_RX_STBC, WLAN_PARAM_Integer,
|
||||
struct hdd_config, enableRxSTBC,
|
||||
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
|
||||
CFG_ENABLE_RX_STBC_DEFAULT,
|
||||
CFG_ENABLE_RX_STBC_MIN,
|
||||
CFG_ENABLE_RX_STBC_MAX),
|
||||
|
||||
REG_VARIABLE(CFG_ENABLE_TX_STBC, WLAN_PARAM_Integer,
|
||||
struct hdd_config, enableTxSTBC,
|
||||
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
|
||||
CFG_ENABLE_TX_STBC_DEFAULT,
|
||||
CFG_ENABLE_TX_STBC_MIN,
|
||||
CFG_ENABLE_TX_STBC_MAX),
|
||||
|
||||
REG_VARIABLE(CFG_SCAN_AGING_PARAM_NAME, WLAN_PARAM_Integer,
|
||||
struct hdd_config, scanAgingTimeout,
|
||||
VAR_FLAGS_OPTIONAL,
|
||||
|
|
@ -1745,48 +1731,6 @@ struct reg_table_entry g_registry_table[] = {
|
|||
CFG_IBSS_ADHOC_CHANNEL_24GHZ_MIN,
|
||||
CFG_IBSS_ADHOC_CHANNEL_24GHZ_MAX),
|
||||
|
||||
REG_VARIABLE(CFG_VHT_SU_BEAMFORMEE_CAP_FEATURE, WLAN_PARAM_Integer,
|
||||
struct hdd_config, enableTxBF,
|
||||
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
|
||||
CFG_VHT_SU_BEAMFORMEE_CAP_FEATURE_DEFAULT,
|
||||
CFG_VHT_SU_BEAMFORMEE_CAP_FEATURE_MIN,
|
||||
CFG_VHT_SU_BEAMFORMEE_CAP_FEATURE_MAX),
|
||||
|
||||
REG_VARIABLE(CFG_ENABLE_SUBFEE_IN_VENDOR_VHTIE_NAME, WLAN_PARAM_Integer,
|
||||
struct hdd_config, enable_subfee_vendor_vhtie,
|
||||
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
|
||||
CFG_ENABLE_SUBFEE_IN_VENDOR_VHTIE_DEFAULT,
|
||||
CFG_ENABLE_SUBFEE_IN_VENDOR_VHTIE_MIN,
|
||||
CFG_ENABLE_SUBFEE_IN_VENDOR_VHTIE_MAX),
|
||||
|
||||
REG_VARIABLE(CFG_VHT_ENABLE_TXBF_SAP_MODE, WLAN_PARAM_Integer,
|
||||
struct hdd_config, enable_txbf_sap_mode,
|
||||
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
|
||||
CFG_VHT_ENABLE_TXBF_SAP_MODE_DEFAULT,
|
||||
CFG_VHT_ENABLE_TXBF_SAP_MODE_MIN,
|
||||
CFG_VHT_ENABLE_TXBF_SAP_MODE_MAX),
|
||||
|
||||
REG_VARIABLE(CFG_VHT_ENABLE_TXBF_IN_20MHZ, WLAN_PARAM_Integer,
|
||||
struct hdd_config, enableTxBFin20MHz,
|
||||
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
|
||||
CFG_VHT_ENABLE_TXBF_IN_20MHZ_DEFAULT,
|
||||
CFG_VHT_ENABLE_TXBF_IN_20MHZ_MIN,
|
||||
CFG_VHT_ENABLE_TXBF_IN_20MHZ_MAX),
|
||||
|
||||
REG_VARIABLE(CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED, WLAN_PARAM_Integer,
|
||||
struct hdd_config, txBFCsnValue,
|
||||
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
|
||||
CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED_DEFAULT,
|
||||
CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED_MIN,
|
||||
CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED_MAX),
|
||||
|
||||
REG_VARIABLE(CFG_VHT_ENABLE_TX_SU_BEAM_FORMER, WLAN_PARAM_Integer,
|
||||
struct hdd_config, enable_su_tx_bformer,
|
||||
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
|
||||
CFG_VHT_ENABLE_TX_SU_BEAM_FORMER_DEFAULT,
|
||||
CFG_VHT_ENABLE_TX_SU_BEAM_FORMER_MIN,
|
||||
CFG_VHT_ENABLE_TX_SU_BEAM_FORMER_MAX),
|
||||
|
||||
REG_VARIABLE(CFG_DISABLE_LDPC_WITH_TXBF_AP, WLAN_PARAM_Integer,
|
||||
struct hdd_config, disableLDPCWithTxbfAP,
|
||||
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
|
||||
|
|
@ -4384,137 +4328,6 @@ QDF_STATUS hdd_hex_string_to_u16_array(char *str,
|
|||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* hdd_update_vht_cap_in_cfg() - to update VHT cap in global CFG
|
||||
* @hdd_ctx: pointer to hdd context
|
||||
*
|
||||
* This API will update the VHT config in CFG after taking intersection
|
||||
* of INI and firmware capabilities provided reading CFG
|
||||
*
|
||||
* Return: true or false
|
||||
*/
|
||||
static bool hdd_update_vht_cap_in_cfg(struct hdd_context *hdd_ctx)
|
||||
{
|
||||
bool status = true;
|
||||
uint32_t val;
|
||||
struct hdd_config *config = hdd_ctx->config;
|
||||
mac_handle_t mac_handle = hdd_ctx->mac_handle;
|
||||
|
||||
if (sme_cfg_set_int(mac_handle, WNI_CFG_VHT_ENABLE_TXBF_20MHZ,
|
||||
config->enableTxBFin20MHz) ==
|
||||
QDF_STATUS_E_FAILURE) {
|
||||
status = false;
|
||||
hdd_err("Couldn't set value for WNI_CFG_VHT_ENABLE_TXBF_20MHZ");
|
||||
}
|
||||
/* Based on cfg.ini, update the Basic MCS set, RX/TX MCS map
|
||||
* in the cfg.dat. Valid values are 0(MCS0-7), 1(MCS0-8), 2(MCS0-9)
|
||||
* we update only the least significant 2 bits in the
|
||||
* corresponding fields.
|
||||
*/
|
||||
if ((config->dot11Mode == eHDD_DOT11_MODE_AUTO) ||
|
||||
(config->dot11Mode == eHDD_DOT11_MODE_11ac_ONLY) ||
|
||||
(config->dot11Mode == eHDD_DOT11_MODE_11ac)) {
|
||||
/* Currently shortGI40Mhz is used for shortGI80Mhz and 160MHz*/
|
||||
if (sme_cfg_set_int(mac_handle, WNI_CFG_VHT_SHORT_GI_80MHZ,
|
||||
config->ShortGI40MhzEnable) == QDF_STATUS_E_FAILURE) {
|
||||
status = false;
|
||||
hdd_err("Couldn't pass WNI_VHT_SHORT_GI_80MHZ to CFG");
|
||||
}
|
||||
|
||||
if (sme_cfg_set_int(mac_handle,
|
||||
WNI_CFG_VHT_SHORT_GI_160_AND_80_PLUS_80MHZ,
|
||||
config->ShortGI40MhzEnable) == QDF_STATUS_E_FAILURE) {
|
||||
status = false;
|
||||
hdd_err("Couldn't pass SHORT_GI_160MHZ to CFG");
|
||||
}
|
||||
|
||||
/* Hardware is capable of doing
|
||||
* 128K AMPDU in 11AC mode
|
||||
*/
|
||||
if (sme_cfg_set_int(mac_handle,
|
||||
WNI_CFG_VHT_AMPDU_LEN_EXPONENT,
|
||||
config->fVhtAmpduLenExponent) ==
|
||||
QDF_STATUS_E_FAILURE) {
|
||||
status = false;
|
||||
hdd_err("Couldn't pass on WNI_CFG_VHT_AMPDU_LEN_EXPONENT to CFG");
|
||||
}
|
||||
/* Change MU Bformee only when TxBF is enabled */
|
||||
if (config->enableTxBF) {
|
||||
sme_cfg_get_int(mac_handle,
|
||||
WNI_CFG_VHT_MU_BEAMFORMEE_CAP, &val);
|
||||
|
||||
if (val != config->enableMuBformee) {
|
||||
if (sme_cfg_set_int(mac_handle,
|
||||
WNI_CFG_VHT_MU_BEAMFORMEE_CAP,
|
||||
config->enableMuBformee
|
||||
) == QDF_STATUS_E_FAILURE) {
|
||||
status = false;
|
||||
hdd_err("Couldn't pass on WNI_CFG_VHT_MU_BEAMFORMEE_CAP to CFG");
|
||||
}
|
||||
}
|
||||
}
|
||||
if (sme_cfg_set_int(mac_handle, WNI_CFG_VHT_MAX_MPDU_LENGTH,
|
||||
config->vhtMpduLen) == QDF_STATUS_E_FAILURE) {
|
||||
status = false;
|
||||
hdd_err("Couldn't pass on WNI_CFG_VHT_MAX_MPDU_LENGTH to CFG");
|
||||
}
|
||||
|
||||
if (config->enable2x2 && config->enable_su_tx_bformer) {
|
||||
if (sme_cfg_set_int(mac_handle,
|
||||
WNI_CFG_VHT_SU_BEAMFORMER_CAP,
|
||||
config->enable_su_tx_bformer) ==
|
||||
QDF_STATUS_E_FAILURE) {
|
||||
status = false;
|
||||
hdd_err("set SU_BEAMFORMER_CAP to CFG failed");
|
||||
}
|
||||
if (sme_cfg_set_int(mac_handle,
|
||||
WNI_CFG_VHT_NUM_SOUNDING_DIMENSIONS,
|
||||
NUM_OF_SOUNDING_DIMENSIONS) ==
|
||||
QDF_STATUS_E_FAILURE) {
|
||||
status = false;
|
||||
hdd_err("failed to set NUM_OF_SOUNDING_DIM");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (sme_cfg_set_int(mac_handle, WNI_CFG_VHT_RXSTBC,
|
||||
config->enableRxSTBC) == QDF_STATUS_E_FAILURE) {
|
||||
status = false;
|
||||
hdd_err("Couldn't pass on WNI_CFG_VHT_RXSTBC to CFG");
|
||||
}
|
||||
|
||||
if (sme_cfg_set_int(mac_handle, WNI_CFG_VHT_TXSTBC,
|
||||
config->enableTxSTBC) == QDF_STATUS_E_FAILURE) {
|
||||
status = false;
|
||||
hdd_err("Couldn't pass on WNI_CFG_VHT_TXSTBC to CFG");
|
||||
}
|
||||
|
||||
/* first get HW RX LDPC capability */
|
||||
if (sme_cfg_get_int(mac_handle, WNI_CFG_VHT_LDPC_CODING_CAP, &val) ==
|
||||
QDF_STATUS_E_FAILURE) {
|
||||
status = false;
|
||||
hdd_err("Could not get WNI_CFG_VHT_LDPC_CODING_CAP");
|
||||
}
|
||||
|
||||
/* enable RX LDPC only when both INI and HW are enabled */
|
||||
if (sme_cfg_set_int(mac_handle, WNI_CFG_VHT_LDPC_CODING_CAP,
|
||||
config->enable_rx_ldpc && val) ==
|
||||
QDF_STATUS_E_FAILURE) {
|
||||
status = false;
|
||||
hdd_err("Couldn't pass on WNI_CFG_VHT_LDPC_CODING_CAP to CFG");
|
||||
}
|
||||
|
||||
if (sme_cfg_set_int(mac_handle,
|
||||
WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED,
|
||||
config->txBFCsnValue) ==
|
||||
QDF_STATUS_E_FAILURE) {
|
||||
status = false;
|
||||
hdd_err("Couldn't pass on WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED to CFG");
|
||||
}
|
||||
return status;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* hdd_update_config_cfg() - API to update INI setting based on hw/fw caps
|
||||
* @hdd_ctx: pointer to hdd_ctx
|
||||
|
|
@ -4538,11 +4351,6 @@ bool hdd_update_config_cfg(struct hdd_context *hdd_ctx)
|
|||
* So read 5G HT capablity and update 2G and 5G capablities.
|
||||
*/
|
||||
|
||||
if (!hdd_update_vht_cap_in_cfg(hdd_ctx)) {
|
||||
status = false;
|
||||
hdd_err("Couldn't set VHT CAP in cfg");
|
||||
}
|
||||
|
||||
if (0 != hdd_update_he_cap_in_cfg(hdd_ctx)) {
|
||||
status = false;
|
||||
hdd_err("Couldn't set HE CAP in cfg");
|
||||
|
|
@ -4638,7 +4446,12 @@ QDF_STATUS hdd_set_policy_mgr_user_cfg(struct hdd_context *hdd_ctx)
|
|||
hdd_ctx->config->enableMCCAdaptiveScheduler;
|
||||
user_cfg->max_concurrent_active_sessions =
|
||||
hdd_ctx->config->gMaxConcurrentActiveSessions;
|
||||
user_cfg->enable2x2 = hdd_ctx->config->enable2x2;
|
||||
|
||||
status = ucfg_mlme_get_vht_enable2x2(hdd_ctx->psoc,
|
||||
&user_cfg->enable2x2);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status))
|
||||
hdd_err("unable to get vht_enable2x2");
|
||||
|
||||
user_cfg->mcc_to_scc_switch_mode =
|
||||
hdd_ctx->config->WlanMccToSccSwitchMode;
|
||||
user_cfg->sub_20_mhz_enabled = cds_is_sub_20_mhz_enabled();
|
||||
|
|
@ -4785,20 +4598,6 @@ QDF_STATUS hdd_set_sme_config(struct hdd_context *hdd_ctx)
|
|||
/* Remaining config params not obtained from registry
|
||||
* On RF EVB beacon using channel 1.
|
||||
*/
|
||||
smeConfig->csrConfig.nVhtChannelWidth = pConfig->vhtChannelWidth;
|
||||
smeConfig->csrConfig.enableTxBF = pConfig->enableTxBF;
|
||||
smeConfig->csrConfig.enable_subfee_vendor_vhtie =
|
||||
pConfig->enable_subfee_vendor_vhtie;
|
||||
|
||||
smeConfig->csrConfig.enable_txbf_sap_mode =
|
||||
pConfig->enable_txbf_sap_mode;
|
||||
smeConfig->csrConfig.enable2x2 = pConfig->enable2x2;
|
||||
smeConfig->csrConfig.enableVhtFor24GHz = pConfig->enableVhtFor24GHzBand;
|
||||
smeConfig->csrConfig.vendor_vht_sap =
|
||||
pConfig->enable_sap_vendor_vht;
|
||||
smeConfig->csrConfig.enableMuBformee = pConfig->enableMuBformee;
|
||||
smeConfig->csrConfig.enableVhtpAid = pConfig->enableVhtpAid;
|
||||
smeConfig->csrConfig.enableVhtGid = pConfig->enableVhtGid;
|
||||
smeConfig->csrConfig.enableHtSmps = pConfig->enableHtSmps;
|
||||
smeConfig->csrConfig.htSmps = pConfig->htSmps;
|
||||
/* This param cannot be configured from INI */
|
||||
|
|
@ -4910,7 +4709,6 @@ QDF_STATUS hdd_set_sme_config(struct hdd_context *hdd_ctx)
|
|||
|
||||
smeConfig->csrConfig.enable_tx_ldpc = pConfig->enable_tx_ldpc;
|
||||
smeConfig->csrConfig.enable_rx_ldpc = pConfig->enable_rx_ldpc;
|
||||
smeConfig->csrConfig.enable_vht20_mcs9 = pConfig->enable_vht20_mcs9;
|
||||
#ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH
|
||||
smeConfig->csrConfig.cc_switch_mode = pConfig->WlanMccToSccSwitchMode;
|
||||
#endif
|
||||
|
|
@ -5146,17 +4944,16 @@ void hdd_get_pmkid_modes(struct hdd_context *hdd_ctx,
|
|||
QDF_STATUS hdd_update_nss(struct hdd_adapter *adapter, uint8_t nss)
|
||||
{
|
||||
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
|
||||
struct hdd_config *hdd_config = hdd_ctx->config;
|
||||
uint32_t temp = 0;
|
||||
uint32_t rx_supp_data_rate, tx_supp_data_rate;
|
||||
bool status = true;
|
||||
QDF_STATUS qdf_status;
|
||||
struct mlme_ht_capabilities_info ht_cap_info;
|
||||
uint8_t mcs_set[SIZE_OF_SUPPORTED_MCS_SET] = {0};
|
||||
uint8_t mcs_set_temp[SIZE_OF_SUPPORTED_MCS_SET];
|
||||
uint32_t val, val32;
|
||||
uint32_t val;
|
||||
uint8_t enable2x2;
|
||||
mac_handle_t mac_handle;
|
||||
bool bval = 0;
|
||||
|
||||
if ((nss == 2) && (hdd_ctx->num_rf_chains != 2)) {
|
||||
hdd_err("No support for 2 spatial streams");
|
||||
|
|
@ -5165,7 +4962,11 @@ QDF_STATUS hdd_update_nss(struct hdd_adapter *adapter, uint8_t nss)
|
|||
|
||||
enable2x2 = (nss == 1) ? 0 : 1;
|
||||
|
||||
if (hdd_config->enable2x2 == enable2x2) {
|
||||
status = ucfg_mlme_get_vht_enable2x2(hdd_ctx->psoc, &bval);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status))
|
||||
hdd_err("unable to get vht_enable2x2");
|
||||
|
||||
if (bval == enable2x2) {
|
||||
hdd_debug("NSS same as requested");
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
|
@ -5176,9 +4977,11 @@ QDF_STATUS hdd_update_nss(struct hdd_adapter *adapter, uint8_t nss)
|
|||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
hdd_config->enable2x2 = enable2x2;
|
||||
status = ucfg_mlme_set_vht_enable2x2(hdd_ctx->psoc, enable2x2);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status))
|
||||
hdd_err("unable to get vht_enable2x2");
|
||||
|
||||
if (!hdd_config->enable2x2) {
|
||||
if (!enable2x2) {
|
||||
/* 1x1 */
|
||||
rx_supp_data_rate = VHT_RX_HIGHEST_SUPPORTED_DATA_RATE_1_1;
|
||||
tx_supp_data_rate = VHT_TX_HIGHEST_SUPPORTED_DATA_RATE_1_1;
|
||||
|
|
@ -5189,19 +4992,20 @@ QDF_STATUS hdd_update_nss(struct hdd_adapter *adapter, uint8_t nss)
|
|||
}
|
||||
|
||||
/* Update Rx Highest Long GI data Rate */
|
||||
if (sme_cfg_set_int(mac_handle,
|
||||
WNI_CFG_VHT_RX_HIGHEST_SUPPORTED_DATA_RATE,
|
||||
rx_supp_data_rate) == QDF_STATUS_E_FAILURE) {
|
||||
qdf_status =
|
||||
ucfg_mlme_cfg_set_vht_rx_supp_data_rate(hdd_ctx->psoc,
|
||||
rx_supp_data_rate);
|
||||
if (!QDF_IS_STATUS_SUCCESS(qdf_status)) {
|
||||
hdd_err("Failed to set rx_supp_data_rate");
|
||||
status = false;
|
||||
hdd_err("Could not pass on WNI_CFG_VHT_RX_HIGHEST_SUPPORTED_DATA_RATE to CFG");
|
||||
}
|
||||
|
||||
/* Update Tx Highest Long GI data Rate */
|
||||
if (sme_cfg_set_int(mac_handle,
|
||||
WNI_CFG_VHT_TX_HIGHEST_SUPPORTED_DATA_RATE,
|
||||
tx_supp_data_rate) == QDF_STATUS_E_FAILURE) {
|
||||
qdf_status =
|
||||
ucfg_mlme_cfg_set_vht_tx_supp_data_rate(hdd_ctx->psoc,
|
||||
tx_supp_data_rate);
|
||||
if (!QDF_IS_STATUS_SUCCESS(qdf_status)) {
|
||||
hdd_err("Failed to set tx_supp_data_rate");
|
||||
status = false;
|
||||
hdd_err("Could not pass on WNI_CFG_VHT_TX_HIGHEST_SUPPORTED_DATA_RATE to CFG");
|
||||
}
|
||||
|
||||
qdf_status = ucfg_mlme_get_ht_cap_info(hdd_ctx->psoc, &ht_cap_info);
|
||||
|
|
@ -5210,12 +5014,15 @@ QDF_STATUS hdd_update_nss(struct hdd_adapter *adapter, uint8_t nss)
|
|||
status = false;
|
||||
}
|
||||
|
||||
if (!(hdd_ctx->ht_tx_stbc_supported && hdd_config->enable2x2)) {
|
||||
if (!(hdd_ctx->ht_tx_stbc_supported && enable2x2)) {
|
||||
ht_cap_info.tx_stbc = 0;
|
||||
} else {
|
||||
sme_cfg_get_int(mac_handle, WNI_CFG_VHT_TXSTBC, &val32);
|
||||
hdd_debug("STBC %d", val32);
|
||||
ht_cap_info.tx_stbc = val32;
|
||||
qdf_status =
|
||||
ucfg_mlme_cfg_get_vht_tx_stbc(hdd_ctx->psoc, &bval);
|
||||
if (!QDF_IS_STATUS_SUCCESS(qdf_status)) {
|
||||
hdd_err("Failed to get vht_tx_stbc");
|
||||
ht_cap_info.tx_stbc = bval;
|
||||
}
|
||||
}
|
||||
|
||||
qdf_status = ucfg_mlme_set_ht_cap_info(hdd_ctx->psoc, ht_cap_info);
|
||||
|
|
@ -5224,43 +5031,10 @@ QDF_STATUS hdd_update_nss(struct hdd_adapter *adapter, uint8_t nss)
|
|||
hdd_err("Could not set the HT_CAP_INFO");
|
||||
}
|
||||
|
||||
sme_cfg_get_int(mac_handle, WNI_CFG_VHT_BASIC_MCS_SET, &temp);
|
||||
temp = (temp & 0xFFFC) | hdd_config->vhtRxMCS;
|
||||
if (hdd_config->enable2x2)
|
||||
temp = (temp & 0xFFF3) | (hdd_config->vhtRxMCS2x2 << 2);
|
||||
else
|
||||
temp |= 0x000C;
|
||||
|
||||
if (sme_cfg_set_int(mac_handle, WNI_CFG_VHT_BASIC_MCS_SET,
|
||||
temp) == QDF_STATUS_E_FAILURE) {
|
||||
status = ucfg_mlme_update_nss_vht_cap(hdd_ctx->psoc);
|
||||
if (!QDF_IS_STATUS_SUCCESS(qdf_status)) {
|
||||
hdd_err("Failed to set update_nss_vht_cap");
|
||||
status = false;
|
||||
hdd_err("Could not pass on WNI_CFG_VHT_BASIC_MCS_SET to CFG");
|
||||
}
|
||||
|
||||
sme_cfg_get_int(mac_handle, WNI_CFG_VHT_RX_MCS_MAP, &temp);
|
||||
temp = (temp & 0xFFFC) | hdd_config->vhtRxMCS;
|
||||
if (hdd_config->enable2x2)
|
||||
temp = (temp & 0xFFF3) | (hdd_config->vhtRxMCS2x2 << 2);
|
||||
else
|
||||
temp |= 0x000C;
|
||||
|
||||
if (sme_cfg_set_int(mac_handle, WNI_CFG_VHT_RX_MCS_MAP,
|
||||
temp) == QDF_STATUS_E_FAILURE) {
|
||||
status = false;
|
||||
hdd_err("Could not pass on WNI_CFG_VHT_RX_MCS_MAP to CFG");
|
||||
}
|
||||
|
||||
sme_cfg_get_int(mac_handle, WNI_CFG_VHT_TX_MCS_MAP, &temp);
|
||||
temp = (temp & 0xFFFC) | hdd_config->vhtTxMCS;
|
||||
if (hdd_config->enable2x2)
|
||||
temp = (temp & 0xFFF3) | (hdd_config->vhtTxMCS2x2 << 2);
|
||||
else
|
||||
temp |= 0x000C;
|
||||
|
||||
if (sme_cfg_set_int(mac_handle, WNI_CFG_VHT_TX_MCS_MAP,
|
||||
temp) == QDF_STATUS_E_FAILURE) {
|
||||
status = false;
|
||||
hdd_err("Could not pass on WNI_CFG_VHT_TX_MCS_MAP to CFG");
|
||||
}
|
||||
|
||||
#define WLAN_HDD_RX_MCS_ALL_NSTREAM_RATES 0xff
|
||||
|
|
@ -5269,7 +5043,7 @@ QDF_STATUS hdd_update_nss(struct hdd_adapter *adapter, uint8_t nss)
|
|||
mcs_set_temp, &val);
|
||||
|
||||
mcs_set[0] = mcs_set_temp[0];
|
||||
if (hdd_config->enable2x2)
|
||||
if (enable2x2)
|
||||
for (val = 0; val < nss; val++)
|
||||
mcs_set[val] = WLAN_HDD_RX_MCS_ALL_NSTREAM_RATES;
|
||||
|
||||
|
|
|
|||
|
|
@ -2720,12 +2720,12 @@ static int __wlan_hdd_cfg80211_do_acs(struct wiphy *wiphy,
|
|||
(adapter->device_mode == QDF_P2P_GO_MODE &&
|
||||
!hdd_ctx->config->go_force_11n_for_11ac &&
|
||||
hdd_ctx->config->go_11ac_override))) {
|
||||
hdd_debug("ACS Config override for 11AC, vhtChannelWidth %d",
|
||||
hdd_ctx->config->vhtChannelWidth);
|
||||
vht_enabled = 1;
|
||||
sap_config->acs_cfg.hw_mode = eCSR_DOT11_MODE_11ac;
|
||||
sap_config->acs_cfg.ch_width =
|
||||
hdd_ctx->config->vhtChannelWidth;
|
||||
qdf_status =
|
||||
ucfg_mlme_get_vht_channel_width(hdd_ctx->psoc,
|
||||
&ch_width);
|
||||
sap_config->acs_cfg.ch_width = ch_width;
|
||||
}
|
||||
|
||||
/* No VHT80 in 2.4G so perform ACS accordingly */
|
||||
|
|
@ -6181,6 +6181,9 @@ __wlan_hdd_cfg80211_set_wifi_test_config(struct wiphy *wiphy,
|
|||
uint8_t tid = 0, ac;
|
||||
uint16_t buff_size = 0;
|
||||
mac_handle_t mac_handle;
|
||||
QDF_STATUS status;
|
||||
bool bval = false;
|
||||
uint8_t value = 0;
|
||||
|
||||
hdd_enter_dev(dev);
|
||||
|
||||
|
|
@ -6367,7 +6370,11 @@ __wlan_hdd_cfg80211_set_wifi_test_config(struct wiphy *wiphy,
|
|||
adapter->session_id,
|
||||
cfg_val, ac);
|
||||
if (cfg_val) {
|
||||
if (sme_config->csrConfig.enable2x2)
|
||||
status = ucfg_mlme_get_vht_enable2x2(hdd_ctx->psoc,
|
||||
&bval);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status))
|
||||
hdd_err("unable to get vht_enable2x2");
|
||||
if (bval)
|
||||
/*2x2 MCS 5 value*/
|
||||
he_mcs_val = 0x45;
|
||||
else
|
||||
|
|
@ -6415,9 +6422,14 @@ __wlan_hdd_cfg80211_set_wifi_test_config(struct wiphy *wiphy,
|
|||
if (tb[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_HE_TX_BEAMFORMEE_NSTS]) {
|
||||
cfg_val = nla_get_u8(tb[
|
||||
QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_HE_TX_BEAMFORMEE_NSTS]);
|
||||
if (cfg_val > hdd_ctx->config->txBFCsnValue) {
|
||||
status = ucfg_mlme_cfg_get_vht_tx_bfee_ant_supp(hdd_ctx->psoc,
|
||||
&value);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status))
|
||||
hdd_err("unable to get tx_bfee_ant_supp");
|
||||
|
||||
if (cfg_val > value) {
|
||||
hdd_err("NSTS %d not supported, supp_val %d", cfg_val,
|
||||
hdd_ctx->config->txBFCsnValue);
|
||||
value);
|
||||
ret_val = -ENOTSUPP;
|
||||
goto send_err;
|
||||
}
|
||||
|
|
@ -6425,8 +6437,7 @@ __wlan_hdd_cfg80211_set_wifi_test_config(struct wiphy *wiphy,
|
|||
ret_val = sme_update_tx_bfee_nsts(hdd_ctx->mac_handle,
|
||||
adapter->session_id,
|
||||
cfg_val,
|
||||
hdd_ctx->config->txBFCsnValue
|
||||
);
|
||||
value);
|
||||
if (ret_val)
|
||||
sme_err("Failed to set Tx beamformee cap");
|
||||
|
||||
|
|
@ -8775,6 +8786,8 @@ static void hdd_update_acs_sap_config(struct hdd_context *hdd_ctx,
|
|||
tsap_config_t *sap_config,
|
||||
struct hdd_vendor_chan_info *channel_list)
|
||||
{
|
||||
uint8_t ch_width;
|
||||
QDF_STATUS status;
|
||||
sap_config->channel = channel_list->pri_ch;
|
||||
|
||||
sap_config->ch_params.center_freq_seg0 =
|
||||
|
|
@ -8784,15 +8797,19 @@ static void hdd_update_acs_sap_config(struct hdd_context *hdd_ctx,
|
|||
|
||||
sap_config->ch_params.sec_ch_offset = channel_list->ht_sec_ch;
|
||||
sap_config->ch_params.ch_width = channel_list->chan_width;
|
||||
if (sap_config->channel >= 36)
|
||||
sap_config->ch_width_orig =
|
||||
hdd_ctx->config->vhtChannelWidth;
|
||||
else
|
||||
if (sap_config->channel >= 36) {
|
||||
status =
|
||||
ucfg_mlme_get_vht_channel_width(hdd_ctx->psoc,
|
||||
&ch_width);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status))
|
||||
hdd_err("Failed to set channel_width");
|
||||
sap_config->ch_width_orig = ch_width;
|
||||
} else {
|
||||
sap_config->ch_width_orig =
|
||||
hdd_ctx->config->nChannelBondingMode24GHz ?
|
||||
eHT_CHANNEL_WIDTH_40MHZ :
|
||||
eHT_CHANNEL_WIDTH_20MHZ;
|
||||
|
||||
}
|
||||
sap_config->acs_cfg.pri_ch = channel_list->pri_ch;
|
||||
sap_config->acs_cfg.ch_width = channel_list->chan_width;
|
||||
sap_config->acs_cfg.vht_seg0_center_ch =
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@
|
|||
#include <wlan_hdd_main.h>
|
||||
#include <wlan_policy_mgr_api.h>
|
||||
#include <wlan_green_ap_ucfg_api.h>
|
||||
#include "wlan_mlme_ucfg_api.h"
|
||||
|
||||
/**
|
||||
* hdd_green_ap_check_enable() - to check whether to enable green ap or not
|
||||
|
|
@ -115,6 +116,8 @@ int hdd_green_ap_start_state_mc(struct hdd_context *hdd_ctx,
|
|||
struct hdd_config *cfg;
|
||||
bool enable_green_ap = false;
|
||||
uint8_t num_sap_sessions = 0, num_p2p_go_sessions = 0, ret = 0;
|
||||
QDF_STATUS status;
|
||||
bool bval = false;
|
||||
|
||||
cfg = hdd_ctx->config;
|
||||
if (!cfg) {
|
||||
|
|
@ -122,9 +125,15 @@ int hdd_green_ap_start_state_mc(struct hdd_context *hdd_ctx,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!cfg->enable2x2 || !cfg->enable_green_ap) {
|
||||
status = ucfg_mlme_get_vht_enable2x2(hdd_ctx->psoc, &bval);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status)) {
|
||||
hdd_err("unable to get vht_enable2x2");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!bval || !cfg->enable_green_ap) {
|
||||
hdd_debug("Green AP not enabled: enable2x2:%d, enable_green_ap:%d",
|
||||
cfg->enable2x2, cfg->enable_green_ap);
|
||||
bval, cfg->enable_green_ap);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -56,8 +56,9 @@ void hdd_update_tgt_he_cap(struct hdd_context *hdd_ctx,
|
|||
uint8_t chan_width;
|
||||
QDF_STATUS status;
|
||||
tDot11fIEhe_cap *he_cap = &cfg->he_cap;
|
||||
struct hdd_config *config = hdd_ctx->config;
|
||||
tDot11fIEhe_cap he_cap_ini = {0};
|
||||
uint8_t value = 0;
|
||||
bool bval;
|
||||
|
||||
hdd_he_set_wni_cfg(hdd_ctx, WNI_CFG_HE_CONTROL, he_cap->htc_he);
|
||||
hdd_he_set_wni_cfg(hdd_ctx, WNI_CFG_HE_TWT_REQUESTOR,
|
||||
|
|
@ -135,7 +136,13 @@ void hdd_update_tgt_he_cap(struct hdd_context *hdd_ctx,
|
|||
he_cap->midamble_tx_rx_max_nsts);
|
||||
hdd_he_set_wni_cfg(hdd_ctx, WNI_CFG_HE_LTF_NDP,
|
||||
he_cap->he_4x_ltf_3200_gi_ndp);
|
||||
if (config->enableRxSTBC) {
|
||||
|
||||
status = ucfg_mlme_cfg_get_vht_rx_stbc(hdd_ctx->psoc,
|
||||
&bval);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status))
|
||||
hdd_err("unable to get vht_enable_rx_su_beam");
|
||||
|
||||
if (bval) {
|
||||
hdd_he_set_wni_cfg(hdd_ctx, WNI_CFG_HE_RX_STBC_LT80,
|
||||
he_cap->rx_stbc_lt_80mhz);
|
||||
hdd_he_set_wni_cfg(hdd_ctx, WNI_CFG_HE_RX_STBC_GT80,
|
||||
|
|
@ -144,7 +151,13 @@ void hdd_update_tgt_he_cap(struct hdd_context *hdd_ctx,
|
|||
hdd_he_set_wni_cfg(hdd_ctx, WNI_CFG_HE_RX_STBC_LT80, 0);
|
||||
hdd_he_set_wni_cfg(hdd_ctx, WNI_CFG_HE_RX_STBC_GT80, 0);
|
||||
}
|
||||
if (config->enableTxSTBC) {
|
||||
|
||||
status = ucfg_mlme_cfg_get_vht_tx_stbc(hdd_ctx->psoc,
|
||||
&bval);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status))
|
||||
hdd_err("unable to get vht_enable_tx_su_beam");
|
||||
|
||||
if (bval) {
|
||||
hdd_he_set_wni_cfg(hdd_ctx, WNI_CFG_HE_TX_STBC_LT80,
|
||||
he_cap->tx_stbc_lt_80mhz);
|
||||
hdd_he_set_wni_cfg(hdd_ctx, WNI_CFG_HE_TX_STBC_GT80,
|
||||
|
|
@ -159,7 +172,12 @@ void hdd_update_tgt_he_cap(struct hdd_context *hdd_ctx,
|
|||
hdd_he_set_wni_cfg(hdd_ctx, WNI_CFG_HE_DCM_RX, he_cap->dcm_enc_rx);
|
||||
hdd_he_set_wni_cfg(hdd_ctx, WNI_CFG_HE_MU_PPDU, he_cap->ul_he_mu);
|
||||
|
||||
if (config->enable_su_tx_bformer) {
|
||||
status = ucfg_mlme_get_vht_enable_tx_su_beam(hdd_ctx->psoc,
|
||||
&bval);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status))
|
||||
hdd_err("unable to get vht_enable_tx_su_beam");
|
||||
|
||||
if (bval) {
|
||||
hdd_he_set_wni_cfg(hdd_ctx, WNI_CFG_HE_SU_BEAMFORMER,
|
||||
he_cap->su_beamformer);
|
||||
hdd_he_set_wni_cfg(hdd_ctx, WNI_CFG_HE_NUM_SOUND_LT80,
|
||||
|
|
@ -175,7 +193,11 @@ void hdd_update_tgt_he_cap(struct hdd_context *hdd_ctx,
|
|||
hdd_he_set_wni_cfg(hdd_ctx, WNI_CFG_HE_MU_BEAMFORMER, 0);
|
||||
}
|
||||
|
||||
if (config->enableTxBF) {
|
||||
status = ucfg_mlme_get_vht_enable_tx_bf(hdd_ctx->psoc,
|
||||
&bval);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status))
|
||||
hdd_err("unable to get vht_enable_tx_bf");
|
||||
if (bval) {
|
||||
hdd_he_set_wni_cfg(hdd_ctx, WNI_CFG_HE_SU_BEAMFORMEE,
|
||||
he_cap->su_beamformee);
|
||||
hdd_he_set_wni_cfg(hdd_ctx, WNI_CFG_HE_BFEE_STS_LT80,
|
||||
|
|
@ -259,7 +281,12 @@ void hdd_update_tgt_he_cap(struct hdd_context *hdd_ctx,
|
|||
if (status == QDF_STATUS_E_FAILURE)
|
||||
hdd_alert("could not set 5G HE PPET");
|
||||
|
||||
he_cap_ini.bfee_sts_lt_80 = config->txBFCsnValue;
|
||||
status = ucfg_mlme_cfg_get_vht_tx_bfee_ant_supp(hdd_ctx->psoc,
|
||||
&value);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status))
|
||||
hdd_err("unable to get tx_bfee_ant_supp");
|
||||
|
||||
he_cap_ini.bfee_sts_lt_80 = value;
|
||||
sme_update_tgt_he_cap(hdd_ctx->mac_handle, cfg, &he_cap_ini);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4185,6 +4185,8 @@ static int wlan_hdd_sap_p2p_11ac_overrides(struct hdd_adapter *ap_adapter)
|
|||
{
|
||||
tsap_config_t *sap_cfg = &ap_adapter->session.ap.sap_config;
|
||||
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(ap_adapter);
|
||||
uint8_t ch_width;
|
||||
QDF_STATUS status;
|
||||
|
||||
/* Fixed channel 11AC override:
|
||||
* 11AC override in qcacld is introduced for following reasons:
|
||||
|
|
@ -4218,8 +4220,12 @@ static int wlan_hdd_sap_p2p_11ac_overrides(struct hdd_adapter *ap_adapter)
|
|||
sap_cfg->SapHw_mode = eCSR_DOT11_MODE_11ac;
|
||||
|
||||
if (sap_cfg->channel >= 36) {
|
||||
sap_cfg->ch_width_orig =
|
||||
hdd_ctx->config->vhtChannelWidth;
|
||||
status =
|
||||
ucfg_mlme_get_vht_channel_width(hdd_ctx->psoc,
|
||||
&ch_width);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status))
|
||||
hdd_err("Failed to set channel_width");
|
||||
sap_cfg->ch_width_orig = ch_width;
|
||||
} else {
|
||||
/*
|
||||
* Allow 40 Mhz in 2.4 Ghz only if indicated by
|
||||
|
|
@ -4557,6 +4563,7 @@ int wlan_hdd_cfg80211_start_bss(struct hdd_adapter *adapter,
|
|||
bool val;
|
||||
uint32_t auto_channel_select_weight =
|
||||
cfg_default(CFG_AUTO_CHANNEL_SELECT_WEIGHT);
|
||||
bool bval = false;
|
||||
|
||||
hdd_enter();
|
||||
|
||||
|
|
@ -5008,8 +5015,11 @@ int wlan_hdd_cfg80211_start_bss(struct hdd_adapter *adapter,
|
|||
if (!cds_is_sub_20_mhz_enabled())
|
||||
wlan_hdd_set_sap_hwmode(adapter);
|
||||
|
||||
if (IS_24G_CH(pConfig->channel) &&
|
||||
hdd_ctx->config->enableVhtFor24GHzBand &&
|
||||
status = ucfg_mlme_get_vht_for_24ghz(hdd_ctx->psoc, &bval);
|
||||
if (!QDF_IS_STATUS_SUCCESS(qdf_status))
|
||||
hdd_err("Failed to get vht_for_24ghz");
|
||||
|
||||
if (IS_24G_CH(pConfig->channel) && bval &&
|
||||
(pConfig->SapHw_mode == eCSR_DOT11_MODE_11n ||
|
||||
pConfig->SapHw_mode == eCSR_DOT11_MODE_11n_ONLY))
|
||||
pConfig->SapHw_mode = eCSR_DOT11_MODE_11ac;
|
||||
|
|
|
|||
|
|
@ -461,6 +461,7 @@ static __iw_softap_setparam(struct net_device *dev,
|
|||
QDF_STATUS status;
|
||||
int ret = 0;
|
||||
struct hdd_context *hdd_ctx;
|
||||
bool bval = false;
|
||||
|
||||
hdd_enter_dev(dev);
|
||||
|
||||
|
|
@ -567,12 +568,17 @@ static __iw_softap_setparam(struct net_device *dev,
|
|||
case QCSAP_PARAM_SET_MC_RATE:
|
||||
{
|
||||
tSirRateUpdateInd rateUpdate = {0};
|
||||
struct hdd_config *pConfig = hdd_ctx->config;
|
||||
|
||||
hdd_debug("MC Target rate %d", set_value);
|
||||
qdf_copy_macaddr(&rateUpdate.bssid,
|
||||
&adapter->mac_addr);
|
||||
rateUpdate.nss = (pConfig->enable2x2 == 0) ? 0 : 1;
|
||||
status = ucfg_mlme_get_vht_enable2x2(hdd_ctx->psoc, &bval);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status)) {
|
||||
hdd_err("unable to get vht_enable2x2");
|
||||
ret = -1;
|
||||
}
|
||||
rateUpdate.nss = (bval == 0) ? 0 : 1;
|
||||
|
||||
rateUpdate.dev_mode = adapter->device_mode;
|
||||
rateUpdate.mcastDataRate24GHz = set_value;
|
||||
rateUpdate.mcastDataRate24GHzTxFlag = 1;
|
||||
|
|
|
|||
|
|
@ -2813,6 +2813,7 @@ int wlan_hdd_set_mc_rate(struct hdd_adapter *adapter, int targetRate)
|
|||
QDF_STATUS status;
|
||||
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
|
||||
struct hdd_config *pConfig;
|
||||
bool bval = false;
|
||||
|
||||
if (hdd_ctx == NULL) {
|
||||
hdd_err("HDD context is null");
|
||||
|
|
@ -2828,7 +2829,14 @@ int wlan_hdd_set_mc_rate(struct hdd_adapter *adapter, int targetRate)
|
|||
return -EINVAL;
|
||||
}
|
||||
pConfig = hdd_ctx->config;
|
||||
rateUpdate.nss = (pConfig->enable2x2 == 0) ? 0 : 1;
|
||||
|
||||
status = ucfg_mlme_get_vht_enable2x2(hdd_ctx->psoc, &bval);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status)) {
|
||||
hdd_err("unable to get vht_enable2x2");
|
||||
return -EINVAL;
|
||||
}
|
||||
rateUpdate.nss = (bval == 0) ? 0 : 1;
|
||||
|
||||
rateUpdate.dev_mode = adapter->device_mode;
|
||||
rateUpdate.mcastDataRate24GHz = targetRate;
|
||||
rateUpdate.mcastDataRate24GHzTxFlag = 1;
|
||||
|
|
@ -5159,7 +5167,7 @@ static int drv_cmd_set_rmc_tx_rate(struct hdd_adapter *adapter,
|
|||
enum tx_rate_info txFlags = 0;
|
||||
tSirRateUpdateInd rateUpdateParams = {0};
|
||||
int status;
|
||||
struct hdd_config *pConfig = hdd_ctx->config;
|
||||
bool bval = false;
|
||||
|
||||
if ((QDF_IBSS_MODE != adapter->device_mode) &&
|
||||
(QDF_SAP_MODE != adapter->device_mode)) {
|
||||
|
|
@ -5185,7 +5193,13 @@ static int drv_cmd_set_rmc_tx_rate(struct hdd_adapter *adapter,
|
|||
* Fill the user specifieed RMC rate param
|
||||
* and the derived tx flags.
|
||||
*/
|
||||
rateUpdateParams.nss = (pConfig->enable2x2 == 0) ? 0 : 1;
|
||||
status = ucfg_mlme_get_vht_enable2x2(hdd_ctx->psoc, &bval);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status)) {
|
||||
hdd_err("unable to get vht_enable2x2");
|
||||
ret = -EINVAL;
|
||||
goto exit;
|
||||
}
|
||||
rateUpdateParams.nss = (bval == 0) ? 0 : 1;
|
||||
rateUpdateParams.reliableMcastDataRate = uRate;
|
||||
rateUpdateParams.reliableMcastDataRateTxFlag = txFlags;
|
||||
rateUpdateParams.dev_mode = adapter->device_mode;
|
||||
|
|
@ -6525,13 +6539,20 @@ static int hdd_parse_setantennamode_command(const uint8_t *value)
|
|||
*/
|
||||
static bool hdd_is_supported_chain_mask_2x2(struct hdd_context *hdd_ctx)
|
||||
{
|
||||
/*
|
||||
QDF_STATUS status;
|
||||
bool bval = false;
|
||||
|
||||
/*
|
||||
* Revisit and the update logic to determine the number
|
||||
* of TX/RX chains supported in the system when
|
||||
* antenna sharing per band chain mask support is
|
||||
* brought in
|
||||
*/
|
||||
return (hdd_ctx->config->enable2x2 == 0x01) ? true : false;
|
||||
status = ucfg_mlme_get_vht_enable2x2(hdd_ctx->psoc, &bval);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status))
|
||||
hdd_err("unable to get vht_enable2x2");
|
||||
|
||||
return (bval == 0x01) ? true : false;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -6543,13 +6564,20 @@ static bool hdd_is_supported_chain_mask_2x2(struct hdd_context *hdd_ctx)
|
|||
*/
|
||||
static bool hdd_is_supported_chain_mask_1x1(struct hdd_context *hdd_ctx)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
bool bval = false;
|
||||
|
||||
/*
|
||||
* Revisit and update the logic to determine the number
|
||||
* of TX/RX chains supported in the system when
|
||||
* antenna sharing per band chain mask support is
|
||||
* brought in
|
||||
*/
|
||||
return (!hdd_ctx->config->enable2x2) ? true : false;
|
||||
status = ucfg_mlme_get_vht_enable2x2(hdd_ctx->psoc, &bval);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status))
|
||||
hdd_err("unable to get vht_enable2x2");
|
||||
|
||||
return (!bval) ? true : false;
|
||||
}
|
||||
|
||||
QDF_STATUS hdd_update_smps_antenna_mode(struct hdd_context *hdd_ctx, int mode)
|
||||
|
|
|
|||
|
|
@ -1326,8 +1326,14 @@ static void hdd_update_vdev_nss(struct hdd_context *hdd_ctx)
|
|||
struct hdd_config *cfg_ini = hdd_ctx->config;
|
||||
uint8_t max_supp_nss = 1;
|
||||
mac_handle_t mac_handle;
|
||||
QDF_STATUS status;
|
||||
bool bval;
|
||||
|
||||
if (cfg_ini->enable2x2 && !cds_is_sub_20_mhz_enabled())
|
||||
status = ucfg_mlme_get_vht_enable2x2(hdd_ctx->psoc, &bval);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status))
|
||||
hdd_err("unable to get vht_enable2x2");
|
||||
|
||||
if (bval && !cds_is_sub_20_mhz_enabled())
|
||||
max_supp_nss = 2;
|
||||
hdd_debug("max nss %d vdev_type_nss_2g %x vdev_type_nss_5g %x",
|
||||
max_supp_nss, cfg_ini->vdev_type_nss_2g,
|
||||
|
|
@ -1353,22 +1359,27 @@ static void hdd_update_wiphy_vhtcap(struct hdd_context *hdd_ctx)
|
|||
{
|
||||
struct ieee80211_supported_band *band_5g =
|
||||
hdd_ctx->wiphy->bands[NL80211_BAND_5GHZ];
|
||||
uint32_t val;
|
||||
QDF_STATUS status;
|
||||
uint8_t value = 0, value1 = 0;
|
||||
|
||||
if (!band_5g) {
|
||||
hdd_debug("5GHz band disabled, skipping capability population");
|
||||
return;
|
||||
}
|
||||
|
||||
val = hdd_ctx->config->txBFCsnValue;
|
||||
band_5g->vht_cap.cap |= (val << IEEE80211_VHT_CAP_BEAMFORMEE_STS_SHIFT);
|
||||
status = ucfg_mlme_cfg_get_vht_tx_bfee_ant_supp(hdd_ctx->psoc,
|
||||
&value);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status))
|
||||
hdd_err("unable to get tx_bfee_ant_supp");
|
||||
|
||||
val = NUM_OF_SOUNDING_DIMENSIONS;
|
||||
band_5g->vht_cap.cap |= (value << IEEE80211_VHT_CAP_BEAMFORMEE_STS_SHIFT);
|
||||
|
||||
value1 = NUM_OF_SOUNDING_DIMENSIONS;
|
||||
band_5g->vht_cap.cap |=
|
||||
(val << IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_SHIFT);
|
||||
(value1 << IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_SHIFT);
|
||||
|
||||
hdd_debug("Updated wiphy vhtcap:0x%x, CSNAntSupp:%d, NumSoundDim:%d",
|
||||
band_5g->vht_cap.cap, hdd_ctx->config->txBFCsnValue, val);
|
||||
band_5g->vht_cap.cap, value, value1);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1401,10 +1412,10 @@ static void hdd_update_tgt_ht_cap(struct hdd_context *hdd_ctx,
|
|||
{
|
||||
QDF_STATUS status;
|
||||
uint32_t value;
|
||||
struct hdd_config *pconfig = hdd_ctx->config;
|
||||
struct mlme_ht_capabilities_info ht_cap_info;
|
||||
uint8_t mcs_set[SIZE_OF_SUPPORTED_MCS_SET];
|
||||
mac_handle_t mac_handle = hdd_ctx->mac_handle;
|
||||
bool b_enable1x1;
|
||||
|
||||
/* get the MPDU density */
|
||||
status = sme_cfg_get_int(mac_handle, WNI_CFG_MPDU_DENSITY, &value);
|
||||
|
|
@ -1450,31 +1461,34 @@ static void hdd_update_tgt_ht_cap(struct hdd_context *hdd_ctx,
|
|||
hdd_ctx->num_rf_chains = cfg->num_rf_chains;
|
||||
hdd_ctx->ht_tx_stbc_supported = cfg->ht_tx_stbc;
|
||||
|
||||
if (pconfig->enable2x2 && (cfg->num_rf_chains == 2)) {
|
||||
pconfig->enable2x2 = 1;
|
||||
} else {
|
||||
pconfig->enable2x2 = 0;
|
||||
status = ucfg_mlme_get_vht_enable2x2(hdd_ctx->psoc, &b_enable1x1);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status))
|
||||
hdd_err("unable to get vht_enable2x2");
|
||||
|
||||
b_enable1x1 = b_enable1x1 && (cfg->num_rf_chains == 2);
|
||||
|
||||
status = ucfg_mlme_set_vht_enable2x2(hdd_ctx->psoc, b_enable1x1);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status))
|
||||
hdd_err("unable to set vht_enable2x2");
|
||||
|
||||
if (b_enable1x1 == false) {
|
||||
ht_cap_info.tx_stbc = 0;
|
||||
|
||||
/* 1x1 */
|
||||
/* Update Rx Highest Long GI data Rate */
|
||||
if (sme_cfg_set_int(mac_handle,
|
||||
WNI_CFG_VHT_RX_HIGHEST_SUPPORTED_DATA_RATE,
|
||||
VHT_RX_HIGHEST_SUPPORTED_DATA_RATE_1_1)
|
||||
== QDF_STATUS_E_FAILURE) {
|
||||
hdd_err("Could not pass on WNI_CFG_VHT_RX_HIGHEST_SUPPORTED_DATA_RATE to CCM");
|
||||
}
|
||||
|
||||
status = ucfg_mlme_cfg_set_vht_rx_supp_data_rate(
|
||||
hdd_ctx->psoc,
|
||||
VHT_RX_HIGHEST_SUPPORTED_DATA_RATE_1_1);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status))
|
||||
hdd_err("Failed to set rx_supp_data_rate");
|
||||
/* Update Tx Highest Long GI data Rate */
|
||||
if (sme_cfg_set_int
|
||||
(mac_handle,
|
||||
WNI_CFG_VHT_TX_HIGHEST_SUPPORTED_DATA_RATE,
|
||||
VHT_TX_HIGHEST_SUPPORTED_DATA_RATE_1_1) ==
|
||||
QDF_STATUS_E_FAILURE) {
|
||||
hdd_err("VHT_TX_HIGHEST_SUPP_RATE_1_1 to CCM fail");
|
||||
}
|
||||
status = ucfg_mlme_cfg_set_vht_tx_supp_data_rate(
|
||||
hdd_ctx->psoc,
|
||||
VHT_TX_HIGHEST_SUPPORTED_DATA_RATE_1_1);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status))
|
||||
hdd_err("Failed to set tx_supp_data_rate");
|
||||
}
|
||||
if (!(cfg->ht_tx_stbc && pconfig->enable2x2))
|
||||
if (!(cfg->ht_tx_stbc && b_enable1x1))
|
||||
ht_cap_info.tx_stbc = 0;
|
||||
|
||||
status = ucfg_mlme_set_ht_cap_info(hdd_ctx->psoc, ht_cap_info);
|
||||
|
|
@ -1487,7 +1501,8 @@ static void hdd_update_tgt_ht_cap(struct hdd_context *hdd_ctx,
|
|||
hdd_debug("Read MCS rate set");
|
||||
if (cfg->num_rf_chains > SIZE_OF_SUPPORTED_MCS_SET)
|
||||
cfg->num_rf_chains = SIZE_OF_SUPPORTED_MCS_SET;
|
||||
if (pconfig->enable2x2) {
|
||||
|
||||
if (b_enable1x1) {
|
||||
for (value = 0; value < cfg->num_rf_chains; value++)
|
||||
mcs_set[value] =
|
||||
WLAN_HDD_RX_MCS_ALL_NSTREAM_RATES;
|
||||
|
|
@ -1508,264 +1523,21 @@ static void hdd_update_tgt_vht_cap(struct hdd_context *hdd_ctx,
|
|||
struct wma_tgt_vht_cap *cfg)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
uint32_t value = 0;
|
||||
struct hdd_config *pconfig = hdd_ctx->config;
|
||||
struct wiphy *wiphy = hdd_ctx->wiphy;
|
||||
struct ieee80211_supported_band *band_5g =
|
||||
wiphy->bands[HDD_NL80211_BAND_5GHZ];
|
||||
uint32_t temp = 0;
|
||||
uint32_t ch_width = eHT_CHANNEL_WIDTH_80MHZ;
|
||||
uint32_t hw_rx_ldpc_enabled;
|
||||
struct wma_caps_per_phy caps_per_phy;
|
||||
mac_handle_t mac_handle;
|
||||
uint8_t val = 0;
|
||||
|
||||
if (!band_5g) {
|
||||
hdd_debug("5GHz band disabled, skipping capability population");
|
||||
return;
|
||||
}
|
||||
|
||||
mac_handle = hdd_ctx->mac_handle;
|
||||
|
||||
/* Get the current MPDU length */
|
||||
status =
|
||||
sme_cfg_get_int(mac_handle, WNI_CFG_VHT_MAX_MPDU_LENGTH,
|
||||
&value);
|
||||
|
||||
if (status != QDF_STATUS_SUCCESS) {
|
||||
hdd_err("could not get MPDU LENGTH");
|
||||
value = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* VHT max MPDU length:
|
||||
* override if user configured value is too high
|
||||
* that the target cannot support
|
||||
*/
|
||||
if (value > cfg->vht_max_mpdu) {
|
||||
status = sme_cfg_set_int(mac_handle,
|
||||
WNI_CFG_VHT_MAX_MPDU_LENGTH,
|
||||
cfg->vht_max_mpdu);
|
||||
|
||||
if (status == QDF_STATUS_E_FAILURE)
|
||||
hdd_err("could not set VHT MAX MPDU LENGTH");
|
||||
}
|
||||
|
||||
sme_cfg_get_int(mac_handle, WNI_CFG_VHT_BASIC_MCS_SET, &temp);
|
||||
temp = (temp & VHT_MCS_1x1) | pconfig->vhtRxMCS;
|
||||
|
||||
if (pconfig->enable2x2)
|
||||
temp = (temp & VHT_MCS_2x2) | (pconfig->vhtRxMCS2x2 << 2);
|
||||
|
||||
if (sme_cfg_set_int(mac_handle, WNI_CFG_VHT_BASIC_MCS_SET, temp) ==
|
||||
QDF_STATUS_E_FAILURE) {
|
||||
hdd_err("Could not pass VHT_BASIC_MCS_SET to CCM");
|
||||
}
|
||||
|
||||
sme_cfg_get_int(mac_handle, WNI_CFG_VHT_RX_MCS_MAP, &temp);
|
||||
temp = (temp & VHT_MCS_1x1) | pconfig->vhtRxMCS;
|
||||
if (pconfig->enable2x2)
|
||||
temp = (temp & VHT_MCS_2x2) | (pconfig->vhtRxMCS2x2 << 2);
|
||||
|
||||
if (sme_cfg_set_int(mac_handle, WNI_CFG_VHT_RX_MCS_MAP, temp) ==
|
||||
QDF_STATUS_E_FAILURE) {
|
||||
hdd_err("Could not pass WNI_CFG_VHT_RX_MCS_MAP to CCM");
|
||||
}
|
||||
|
||||
sme_cfg_get_int(mac_handle, WNI_CFG_VHT_TX_MCS_MAP, &temp);
|
||||
temp = (temp & VHT_MCS_1x1) | pconfig->vhtTxMCS;
|
||||
if (pconfig->enable2x2)
|
||||
temp = (temp & VHT_MCS_2x2) | (pconfig->vhtTxMCS2x2 << 2);
|
||||
|
||||
hdd_debug("vhtRxMCS2x2 - %x temp - %u enable2x2 %d",
|
||||
pconfig->vhtRxMCS2x2, temp, pconfig->enable2x2);
|
||||
|
||||
if (sme_cfg_set_int(mac_handle, WNI_CFG_VHT_TX_MCS_MAP, temp) ==
|
||||
QDF_STATUS_E_FAILURE) {
|
||||
hdd_err("Could not pass WNI_CFG_VHT_TX_MCS_MAP to CCM");
|
||||
}
|
||||
/* Get the current RX LDPC setting */
|
||||
status = sme_cfg_get_int(mac_handle, WNI_CFG_VHT_LDPC_CODING_CAP,
|
||||
&value);
|
||||
|
||||
if (status != QDF_STATUS_SUCCESS) {
|
||||
hdd_err("could not get VHT LDPC CODING CAP");
|
||||
value = 0;
|
||||
}
|
||||
|
||||
/* Set HW RX LDPC capability */
|
||||
hw_rx_ldpc_enabled = !!cfg->vht_rx_ldpc;
|
||||
if (hw_rx_ldpc_enabled != value) {
|
||||
status = sme_cfg_set_int(mac_handle,
|
||||
WNI_CFG_VHT_LDPC_CODING_CAP,
|
||||
hw_rx_ldpc_enabled);
|
||||
|
||||
if (status == QDF_STATUS_E_FAILURE)
|
||||
hdd_err("could not set VHT LDPC CODING CAP to CCM");
|
||||
}
|
||||
|
||||
/* Get current GI 80 value */
|
||||
status = sme_cfg_get_int(mac_handle, WNI_CFG_VHT_SHORT_GI_80MHZ,
|
||||
&value);
|
||||
|
||||
if (status != QDF_STATUS_SUCCESS) {
|
||||
hdd_err("could not get SHORT GI 80MHZ");
|
||||
value = 0;
|
||||
}
|
||||
|
||||
/* set the Guard interval 80MHz */
|
||||
if (value && !cfg->vht_short_gi_80) {
|
||||
status = sme_cfg_set_int(mac_handle,
|
||||
WNI_CFG_VHT_SHORT_GI_80MHZ,
|
||||
cfg->vht_short_gi_80);
|
||||
|
||||
if (status == QDF_STATUS_E_FAILURE)
|
||||
hdd_err("could not set SHORT GI 80MHZ to CCM");
|
||||
}
|
||||
|
||||
/* Get VHT TX STBC cap */
|
||||
status = sme_cfg_get_int(mac_handle, WNI_CFG_VHT_TXSTBC, &value);
|
||||
|
||||
if (status != QDF_STATUS_SUCCESS) {
|
||||
hdd_err("could not get VHT TX STBC");
|
||||
value = 0;
|
||||
}
|
||||
|
||||
/* VHT TX STBC cap */
|
||||
if (value && !cfg->vht_tx_stbc) {
|
||||
status = sme_cfg_set_int(mac_handle, WNI_CFG_VHT_TXSTBC,
|
||||
cfg->vht_tx_stbc);
|
||||
|
||||
if (status == QDF_STATUS_E_FAILURE)
|
||||
hdd_err("could not set the VHT TX STBC to CCM");
|
||||
}
|
||||
|
||||
/* Get VHT RX STBC cap */
|
||||
status = sme_cfg_get_int(mac_handle, WNI_CFG_VHT_RXSTBC, &value);
|
||||
|
||||
if (status != QDF_STATUS_SUCCESS) {
|
||||
hdd_err("could not get VHT RX STBC");
|
||||
value = 0;
|
||||
}
|
||||
|
||||
/* VHT RX STBC cap */
|
||||
if (value && !cfg->vht_rx_stbc) {
|
||||
status = sme_cfg_set_int(mac_handle, WNI_CFG_VHT_RXSTBC,
|
||||
cfg->vht_rx_stbc);
|
||||
|
||||
if (status == QDF_STATUS_E_FAILURE)
|
||||
hdd_err("could not set the VHT RX STBC to CCM");
|
||||
}
|
||||
|
||||
/* Get VHT SU Beamformer cap */
|
||||
status = sme_cfg_get_int(mac_handle, WNI_CFG_VHT_SU_BEAMFORMER_CAP,
|
||||
&value);
|
||||
|
||||
if (status != QDF_STATUS_SUCCESS) {
|
||||
hdd_err("could not get VHT SU BEAMFORMER CAP");
|
||||
value = 0;
|
||||
}
|
||||
|
||||
/* set VHT SU Beamformer cap */
|
||||
if (value && !cfg->vht_su_bformer) {
|
||||
status = sme_cfg_set_int(mac_handle,
|
||||
WNI_CFG_VHT_SU_BEAMFORMER_CAP,
|
||||
cfg->vht_su_bformer);
|
||||
|
||||
if (status == QDF_STATUS_E_FAILURE)
|
||||
hdd_err("could not set VHT SU BEAMFORMER CAP");
|
||||
}
|
||||
|
||||
/* check and update SU BEAMFORMEE capabality */
|
||||
if (pconfig->enableTxBF && !cfg->vht_su_bformee)
|
||||
pconfig->enableTxBF = cfg->vht_su_bformee;
|
||||
|
||||
status = sme_cfg_set_int(mac_handle,
|
||||
WNI_CFG_VHT_SU_BEAMFORMEE_CAP,
|
||||
pconfig->enableTxBF);
|
||||
|
||||
if (status == QDF_STATUS_E_FAILURE)
|
||||
hdd_err("could not set VHT SU BEAMFORMEE CAP");
|
||||
|
||||
/* Get VHT MU Beamformer cap */
|
||||
status = sme_cfg_get_int(mac_handle, WNI_CFG_VHT_MU_BEAMFORMER_CAP,
|
||||
&value);
|
||||
|
||||
if (status != QDF_STATUS_SUCCESS) {
|
||||
hdd_err("could not get VHT MU BEAMFORMER CAP");
|
||||
value = 0;
|
||||
}
|
||||
|
||||
/* set VHT MU Beamformer cap */
|
||||
if (value && !cfg->vht_mu_bformer) {
|
||||
status = sme_cfg_set_int(mac_handle,
|
||||
WNI_CFG_VHT_MU_BEAMFORMER_CAP,
|
||||
cfg->vht_mu_bformer);
|
||||
|
||||
if (status == QDF_STATUS_E_FAILURE)
|
||||
hdd_err("could not set the VHT MU BEAMFORMER CAP to CCM");
|
||||
}
|
||||
|
||||
/* Get VHT MU Beamformee cap */
|
||||
status = sme_cfg_get_int(mac_handle, WNI_CFG_VHT_MU_BEAMFORMEE_CAP,
|
||||
&value);
|
||||
|
||||
if (status != QDF_STATUS_SUCCESS) {
|
||||
hdd_err("could not get VHT MU BEAMFORMEE CAP");
|
||||
value = 0;
|
||||
}
|
||||
|
||||
/* set VHT MU Beamformee cap */
|
||||
if (value && !cfg->vht_mu_bformee) {
|
||||
status = sme_cfg_set_int(mac_handle,
|
||||
WNI_CFG_VHT_MU_BEAMFORMEE_CAP,
|
||||
cfg->vht_mu_bformee);
|
||||
|
||||
if (status == QDF_STATUS_E_FAILURE)
|
||||
hdd_err("could not set VHT MU BEAMFORMER CAP");
|
||||
}
|
||||
|
||||
/* Get VHT MAX AMPDU Len exp */
|
||||
status = sme_cfg_get_int(mac_handle, WNI_CFG_VHT_AMPDU_LEN_EXPONENT,
|
||||
&value);
|
||||
|
||||
if (status != QDF_STATUS_SUCCESS) {
|
||||
hdd_err("could not get VHT AMPDU LEN");
|
||||
value = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* VHT max AMPDU len exp:
|
||||
* override if user configured value is too high
|
||||
* that the target cannot support.
|
||||
* Even though Rome publish ampdu_len=7, it can
|
||||
* only support 4 because of some h/w bug.
|
||||
*/
|
||||
|
||||
if (value > cfg->vht_max_ampdu_len_exp) {
|
||||
status = sme_cfg_set_int(mac_handle,
|
||||
WNI_CFG_VHT_AMPDU_LEN_EXPONENT,
|
||||
cfg->vht_max_ampdu_len_exp);
|
||||
|
||||
if (status == QDF_STATUS_E_FAILURE)
|
||||
hdd_err("could not set the VHT AMPDU LEN EXP");
|
||||
}
|
||||
|
||||
/* Get VHT TXOP PS CAP */
|
||||
status = sme_cfg_get_int(mac_handle, WNI_CFG_VHT_TXOP_PS, &value);
|
||||
|
||||
if (status != QDF_STATUS_SUCCESS) {
|
||||
hdd_err("could not get VHT TXOP PS");
|
||||
value = 0;
|
||||
}
|
||||
|
||||
/* set VHT TXOP PS cap */
|
||||
if (value && !cfg->vht_txop_ps) {
|
||||
status = sme_cfg_set_int(mac_handle, WNI_CFG_VHT_TXOP_PS,
|
||||
cfg->vht_txop_ps);
|
||||
|
||||
if (status == QDF_STATUS_E_FAILURE)
|
||||
hdd_err("could not set the VHT TXOP PS");
|
||||
}
|
||||
status = ucfg_mlme_update_vht_cap(hdd_ctx->psoc, cfg);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
hdd_err("could not update vht capabilities");
|
||||
|
||||
if (WMI_VHT_CAP_MAX_MPDU_LEN_11454 == cfg->vht_max_mpdu)
|
||||
band_5g->vht_cap.cap |= IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_11454;
|
||||
|
|
@ -1776,43 +1548,35 @@ static void hdd_update_tgt_vht_cap(struct hdd_context *hdd_ctx,
|
|||
|
||||
|
||||
if (cfg->supp_chan_width & (1 << eHT_CHANNEL_WIDTH_80P80MHZ)) {
|
||||
status = sme_cfg_set_int(mac_handle,
|
||||
WNI_CFG_VHT_SUPPORTED_CHAN_WIDTH_SET,
|
||||
status =
|
||||
ucfg_mlme_cfg_set_vht_chan_width(hdd_ctx->psoc,
|
||||
VHT_CAP_160_AND_80P80_SUPP);
|
||||
if (status == QDF_STATUS_E_FAILURE)
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
hdd_err("could not set the VHT CAP 160");
|
||||
band_5g->vht_cap.cap |=
|
||||
IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ;
|
||||
ch_width = eHT_CHANNEL_WIDTH_80P80MHZ;
|
||||
} else if (cfg->supp_chan_width & (1 << eHT_CHANNEL_WIDTH_160MHZ)) {
|
||||
status = sme_cfg_set_int(mac_handle,
|
||||
WNI_CFG_VHT_SUPPORTED_CHAN_WIDTH_SET,
|
||||
VHT_CAP_160_SUPP);
|
||||
if (status == QDF_STATUS_E_FAILURE)
|
||||
status =
|
||||
ucfg_mlme_cfg_set_vht_chan_width(hdd_ctx->psoc,
|
||||
VHT_CAP_160_SUPP);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
hdd_err("could not set the VHT CAP 160");
|
||||
band_5g->vht_cap.cap |=
|
||||
IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ;
|
||||
ch_width = eHT_CHANNEL_WIDTH_160MHZ;
|
||||
}
|
||||
pconfig->vhtChannelWidth = QDF_MIN(pconfig->vhtChannelWidth,
|
||||
ch_width);
|
||||
/* Get the current GI 160 value */
|
||||
status = sme_cfg_get_int(mac_handle,
|
||||
WNI_CFG_VHT_SHORT_GI_160_AND_80_PLUS_80MHZ,
|
||||
&value);
|
||||
if (status != QDF_STATUS_SUCCESS) {
|
||||
hdd_err("could not get GI 80 & 160");
|
||||
value = 0;
|
||||
}
|
||||
/* set the Guard interval 160MHz */
|
||||
if (value && !cfg->vht_short_gi_160) {
|
||||
status = sme_cfg_set_int(mac_handle,
|
||||
WNI_CFG_VHT_SHORT_GI_160_AND_80_PLUS_80MHZ,
|
||||
cfg->vht_short_gi_160);
|
||||
|
||||
if (status == QDF_STATUS_E_FAILURE)
|
||||
hdd_err("failed to set SHORT GI 160MHZ");
|
||||
}
|
||||
status =
|
||||
ucfg_mlme_cfg_get_vht_chan_width(hdd_ctx->psoc, &val);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
hdd_err("could not get channel_width");
|
||||
|
||||
val = QDF_MIN(val, ch_width);
|
||||
status =
|
||||
ucfg_mlme_cfg_set_vht_chan_width(hdd_ctx->psoc, val);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
hdd_err("could not set the channel width");
|
||||
|
||||
if (cfg->vht_rx_ldpc & WMI_VHT_CAP_RX_LDPC) {
|
||||
band_5g->vht_cap.cap |= IEEE80211_VHT_CAP_RXLDPC;
|
||||
|
|
@ -1933,6 +1697,8 @@ void hdd_update_tgt_cfg(hdd_handle_t hdd_handle, struct wma_tgt_cfg *cfg)
|
|||
uint8_t antenna_mode;
|
||||
QDF_STATUS status;
|
||||
mac_handle_t mac_handle;
|
||||
bool bval = false;
|
||||
uint8_t value = 0;
|
||||
|
||||
if (!hdd_ctx) {
|
||||
hdd_err("HDD context is NULL");
|
||||
|
|
@ -2099,7 +1865,11 @@ void hdd_update_tgt_cfg(hdd_handle_t hdd_handle, struct wma_tgt_cfg *cfg)
|
|||
hdd_debug("fine_time_meas_cap: 0x%x",
|
||||
hdd_ctx->config->fine_time_meas_cap);
|
||||
|
||||
antenna_mode = (hdd_ctx->config->enable2x2 == 0x01) ?
|
||||
status = ucfg_mlme_get_vht_enable2x2(hdd_ctx->psoc, &bval);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status))
|
||||
hdd_err("unable to get vht_enable2x2");
|
||||
|
||||
antenna_mode = (bval == 0x01) ?
|
||||
HDD_ANTENNA_MODE_2X2 : HDD_ANTENNA_MODE_1X1;
|
||||
hdd_update_smps_antenna_mode(hdd_ctx, antenna_mode);
|
||||
hdd_debug("Init current antenna mode: %d",
|
||||
|
|
@ -2108,21 +1878,28 @@ void hdd_update_tgt_cfg(hdd_handle_t hdd_handle, struct wma_tgt_cfg *cfg)
|
|||
hdd_ctx->rcpi_enabled = cfg->rcpi_enabled;
|
||||
hdd_update_ra_rate_limit(hdd_ctx, cfg);
|
||||
|
||||
if ((hdd_ctx->config->txBFCsnValue >
|
||||
status = ucfg_mlme_cfg_get_vht_tx_bfee_ant_supp(hdd_ctx->psoc,
|
||||
&value);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
status = false;
|
||||
hdd_err("set tx_bfee_ant_supp failed");
|
||||
}
|
||||
|
||||
if ((value >
|
||||
WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED_FW_DEF) &&
|
||||
!cfg->tx_bfee_8ss_enabled)
|
||||
hdd_ctx->config->txBFCsnValue =
|
||||
WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED_FW_DEF;
|
||||
!cfg->tx_bfee_8ss_enabled) {
|
||||
status =
|
||||
ucfg_mlme_cfg_set_vht_tx_bfee_ant_supp(hdd_ctx->psoc,
|
||||
WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED_FW_DEF);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
status = false;
|
||||
hdd_err("set tx_bfee_ant_supp failed");
|
||||
}
|
||||
}
|
||||
|
||||
mac_handle = hdd_ctx->mac_handle;
|
||||
status = sme_cfg_set_int(mac_handle,
|
||||
WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED,
|
||||
hdd_ctx->config->txBFCsnValue);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
hdd_err("fw update WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED to CFG fails");
|
||||
|
||||
hdd_debug("Target 8ss fw support %d txBFCsnValue %d",
|
||||
cfg->tx_bfee_8ss_enabled, hdd_ctx->config->txBFCsnValue);
|
||||
hdd_debug("txBFCsnValue %d", value);
|
||||
|
||||
/*
|
||||
* Update txBFCsnValue and NumSoundingDim values to vhtcap in wiphy
|
||||
|
|
@ -4173,11 +3950,16 @@ QDF_STATUS hdd_init_station_mode(struct hdd_adapter *adapter)
|
|||
QDF_STATUS status;
|
||||
int ret_val;
|
||||
mac_handle_t mac_handle;
|
||||
bool bval = false;
|
||||
|
||||
hdd_ctx = WLAN_HDD_GET_CTX(adapter);
|
||||
mac_handle = hdd_ctx->mac_handle;
|
||||
sme_set_curr_device_mode(mac_handle, adapter->device_mode);
|
||||
sme_set_pdev_ht_vht_ies(mac_handle, hdd_ctx->config->enable2x2);
|
||||
status = ucfg_mlme_get_vht_enable2x2(hdd_ctx->psoc, &bval);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status))
|
||||
hdd_err("unable to get vht_enable2x2");
|
||||
sme_set_pdev_ht_vht_ies(mac_handle, bval);
|
||||
|
||||
sme_set_vdev_ies_per_band(mac_handle, adapter->session_id);
|
||||
|
||||
hdd_roam_profile_init(adapter);
|
||||
|
|
@ -4493,9 +4275,14 @@ static int hdd_configure_chain_mask(struct hdd_adapter *adapter)
|
|||
QDF_STATUS status;
|
||||
struct wma_caps_per_phy non_dbs_phy_cap;
|
||||
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
|
||||
bool bval = false;
|
||||
|
||||
status = ucfg_mlme_get_vht_enable2x2(hdd_ctx->psoc, &bval);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status))
|
||||
hdd_err("unable to get vht_enable2x2");
|
||||
|
||||
hdd_debug("enable2x2: %d, lte_coex: %d, disable_DBS: %d",
|
||||
hdd_ctx->config->enable2x2, hdd_ctx->lte_coex_ant_share,
|
||||
bval, hdd_ctx->lte_coex_ant_share,
|
||||
hdd_ctx->config->dual_mac_feature_disable);
|
||||
hdd_debug("enable_bt_chain_separation %d",
|
||||
hdd_ctx->config->enable_bt_chain_separation);
|
||||
|
|
@ -4516,8 +4303,7 @@ static int hdd_configure_chain_mask(struct hdd_adapter *adapter)
|
|||
return 0;
|
||||
}
|
||||
|
||||
if (hdd_ctx->config->enable2x2 &&
|
||||
!hdd_ctx->config->enable_bt_chain_separation) {
|
||||
if (bval && !hdd_ctx->config->enable_bt_chain_separation) {
|
||||
hdd_debug("2x2 enabled. skip chain mask programming");
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -4664,6 +4450,7 @@ int hdd_set_fw_params(struct hdd_adapter *adapter)
|
|||
bool enable_dtim_1chrx;
|
||||
QDF_STATUS status;
|
||||
struct hdd_context *hdd_ctx;
|
||||
bool bval = false;
|
||||
|
||||
hdd_enter_dev(adapter->dev);
|
||||
|
||||
|
|
@ -4744,7 +4531,11 @@ int hdd_set_fw_params(struct hdd_adapter *adapter)
|
|||
enable_dtim_1chrx);
|
||||
}
|
||||
|
||||
if (hdd_ctx->config->enable2x2) {
|
||||
status = ucfg_mlme_get_vht_enable2x2(hdd_ctx->psoc, &bval);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status))
|
||||
hdd_err("unable to get vht_enable2x2");
|
||||
|
||||
if (bval) {
|
||||
hdd_debug("configuring 2x2 mode fw params");
|
||||
|
||||
ret = sme_set_cck_tx_fir_override(hdd_ctx->mac_handle,
|
||||
|
|
@ -10894,6 +10685,7 @@ int hdd_configure_cds(struct hdd_context *hdd_ctx)
|
|||
struct policy_mgr_dp_cbacks dp_cbs = {0};
|
||||
bool value;
|
||||
enum pmo_auto_pwr_detect_failure_mode auto_power_fail_mode;
|
||||
bool bval = false;
|
||||
|
||||
mac_handle = hdd_ctx->mac_handle;
|
||||
|
||||
|
|
@ -10951,7 +10743,11 @@ int hdd_configure_cds(struct hdd_context *hdd_ctx)
|
|||
goto out;
|
||||
}
|
||||
|
||||
if (!hdd_ctx->config->enable2x2) {
|
||||
status = ucfg_mlme_get_vht_enable2x2(hdd_ctx->psoc, &bval);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status))
|
||||
hdd_err("unable to get vht_enable2x2");
|
||||
|
||||
if (!bval) {
|
||||
if (num_11b_tx_chains > 1)
|
||||
num_11b_tx_chains = 1;
|
||||
if (num_11ag_tx_chains > 1)
|
||||
|
|
@ -13971,41 +13767,25 @@ uint32_t hdd_limit_max_per_index_score(uint32_t per_index_score)
|
|||
return per_index_score;
|
||||
}
|
||||
|
||||
/**
|
||||
* hdd_update_score_config - API to update candidate scoring related params
|
||||
* configuration parameters
|
||||
* @score_config: score config to update
|
||||
* @cfg: config params
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static QDF_STATUS
|
||||
hdd_update_score_config(struct scoring_config *score_config,
|
||||
struct hdd_config *cfg)
|
||||
QDF_STATUS hdd_update_score_config(
|
||||
struct scoring_config *score_config, struct hdd_context *hdd_ctx)
|
||||
{
|
||||
struct hdd_context *hdd_ctx;
|
||||
bool enable2x2 = false;
|
||||
struct hdd_config *cfg = hdd_ctx->config;
|
||||
QDF_STATUS status;
|
||||
|
||||
hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD);
|
||||
if (!hdd_ctx) {
|
||||
hdd_err("HDD context is NULL");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
bool bval = false;
|
||||
|
||||
sme_update_score_config(hdd_ctx->mac_handle, score_config);
|
||||
|
||||
score_config->cb_mode_24G = cfg->nChannelBondingMode24GHz;
|
||||
score_config->cb_mode_5G = cfg->nChannelBondingMode5GHz;
|
||||
|
||||
status = ucfg_mlme_get_vht_enable2x2(hdd_ctx->psoc, &enable2x2);
|
||||
status = ucfg_mlme_get_vht_enable2x2(hdd_ctx->psoc, &bval);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status))
|
||||
hdd_err("unable to get enable2x2");
|
||||
|
||||
hdd_err("unable to get vht_enable2x2");
|
||||
score_config->vdev_nss_24g =
|
||||
enable2x2 ? CFG_STA_NSS(cfg->vdev_type_nss_2g) : 1;
|
||||
bval ? CFG_STA_NSS(cfg->vdev_type_nss_2g) : 1;
|
||||
score_config->vdev_nss_5g =
|
||||
enable2x2 ? CFG_STA_NSS(cfg->vdev_type_nss_5g) : 1;
|
||||
bval ? CFG_STA_NSS(cfg->vdev_type_nss_5g) : 1;
|
||||
|
||||
if (cfg->dot11Mode == eHDD_DOT11_MODE_AUTO ||
|
||||
cfg->dot11Mode == eHDD_DOT11_MODE_11ax ||
|
||||
|
|
@ -14021,10 +13801,18 @@ hdd_update_score_config(struct scoring_config *score_config,
|
|||
cfg->dot11Mode == eHDD_DOT11_MODE_11n_ONLY)
|
||||
score_config->ht_cap = 1;
|
||||
|
||||
if (score_config->vht_cap && cfg->enableVhtFor24GHzBand)
|
||||
status = ucfg_mlme_get_vht_for_24ghz(hdd_ctx->psoc, &bval);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status))
|
||||
hdd_err("Failed to get vht_for_24ghz");
|
||||
if (score_config->vht_cap && bval)
|
||||
score_config->vht_24G_cap = 1;
|
||||
|
||||
if (cfg->enableTxBF)
|
||||
status = ucfg_mlme_get_vht_enable_tx_bf(hdd_ctx->psoc,
|
||||
&bval);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status))
|
||||
hdd_err("unable to get vht_enable_tx_bf");
|
||||
|
||||
if (bval)
|
||||
score_config->beamformee_cap = 1;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
|
|
@ -14102,7 +13890,7 @@ static int hdd_update_scan_config(struct hdd_context *hdd_ctx)
|
|||
hdd_update_pno_config(&scan_cfg.pno_cfg, cfg);
|
||||
hdd_update_ie_whitelist_attr(&scan_cfg.ie_whitelist, hdd_ctx);
|
||||
|
||||
status = hdd_update_score_config(&scan_cfg.score_config, cfg);
|
||||
status = hdd_update_score_config(&scan_cfg.score_config, hdd_ctx);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
hdd_err("Failed to update scoring config");
|
||||
return -EINVAL;
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@
|
|||
#include "wlan_nan_api.h"
|
||||
#include "nan_public_structs.h"
|
||||
#include "cfg_nan_api.h"
|
||||
#include "wlan_mlme_ucfg_api.h"
|
||||
|
||||
/**
|
||||
* hdd_nan_datapath_target_config() - Configure NAN datapath features
|
||||
|
|
@ -401,6 +402,7 @@ int hdd_init_nan_data_mode(struct hdd_adapter *adapter)
|
|||
QDF_STATUS status;
|
||||
int32_t ret_val;
|
||||
mac_handle_t mac_handle;
|
||||
bool bval = false;
|
||||
|
||||
ret_val = hdd_vdev_create(adapter, hdd_sme_roam_callback, adapter);
|
||||
if (ret_val) {
|
||||
|
|
@ -412,7 +414,12 @@ int hdd_init_nan_data_mode(struct hdd_adapter *adapter)
|
|||
|
||||
/* Configure self HT/VHT capabilities */
|
||||
sme_set_curr_device_mode(mac_handle, adapter->device_mode);
|
||||
sme_set_pdev_ht_vht_ies(mac_handle, hdd_ctx->config->enable2x2);
|
||||
|
||||
status = ucfg_mlme_get_vht_enable2x2(hdd_ctx->psoc, &bval);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status))
|
||||
hdd_err("unable to get vht_enable2x2");
|
||||
|
||||
sme_set_pdev_ht_vht_ies(mac_handle, bval);
|
||||
sme_set_vdev_ies_per_band(mac_handle, adapter->session_id);
|
||||
|
||||
hdd_roam_profile_init(adapter);
|
||||
|
|
|
|||
|
|
@ -36,6 +36,8 @@
|
|||
#include "wlan_hdd_debugfs_llstat.h"
|
||||
#include "wlan_reg_services_api.h"
|
||||
#include <wlan_cfg80211_mc_cp_stats.h>
|
||||
#include "wlan_mlme_ucfg_api.h"
|
||||
#include "wlan_mlme_ucfg_api.h"
|
||||
|
||||
#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 0)) && !defined(WITH_BACKPORTS)
|
||||
#define HDD_INFO_SIGNAL STATION_INFO_SIGNAL
|
||||
|
|
@ -3945,7 +3947,7 @@ int wlan_hdd_get_station_remote(struct wiphy *wiphy,
|
|||
* @tx_nss: The TX NSS from fw stats
|
||||
*
|
||||
* Return: 0 for success
|
||||
*/
|
||||
nt wlan_hdd_update_phymode(struct net_device *net, mac_handle_t mac_handle, int */
|
||||
static int hdd_report_max_rate(mac_handle_t mac_handle,
|
||||
struct hdd_config *config,
|
||||
struct station_info *sinfo,
|
||||
|
|
@ -3970,6 +3972,14 @@ static int hdd_report_max_rate(mac_handle_t mac_handle,
|
|||
uint8_t max_mcs_idx = 0;
|
||||
uint8_t rate_flag = 1;
|
||||
int mode = 0, max_ht_idx;
|
||||
QDF_STATUS stat = QDF_STATUS_E_FAILURE;
|
||||
struct hdd_context *hdd_ctx;
|
||||
|
||||
hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD);
|
||||
if (!hdd_ctx) {
|
||||
hdd_err("HDD context is NULL");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
/* we do not want to necessarily report the current speed */
|
||||
if (eHDD_LINK_SPEED_REPORT_MAX == config->reportMaxLinkSpeed) {
|
||||
|
|
@ -4076,9 +4086,10 @@ static int hdd_report_max_rate(mac_handle_t mac_handle,
|
|||
/* VHT80 rate has separate rate table */
|
||||
if (tx_rate_flags & (TX_RATE_VHT20 | TX_RATE_VHT40 |
|
||||
TX_RATE_VHT80)) {
|
||||
sme_cfg_get_int(mac_handle,
|
||||
WNI_CFG_VHT_TX_MCS_MAP,
|
||||
&vht_mcs_map);
|
||||
stat = ucfg_mlme_cfg_get_vht_tx_mcs_map(hdd_ctx->psoc,
|
||||
&vht_mcs_map);
|
||||
if (QDF_IS_STATUS_ERROR(stat))
|
||||
hdd_err("failed to get tx_mcs_map");
|
||||
vht_max_mcs = (enum data_rate_11ac_max_mcs)
|
||||
(vht_mcs_map & DATA_RATE_11AC_MCS_MASK);
|
||||
if (tx_rate_flags & TX_RATE_SGI)
|
||||
|
|
|
|||
|
|
@ -3441,13 +3441,12 @@ int hdd_set_ldpc(struct hdd_adapter *adapter, int value)
|
|||
hdd_err("Failed to set HT capability info");
|
||||
return -EIO;
|
||||
}
|
||||
status = sme_cfg_set_int(mac_handle, WNI_CFG_VHT_LDPC_CODING_CAP,
|
||||
value);
|
||||
if (QDF_STATUS_SUCCESS != status) {
|
||||
status =
|
||||
ucfg_mlme_cfg_set_vht_ldpc_coding_cap(hdd_ctx->psoc, value);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
hdd_err("Failed to set VHT LDPC capability info");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
ret = sme_update_ht_config(mac_handle, adapter->session_id,
|
||||
WNI_CFG_HT_CAP_INFO_ADVANCE_CODING,
|
||||
value);
|
||||
|
|
@ -3682,7 +3681,7 @@ int wlan_hdd_update_phymode(struct net_device *net, mac_handle_t mac_handle,
|
|||
bool ch_bond24 = false, ch_bond5g = false;
|
||||
tSmeConfigParams *sme_config;
|
||||
uint32_t chwidth = WNI_CFG_CHANNEL_BONDING_MODE_DISABLE;
|
||||
uint32_t vhtchanwidth;
|
||||
uint8_t vhtchanwidth;
|
||||
eCsrPhyMode phymode = -EIO, old_phymode;
|
||||
enum hdd_dot11_mode hdd_dot11mode = phddctx->config->dot11Mode;
|
||||
enum band_info curr_band = BAND_ALL;
|
||||
|
|
@ -3715,7 +3714,11 @@ int wlan_hdd_update_phymode(struct net_device *net, mac_handle_t mac_handle,
|
|||
else if (band_capability == BAND_5G)
|
||||
band_5g = true;
|
||||
|
||||
vhtchanwidth = phddctx->config->vhtChannelWidth;
|
||||
halStatus = ucfg_mlme_get_vht_channel_width(phddctx->psoc,
|
||||
&vhtchanwidth);
|
||||
if (!QDF_IS_STATUS_SUCCESS(halStatus))
|
||||
hdd_err("Failed to set channel_width");
|
||||
|
||||
hdd_debug("ch_bond24=%d ch_bond5g=%d band_24=%d band_5g=%d VHT_ch_width=%u",
|
||||
ch_bond24, ch_bond5g, band_24, band_5g, vhtchanwidth);
|
||||
|
||||
|
|
@ -3898,7 +3901,10 @@ int wlan_hdd_update_phymode(struct net_device *net, mac_handle_t mac_handle,
|
|||
vhtchanwidth = eHT_CHANNEL_WIDTH_80MHZ;
|
||||
break;
|
||||
default:
|
||||
vhtchanwidth = phddctx->config->vhtChannelWidth;
|
||||
halStatus = ucfg_mlme_get_vht_channel_width(phddctx->psoc,
|
||||
&vhtchanwidth);
|
||||
if (!QDF_IS_STATUS_SUCCESS(halStatus))
|
||||
hdd_err("Failed to set channel_width");
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -3956,7 +3962,6 @@ int wlan_hdd_update_phymode(struct net_device *net, mac_handle_t mac_handle,
|
|||
sme_config->csrConfig.channelBondingMode24GHz = chwidth;
|
||||
sme_config->csrConfig.channelBondingMode5GHz = chwidth;
|
||||
}
|
||||
sme_config->csrConfig.nVhtChannelWidth = vhtchanwidth;
|
||||
sme_update_config(mac_handle, sme_config);
|
||||
|
||||
phddctx->config->dot11Mode = hdd_dot11mode;
|
||||
|
|
@ -3964,7 +3969,6 @@ int wlan_hdd_update_phymode(struct net_device *net, mac_handle_t mac_handle,
|
|||
sme_config->csrConfig.channelBondingMode24GHz;
|
||||
phddctx->config->nChannelBondingMode5GHz =
|
||||
sme_config->csrConfig.channelBondingMode5GHz;
|
||||
phddctx->config->vhtChannelWidth = vhtchanwidth;
|
||||
if (hdd_update_config_cfg(phddctx) == false) {
|
||||
hdd_err("could not update config_dat");
|
||||
retval = -EIO;
|
||||
|
|
@ -5510,6 +5514,8 @@ static int __iw_setnone_getint(struct net_device *dev,
|
|||
int ret;
|
||||
tSmeConfigParams *sme_config;
|
||||
struct hdd_context *hdd_ctx;
|
||||
QDF_STATUS status;
|
||||
bool bval = false;
|
||||
|
||||
hdd_enter_dev(dev);
|
||||
|
||||
|
|
@ -5569,7 +5575,10 @@ static int __iw_setnone_getint(struct net_device *dev,
|
|||
case WE_GET_NSS:
|
||||
{
|
||||
sme_get_config_param(mac_handle, sme_config);
|
||||
*value = (sme_config->csrConfig.enable2x2 == 0) ? 1 : 2;
|
||||
status = ucfg_mlme_get_vht_enable2x2(hdd_ctx->psoc, &bval);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status))
|
||||
hdd_err("unable to get vht_enable2x2");
|
||||
*value = (bval == 0) ? 1 : 2;
|
||||
if (policy_mgr_is_current_hwmode_dbs(hdd_ctx->psoc))
|
||||
*value = *value - 1;
|
||||
hdd_debug("GET_NSS: Current NSS:%d", *value);
|
||||
|
|
@ -6201,6 +6210,8 @@ static int __iw_get_char_setnone(struct net_device *dev,
|
|||
struct hdd_context *hdd_ctx;
|
||||
mac_handle_t mac_handle;
|
||||
int ret;
|
||||
QDF_STATUS status;
|
||||
uint8_t value;
|
||||
|
||||
hdd_enter_dev(dev);
|
||||
|
||||
|
|
@ -6675,40 +6686,43 @@ static int __iw_get_char_setnone(struct net_device *dev,
|
|||
break;
|
||||
case eCSR_DOT11_MODE_11ac:
|
||||
case eCSR_DOT11_MODE_11ac_ONLY:
|
||||
if (hddctx->config->vhtChannelWidth ==
|
||||
eHT_CHANNEL_WIDTH_20MHZ)
|
||||
status =
|
||||
ucfg_mlme_get_vht_channel_width(hddctx->psoc,
|
||||
&value);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status))
|
||||
hdd_err("Failed to set channel_width");
|
||||
if (value == eHT_CHANNEL_WIDTH_20MHZ)
|
||||
snprintf(extra, WE_MAX_STR_LEN,
|
||||
"11ACVHT20");
|
||||
else if (hddctx->config->vhtChannelWidth ==
|
||||
eHT_CHANNEL_WIDTH_40MHZ)
|
||||
else if (value == eHT_CHANNEL_WIDTH_40MHZ)
|
||||
snprintf(extra, WE_MAX_STR_LEN,
|
||||
"11ACVHT40");
|
||||
else if (hddctx->config->vhtChannelWidth ==
|
||||
eHT_CHANNEL_WIDTH_80MHZ)
|
||||
else if (value == eHT_CHANNEL_WIDTH_80MHZ)
|
||||
snprintf(extra, WE_MAX_STR_LEN,
|
||||
"11ACVHT80");
|
||||
else if (hddctx->config->vhtChannelWidth ==
|
||||
eHT_CHANNEL_WIDTH_160MHZ)
|
||||
else if (value == eHT_CHANNEL_WIDTH_160MHZ)
|
||||
snprintf(extra, WE_MAX_STR_LEN,
|
||||
"11ACVHT160");
|
||||
break;
|
||||
case eCSR_DOT11_MODE_11ax:
|
||||
case eCSR_DOT11_MODE_11ax_ONLY:
|
||||
status =
|
||||
ucfg_mlme_get_vht_channel_width(hddctx->psoc,
|
||||
&value);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status))
|
||||
hdd_err("Failed to set channel_width");
|
||||
|
||||
/* currently using vhtChannelWidth */
|
||||
if (hddctx->config->vhtChannelWidth ==
|
||||
eHT_CHANNEL_WIDTH_20MHZ)
|
||||
if (value == eHT_CHANNEL_WIDTH_20MHZ)
|
||||
snprintf(extra, WE_MAX_STR_LEN,
|
||||
"11AX_HE_20");
|
||||
else if (hddctx->config->vhtChannelWidth ==
|
||||
eHT_CHANNEL_WIDTH_40MHZ)
|
||||
else if (value == eHT_CHANNEL_WIDTH_40MHZ)
|
||||
snprintf(extra, WE_MAX_STR_LEN,
|
||||
"11AX_HE_40");
|
||||
else if (hddctx->config->vhtChannelWidth ==
|
||||
eHT_CHANNEL_WIDTH_80MHZ)
|
||||
else if (value == eHT_CHANNEL_WIDTH_80MHZ)
|
||||
snprintf(extra, WE_MAX_STR_LEN,
|
||||
"11AX_HE_80");
|
||||
else if (hddctx->config->vhtChannelWidth ==
|
||||
eHT_CHANNEL_WIDTH_160MHZ)
|
||||
else if (value == eHT_CHANNEL_WIDTH_160MHZ)
|
||||
snprintf(extra, WE_MAX_STR_LEN,
|
||||
"11AX_HE_160");
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -65,35 +65,6 @@ enum {
|
|||
WNI_CFG_HT_INFO_FIELD3,
|
||||
WNI_CFG_BASIC_MCS_SET,
|
||||
WNI_CFG_CURRENT_MCS_SET,
|
||||
WNI_CFG_VHT_MAX_MPDU_LENGTH,
|
||||
WNI_CFG_VHT_SUPPORTED_CHAN_WIDTH_SET,
|
||||
WNI_CFG_VHT_LDPC_CODING_CAP,
|
||||
WNI_CFG_VHT_SHORT_GI_80MHZ,
|
||||
WNI_CFG_VHT_SHORT_GI_160_AND_80_PLUS_80MHZ,
|
||||
WNI_CFG_VHT_TXSTBC,
|
||||
WNI_CFG_VHT_RXSTBC,
|
||||
WNI_CFG_VHT_SU_BEAMFORMER_CAP,
|
||||
WNI_CFG_VHT_SU_BEAMFORMEE_CAP,
|
||||
WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED,
|
||||
WNI_CFG_VHT_NUM_SOUNDING_DIMENSIONS,
|
||||
WNI_CFG_VHT_MU_BEAMFORMER_CAP,
|
||||
WNI_CFG_VHT_MU_BEAMFORMEE_CAP,
|
||||
WNI_CFG_VHT_TXOP_PS,
|
||||
WNI_CFG_VHT_HTC_VHTC_CAP,
|
||||
WNI_CFG_VHT_AMPDU_LEN_EXPONENT,
|
||||
WNI_CFG_VHT_LINK_ADAPTATION_CAP,
|
||||
WNI_CFG_VHT_RX_ANT_PATTERN,
|
||||
WNI_CFG_VHT_TX_ANT_PATTERN,
|
||||
WNI_CFG_VHT_RX_MCS_MAP,
|
||||
WNI_CFG_VHT_TX_MCS_MAP,
|
||||
WNI_CFG_VHT_RX_HIGHEST_SUPPORTED_DATA_RATE,
|
||||
WNI_CFG_VHT_TX_HIGHEST_SUPPORTED_DATA_RATE,
|
||||
WNI_CFG_VHT_BASIC_MCS_SET,
|
||||
WNI_CFG_VHT_MU_MIMO_CAP_STA_COUNT,
|
||||
WNI_CFG_VHT_SS_UNDER_UTIL,
|
||||
WNI_CFG_VHT_40MHZ_UTILIZATION,
|
||||
WNI_CFG_VHT_80MHZ_UTILIZATION,
|
||||
WNI_CFG_VHT_160MHZ_UTILIZATION,
|
||||
WNI_CFG_MPDU_DENSITY,
|
||||
WNI_CFG_MAX_RX_AMPDU_FACTOR,
|
||||
WNI_CFG_SCAN_IN_POWERSAVE,
|
||||
|
|
@ -117,7 +88,6 @@ enum {
|
|||
WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP,
|
||||
WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY,
|
||||
WNI_CFG_IBSS_ATIM_WIN_SIZE,
|
||||
WNI_CFG_VHT_ENABLE_TXBF_20MHZ,
|
||||
WNI_CFG_MAX_HT_MCS_TX_DATA,
|
||||
WNI_CFG_DISABLE_ABG_RATE_FOR_TX_DATA,
|
||||
WNI_CFG_RATE_FOR_TX_MGMT,
|
||||
|
|
@ -685,9 +655,6 @@ enum {
|
|||
#define WNI_CFG_VHT_SU_BEAMFORMEE_CAP_STAMAX 1
|
||||
#define WNI_CFG_VHT_SU_BEAMFORMEE_CAP_STADEF 1
|
||||
|
||||
#define WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED_STAMIN 0
|
||||
#define WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED_STAMAX 8
|
||||
#define WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED_STADEF 8
|
||||
/*
|
||||
* WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED_FW_DEF + 1 is
|
||||
* assumed to be the default fw supported BF antennas, if fw
|
||||
|
|
|
|||
|
|
@ -80,35 +80,6 @@ const char *cfg_get_string(uint16_t cfg_id)
|
|||
CASE_RETURN_STRING(WNI_CFG_HT_INFO_FIELD3);
|
||||
CASE_RETURN_STRING(WNI_CFG_BASIC_MCS_SET);
|
||||
CASE_RETURN_STRING(WNI_CFG_CURRENT_MCS_SET);
|
||||
CASE_RETURN_STRING(WNI_CFG_VHT_MAX_MPDU_LENGTH);
|
||||
CASE_RETURN_STRING(WNI_CFG_VHT_SUPPORTED_CHAN_WIDTH_SET);
|
||||
CASE_RETURN_STRING(WNI_CFG_VHT_LDPC_CODING_CAP);
|
||||
CASE_RETURN_STRING(WNI_CFG_VHT_SHORT_GI_80MHZ);
|
||||
CASE_RETURN_STRING(WNI_CFG_VHT_SHORT_GI_160_AND_80_PLUS_80MHZ);
|
||||
CASE_RETURN_STRING(WNI_CFG_VHT_TXSTBC);
|
||||
CASE_RETURN_STRING(WNI_CFG_VHT_RXSTBC);
|
||||
CASE_RETURN_STRING(WNI_CFG_VHT_SU_BEAMFORMER_CAP);
|
||||
CASE_RETURN_STRING(WNI_CFG_VHT_SU_BEAMFORMEE_CAP);
|
||||
CASE_RETURN_STRING(WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED);
|
||||
CASE_RETURN_STRING(WNI_CFG_VHT_NUM_SOUNDING_DIMENSIONS);
|
||||
CASE_RETURN_STRING(WNI_CFG_VHT_MU_BEAMFORMER_CAP);
|
||||
CASE_RETURN_STRING(WNI_CFG_VHT_MU_BEAMFORMEE_CAP);
|
||||
CASE_RETURN_STRING(WNI_CFG_VHT_TXOP_PS);
|
||||
CASE_RETURN_STRING(WNI_CFG_VHT_HTC_VHTC_CAP);
|
||||
CASE_RETURN_STRING(WNI_CFG_VHT_AMPDU_LEN_EXPONENT);
|
||||
CASE_RETURN_STRING(WNI_CFG_VHT_LINK_ADAPTATION_CAP);
|
||||
CASE_RETURN_STRING(WNI_CFG_VHT_RX_ANT_PATTERN);
|
||||
CASE_RETURN_STRING(WNI_CFG_VHT_TX_ANT_PATTERN);
|
||||
CASE_RETURN_STRING(WNI_CFG_VHT_RX_MCS_MAP);
|
||||
CASE_RETURN_STRING(WNI_CFG_VHT_TX_MCS_MAP);
|
||||
CASE_RETURN_STRING(WNI_CFG_VHT_RX_HIGHEST_SUPPORTED_DATA_RATE);
|
||||
CASE_RETURN_STRING(WNI_CFG_VHT_TX_HIGHEST_SUPPORTED_DATA_RATE);
|
||||
CASE_RETURN_STRING(WNI_CFG_VHT_BASIC_MCS_SET);
|
||||
CASE_RETURN_STRING(WNI_CFG_VHT_MU_MIMO_CAP_STA_COUNT);
|
||||
CASE_RETURN_STRING(WNI_CFG_VHT_SS_UNDER_UTIL);
|
||||
CASE_RETURN_STRING(WNI_CFG_VHT_40MHZ_UTILIZATION);
|
||||
CASE_RETURN_STRING(WNI_CFG_VHT_80MHZ_UTILIZATION);
|
||||
CASE_RETURN_STRING(WNI_CFG_VHT_160MHZ_UTILIZATION);
|
||||
CASE_RETURN_STRING(WNI_CFG_MPDU_DENSITY);
|
||||
CASE_RETURN_STRING(WNI_CFG_MAX_RX_AMPDU_FACTOR);
|
||||
CASE_RETURN_STRING(WNI_CFG_WOWLAN_UCAST_PATTERN_FILTER_ENABLE);
|
||||
|
|
@ -131,7 +102,6 @@ const char *cfg_get_string(uint16_t cfg_id)
|
|||
CASE_RETURN_STRING(WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP);
|
||||
CASE_RETURN_STRING(WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY);
|
||||
CASE_RETURN_STRING(WNI_CFG_IBSS_ATIM_WIN_SIZE);
|
||||
CASE_RETURN_STRING(WNI_CFG_VHT_ENABLE_TXBF_20MHZ);
|
||||
CASE_RETURN_STRING(WNI_CFG_MAX_HT_MCS_TX_DATA);
|
||||
CASE_RETURN_STRING(WNI_CFG_DISABLE_ABG_RATE_FOR_TX_DATA);
|
||||
CASE_RETURN_STRING(WNI_CFG_RATE_FOR_TX_MGMT);
|
||||
|
|
|
|||
|
|
@ -226,180 +226,6 @@ cgstatic cfg_static[CFG_PARAM_MAX_NUM] = {
|
|||
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_SAVE |
|
||||
CFG_CTL_RESTART | CFG_CTL_NTF_LIM,
|
||||
0, 0, 0},
|
||||
{WNI_CFG_VHT_MAX_MPDU_LENGTH,
|
||||
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT |
|
||||
CFG_CTL_NTF_LIM,
|
||||
WNI_CFG_VHT_MAX_MPDU_LENGTH_STAMIN,
|
||||
WNI_CFG_VHT_MAX_MPDU_LENGTH_STAMAX,
|
||||
WNI_CFG_VHT_MAX_MPDU_LENGTH_STADEF},
|
||||
{WNI_CFG_VHT_SUPPORTED_CHAN_WIDTH_SET,
|
||||
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT |
|
||||
CFG_CTL_NTF_LIM,
|
||||
WNI_CFG_VHT_SUPPORTED_CHAN_WIDTH_SET_STAMIN,
|
||||
WNI_CFG_VHT_SUPPORTED_CHAN_WIDTH_SET_STAMAX,
|
||||
WNI_CFG_VHT_SUPPORTED_CHAN_WIDTH_SET_STADEF},
|
||||
{WNI_CFG_VHT_LDPC_CODING_CAP,
|
||||
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT |
|
||||
CFG_CTL_NTF_LIM,
|
||||
WNI_CFG_VHT_LDPC_CODING_CAP_STAMIN,
|
||||
WNI_CFG_VHT_LDPC_CODING_CAP_STAMAX,
|
||||
WNI_CFG_VHT_LDPC_CODING_CAP_STADEF},
|
||||
{WNI_CFG_VHT_SHORT_GI_80MHZ,
|
||||
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT |
|
||||
CFG_CTL_NTF_LIM,
|
||||
WNI_CFG_VHT_SHORT_GI_80MHZ_STAMIN,
|
||||
WNI_CFG_VHT_SHORT_GI_80MHZ_STAMAX,
|
||||
WNI_CFG_VHT_SHORT_GI_80MHZ_STADEF},
|
||||
{WNI_CFG_VHT_SHORT_GI_160_AND_80_PLUS_80MHZ,
|
||||
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT |
|
||||
CFG_CTL_NTF_LIM,
|
||||
WNI_CFG_VHT_SHORT_GI_160_AND_80_PLUS_80MHZ_STAMIN,
|
||||
WNI_CFG_VHT_SHORT_GI_160_AND_80_PLUS_80MHZ_STAMAX,
|
||||
WNI_CFG_VHT_SHORT_GI_160_AND_80_PLUS_80MHZ_STADEF},
|
||||
{WNI_CFG_VHT_TXSTBC,
|
||||
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT |
|
||||
CFG_CTL_NTF_LIM,
|
||||
WNI_CFG_VHT_TXSTBC_STAMIN,
|
||||
WNI_CFG_VHT_TXSTBC_STAMAX,
|
||||
WNI_CFG_VHT_TXSTBC_STADEF},
|
||||
{WNI_CFG_VHT_RXSTBC,
|
||||
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT |
|
||||
CFG_CTL_NTF_LIM,
|
||||
WNI_CFG_VHT_RXSTBC_STAMIN,
|
||||
WNI_CFG_VHT_RXSTBC_STAMAX,
|
||||
WNI_CFG_VHT_RXSTBC_STADEF},
|
||||
{WNI_CFG_VHT_SU_BEAMFORMER_CAP,
|
||||
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT |
|
||||
CFG_CTL_NTF_LIM,
|
||||
WNI_CFG_VHT_SU_BEAMFORMER_CAP_STAMIN,
|
||||
WNI_CFG_VHT_SU_BEAMFORMER_CAP_STAMAX,
|
||||
WNI_CFG_VHT_SU_BEAMFORMER_CAP_STADEF},
|
||||
{WNI_CFG_VHT_SU_BEAMFORMEE_CAP,
|
||||
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT |
|
||||
CFG_CTL_NTF_LIM,
|
||||
WNI_CFG_VHT_SU_BEAMFORMEE_CAP_STAMIN,
|
||||
WNI_CFG_VHT_SU_BEAMFORMEE_CAP_STAMAX,
|
||||
WNI_CFG_VHT_SU_BEAMFORMEE_CAP_STADEF},
|
||||
{WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED,
|
||||
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT |
|
||||
CFG_CTL_NTF_LIM,
|
||||
WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED_STAMIN,
|
||||
WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED_STAMAX,
|
||||
WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED_STADEF},
|
||||
{WNI_CFG_VHT_NUM_SOUNDING_DIMENSIONS,
|
||||
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT |
|
||||
CFG_CTL_NTF_LIM,
|
||||
WNI_CFG_VHT_NUM_SOUNDING_DIMENSIONS_STAMIN,
|
||||
WNI_CFG_VHT_NUM_SOUNDING_DIMENSIONS_STAMAX,
|
||||
WNI_CFG_VHT_NUM_SOUNDING_DIMENSIONS_STADEF},
|
||||
{WNI_CFG_VHT_MU_BEAMFORMER_CAP,
|
||||
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT |
|
||||
CFG_CTL_NTF_LIM,
|
||||
WNI_CFG_VHT_MU_BEAMFORMER_CAP_STAMIN,
|
||||
WNI_CFG_VHT_MU_BEAMFORMER_CAP_STAMAX,
|
||||
WNI_CFG_VHT_MU_BEAMFORMER_CAP_STADEF},
|
||||
{WNI_CFG_VHT_MU_BEAMFORMEE_CAP,
|
||||
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT |
|
||||
CFG_CTL_NTF_LIM,
|
||||
WNI_CFG_VHT_MU_BEAMFORMEE_CAP_STAMIN,
|
||||
WNI_CFG_VHT_MU_BEAMFORMEE_CAP_STAMAX,
|
||||
WNI_CFG_VHT_MU_BEAMFORMEE_CAP_STADEF},
|
||||
{WNI_CFG_VHT_TXOP_PS,
|
||||
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT |
|
||||
CFG_CTL_NTF_LIM,
|
||||
WNI_CFG_VHT_TXOP_PS_STAMIN,
|
||||
WNI_CFG_VHT_TXOP_PS_STAMAX,
|
||||
WNI_CFG_VHT_TXOP_PS_STADEF},
|
||||
{WNI_CFG_VHT_HTC_VHTC_CAP,
|
||||
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT |
|
||||
CFG_CTL_NTF_LIM,
|
||||
WNI_CFG_VHT_HTC_VHTC_CAP_STAMIN,
|
||||
WNI_CFG_VHT_HTC_VHTC_CAP_STAMAX,
|
||||
WNI_CFG_VHT_HTC_VHTC_CAP_STADEF},
|
||||
{WNI_CFG_VHT_AMPDU_LEN_EXPONENT,
|
||||
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT |
|
||||
CFG_CTL_NTF_LIM,
|
||||
WNI_CFG_VHT_AMPDU_LEN_EXPONENT_STAMIN,
|
||||
WNI_CFG_VHT_AMPDU_LEN_EXPONENT_STAMAX,
|
||||
WNI_CFG_VHT_AMPDU_LEN_EXPONENT_STADEF},
|
||||
{WNI_CFG_VHT_LINK_ADAPTATION_CAP,
|
||||
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT |
|
||||
CFG_CTL_NTF_LIM,
|
||||
WNI_CFG_VHT_LINK_ADAPTATION_CAP_STAMIN,
|
||||
WNI_CFG_VHT_LINK_ADAPTATION_CAP_STAMAX,
|
||||
WNI_CFG_VHT_LINK_ADAPTATION_CAP_STADEF},
|
||||
{WNI_CFG_VHT_RX_ANT_PATTERN,
|
||||
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT |
|
||||
CFG_CTL_NTF_LIM,
|
||||
WNI_CFG_VHT_RX_ANT_PATTERN_STAMIN,
|
||||
WNI_CFG_VHT_RX_ANT_PATTERN_STAMAX,
|
||||
WNI_CFG_VHT_RX_ANT_PATTERN_STADEF},
|
||||
{WNI_CFG_VHT_TX_ANT_PATTERN,
|
||||
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT |
|
||||
CFG_CTL_NTF_LIM,
|
||||
WNI_CFG_VHT_TX_ANT_PATTERN_STAMIN,
|
||||
WNI_CFG_VHT_TX_ANT_PATTERN_STAMAX,
|
||||
WNI_CFG_VHT_TX_ANT_PATTERN_STADEF},
|
||||
{WNI_CFG_VHT_RX_MCS_MAP,
|
||||
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT |
|
||||
CFG_CTL_NTF_LIM,
|
||||
WNI_CFG_VHT_RX_MCS_MAP_STAMIN,
|
||||
WNI_CFG_VHT_RX_MCS_MAP_STAMAX,
|
||||
WNI_CFG_VHT_RX_MCS_MAP_STADEF},
|
||||
{WNI_CFG_VHT_TX_MCS_MAP,
|
||||
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT |
|
||||
CFG_CTL_NTF_LIM,
|
||||
WNI_CFG_VHT_TX_MCS_MAP_STAMIN,
|
||||
WNI_CFG_VHT_TX_MCS_MAP_STAMAX,
|
||||
WNI_CFG_VHT_TX_MCS_MAP_STADEF},
|
||||
{WNI_CFG_VHT_RX_HIGHEST_SUPPORTED_DATA_RATE,
|
||||
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT |
|
||||
CFG_CTL_NTF_LIM,
|
||||
WNI_CFG_VHT_RX_HIGHEST_SUPPORTED_DATA_RATE_STAMIN,
|
||||
WNI_CFG_VHT_RX_HIGHEST_SUPPORTED_DATA_RATE_STAMAX,
|
||||
WNI_CFG_VHT_RX_HIGHEST_SUPPORTED_DATA_RATE_STADEF},
|
||||
{WNI_CFG_VHT_TX_HIGHEST_SUPPORTED_DATA_RATE,
|
||||
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT |
|
||||
CFG_CTL_NTF_LIM,
|
||||
WNI_CFG_VHT_TX_HIGHEST_SUPPORTED_DATA_RATE_STAMIN,
|
||||
WNI_CFG_VHT_TX_HIGHEST_SUPPORTED_DATA_RATE_STAMAX,
|
||||
WNI_CFG_VHT_TX_HIGHEST_SUPPORTED_DATA_RATE_STADEF},
|
||||
{WNI_CFG_VHT_BASIC_MCS_SET,
|
||||
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT |
|
||||
CFG_CTL_NTF_LIM,
|
||||
WNI_CFG_VHT_BASIC_MCS_SET_STAMIN,
|
||||
WNI_CFG_VHT_BASIC_MCS_SET_STAMAX,
|
||||
WNI_CFG_VHT_BASIC_MCS_SET_STADEF},
|
||||
{WNI_CFG_VHT_MU_MIMO_CAP_STA_COUNT,
|
||||
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT |
|
||||
CFG_CTL_NTF_LIM,
|
||||
WNI_CFG_VHT_MU_MIMO_CAP_STA_COUNT_STAMIN,
|
||||
WNI_CFG_VHT_MU_MIMO_CAP_STA_COUNT_STAMAX,
|
||||
WNI_CFG_VHT_MU_MIMO_CAP_STA_COUNT_STADEF},
|
||||
{WNI_CFG_VHT_SS_UNDER_UTIL,
|
||||
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT |
|
||||
CFG_CTL_NTF_LIM,
|
||||
WNI_CFG_VHT_SS_UNDER_UTIL_STAMIN,
|
||||
WNI_CFG_VHT_SS_UNDER_UTIL_STAMAX,
|
||||
WNI_CFG_VHT_SS_UNDER_UTIL_STADEF},
|
||||
{WNI_CFG_VHT_40MHZ_UTILIZATION,
|
||||
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT |
|
||||
CFG_CTL_NTF_LIM,
|
||||
WNI_CFG_VHT_40MHZ_UTILIZATION_STAMIN,
|
||||
WNI_CFG_VHT_40MHZ_UTILIZATION_STAMAX,
|
||||
WNI_CFG_VHT_40MHZ_UTILIZATION_STADEF},
|
||||
{WNI_CFG_VHT_80MHZ_UTILIZATION,
|
||||
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT |
|
||||
CFG_CTL_NTF_LIM,
|
||||
WNI_CFG_VHT_80MHZ_UTILIZATION_STAMIN,
|
||||
WNI_CFG_VHT_80MHZ_UTILIZATION_STAMAX,
|
||||
WNI_CFG_VHT_80MHZ_UTILIZATION_STADEF},
|
||||
{WNI_CFG_VHT_160MHZ_UTILIZATION,
|
||||
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT |
|
||||
CFG_CTL_NTF_LIM,
|
||||
WNI_CFG_VHT_80MHZ_UTILIZATION_STADEF,
|
||||
WNI_CFG_VHT_160MHZ_UTILIZATION_STAMAX,
|
||||
WNI_CFG_VHT_160MHZ_UTILIZATION_STADEF},
|
||||
{WNI_CFG_MPDU_DENSITY,
|
||||
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT |
|
||||
CFG_CTL_RESTART | CFG_CTL_NTF_LIM,
|
||||
|
|
@ -525,11 +351,6 @@ cgstatic cfg_static[CFG_PARAM_MAX_NUM] = {
|
|||
WNI_CFG_IBSS_ATIM_WIN_SIZE_STAMIN,
|
||||
WNI_CFG_IBSS_ATIM_WIN_SIZE_STAMAX,
|
||||
WNI_CFG_IBSS_ATIM_WIN_SIZE_STADEF},
|
||||
{WNI_CFG_VHT_ENABLE_TXBF_20MHZ,
|
||||
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT,
|
||||
WNI_CFG_VHT_ENABLE_TXBF_20MHZ_STAMIN,
|
||||
WNI_CFG_VHT_ENABLE_TXBF_20MHZ_STAMAX,
|
||||
WNI_CFG_VHT_ENABLE_TXBF_20MHZ_STADEF},
|
||||
{WNI_CFG_MAX_HT_MCS_TX_DATA,
|
||||
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT,
|
||||
WNI_CFG_MAX_HT_MCS_TX_DATA_STAMIN,
|
||||
|
|
|
|||
|
|
@ -1082,10 +1082,6 @@ populate_dot11f_vht_operation(tpAniSirGlobal pMac,
|
|||
tpPESession psessionEntry,
|
||||
tDot11fIEVHTOperation *pDot11f);
|
||||
|
||||
QDF_STATUS
|
||||
populate_dot11f_vht_ext_bss_load(tpAniSirGlobal pMac,
|
||||
tDot11fIEVHTExtBssLoad *pDot11f);
|
||||
|
||||
QDF_STATUS
|
||||
populate_dot11f_ext_cap(tpAniSirGlobal pMac, bool isVHTEnabled,
|
||||
tDot11fIEExtCap *pDot11f, tpPESession psessionEntry);
|
||||
|
|
|
|||
|
|
@ -1336,45 +1336,23 @@ QDF_STATUS lim_populate_vht_mcs_set(tpAniSirGlobal mac_ctx,
|
|||
tpPESession session_entry,
|
||||
uint8_t nss)
|
||||
{
|
||||
uint32_t val;
|
||||
uint32_t self_sta_dot11mode = 0;
|
||||
uint16_t mcs_map_mask = MCSMAPMASK1x1;
|
||||
uint16_t mcs_map_mask2x2 = 0;
|
||||
struct mlme_vht_capabilities_info vht_cap_info;
|
||||
|
||||
wlan_cfg_get_int(mac_ctx, WNI_CFG_DOT11_MODE, &self_sta_dot11mode);
|
||||
|
||||
if (!IS_DOT11_MODE_VHT(self_sta_dot11mode))
|
||||
return QDF_STATUS_SUCCESS;
|
||||
|
||||
if (wlan_cfg_get_int(mac_ctx, WNI_CFG_VHT_RX_MCS_MAP, &val) !=
|
||||
QDF_STATUS_SUCCESS) {
|
||||
pe_err("could not retrieve VHT RX MCS MAP");
|
||||
goto error;
|
||||
}
|
||||
rates->vhtRxMCSMap = (uint16_t) val;
|
||||
vht_cap_info = mac_ctx->mlme_cfg->vht_caps.vht_cap_info;
|
||||
|
||||
if (wlan_cfg_get_int(mac_ctx, WNI_CFG_VHT_TX_MCS_MAP, &val) !=
|
||||
QDF_STATUS_SUCCESS) {
|
||||
pe_err("could not retrieve VHT TX MCS MAP");
|
||||
goto error;
|
||||
}
|
||||
rates->vhtTxMCSMap = (uint16_t) val;
|
||||
|
||||
if (wlan_cfg_get_int(mac_ctx,
|
||||
WNI_CFG_VHT_RX_HIGHEST_SUPPORTED_DATA_RATE,
|
||||
&val) != QDF_STATUS_SUCCESS) {
|
||||
pe_err("couldn't retrieve VHT RX Supported data rate MAP");
|
||||
goto error;
|
||||
}
|
||||
rates->vhtRxHighestDataRate = (uint16_t) val;
|
||||
|
||||
if (wlan_cfg_get_int(mac_ctx,
|
||||
WNI_CFG_VHT_TX_HIGHEST_SUPPORTED_DATA_RATE,
|
||||
&val) != QDF_STATUS_SUCCESS) {
|
||||
pe_err("couldn't retrieve VHT RX Supported data rate MAP");
|
||||
goto error;
|
||||
}
|
||||
rates->vhtTxHighestDataRate = (uint16_t) val;
|
||||
rates->vhtRxMCSMap = (uint16_t)vht_cap_info.rx_mcs_map;
|
||||
rates->vhtTxMCSMap = (uint16_t)vht_cap_info.tx_mcs_map;
|
||||
rates->vhtRxHighestDataRate =
|
||||
(uint16_t) vht_cap_info.rx_supp_data_rate;
|
||||
rates->vhtTxHighestDataRate = (uint16_t)vht_cap_info.tx_supp_data_rate;
|
||||
|
||||
if (NSS_1x1_MODE == nss) {
|
||||
rates->vhtRxMCSMap |= VHT_MCS_1x1;
|
||||
|
|
@ -1384,7 +1362,7 @@ QDF_STATUS lim_populate_vht_mcs_set(tpAniSirGlobal mac_ctx,
|
|||
rates->vhtRxHighestDataRate =
|
||||
VHT_RX_HIGHEST_SUPPORTED_DATA_RATE_1_1;
|
||||
if (session_entry && !session_entry->ch_width &&
|
||||
!mac_ctx->roam.configParam.enable_vht20_mcs9 &&
|
||||
!mac_ctx->mlme_cfg->vht_caps.vht_cap_info.enable_vht20_mcs9 &&
|
||||
((rates->vhtRxMCSMap & VHT_1x1_MCS_MASK) ==
|
||||
VHT_1x1_MCS9_MAP)) {
|
||||
DISABLE_VHT_MCS_9(rates->vhtRxMCSMap,
|
||||
|
|
@ -1394,7 +1372,7 @@ QDF_STATUS lim_populate_vht_mcs_set(tpAniSirGlobal mac_ctx,
|
|||
}
|
||||
} else {
|
||||
if (session_entry && !session_entry->ch_width &&
|
||||
!mac_ctx->roam.configParam.enable_vht20_mcs9 &&
|
||||
!mac_ctx->mlme_cfg->vht_caps.vht_cap_info.enable_vht20_mcs9 &&
|
||||
((rates->vhtRxMCSMap & VHT_2x2_MCS_MASK) ==
|
||||
VHT_2x2_MCS9_MAP)) {
|
||||
DISABLE_VHT_MCS_9(rates->vhtRxMCSMap,
|
||||
|
|
@ -1460,7 +1438,7 @@ QDF_STATUS lim_populate_vht_mcs_set(tpAniSirGlobal mac_ctx,
|
|||
}
|
||||
|
||||
pe_debug("enable2x2 - %d nss %d vhtRxMCSMap - %x vhtTxMCSMap - %x",
|
||||
mac_ctx->roam.configParam.enable2x2, nss,
|
||||
mac_ctx->mlme_cfg->vht_caps.vht_cap_info.enable2x2, nss,
|
||||
rates->vhtRxMCSMap, rates->vhtTxMCSMap);
|
||||
|
||||
if (NULL != session_entry) {
|
||||
|
|
@ -1472,9 +1450,6 @@ QDF_STATUS lim_populate_vht_mcs_set(tpAniSirGlobal mac_ctx,
|
|||
}
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
error:
|
||||
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -2733,7 +2708,6 @@ lim_add_sta_self(tpAniSirGlobal pMac, uint16_t staIdx, uint8_t updateSta,
|
|||
QDF_STATUS retCode = QDF_STATUS_SUCCESS;
|
||||
tSirMacAddr staMac;
|
||||
uint32_t listenInterval = WNI_CFG_LISTEN_INTERVAL_STADEF;
|
||||
uint32_t ampduLenExponent = 0;
|
||||
/*This self Sta dot 11 mode comes from the cfg and the expectation here is
|
||||
* that cfg carries the systemwide capability that device under
|
||||
* consideration can support. This capability gets plumbed into the cfg
|
||||
|
|
@ -2873,14 +2847,10 @@ lim_add_sta_self(tpAniSirGlobal pMac, uint16_t staIdx, uint8_t updateSta,
|
|||
pAddStaParams->enable_su_tx_bformer);
|
||||
|
||||
/* In 11ac mode, the hardware is capable of supporting 128K AMPDU size */
|
||||
if (IS_DOT11_MODE_VHT(selfStaDot11Mode)) {
|
||||
if (wlan_cfg_get_int
|
||||
(pMac, WNI_CFG_VHT_AMPDU_LEN_EXPONENT, &duLenExponent)
|
||||
!= QDF_STATUS_SUCCESS) {
|
||||
pe_err("Couldn't get WNI_CFG_VHT_AMPDU_LEN_EXPONENT");
|
||||
}
|
||||
pAddStaParams->maxAmpduSize = (uint8_t) ampduLenExponent;
|
||||
}
|
||||
if (IS_DOT11_MODE_VHT(selfStaDot11Mode))
|
||||
pAddStaParams->maxAmpduSize =
|
||||
pMac->mlme_cfg->vht_caps.vht_cap_info.ampdu_len_exponent;
|
||||
|
||||
pAddStaParams->vhtTxMUBformeeCapable =
|
||||
psessionEntry->vht_config.mu_beam_formee;
|
||||
pAddStaParams->enableVhtpAid = psessionEntry->enableVhtpAid;
|
||||
|
|
@ -3606,11 +3576,13 @@ QDF_STATUS lim_sta_send_add_bss(tpAniSirGlobal pMac, tpSirAssocRsp pAssocRsp,
|
|||
tpDphHashNode pStaDs = NULL;
|
||||
uint8_t chanWidthSupp = 0;
|
||||
bool is_vht_cap_in_vendor_ie = false;
|
||||
uint32_t enableTxBF20MHz;
|
||||
tDot11fIEVHTCaps *vht_caps = NULL;
|
||||
tDot11fIEVHTOperation *vht_oper = NULL;
|
||||
tAddStaParams *sta_context;
|
||||
uint32_t listen_interval = WNI_CFG_LISTEN_INTERVAL_STADEF;
|
||||
struct mlme_vht_capabilities_info vht_cap_info;
|
||||
|
||||
vht_cap_info = pMac->mlme_cfg->vht_caps.vht_cap_info;
|
||||
|
||||
/* Package SIR_HAL_ADD_BSS_REQ message parameters */
|
||||
pAddBssParams = qdf_mem_malloc(sizeof(tAddBssParams));
|
||||
|
|
@ -3907,11 +3879,7 @@ QDF_STATUS lim_sta_send_add_bss(tpAniSirGlobal pMac, tpSirAssocRsp pAssocRsp,
|
|||
sta_context->enable_su_tx_bformer);
|
||||
} else {
|
||||
sta_context->ch_width = CH_WIDTH_20MHZ;
|
||||
if ((QDF_IS_STATUS_SUCCESS(
|
||||
wlan_cfg_get_int(pMac,
|
||||
WNI_CFG_VHT_ENABLE_TXBF_20MHZ,
|
||||
&enableTxBF20MHz))) &&
|
||||
(false == enableTxBF20MHz))
|
||||
if (vht_cap_info.enable_txbf_20mhz)
|
||||
sta_context->vhtTxBFCapable = 0;
|
||||
}
|
||||
pAddBssParams->staContext.mimoPS =
|
||||
|
|
|
|||
|
|
@ -413,11 +413,8 @@ static void mlm_add_sta(tpAniSirGlobal mac_ctx, tpAddStaParams sta_param,
|
|||
* capabilities
|
||||
*/
|
||||
if (IS_DOT11_MODE_VHT(self_dot11mode)) {
|
||||
val = 0; /* Default 8K AMPDU size */
|
||||
if (QDF_STATUS_SUCCESS != wlan_cfg_get_int(mac_ctx,
|
||||
WNI_CFG_VHT_AMPDU_LEN_EXPONENT, &val))
|
||||
pe_err("Couldn't get WNI_CFG_VHT_AMPDU_LEN_EXPONENT");
|
||||
sta_param->maxAmpduSize = (uint8_t) val;
|
||||
sta_param->maxAmpduSize =
|
||||
mac_ctx->mlme_cfg->vht_caps.vht_cap_info.ampdu_len_exponent;
|
||||
}
|
||||
sta_param->enableVhtpAid = session_entry->enableVhtpAid;
|
||||
sta_param->enableAmpduPs = session_entry->enableAmpduPs;
|
||||
|
|
|
|||
|
|
@ -805,7 +805,7 @@ __lim_handle_sme_start_bss_request(tpAniSirGlobal mac_ctx, uint32_t *msg_buf)
|
|||
pe_debug("persona - %d, nss - %d",
|
||||
session->pePersona, session->vdev_nss);
|
||||
session->nss = session->vdev_nss;
|
||||
if (!mac_ctx->roam.configParam.enable2x2)
|
||||
if (!mac_ctx->mlme_cfg->vht_caps.vht_cap_info.enable2x2)
|
||||
session->nss = 1;
|
||||
/*
|
||||
* Allocate memory for the array of
|
||||
|
|
|
|||
|
|
@ -698,6 +698,9 @@ static void populate_dot11f_tdls_ht_vht_cap(tpAniSirGlobal pMac,
|
|||
{
|
||||
uint8_t nss;
|
||||
uint32_t val;
|
||||
struct mlme_vht_capabilities_info vht_cap_info;
|
||||
|
||||
vht_cap_info = pMac->mlme_cfg->vht_caps.vht_cap_info;
|
||||
|
||||
if (IS_5G_CH(psessionEntry->currentOperChannel))
|
||||
nss = pMac->vdev_type_nss_5g.tdls;
|
||||
|
|
@ -736,7 +739,7 @@ static void populate_dot11f_tdls_ht_vht_cap(tpAniSirGlobal pMac,
|
|||
pe_debug("HT present: %hu, Chan Width: %hu",
|
||||
htCap->present, htCap->supportedChannelWidthSet);
|
||||
if (((psessionEntry->currentOperChannel <= SIR_11B_CHANNEL_END) &&
|
||||
pMac->roam.configParam.enableVhtFor24GHz) ||
|
||||
pMac->mlme_cfg->vht_caps.vht_cap_info.b24ghz_band) ||
|
||||
(psessionEntry->currentOperChannel >= SIR_11B_CHANNEL_END)) {
|
||||
if (IS_DOT11_MODE_VHT(selfDot11Mode) &&
|
||||
IS_FEATURE_SUPPORTED_BY_FW(DOT11AC)) {
|
||||
|
|
@ -758,18 +761,12 @@ static void populate_dot11f_tdls_ht_vht_cap(tpAniSirGlobal pMac,
|
|||
vhtCap->muBeamformeeCap = 0;
|
||||
vhtCap->muBeamformerCap = 0;
|
||||
|
||||
wlan_cfg_get_int(pMac, WNI_CFG_VHT_RX_MCS_MAP, &val);
|
||||
vhtCap->rxMCSMap = val;
|
||||
wlan_cfg_get_int(pMac,
|
||||
WNI_CFG_VHT_RX_HIGHEST_SUPPORTED_DATA_RATE,
|
||||
&val);
|
||||
vhtCap->rxHighSupDataRate = val;
|
||||
wlan_cfg_get_int(pMac, WNI_CFG_VHT_TX_MCS_MAP, &val);
|
||||
vhtCap->txMCSMap = val;
|
||||
wlan_cfg_get_int(pMac,
|
||||
WNI_CFG_VHT_TX_HIGHEST_SUPPORTED_DATA_RATE,
|
||||
&val);
|
||||
vhtCap->txSupDataRate = val;
|
||||
vhtCap->rxMCSMap = vht_cap_info.rx_mcs_map;
|
||||
|
||||
vhtCap->rxHighSupDataRate =
|
||||
vht_cap_info.rx_supp_data_rate;
|
||||
vhtCap->txMCSMap = vht_cap_info.tx_mcs_map;
|
||||
vhtCap->txSupDataRate = vht_cap_info.tx_supp_data_rate;
|
||||
if (nss == NSS_1x1_MODE) {
|
||||
vhtCap->txMCSMap |= DISABLE_NSS2_MCS;
|
||||
vhtCap->rxMCSMap |= DISABLE_NSS2_MCS;
|
||||
|
|
@ -1006,7 +1003,7 @@ static void populate_dotf_tdls_vht_aid(tpAniSirGlobal pMac, uint32_t selfDot11Mo
|
|||
tpPESession psessionEntry)
|
||||
{
|
||||
if (((psessionEntry->currentOperChannel <= SIR_11B_CHANNEL_END) &&
|
||||
pMac->roam.configParam.enableVhtFor24GHz) ||
|
||||
pMac->mlme_cfg->vht_caps.vht_cap_info.b24ghz_band) ||
|
||||
(psessionEntry->currentOperChannel >= SIR_11B_CHANNEL_END)) {
|
||||
if (IS_DOT11_MODE_VHT(selfDot11Mode) &&
|
||||
IS_FEATURE_SUPPORTED_BY_FW(DOT11AC)) {
|
||||
|
|
|
|||
|
|
@ -200,8 +200,6 @@ lim_extract_ap_capability(tpAniSirGlobal mac_ctx, uint8_t *p_ie,
|
|||
int8_t *local_constraint, tpPESession session)
|
||||
{
|
||||
tSirProbeRespBeacon *beacon_struct;
|
||||
uint32_t enable_txbf_20mhz;
|
||||
QDF_STATUS cfg_get_status = QDF_STATUS_E_FAILURE;
|
||||
uint8_t ap_bcon_ch_width;
|
||||
bool new_ch_width_dfn = false;
|
||||
tDot11fIEVHTOperation *vht_op;
|
||||
|
|
@ -267,11 +265,7 @@ lim_extract_ap_capability(tpAniSirGlobal mac_ctx, uint8_t *p_ie,
|
|||
|
||||
if (session->vhtCapabilityPresentInBeacon == 1 &&
|
||||
!session->htSupportedChannelWidthSet) {
|
||||
cfg_get_status = wlan_cfg_get_int(mac_ctx,
|
||||
WNI_CFG_VHT_ENABLE_TXBF_20MHZ,
|
||||
&enable_txbf_20mhz);
|
||||
if ((QDF_IS_STATUS_SUCCESS(cfg_get_status)) &&
|
||||
(false == enable_txbf_20mhz))
|
||||
if (mac_ctx->mlme_cfg->vht_caps.vht_cap_info.enable_txbf_20mhz)
|
||||
session->vht_config.su_beam_formee = 0;
|
||||
} else if (session->vhtCapabilityPresentInBeacon &&
|
||||
vht_op->chanWidth) {
|
||||
|
|
|
|||
|
|
@ -231,7 +231,7 @@ lim_send_probe_req_mgmt_frame(tpAniSirGlobal mac_ctx,
|
|||
* is false and dot11mode is 11ac set it to 11n.
|
||||
*/
|
||||
if (channel <= SIR_11B_CHANNEL_END &&
|
||||
(false == mac_ctx->roam.configParam.enableVhtFor24GHz) &&
|
||||
(false == mac_ctx->mlme_cfg->vht_caps.vht_cap_info.b24ghz_band) &&
|
||||
(WNI_CFG_DOT11_MODE_11AC == dot11mode ||
|
||||
WNI_CFG_DOT11_MODE_11AC_ONLY == dot11mode))
|
||||
dot11mode = WNI_CFG_DOT11_MODE_11N;
|
||||
|
|
@ -1856,7 +1856,7 @@ lim_send_assoc_req_mgmt_frame(tpAniSirGlobal mac_ctx,
|
|||
frm->vendor_vht_ie.sub_type =
|
||||
pe_session->vendor_specific_vht_ie_sub_type;
|
||||
frm->vendor_vht_ie.VHTCaps.present = 1;
|
||||
if (!mac_ctx->roam.configParam.enable_subfee_vendor_vhtie &&
|
||||
if (!mac_ctx->mlme_cfg->vht_caps.vht_cap_info.vendor_vhtie &&
|
||||
pe_session->vht_config.su_beam_formee) {
|
||||
pe_debug("Disable SU beamformee for vendor IE");
|
||||
pe_session->vht_config.su_beam_formee = 0;
|
||||
|
|
|
|||
|
|
@ -7955,7 +7955,7 @@ QDF_STATUS lim_populate_he_mcs_set(tpAniSirGlobal mac_ctx,
|
|||
}
|
||||
|
||||
pe_debug("enable2x2 - %d nss %d",
|
||||
mac_ctx->roam.configParam.enable2x2, nss);
|
||||
mac_ctx->mlme_cfg->vht_caps.vht_cap_info.enable2x2, nss);
|
||||
pe_debug("he_rx_lt_80 - 0x%x he_tx_lt_80 0x%x",
|
||||
rates->rx_he_mcs_map_lt_80, rates->tx_he_mcs_map_lt_80);
|
||||
pe_debug("he_rx_160 - 0x%x he_tx_160 0x%x",
|
||||
|
|
|
|||
|
|
@ -800,20 +800,6 @@ static void lim_log_vht_operation(tpAniSirGlobal pMac,
|
|||
#endif /* DUMP_MGMT_CNTNTS */
|
||||
}
|
||||
|
||||
static void lim_log_vht_ext_bss_load(tpAniSirGlobal pMac,
|
||||
tDot11fIEVHTExtBssLoad *pDot11f)
|
||||
{
|
||||
#ifdef DUMP_MGMT_CNTNTS
|
||||
pe_debug("muMIMOCapStaCount: %d",
|
||||
pDot11f->muMIMOCapStaCount);
|
||||
pe_debug("ssUnderUtil: %d", pDot11f->ssUnderUtil);
|
||||
pe_debug("FortyMHzUtil: %d", pDot11f->FortyMHzUtil);
|
||||
pe_debug("EightyMHzUtil: %d", pDot11f->EightyMHzUtil);
|
||||
pe_debug("OneSixtyMHzUtil: %d",
|
||||
pDot11f->OneSixtyMHzUtil);
|
||||
#endif /* DUMP_MGMT_CNTNTS */
|
||||
}
|
||||
|
||||
static void lim_log_operating_mode(tpAniSirGlobal pMac,
|
||||
tDot11fIEOperatingMode *pDot11f)
|
||||
{
|
||||
|
|
@ -852,17 +838,21 @@ QDF_STATUS
|
|||
populate_dot11f_vht_caps(tpAniSirGlobal pMac,
|
||||
tpPESession psessionEntry, tDot11fIEVHTCaps *pDot11f)
|
||||
{
|
||||
QDF_STATUS nStatus;
|
||||
uint32_t nCfgValue = 0;
|
||||
struct mlme_vht_capabilities_info vht_cap_info;
|
||||
|
||||
if (!(pMac->mlme_cfg)) {
|
||||
pe_err("invalid mlme cfg");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
vht_cap_info = pMac->mlme_cfg->vht_caps.vht_cap_info;
|
||||
|
||||
pDot11f->present = 1;
|
||||
|
||||
CFG_GET_INT(nStatus, pMac, WNI_CFG_VHT_MAX_MPDU_LENGTH, nCfgValue);
|
||||
nCfgValue = vht_cap_info.ampdu_len;
|
||||
pDot11f->maxMPDULen = (nCfgValue & 0x0003);
|
||||
|
||||
nCfgValue = 0;
|
||||
CFG_GET_INT(nStatus, pMac, WNI_CFG_VHT_SUPPORTED_CHAN_WIDTH_SET,
|
||||
nCfgValue);
|
||||
nCfgValue = vht_cap_info.supp_chan_width;
|
||||
pDot11f->supportedChannelWidthSet = (nCfgValue & 0x0003);
|
||||
|
||||
nCfgValue = 0;
|
||||
|
|
@ -922,118 +912,71 @@ populate_dot11f_vht_caps(tpAniSirGlobal pMac,
|
|||
pDot11f->vhtLinkAdaptCap =
|
||||
psessionEntry->vht_config.vht_link_adapt;
|
||||
} else {
|
||||
CFG_GET_INT(nStatus, pMac, WNI_CFG_VHT_LDPC_CODING_CAP,
|
||||
nCfgValue);
|
||||
nCfgValue = vht_cap_info.ldpc_coding_cap;
|
||||
pDot11f->ldpcCodingCap = (nCfgValue & 0x0001);
|
||||
|
||||
nCfgValue = 0;
|
||||
CFG_GET_INT(nStatus, pMac, WNI_CFG_VHT_SHORT_GI_80MHZ,
|
||||
nCfgValue);
|
||||
nCfgValue = vht_cap_info.short_gi_80mhz;
|
||||
pDot11f->shortGI80MHz = (nCfgValue & 0x0001);
|
||||
|
||||
nCfgValue = 0;
|
||||
CFG_GET_INT(nStatus, pMac,
|
||||
WNI_CFG_VHT_SHORT_GI_160_AND_80_PLUS_80MHZ,
|
||||
nCfgValue);
|
||||
nCfgValue = vht_cap_info.short_gi_160mhz;
|
||||
pDot11f->shortGI160and80plus80MHz = (nCfgValue & 0x0001);
|
||||
|
||||
nCfgValue = 0;
|
||||
CFG_GET_INT(nStatus, pMac, WNI_CFG_VHT_TXSTBC, nCfgValue);
|
||||
nCfgValue = vht_cap_info.tx_stbc;
|
||||
pDot11f->txSTBC = (nCfgValue & 0x0001);
|
||||
|
||||
nCfgValue = 0;
|
||||
CFG_GET_INT(nStatus, pMac, WNI_CFG_VHT_RXSTBC, nCfgValue);
|
||||
nCfgValue = vht_cap_info.rx_stbc;
|
||||
pDot11f->rxSTBC = (nCfgValue & 0x0007);
|
||||
|
||||
nCfgValue = 0;
|
||||
CFG_GET_INT(nStatus, pMac,
|
||||
WNI_CFG_VHT_SU_BEAMFORMEE_CAP, nCfgValue);
|
||||
nCfgValue = vht_cap_info.su_bformee;
|
||||
pDot11f->suBeamformeeCap = (nCfgValue & 0x0001);
|
||||
|
||||
nCfgValue = 0;
|
||||
CFG_GET_INT(nStatus, pMac,
|
||||
WNI_CFG_VHT_MU_BEAMFORMEE_CAP, nCfgValue);
|
||||
nCfgValue = vht_cap_info.enable_mu_bformee;
|
||||
pDot11f->muBeamformeeCap = (nCfgValue & 0x0001);
|
||||
|
||||
nCfgValue = 0;
|
||||
CFG_GET_INT(nStatus, pMac, WNI_CFG_VHT_SU_BEAMFORMER_CAP,
|
||||
nCfgValue);
|
||||
nCfgValue = vht_cap_info.su_bformer;
|
||||
pDot11f->suBeamFormerCap = (nCfgValue & 0x0001);
|
||||
|
||||
nCfgValue = 0;
|
||||
CFG_GET_INT(nStatus, pMac,
|
||||
WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED,
|
||||
nCfgValue);
|
||||
nCfgValue = vht_cap_info.tx_bfee_ant_supp;
|
||||
pDot11f->csnofBeamformerAntSup = (nCfgValue & 0x0007);
|
||||
|
||||
nCfgValue = 0;
|
||||
CFG_GET_INT(nStatus, pMac,
|
||||
WNI_CFG_VHT_TXOP_PS,
|
||||
nCfgValue);
|
||||
nCfgValue = vht_cap_info.txop_ps;
|
||||
pDot11f->vhtTXOPPS = (nCfgValue & 0x0001);
|
||||
|
||||
nCfgValue = 0;
|
||||
CFG_GET_INT(nStatus, pMac,
|
||||
WNI_CFG_VHT_NUM_SOUNDING_DIMENSIONS,
|
||||
nCfgValue);
|
||||
nCfgValue = vht_cap_info.num_soundingdim;
|
||||
pDot11f->numSoundingDim = (nCfgValue & 0x0007);
|
||||
|
||||
nCfgValue = 0;
|
||||
CFG_GET_INT(nStatus, pMac,
|
||||
WNI_CFG_VHT_HTC_VHTC_CAP,
|
||||
nCfgValue);
|
||||
nCfgValue = vht_cap_info.htc_vhtc;
|
||||
pDot11f->htcVHTCap = (nCfgValue & 0x0001);
|
||||
|
||||
nCfgValue = 0;
|
||||
CFG_GET_INT(nStatus, pMac,
|
||||
WNI_CFG_VHT_RX_ANT_PATTERN,
|
||||
nCfgValue);
|
||||
pDot11f->rxAntPattern = nCfgValue;
|
||||
pDot11f->rxAntPattern = vht_cap_info.rx_antpattern;
|
||||
|
||||
nCfgValue = 0;
|
||||
CFG_GET_INT(nStatus, pMac,
|
||||
WNI_CFG_VHT_TX_ANT_PATTERN,
|
||||
nCfgValue);
|
||||
pDot11f->txAntPattern = nCfgValue;
|
||||
pDot11f->txAntPattern = vht_cap_info.tx_antpattern;
|
||||
|
||||
nCfgValue = 0;
|
||||
CFG_GET_INT(nStatus, pMac,
|
||||
WNI_CFG_VHT_AMPDU_LEN_EXPONENT,
|
||||
nCfgValue);
|
||||
nCfgValue = vht_cap_info.ampdu_len_exponent;
|
||||
pDot11f->maxAMPDULenExp = (nCfgValue & 0x0007);
|
||||
|
||||
nCfgValue = 0;
|
||||
CFG_GET_INT(nStatus, pMac,
|
||||
WNI_CFG_VHT_LINK_ADAPTATION_CAP,
|
||||
nCfgValue);
|
||||
nCfgValue = vht_cap_info.link_adap_cap;
|
||||
pDot11f->vhtLinkAdaptCap = (nCfgValue & 0x0003);
|
||||
|
||||
}
|
||||
|
||||
nCfgValue = 0;
|
||||
CFG_GET_INT(nStatus, pMac, WNI_CFG_VHT_MU_BEAMFORMER_CAP, nCfgValue);
|
||||
nCfgValue = vht_cap_info.mu_bformer;
|
||||
pDot11f->muBeamformerCap = (nCfgValue & 0x0001);
|
||||
|
||||
pDot11f->reserved1 = 0;
|
||||
|
||||
nCfgValue = 0;
|
||||
CFG_GET_INT(nStatus, pMac, WNI_CFG_VHT_RX_MCS_MAP, nCfgValue);
|
||||
nCfgValue = vht_cap_info.rx_mcs_map;
|
||||
pDot11f->rxMCSMap = (nCfgValue & 0x0000FFFF);
|
||||
|
||||
nCfgValue = 0;
|
||||
CFG_GET_INT(nStatus, pMac, WNI_CFG_VHT_RX_HIGHEST_SUPPORTED_DATA_RATE,
|
||||
nCfgValue);
|
||||
nCfgValue = vht_cap_info.rx_supp_data_rate;
|
||||
pDot11f->rxHighSupDataRate = (nCfgValue & 0x00001FFF);
|
||||
|
||||
pDot11f->reserved2 = 0;
|
||||
|
||||
nCfgValue = 0;
|
||||
CFG_GET_INT(nStatus, pMac, WNI_CFG_VHT_TX_MCS_MAP, nCfgValue);
|
||||
nCfgValue = vht_cap_info.tx_mcs_map;
|
||||
pDot11f->txMCSMap = (nCfgValue & 0x0000FFFF);
|
||||
|
||||
nCfgValue = 0;
|
||||
CFG_GET_INT(nStatus, pMac, WNI_CFG_VHT_TX_HIGHEST_SUPPORTED_DATA_RATE,
|
||||
nCfgValue);
|
||||
nCfgValue = vht_cap_info.tx_supp_data_rate;
|
||||
pDot11f->txSupDataRate = (nCfgValue & 0x00001FFF);
|
||||
|
||||
pDot11f->reserved3 = 0;
|
||||
|
|
@ -1046,7 +989,7 @@ populate_dot11f_vht_caps(tpAniSirGlobal pMac,
|
|||
pDot11f->rxHighSupDataRate =
|
||||
VHT_RX_HIGHEST_SUPPORTED_DATA_RATE_1_1;
|
||||
if (!psessionEntry->ch_width &&
|
||||
!pMac->roam.configParam.enable_vht20_mcs9 &&
|
||||
!pMac->mlme_cfg->vht_caps.vht_cap_info.enable_vht20_mcs9 &&
|
||||
((pDot11f->txMCSMap & VHT_1x1_MCS_MASK) ==
|
||||
VHT_1x1_MCS9_MAP)) {
|
||||
DISABLE_VHT_MCS_9(pDot11f->txMCSMap,
|
||||
|
|
@ -1056,7 +999,7 @@ populate_dot11f_vht_caps(tpAniSirGlobal pMac,
|
|||
}
|
||||
} else {
|
||||
if (!psessionEntry->ch_width &&
|
||||
!pMac->roam.configParam.enable_vht20_mcs9 &&
|
||||
!pMac->mlme_cfg->vht_caps.vht_cap_info.enable_vht20_mcs9 &&
|
||||
((pDot11f->txMCSMap & VHT_2x2_MCS_MASK) ==
|
||||
VHT_2x2_MCS9_MAP)) {
|
||||
DISABLE_VHT_MCS_9(pDot11f->txMCSMap,
|
||||
|
|
@ -1075,9 +1018,6 @@ populate_dot11f_vht_operation(tpAniSirGlobal pMac,
|
|||
tpPESession psessionEntry,
|
||||
tDot11fIEVHTOperation *pDot11f)
|
||||
{
|
||||
QDF_STATUS nStatus;
|
||||
uint32_t nCfgValue = 0;
|
||||
|
||||
pDot11f->present = 1;
|
||||
|
||||
if (psessionEntry->ch_width > CH_WIDTH_40MHZ) {
|
||||
|
|
@ -1096,9 +1036,8 @@ populate_dot11f_vht_operation(tpAniSirGlobal pMac,
|
|||
pDot11f->chanCenterFreqSeg2 = 0;
|
||||
}
|
||||
|
||||
nCfgValue = 0;
|
||||
CFG_GET_INT(nStatus, pMac, WNI_CFG_VHT_BASIC_MCS_SET, nCfgValue);
|
||||
pDot11f->basicMCSSet = (uint16_t) nCfgValue;
|
||||
pDot11f->basicMCSSet =
|
||||
(uint16_t)pMac->mlme_cfg->vht_caps.vht_cap_info.basic_mcs_set;
|
||||
|
||||
lim_log_vht_operation(pMac, pDot11f);
|
||||
|
||||
|
|
@ -1106,40 +1045,6 @@ populate_dot11f_vht_operation(tpAniSirGlobal pMac,
|
|||
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
populate_dot11f_vht_ext_bss_load(tpAniSirGlobal pMac,
|
||||
tDot11fIEVHTExtBssLoad *pDot11f)
|
||||
{
|
||||
QDF_STATUS nStatus;
|
||||
uint32_t nCfgValue = 0;
|
||||
|
||||
pDot11f->present = 1;
|
||||
|
||||
CFG_GET_INT(nStatus, pMac, WNI_CFG_VHT_MU_MIMO_CAP_STA_COUNT,
|
||||
nCfgValue);
|
||||
pDot11f->muMIMOCapStaCount = (uint8_t) nCfgValue;
|
||||
|
||||
nCfgValue = 0;
|
||||
CFG_GET_INT(nStatus, pMac, WNI_CFG_VHT_SS_UNDER_UTIL, nCfgValue);
|
||||
pDot11f->ssUnderUtil = (uint8_t) nCfgValue;
|
||||
|
||||
nCfgValue = 0;
|
||||
CFG_GET_INT(nStatus, pMac, WNI_CFG_VHT_40MHZ_UTILIZATION, nCfgValue);
|
||||
pDot11f->FortyMHzUtil = (uint8_t) nCfgValue;
|
||||
|
||||
nCfgValue = 0;
|
||||
CFG_GET_INT(nStatus, pMac, WNI_CFG_VHT_80MHZ_UTILIZATION, nCfgValue);
|
||||
pDot11f->EightyMHzUtil = (uint8_t) nCfgValue;
|
||||
|
||||
nCfgValue = 0;
|
||||
CFG_GET_INT(nStatus, pMac, WNI_CFG_VHT_160MHZ_UTILIZATION, nCfgValue);
|
||||
pDot11f->EightyMHzUtil = (uint8_t) nCfgValue;
|
||||
|
||||
lim_log_vht_ext_bss_load(pMac, pDot11f);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
populate_dot11f_ext_cap(tpAniSirGlobal pMac,
|
||||
bool isVHTEnabled, tDot11fIEExtCap *pDot11f,
|
||||
|
|
|
|||
|
|
@ -1136,16 +1136,8 @@ typedef struct tagCsrConfigParam {
|
|||
* request from HDD
|
||||
*/
|
||||
bool fScanTwice;
|
||||
uint32_t nVhtChannelWidth;
|
||||
uint8_t enableTxBF;
|
||||
bool enable_subfee_vendor_vhtie;
|
||||
uint8_t enable_txbf_sap_mode;
|
||||
uint8_t enable2x2;
|
||||
bool enableVhtFor24GHz;
|
||||
bool vendor_vht_sap;
|
||||
uint8_t enableMuBformee;
|
||||
uint8_t enableVhtpAid;
|
||||
uint8_t enableVhtGid;
|
||||
uint8_t enableAmpduPs;
|
||||
uint8_t enableHtSmps;
|
||||
uint8_t htSmps;
|
||||
|
|
@ -1165,7 +1157,6 @@ typedef struct tagCsrConfigParam {
|
|||
uint8_t enable_tx_ldpc;
|
||||
uint8_t enable_rx_ldpc;
|
||||
uint8_t disable_high_ht_mcs_2x2;
|
||||
bool enable_vht20_mcs9;
|
||||
uint8_t max_amsdu_num;
|
||||
uint32_t ho_delay_for_rx;
|
||||
uint32_t min_delay_btw_roam_scans;
|
||||
|
|
|
|||
|
|
@ -488,13 +488,6 @@ struct csr_config {
|
|||
/* To enable scanning 2g channels twice on single scan req from HDD */
|
||||
bool fScanTwice;
|
||||
uint32_t nVhtChannelWidth;
|
||||
bool enable_subfee_vendor_vhtie;
|
||||
uint8_t enable_txbf_sap_mode;
|
||||
bool enable_vht20_mcs9;
|
||||
uint8_t enable2x2;
|
||||
bool enableVhtFor24GHz;
|
||||
uint8_t enableVhtpAid;
|
||||
uint8_t enableVhtGid;
|
||||
uint8_t enableHtSmps;
|
||||
uint8_t htSmps;
|
||||
bool send_smps_action;
|
||||
|
|
|
|||
|
|
@ -12743,11 +12743,14 @@ QDF_STATUS sme_update_nss(tHalHandle h_hal, uint8_t nss)
|
|||
uint32_t i;
|
||||
struct mlme_ht_capabilities_info *ht_cap_info;
|
||||
struct csr_roam_session *csr_session;
|
||||
struct mlme_vht_capabilities_info vht_cap_info;
|
||||
|
||||
vht_cap_info = mac_ctx->mlme_cfg->vht_caps.vht_cap_info;
|
||||
|
||||
status = sme_acquire_global_lock(&mac_ctx->sme);
|
||||
|
||||
if (QDF_STATUS_SUCCESS == status) {
|
||||
mac_ctx->roam.configParam.enable2x2 = (nss == 1) ? 0 : 1;
|
||||
vht_cap_info.enable2x2 = (nss == 1) ? 0 : 1;
|
||||
|
||||
/* get the HT capability info*/
|
||||
ht_cap_info = &mac_ctx->mlme_cfg->ht_caps.ht_cap_info;
|
||||
|
|
@ -12782,14 +12785,9 @@ void sme_update_user_configured_nss(tHalHandle hal, uint8_t nss)
|
|||
int sme_update_tx_bfee_supp(tHalHandle hal, uint8_t session_id,
|
||||
uint8_t cfg_val)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
tpAniSirGlobal mac_ctx = PMAC_STRUCT(hal);
|
||||
|
||||
status = sme_cfg_set_int(hal, WNI_CFG_VHT_SU_BEAMFORMEE_CAP,
|
||||
cfg_val);
|
||||
if (status != QDF_STATUS_SUCCESS) {
|
||||
sme_err("Failed to set SU BFEE CFG");
|
||||
return -EFAULT;
|
||||
}
|
||||
mac_ctx->mlme_cfg->vht_caps.vht_cap_info.su_bformee = cfg_val;
|
||||
|
||||
return sme_update_he_tx_bfee_supp(hal, session_id, cfg_val);
|
||||
}
|
||||
|
|
@ -12798,7 +12796,6 @@ int sme_update_tx_bfee_nsts(mac_handle_t hal, uint8_t session_id,
|
|||
uint8_t usr_cfg_val, uint8_t nsts_val)
|
||||
{
|
||||
tpAniSirGlobal mac_ctx = PMAC_STRUCT(hal);
|
||||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||
uint8_t nsts_set_val;
|
||||
|
||||
mac_ctx->usr_cfg_tx_bfee_nsts = usr_cfg_val;
|
||||
|
|
@ -12806,13 +12803,8 @@ int sme_update_tx_bfee_nsts(mac_handle_t hal, uint8_t session_id,
|
|||
nsts_set_val = usr_cfg_val;
|
||||
else
|
||||
nsts_set_val = nsts_val;
|
||||
status = sme_cfg_set_int(hal,
|
||||
WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED,
|
||||
nsts_set_val);
|
||||
if (status != QDF_STATUS_SUCCESS) {
|
||||
sme_err("Failed to set SU BFEE NSTS CFG");
|
||||
return -EFAULT;
|
||||
}
|
||||
mac_ctx->mlme_cfg->vht_caps.vht_cap_info.tx_bfee_ant_supp
|
||||
= nsts_set_val;
|
||||
|
||||
if (usr_cfg_val)
|
||||
sme_set_he_tx_bf_cbf_rates(session_id);
|
||||
|
|
@ -12899,7 +12891,7 @@ int sme_update_he_mcs(tHalHandle hal, uint8_t session_id, uint16_t he_mcs)
|
|||
case HE_80_MCS0_7:
|
||||
case HE_80_MCS0_9:
|
||||
case HE_80_MCS0_11:
|
||||
if (mac_ctx->roam.configParam.enable2x2) {
|
||||
if (mac_ctx->mlme_cfg->vht_caps.vht_cap_info.enable2x2) {
|
||||
mcs_map = HE_SET_MCS_4_NSS(mcs_map, mcs_val, 1);
|
||||
mcs_map = HE_SET_MCS_4_NSS(mcs_map, mcs_val, 2);
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -1197,7 +1197,7 @@ QDF_STATUS csr_update_channel_list(tpAniSirGlobal pMac)
|
|||
(pMac->roam.configParam.uCfgDot11Mode ==
|
||||
eCSR_CFG_DOT11_MODE_11AC_ONLY)) {
|
||||
pChanList->vht_en = true;
|
||||
if (pMac->roam.configParam.enableVhtFor24GHz)
|
||||
if (pMac->mlme_cfg->vht_caps.vht_cap_info.b24ghz_band)
|
||||
pChanList->vht_24_en = true;
|
||||
}
|
||||
if ((pMac->roam.configParam.uCfgDot11Mode ==
|
||||
|
|
@ -3011,20 +3011,6 @@ QDF_STATUS csr_change_default_config_param(tpAniSirGlobal pMac,
|
|||
/* Remove this code once SLM_Sessionization is supported */
|
||||
/* BMPS_WORKAROUND_NOT_NEEDED */
|
||||
pMac->roam.configParam.doBMPSWorkaround = 0;
|
||||
|
||||
pMac->roam.configParam.nVhtChannelWidth =
|
||||
pParam->nVhtChannelWidth;
|
||||
pMac->roam.configParam.enable_subfee_vendor_vhtie =
|
||||
pParam->enable_subfee_vendor_vhtie;
|
||||
pMac->roam.configParam.enable_txbf_sap_mode =
|
||||
pParam->enable_txbf_sap_mode;
|
||||
pMac->roam.configParam.enable_vht20_mcs9 =
|
||||
pParam->enable_vht20_mcs9;
|
||||
pMac->roam.configParam.enable2x2 = pParam->enable2x2;
|
||||
pMac->roam.configParam.enableVhtFor24GHz =
|
||||
pParam->enableVhtFor24GHz;
|
||||
pMac->roam.configParam.enableVhtpAid = pParam->enableVhtpAid;
|
||||
pMac->roam.configParam.enableVhtGid = pParam->enableVhtGid;
|
||||
pMac->roam.configParam.enableHtSmps = pParam->enableHtSmps;
|
||||
pMac->roam.configParam.htSmps = pParam->htSmps;
|
||||
pMac->roam.configParam.send_smps_action =
|
||||
|
|
@ -3236,14 +3222,6 @@ QDF_STATUS csr_get_config_param(tpAniSirGlobal pMac, tCsrConfigParam *pParam)
|
|||
qdf_mem_copy(&pParam->neighborRoamConfig,
|
||||
&cfg_params->neighborRoamConfig,
|
||||
sizeof(tCsrNeighborRoamConfigParams));
|
||||
pParam->nVhtChannelWidth = cfg_params->nVhtChannelWidth;
|
||||
pParam->enable_subfee_vendor_vhtie =
|
||||
cfg_params->enable_subfee_vendor_vhtie;
|
||||
pParam->enable_txbf_sap_mode =
|
||||
cfg_params->enable_txbf_sap_mode;
|
||||
pParam->enable_vht20_mcs9 = cfg_params->enable_vht20_mcs9;
|
||||
pParam->enableVhtFor24GHz = cfg_params->enableVhtFor24GHz;
|
||||
pParam->enable2x2 = cfg_params->enable2x2;
|
||||
pParam->isFastTransitionEnabled = cfg_params->isFastTransitionEnabled;
|
||||
pParam->RoamRssiDiff = cfg_params->RoamRssiDiff;
|
||||
pParam->nRoamPrefer5GHz = cfg_params->nRoamPrefer5GHz;
|
||||
|
|
@ -13106,7 +13084,7 @@ csr_compute_mode_and_band(tpAniSirGlobal mac_ctx,
|
|||
enum band_info *band,
|
||||
uint8_t opr_ch)
|
||||
{
|
||||
bool vht_24_ghz = mac_ctx->roam.configParam.enableVhtFor24GHz;
|
||||
bool vht_24_ghz = mac_ctx->mlme_cfg->vht_caps.vht_cap_info.b24ghz_band;
|
||||
|
||||
switch (mac_ctx->roam.configParam.uCfgDot11Mode) {
|
||||
case eCSR_CFG_DOT11_MODE_11A:
|
||||
|
|
@ -13305,7 +13283,7 @@ enum csr_cfgdot11mode curr_mode = mac_ctx->roam.configParam.uCfgDot11Mode;
|
|||
}
|
||||
|
||||
if (IS_24G_CH(opr_chn) &&
|
||||
(false == mac_ctx->roam.configParam.enableVhtFor24GHz) &&
|
||||
(false == mac_ctx->mlme_cfg->vht_caps.vht_cap_info.b24ghz_band) &&
|
||||
(eCSR_CFG_DOT11_MODE_11AC == cfg_dot11_mode ||
|
||||
eCSR_CFG_DOT11_MODE_11AC_ONLY == cfg_dot11_mode))
|
||||
cfg_dot11_mode = eCSR_CFG_DOT11_MODE_11N;
|
||||
|
|
@ -15303,6 +15281,7 @@ QDF_STATUS csr_send_join_req_msg(tpAniSirGlobal pMac, uint32_t sessionId,
|
|||
struct vdev_type_nss *vdev_type_nss;
|
||||
struct action_oui_search_attr vendor_ap_search_attr;
|
||||
tDot11fIEVHTCaps *vht_caps = NULL;
|
||||
bool bvalue = 0;
|
||||
|
||||
if (!pSession) {
|
||||
sme_err("session %d not found", sessionId);
|
||||
|
|
@ -15414,7 +15393,7 @@ QDF_STATUS csr_send_join_req_msg(tpAniSirGlobal pMac, uint32_t sessionId,
|
|||
pSession->bssParams.
|
||||
uCfgDot11Mode);
|
||||
if (pBssDescription->channelId <= 14
|
||||
&& false == pMac->roam.configParam.enableVhtFor24GHz
|
||||
&& false == pMac->mlme_cfg->vht_caps.vht_cap_info.b24ghz_band
|
||||
&& WNI_CFG_DOT11_MODE_11AC == ucDot11Mode) {
|
||||
/* Need to disable VHT operation in 2.4 GHz band */
|
||||
ucDot11Mode = WNI_CFG_DOT11_MODE_11N;
|
||||
|
|
@ -15440,7 +15419,7 @@ QDF_STATUS csr_send_join_req_msg(tpAniSirGlobal pMac, uint32_t sessionId,
|
|||
pSession->vdev_nss = pSession->nss;
|
||||
}
|
||||
|
||||
if (!pMac->roam.configParam.enable2x2)
|
||||
if (!pMac->mlme_cfg->vht_caps.vht_cap_info.enable2x2)
|
||||
pSession->nss = 1;
|
||||
|
||||
if (pSession->nss == 1)
|
||||
|
|
@ -15947,15 +15926,8 @@ QDF_STATUS csr_send_join_req_msg(tpAniSirGlobal pMac, uint32_t sessionId,
|
|||
channelId);
|
||||
}
|
||||
|
||||
if (wlan_cfg_get_int(pMac, WNI_CFG_VHT_SU_BEAMFORMEE_CAP,
|
||||
&value) != QDF_STATUS_SUCCESS)
|
||||
QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR,
|
||||
("Failed to get SU beamformee capability"));
|
||||
if (wlan_cfg_get_int(pMac,
|
||||
WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED,
|
||||
&value1) != QDF_STATUS_SUCCESS)
|
||||
QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR,
|
||||
("Failed to get CSN beamformee capability"));
|
||||
value = pMac->mlme_cfg->vht_caps.vht_cap_info.su_bformee;
|
||||
value1 = pMac->mlme_cfg->vht_caps.vht_cap_info.tx_bfee_ant_supp;
|
||||
|
||||
csr_join_req->vht_config.su_beam_formee = value;
|
||||
|
||||
|
|
@ -15983,33 +15955,27 @@ QDF_STATUS csr_send_join_req_msg(tpAniSirGlobal pMac, uint32_t sessionId,
|
|||
}
|
||||
csr_join_req->vht_config.csnof_beamformer_antSup = txBFCsnValue;
|
||||
|
||||
if (wlan_cfg_get_int(pMac,
|
||||
WNI_CFG_VHT_SU_BEAMFORMER_CAP, &value)
|
||||
!= QDF_STATUS_SUCCESS)
|
||||
sme_err("Failed to get SU beamformer capability");
|
||||
|
||||
bvalue = pMac->mlme_cfg->vht_caps.vht_cap_info.su_bformer;
|
||||
/*
|
||||
* Set SU Bformer only if SU Bformer is enabled in INI
|
||||
* and AP is SU Bformee capable
|
||||
*/
|
||||
if (value && !((IS_BSS_VHT_CAPABLE(pIes->VHTCaps) &&
|
||||
if (bvalue && !((IS_BSS_VHT_CAPABLE(pIes->VHTCaps) &&
|
||||
pIes->VHTCaps.suBeamformeeCap) ||
|
||||
(IS_BSS_VHT_CAPABLE(
|
||||
pIes->vendor_vht_ie.VHTCaps)
|
||||
&& pIes->vendor_vht_ie.VHTCaps.
|
||||
suBeamformeeCap)))
|
||||
value = 0;
|
||||
bvalue = 0;
|
||||
|
||||
csr_join_req->vht_config.su_beam_former = value;
|
||||
csr_join_req->vht_config.su_beam_former = bvalue;
|
||||
|
||||
/* Set num soundingdim value to 0 if SU Bformer is disabled */
|
||||
if (!csr_join_req->vht_config.su_beam_former)
|
||||
csr_join_req->vht_config.num_soundingdim = 0;
|
||||
|
||||
if (wlan_cfg_get_int(pMac,
|
||||
WNI_CFG_VHT_MU_BEAMFORMEE_CAP, &value)
|
||||
!= QDF_STATUS_SUCCESS)
|
||||
sme_err("Failed to get CSN beamformee capability");
|
||||
value =
|
||||
pMac->mlme_cfg->vht_caps.vht_cap_info.enable_mu_bformee;
|
||||
/*
|
||||
* Set MU Bformee only if SU Bformee is enabled and
|
||||
* MU Bformee is enabled in INI
|
||||
|
|
@ -16021,10 +15987,10 @@ QDF_STATUS csr_send_join_req_msg(tpAniSirGlobal pMac, uint32_t sessionId,
|
|||
csr_join_req->vht_config.mu_beam_formee = 0;
|
||||
|
||||
csr_join_req->enableVhtpAid =
|
||||
(uint8_t) pMac->roam.configParam.enableVhtpAid;
|
||||
pMac->mlme_cfg->vht_caps.vht_cap_info.enable_gid;
|
||||
|
||||
csr_join_req->enableVhtGid =
|
||||
(uint8_t) pMac->roam.configParam.enableVhtGid;
|
||||
pMac->mlme_cfg->vht_caps.vht_cap_info.enable_gid;
|
||||
|
||||
csr_join_req->enableAmpduPs =
|
||||
(uint8_t)pMac->mlme_cfg->feature_flags.enable_ampdu;
|
||||
|
|
@ -16820,18 +16786,11 @@ QDF_STATUS csr_send_mb_start_bss_req_msg(tpAniSirGlobal pMac, uint32_t
|
|||
&pSession->htConfig,
|
||||
sizeof(tSirHTConfig));
|
||||
|
||||
if (wlan_cfg_get_int(pMac, WNI_CFG_VHT_SU_BEAMFORMEE_CAP, &value)
|
||||
!= QDF_STATUS_SUCCESS)
|
||||
QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR,
|
||||
"could not get SU beam formee capability");
|
||||
value = pMac->mlme_cfg->vht_caps.vht_cap_info.su_bformee;
|
||||
pMsg->vht_config.su_beam_formee =
|
||||
(uint8_t)value &&
|
||||
(uint8_t)pMac->roam.configParam.enable_txbf_sap_mode;
|
||||
if (wlan_cfg_get_int(pMac,
|
||||
WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED,
|
||||
&value) != QDF_STATUS_SUCCESS)
|
||||
QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR,
|
||||
("Failed to get CSN beamformee capability"));
|
||||
(uint8_t)pMac->mlme_cfg->vht_caps.vht_cap_info.tx_bfee_sap;
|
||||
value = pMac->mlme_cfg->vht_caps.vht_cap_info.tx_bfee_ant_supp;
|
||||
pMsg->vht_config.csnof_beamformer_antSup = (uint8_t)value;
|
||||
pMsg->vht_config.mu_beam_formee = 0;
|
||||
|
||||
|
|
@ -17134,8 +17093,14 @@ QDF_STATUS csr_roam_open_session(tpAniSirGlobal mac_ctx,
|
|||
QDF_STATUS status;
|
||||
uint32_t existing_session_id;
|
||||
struct mlme_ht_capabilities_info *ht_cap_info;
|
||||
uint32_t nCfgValue;
|
||||
struct csr_roam_session *session;
|
||||
struct mlme_vht_capabilities_info vht_cap_info;
|
||||
|
||||
if (!(mac_ctx->mlme_cfg)) {
|
||||
pe_err("invalid mlme cfg");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
vht_cap_info = mac_ctx->mlme_cfg->vht_caps.vht_cap_info;
|
||||
|
||||
/* check to see if the mac address already belongs to a session */
|
||||
status = csr_roam_get_session_id_from_bssid(mac_ctx,
|
||||
|
|
@ -17211,81 +17176,27 @@ QDF_STATUS csr_roam_open_session(tpAniSirGlobal mac_ctx,
|
|||
}
|
||||
#endif /* FEATURE_WLAN_BTAMP_UT_RF */
|
||||
|
||||
nCfgValue = 0;
|
||||
wlan_cfg_get_int(mac_ctx, WNI_CFG_VHT_MAX_MPDU_LENGTH, &nCfgValue);
|
||||
session->vht_config.max_mpdu_len = nCfgValue;
|
||||
session->vht_config.max_mpdu_len = vht_cap_info.ampdu_len;
|
||||
session->vht_config.supported_channel_widthset =
|
||||
vht_cap_info.supp_chan_width;
|
||||
session->vht_config.ldpc_coding = vht_cap_info.ldpc_coding_cap;
|
||||
session->vht_config.shortgi80 = vht_cap_info.short_gi_80mhz;
|
||||
session->vht_config.shortgi160and80plus80 = vht_cap_info.short_gi_160mhz;
|
||||
session->vht_config.tx_stbc = vht_cap_info.tx_stbc;
|
||||
session->vht_config.rx_stbc = vht_cap_info.rx_stbc;
|
||||
session->vht_config.su_beam_former = vht_cap_info.su_bformer;
|
||||
session->vht_config.su_beam_formee = vht_cap_info.su_bformee;
|
||||
session->vht_config.csnof_beamformer_antSup =
|
||||
vht_cap_info.tx_bfee_ant_supp;
|
||||
session->vht_config.num_soundingdim = vht_cap_info.num_soundingdim;
|
||||
session->vht_config.mu_beam_former = vht_cap_info.mu_bformer;
|
||||
session->vht_config.mu_beam_formee = vht_cap_info.enable_mu_bformee;
|
||||
session->vht_config.vht_txops = vht_cap_info.txop_ps;
|
||||
session->vht_config.htc_vhtcap = vht_cap_info.htc_vhtc;
|
||||
session->vht_config.rx_antpattern = vht_cap_info.rx_antpattern;
|
||||
session->vht_config.tx_antpattern = vht_cap_info.tx_antpattern;
|
||||
|
||||
nCfgValue = 0;
|
||||
wlan_cfg_get_int(mac_ctx, WNI_CFG_VHT_SUPPORTED_CHAN_WIDTH_SET,
|
||||
&nCfgValue);
|
||||
session->vht_config.supported_channel_widthset = nCfgValue;
|
||||
|
||||
nCfgValue = 0;
|
||||
wlan_cfg_get_int(mac_ctx, WNI_CFG_VHT_LDPC_CODING_CAP, &nCfgValue);
|
||||
session->vht_config.ldpc_coding = nCfgValue;
|
||||
|
||||
nCfgValue = 0;
|
||||
wlan_cfg_get_int(mac_ctx, WNI_CFG_VHT_SHORT_GI_80MHZ, &nCfgValue);
|
||||
session->vht_config.shortgi80 = nCfgValue;
|
||||
|
||||
nCfgValue = 0;
|
||||
wlan_cfg_get_int(mac_ctx, WNI_CFG_VHT_SHORT_GI_160_AND_80_PLUS_80MHZ,
|
||||
&nCfgValue);
|
||||
session->vht_config.shortgi160and80plus80 = nCfgValue;
|
||||
|
||||
nCfgValue = 0;
|
||||
wlan_cfg_get_int(mac_ctx, WNI_CFG_VHT_TXSTBC, &nCfgValue);
|
||||
session->vht_config.tx_stbc = nCfgValue;
|
||||
|
||||
nCfgValue = 0;
|
||||
wlan_cfg_get_int(mac_ctx, WNI_CFG_VHT_RXSTBC, &nCfgValue);
|
||||
session->vht_config.rx_stbc = nCfgValue;
|
||||
|
||||
nCfgValue = 0;
|
||||
wlan_cfg_get_int(mac_ctx, WNI_CFG_VHT_SU_BEAMFORMER_CAP, &nCfgValue);
|
||||
session->vht_config.su_beam_former = nCfgValue;
|
||||
|
||||
nCfgValue = 0;
|
||||
wlan_cfg_get_int(mac_ctx, WNI_CFG_VHT_SU_BEAMFORMEE_CAP, &nCfgValue);
|
||||
session->vht_config.su_beam_formee = nCfgValue;
|
||||
|
||||
nCfgValue = 0;
|
||||
wlan_cfg_get_int(mac_ctx, WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED,
|
||||
&nCfgValue);
|
||||
session->vht_config.csnof_beamformer_antSup = nCfgValue;
|
||||
|
||||
nCfgValue = 0;
|
||||
wlan_cfg_get_int(mac_ctx, WNI_CFG_VHT_NUM_SOUNDING_DIMENSIONS,
|
||||
&nCfgValue);
|
||||
session->vht_config.num_soundingdim = nCfgValue;
|
||||
|
||||
nCfgValue = 0;
|
||||
wlan_cfg_get_int(mac_ctx, WNI_CFG_VHT_MU_BEAMFORMER_CAP, &nCfgValue);
|
||||
session->vht_config.mu_beam_former = nCfgValue;
|
||||
|
||||
nCfgValue = 0;
|
||||
wlan_cfg_get_int(mac_ctx, WNI_CFG_VHT_MU_BEAMFORMEE_CAP, &nCfgValue);
|
||||
session->vht_config.mu_beam_formee = nCfgValue;
|
||||
|
||||
nCfgValue = 0;
|
||||
wlan_cfg_get_int(mac_ctx, WNI_CFG_VHT_TXOP_PS, &nCfgValue);
|
||||
session->vht_config.vht_txops = nCfgValue;
|
||||
|
||||
nCfgValue = 0;
|
||||
wlan_cfg_get_int(mac_ctx, WNI_CFG_VHT_HTC_VHTC_CAP, &nCfgValue);
|
||||
session->vht_config.htc_vhtcap = nCfgValue;
|
||||
|
||||
nCfgValue = 0;
|
||||
wlan_cfg_get_int(mac_ctx, WNI_CFG_VHT_RX_ANT_PATTERN, &nCfgValue);
|
||||
session->vht_config.rx_antpattern = nCfgValue;
|
||||
|
||||
nCfgValue = 0;
|
||||
wlan_cfg_get_int(mac_ctx, WNI_CFG_VHT_TX_ANT_PATTERN, &nCfgValue);
|
||||
session->vht_config.tx_antpattern = nCfgValue;
|
||||
|
||||
nCfgValue = 0;
|
||||
wlan_cfg_get_int(mac_ctx, WNI_CFG_VHT_AMPDU_LEN_EXPONENT, &nCfgValue);
|
||||
session->vht_config.max_ampdu_lenexp = nCfgValue;
|
||||
session->vht_config.max_ampdu_lenexp = vht_cap_info.ampdu_len_exponent;
|
||||
|
||||
csr_update_session_he_cap(mac_ctx, session);
|
||||
|
||||
|
|
@ -20697,7 +20608,7 @@ QDF_STATUS csr_roam_channel_change_req(tpAniSirGlobal pMac,
|
|||
pMsg->dot11mode = csr_translate_to_wni_cfg_dot11_mode(pMac,
|
||||
param.uCfgDot11Mode);
|
||||
if (IS_24G_CH(pMsg->targetChannel) &&
|
||||
(false == pMac->roam.configParam.enableVhtFor24GHz) &&
|
||||
(false == pMac->mlme_cfg->vht_caps.vht_cap_info.b24ghz_band) &&
|
||||
(WNI_CFG_DOT11_MODE_11AC == pMsg->dot11mode ||
|
||||
WNI_CFG_DOT11_MODE_11AC_ONLY == pMsg->dot11mode))
|
||||
pMsg->dot11mode = WNI_CFG_DOT11_MODE_11N;
|
||||
|
|
|
|||
|
|
@ -499,7 +499,7 @@ static uint32_t csr_get_dot11_mode(tpAniSirGlobal mac_ctx,
|
|||
dot11mode, ucfg_dot11_mode);
|
||||
|
||||
if (bss_desc->channelId <= 14 &&
|
||||
false == mac_ctx->roam.configParam.enableVhtFor24GHz &&
|
||||
false == mac_ctx->mlme_cfg->vht_caps.vht_cap_info.b24ghz_band &&
|
||||
WNI_CFG_DOT11_MODE_11AC == dot11mode) {
|
||||
/* Need to disable VHT operation in 2.4 GHz band */
|
||||
dot11mode = WNI_CFG_DOT11_MODE_11N;
|
||||
|
|
|
|||
Loading…
Reference in a new issue