mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-15 01:01:56 -04:00
qcacld-3.0: Add 6GHz support for VENDOR_SUBCMD_ACS_POLICY
As a part of 6GHz support, add support to parse channel frequency attribute: QCA_WLAN_VENDOR_ATTR_ACS_FREQUENCY_HINT (in MHz) in QCA_NL80211_VENDOR_SUBCMD_ACS_POLICY command data. Change-Id: Ic7bee5fe1123b82607e375c71a21b9744d67ea17 CRs-Fixed: 2533998
This commit is contained in:
parent
c471ae9eae
commit
e83ac29a70
4 changed files with 32 additions and 23 deletions
|
|
@ -1427,11 +1427,11 @@ enum driver_modules_status {
|
|||
/**
|
||||
* struct acs_dfs_policy - Define ACS policies
|
||||
* @acs_dfs_mode: Dfs mode enabled/disabled.
|
||||
* @acs_channel: pre defined channel to avoid ACS.
|
||||
* @acs_chan_freq: pre defined channel frequency to avoid ACS.
|
||||
*/
|
||||
struct acs_dfs_policy {
|
||||
enum dfs_mode acs_dfs_mode;
|
||||
uint8_t acs_channel;
|
||||
uint32_t acs_chan_freq;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -1900,9 +1900,8 @@ int wlan_hdd_cfg80211_start_acs(struct hdd_adapter *adapter)
|
|||
hdd_err("SAP config is NULL");
|
||||
return -EINVAL;
|
||||
}
|
||||
if (hdd_ctx->acs_policy.acs_channel)
|
||||
sap_config->chan_freq = wlan_reg_chan_to_freq(hdd_ctx->pdev,
|
||||
hdd_ctx->acs_policy.acs_channel);
|
||||
if (hdd_ctx->acs_policy.acs_chan_freq)
|
||||
sap_config->chan_freq = hdd_ctx->acs_policy.acs_chan_freq;
|
||||
else
|
||||
sap_config->chan_freq = AUTO_CHANNEL_SELECT;
|
||||
ucfg_policy_mgr_get_mcc_scc_switch(hdd_ctx->psoc,
|
||||
|
|
@ -10254,8 +10253,9 @@ wlan_hdd_sap_config_policy[QCA_WLAN_VENDOR_ATTR_SAP_CONFIG_MAX + 1] = {
|
|||
|
||||
static const struct nla_policy
|
||||
wlan_hdd_set_acs_dfs_config_policy[QCA_WLAN_VENDOR_ATTR_ACS_DFS_MAX + 1] = {
|
||||
[QCA_WLAN_VENDOR_ATTR_ACS_DFS_MODE] = {.type = NLA_U8 },
|
||||
[QCA_WLAN_VENDOR_ATTR_ACS_CHANNEL_HINT] = {.type = NLA_U8 },
|
||||
[QCA_WLAN_VENDOR_ATTR_ACS_DFS_MODE] = {.type = NLA_U8},
|
||||
[QCA_WLAN_VENDOR_ATTR_ACS_CHANNEL_HINT] = {.type = NLA_U8},
|
||||
[QCA_WLAN_VENDOR_ATTR_ACS_FREQUENCY_HINT] = {.type = NLA_U32},
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -10285,7 +10285,7 @@ __wlan_hdd_cfg80211_acs_dfs_mode(struct wiphy *wiphy,
|
|||
int ret;
|
||||
struct acs_dfs_policy *acs_policy;
|
||||
int mode = DFS_MODE_NONE;
|
||||
int channel_hint = 0;
|
||||
uint32_t freq_hint = 0;
|
||||
|
||||
hdd_enter_dev(wdev->netdev);
|
||||
|
||||
|
|
@ -10323,15 +10323,25 @@ __wlan_hdd_cfg80211_acs_dfs_mode(struct wiphy *wiphy,
|
|||
* SCM sends this attribute to provide an active channel,
|
||||
* to skip redundant ACS between drivers, and save driver start up time
|
||||
*/
|
||||
if (tb[QCA_WLAN_VENDOR_ATTR_ACS_CHANNEL_HINT])
|
||||
channel_hint = nla_get_u8(
|
||||
if (tb[QCA_WLAN_VENDOR_ATTR_ACS_FREQUENCY_HINT]) {
|
||||
freq_hint = nla_get_u32(
|
||||
tb[QCA_WLAN_VENDOR_ATTR_ACS_FREQUENCY_HINT]);
|
||||
} else if (tb[QCA_WLAN_VENDOR_ATTR_ACS_CHANNEL_HINT]) {
|
||||
uint32_t channel_hint = nla_get_u8(
|
||||
tb[QCA_WLAN_VENDOR_ATTR_ACS_CHANNEL_HINT]);
|
||||
|
||||
if (!IS_CHANNEL_VALID(channel_hint)) {
|
||||
hdd_err("acs channel is not valid");
|
||||
freq_hint = wlan_reg_legacy_chan_to_freq(hdd_ctx->pdev,
|
||||
channel_hint);
|
||||
}
|
||||
|
||||
if (freq_hint && !WLAN_REG_IS_24GHZ_CH_FREQ(freq_hint) &&
|
||||
!WLAN_REG_IS_5GHZ_CH_FREQ(freq_hint) &&
|
||||
!WLAN_REG_IS_6GHZ_CHAN_FREQ(freq_hint)) {
|
||||
hdd_err("acs channel frequency is not valid");
|
||||
return -EINVAL;
|
||||
}
|
||||
acs_policy->acs_channel = channel_hint;
|
||||
|
||||
acs_policy->acs_chan_freq = freq_hint;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3325,8 +3325,7 @@ QDF_STATUS hdd_init_ap_mode(struct hdd_adapter *adapter, bool reinit)
|
|||
|
||||
if (!reinit) {
|
||||
adapter->session.ap.sap_config.chan_freq =
|
||||
wlan_reg_chan_to_freq(hdd_ctx->pdev,
|
||||
hdd_ctx->acs_policy.acs_channel);
|
||||
hdd_ctx->acs_policy.acs_chan_freq;
|
||||
acs_dfs_mode = hdd_ctx->acs_policy.acs_dfs_mode;
|
||||
adapter->session.ap.sap_config.acs_dfs_mode =
|
||||
wlan_hdd_get_dfs_mode(acs_dfs_mode);
|
||||
|
|
@ -5054,13 +5053,12 @@ int wlan_hdd_cfg80211_start_bss(struct hdd_adapter *adapter,
|
|||
hdd_debug("acs_mode %d", config->acs_cfg.acs_mode);
|
||||
|
||||
if (config->acs_cfg.acs_mode == true) {
|
||||
hdd_debug("acs_channel %d, acs_dfs_mode %d",
|
||||
hdd_ctx->acs_policy.acs_channel,
|
||||
hdd_ctx->acs_policy.acs_dfs_mode);
|
||||
hdd_debug("acs_chan_freq %u, acs_dfs_mode %u",
|
||||
hdd_ctx->acs_policy.acs_chan_freq,
|
||||
hdd_ctx->acs_policy.acs_dfs_mode);
|
||||
|
||||
if (hdd_ctx->acs_policy.acs_channel)
|
||||
config->chan_freq = wlan_reg_chan_to_freq(hdd_ctx->pdev,
|
||||
hdd_ctx->acs_policy.acs_channel);
|
||||
if (hdd_ctx->acs_policy.acs_chan_freq)
|
||||
config->chan_freq = hdd_ctx->acs_policy.acs_chan_freq;
|
||||
mode = hdd_ctx->acs_policy.acs_dfs_mode;
|
||||
config->acs_dfs_mode = wlan_hdd_get_dfs_mode(mode);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9346,7 +9346,8 @@ void hdd_unsafe_channel_restart_sap(struct hdd_context *hdd_ctxt)
|
|||
* 0. Otherwise these settings will override
|
||||
* the ACS while restart.
|
||||
*/
|
||||
hdd_ctxt->acs_policy.acs_channel = AUTO_CHANNEL_SELECT;
|
||||
hdd_ctxt->acs_policy.acs_chan_freq =
|
||||
AUTO_CHANNEL_SELECT;
|
||||
ucfg_mlme_get_sap_internal_restart(hdd_ctxt->psoc,
|
||||
&value);
|
||||
if (value) {
|
||||
|
|
@ -9425,7 +9426,7 @@ static void hdd_lte_coex_restart_sap(struct hdd_adapter *adapter,
|
|||
* reset to 0. Otherwise these settings will override
|
||||
* the ACS while restart.
|
||||
*/
|
||||
hdd_ctx->acs_policy.acs_channel = AUTO_CHANNEL_SELECT;
|
||||
hdd_ctx->acs_policy.acs_chan_freq = AUTO_CHANNEL_SELECT;
|
||||
|
||||
hdd_debug("sending coex indication");
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue