qcacld-3.0: Add cfg item to enable eMLSR mode
Add cfg item to enable/disable eMLSR mode for ML STA under 802.11be op mode. The cfg value 0 corresponds to default MLMR mode, 1 corresponds to eMLSR mode. Change-Id: Ib02516aac8ac44aee6b40a572a9f7469b10d0ac2 CRs-Fixed: 3184745
这个提交包含在:
@@ -511,6 +511,26 @@ static void mlme_init_mgmt_hw_tx_retry_count_cfg(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WLAN_FEATURE_11BE_MLO
|
||||||
|
/**
|
||||||
|
* mlme_init_emlsr_mode() - initialize emlsr mode enable flag
|
||||||
|
* @psoc: Pointer to PSOC
|
||||||
|
* @gen: pointer to generic CFG items
|
||||||
|
*
|
||||||
|
* Return: None
|
||||||
|
*/
|
||||||
|
static void mlme_init_emlsr_mode(struct wlan_objmgr_psoc *psoc,
|
||||||
|
struct wlan_mlme_generic *gen)
|
||||||
|
{
|
||||||
|
gen->enable_emlsr_mode = cfg_default(CFG_EMLSR_MODE_ENABLE);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static void mlme_init_emlsr_mode(struct wlan_objmgr_psoc *psoc,
|
||||||
|
struct wlan_mlme_generic *gen)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void mlme_init_generic_cfg(struct wlan_objmgr_psoc *psoc,
|
static void mlme_init_generic_cfg(struct wlan_objmgr_psoc *psoc,
|
||||||
struct wlan_mlme_generic *gen)
|
struct wlan_mlme_generic *gen)
|
||||||
{
|
{
|
||||||
@@ -576,6 +596,7 @@ static void mlme_init_generic_cfg(struct wlan_objmgr_psoc *psoc,
|
|||||||
mlme_init_wds_config_cfg(psoc, gen);
|
mlme_init_wds_config_cfg(psoc, gen);
|
||||||
mlme_init_mgmt_hw_tx_retry_count_cfg(psoc, gen);
|
mlme_init_mgmt_hw_tx_retry_count_cfg(psoc, gen);
|
||||||
mlme_init_relaxed_6ghz_conn_policy(psoc, gen);
|
mlme_init_relaxed_6ghz_conn_policy(psoc, gen);
|
||||||
|
mlme_init_emlsr_mode(psoc, gen);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mlme_init_edca_ani_cfg(struct wlan_objmgr_psoc *psoc,
|
static void mlme_init_edca_ani_cfg(struct wlan_objmgr_psoc *psoc,
|
||||||
|
@@ -221,6 +221,30 @@ enum debug_packet_log_type {
|
|||||||
#define CFG_RELAX_6GHZ_CONN_POLICY
|
#define CFG_RELAX_6GHZ_CONN_POLICY
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef WLAN_FEATURE_11BE_MLO
|
||||||
|
/*
|
||||||
|
* emlsr_mode_enable - Enable eMLSR mode support
|
||||||
|
* @Min: 0
|
||||||
|
* @Max: 1
|
||||||
|
* @Default: 0
|
||||||
|
*
|
||||||
|
* This cfg is used to enable eMLSR mode
|
||||||
|
* If 0 - MLMR mode (Default mode)
|
||||||
|
* If 1 - eMLSR mode
|
||||||
|
*
|
||||||
|
* Related: None
|
||||||
|
*
|
||||||
|
* Supported Feature: STA
|
||||||
|
*/
|
||||||
|
#define CFG_EMLSR_MODE_ENABLE CFG_BOOL( \
|
||||||
|
"emlsr_mode_enable", \
|
||||||
|
0, \
|
||||||
|
"eMLSR mode enable flag")
|
||||||
|
#define CFG_EMLSR_MODE_ENABLED CFG(CFG_EMLSR_MODE_ENABLE)
|
||||||
|
#else
|
||||||
|
#define CFG_EMLSR_MODE_ENABLED
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* <ini>
|
* <ini>
|
||||||
* BandCapability - Preferred band (0: 2.4G, 5G, and 6G,
|
* BandCapability - Preferred band (0: 2.4G, 5G, and 6G,
|
||||||
@@ -1016,5 +1040,6 @@ enum debug_packet_log_type {
|
|||||||
CFG_WDS_MODE_ALL \
|
CFG_WDS_MODE_ALL \
|
||||||
CFG(CFG_TX_RETRY_MULTIPLIER) \
|
CFG(CFG_TX_RETRY_MULTIPLIER) \
|
||||||
CFG(CFG_MGMT_FRAME_HW_TX_RETRY_COUNT) \
|
CFG(CFG_MGMT_FRAME_HW_TX_RETRY_COUNT) \
|
||||||
CFG_RELAX_6GHZ_CONN_POLICY
|
CFG_RELAX_6GHZ_CONN_POLICY \
|
||||||
|
CFG_EMLSR_MODE_ENABLED
|
||||||
#endif /* __CFG_MLME_GENERIC_H */
|
#endif /* __CFG_MLME_GENERIC_H */
|
||||||
|
@@ -2310,6 +2310,41 @@ wlan_mlme_set_relaxed_6ghz_conn_policy(struct wlan_objmgr_psoc *psoc,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef WLAN_FEATURE_11BE_MLO
|
||||||
|
/**
|
||||||
|
* wlan_mlme_get_emlsr_mode_enabled() - Get the eMLSR mode flag
|
||||||
|
* @psoc: psoc context
|
||||||
|
* @value: Enable/Disable value ptr.
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS
|
||||||
|
wlan_mlme_get_emlsr_mode_enabled(struct wlan_objmgr_psoc *psoc, bool *value);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wlan_mlme_set_emlsr_mode_enabled() - Set the eMLSR mode flag
|
||||||
|
* @psoc: psoc context
|
||||||
|
* @value: Enable/Disable value.
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS
|
||||||
|
wlan_mlme_set_emlsr_mode_enabled(struct wlan_objmgr_psoc *psoc, bool value);
|
||||||
|
#else
|
||||||
|
static inline QDF_STATUS
|
||||||
|
wlan_mlme_get_emlsr_mode_enabled(struct wlan_objmgr_psoc *psoc, bool *value)
|
||||||
|
{
|
||||||
|
*value = false;
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline QDF_STATUS
|
||||||
|
wlan_mlme_set_emlsr_mode_enabled(struct wlan_objmgr_psoc *psoc, bool value)
|
||||||
|
{
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* wlan_mlme_get_sta_miracast_mcc_rest_time() - Get STA/MIRACAST MCC rest time
|
* wlan_mlme_get_sta_miracast_mcc_rest_time() - Get STA/MIRACAST MCC rest time
|
||||||
* @psoc: pointer to psoc object
|
* @psoc: pointer to psoc object
|
||||||
|
@@ -1358,6 +1358,7 @@ struct wlan_user_mcc_quota {
|
|||||||
* @tx_retry_multiplier: TX xretry extension parameter
|
* @tx_retry_multiplier: TX xretry extension parameter
|
||||||
* @mgmt_hw_tx_retry_count: MGMT HW tx retry count for frames
|
* @mgmt_hw_tx_retry_count: MGMT HW tx retry count for frames
|
||||||
* @relaxed_6ghz_conn_policy: 6GHz relaxed connection policy
|
* @relaxed_6ghz_conn_policy: 6GHz relaxed connection policy
|
||||||
|
* @enable_emlsr_mode: 11BE eMLSR mode support
|
||||||
* @safe_mode_enable: safe mode to bypass some strict 6 GHz checks for
|
* @safe_mode_enable: safe mode to bypass some strict 6 GHz checks for
|
||||||
* connection, bypass strict power levels
|
* connection, bypass strict power levels
|
||||||
*/
|
*/
|
||||||
@@ -1410,6 +1411,9 @@ struct wlan_mlme_generic {
|
|||||||
#ifdef CONFIG_BAND_6GHZ
|
#ifdef CONFIG_BAND_6GHZ
|
||||||
bool relaxed_6ghz_conn_policy;
|
bool relaxed_6ghz_conn_policy;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef WLAN_FEATURE_11BE_MLO
|
||||||
|
bool enable_emlsr_mode;
|
||||||
|
#endif
|
||||||
#ifdef WLAN_FEATURE_MCC_QUOTA
|
#ifdef WLAN_FEATURE_MCC_QUOTA
|
||||||
struct wlan_user_mcc_quota user_mcc_quota;
|
struct wlan_user_mcc_quota user_mcc_quota;
|
||||||
#endif
|
#endif
|
||||||
|
@@ -2830,6 +2830,36 @@ ucfg_mlme_set_relaxed_6ghz_conn_policy(struct wlan_objmgr_psoc *psoc,
|
|||||||
return wlan_mlme_set_relaxed_6ghz_conn_policy(psoc, value);
|
return wlan_mlme_set_relaxed_6ghz_conn_policy(psoc, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ucfg_mlme_get_emlsr_mode_enabled() - Get eMLSR mode flag
|
||||||
|
* @psoc: pointer to psoc object
|
||||||
|
* @value: Value that needs to be set from the caller
|
||||||
|
*
|
||||||
|
* Inline UCFG API to be used by HDD/OSIF callers
|
||||||
|
*
|
||||||
|
* Return: QDF Status
|
||||||
|
*/
|
||||||
|
static inline QDF_STATUS
|
||||||
|
ucfg_mlme_get_emlsr_mode_enabled(struct wlan_objmgr_psoc *psoc, bool *value)
|
||||||
|
{
|
||||||
|
return wlan_mlme_get_emlsr_mode_enabled(psoc, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ucfg_mlme_set_emlsr_mode_enabled() - Set eMLSR mode flag
|
||||||
|
* @psoc: pointer to psoc object
|
||||||
|
* @value: Value that needs to be set from the caller
|
||||||
|
*
|
||||||
|
* Inline UCFG API to be used by HDD/OSIF callers
|
||||||
|
*
|
||||||
|
* Return: QDF Status
|
||||||
|
*/
|
||||||
|
static inline QDF_STATUS
|
||||||
|
ucfg_mlme_set_emlsr_mode_enabled(struct wlan_objmgr_psoc *psoc, bool value)
|
||||||
|
{
|
||||||
|
return wlan_mlme_set_emlsr_mode_enabled(psoc, value);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ucfg_mlme_get_opr_rate() - Get operational rate set
|
* ucfg_mlme_get_opr_rate() - Get operational rate set
|
||||||
* @psoc: pointer to vdev object
|
* @psoc: pointer to vdev object
|
||||||
|
@@ -3167,6 +3167,36 @@ wlan_mlme_set_relaxed_6ghz_conn_policy(struct wlan_objmgr_psoc *psoc,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef WLAN_FEATURE_11BE_MLO
|
||||||
|
QDF_STATUS
|
||||||
|
wlan_mlme_get_emlsr_mode_enabled(struct wlan_objmgr_psoc *psoc, bool *value)
|
||||||
|
{
|
||||||
|
struct wlan_mlme_psoc_ext_obj *mlme_obj;
|
||||||
|
|
||||||
|
mlme_obj = mlme_get_psoc_ext_obj(psoc);
|
||||||
|
if (!mlme_obj)
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
|
||||||
|
*value = mlme_obj->cfg.gen.enable_emlsr_mode;
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDF_STATUS
|
||||||
|
wlan_mlme_set_emlsr_mode_enabled(struct wlan_objmgr_psoc *psoc, bool value)
|
||||||
|
{
|
||||||
|
struct wlan_mlme_psoc_ext_obj *mlme_obj;
|
||||||
|
|
||||||
|
mlme_obj = mlme_get_psoc_ext_obj(psoc);
|
||||||
|
if (!mlme_obj)
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
|
||||||
|
mlme_obj->cfg.gen.enable_emlsr_mode = value;
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
QDF_STATUS
|
QDF_STATUS
|
||||||
wlan_mlme_cfg_set_vht_chan_width(struct wlan_objmgr_psoc *psoc, uint8_t value)
|
wlan_mlme_cfg_set_vht_chan_width(struct wlan_objmgr_psoc *psoc, uint8_t value)
|
||||||
{
|
{
|
||||||
|
@@ -7582,6 +7582,8 @@ wlan_hdd_wifi_test_config_policy[
|
|||||||
= {.type = NLA_U8},
|
= {.type = NLA_U8},
|
||||||
[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_IGNORE_H2E_RSNXE]
|
[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_IGNORE_H2E_RSNXE]
|
||||||
= {.type = NLA_U8},
|
= {.type = NLA_U8},
|
||||||
|
[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_11BE_EMLSR_MODE] = {
|
||||||
|
.type = NLA_U8},
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -10877,6 +10879,32 @@ static int hdd_test_config_6ghz_security_test_mode(struct hdd_context *hdd_ctx,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WLAN_FEATURE_11BE_MLO
|
||||||
|
static int hdd_test_config_emlsr_mode(struct hdd_context *hdd_ctx,
|
||||||
|
struct nlattr *attr)
|
||||||
|
|
||||||
|
{
|
||||||
|
uint8_t cfg_val;
|
||||||
|
|
||||||
|
cfg_val = nla_get_u8(attr);
|
||||||
|
hdd_info("11be op mode setting %d", cfg_val);
|
||||||
|
if (cfg_val) {
|
||||||
|
hdd_debug("eMLSR mode is enabled");
|
||||||
|
ucfg_mlme_set_emlsr_mode_enabled(hdd_ctx->psoc, cfg_val);
|
||||||
|
} else {
|
||||||
|
hdd_debug("Default mode: MLMR, no action required");
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static inline int
|
||||||
|
hdd_test_config_emlsr_mode(struct hdd_context *hdd_ctx, struct nlattr *attr)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* __wlan_hdd_cfg80211_set_wifi_test_config() - Wifi test configuration
|
* __wlan_hdd_cfg80211_set_wifi_test_config() - Wifi test configuration
|
||||||
* vendor command
|
* vendor command
|
||||||
@@ -11759,6 +11787,14 @@ __wlan_hdd_cfg80211_set_wifi_test_config(struct wiphy *wiphy,
|
|||||||
ret_val = ucfg_send_wfatest_cmd(adapter->vdev, &wfa_param);
|
ret_val = ucfg_send_wfatest_cmd(adapter->vdev, &wfa_param);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cmd_id = QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_11BE_EMLSR_MODE;
|
||||||
|
if (tb[cmd_id] && adapter->device_mode == QDF_STA_MODE) {
|
||||||
|
wfa_param.vdev_id = adapter->vdev_id;
|
||||||
|
wfa_param.value = nla_get_u8(tb[cmd_id]);
|
||||||
|
|
||||||
|
ret_val = hdd_test_config_emlsr_mode(hdd_ctx, tb[cmd_id]);
|
||||||
|
}
|
||||||
|
|
||||||
if (update_sme_cfg)
|
if (update_sme_cfg)
|
||||||
sme_update_config(mac_handle, sme_config);
|
sme_update_config(mac_handle, sme_config);
|
||||||
|
|
||||||
|
@@ -10768,7 +10768,7 @@ QDF_STATUS populate_dot11f_assoc_req_mlo_ie(struct mac_context *mac_ctx,
|
|||||||
uint32_t len_consumed;
|
uint32_t len_consumed;
|
||||||
uint16_t len_remaining, len;
|
uint16_t len_remaining, len;
|
||||||
QDF_STATUS status;
|
QDF_STATUS status;
|
||||||
bool emlsr_cap = false;
|
bool emlsr_cap, emlsr_enabled = false;
|
||||||
struct wlan_objmgr_psoc *psoc;
|
struct wlan_objmgr_psoc *psoc;
|
||||||
tDot11fIEnon_inheritance sta_prof_non_inherit;
|
tDot11fIEnon_inheritance sta_prof_non_inherit;
|
||||||
tDot11fFfCapabilities mlo_cap;
|
tDot11fFfCapabilities mlo_cap;
|
||||||
@@ -10820,9 +10820,11 @@ QDF_STATUS populate_dot11f_assoc_req_mlo_ie(struct mac_context *mac_ctx,
|
|||||||
}
|
}
|
||||||
|
|
||||||
emlsr_cap = policy_mgr_is_hw_emlsr_capable(psoc);
|
emlsr_cap = policy_mgr_is_hw_emlsr_capable(psoc);
|
||||||
pe_session->is_emlsr_capable = emlsr_cap;
|
|
||||||
|
|
||||||
if (emlsr_cap) {
|
wlan_mlme_get_emlsr_mode_enabled(psoc, &emlsr_enabled);
|
||||||
|
pe_session->is_emlsr_capable = emlsr_cap && emlsr_enabled;
|
||||||
|
|
||||||
|
if (pe_session->is_emlsr_capable) {
|
||||||
mlo_ie->eml_capab_present = 1;
|
mlo_ie->eml_capab_present = 1;
|
||||||
presence_bitmap |= WLAN_ML_BV_CTRL_PBM_EMLCAP_P;
|
presence_bitmap |= WLAN_ML_BV_CTRL_PBM_EMLCAP_P;
|
||||||
mlo_ie->common_info_length += WLAN_ML_BV_CINFO_EMLCAP_SIZE;
|
mlo_ie->common_info_length += WLAN_ML_BV_CINFO_EMLCAP_SIZE;
|
||||||
|
在新工单中引用
屏蔽一个用户