qcacmn: DO not disable NOL channels

As part of FR68217, wlan_get_chaninfo fetches information from the
regulatory channel list. In regulatory channel list, if radar is
detected the entire channel is marked as disabled channels.

After radar detection, when cfg80211 request for channel info,
"QCA_NL80211_VENDOR_SUBCMD_LIST_CHAN" returns center channel number
as 0. SON application uses the center channel number for channel
preference update.

The center channel number value should be a valid channel number
instead of 0. Therefore instead of marking the NOL channel as
disable, update the channel state as CHANNEL_STATE_DFS. This
helps in updating the center channel number.

CRs-Fixed: 2919437
Change-Id: I1722e23e1a68adec4870ad13b2b9a5e41005921c
This commit is contained in:
Vijay Krishnan
2021-04-13 10:27:27 +05:30
committed by snandini
parent e4831f5794
commit fe6b1dc264
2 changed files with 59 additions and 29 deletions

View File

@@ -221,19 +221,24 @@ static const struct bonded_channel_freq bonded_chan_320mhz_list_freq[] = {
#endif /*CONFIG_CHAN_FREQ_API*/
static const enum phy_ch_width get_next_lower_bw[] = {
enum phy_ch_width get_next_lower_bandwidth(enum phy_ch_width ch_width)
{
static const enum phy_ch_width get_next_lower_bw[] = {
/* 80+80 mode not supported in chips that support 320 mode */
#ifdef WLAN_FEATURE_11BE
[CH_WIDTH_320MHZ] = CH_WIDTH_160MHZ,
[CH_WIDTH_320MHZ] = CH_WIDTH_160MHZ,
#endif
[CH_WIDTH_80P80MHZ] = CH_WIDTH_160MHZ,
[CH_WIDTH_160MHZ] = CH_WIDTH_80MHZ,
[CH_WIDTH_80MHZ] = CH_WIDTH_40MHZ,
[CH_WIDTH_40MHZ] = CH_WIDTH_20MHZ,
[CH_WIDTH_20MHZ] = CH_WIDTH_10MHZ,
[CH_WIDTH_10MHZ] = CH_WIDTH_5MHZ,
[CH_WIDTH_5MHZ] = CH_WIDTH_INVALID
};
[CH_WIDTH_80P80MHZ] = CH_WIDTH_160MHZ,
[CH_WIDTH_160MHZ] = CH_WIDTH_80MHZ,
[CH_WIDTH_80MHZ] = CH_WIDTH_40MHZ,
[CH_WIDTH_40MHZ] = CH_WIDTH_20MHZ,
[CH_WIDTH_20MHZ] = CH_WIDTH_10MHZ,
[CH_WIDTH_10MHZ] = CH_WIDTH_5MHZ,
[CH_WIDTH_5MHZ] = CH_WIDTH_INVALID
};
return get_next_lower_bw[ch_width];
}
const struct chan_map channel_map_us[NUM_CHANNELS] = {
[CHAN_ENUM_2412] = {2412, 1, 20, 40},
@@ -1393,9 +1398,8 @@ enum channel_state reg_get_2g_bonded_channel_state(
*
* Return: Channel state
*/
static enum channel_state reg_combine_channel_states(
enum channel_state chan_state1,
enum channel_state chan_state2)
enum channel_state reg_combine_channel_states(enum channel_state chan_state1,
enum channel_state chan_state2)
{
if ((chan_state1 == CHANNEL_STATE_INVALID) ||
(chan_state2 == CHANNEL_STATE_INVALID))
@@ -1483,7 +1487,8 @@ static void reg_set_5g_channel_params(struct wlan_objmgr_pdev *pdev,
break;
}
update_bw:
ch_params->ch_width = get_next_lower_bw[ch_params->ch_width];
ch_params->ch_width =
get_next_lower_bandwidth(ch_params->ch_width);
}
if (ch_params->ch_width == CH_WIDTH_160MHZ) {
@@ -1550,7 +1555,8 @@ static void reg_set_2g_channel_params(struct wlan_objmgr_pdev *pdev,
break;
}
ch_params->ch_width = get_next_lower_bw[ch_params->ch_width];
ch_params->ch_width =
get_next_lower_bandwidth(ch_params->ch_width);
}
/* Overwrite center_freq_seg1 to 0 for 2.4 Ghz */
ch_params->center_freq_seg1 = 0;
@@ -3897,7 +3903,8 @@ static void reg_set_5g_channel_params_for_freq(struct wlan_objmgr_pdev *pdev,
break;
}
update_bw:
ch_params->ch_width = get_next_lower_bw[ch_params->ch_width];
ch_params->ch_width =
get_next_lower_bandwidth(ch_params->ch_width);
}
if (ch_params->ch_width == CH_WIDTH_160MHZ) {
@@ -3926,18 +3933,10 @@ update_bw:
}
}
/**
* reg_set_2g_channel_params_for_freq() - set the 2.4G bonded channel parameters
* @oper_freq: operating channel
* @ch_params: channel parameters
* @sec_ch_2g_freq: 2.4G secondary channel
*
* Return: void
*/
static void reg_set_2g_channel_params_for_freq(struct wlan_objmgr_pdev *pdev,
uint16_t oper_freq,
struct ch_params *ch_params,
uint16_t sec_ch_2g_freq)
void reg_set_2g_channel_params_for_freq(struct wlan_objmgr_pdev *pdev,
uint16_t oper_freq,
struct ch_params *ch_params,
uint16_t sec_ch_2g_freq)
{
enum channel_state chan_state = CHANNEL_STATE_ENABLE;
struct wlan_regulatory_pdev_priv_obj *pdev_priv_obj;
@@ -4011,7 +4010,8 @@ static void reg_set_2g_channel_params_for_freq(struct wlan_objmgr_pdev *pdev,
break;
}
update_bw:
ch_params->ch_width = get_next_lower_bw[ch_params->ch_width];
ch_params->ch_width =
get_next_lower_bandwidth(ch_params->ch_width);
}
/* Overwrite mhz_freq_seg1 and center_freq_seg1 to 0 for 2.4 Ghz */
ch_params->mhz_freq_seg1 = 0;

View File

@@ -144,6 +144,13 @@ extern const struct chan_map channel_map_global[];
#ifdef WLAN_FEATURE_11BE
#define ALL_SCHANS_PUNC 0x0000 /* all subchannels punctured */
#endif
/**
* get_next_lower_bandwidth() - Get next lower bandwidth
* @ch_width: Channel width
*
* Return: Channel width
*/
enum phy_ch_width get_next_lower_bandwidth(enum phy_ch_width ch_width);
#ifdef CONFIG_CHAN_NUM_API
/**
@@ -1611,6 +1618,29 @@ bool reg_is_ext_tpc_supported(struct wlan_objmgr_psoc *psoc);
const struct bonded_channel_freq *
reg_get_bonded_chan_entry(qdf_freq_t freq, enum phy_ch_width chwidth);
/**
* reg_set_2g_channel_params_for_freq() - set the 2.4G bonded channel parameters
* @oper_freq: operating channel
* @ch_params: channel parameters
* @sec_ch_2g_freq: 2.4G secondary channel
*
* Return: void
*/
void reg_set_2g_channel_params_for_freq(struct wlan_objmgr_pdev *pdev,
uint16_t oper_freq,
struct ch_params *ch_params,
uint16_t sec_ch_2g_freq);
/**
* reg_combine_channel_states() - Get minimum of channel state1 and state2
* @chan_state1: Channel state1
* @chan_state2: Channel state2
*
* Return: Channel state
*/
enum channel_state reg_combine_channel_states(enum channel_state chan_state1,
enum channel_state chan_state2);
#if defined(CONFIG_BAND_6GHZ) && defined(CONFIG_REG_CLIENT)
/**
* reg_set_lower_6g_edge_ch_supp() - Set if lower 6ghz edge channel is