From 273e871dc026dee36730f00b14bda7ce049519c5 Mon Sep 17 00:00:00 2001 From: Arif Hussain Date: Thu, 20 Dec 2018 16:11:10 -0800 Subject: [PATCH] qcacmn: Add Japan W53 channel flag support Add support to exclude/include Japan W53 channels in random channel selection. Change-Id: I359d6bb68e2737b64b77f6f3ad27f83fd33d3da8 CRs-Fixed: 2371013 --- umac/dfs/core/src/dfs_random_chan_sel.h | 5 +- umac/dfs/core/src/misc/dfs_random_chan_sel.c | 66 ++++++++++---------- umac/dfs/dispatcher/inc/wlan_dfs_ioctl.h | 3 + 3 files changed, 40 insertions(+), 34 deletions(-) diff --git a/umac/dfs/core/src/dfs_random_chan_sel.h b/umac/dfs/core/src/dfs_random_chan_sel.h index d1cf83bba1..88d8cbbd07 100644 --- a/umac/dfs/core/src/dfs_random_chan_sel.h +++ b/umac/dfs/core/src/dfs_random_chan_sel.h @@ -121,8 +121,9 @@ #endif #define DFS_IS_CHANNEL_WEATHER_RADAR(_f) (((_f) >= 5600) && ((_f) <= 5650)) -#define DFS_IS_CHAN_JAPAN_INDOOR(_ch) (((_ch) >= 36) && ((_ch) <= 64)) -#define DFS_IS_CHAN_JAPAN_OUTDOOR(_ch) (((_ch) >= 100) && ((_ch) <= 140)) +#define DFS_IS_CHAN_JAPAN_INDOOR(_ch) (((_ch) >= 36) && ((_ch) <= 64)) +#define DFS_IS_CHAN_JAPAN_W53(_ch) (((_ch) >= 52) && ((_ch) <= 64)) +#define DFS_IS_CHAN_JAPAN_OUTDOOR(_ch) (((_ch) >= 100) && ((_ch) <= 140)) /** * struct chan_bonding_info - for holding channel bonding bitmap diff --git a/umac/dfs/core/src/misc/dfs_random_chan_sel.c b/umac/dfs/core/src/misc/dfs_random_chan_sel.c index c8bd49e031..9eb6b5680a 100644 --- a/umac/dfs/core/src/misc/dfs_random_chan_sel.c +++ b/umac/dfs/core/src/misc/dfs_random_chan_sel.c @@ -1253,23 +1253,24 @@ static void dfs_apply_rules(struct wlan_dfs *dfs, struct dfs_acs_info *acs_info) { struct dfs_channel *chan; - uint16_t flag_no_weather = 0; - uint16_t flag_no_lower_5g = 0; - uint16_t flag_no_upper_5g = 0; - uint16_t flag_no_dfs_chan = 0; - uint16_t flag_no_2g_chan = 0; - uint16_t flag_no_5g_chan = 0; + bool flag_no_weather = 0; + bool flag_no_lower_5g = 0; + bool flag_no_upper_5g = 0; + bool flag_no_dfs_chan = 0; + bool flag_no_2g_chan = 0; + bool flag_no_5g_chan = 0; + bool flag_no_japan_w53 = 0; int i; dfs_debug(dfs, WLAN_DEBUG_DFS_RANDOM_CHAN, "flags %d", flags); flag_no_weather = (dfs_region == DFS_ETSI_REGION_VAL) ? flags & DFS_RANDOM_CH_FLAG_NO_WEATHER_CH : 0; - flag_no_lower_5g = (dfs_region == DFS_MKK_REGION_VAL) ? - flags & DFS_RANDOM_CH_FLAG_NO_LOWER_5G_CH : 0; - - flag_no_upper_5g = (dfs_region == DFS_MKK_REGION_VAL) ? - flags & DFS_RANDOM_CH_FLAG_NO_UPEER_5G_CH : 0; + if (dfs_region == DFS_MKK_REGION_VAL) { + flag_no_lower_5g = flags & DFS_RANDOM_CH_FLAG_NO_LOWER_5G_CH; + flag_no_upper_5g = flags & DFS_RANDOM_CH_FLAG_NO_UPEER_5G_CH; + flag_no_japan_w53 = flags & DFS_RANDOM_CH_FLAG_NO_JAPAN_W53_CH; + } flag_no_dfs_chan = flags & DFS_RANDOM_CH_FLAG_NO_DFS_CH; flag_no_2g_chan = flags & DFS_RANDOM_CH_FLAG_NO_2GHZ_CH; @@ -1281,8 +1282,7 @@ static void dfs_apply_rules(struct wlan_dfs *dfs, if ((chan->dfs_ch_ieee == 0) || (chan->dfs_ch_ieee > MAX_CHANNEL_NUM)) { dfs_debug(dfs, WLAN_DEBUG_DFS_RANDOM_CHAN, - "invalid channel %d", - chan->dfs_ch_ieee); + "invalid channel %d", chan->dfs_ch_ieee); continue; } @@ -1291,8 +1291,8 @@ static void dfs_apply_rules(struct wlan_dfs *dfs, if (chan->dfs_ch_ieee == dfs->dfs_curchan->dfs_ch_ieee) { dfs_debug(dfs, WLAN_DEBUG_DFS_RANDOM_CHAN, - "skip %d current operating channel\n", - chan->dfs_ch_ieee); + "skip %d current operating channel", + chan->dfs_ch_ieee); continue; } } @@ -1301,9 +1301,9 @@ static void dfs_apply_rules(struct wlan_dfs *dfs, ((chan->dfs_ch_ieee < acs_info->start_ch) || (chan->dfs_ch_ieee > acs_info->end_ch))) { dfs_debug(dfs, WLAN_DEBUG_DFS_RANDOM_CHAN, - "skip ch %d not in acs range (%d-%d)", - chan->dfs_ch_ieee, acs_info->start_ch, - acs_info->end_ch); + "skip ch %d not in acs range (%d-%d)", + chan->dfs_ch_ieee, acs_info->start_ch, + acs_info->end_ch); continue; } @@ -1311,24 +1311,22 @@ static void dfs_apply_rules(struct wlan_dfs *dfs, if (flag_no_2g_chan && chan->dfs_ch_ieee <= DFS_MAX_24GHZ_CHANNEL) { dfs_debug(dfs, WLAN_DEBUG_DFS_RANDOM_CHAN, - "skip 2.4 GHz channel=%d", - chan->dfs_ch_ieee); + "skip 2.4 GHz channel=%d", chan->dfs_ch_ieee); continue; } if (flag_no_5g_chan && chan->dfs_ch_ieee > DFS_MAX_24GHZ_CHANNEL) { dfs_debug(dfs, WLAN_DEBUG_DFS_RANDOM_CHAN, - "skip 5 GHz channel=%d", - chan->dfs_ch_ieee); + "skip 5 GHz channel=%d", chan->dfs_ch_ieee); continue; } if (flag_no_weather) { if (DFS_IS_CHANNEL_WEATHER_RADAR(chan->dfs_ch_freq)) { dfs_debug(dfs, WLAN_DEBUG_DFS_RANDOM_CHAN, - "skip weather channel=%d", - chan->dfs_ch_ieee); + "skip weather channel=%d", + chan->dfs_ch_ieee); continue; } } @@ -1336,31 +1334,35 @@ static void dfs_apply_rules(struct wlan_dfs *dfs, if (flag_no_lower_5g && DFS_IS_CHAN_JAPAN_INDOOR(chan->dfs_ch_ieee)) { dfs_debug(dfs, WLAN_DEBUG_DFS_RANDOM_CHAN, - "skip indoor channel=%d", - chan->dfs_ch_ieee); + "skip indoor channel=%d", chan->dfs_ch_ieee); continue; } if (flag_no_upper_5g && DFS_IS_CHAN_JAPAN_OUTDOOR(chan->dfs_ch_ieee)) { dfs_debug(dfs, WLAN_DEBUG_DFS_RANDOM_CHAN, - "skip outdoor channel=%d", - chan->dfs_ch_ieee); + "skip outdoor channel=%d", chan->dfs_ch_ieee); continue; } if (flag_no_dfs_chan && (chan->dfs_ch_flagext & WLAN_CHAN_DFS)) { dfs_debug(dfs, WLAN_DEBUG_DFS_RANDOM_CHAN, - "skip dfs channel=%d", - chan->dfs_ch_ieee); + "skip dfs channel=%d", chan->dfs_ch_ieee); + continue; + } + + if (flag_no_japan_w53 && + DFS_IS_CHAN_JAPAN_W53(chan->dfs_ch_ieee)) { + dfs_debug(dfs, WLAN_DEBUG_DFS_RANDOM_CHAN, + "skip japan W53 channel=%d", + chan->dfs_ch_ieee); continue; } if (dfs_freq_is_in_nol(dfs, chan->dfs_ch_freq)) { dfs_debug(dfs, WLAN_DEBUG_DFS_RANDOM_CHAN, - "skip nol channel=%d", - chan->dfs_ch_ieee); + "skip nol channel=%d", chan->dfs_ch_ieee); continue; } diff --git a/umac/dfs/dispatcher/inc/wlan_dfs_ioctl.h b/umac/dfs/dispatcher/inc/wlan_dfs_ioctl.h index 2ed5af1ad6..99cdd9edfa 100644 --- a/umac/dfs/dispatcher/inc/wlan_dfs_ioctl.h +++ b/umac/dfs/dispatcher/inc/wlan_dfs_ioctl.h @@ -161,6 +161,9 @@ struct dfs_bangradar_enh_params { /* Flag to enable Reduced BW Agile DFS */ #define DFS_RANDOM_CH_FLAG_ENABLE_REDUCED_BW 0x0080 /* 0000 0000 1000 0000 */ +/* Flag to exclude Japan W53 channnels */ +#define DFS_RANDOM_CH_FLAG_NO_JAPAN_W53_CH 0x0100 /* 0000 0001 0000 0000 */ + /** * struct wlan_dfs_caps - DFS capability structure. * @wlan_dfs_ext_chan_ok: Can radar be detected on the extension chan?