mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-11 07:03:09 -04:00
qcacld-3.0: Update set_disable_channel_list cmd for 6 GHz channels
Currently SET_DISABLE_CHANNEL_LIST command is used to disable legacy channels only. Update this command to accept 6 GHz channel input as frequency along with legacy channels. Change-Id: Id55493acfa115da059404af1cd3901e877e46632 CRs-Fixed: 3601196
This commit is contained in:
parent
f94bee2bdd
commit
18d65910d6
2 changed files with 46 additions and 11 deletions
|
|
@ -6656,6 +6656,36 @@ static void disconnect_sta_and_stop_sap(struct hdd_context *hdd_ctx,
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* hdd_check_chan_and_fill_freq() - to validate chan and convert into freq
|
||||
* @pdev: The physical dev to cache the channels for
|
||||
* @in_chan: input as channel number or freq
|
||||
* @freq: frequency for input in_chan (output parameter)
|
||||
*
|
||||
* This function checks input "in_chan" is channel number, if yes then fills
|
||||
* appropriate frequency into "freq" out param. If the "in_param" is greater
|
||||
* than MAX_5GHZ_CHANNEL then gets the valid frequencies for legacy channels
|
||||
* else get the valid channel for 6Ghz frequency.
|
||||
*
|
||||
* Return: true if "in_chan" is valid channel/frequency; false otherwise
|
||||
*/
|
||||
static bool hdd_check_chan_and_fill_freq(struct wlan_objmgr_pdev *pdev,
|
||||
uint32_t *in_chan, qdf_freq_t *freq)
|
||||
{
|
||||
if (IS_CHANNEL_VALID(*in_chan)) {
|
||||
*freq = wlan_reg_legacy_chan_to_freq(pdev, *in_chan);
|
||||
} else if (WLAN_REG_IS_24GHZ_CH_FREQ(*in_chan) ||
|
||||
WLAN_REG_IS_5GHZ_CH_FREQ(*in_chan) ||
|
||||
WLAN_REG_IS_6GHZ_CHAN_FREQ(*in_chan)) {
|
||||
*freq = *in_chan;
|
||||
*in_chan = wlan_reg_freq_to_chan(pdev, *in_chan);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* hdd_parse_disable_chan_cmd() - Parse the channel list received
|
||||
* in command.
|
||||
|
|
@ -6665,11 +6695,13 @@ static void disconnect_sta_and_stop_sap(struct hdd_context *hdd_ctx,
|
|||
* This function parses the channel list received in the command.
|
||||
* command should be a string having format
|
||||
* SET_DISABLE_CHANNEL_LIST <num of channels>
|
||||
* <channels separated by spaces>.
|
||||
* If the command comes multiple times than this function will compare
|
||||
* the channels received in the command with the channles cached in the
|
||||
* first command, if the channel list matches with the cached channles,
|
||||
* it returns success otherwise returns failure.
|
||||
* <channels separated by spaces>/<frequency separated by spaces>.
|
||||
* If this command has frequency as input, this function first converts into
|
||||
* equivalent channel.
|
||||
* If the command comes multiple times then the channels received in the
|
||||
* command or channels converted from frequency will be compared with the
|
||||
* channels cached in the first command, if the channel list matches with
|
||||
* the cached channels, it returns success otherwise returns failure.
|
||||
*
|
||||
* Return: 0 on success, Error code on failure
|
||||
*/
|
||||
|
|
@ -6681,6 +6713,7 @@ static int hdd_parse_disable_chan_cmd(struct hdd_adapter *adapter, uint8_t *ptr)
|
|||
int j, i, temp_int, ret = 0, num_channels;
|
||||
qdf_freq_t *chan_freq_list = NULL;
|
||||
bool is_command_repeated = false;
|
||||
qdf_freq_t freq = 0;
|
||||
|
||||
if (!hdd_ctx) {
|
||||
hdd_err("HDD Context is NULL");
|
||||
|
|
@ -6780,15 +6813,16 @@ static int hdd_parse_disable_chan_cmd(struct hdd_adapter *adapter, uint8_t *ptr)
|
|||
goto parse_failed;
|
||||
}
|
||||
|
||||
if (!IS_CHANNEL_VALID(temp_int)) {
|
||||
if (!hdd_check_chan_and_fill_freq(hdd_ctx->pdev, &temp_int,
|
||||
&freq)) {
|
||||
hdd_err("Invalid channel number received");
|
||||
ret = -EINVAL;
|
||||
goto parse_failed;
|
||||
}
|
||||
|
||||
hdd_debug("channel[%d] = %d", j, temp_int);
|
||||
chan_freq_list[j] = wlan_reg_legacy_chan_to_freq(hdd_ctx->pdev,
|
||||
temp_int);
|
||||
hdd_debug("channel[%d] = %d Frequency[%d] = %d", j, temp_int,
|
||||
j, freq);
|
||||
chan_freq_list[j] = freq;
|
||||
}
|
||||
|
||||
/*extra arguments check*/
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2012-2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
|
|
@ -3230,7 +3230,8 @@ qdf_freq_t wlansap_get_chan_band_restrict(struct sap_context *sap_ctx,
|
|||
sap_debug("Restore chan freq: %d, width: %d",
|
||||
restart_freq, restart_ch_width);
|
||||
*csa_reason = CSA_REASON_BAND_RESTRICTED;
|
||||
} else if (wlan_reg_is_disable_for_freq(mac->pdev,
|
||||
} else if (wlan_reg_is_disable_in_secondary_list_for_freq(
|
||||
mac->pdev,
|
||||
sap_ctx->chan_freq)) {
|
||||
sap_debug("channel is disabled");
|
||||
*csa_reason = CSA_REASON_CHAN_DISABLED;
|
||||
|
|
|
|||
Loading…
Reference in a new issue