qcacld-3.0: Set LPI power when safe mode is enabled

i.) Keep rf test mode ini disabled by default due to which
6G security check will be true.

ii.) while calculating TPC power, check safe mode & RF test
mode enabled or not and set power mode to LPI if
safe mode or Rf test mode is enabled.

iii.) During HE ops IE extarct set power type to VLP, if
6 G Hz info is not present in HE ops IE. So that power
type can be VLP in case ap_ctry is non US.
To get safe mode value, a new member is_safe_mode_enabled
is added in mlme private object and is set whenever
WIFI_TEST_CONFIG_6GHZ_SECURITY_TEST_MODE command is triggered
via userspace.

Change-Id: I4fc2a231f8e7d18e68b92af3f381456113668779
CRs-Fixed: 3192967
このコミットが含まれているのは:
Sheenam Monga
2022-05-16 18:55:27 +05:30
committed by Madan Koyyalamudi
コミット d933925871
8個のファイルの変更88行の追加11行の削除

ファイルの表示

@@ -182,9 +182,11 @@ enum debug_packet_log_type {
* rf_test_mode_enabled - Enable rf test mode support * rf_test_mode_enabled - Enable rf test mode support
* @Min: 0 * @Min: 0
* @Max: 1 * @Max: 1
* @Default: 1 * @Default: 0
* *
* This cfg is used to set rf test mode support flag * This cfg is used to set rf test mode support flag
* by default 6 G Hz security check will be enabled
* with rf test mode as disabled.
* *
* Related: None * Related: None
* *
@@ -192,7 +194,7 @@ enum debug_packet_log_type {
*/ */
#define CFG_RF_TEST_MODE_SUPP_ENABLED CFG_BOOL( \ #define CFG_RF_TEST_MODE_SUPP_ENABLED CFG_BOOL( \
"rf_test_mode_enabled", \ "rf_test_mode_enabled", \
1, \ 0, \
"rf test mode Enable Flag") "rf test mode Enable Flag")
#ifdef CONFIG_BAND_6GHZ #ifdef CONFIG_BAND_6GHZ

ファイルの表示

@@ -3600,4 +3600,28 @@ QDF_STATUS mlme_save_vdev_max_mcs_idx(struct wlan_objmgr_vdev *vdev,
*/ */
uint8_t mlme_get_vdev_max_mcs_idx(struct wlan_objmgr_vdev *vdev); uint8_t mlme_get_vdev_max_mcs_idx(struct wlan_objmgr_vdev *vdev);
#endif /* WLAN_FEATURE_SON */ #endif /* WLAN_FEATURE_SON */
/**
* wlan_mlme_set_safe_mode_enable() - set safe_mode_enable flag
* based on value set by user space.
*
* @psoc: psoc context
* @safe_mode_enable: safe mode enabled or not
*
* Return: none
*/
void wlan_mlme_set_safe_mode_enable(struct wlan_objmgr_psoc *psoc,
bool safe_mode_enable);
/**
* wlan_mlme_get_safe_mode_enable() - get safe_mode_enable set by user
* space
*
* @psoc: psoc context
* @safe_mode_enable: safe mode enabled or not
*
* Return: none
*/
void wlan_mlme_get_safe_mode_enable(struct wlan_objmgr_psoc *psoc,
bool *safe_mode_enable);
#endif /* _WLAN_MLME_API_H_ */ #endif /* _WLAN_MLME_API_H_ */

ファイルの表示

@@ -1358,6 +1358,8 @@ 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
* @safe_mode_enable: safe mode to bypass some strict 6 GHz checks for
* connection, bypass strict power levels
*/ */
struct wlan_mlme_generic { struct wlan_mlme_generic {
uint32_t band_capability; uint32_t band_capability;
@@ -1411,6 +1413,7 @@ struct wlan_mlme_generic {
#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
bool safe_mode_enable;
}; };
/* /*

ファイルの表示

@@ -3045,8 +3045,10 @@ wlan_mlme_is_rf_test_mode_enabled(struct wlan_objmgr_psoc *psoc, bool *value)
struct wlan_mlme_psoc_ext_obj *mlme_obj; struct wlan_mlme_psoc_ext_obj *mlme_obj;
mlme_obj = mlme_get_psoc_ext_obj(psoc); mlme_obj = mlme_get_psoc_ext_obj(psoc);
if (!mlme_obj) if (!mlme_obj) {
*value = false;
return QDF_STATUS_E_FAILURE; return QDF_STATUS_E_FAILURE;
}
*value = mlme_obj->cfg.gen.enabled_rf_test_mode; *value = mlme_obj->cfg.gen.enabled_rf_test_mode;
@@ -5744,3 +5746,32 @@ uint8_t mlme_get_vdev_max_mcs_idx(struct wlan_objmgr_vdev *vdev)
return mlme_priv->max_mcs_index; return mlme_priv->max_mcs_index;
} }
#endif /* WLAN_FEATURE_SON */ #endif /* WLAN_FEATURE_SON */
void wlan_mlme_get_safe_mode_enable(struct wlan_objmgr_psoc *psoc,
bool *safe_mode_enable)
{
struct wlan_mlme_psoc_ext_obj *mlme_obj;
mlme_obj = mlme_get_psoc_ext_obj(psoc);
if (!mlme_obj) {
mlme_legacy_err("invalid mlme obj");
*safe_mode_enable = false;
return;
}
*safe_mode_enable = mlme_obj->cfg.gen.safe_mode_enable;
}
void wlan_mlme_set_safe_mode_enable(struct wlan_objmgr_psoc *psoc,
bool safe_mode_enable)
{
struct wlan_mlme_psoc_ext_obj *mlme_obj;
mlme_obj = mlme_get_psoc_ext_obj(psoc);
if (!mlme_obj) {
mlme_legacy_err("invalid mlme obj");
return;
}
mlme_obj->cfg.gen.safe_mode_enable = safe_mode_enable;
}

ファイルの表示

@@ -10786,6 +10786,7 @@ static int hdd_test_config_6ghz_security_test_mode(struct hdd_context *hdd_ctx,
cfg_val = nla_get_u8(attr); cfg_val = nla_get_u8(attr);
hdd_debug("safe mode setting %d", cfg_val); hdd_debug("safe mode setting %d", cfg_val);
wlan_mlme_set_safe_mode_enable(hdd_ctx->psoc, cfg_val);
if (cfg_val) { if (cfg_val) {
wlan_cm_set_check_6ghz_security(hdd_ctx->psoc, false); wlan_cm_set_check_6ghz_security(hdd_ctx->psoc, false);
wlan_cm_set_6ghz_key_mgmt_mask(hdd_ctx->psoc, wlan_cm_set_6ghz_key_mgmt_mask(hdd_ctx->psoc,

ファイルの表示

@@ -14965,10 +14965,11 @@ static int hdd_features_init(struct hdd_context *hdd_ctx)
hdd_err("Get rf test mode failed"); hdd_err("Get rf test mode failed");
return QDF_STATUS_E_FAILURE; return QDF_STATUS_E_FAILURE;
} }
if (!rf_test_mode) {
wlan_cm_set_check_6ghz_security(hdd_ctx->psoc, true); if (rf_test_mode) {
wlan_cm_set_check_6ghz_security(hdd_ctx->psoc, false);
wlan_cm_set_6ghz_key_mgmt_mask(hdd_ctx->psoc, wlan_cm_set_6ghz_key_mgmt_mask(hdd_ctx->psoc,
ALLOWED_KEYMGMT_6G_MASK); DEFAULT_KEYMGMT_6G_MASK);
} }
status = ucfg_mlme_is_relaxed_6ghz_conn_policy_enabled(hdd_ctx->psoc, status = ucfg_mlme_is_relaxed_6ghz_conn_policy_enabled(hdd_ctx->psoc,

ファイルの表示

@@ -5275,6 +5275,8 @@ void lim_calculate_tpc(struct mac_context *mac,
struct vdev_mlme_obj *mlme_obj; struct vdev_mlme_obj *mlme_obj;
uint8_t tpe_power; uint8_t tpe_power;
bool skip_tpe = false; bool skip_tpe = false;
bool rf_test_mode = false;
bool safe_mode_enable = false;
mlme_obj = wlan_vdev_mlme_get_cmpt_obj(session->vdev); mlme_obj = wlan_vdev_mlme_get_cmpt_obj(session->vdev);
if (!mlme_obj) { if (!mlme_obj) {
@@ -5304,13 +5306,25 @@ void lim_calculate_tpc(struct mac_context *mac,
/* Power mode calculation for 6G*/ /* Power mode calculation for 6G*/
ap_power_type_6g = session->ap_power_type; ap_power_type_6g = session->ap_power_type;
if (LIM_IS_STA_ROLE(session)) { if (LIM_IS_STA_ROLE(session)) {
if (!session->lim_join_req) { wlan_mlme_get_safe_mode_enable(mac->psoc,
if (!ctry_code_match) &safe_mode_enable);
ap_power_type_6g = ap_pwr_type; wlan_mlme_is_rf_test_mode_enabled(mac->psoc,
&rf_test_mode);
/*
* set LPI power if safe mode is enabled OR RF test
* mode is enabled.
*/
if (rf_test_mode || safe_mode_enable) {
ap_power_type_6g = REG_INDOOR_AP;
} else { } else {
if (!session->same_ctry_code) if (!session->lim_join_req) {
ap_power_type_6g = if (!ctry_code_match)
ap_power_type_6g = ap_pwr_type;
} else {
if (!session->same_ctry_code)
ap_power_type_6g =
session->ap_power_type_6g; session->ap_power_type_6g;
}
} }
} }
} }

ファイルの表示

@@ -121,6 +121,7 @@ static void lim_extract_he_op(struct pe_session *session,
return; return;
if (!session->he_op.oper_info_6g_present) { if (!session->he_op.oper_info_6g_present) {
pe_debug("6GHz op not present in 6G beacon"); pe_debug("6GHz op not present in 6G beacon");
session->ap_power_type = REG_VERY_LOW_POWER_AP;
return; return;
} }
session->ch_width = session->he_op.oper_info_6g.info.ch_width; session->ch_width = session->he_op.oper_info_6g.info.ch_width;