qcacld-3.0: Bring up SAP in VLP if country supports VLP

In STA+SAP concurrency, if the STA is connected in indoor
power, and if the country/channel supports VLP, then bringup
the SAP in VLP. Move the STA to VLP as well.

Restore the power of the STA, when the SAP is disconnected.

Add changes to:
a) Decide the power type for the concurrency during start bss,
stop bss, change channel request calls of the SAP interface.

b) Allow the 6 GHz SCC channel in ACS computation if the channel
supports VLP power or if the channel is indoor and enabled.

Change-Id: I151e2e3e8910a406bb5c1526f4f01715854d173f
CRs-Fixed: 3268100
This commit is contained in:
Surya Prakash Sivaraj
2022-08-24 21:03:59 +05:30
committad av Madan Koyyalamudi
förälder 1051484cb6
incheckning 538f94a3fa
15 ändrade filer med 596 tillägg och 18 borttagningar

Visa fil

@@ -406,9 +406,14 @@ struct wait_for_key_timer {
* struct mlme_ap_config - VDEV MLME legacy private SAP
* related configurations
* @user_config_sap_ch_freq : Frequency from userspace to start SAP
* @update_required_scc_sta_power: Change the 6 GHz power type of the
* concurrent STA
*/
struct mlme_ap_config {
qdf_freq_t user_config_sap_ch_freq;
#ifdef CONFIG_BAND_6GHZ
bool update_required_scc_sta_power;
#endif
};
/**
@@ -1182,6 +1187,42 @@ QDF_STATUS
wlan_set_sap_user_config_freq(struct wlan_objmgr_vdev *vdev,
qdf_freq_t freq);
#ifdef CONFIG_BAND_6GHZ
/**
* wlan_get_tpc_update_required_for_sta() - Get the tpc update required config
* to identify whether the tpc power has changed for concurrent STA interface
*
* @vdev: pointer to SAP vdev
*
* Return: Change scc power config
*/
bool
wlan_get_tpc_update_required_for_sta(struct wlan_objmgr_vdev *vdev);
/**
* wlan_set_tpc_update_required_for_sta() - Set the tpc update required config
* for the concurrent STA interface
*
* @vdev: pointer to SAP vdev
* @value: change scc power config
*
* Return: QDF_STATUS
*/
QDF_STATUS
wlan_set_tpc_update_required_for_sta(struct wlan_objmgr_vdev *vdev, bool value);
#else
static inline bool
wlan_get_tpc_update_required_for_sta(struct wlan_objmgr_vdev *vdev)
{
return false;
}
static inline QDF_STATUS
wlan_set_tpc_update_required_for_sta(struct wlan_objmgr_vdev *vdev, bool value)
{
return QDF_STATUS_SUCCESS;
}
#endif
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
/**
* wlan_mlme_defer_pmk_set_in_roaming() - Set the set_key pending status

Visa fil

@@ -4115,3 +4115,50 @@ wlan_set_sap_user_config_freq(struct wlan_objmgr_vdev *vdev,
mlme_priv->mlme_ap.user_config_sap_ch_freq = freq;
return QDF_STATUS_SUCCESS;
}
#ifdef CONFIG_BAND_6GHZ
bool
wlan_get_tpc_update_required_for_sta(struct wlan_objmgr_vdev *vdev)
{
struct mlme_legacy_priv *mlme_priv;
enum QDF_OPMODE opmode;
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
if (!mlme_priv) {
mlme_legacy_err("vdev legacy private object is NULL");
return false;
}
opmode = wlan_vdev_mlme_get_opmode(vdev);
if (opmode != QDF_SAP_MODE && opmode != QDF_P2P_GO_MODE) {
mlme_debug("Invalid opmode %d", opmode);
return false;
}
return mlme_priv->mlme_ap.update_required_scc_sta_power;
}
QDF_STATUS
wlan_set_tpc_update_required_for_sta(struct wlan_objmgr_vdev *vdev, bool value)
{
struct mlme_legacy_priv *mlme_priv;
enum QDF_OPMODE opmode;
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
if (!mlme_priv) {
mlme_legacy_err("vdev legacy private object is NULL");
return QDF_STATUS_E_INVAL;
}
opmode = wlan_vdev_mlme_get_opmode(vdev);
if (opmode != QDF_SAP_MODE && opmode != QDF_P2P_GO_MODE) {
mlme_debug("Invalid mode %d", opmode);
QDF_ASSERT(0);
return QDF_STATUS_E_FAILURE;
}
mlme_priv->mlme_ap.update_required_scc_sta_power = value;
mlme_debug("Set change scc power as %d", value);
return QDF_STATUS_SUCCESS;
}
#endif