Merge "qcacld-3.0: [11AX] Add dot11mode changes to support 11ax" into wlan-cld3.driver.lnx.2.0-dev
Bu işleme şunda yer alıyor:

işlemeyi yapan:
Gerrit - the friendly Code Review server

işleme
00aa176941
3
Kbuild
3
Kbuild
@@ -1459,7 +1459,8 @@ CDEFINES := -DANI_LITTLE_BYTE_ENDIAN \
|
||||
-DCONFIG_MCL \
|
||||
-DWLAN_PMO_ENABLE \
|
||||
-DCONVERGED_P2P_ENABLE \
|
||||
-DWLAN_POLICY_MGR_ENABLE
|
||||
-DWLAN_POLICY_MGR_ENABLE \
|
||||
-DSUPPORT_11AX
|
||||
|
||||
|
||||
############ WIFI POS ##############
|
||||
|
@@ -53,6 +53,13 @@
|
||||
* @IEEE80211_MODE_2G_AUTO - 2G 11 b/g/n autoselect
|
||||
* @IEEE80211_MODE_5G_AUTO - 5G 11 a/n/ac autoselect
|
||||
* @IEEE80211_MODE_11AGN - Support 11N in both 2G and 5G
|
||||
* @IEEE80211_MODE_11AX_HE20 - HE20
|
||||
* @IEEE80211_MODE_11AX_HE40 - HE40
|
||||
* @IEEE80211_MODE_11AX_HE40PLUS - HE40 (ext ch +1)
|
||||
* @IEEE80211_MODE_11AX_HE40MINUS - HE40 (ext ch -1)
|
||||
* @IEEE80211_MODE_11AX_HE80 - HE80
|
||||
* @IEEE80211_MODE_11AX_HE80P80 - HE 80P80
|
||||
* @IEEE80211_MODE_11AX_HE160 - HE160
|
||||
* @IEEE80211_MODE_MAX - Maximum possible value
|
||||
*/
|
||||
enum ieee80211_phymode {
|
||||
@@ -79,9 +86,16 @@ enum ieee80211_phymode {
|
||||
IEEE80211_MODE_2G_AUTO = 20,
|
||||
IEEE80211_MODE_5G_AUTO = 21,
|
||||
IEEE80211_MODE_11AGN = 22,
|
||||
IEEE80211_MODE_11AX_HE20 = 23,
|
||||
IEEE80211_MODE_11AX_HE40 = 24,
|
||||
IEEE80211_MODE_11AX_HE40PLUS = 25,
|
||||
IEEE80211_MODE_11AX_HE40MINUS = 26,
|
||||
IEEE80211_MODE_11AX_HE80 = 27,
|
||||
IEEE80211_MODE_11AX_HE80P80 = 28,
|
||||
IEEE80211_MODE_11AX_HE160 = 29,
|
||||
|
||||
/* Do not add after this line */
|
||||
IEEE80211_MODE_MAX = IEEE80211_MODE_11AGN,
|
||||
IEEE80211_MODE_MAX = IEEE80211_MODE_11AX_HE160,
|
||||
};
|
||||
|
||||
/**
|
||||
|
@@ -244,6 +244,8 @@ typedef enum {
|
||||
eHDD_DOT11_MODE_11ac_ONLY,
|
||||
eHDD_DOT11_MODE_11ac,
|
||||
eHDD_DOT11_MODE_11a,
|
||||
eHDD_DOT11_MODE_11ax_ONLY,
|
||||
eHDD_DOT11_MODE_11ax,
|
||||
} eHddDot11Mode;
|
||||
|
||||
/*
|
||||
@@ -1702,11 +1704,11 @@ typedef enum {
|
||||
* <ini>
|
||||
* gDot11Mode - SAP phy mode
|
||||
* @Min: 0
|
||||
* @Max: 10 (11a)
|
||||
* @Default: 9 (11ac)
|
||||
* @Max: 12 (11ax)
|
||||
* @Default: 12 (11ax)
|
||||
*
|
||||
* This ini is used to set Phy Mode (auto, b, g, n, etc/) Valid values are
|
||||
* 0-10, with 0 = Auto, 10 = 11a.
|
||||
* 0-12, with 0 = Auto, 12 = 11ax.
|
||||
*
|
||||
* Related: None.
|
||||
*
|
||||
@@ -1718,8 +1720,8 @@ typedef enum {
|
||||
*/
|
||||
#define CFG_DOT11_MODE_NAME "gDot11Mode"
|
||||
#define CFG_DOT11_MODE_MIN eHDD_DOT11_MODE_AUTO
|
||||
#define CFG_DOT11_MODE_DEFAULT eHDD_DOT11_MODE_11ac
|
||||
#define CFG_DOT11_MODE_MAX eHDD_DOT11_MODE_11a
|
||||
#define CFG_DOT11_MODE_DEFAULT eHDD_DOT11_MODE_11ax
|
||||
#define CFG_DOT11_MODE_MAX eHDD_DOT11_MODE_11ax
|
||||
|
||||
/*
|
||||
* <ini>
|
||||
|
@@ -28,14 +28,26 @@
|
||||
|
||||
struct hdd_context_s;
|
||||
struct wma_tgt_cfg;
|
||||
struct beacon_data_s;
|
||||
struct sap_Config;
|
||||
|
||||
#define HE_CAP_OUI_TYPE "\x00\x13\x74\x01"
|
||||
#define HE_CAP_OUI_SIZE 4
|
||||
|
||||
#ifdef WLAN_FEATURE_11AX
|
||||
void hdd_update_tgt_he_cap(struct hdd_context_s *hdd_ctx,
|
||||
struct wma_tgt_cfg *cfg);
|
||||
void wlan_hdd_check_11ax_support(struct beacon_data_s *beacon,
|
||||
struct sap_Config *config);
|
||||
#else
|
||||
static inline void hdd_update_tgt_he_cap(struct hdd_context_s *hdd_ctx,
|
||||
struct wma_tgt_cfg *cfg)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void wlan_hdd_check_11ax_support(struct beacon_data_s *beacon,
|
||||
struct sap_Config *config)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
#endif /* if !defined(WLAN_HDD_HE_H)*/
|
||||
|
@@ -75,6 +75,8 @@
|
||||
#else
|
||||
#include "wlan_hdd_oemdata.h"
|
||||
#endif
|
||||
#include "wlan_hdd_he.h"
|
||||
|
||||
/*
|
||||
* Preprocessor definitions and constants
|
||||
*/
|
||||
|
@@ -45,6 +45,7 @@
|
||||
#include <wlan_hdd_misc.h>
|
||||
#include <wlan_hdd_napi.h>
|
||||
#include <cds_concurrency.h>
|
||||
#include "wlan_hdd_he.h"
|
||||
|
||||
static void
|
||||
cb_notify_set_roam_prefer5_g_hz(hdd_context_t *pHddCtx, unsigned long notifyId)
|
||||
@@ -6070,6 +6071,10 @@ eCsrPhyMode hdd_cfg_xlate_to_csr_phy_mode(eHddDot11Mode dot11Mode)
|
||||
return eCSR_DOT11_MODE_AUTO;
|
||||
case (eHDD_DOT11_MODE_11a):
|
||||
return eCSR_DOT11_MODE_11a;
|
||||
case (eHDD_DOT11_MODE_11ax_ONLY):
|
||||
return eCSR_DOT11_MODE_11ax_ONLY;
|
||||
case (eHDD_DOT11_MODE_11ax):
|
||||
return eCSR_DOT11_MODE_11ax;
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -12733,6 +12733,15 @@ void hdd_select_cbmode(hdd_adapter_t *pAdapter, uint8_t operationChannel,
|
||||
hdd_notice("Dot11Mode is %u", iniDot11Mode);
|
||||
switch (iniDot11Mode) {
|
||||
case eHDD_DOT11_MODE_AUTO:
|
||||
case eHDD_DOT11_MODE_11ax:
|
||||
case eHDD_DOT11_MODE_11ax_ONLY:
|
||||
if (sme_is_feature_supported_by_fw(DOT11AX))
|
||||
hdd_dot11_mode = eHDD_DOT11_MODE_11ax;
|
||||
else if (sme_is_feature_supported_by_fw(DOT11AC))
|
||||
hdd_dot11_mode = eHDD_DOT11_MODE_11ac;
|
||||
else
|
||||
hdd_dot11_mode = eHDD_DOT11_MODE_11n;
|
||||
break;
|
||||
case eHDD_DOT11_MODE_11ac:
|
||||
case eHDD_DOT11_MODE_11ac_ONLY:
|
||||
if (sme_is_feature_supported_by_fw(DOT11AC))
|
||||
|
@@ -249,3 +249,23 @@ void hdd_update_tgt_he_cap(struct hdd_context_s *hdd_ctx,
|
||||
if (status == QDF_STATUS_E_FAILURE)
|
||||
hdd_alert("could not set HE PPET");
|
||||
}
|
||||
|
||||
/**
|
||||
* wlan_hdd_check_11ax_support() - check if beacon IE and update hw mode
|
||||
* @beacon: beacon IE buffer
|
||||
* @config: pointer to sap config
|
||||
*
|
||||
* Check if HE cap IE is present in beacon IE, if present update hw mode
|
||||
* to 11ax.
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void wlan_hdd_check_11ax_support(beacon_data_t *beacon, tsap_Config_t *config)
|
||||
{
|
||||
uint8_t *ie;
|
||||
|
||||
ie = wlan_hdd_get_vendor_oui_ie_ptr(HE_CAP_OUI_TYPE, HE_CAP_OUI_SIZE,
|
||||
beacon->tail, beacon->tail_len);
|
||||
if (ie)
|
||||
config->SapHw_mode = eCSR_DOT11_MODE_11ax;
|
||||
}
|
||||
|
@@ -80,6 +80,8 @@
|
||||
#include "wlan_hdd_object_manager.h"
|
||||
#include <qca_vendor.h>
|
||||
|
||||
#include "wlan_hdd_he.h"
|
||||
|
||||
#define IS_UP(_dev) \
|
||||
(((_dev)->flags & (IFF_RUNNING|IFF_UP)) == (IFF_RUNNING|IFF_UP))
|
||||
#define IS_UP_AUTO(_ic) \
|
||||
@@ -6921,6 +6923,11 @@ static void wlan_hdd_set_sap_hwmode(hdd_adapter_t *pHostapdAdapter)
|
||||
if (require_vht)
|
||||
pConfig->SapHw_mode = eCSR_DOT11_MODE_11ac_ONLY;
|
||||
}
|
||||
|
||||
wlan_hdd_check_11ax_support(pBeacon, pConfig);
|
||||
|
||||
hdd_info("SAP hw_mode: %d", pConfig->SapHw_mode);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -7090,9 +7097,11 @@ static int wlan_hdd_setup_driver_overrides(hdd_adapter_t *ap_adapter)
|
||||
hdd_ctx->config->sap_p2p_11ac_override &&
|
||||
(sap_cfg->SapHw_mode == eCSR_DOT11_MODE_11n ||
|
||||
sap_cfg->SapHw_mode == eCSR_DOT11_MODE_11ac ||
|
||||
sap_cfg->SapHw_mode == eCSR_DOT11_MODE_11ac_ONLY) &&
|
||||
sap_cfg->SapHw_mode == eCSR_DOT11_MODE_11ac_ONLY ||
|
||||
sap_cfg->SapHw_mode == eCSR_DOT11_MODE_11ax ||
|
||||
sap_cfg->SapHw_mode == eCSR_DOT11_MODE_11ax_ONLY) &&
|
||||
!hdd_ctx->config->sap_force_11n_for_11ac) {
|
||||
hdd_notice("** Driver force 11AC override for SAP/Go **");
|
||||
hdd_notice("** Driver force override for SAP/Go **");
|
||||
|
||||
/* 11n only shall not be overridden since it may be on purpose*/
|
||||
if (sap_cfg->SapHw_mode == eCSR_DOT11_MODE_11n)
|
||||
@@ -7130,8 +7139,12 @@ setup_acs_overrides:
|
||||
/* Derive ACS HW mode */
|
||||
sap_cfg->SapHw_mode = hdd_cfg_xlate_to_csr_phy_mode(
|
||||
hdd_ctx->config->dot11Mode);
|
||||
if (sap_cfg->SapHw_mode == eCSR_DOT11_MODE_AUTO)
|
||||
sap_cfg->SapHw_mode = eCSR_DOT11_MODE_11ac;
|
||||
if (sap_cfg->SapHw_mode == eCSR_DOT11_MODE_AUTO) {
|
||||
if (sme_is_feature_supported_by_fw(DOT11AX))
|
||||
sap_cfg->SapHw_mode = eCSR_DOT11_MODE_11ax;
|
||||
else
|
||||
sap_cfg->SapHw_mode = eCSR_DOT11_MODE_11ac;
|
||||
}
|
||||
|
||||
if (hdd_ctx->config->sap_force_11n_for_11ac) {
|
||||
if (sap_cfg->SapHw_mode == eCSR_DOT11_MODE_11ac ||
|
||||
@@ -7153,8 +7166,9 @@ setup_acs_overrides:
|
||||
/* Derive ACS BW */
|
||||
sap_cfg->ch_width_orig = eHT_CHANNEL_WIDTH_20MHZ;
|
||||
if (sap_cfg->SapHw_mode == eCSR_DOT11_MODE_11ac ||
|
||||
sap_cfg->SapHw_mode == eCSR_DOT11_MODE_11ac_ONLY) {
|
||||
|
||||
sap_cfg->SapHw_mode == eCSR_DOT11_MODE_11ac_ONLY ||
|
||||
sap_cfg->SapHw_mode == eCSR_DOT11_MODE_11ax ||
|
||||
sap_cfg->SapHw_mode == eCSR_DOT11_MODE_11ax_ONLY) {
|
||||
sap_cfg->ch_width_orig = hdd_ctx->config->vhtChannelWidth;
|
||||
/* VHT in 2.4G depends on gChannelBondingMode24GHz INI param */
|
||||
if (sap_cfg->acs_cfg.end_ch <= 14)
|
||||
|
@@ -93,7 +93,6 @@
|
||||
#include "wlan_hdd_driver_ops.h"
|
||||
#include "epping_main.h"
|
||||
#include "wlan_hdd_memdump.h"
|
||||
#include "wlan_hdd_he.h"
|
||||
|
||||
#include <wlan_hdd_ipa.h>
|
||||
#include "hif.h"
|
||||
@@ -117,6 +116,7 @@
|
||||
#include "os_if_wifi_pos.h"
|
||||
#include "wifi_pos_api.h"
|
||||
#include "wlan_hdd_oemdata.h"
|
||||
#include "wlan_hdd_he.h"
|
||||
|
||||
#ifdef CNSS_GENL
|
||||
#include <net/cnss_nl.h>
|
||||
@@ -783,6 +783,11 @@ static void hdd_update_tgt_services(hdd_context_t *hdd_ctx,
|
||||
/* Set up UAPSD */
|
||||
config->apUapsdEnabled &= cfg->uapsd;
|
||||
|
||||
/* 11AX mode support */
|
||||
if ((config->dot11Mode == eHDD_DOT11_MODE_11ax ||
|
||||
config->dot11Mode == eHDD_DOT11_MODE_11ax_ONLY) && !cfg->en_11ax)
|
||||
config->dot11Mode = eHDD_DOT11_MODE_11ac;
|
||||
|
||||
/* 11AC mode support */
|
||||
if ((config->dot11Mode == eHDD_DOT11_MODE_11ac ||
|
||||
config->dot11Mode == eHDD_DOT11_MODE_11ac_ONLY) && !cfg->en_11ac)
|
||||
|
@@ -9850,6 +9850,26 @@ static int __iw_get_char_setnone(struct net_device *dev,
|
||||
snprintf(extra, WE_MAX_STR_LEN,
|
||||
"11ACVHT160");
|
||||
break;
|
||||
case eCSR_DOT11_MODE_11ax:
|
||||
case eCSR_DOT11_MODE_11ax_ONLY:
|
||||
/* currently using vhtChannelWidth */
|
||||
if (hddctx->config->vhtChannelWidth ==
|
||||
eHT_CHANNEL_WIDTH_20MHZ)
|
||||
snprintf(extra, WE_MAX_STR_LEN,
|
||||
"11AX_HE_20");
|
||||
else if (hddctx->config->vhtChannelWidth ==
|
||||
eHT_CHANNEL_WIDTH_40MHZ)
|
||||
snprintf(extra, WE_MAX_STR_LEN,
|
||||
"11AX_HE_40");
|
||||
else if (hddctx->config->vhtChannelWidth ==
|
||||
eHT_CHANNEL_WIDTH_80MHZ)
|
||||
snprintf(extra, WE_MAX_STR_LEN,
|
||||
"11AX_HE_80");
|
||||
else if (hddctx->config->vhtChannelWidth ==
|
||||
eHT_CHANNEL_WIDTH_160MHZ)
|
||||
snprintf(extra, WE_MAX_STR_LEN,
|
||||
"11AX_HE_160");
|
||||
break;
|
||||
}
|
||||
|
||||
wrqu->data.length = strlen(extra) + 1;
|
||||
|
@@ -547,6 +547,7 @@ typedef enum eSirNwType {
|
||||
eSIR_11G_NW_TYPE,
|
||||
eSIR_11N_NW_TYPE,
|
||||
eSIR_11AC_NW_TYPE,
|
||||
eSIR_11AX_NW_TYPE,
|
||||
eSIR_DONOT_USE_NW_TYPE = SIR_MAX_ENUM_SIZE
|
||||
} tSirNwType;
|
||||
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2011-2015 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2011-2015, 2017 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
|
||||
*
|
||||
@@ -49,11 +49,20 @@
|
||||
(dot11Mode == WNI_CFG_DOT11_MODE_11N_ONLY) || \
|
||||
(dot11Mode == WNI_CFG_DOT11_MODE_11AC) || \
|
||||
(dot11Mode == WNI_CFG_DOT11_MODE_11AC_ONLY) || \
|
||||
(dot11Mode == WNI_CFG_DOT11_MODE_11AX) || \
|
||||
(dot11Mode == WNI_CFG_DOT11_MODE_11AX_ONLY) || \
|
||||
(dot11Mode == WNI_CFG_DOT11_MODE_ALL)) ? true:false)
|
||||
|
||||
#define IS_DOT11_MODE_VHT(dot11Mode) \
|
||||
(((dot11Mode == WNI_CFG_DOT11_MODE_11AC) || \
|
||||
(dot11Mode == WNI_CFG_DOT11_MODE_11AC_ONLY) || \
|
||||
(dot11Mode == WNI_CFG_DOT11_MODE_11AX) || \
|
||||
(dot11Mode == WNI_CFG_DOT11_MODE_11AX_ONLY) || \
|
||||
(dot11Mode == WNI_CFG_DOT11_MODE_ALL)) ? true:false)
|
||||
|
||||
#define IS_DOT11_MODE_HE(dot11Mode) \
|
||||
(((dot11Mode == WNI_CFG_DOT11_MODE_11AX) || \
|
||||
(dot11Mode == WNI_CFG_DOT11_MODE_11AX_ONLY) || \
|
||||
(dot11Mode == WNI_CFG_DOT11_MODE_ALL)) ? true:false)
|
||||
|
||||
#define IS_DOT11_MODE_11B(dot11Mode) \
|
||||
|
@@ -491,7 +491,7 @@ enum {
|
||||
#define WNI_CFG_PHY_MODE_NONE 3
|
||||
|
||||
#define WNI_CFG_DOT11_MODE_STAMIN 0
|
||||
#define WNI_CFG_DOT11_MODE_STAMAX 11
|
||||
#define WNI_CFG_DOT11_MODE_STAMAX 10
|
||||
#define WNI_CFG_DOT11_MODE_STADEF 0
|
||||
|
||||
#define WNI_CFG_DOT11_MODE_ALL 0
|
||||
@@ -503,6 +503,8 @@ enum {
|
||||
#define WNI_CFG_DOT11_MODE_11N_ONLY 6
|
||||
#define WNI_CFG_DOT11_MODE_11AC 7
|
||||
#define WNI_CFG_DOT11_MODE_11AC_ONLY 8
|
||||
#define WNI_CFG_DOT11_MODE_11AX 9
|
||||
#define WNI_CFG_DOT11_MODE_11AX_ONLY 10
|
||||
|
||||
#define WNI_CFG_LISTEN_INTERVAL_STAMIN 0
|
||||
#define WNI_CFG_LISTEN_INTERVAL_STAMAX 65535
|
||||
|
@@ -493,6 +493,7 @@ typedef struct sPESession /* Added to Support BT-AMP */
|
||||
bool ignore_assoc_disallowed;
|
||||
bool send_p2p_conf_frame;
|
||||
bool process_ho_fail;
|
||||
bool he_capable;
|
||||
} tPESession, *tpPESession;
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
|
@@ -527,6 +527,7 @@ lim_mlm_add_bss(tpAniSirGlobal mac_ctx,
|
||||
addbss_param->nwType = mlm_start_req->nwType;
|
||||
addbss_param->htCapable = mlm_start_req->htCapable;
|
||||
addbss_param->vhtCapable = session->vhtCapability;
|
||||
addbss_param->he_capable = session->he_capable;
|
||||
addbss_param->ch_width = session->ch_width;
|
||||
addbss_param->ch_center_freq_seg0 =
|
||||
session->ch_center_freq_seg0;
|
||||
|
@@ -794,9 +794,12 @@ __lim_handle_sme_start_bss_request(tpAniSirGlobal mac_ctx, uint32_t *msg_buf)
|
||||
IS_DOT11_MODE_HT(session->dot11mode);
|
||||
session->vhtCapability =
|
||||
IS_DOT11_MODE_VHT(session->dot11mode);
|
||||
QDF_TRACE(QDF_MODULE_ID_PE, QDF_TRACE_LEVEL_INFO,
|
||||
FL("*****session->vhtCapability = %d"),
|
||||
session->vhtCapability);
|
||||
session->he_capable =
|
||||
IS_DOT11_MODE_HE(session->dot11mode);
|
||||
|
||||
lim_log(mac_ctx, LOG1, FL("HT[%d], VHT[%d], HE[%d]"),
|
||||
session->htCapability, session->vhtCapability,
|
||||
session->he_capable);
|
||||
session->txLdpcIniFeatureEnabled =
|
||||
sme_start_bss_req->txLdpcIniFeatureEnabled;
|
||||
#ifdef WLAN_FEATURE_11W
|
||||
@@ -899,7 +902,8 @@ __lim_handle_sme_start_bss_request(tpAniSirGlobal mac_ctx, uint32_t *msg_buf)
|
||||
(session->htSecondaryChannelOffset) ? 1 : 0;
|
||||
QDF_TRACE(QDF_MODULE_ID_PE, QDF_TRACE_LEVEL_INFO,
|
||||
FL("cbMode %u"), sme_start_bss_req->cbMode);
|
||||
if (session->vhtCapability || session->htCapability) {
|
||||
if (session->he_capable || session->vhtCapability ||
|
||||
session->htCapability) {
|
||||
chanwidth = sme_start_bss_req->vht_channel_width;
|
||||
lim_log(mac_ctx, LOG1,
|
||||
FL("vht_channel_width %u htSupportedChannelWidthSet %d"),
|
||||
@@ -918,7 +922,7 @@ __lim_handle_sme_start_bss_request(tpAniSirGlobal mac_ctx, uint32_t *msg_buf)
|
||||
}
|
||||
|
||||
if (session->vhtCapability &&
|
||||
(session->ch_width > CH_WIDTH_80MHZ)) {
|
||||
(session->ch_width > CH_WIDTH_80MHZ)) {
|
||||
session->nss = 1;
|
||||
lim_log(mac_ctx, LOG1, FL("nss set to [%d]"),
|
||||
session->nss);
|
||||
@@ -1700,8 +1704,10 @@ __lim_process_sme_join_req(tpAniSirGlobal mac_ctx, uint32_t *msg_buf)
|
||||
/*Store Persona */
|
||||
session->pePersona = sme_join_req->staPersona;
|
||||
QDF_TRACE(QDF_MODULE_ID_PE, QDF_TRACE_LEVEL_INFO,
|
||||
FL("PE PERSONA=%d cbMode %u"),
|
||||
session->pePersona, sme_join_req->cbMode);
|
||||
FL("PE PERSONA=%d cbMode %u nwType: %d dot11mode: %d"),
|
||||
session->pePersona, sme_join_req->cbMode,
|
||||
session->nwType, session->dot11mode);
|
||||
|
||||
/* Copy The channel Id to the session Table */
|
||||
session->currentOperChannel = bss_desc->channelId;
|
||||
if (IS_5G_CH(session->currentOperChannel))
|
||||
@@ -1730,12 +1736,16 @@ __lim_process_sme_join_req(tpAniSirGlobal mac_ctx, uint32_t *msg_buf)
|
||||
session->vht_config.su_beam_former);
|
||||
}
|
||||
|
||||
session->he_capable =
|
||||
IS_DOT11_MODE_HE(session->dot11mode);
|
||||
|
||||
lim_log(mac_ctx, LOG1,
|
||||
FL("vhtCapability: %d su_beam_formee: %d txbf_csn_value: %d su_tx_bformer %d"),
|
||||
FL("vhtCapability: %d su_beam_formee: %d txbf_csn_value: %d su_tx_bformer %d he_capable: %d"),
|
||||
session->vhtCapability,
|
||||
session->vht_config.su_beam_formee,
|
||||
session->vht_config.csnof_beamformer_antSup,
|
||||
session->vht_config.su_beam_former);
|
||||
session->vht_config.su_beam_former,
|
||||
session->he_capable);
|
||||
/*Phy mode */
|
||||
session->gLimPhyMode = bss_desc->nwType;
|
||||
handle_ht_capabilityand_ht_info(mac_ctx, session);
|
||||
|
@@ -237,9 +237,12 @@ tSirRetStatus lim_send_switch_chnl_params(tpAniSirGlobal pMac,
|
||||
sizeof(tSirMacAddr));
|
||||
pChnlParams->peSessionId = peSessionId;
|
||||
pChnlParams->vhtCapable = pSessionEntry->vhtCapability;
|
||||
pChnlParams->he_capable = pSessionEntry->he_capable;
|
||||
pChnlParams->dot11_mode = pSessionEntry->dot11mode;
|
||||
pChnlParams->nss = pSessionEntry->nss;
|
||||
lim_log(pMac, LOG2, FL("nss value: %d"), pChnlParams->nss);
|
||||
lim_log(pMac, LOG1, FL("dot11mode: %d, he_capable: %d, vht_capable: %d nss value: %d"),
|
||||
pChnlParams->dot11_mode, pChnlParams->he_capable,
|
||||
pChnlParams->vhtCapable, pChnlParams->nss);
|
||||
|
||||
/*Set DFS flag for DFS channel */
|
||||
if (ch_width == CH_WIDTH_160MHZ) {
|
||||
|
@@ -3184,13 +3184,17 @@ wlansap_update_sap_config_add_ie(tsap_Config_t *pConfig,
|
||||
bufferLength = additionIELength;
|
||||
pBuffer = qdf_mem_malloc(bufferLength);
|
||||
if (NULL == pBuffer) {
|
||||
QDF_TRACE(QDF_MODULE_ID_SME,
|
||||
QDF_TRACE(QDF_MODULE_ID_SAP,
|
||||
QDF_TRACE_LEVEL_ERROR,
|
||||
FL("Could not allocate the buffer "));
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
}
|
||||
qdf_mem_copy(pBuffer, pAdditionIEBuffer, bufferLength);
|
||||
bufferValid = true;
|
||||
QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO,
|
||||
FL("update_type: %d"), updateType);
|
||||
qdf_trace_hex_dump(QDF_MODULE_ID_SAP,
|
||||
QDF_TRACE_LEVEL_INFO, pBuffer, bufferLength);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3203,9 +3207,8 @@ wlansap_update_sap_config_add_ie(tsap_Config_t *pConfig,
|
||||
qdf_mem_free(pConfig->pProbeRespBcnIEsBuffer);
|
||||
pConfig->probeRespBcnIEsLen = 0;
|
||||
pConfig->pProbeRespBcnIEsBuffer = NULL;
|
||||
QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_INFO,
|
||||
FL
|
||||
("No Probe Resp beacone IE received in set beacon"));
|
||||
QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO,
|
||||
FL("No Probe Resp beacone IE received in set beacon"));
|
||||
}
|
||||
break;
|
||||
case eUPDATE_IE_PROBE_RESP:
|
||||
@@ -3216,9 +3219,8 @@ wlansap_update_sap_config_add_ie(tsap_Config_t *pConfig,
|
||||
qdf_mem_free(pConfig->pProbeRespIEsBuffer);
|
||||
pConfig->probeRespIEsBufferLen = 0;
|
||||
pConfig->pProbeRespIEsBuffer = NULL;
|
||||
QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_INFO,
|
||||
FL
|
||||
("No Probe Response IE received in set beacon"));
|
||||
QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO,
|
||||
FL("No Probe Response IE received in set beacon"));
|
||||
}
|
||||
break;
|
||||
case eUPDATE_IE_ASSOC_RESP:
|
||||
@@ -3229,13 +3231,12 @@ wlansap_update_sap_config_add_ie(tsap_Config_t *pConfig,
|
||||
qdf_mem_free(pConfig->pAssocRespIEsBuffer);
|
||||
pConfig->assocRespIEsLen = 0;
|
||||
pConfig->pAssocRespIEsBuffer = NULL;
|
||||
QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_INFO,
|
||||
FL
|
||||
("No Assoc Response IE received in set beacon"));
|
||||
QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO,
|
||||
FL("No Assoc Response IE received in set beacon"));
|
||||
}
|
||||
break;
|
||||
default:
|
||||
QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_INFO,
|
||||
QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO,
|
||||
FL("No matching buffer type %d"), updateType);
|
||||
if (pBuffer != NULL)
|
||||
qdf_mem_free(pBuffer);
|
||||
|
@@ -132,6 +132,8 @@ typedef enum {
|
||||
* It is for CSR internal use
|
||||
*/
|
||||
eCSR_DOT11_MODE_AUTO = 0x0400,
|
||||
eCSR_DOT11_MODE_11ax = 0x0800,
|
||||
eCSR_DOT11_MODE_11ax_ONLY = 0x1000,
|
||||
|
||||
/* specify the number of maximum bits for phyMode */
|
||||
eCSR_NUM_PHY_MODE = 16,
|
||||
|
@@ -110,6 +110,8 @@ typedef enum {
|
||||
eCSR_CFG_DOT11_MODE_11AC_ONLY,
|
||||
/* This value can never set to CFG. Its for CSR's internal use */
|
||||
eCSR_CFG_DOT11_MODE_AUTO,
|
||||
eCSR_CFG_DOT11_MODE_11AX,
|
||||
eCSR_CFG_DOT11_MODE_11AX_ONLY,
|
||||
} eCsrCfgDot11Mode;
|
||||
|
||||
typedef enum {
|
||||
@@ -1115,17 +1117,9 @@ typedef struct tagCsrRoamStruct {
|
||||
((eCSR_DOT11_MODE_abg & (phyMode)) || \
|
||||
(eCSR_DOT11_MODE_11n & (phyMode)) || \
|
||||
(eCSR_DOT11_MODE_11ac & (phyMode)) || \
|
||||
(eCSR_DOT11_MODE_11ax & (phyMode)) || \
|
||||
(eCSR_DOT11_MODE_AUTO & (phyMode)))
|
||||
|
||||
#define CSR_IS_PHY_MODE_11n(phy_mode) \
|
||||
((eCSR_DOT11_MODE_11n == phy_mode) || \
|
||||
(eCSR_DOT11_MODE_11n_ONLY == phy_mode) || \
|
||||
(eCSR_DOT11_MODE_11ac == phy_mode) || \
|
||||
(eCSR_DOT11_MODE_11ac_ONLY == phy_mode))
|
||||
|
||||
#define CSR_IS_PHY_MODE_11ac(phy_mode) \
|
||||
((eCSR_DOT11_MODE_11ac == phy_mode) || \
|
||||
(eCSR_DOT11_MODE_11ac_ONLY == phy_mode))
|
||||
/*
|
||||
* this function returns true if the NIC is operating exclusively in
|
||||
* the 2.4 GHz band, meaning. it is NOT operating in the 5.0 GHz band.
|
||||
|
@@ -6173,6 +6173,12 @@ static eCsrPhyMode csr_roamdot11mode_to_phymode(uint8_t dot11mode)
|
||||
case WNI_CFG_DOT11_MODE_11AC_ONLY:
|
||||
phymode = eCSR_DOT11_MODE_11ac_ONLY;
|
||||
break;
|
||||
case WNI_CFG_DOT11_MODE_11AX:
|
||||
phymode = eCSR_DOT11_MODE_11ax;
|
||||
break;
|
||||
case WNI_CFG_DOT11_MODE_11AX_ONLY:
|
||||
phymode = eCSR_DOT11_MODE_11ax_ONLY;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -7579,7 +7585,9 @@ QDF_STATUS csr_roam_issue_connect(tpAniSirGlobal pMac, uint32_t sessionId,
|
||||
pCommand->u.roamCmd.fReleaseBssList = true;
|
||||
pCommand->u.roamCmd.fUpdateCurRoamProfile = true;
|
||||
QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_INFO,
|
||||
FL("CSR PERSONA=%d"),
|
||||
FL("phymode: %d, cbmode: %d, CSR PERSONA=%d"),
|
||||
pCommand->u.roamCmd.roamProfile.phyMode,
|
||||
pCommand->u.roamCmd.roamProfile.CBMode,
|
||||
pCommand->u.roamCmd.roamProfile.csrPersona);
|
||||
status = csr_queue_sme_command(pMac, pCommand, fImediate);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status)) {
|
||||
@@ -12021,6 +12029,7 @@ csr_compute_mode_and_band(tpAniSirGlobal mac_ctx,
|
||||
uint8_t opr_ch)
|
||||
{
|
||||
bool vht_24_ghz = mac_ctx->roam.configParam.enableVhtFor24GHz;
|
||||
|
||||
switch (mac_ctx->roam.configParam.uCfgDot11Mode) {
|
||||
case eCSR_CFG_DOT11_MODE_11A:
|
||||
*dot11_mode = eCSR_CFG_DOT11_MODE_11A;
|
||||
@@ -12070,8 +12079,29 @@ csr_compute_mode_and_band(tpAniSirGlobal mac_ctx,
|
||||
}
|
||||
*band = CSR_GET_BAND(opr_ch);
|
||||
break;
|
||||
case eCSR_CFG_DOT11_MODE_11AX:
|
||||
case eCSR_CFG_DOT11_MODE_11AX_ONLY:
|
||||
if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AX)) {
|
||||
*dot11_mode = mac_ctx->roam.configParam.uCfgDot11Mode;
|
||||
} else if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AC)) {
|
||||
/*
|
||||
* If the operating channel is in 2.4 GHz band, check
|
||||
* for INI item to disable VHT operation in 2.4 GHz band
|
||||
*/
|
||||
if (CDS_IS_CHANNEL_24GHZ(opr_ch) && !vht_24_ghz)
|
||||
/* Disable 11AC operation */
|
||||
*dot11_mode = eCSR_CFG_DOT11_MODE_11N;
|
||||
else
|
||||
*dot11_mode = eCSR_CFG_DOT11_MODE_11AC;
|
||||
} else {
|
||||
*dot11_mode = eCSR_CFG_DOT11_MODE_11N;
|
||||
}
|
||||
*band = CSR_GET_BAND(opr_ch);
|
||||
break;
|
||||
case eCSR_CFG_DOT11_MODE_AUTO:
|
||||
if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AC)) {
|
||||
if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AX)) {
|
||||
*dot11_mode = eCSR_CFG_DOT11_MODE_11AX;
|
||||
} else if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AC)) {
|
||||
/*
|
||||
* If the operating channel is in 2.4 GHz band,
|
||||
* check for INI item to disable VHT operation
|
||||
@@ -12217,6 +12247,7 @@ csr_roam_get_phy_mode_band_for_bss(tpAniSirGlobal mac_ctx,
|
||||
else
|
||||
cfg_dot11_mode = eCSR_CFG_DOT11_MODE_11A;
|
||||
}
|
||||
sms_log(mac_ctx, LOG1, FL("dot11mode: %d"), cfg_dot11_mode);
|
||||
return cfg_dot11_mode;
|
||||
}
|
||||
|
||||
@@ -14028,9 +14059,11 @@ QDF_STATUS csr_send_join_req_msg(tpAniSirGlobal pMac, uint32_t sessionId,
|
||||
csr_join_req->staPersona = (uint8_t) pProfile->csrPersona;
|
||||
csr_join_req->wps_registration = pProfile->bWPSAssociation;
|
||||
csr_join_req->cbMode = (uint8_t) pSession->bssParams.cbMode;
|
||||
sms_log(pMac, LOG2,
|
||||
FL("CSR PERSONA=%d CSR CbMode %d"),
|
||||
pProfile->csrPersona, pSession->bssParams.cbMode);
|
||||
sms_log(pMac, LOG1,
|
||||
FL("CSR PERSONA=%d CSR CbMode %d dot11mode: %d"),
|
||||
pProfile->csrPersona, pSession->bssParams.cbMode,
|
||||
csr_join_req->dot11mode);
|
||||
|
||||
csr_join_req->uapsdPerAcBitmask = pProfile->uapsd_mask;
|
||||
pSession->uapsd_mask = pProfile->uapsd_mask;
|
||||
status =
|
||||
|
@@ -1051,7 +1051,9 @@ static void csr_calc_chb_for_sap_phymode(tpAniSirGlobal mac_ctx,
|
||||
*sap_cch = CSR_GET_HT40_MINUS_CCH(*sap_ch);
|
||||
|
||||
} else if (*sap_phymode == eCSR_DOT11_MODE_11ac ||
|
||||
*sap_phymode == eCSR_DOT11_MODE_11ac_ONLY) {
|
||||
*sap_phymode == eCSR_DOT11_MODE_11ac_ONLY ||
|
||||
*sap_phymode == eCSR_DOT11_MODE_11ax ||
|
||||
*sap_phymode == eCSR_DOT11_MODE_11ax_ONLY) {
|
||||
/*11AC only 80/40/20 Mhz supported in Rome */
|
||||
if (mac_ctx->roam.configParam.nVhtChannelWidth ==
|
||||
(WNI_CFG_VHT_CHANNEL_WIDTH_80MHZ + 1)) {
|
||||
@@ -1847,6 +1849,9 @@ static eCsrPhyMode csr_translate_to_phy_mode_from_bss_desc(
|
||||
case eSIR_11N_NW_TYPE:
|
||||
phyMode = eCSR_DOT11_MODE_11n;
|
||||
break;
|
||||
case eSIR_11AX_NW_TYPE:
|
||||
phyMode = eCSR_DOT11_MODE_11ax;
|
||||
break;
|
||||
case eSIR_11AC_NW_TYPE:
|
||||
default:
|
||||
phyMode = eCSR_DOT11_MODE_11ac;
|
||||
@@ -1864,7 +1869,9 @@ uint32_t csr_translate_to_wni_cfg_dot11_mode(tpAniSirGlobal pMac,
|
||||
case eCSR_CFG_DOT11_MODE_AUTO:
|
||||
sms_log(pMac, LOGW,
|
||||
FL(" Warning: sees eCSR_CFG_DOT11_MODE_AUTO "));
|
||||
if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AC))
|
||||
if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AX))
|
||||
ret = WNI_CFG_DOT11_MODE_11AX;
|
||||
else if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AC))
|
||||
ret = WNI_CFG_DOT11_MODE_11AC;
|
||||
else
|
||||
ret = WNI_CFG_DOT11_MODE_11N;
|
||||
@@ -1899,6 +1906,22 @@ uint32_t csr_translate_to_wni_cfg_dot11_mode(tpAniSirGlobal pMac,
|
||||
else
|
||||
ret = WNI_CFG_DOT11_MODE_11N;
|
||||
break;
|
||||
case eCSR_CFG_DOT11_MODE_11AX_ONLY:
|
||||
if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AX))
|
||||
ret = WNI_CFG_DOT11_MODE_11AX_ONLY;
|
||||
else if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AC))
|
||||
ret = WNI_CFG_DOT11_MODE_11AC;
|
||||
else
|
||||
ret = WNI_CFG_DOT11_MODE_11N;
|
||||
break;
|
||||
case eCSR_CFG_DOT11_MODE_11AX:
|
||||
if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AX))
|
||||
ret = WNI_CFG_DOT11_MODE_11AX;
|
||||
else if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AC))
|
||||
ret = WNI_CFG_DOT11_MODE_11AC;
|
||||
else
|
||||
ret = WNI_CFG_DOT11_MODE_11N;
|
||||
break;
|
||||
default:
|
||||
sms_log(pMac, LOGW, FL("doesn't expect %d as csrDo11Mode"),
|
||||
csrDot11Mode);
|
||||
@@ -1939,6 +1962,8 @@ QDF_STATUS csr_get_phy_mode_from_bss(tpAniSirGlobal pMac,
|
||||
if (IS_BSS_VHT_CAPABLE(pIes->VHTCaps) ||
|
||||
IS_BSS_VHT_CAPABLE(pIes->vendor_vht_ie.VHTCaps))
|
||||
phyMode = eCSR_DOT11_MODE_11ac;
|
||||
if (pIes->vendor_he_cap.present)
|
||||
phyMode = eCSR_DOT11_MODE_11ax;
|
||||
}
|
||||
*pPhyMode = phyMode;
|
||||
}
|
||||
@@ -2032,6 +2057,7 @@ static bool csr_get_phy_mode_in_use(eCsrPhyMode phyModeIn,
|
||||
break;
|
||||
case eCSR_DOT11_MODE_11n:
|
||||
case eCSR_DOT11_MODE_11ac:
|
||||
case eCSR_DOT11_MODE_11ax:
|
||||
cfgDot11Mode = eCSR_CFG_DOT11_MODE_11N;
|
||||
break;
|
||||
|
||||
@@ -2065,6 +2091,7 @@ static bool csr_get_phy_mode_in_use(eCsrPhyMode phyModeIn,
|
||||
cfgDot11Mode = eCSR_CFG_DOT11_MODE_11N;
|
||||
break;
|
||||
case eCSR_DOT11_MODE_11ac:
|
||||
case eCSR_DOT11_MODE_11ax:
|
||||
default:
|
||||
cfgDot11Mode = eCSR_CFG_DOT11_MODE_11AC;
|
||||
break;
|
||||
@@ -2077,6 +2104,37 @@ static bool csr_get_phy_mode_in_use(eCsrPhyMode phyModeIn,
|
||||
cfgDot11Mode = eCSR_CFG_DOT11_MODE_11AC;
|
||||
}
|
||||
break;
|
||||
case eCSR_DOT11_MODE_11ax:
|
||||
fMatch = true;
|
||||
switch (bssPhyMode) {
|
||||
case eCSR_DOT11_MODE_11g:
|
||||
cfgDot11Mode = eCSR_CFG_DOT11_MODE_11G;
|
||||
break;
|
||||
case eCSR_DOT11_MODE_11b:
|
||||
cfgDot11Mode = eCSR_CFG_DOT11_MODE_11B;
|
||||
break;
|
||||
case eCSR_DOT11_MODE_11a:
|
||||
cfgDot11Mode = eCSR_CFG_DOT11_MODE_11A;
|
||||
break;
|
||||
case eCSR_DOT11_MODE_11n:
|
||||
cfgDot11Mode = eCSR_CFG_DOT11_MODE_11N;
|
||||
break;
|
||||
case eCSR_DOT11_MODE_11ac:
|
||||
cfgDot11Mode = eCSR_CFG_DOT11_MODE_11AC;
|
||||
break;
|
||||
case eCSR_DOT11_MODE_11ax:
|
||||
default:
|
||||
cfgDot11Mode = eCSR_CFG_DOT11_MODE_11AX;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case eCSR_DOT11_MODE_11ax_ONLY:
|
||||
if (eCSR_DOT11_MODE_11ax == bssPhyMode) {
|
||||
fMatch = true;
|
||||
cfgDot11Mode = eCSR_CFG_DOT11_MODE_11AX;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
fMatch = true;
|
||||
@@ -2096,6 +2154,9 @@ static bool csr_get_phy_mode_in_use(eCsrPhyMode phyModeIn,
|
||||
case eCSR_DOT11_MODE_11ac:
|
||||
cfgDot11Mode = eCSR_CFG_DOT11_MODE_11AC;
|
||||
break;
|
||||
case eCSR_DOT11_MODE_11ax:
|
||||
cfgDot11Mode = eCSR_CFG_DOT11_MODE_11AX;
|
||||
break;
|
||||
default:
|
||||
cfgDot11Mode = eCSR_CFG_DOT11_MODE_AUTO;
|
||||
break;
|
||||
@@ -2104,11 +2165,20 @@ static bool csr_get_phy_mode_in_use(eCsrPhyMode phyModeIn,
|
||||
}
|
||||
|
||||
if (fMatch && pCfgDot11ModeToUse) {
|
||||
if (cfgDot11Mode == eCSR_CFG_DOT11_MODE_11AC
|
||||
&& (!IS_FEATURE_SUPPORTED_BY_FW(DOT11AC)))
|
||||
*pCfgDot11ModeToUse = eCSR_CFG_DOT11_MODE_11N;
|
||||
else
|
||||
*pCfgDot11ModeToUse = cfgDot11Mode;
|
||||
if (cfgDot11Mode == eCSR_CFG_DOT11_MODE_11AX) {
|
||||
if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AX))
|
||||
*pCfgDot11ModeToUse = eCSR_CFG_DOT11_MODE_11AX;
|
||||
else if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AC))
|
||||
*pCfgDot11ModeToUse = eCSR_CFG_DOT11_MODE_11AC;
|
||||
else
|
||||
*pCfgDot11ModeToUse = eCSR_CFG_DOT11_MODE_11N;
|
||||
} else {
|
||||
if (cfgDot11Mode == eCSR_CFG_DOT11_MODE_11AC
|
||||
&& (!IS_FEATURE_SUPPORTED_BY_FW(DOT11AC)))
|
||||
*pCfgDot11ModeToUse = eCSR_CFG_DOT11_MODE_11N;
|
||||
else
|
||||
*pCfgDot11ModeToUse = cfgDot11Mode;
|
||||
}
|
||||
}
|
||||
return fMatch;
|
||||
}
|
||||
@@ -2144,14 +2214,20 @@ bool csr_is_phy_mode_match(tpAniSirGlobal pMac, uint32_t phyMode,
|
||||
|
||||
if ((0 == phyMode) || (eCSR_DOT11_MODE_AUTO & phyMode)) {
|
||||
if (eCSR_CFG_DOT11_MODE_ABG ==
|
||||
pMac->roam.configParam.uCfgDot11Mode)
|
||||
pMac->roam.configParam.uCfgDot11Mode) {
|
||||
phyMode = eCSR_DOT11_MODE_abg;
|
||||
else if (eCSR_CFG_DOT11_MODE_AUTO ==
|
||||
pMac->roam.configParam.uCfgDot11Mode)
|
||||
phyMode = eCSR_DOT11_MODE_11ac;
|
||||
else
|
||||
} else if (eCSR_CFG_DOT11_MODE_AUTO ==
|
||||
pMac->roam.configParam.uCfgDot11Mode) {
|
||||
if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AX))
|
||||
phyMode = eCSR_DOT11_MODE_11ax;
|
||||
else if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AC))
|
||||
phyMode = eCSR_DOT11_MODE_11ac;
|
||||
else
|
||||
phyMode = eCSR_DOT11_MODE_11n;
|
||||
} else {
|
||||
/* user's pick */
|
||||
phyMode = pMac->roam.configParam.phyMode;
|
||||
}
|
||||
}
|
||||
|
||||
if ((0 == phyMode) || (eCSR_DOT11_MODE_AUTO & phyMode)) {
|
||||
@@ -2195,6 +2271,8 @@ bool csr_is_phy_mode_match(tpAniSirGlobal pMac, uint32_t phyMode,
|
||||
&& ((eCSR_CFG_DOT11_MODE_11N ==
|
||||
cfgDot11ModeToUse) ||
|
||||
(eCSR_CFG_DOT11_MODE_11AC ==
|
||||
cfgDot11ModeToUse) ||
|
||||
(eCSR_CFG_DOT11_MODE_11AX ==
|
||||
cfgDot11ModeToUse))) {
|
||||
/* We cannot do 11n here */
|
||||
if (!CDS_IS_CHANNEL_5GHZ
|
||||
@@ -2219,8 +2297,19 @@ eCsrCfgDot11Mode csr_find_best_phy_mode(tpAniSirGlobal pMac, uint32_t phyMode)
|
||||
eCsrBand eBand = pMac->roam.configParam.eBand;
|
||||
|
||||
if ((0 == phyMode) ||
|
||||
(eCSR_DOT11_MODE_11ac & phyMode) ||
|
||||
(eCSR_DOT11_MODE_AUTO & phyMode)) {
|
||||
(eCSR_DOT11_MODE_AUTO & phyMode) ||
|
||||
(eCSR_DOT11_MODE_11ax & phyMode)) {
|
||||
if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AX)) {
|
||||
cfgDot11ModeToUse = eCSR_CFG_DOT11_MODE_11AX;
|
||||
} else if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AC)) {
|
||||
cfgDot11ModeToUse = eCSR_CFG_DOT11_MODE_11AC;
|
||||
} else {
|
||||
/* Default to 11N mode if user has configured 11ac mode
|
||||
* and FW doesn't supports 11ac mode .
|
||||
*/
|
||||
cfgDot11ModeToUse = eCSR_CFG_DOT11_MODE_11N;
|
||||
}
|
||||
} else if (eCSR_DOT11_MODE_11ac & phyMode) {
|
||||
if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AC)) {
|
||||
cfgDot11ModeToUse = eCSR_CFG_DOT11_MODE_11AC;
|
||||
} else {
|
||||
@@ -5784,6 +5873,23 @@ eCsrCfgDot11Mode csr_get_cfg_dot11_mode_from_csr_phy_mode(tCsrRoamProfile *pProf
|
||||
cfgDot11Mode = eCSR_CFG_DOT11_MODE_11N;
|
||||
}
|
||||
break;
|
||||
case eCSR_DOT11_MODE_11ax:
|
||||
if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AX))
|
||||
cfgDot11Mode = eCSR_CFG_DOT11_MODE_11AX;
|
||||
else if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AC))
|
||||
cfgDot11Mode = eCSR_CFG_DOT11_MODE_11AC;
|
||||
else
|
||||
cfgDot11Mode = eCSR_CFG_DOT11_MODE_11N;
|
||||
break;
|
||||
case eCSR_DOT11_MODE_11ax_ONLY:
|
||||
if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AX))
|
||||
cfgDot11Mode = eCSR_CFG_DOT11_MODE_11AX_ONLY;
|
||||
else if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AC))
|
||||
cfgDot11Mode = eCSR_CFG_DOT11_MODE_11AC;
|
||||
else
|
||||
cfgDot11Mode = eCSR_CFG_DOT11_MODE_11N;
|
||||
break;
|
||||
|
||||
default:
|
||||
/* No need to assign anything here */
|
||||
break;
|
||||
|
@@ -1695,6 +1695,7 @@ struct wma_target_req {
|
||||
* number of transmit streams
|
||||
* @preferred_rx_streams: policy manager indicates the preferred
|
||||
* number of receive streams
|
||||
* @he_capable: HE capability
|
||||
*/
|
||||
struct wma_vdev_start_req {
|
||||
uint32_t beacon_intval;
|
||||
@@ -1719,6 +1720,7 @@ struct wma_vdev_start_req {
|
||||
uint32_t preferred_tx_streams;
|
||||
uint32_t preferred_rx_streams;
|
||||
uint8_t beacon_tx_rate;
|
||||
bool he_capable;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@@ -450,6 +450,7 @@ typedef struct sLimMlmSetKeysReq {
|
||||
* @chainMask: chain mask
|
||||
* @smpsMode: SMPS mode
|
||||
* @dot11_mode: 802.11 mode
|
||||
* @he_capable: HE Capability
|
||||
*/
|
||||
typedef struct {
|
||||
tSirMacAddr bssId;
|
||||
@@ -516,6 +517,7 @@ typedef struct {
|
||||
uint8_t beacon_tx_rate;
|
||||
uint32_t tx_aggregation_size;
|
||||
uint32_t rx_aggregation_size;
|
||||
bool he_capable;
|
||||
} tAddBssParams, *tpAddBssParams;
|
||||
|
||||
/**
|
||||
@@ -910,6 +912,7 @@ typedef struct {
|
||||
|
||||
uint8_t restart_on_chan_switch;
|
||||
uint8_t nss;
|
||||
bool he_capable;
|
||||
} tSwitchChannelParams, *tpSwitchChannelParams;
|
||||
|
||||
typedef void (*tpSetLinkStateCallback)(tpAniSirGlobal pMac, void *msgParam,
|
||||
|
@@ -2935,6 +2935,7 @@ static void wma_add_bss_ap_mode(tp_wma_handle wma, tpAddBssParams add_bss)
|
||||
req.ch_center_freq_seg0 = add_bss->ch_center_freq_seg0;
|
||||
req.ch_center_freq_seg1 = add_bss->ch_center_freq_seg1;
|
||||
req.vht_capable = add_bss->vhtCapable;
|
||||
req.he_capable = add_bss->he_capable;
|
||||
req.max_txpow = add_bss->maxTxPower;
|
||||
maxTxPower = add_bss->maxTxPower;
|
||||
|
||||
|
@@ -906,7 +906,8 @@ WLAN_PHY_MODE wma_chan_phy_mode(u8 chan, enum phy_ch_width chan_width,
|
||||
(WNI_CFG_DOT11_MODE_11G == dot11_mode) ||
|
||||
(WNI_CFG_DOT11_MODE_11N == dot11_mode) ||
|
||||
(WNI_CFG_DOT11_MODE_ALL == dot11_mode) ||
|
||||
(WNI_CFG_DOT11_MODE_11AC == dot11_mode)))
|
||||
(WNI_CFG_DOT11_MODE_11AC == dot11_mode) ||
|
||||
(WNI_CFG_DOT11_MODE_11AX == dot11_mode)))
|
||||
phymode = MODE_11G;
|
||||
else {
|
||||
switch (dot11_mode) {
|
||||
@@ -940,6 +941,13 @@ WLAN_PHY_MODE wma_chan_phy_mode(u8 chan, enum phy_ch_width chan_width,
|
||||
else if (40 == bw_val)
|
||||
phymode = MODE_11AC_VHT40_2G;
|
||||
break;
|
||||
case WNI_CFG_DOT11_MODE_11AX:
|
||||
case WNI_CFG_DOT11_MODE_11AX_ONLY:
|
||||
if (20 == bw_val)
|
||||
phymode = MODE_11AX_HE20_2G;
|
||||
else if (40 == bw_val)
|
||||
phymode = MODE_11AX_HE40_2G;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -952,7 +960,8 @@ WLAN_PHY_MODE wma_chan_phy_mode(u8 chan, enum phy_ch_width chan_width,
|
||||
((WNI_CFG_DOT11_MODE_11A == dot11_mode) ||
|
||||
(WNI_CFG_DOT11_MODE_11N == dot11_mode) ||
|
||||
(WNI_CFG_DOT11_MODE_ALL == dot11_mode) ||
|
||||
(WNI_CFG_DOT11_MODE_11AC == dot11_mode)))
|
||||
(WNI_CFG_DOT11_MODE_11AC == dot11_mode) ||
|
||||
(WNI_CFG_DOT11_MODE_11AX == dot11_mode)))
|
||||
phymode = MODE_11A;
|
||||
else {
|
||||
switch (dot11_mode) {
|
||||
@@ -981,6 +990,19 @@ WLAN_PHY_MODE wma_chan_phy_mode(u8 chan, enum phy_ch_width chan_width,
|
||||
else if (CH_WIDTH_80P80MHZ == chan_width)
|
||||
phymode = MODE_11AC_VHT80_80;
|
||||
break;
|
||||
case WNI_CFG_DOT11_MODE_11AX:
|
||||
case WNI_CFG_DOT11_MODE_11AX_ONLY:
|
||||
if (20 == bw_val)
|
||||
phymode = MODE_11AX_HE20;
|
||||
else if (40 == bw_val)
|
||||
phymode = MODE_11AX_HE40;
|
||||
else if (80 == bw_val)
|
||||
phymode = MODE_11AX_HE80;
|
||||
else if (CH_WIDTH_160MHZ == chan_width)
|
||||
phymode = MODE_11AX_HE160;
|
||||
else if (CH_WIDTH_80P80MHZ == chan_width)
|
||||
phymode = MODE_11AX_HE80_80;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@@ -2938,9 +2938,14 @@ void wma_set_channel(tp_wma_handle wma, tpSwitchChannelParams params)
|
||||
req.is_quarter_rate = 1;
|
||||
|
||||
req.vht_capable = params->vhtCapable;
|
||||
req.he_capable = params->he_capable;
|
||||
req.ch_center_freq_seg0 = params->ch_center_freq_seg0;
|
||||
req.ch_center_freq_seg1 = params->ch_center_freq_seg1;
|
||||
req.dot11_mode = params->dot11_mode;
|
||||
|
||||
WMA_LOGI(FL("vht_capable: %d, he_capable: %d, dot11_mode: %d"),
|
||||
req.vht_capable, req.he_capable, req.dot11_mode);
|
||||
|
||||
status = wma_get_current_hw_mode(&hw_mode);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status))
|
||||
WMA_LOGE("wma_get_current_hw_mode failed");
|
||||
|
Yeni konuda referans
Bir kullanıcı engelle