qcacld-3.0: Add additional HT Caps related INI Items to MLME CFG
Add the following HT Caps related INI/CFG items to MLME component. gShortPreamble, CFG_HT_AMPDU_PARAMS, CFG_EXT_HT_CAP_INFO, CFG_HT_INFO_FIELD, gEnableAMPDUPS and gMaxAmsduNum. Change-Id: I019961016a2f0e39c7c62066c04788d3bd3d37e7 CRs-Fixed: 2318579
This commit is contained in:

committed by
nshrivas

parent
56b4f86e48
commit
9b449ad2e1
@@ -438,21 +438,69 @@ static void mlme_init_ht_cap_in_cfg(struct wlan_objmgr_psoc *psoc,
|
|||||||
{
|
{
|
||||||
union {
|
union {
|
||||||
uint16_t val_16;
|
uint16_t val_16;
|
||||||
struct mlme_ht_capabilities_info default_ht_cap_info;
|
struct mlme_ht_capabilities_info ht_cap_info;
|
||||||
} u;
|
} u1;
|
||||||
|
|
||||||
u.val_16 = (uint16_t)cfg_default(CFG_HT_CAP_INFO);
|
union {
|
||||||
|
uint16_t val_16;
|
||||||
|
struct mlme_ht_ext_cap_info ext_cap_info;
|
||||||
|
} u2;
|
||||||
|
|
||||||
u.default_ht_cap_info.adv_coding_cap =
|
union {
|
||||||
|
uint8_t val_8;
|
||||||
|
struct mlme_ht_info_field_1 info_field_1;
|
||||||
|
} u3;
|
||||||
|
|
||||||
|
union {
|
||||||
|
uint16_t val_16;
|
||||||
|
struct mlme_ht_info_field_2 info_field_2;
|
||||||
|
} u4;
|
||||||
|
|
||||||
|
union {
|
||||||
|
uint16_t val_16;
|
||||||
|
struct mlme_ht_info_field_3 info_field_3;
|
||||||
|
} u5;
|
||||||
|
|
||||||
|
/* HT Capabilities - HT Caps Info Field */
|
||||||
|
u1.val_16 = (uint16_t)cfg_default(CFG_HT_CAP_INFO);
|
||||||
|
u1.ht_cap_info.adv_coding_cap =
|
||||||
cfg_get(psoc, CFG_RX_LDPC_ENABLE);
|
cfg_get(psoc, CFG_RX_LDPC_ENABLE);
|
||||||
u.default_ht_cap_info.rx_stbc = cfg_get(psoc, CFG_RX_STBC_ENABLE);
|
u1.ht_cap_info.rx_stbc = cfg_get(psoc, CFG_RX_STBC_ENABLE);
|
||||||
u.default_ht_cap_info.tx_stbc = cfg_get(psoc, CFG_TX_STBC_ENABLE);
|
u1.ht_cap_info.tx_stbc = cfg_get(psoc, CFG_TX_STBC_ENABLE);
|
||||||
u.default_ht_cap_info.short_gi_20_mhz =
|
u1.ht_cap_info.short_gi_20_mhz =
|
||||||
cfg_get(psoc, CFG_SHORT_GI_20MHZ);
|
cfg_get(psoc, CFG_SHORT_GI_20MHZ);
|
||||||
u.default_ht_cap_info.short_gi_40_mhz =
|
u1.ht_cap_info.short_gi_40_mhz =
|
||||||
cfg_get(psoc, CFG_SHORT_GI_40MHZ);
|
cfg_get(psoc, CFG_SHORT_GI_40MHZ);
|
||||||
|
ht_caps->ht_cap_info = u1.ht_cap_info;
|
||||||
|
|
||||||
ht_caps->ht_cap_info = u.default_ht_cap_info;
|
/* HT Capapabilties - AMPDU Params */
|
||||||
|
ht_caps->ampdu_params.max_rx_ampdu_factor =
|
||||||
|
cfg_get(psoc, CFG_MAX_RX_AMPDU_FACTOR);
|
||||||
|
ht_caps->ampdu_params.mpdu_density =
|
||||||
|
cfg_get(psoc, CFG_MPDU_DENSITY);
|
||||||
|
ht_caps->ampdu_params.reserved = 0;
|
||||||
|
|
||||||
|
/* HT Capabilities - Extended Capabilities field */
|
||||||
|
u2.val_16 = (uint16_t)cfg_default(CFG_EXT_HT_CAP_INFO);
|
||||||
|
ht_caps->ext_cap_info = u2.ext_cap_info;
|
||||||
|
|
||||||
|
/* HT Operation - Information subset 1 of 3 */
|
||||||
|
u3.val_8 = (uint8_t)cfg_default(CFG_HT_INFO_FIELD_1);
|
||||||
|
ht_caps->info_field_1 = u3.info_field_1;
|
||||||
|
|
||||||
|
/* HT Operation - Information subset 2 of 3 */
|
||||||
|
u4.val_16 = (uint16_t)cfg_default(CFG_HT_INFO_FIELD_2);
|
||||||
|
ht_caps->info_field_2 = u4.info_field_2;
|
||||||
|
|
||||||
|
/* HT Operation - Information subset 3 of 3 */
|
||||||
|
u5.val_16 = (uint16_t)cfg_default(CFG_HT_INFO_FIELD_3);
|
||||||
|
ht_caps->info_field_3 = u5.info_field_3;
|
||||||
|
|
||||||
|
ht_caps->short_preamble = cfg_get(psoc, CFG_SHORT_PREAMBLE);
|
||||||
|
ht_caps->enable_ampdu_ps = cfg_get(psoc, CFG_ENABLE_AMPDUPS);
|
||||||
|
ht_caps->enable_smps = cfg_get(psoc, CFG_ENABLE_HT_SMPS);
|
||||||
|
ht_caps->smps = cfg_get(psoc, CFG_HT_SMPS_MODE);
|
||||||
|
ht_caps->max_num_amsdu = cfg_get(psoc, CFG_MAX_AMSDU_NUM);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mlme_init_qos_cfg(struct wlan_objmgr_psoc *psoc,
|
static void mlme_init_qos_cfg(struct wlan_objmgr_psoc *psoc,
|
||||||
|
@@ -173,6 +173,203 @@
|
|||||||
CFG_VALUE_OR_DEFAULT, \
|
CFG_VALUE_OR_DEFAULT, \
|
||||||
"HT cap info")
|
"HT cap info")
|
||||||
|
|
||||||
|
/*
|
||||||
|
* <ini>
|
||||||
|
* gShortPreamble - Set Short Preamble
|
||||||
|
* @Min: 0
|
||||||
|
* @Max: 1
|
||||||
|
* @Default: 1
|
||||||
|
*
|
||||||
|
* This ini is used to set default short Preamble
|
||||||
|
*
|
||||||
|
* Related: None
|
||||||
|
*
|
||||||
|
* Supported Feature: STA
|
||||||
|
*
|
||||||
|
* Usage: Internal/External
|
||||||
|
*
|
||||||
|
* </ini>
|
||||||
|
*/
|
||||||
|
#define CFG_SHORT_PREAMBLE CFG_INI_BOOL( \
|
||||||
|
"gShortPreamble", \
|
||||||
|
1, \
|
||||||
|
"Short Preamble")
|
||||||
|
|
||||||
|
#define CFG_HT_AMPDU_PARAMS CFG_UINT( \
|
||||||
|
"ht_ampdu_params", \
|
||||||
|
0, \
|
||||||
|
255, \
|
||||||
|
0, \
|
||||||
|
CFG_VALUE_OR_DEFAULT, \
|
||||||
|
"HT AMPDU Params")
|
||||||
|
|
||||||
|
#define CFG_EXT_HT_CAP_INFO CFG_UINT( \
|
||||||
|
"ext_ht_cap_info", \
|
||||||
|
0, \
|
||||||
|
65535, \
|
||||||
|
1024, \
|
||||||
|
CFG_VALUE_OR_DEFAULT, \
|
||||||
|
"HT Ext Cap Info")
|
||||||
|
|
||||||
|
#define CFG_HT_INFO_FIELD_1 CFG_UINT( \
|
||||||
|
"ht_info_field_1", \
|
||||||
|
0, \
|
||||||
|
255, \
|
||||||
|
15, \
|
||||||
|
CFG_VALUE_OR_DEFAULT, \
|
||||||
|
"HT Info Field 1")
|
||||||
|
|
||||||
|
#define CFG_HT_INFO_FIELD_2 CFG_UINT( \
|
||||||
|
"ht_info_field_2", \
|
||||||
|
0, \
|
||||||
|
65535, \
|
||||||
|
0, \
|
||||||
|
CFG_VALUE_OR_DEFAULT, \
|
||||||
|
"HT Info Field 2")
|
||||||
|
|
||||||
|
#define CFG_HT_INFO_FIELD_3 CFG_UINT( \
|
||||||
|
"ht_info_field_3", \
|
||||||
|
0, \
|
||||||
|
65535, \
|
||||||
|
0, \
|
||||||
|
CFG_VALUE_OR_DEFAULT, \
|
||||||
|
"HT Info Field 3")
|
||||||
|
|
||||||
|
/*
|
||||||
|
* <ini>
|
||||||
|
* gEnableHtSMPS - Enable the SM Power Save
|
||||||
|
* @Min: 0
|
||||||
|
* @Max: 1
|
||||||
|
* @Default: 0
|
||||||
|
*
|
||||||
|
* This ini is used to enable SM Power Save
|
||||||
|
*
|
||||||
|
* Related: None
|
||||||
|
*
|
||||||
|
* Supported Feature: STA
|
||||||
|
*
|
||||||
|
* Usage: Internal/External
|
||||||
|
*
|
||||||
|
* </ini>
|
||||||
|
*/
|
||||||
|
#define CFG_ENABLE_HT_SMPS CFG_INI_BOOL( \
|
||||||
|
"gEnableHtSMPS", \
|
||||||
|
0, \
|
||||||
|
"Enable HT SM PowerSave")
|
||||||
|
|
||||||
|
/*
|
||||||
|
* <ini>
|
||||||
|
* gHtSMPS - SMPS Mode
|
||||||
|
* @Min: 0
|
||||||
|
* @Max: 3
|
||||||
|
* @Default: 3
|
||||||
|
*
|
||||||
|
* This ini is used to set default SM Power Save Antenna mode
|
||||||
|
* 0 - Static
|
||||||
|
* 1 - Dynamic
|
||||||
|
* 2 - Reserved/Invalid
|
||||||
|
* 3 - Disabled
|
||||||
|
*
|
||||||
|
* Related: None
|
||||||
|
*
|
||||||
|
* Supported Feature: STA
|
||||||
|
*
|
||||||
|
* Usage: Internal/External
|
||||||
|
*
|
||||||
|
* </ini>
|
||||||
|
*/
|
||||||
|
#define CFG_HT_SMPS_MODE CFG_INI_UINT( \
|
||||||
|
"gHtSMPS", \
|
||||||
|
0, \
|
||||||
|
3, \
|
||||||
|
3, \
|
||||||
|
CFG_VALUE_OR_DEFAULT, \
|
||||||
|
"HT SM Power Save Config")
|
||||||
|
|
||||||
|
/*
|
||||||
|
* <ini>
|
||||||
|
* gMaxAmsduNum - Max number of MSDU's in aggregate
|
||||||
|
* @Min: 0
|
||||||
|
* @Max: 3
|
||||||
|
* @Default: 1
|
||||||
|
* gMaxAmsduNum is the number of MSDU's transmitted in the 11n aggregate
|
||||||
|
* frame. Setting it to a value larger than 1 enables transmit aggregation.
|
||||||
|
* It is a PHY parameter that applies to all vdev's in firmware.
|
||||||
|
*
|
||||||
|
* Supported Feature: 11n aggregation
|
||||||
|
*
|
||||||
|
* Usage: Internal
|
||||||
|
*
|
||||||
|
* </ini>
|
||||||
|
*/
|
||||||
|
#define CFG_MAX_AMSDU_NUM CFG_INI_UINT( \
|
||||||
|
"gMaxAmsduNum", \
|
||||||
|
0, \
|
||||||
|
3, \
|
||||||
|
1, \
|
||||||
|
CFG_VALUE_OR_DEFAULT, \
|
||||||
|
"Max AMSDU Number")
|
||||||
|
|
||||||
|
/*
|
||||||
|
* <ini>
|
||||||
|
* gMaxRxAmpduFactor - Provide the maximum ampdu factor.
|
||||||
|
* @Min: 0
|
||||||
|
* @Max: 3
|
||||||
|
* @Default: 3
|
||||||
|
*
|
||||||
|
* This ini is used to set default maxampdu factor
|
||||||
|
*
|
||||||
|
* Related: None
|
||||||
|
*
|
||||||
|
* Supported Feature: STA
|
||||||
|
*
|
||||||
|
* Usage: Internal/External
|
||||||
|
*
|
||||||
|
* </ini>
|
||||||
|
*/
|
||||||
|
#define CFG_MAX_RX_AMPDU_FACTOR CFG_INI_UINT( \
|
||||||
|
"gMaxRxAmpduFactor", \
|
||||||
|
0, \
|
||||||
|
3, \
|
||||||
|
3, \
|
||||||
|
CFG_VALUE_OR_DEFAULT, \
|
||||||
|
"Max Rx AMPDU Factor")
|
||||||
|
|
||||||
|
/*
|
||||||
|
* <ini>
|
||||||
|
* ght_mpdu_density - Configuration option for HT MPDU density
|
||||||
|
* @Min: 0
|
||||||
|
* @Max: 7
|
||||||
|
* @Default: 7
|
||||||
|
*
|
||||||
|
* This ini is used to set default MDPU Density
|
||||||
|
*
|
||||||
|
* Related: None
|
||||||
|
*
|
||||||
|
* Supported Feature: STA
|
||||||
|
*
|
||||||
|
* Usage: Internal/External
|
||||||
|
*
|
||||||
|
* As per (Table 8-125 802.11-2012)
|
||||||
|
* 0 for no restriction
|
||||||
|
* 1 for 1/4 micro sec
|
||||||
|
* 2 for 1/2 micro sec
|
||||||
|
* 3 for 1 micro sec
|
||||||
|
* 4 for 2 micro sec
|
||||||
|
* 5 for 4 micro sec
|
||||||
|
* 6 for 8 micro sec
|
||||||
|
* 7 for 16 micro sec
|
||||||
|
*
|
||||||
|
* </ini>
|
||||||
|
*/
|
||||||
|
#define CFG_MPDU_DENSITY CFG_INI_UINT( \
|
||||||
|
"ght_mpdu_density", \
|
||||||
|
0, \
|
||||||
|
7, \
|
||||||
|
7, \
|
||||||
|
CFG_VALUE_OR_DEFAULT, \
|
||||||
|
"MPDU Density")
|
||||||
|
|
||||||
#define CFG_HT_CAPS_ALL \
|
#define CFG_HT_CAPS_ALL \
|
||||||
CFG(CFG_HT_CAP_INFO) \
|
CFG(CFG_HT_CAP_INFO) \
|
||||||
CFG(CFG_TX_LDPC_ENABLE) \
|
CFG(CFG_TX_LDPC_ENABLE) \
|
||||||
@@ -180,6 +377,17 @@
|
|||||||
CFG(CFG_TX_STBC_ENABLE) \
|
CFG(CFG_TX_STBC_ENABLE) \
|
||||||
CFG(CFG_RX_STBC_ENABLE) \
|
CFG(CFG_RX_STBC_ENABLE) \
|
||||||
CFG(CFG_SHORT_GI_20MHZ) \
|
CFG(CFG_SHORT_GI_20MHZ) \
|
||||||
CFG(CFG_SHORT_GI_40MHZ)
|
CFG(CFG_SHORT_GI_40MHZ) \
|
||||||
|
CFG(CFG_SHORT_PREAMBLE) \
|
||||||
|
CFG(CFG_HT_AMPDU_PARAMS) \
|
||||||
|
CFG(CFG_EXT_HT_CAP_INFO) \
|
||||||
|
CFG(CFG_HT_INFO_FIELD_1) \
|
||||||
|
CFG(CFG_HT_INFO_FIELD_2) \
|
||||||
|
CFG(CFG_HT_INFO_FIELD_3) \
|
||||||
|
CFG(CFG_ENABLE_HT_SMPS) \
|
||||||
|
CFG(CFG_HT_SMPS_MODE) \
|
||||||
|
CFG(CFG_MAX_AMSDU_NUM) \
|
||||||
|
CFG(CFG_MAX_RX_AMPDU_FACTOR) \
|
||||||
|
CFG(CFG_MPDU_DENSITY)
|
||||||
|
|
||||||
#endif /* __CFG_MLME_HT_CAPS_H */
|
#endif /* __CFG_MLME_HT_CAPS_H */
|
||||||
|
@@ -177,6 +177,46 @@ QDF_STATUS wlan_mlme_set_ht_cap_info(struct wlan_objmgr_psoc *psoc,
|
|||||||
struct mlme_ht_capabilities_info
|
struct mlme_ht_capabilities_info
|
||||||
ht_cap_info);
|
ht_cap_info);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wlan_mlme_get_max_amsdu_num() - get the max amsdu num
|
||||||
|
* @psoc: pointer to psoc object
|
||||||
|
* @value: pointer to the value where the max_amsdu num is to be filled
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS wlan_mlme_get_max_amsdu_num(struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint8_t *value);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wlan_mlme_set_max_amsdu_num() - set the max amsdu num
|
||||||
|
* @psoc: pointer to psoc object
|
||||||
|
* @value: value to be set for max_amsdu_num
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS wlan_mlme_set_max_amsdu_num(struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint8_t value);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wlan_mlme_get_ht_mpdu_density() - get the ht mpdu density
|
||||||
|
* @psoc: pointer to psoc object
|
||||||
|
* @value: pointer to the value where the ht mpdu density is to be filled
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS wlan_mlme_get_ht_mpdu_density(struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint8_t *value);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wlan_mlme_set_ht_mpdu_density() - set the ht mpdu density
|
||||||
|
* @psoc: pointer to psoc object
|
||||||
|
* @value: value to be set for ht mpdu density
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS wlan_mlme_set_ht_mpdu_density(struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint8_t value);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* wlan_mlme_get_band_capability() - Get the Band capability config
|
* wlan_mlme_get_band_capability() - Get the Band capability config
|
||||||
* @psoc: pointer to psoc object
|
* @psoc: pointer to psoc object
|
||||||
|
@@ -301,12 +301,161 @@ struct mlme_ht_capabilities_info {
|
|||||||
} qdf_packed;
|
} qdf_packed;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct mlme_ht_param_info - HT AMPDU Parameters Info
|
||||||
|
* @reserved: reserved bits
|
||||||
|
* @mpdu_density: MPDU Density
|
||||||
|
* @max_rx_ampdu_factor: Max Rx AMPDU Factor
|
||||||
|
*/
|
||||||
|
#ifndef ANI_LITTLE_BIT_ENDIAN
|
||||||
|
struct mlme_ht_param_info {
|
||||||
|
uint8_t reserved:3;
|
||||||
|
uint8_t mpdu_density:3;
|
||||||
|
uint8_t max_rx_ampdu_factor:2;
|
||||||
|
} qdf_packed;
|
||||||
|
#else
|
||||||
|
struct mlme_ht_param_info {
|
||||||
|
uint8_t max_rx_ampdu_factor:2;
|
||||||
|
uint8_t mpdu_density:3;
|
||||||
|
uint8_t reserved:3;
|
||||||
|
#endif
|
||||||
|
} qdf_packed;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct mlme_ht_ext_cap_info - Extended HT Capabilities Info
|
||||||
|
* reserved_2: Reserved Bits
|
||||||
|
* mcs_feedback: MCS Feedback Capability
|
||||||
|
* reserved_1: Reserved Bits
|
||||||
|
* transition_time: Time needed for transition between 20Mhz and 40 Mhz
|
||||||
|
* pco: PCO (Phased Coexistence Operation) Support
|
||||||
|
*/
|
||||||
|
#ifndef ANI_LITTLE_BIT_ENDIAN
|
||||||
|
struct mlme_ht_ext_cap_info {
|
||||||
|
uint16_t reserved_2:6;
|
||||||
|
uint16_t mcs_feedback:2;
|
||||||
|
uint16_t reserved_1:5;
|
||||||
|
uint16_t transition_time:2;
|
||||||
|
uint16_t pco:1;
|
||||||
|
} qdf_packed;
|
||||||
|
#else
|
||||||
|
struct mlme_ht_ext_cap_info {
|
||||||
|
uint16_t pco:1;
|
||||||
|
uint16_t transition_time:2;
|
||||||
|
uint16_t reserved1:5;
|
||||||
|
uint16_t mcs_feedback:2;
|
||||||
|
uint16_t reserved2:6;
|
||||||
|
} qdf_packed;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct mlme_ht_info_field_1 - Additional HT IE Field1
|
||||||
|
* @service_interval_granularity: Shortest Service Interval
|
||||||
|
* @controlled_access_only: Access Control for assoc requests
|
||||||
|
* @rifs_mode: Reduced Interframe Spacing mode
|
||||||
|
* @recommended_tx_width_set: Recommended Tx Channel Width
|
||||||
|
* @secondary_channel_offset: Secondary Channel Offset
|
||||||
|
*/
|
||||||
|
#ifndef ANI_LITTLE_BIT_ENDIAN
|
||||||
|
struct mlme_ht_info_field_1 {
|
||||||
|
uint8_t service_interval_granularity:3;
|
||||||
|
uint8_t controlled_access_only:1;
|
||||||
|
uint8_t rifs_mode:1;
|
||||||
|
uint8_t recommended_tx_width_set:1;
|
||||||
|
uint8_t secondary_channel_offset:2;
|
||||||
|
} qdf_packed;
|
||||||
|
#else
|
||||||
|
struct mlme_ht_info_field_1 {
|
||||||
|
uint8_t secondary_channel_offset:2;
|
||||||
|
uint8_t recommended_tx_width_set:1;
|
||||||
|
uint8_t rifs_mode:1;
|
||||||
|
uint8_t controlled_access_only:1;
|
||||||
|
uint8_t service_interval_granularity:3;
|
||||||
|
} qdf_packed;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* struct mlme_ht_info_field_2 - Additional HT IE Field2
|
||||||
|
* @reserved: reserved bits
|
||||||
|
* @obss_non_ht_sta_present: Protection for non-HT STAs by Overlapping BSS
|
||||||
|
* @transmit_burst_limit: Transmit Burst Limit
|
||||||
|
* @non_gf_devices_present: Non Greenfield devices present
|
||||||
|
* @op_mode: Operation Mode
|
||||||
|
*/
|
||||||
|
#ifndef ANI_LITTLE_BIT_ENDIAN
|
||||||
|
struct mlme_ht_info_field_2 {
|
||||||
|
uint16_t reserved:11;
|
||||||
|
uint16_t obss_non_ht_sta_present:1;
|
||||||
|
uint16_t transmit_burst_limit:1;
|
||||||
|
uint16_t non_gf_devices_present:1;
|
||||||
|
uint16_t op_mode:2;
|
||||||
|
} qdf_packed;
|
||||||
|
#else
|
||||||
|
struct mlme_ht_info_field_2 {
|
||||||
|
uint16_t op_mode:2;
|
||||||
|
uint16_t nonGFDevicesPresent:1;
|
||||||
|
uint16_t transmit_burst_limit:1;
|
||||||
|
uint16_t obss_non_ht_sta_present:1;
|
||||||
|
uint16_t reserved:11;
|
||||||
|
} qdf_packed;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct mlme_ht_info_field_3 - Additional HT IE Field3
|
||||||
|
* @reserved: reserved bits
|
||||||
|
* @pco_phase: PCO Phase
|
||||||
|
* @pco_active: PCO state
|
||||||
|
* @lsig_txop_protection_full_support: L-Sig TXOP Protection Full Support
|
||||||
|
* @secondary_beacon: Beacon ID
|
||||||
|
* @dual_cts_protection: Dual CTS protection Required
|
||||||
|
* @basic_stbc_mcs: Basic STBC MCS
|
||||||
|
*/
|
||||||
|
#ifndef ANI_LITTLE_BIT_ENDIAN
|
||||||
|
struct mlme_ht_info_field_3 {
|
||||||
|
uint16_t reserved:4;
|
||||||
|
uint16_t pco_phase:1;
|
||||||
|
uint16_t pco_active:1;
|
||||||
|
uint16_t lsig_txop_protection_full_support:1;
|
||||||
|
uint16_t secondary_beacon:1;
|
||||||
|
uint16_t dual_cts_protection:1;
|
||||||
|
uint16_t basic_stbc_mcs:7;
|
||||||
|
} qdf_packed;
|
||||||
|
#else
|
||||||
|
struct mlme_ht_info_field_3 {
|
||||||
|
uint16_t basic_stbc_mcs:7;
|
||||||
|
uint16_t dual_cts_protection:1;
|
||||||
|
uint16_t secondary_beacon:1;
|
||||||
|
uint16_t lsig_txop_protection_full_support:1;
|
||||||
|
uint16_t pco_active:1;
|
||||||
|
uint16_t pco_phase:1;
|
||||||
|
uint16_t reserved:4;
|
||||||
|
} qdf_packed;
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct wlan_mlme_ht_caps - HT Capabilities related config items
|
* struct wlan_mlme_ht_caps - HT Capabilities related config items
|
||||||
* @ht_cap_info: HT capabilities Info Structure
|
* @ht_cap_info: HT capabilities Info Structure
|
||||||
|
* @ampdu_params: AMPDU parameters
|
||||||
|
* @ext_cap_info: HT EXT capabilities info
|
||||||
|
* @info_field_1: HT Information Subset 1
|
||||||
|
* @info_field_2: HT Information Subset 2
|
||||||
|
* @info_field_3: HT Information Subset 3
|
||||||
|
* @short_preamble: Short Preamble support
|
||||||
|
* @enable_ampdu_ps: Enable AMPDU Power Save
|
||||||
|
* @enable_smps: Enabled SM Power Save
|
||||||
|
* @smps : SM Power Save mode
|
||||||
|
* @max_num_amsdu: Max number of AMSDU
|
||||||
*/
|
*/
|
||||||
struct wlan_mlme_ht_caps {
|
struct wlan_mlme_ht_caps {
|
||||||
struct mlme_ht_capabilities_info ht_cap_info;
|
struct mlme_ht_capabilities_info ht_cap_info;
|
||||||
|
struct mlme_ht_param_info ampdu_params;
|
||||||
|
struct mlme_ht_ext_cap_info ext_cap_info;
|
||||||
|
struct mlme_ht_info_field_1 info_field_1;
|
||||||
|
struct mlme_ht_info_field_2 info_field_2;
|
||||||
|
struct mlme_ht_info_field_3 info_field_3;
|
||||||
|
bool short_preamble;
|
||||||
|
bool enable_ampdu_ps;
|
||||||
|
bool enable_smps;
|
||||||
|
uint8_t smps;
|
||||||
|
uint8_t max_num_amsdu;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -149,6 +149,62 @@ QDF_STATUS ucfg_mlme_set_ht_cap_info(struct wlan_objmgr_psoc *psoc,
|
|||||||
return wlan_mlme_set_ht_cap_info(psoc, ht_cap_info);
|
return wlan_mlme_set_ht_cap_info(psoc, ht_cap_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ucfg_mlme_get_max_amsdu_num() - get the max amsdu num
|
||||||
|
* @psoc: pointer to psoc object
|
||||||
|
* @value: pointer to the value where the max_amsdu num is to be filled
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
static inline
|
||||||
|
QDF_STATUS ucfg_mlme_get_max_amsdu_num(struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint8_t *value)
|
||||||
|
{
|
||||||
|
return wlan_mlme_get_max_amsdu_num(psoc, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ucfg_mlme_set_max_amsdu_num() - set the max amsdu num
|
||||||
|
* @psoc: pointer to psoc object
|
||||||
|
* @value: value to be set for max_amsdu_num
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
static inline
|
||||||
|
QDF_STATUS ucfg_mlme_set_max_amsdu_num(struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint8_t value)
|
||||||
|
{
|
||||||
|
return wlan_mlme_set_max_amsdu_num(psoc, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ucfg_mlme_get_ht_mpdu_density() - get the ht mpdu density
|
||||||
|
* @psoc: pointer to psoc object
|
||||||
|
* @value: pointer to the value where the ht mpdu density is to be filled
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
static inline
|
||||||
|
QDF_STATUS ucfg_mlme_get_ht_mpdu_density(struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint8_t *value)
|
||||||
|
{
|
||||||
|
return wlan_mlme_get_ht_mpdu_density(psoc, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ucfg_mlme_set_ht_mpdu_density() - set the ht mpdu density
|
||||||
|
* @psoc: pointer to psoc object
|
||||||
|
* @value: value to be set for ht mpdu density
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
static inline
|
||||||
|
QDF_STATUS ucfg_mlme_set_ht_mpdu_density(struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint8_t value)
|
||||||
|
{
|
||||||
|
return wlan_mlme_set_ht_mpdu_density(psoc, value);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ucfg_mlme_get_band_capability() - Get the Band capability config
|
* ucfg_mlme_get_band_capability() - Get the Band capability config
|
||||||
* @psoc: pointer to psoc object
|
* @psoc: pointer to psoc object
|
||||||
|
@@ -90,6 +90,80 @@ QDF_STATUS wlan_mlme_set_ht_cap_info(struct wlan_objmgr_psoc *psoc,
|
|||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QDF_STATUS wlan_mlme_get_max_amsdu_num(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.ht_caps.max_num_amsdu;
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDF_STATUS wlan_mlme_set_max_amsdu_num(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;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!cfg_in_range(CFG_MAX_AMSDU_NUM, value)) {
|
||||||
|
mlme_err("Error in setting Max AMSDU Num");
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
mlme_obj->cfg.ht_caps.max_num_amsdu = value;
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDF_STATUS wlan_mlme_get_ht_mpdu_density(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 = (uint8_t)mlme_obj->cfg.ht_caps.ampdu_params.mpdu_density;
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDF_STATUS wlan_mlme_set_ht_mpdu_density(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;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!cfg_in_range(CFG_MPDU_DENSITY, value)) {
|
||||||
|
mlme_err("Invalid value %d", value);
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
mlme_obj->cfg.ht_caps.ampdu_params.mpdu_density = value;
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
QDF_STATUS wlan_mlme_get_band_capability(struct wlan_objmgr_psoc *psoc,
|
QDF_STATUS wlan_mlme_get_band_capability(struct wlan_objmgr_psoc *psoc,
|
||||||
uint8_t *band_capability)
|
uint8_t *band_capability)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user