qcacld-3.0: Associate in 11ax mode on non MLO vdev
In 11be capable configuration, for connection attempt to MLO AP from non-MLO type vdev, downgrade to 11ax mode association for that vdev. User can still connect in ML mode from MLO type vdev. Change-Id: I1e7cf940a778a20f2f4d5d24283ffb6aae52781b CRs-Fixed: 3312163
This commit is contained in:

committed by
Madan Koyyalamudi

parent
14e95a4c57
commit
c682062e13
@@ -736,6 +736,16 @@ static inline uint32_t
|
|||||||
if_mgr_get_conc_ext_flags(struct wlan_objmgr_vdev *vdev,
|
if_mgr_get_conc_ext_flags(struct wlan_objmgr_vdev *vdev,
|
||||||
struct validate_bss_data *candidate_info)
|
struct validate_bss_data *candidate_info)
|
||||||
{
|
{
|
||||||
|
struct qdf_mac_addr *mld_addr;
|
||||||
|
|
||||||
|
/* If connection is happening on non-ML VDEV
|
||||||
|
* force the ML AP candidate as non-MLO to
|
||||||
|
* downgrade connection to 11ax.
|
||||||
|
*/
|
||||||
|
mld_addr = (struct qdf_mac_addr *)wlan_vdev_mlme_get_mldaddr(vdev);
|
||||||
|
if (qdf_is_macaddr_zero(mld_addr))
|
||||||
|
return policy_mgr_get_conc_ext_flags(vdev, false);
|
||||||
|
|
||||||
return policy_mgr_get_conc_ext_flags(vdev, candidate_info->is_mlo);
|
return policy_mgr_get_conc_ext_flags(vdev, candidate_info->is_mlo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -851,6 +851,22 @@ qdf_freq_t wlan_get_operation_chan_freq_vdev_id(struct wlan_objmgr_pdev *pdev,
|
|||||||
enum QDF_OPMODE wlan_get_opmode_vdev_id(struct wlan_objmgr_pdev *pdev,
|
enum QDF_OPMODE wlan_get_opmode_vdev_id(struct wlan_objmgr_pdev *pdev,
|
||||||
uint8_t vdev_id);
|
uint8_t vdev_id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wlan_vdev_set_dot11mode - Set the dot11mode of the vdev
|
||||||
|
* @mac_mlme_cfg: MAC's MLME config pointer
|
||||||
|
* @device_mode: OPMODE of the vdev
|
||||||
|
* @vdev_mlme: MLME component of the vdev
|
||||||
|
*
|
||||||
|
* Use this API to set the dot11mode of the vdev.
|
||||||
|
* For non-ML type vdev, this API restricts the connection
|
||||||
|
* of vdev to 11ax on 11be capable operation.
|
||||||
|
*
|
||||||
|
* Return: void
|
||||||
|
*/
|
||||||
|
void wlan_vdev_set_dot11mode(struct wlan_mlme_cfg *mac_mlme_cfg,
|
||||||
|
enum QDF_OPMODE device_mode,
|
||||||
|
struct vdev_mlme_obj *vdev_mlme);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* wlan_is_open_wep_cipher() - check if cipher is open or WEP
|
* wlan_is_open_wep_cipher() - check if cipher is open or WEP
|
||||||
* @pdev: Pointer to pdev
|
* @pdev: Pointer to pdev
|
||||||
|
@@ -3449,6 +3449,52 @@ enum QDF_OPMODE wlan_get_opmode_vdev_id(struct wlan_objmgr_pdev *pdev,
|
|||||||
return opmode;
|
return opmode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wlan_vdev_set_dot11mode(struct wlan_mlme_cfg *mac_mlme_cfg,
|
||||||
|
enum QDF_OPMODE device_mode,
|
||||||
|
struct vdev_mlme_obj *vdev_mlme)
|
||||||
|
{
|
||||||
|
uint8_t dot11_mode_indx;
|
||||||
|
uint8_t *mld_addr;
|
||||||
|
enum mlme_vdev_dot11_mode vdev_dot11_mode;
|
||||||
|
uint32_t mac_dot11_mode =
|
||||||
|
mac_mlme_cfg->dot11_mode.vdev_type_dot11_mode;
|
||||||
|
|
||||||
|
switch (device_mode) {
|
||||||
|
default:
|
||||||
|
case QDF_STA_MODE:
|
||||||
|
dot11_mode_indx = STA_DOT11_MODE_INDX;
|
||||||
|
break;
|
||||||
|
case QDF_P2P_CLIENT_MODE:
|
||||||
|
case QDF_P2P_DEVICE_MODE:
|
||||||
|
dot11_mode_indx = P2P_DEV_DOT11_MODE_INDX;
|
||||||
|
break;
|
||||||
|
case QDF_TDLS_MODE:
|
||||||
|
dot11_mode_indx = TDLS_DOT11_MODE_INDX;
|
||||||
|
break;
|
||||||
|
case QDF_NAN_DISC_MODE:
|
||||||
|
dot11_mode_indx = NAN_DISC_DOT11_MODE_INDX;
|
||||||
|
break;
|
||||||
|
case QDF_NDI_MODE:
|
||||||
|
dot11_mode_indx = NDI_DOT11_MODE_INDX;
|
||||||
|
break;
|
||||||
|
case QDF_OCB_MODE:
|
||||||
|
dot11_mode_indx = OCB_DOT11_MODE_INDX;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
vdev_dot11_mode = QDF_GET_BITS(mac_dot11_mode, dot11_mode_indx, 4);
|
||||||
|
if (vdev_dot11_mode == MLME_VDEV_DOT11_MODE_AUTO ||
|
||||||
|
vdev_dot11_mode == MLME_VDEV_DOT11_MODE_11BE) {
|
||||||
|
mld_addr = wlan_vdev_mlme_get_mldaddr(vdev_mlme->vdev);
|
||||||
|
if (qdf_is_macaddr_zero((struct qdf_mac_addr *)mld_addr)) {
|
||||||
|
vdev_dot11_mode = MLME_VDEV_DOT11_MODE_11AX;
|
||||||
|
vdev_mlme->proto.vdev_dot11_mode = vdev_dot11_mode;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mlme_debug("vdev%d: dot11_mode %d", wlan_vdev_get_id(vdev_mlme->vdev),
|
||||||
|
vdev_dot11_mode);
|
||||||
|
}
|
||||||
|
|
||||||
bool wlan_is_open_wep_cipher(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id)
|
bool wlan_is_open_wep_cipher(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id)
|
||||||
{
|
{
|
||||||
struct wlan_objmgr_vdev *vdev;
|
struct wlan_objmgr_vdev *vdev;
|
||||||
|
@@ -251,21 +251,6 @@ enum mlme_dot11_mode {
|
|||||||
MLME_DOT11_MODE_11BE_ONLY
|
MLME_DOT11_MODE_11BE_ONLY
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* enum mlme_vdev_dot11_mode - Dot11 mode of the vdev
|
|
||||||
* MLME_VDEV_DOT11_MODE_AUTO: vdev uses mlme_dot11_mode
|
|
||||||
* MLME_VDEV_DOT11_MODE_11N: vdev supports 11N mode
|
|
||||||
* MLME_VDEV_DOT11_MODE_11AC: vdev supports 11AC mode
|
|
||||||
* MLME_VDEV_DOT11_MODE_11AX: vdev supports 11AX mode
|
|
||||||
*/
|
|
||||||
enum mlme_vdev_dot11_mode {
|
|
||||||
MLME_VDEV_DOT11_MODE_AUTO,
|
|
||||||
MLME_VDEV_DOT11_MODE_11N,
|
|
||||||
MLME_VDEV_DOT11_MODE_11AC,
|
|
||||||
MLME_VDEV_DOT11_MODE_11AX,
|
|
||||||
MLME_VDEV_DOT11_MODE_11BE,
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct wlan_mlme_dot11_mode - dot11 mode
|
* struct wlan_mlme_dot11_mode - dot11 mode
|
||||||
*
|
*
|
||||||
|
@@ -437,6 +437,23 @@ hdd_update_action_oui_for_connect(struct hdd_context *hdd_ctx,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef WLAN_FEATURE_11BE
|
||||||
|
static inline bool
|
||||||
|
hdd_config_is_dot11mode_11be_only(struct hdd_config *config)
|
||||||
|
{
|
||||||
|
if (config->dot11Mode == eHDD_DOT11_MODE_11be_ONLY)
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static inline bool
|
||||||
|
hdd_config_is_dot11mode_11be_only(struct hdd_config *config)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* hdd_get_dot11mode_filter() - Get dot11 mode filter
|
* hdd_get_dot11mode_filter() - Get dot11 mode filter
|
||||||
* @hdd_ctx: HDD context
|
* @hdd_ctx: HDD context
|
||||||
@@ -457,6 +474,8 @@ hdd_get_dot11mode_filter(struct hdd_context *hdd_ctx)
|
|||||||
return ALLOW_11AC_ONLY;
|
return ALLOW_11AC_ONLY;
|
||||||
else if (config->dot11Mode == eHDD_DOT11_MODE_11ax_ONLY)
|
else if (config->dot11Mode == eHDD_DOT11_MODE_11ax_ONLY)
|
||||||
return ALLOW_11AX_ONLY;
|
return ALLOW_11AX_ONLY;
|
||||||
|
else if (hdd_config_is_dot11mode_11be_only(config))
|
||||||
|
return ALLOW_11BE_ONLY;
|
||||||
else
|
else
|
||||||
return ALLOW_ALL;
|
return ALLOW_ALL;
|
||||||
}
|
}
|
||||||
|
@@ -1931,28 +1931,31 @@ static void lim_check_oui_and_update_session(struct mac_context *mac_ctx,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static enum mlme_dot11_mode
|
static enum mlme_dot11_mode
|
||||||
lim_get_self_dot11_mode(struct mac_context *mac_ctx, enum QDF_OPMODE opmode)
|
lim_get_self_dot11_mode(struct mac_context *mac_ctx, enum QDF_OPMODE opmode,
|
||||||
|
uint8_t vdev_id)
|
||||||
{
|
{
|
||||||
|
struct wlan_objmgr_vdev *vdev;
|
||||||
|
struct vdev_mlme_obj *vdev_mlme;
|
||||||
|
enum mlme_vdev_dot11_mode vdev_dot11_mode;
|
||||||
enum mlme_dot11_mode self_dot11_mode =
|
enum mlme_dot11_mode self_dot11_mode =
|
||||||
mac_ctx->mlme_cfg->dot11_mode.dot11_mode;
|
mac_ctx->mlme_cfg->dot11_mode.dot11_mode;
|
||||||
enum mlme_vdev_dot11_mode vdev_dot11_mode;
|
|
||||||
uint8_t dot11_mode_indx;
|
|
||||||
uint32_t vdev_type_dot11_mode =
|
|
||||||
mac_ctx->mlme_cfg->dot11_mode.vdev_type_dot11_mode;
|
|
||||||
|
|
||||||
switch (opmode) {
|
switch (opmode) {
|
||||||
case QDF_STA_MODE:
|
case QDF_STA_MODE:
|
||||||
dot11_mode_indx = STA_DOT11_MODE_INDX;
|
|
||||||
break;
|
|
||||||
case QDF_P2P_CLIENT_MODE:
|
case QDF_P2P_CLIENT_MODE:
|
||||||
dot11_mode_indx = P2P_DEV_DOT11_MODE_INDX;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return self_dot11_mode;
|
return self_dot11_mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
vdev_dot11_mode = QDF_GET_BITS(vdev_type_dot11_mode, dot11_mode_indx,
|
vdev = wlan_objmgr_get_vdev_by_id_from_pdev(mac_ctx->pdev, vdev_id,
|
||||||
4);
|
WLAN_MLME_OBJMGR_ID);
|
||||||
|
if (!vdev)
|
||||||
|
return self_dot11_mode;
|
||||||
|
|
||||||
|
vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
|
||||||
|
vdev_dot11_mode = vdev_mlme->proto.vdev_dot11_mode;
|
||||||
|
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
|
||||||
|
|
||||||
pe_debug("self_dot11_mode %d, vdev_dot11 %d, dev_mode %d",
|
pe_debug("self_dot11_mode %d, vdev_dot11 %d, dev_mode %d",
|
||||||
self_dot11_mode, vdev_dot11_mode, opmode);
|
self_dot11_mode, vdev_dot11_mode, opmode);
|
||||||
@@ -1972,6 +1975,10 @@ lim_get_self_dot11_mode(struct mac_context *mac_ctx, enum QDF_OPMODE opmode)
|
|||||||
vdev_dot11_mode == MLME_VDEV_DOT11_MODE_11AX)
|
vdev_dot11_mode == MLME_VDEV_DOT11_MODE_11AX)
|
||||||
return MLME_DOT11_MODE_11AX;
|
return MLME_DOT11_MODE_11AX;
|
||||||
|
|
||||||
|
if (IS_DOT11_MODE_EHT(self_dot11_mode) &&
|
||||||
|
vdev_dot11_mode == MLME_VDEV_DOT11_MODE_11BE)
|
||||||
|
return MLME_DOT11_MODE_11BE;
|
||||||
|
|
||||||
return self_dot11_mode;
|
return self_dot11_mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2613,7 +2620,8 @@ lim_fill_dot11_mode(struct mac_context *mac_ctx, struct pe_session *session,
|
|||||||
enum mlme_dot11_mode bss_dot11_mode;
|
enum mlme_dot11_mode bss_dot11_mode;
|
||||||
enum mlme_dot11_mode intersected_mode;
|
enum mlme_dot11_mode intersected_mode;
|
||||||
|
|
||||||
self_dot11_mode = lim_get_self_dot11_mode(mac_ctx, session->opmode);
|
self_dot11_mode = lim_get_self_dot11_mode(mac_ctx, session->opmode,
|
||||||
|
session->vdev_id);
|
||||||
bss_dot11_mode = lim_get_bss_dot11_mode(mac_ctx, bss_desc, ie_struct);
|
bss_dot11_mode = lim_get_bss_dot11_mode(mac_ctx, bss_desc, ie_struct);
|
||||||
|
|
||||||
pe_debug("vdev id %d opmode %d self dot11mode %d bss_dot11 mode %d",
|
pe_debug("vdev id %d opmode %d self dot11mode %d bss_dot11 mode %d",
|
||||||
@@ -5012,7 +5020,8 @@ QDF_STATUS cm_process_reassoc_req(struct scheduler_msg *msg)
|
|||||||
|
|
||||||
static QDF_STATUS
|
static QDF_STATUS
|
||||||
lim_fill_preauth_req_dot11_mode(struct mac_context *mac_ctx,
|
lim_fill_preauth_req_dot11_mode(struct mac_context *mac_ctx,
|
||||||
tpSirFTPreAuthReq req)
|
tpSirFTPreAuthReq req,
|
||||||
|
uint8_t vdev_id)
|
||||||
{
|
{
|
||||||
QDF_STATUS status;
|
QDF_STATUS status;
|
||||||
tDot11fBeaconIEs *ie_struct;
|
tDot11fBeaconIEs *ie_struct;
|
||||||
@@ -5028,7 +5037,8 @@ lim_fill_preauth_req_dot11_mode(struct mac_context *mac_ctx,
|
|||||||
return QDF_STATUS_E_FAILURE;
|
return QDF_STATUS_E_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
self_dot11_mode = lim_get_self_dot11_mode(mac_ctx, QDF_STA_MODE);
|
self_dot11_mode = lim_get_self_dot11_mode(mac_ctx, QDF_STA_MODE,
|
||||||
|
vdev_id);
|
||||||
bss_dot11_mode = lim_get_bss_dot11_mode(mac_ctx, bss_desc, ie_struct);
|
bss_dot11_mode = lim_get_bss_dot11_mode(mac_ctx, bss_desc, ie_struct);
|
||||||
|
|
||||||
status = lim_get_intersected_dot11_mode_sta_ap(mac_ctx, self_dot11_mode,
|
status = lim_get_intersected_dot11_mode_sta_ap(mac_ctx, self_dot11_mode,
|
||||||
@@ -5090,14 +5100,14 @@ static QDF_STATUS lim_cm_handle_preauth_req(struct wlan_preauth_req *req)
|
|||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vdev_id = req->vdev_id;
|
||||||
preauth_req->pbssDescription = bss_desc;
|
preauth_req->pbssDescription = bss_desc;
|
||||||
status = lim_fill_preauth_req_dot11_mode(mac_ctx, preauth_req);
|
status = lim_fill_preauth_req_dot11_mode(mac_ctx, preauth_req, vdev_id);
|
||||||
if (QDF_IS_STATUS_ERROR(status)) {
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
pe_err("dot11mode doesn't get proper filling");
|
pe_err("dot11mode doesn't get proper filling");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
vdev_id = req->vdev_id;
|
|
||||||
vdev = wlan_objmgr_get_vdev_by_id_from_pdev(mac_ctx->pdev, vdev_id,
|
vdev = wlan_objmgr_get_vdev_by_id_from_pdev(mac_ctx->pdev, vdev_id,
|
||||||
WLAN_MLME_CM_ID);
|
WLAN_MLME_CM_ID);
|
||||||
if (!vdev) {
|
if (!vdev) {
|
||||||
|
@@ -5749,7 +5749,9 @@ static bool is_dot11mode_support_ht_cap(enum csr_cfgdot11mode dot11mode)
|
|||||||
(dot11mode == eCSR_CFG_DOT11_MODE_11N_ONLY) ||
|
(dot11mode == eCSR_CFG_DOT11_MODE_11N_ONLY) ||
|
||||||
(dot11mode == eCSR_CFG_DOT11_MODE_11AC_ONLY) ||
|
(dot11mode == eCSR_CFG_DOT11_MODE_11AC_ONLY) ||
|
||||||
(dot11mode == eCSR_CFG_DOT11_MODE_11AX) ||
|
(dot11mode == eCSR_CFG_DOT11_MODE_11AX) ||
|
||||||
(dot11mode == eCSR_CFG_DOT11_MODE_11AX_ONLY)) {
|
(dot11mode == eCSR_CFG_DOT11_MODE_11AX_ONLY) ||
|
||||||
|
(dot11mode == eCSR_CFG_DOT11_MODE_11BE) ||
|
||||||
|
(dot11mode == eCSR_CFG_DOT11_MODE_11BE_ONLY)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5770,7 +5772,9 @@ static bool is_dot11mode_support_vht_cap(enum csr_cfgdot11mode dot11mode)
|
|||||||
(dot11mode == eCSR_CFG_DOT11_MODE_11AC) ||
|
(dot11mode == eCSR_CFG_DOT11_MODE_11AC) ||
|
||||||
(dot11mode == eCSR_CFG_DOT11_MODE_11AC_ONLY) ||
|
(dot11mode == eCSR_CFG_DOT11_MODE_11AC_ONLY) ||
|
||||||
(dot11mode == eCSR_CFG_DOT11_MODE_11AX) ||
|
(dot11mode == eCSR_CFG_DOT11_MODE_11AX) ||
|
||||||
(dot11mode == eCSR_CFG_DOT11_MODE_11AX_ONLY)) {
|
(dot11mode == eCSR_CFG_DOT11_MODE_11AX_ONLY) ||
|
||||||
|
(dot11mode == eCSR_CFG_DOT11_MODE_11BE) ||
|
||||||
|
(dot11mode == eCSR_CFG_DOT11_MODE_11BE_ONLY)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5789,7 +5793,9 @@ static bool is_dot11mode_support_he_cap(enum csr_cfgdot11mode dot11mode)
|
|||||||
{
|
{
|
||||||
if ((dot11mode == eCSR_CFG_DOT11_MODE_AUTO) ||
|
if ((dot11mode == eCSR_CFG_DOT11_MODE_AUTO) ||
|
||||||
(dot11mode == eCSR_CFG_DOT11_MODE_11AX) ||
|
(dot11mode == eCSR_CFG_DOT11_MODE_11AX) ||
|
||||||
(dot11mode == eCSR_CFG_DOT11_MODE_11AX_ONLY)) {
|
(dot11mode == eCSR_CFG_DOT11_MODE_11AX_ONLY) ||
|
||||||
|
(dot11mode == eCSR_CFG_DOT11_MODE_11BE) ||
|
||||||
|
(dot11mode == eCSR_CFG_DOT11_MODE_11BE_ONLY)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -407,7 +407,7 @@ struct csr_roamstruct {
|
|||||||
/**
|
/**
|
||||||
* csr_get_vdev_dot11_mode() - get the supported dot11mode by vdev
|
* csr_get_vdev_dot11_mode() - get the supported dot11mode by vdev
|
||||||
* @mac_ctx: pointer to global mac structure
|
* @mac_ctx: pointer to global mac structure
|
||||||
* @device_mode: vdev mode
|
* @vdev_id: vdev id
|
||||||
* @curr_dot11_mode: Current dot11 mode
|
* @curr_dot11_mode: Current dot11 mode
|
||||||
*
|
*
|
||||||
* The function return the min of supported dot11 mode and vdev type dot11mode
|
* The function return the min of supported dot11 mode and vdev type dot11mode
|
||||||
@@ -417,7 +417,7 @@ struct csr_roamstruct {
|
|||||||
*/
|
*/
|
||||||
enum csr_cfgdot11mode
|
enum csr_cfgdot11mode
|
||||||
csr_get_vdev_dot11_mode(struct mac_context *mac,
|
csr_get_vdev_dot11_mode(struct mac_context *mac,
|
||||||
enum QDF_OPMODE device_mode,
|
uint8_t vdev_id,
|
||||||
enum csr_cfgdot11mode curr_dot11_mode);
|
enum csr_cfgdot11mode curr_dot11_mode);
|
||||||
|
|
||||||
QDF_STATUS csr_get_channel_and_power_list(struct mac_context *mac);
|
QDF_STATUS csr_get_channel_and_power_list(struct mac_context *mac);
|
||||||
|
@@ -4767,6 +4767,9 @@ QDF_STATUS sme_vdev_post_vdev_create_setup(mac_handle_t mac_handle,
|
|||||||
goto cleanup_wma;
|
goto cleanup_wma;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wlan_vdev_set_dot11mode(mac_ctx->mlme_cfg, vdev->vdev_mlme.vdev_opmode,
|
||||||
|
vdev_mlme);
|
||||||
|
|
||||||
status = mlme_vdev_self_peer_create(vdev);
|
status = mlme_vdev_self_peer_create(vdev);
|
||||||
if (QDF_IS_STATUS_ERROR(status)) {
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
sme_err("Failed to create vdev selfpeer for vdev:%d", vdev_id);
|
sme_err("Failed to create vdev selfpeer for vdev:%d", vdev_id);
|
||||||
@@ -12612,7 +12615,7 @@ void sme_set_vdev_ies_per_band(mac_handle_t mac_handle, uint8_t vdev_id,
|
|||||||
|
|
||||||
p_msg->vdev_id = vdev_id;
|
p_msg->vdev_id = vdev_id;
|
||||||
p_msg->device_mode = device_mode;
|
p_msg->device_mode = device_mode;
|
||||||
p_msg->dot11_mode = csr_get_vdev_dot11_mode(mac_ctx, device_mode,
|
p_msg->dot11_mode = csr_get_vdev_dot11_mode(mac_ctx, vdev_id,
|
||||||
curr_dot11_mode);
|
curr_dot11_mode);
|
||||||
p_msg->msg_type = eWNI_SME_SET_VDEV_IES_PER_BAND;
|
p_msg->msg_type = eWNI_SME_SET_VDEV_IES_PER_BAND;
|
||||||
p_msg->len = sizeof(*p_msg);
|
p_msg->len = sizeof(*p_msg);
|
||||||
|
@@ -305,43 +305,23 @@ bool csr_is_conn_state_wds(struct mac_context *mac, uint32_t sessionId)
|
|||||||
|
|
||||||
enum csr_cfgdot11mode
|
enum csr_cfgdot11mode
|
||||||
csr_get_vdev_dot11_mode(struct mac_context *mac,
|
csr_get_vdev_dot11_mode(struct mac_context *mac,
|
||||||
enum QDF_OPMODE device_mode,
|
uint8_t vdev_id,
|
||||||
enum csr_cfgdot11mode curr_dot11_mode)
|
enum csr_cfgdot11mode curr_dot11_mode)
|
||||||
{
|
{
|
||||||
|
struct wlan_objmgr_vdev *vdev;
|
||||||
|
struct vdev_mlme_obj *vdev_mlme;
|
||||||
enum mlme_vdev_dot11_mode vdev_dot11_mode;
|
enum mlme_vdev_dot11_mode vdev_dot11_mode;
|
||||||
uint8_t dot11_mode_indx;
|
|
||||||
enum csr_cfgdot11mode dot11_mode = curr_dot11_mode;
|
enum csr_cfgdot11mode dot11_mode = curr_dot11_mode;
|
||||||
uint32_t vdev_type_dot11_mode =
|
|
||||||
mac->mlme_cfg->dot11_mode.vdev_type_dot11_mode;
|
|
||||||
|
|
||||||
sme_debug("curr_dot11_mode %d, vdev_dot11 %08X, dev_mode %d",
|
vdev = wlan_objmgr_get_vdev_by_id_from_pdev(mac->pdev, vdev_id,
|
||||||
curr_dot11_mode, vdev_type_dot11_mode, device_mode);
|
WLAN_MLME_OBJMGR_ID);
|
||||||
|
if (!vdev)
|
||||||
|
return curr_dot11_mode;
|
||||||
|
|
||||||
|
vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
|
||||||
|
vdev_dot11_mode = vdev_mlme->proto.vdev_dot11_mode;
|
||||||
|
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
|
||||||
|
|
||||||
switch (device_mode) {
|
|
||||||
case QDF_STA_MODE:
|
|
||||||
dot11_mode_indx = STA_DOT11_MODE_INDX;
|
|
||||||
break;
|
|
||||||
case QDF_P2P_CLIENT_MODE:
|
|
||||||
case QDF_P2P_DEVICE_MODE:
|
|
||||||
dot11_mode_indx = P2P_DEV_DOT11_MODE_INDX;
|
|
||||||
break;
|
|
||||||
case QDF_TDLS_MODE:
|
|
||||||
dot11_mode_indx = TDLS_DOT11_MODE_INDX;
|
|
||||||
break;
|
|
||||||
case QDF_NAN_DISC_MODE:
|
|
||||||
dot11_mode_indx = NAN_DISC_DOT11_MODE_INDX;
|
|
||||||
break;
|
|
||||||
case QDF_NDI_MODE:
|
|
||||||
dot11_mode_indx = NDI_DOT11_MODE_INDX;
|
|
||||||
break;
|
|
||||||
case QDF_OCB_MODE:
|
|
||||||
dot11_mode_indx = OCB_DOT11_MODE_INDX;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return dot11_mode;
|
|
||||||
}
|
|
||||||
vdev_dot11_mode = QDF_GET_BITS(vdev_type_dot11_mode,
|
|
||||||
dot11_mode_indx, 4);
|
|
||||||
if (vdev_dot11_mode == MLME_VDEV_DOT11_MODE_AUTO)
|
if (vdev_dot11_mode == MLME_VDEV_DOT11_MODE_AUTO)
|
||||||
dot11_mode = curr_dot11_mode;
|
dot11_mode = curr_dot11_mode;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user