qcacmn: Add random channel debug bit mask

Add WLAN_DEBUG_DFS_RANDOM_CHAN bit mask to enable/disable
random channel algorithm prints using DFS logging.

Change-Id: I77f01afcf59b8b790404eca8caa68c150a5d3ec2
CRs-Fixed: 2120265
This commit is contained in:
Shashikala Prabhu 2017-10-25 10:51:38 +05:30 • committed by snandini
commit 0ea0a2466e
2 changed files with 52 additions and 34 deletions

View file

@ -887,6 +887,7 @@ struct wlan_dfs {
* @WLAN_DEBUG_DFS_BIN5_FFT: BIN5 FFT check.
* @WLAN_DEBUG_DFS_BIN5_PULSE: BIN5 pulse check.
* @WLAN_DEBUG_DFS_FALSE_DET: False detection debug related prints.
* @WLAN_DEBUG_DFS_RANDOM_CHAN: Random channel selection.
*/
enum {
WLAN_DEBUG_DFS = 0x00000100,
@ -901,6 +902,7 @@ enum {
WLAN_DEBUG_DFS_BIN5_FFT = 0x00020000,
WLAN_DEBUG_DFS_BIN5_PULSE = 0x00040000,
WLAN_DEBUG_DFS_FALSE_DET = 0x00080000,
WLAN_DEBUG_DFS_RANDOM_CHAN = 0x00100000,
WLAN_DEBUG_DFS_MAX = 0x80000000,
WLAN_DEBUG_DFS_ALWAYS = WLAN_DEBUG_DFS_MAX
};

View file

@ -30,7 +30,8 @@
#include <qdf_mc_timer.h>
/**
* dfs_populate_80mhz_available_channels()- Populate channels for 80MHz uing bitmap
* dfs_populate_80mhz_available_channels()- Populate channels for 80MHz using
* bitmap
* @bitmap: bitmap
* @avail_chnl: prepared channel list
*
@ -60,13 +61,16 @@ static uint8_t dfs_populate_80mhz_available_channels(
(DFS_NEXT_5GHZ_CHANNEL * 3);
}
}
dfs_info(NULL, WLAN_DEBUG_DFS_ALWAYS, "channel count %d", chnl_count);
dfs_info(NULL, WLAN_DEBUG_DFS_ALWAYS,
"channel count %d", chnl_count);
return chnl_count;
}
/**
* dfs_populate_40mhz_available_channels()- Populate channels for 40MHz uing bitmap
* dfs_populate_40mhz_available_channels()- Populate channels for 40MHz using
* bitmap
* @bitmap: bitmap
* @avail_chnl: prepared channel list
*
@ -99,13 +103,15 @@ static uint8_t dfs_populate_40mhz_available_channels(
(DFS_NEXT_5GHZ_CHANNEL * 3);
}
}
dfs_info(NULL, WLAN_DEBUG_DFS_ALWAYS, "channel count %d", chnl_count);
dfs_info(NULL, WLAN_DEBUG_DFS_ALWAYS,
"channel count %d", chnl_count);
return chnl_count;
}
/**
* dfs_populate_available_channels()- Populate channels based on width and bitmap
* dfs_populate_available_channels()- Populate channels based on width and
* bitmap
* @bitmap: bitmap
* @ch_width: channel width
* @avail_chnl: prepared channel list
@ -168,6 +174,7 @@ static uint8_t dfs_get_rand_from_lst(uint8_t *ch_lst, uint8_t num_ch)
/**
* dfs_random_channel_sel_set_bitmap()- Set channel bit in bitmap based
* on given channel number
* @dfs: Pointer to DFS structure.
* @bitmap: bitmap
* @channel: channel number
*
@ -176,8 +183,9 @@ static uint8_t dfs_get_rand_from_lst(uint8_t *ch_lst, uint8_t num_ch)
* Return: None
*/
static void dfs_random_channel_sel_set_bitmap(
struct chan_bonding_bitmap *bitmap,
uint8_t channel)
struct wlan_dfs *dfs,
struct chan_bonding_bitmap *bitmap,
uint8_t channel)
{
int i = 0;
int start_chan = 0;
@ -192,12 +200,13 @@ static void dfs_random_channel_sel_set_bitmap(
}
}
dfs_info(NULL, WLAN_DEBUG_DFS_ALWAYS,
dfs_debug(dfs, WLAN_DEBUG_DFS_RANDOM_CHAN,
"Channel=%d is not in the bitmap", channel);
}
/**
* dfs_find_ch_with_fallback()- find random channel
* @dfs: Pointer to DFS structure.
* @ch_wd: channel width
* @center_freq_seg1: center frequency of secondary segment.
* @ch_lst: list of available channels.
@ -208,10 +217,12 @@ static void dfs_random_channel_sel_set_bitmap(
*
* Return: channel number
*/
static uint8_t dfs_find_ch_with_fallback(uint8_t *ch_wd,
uint8_t *center_freq_seg1,
uint8_t *ch_lst,
uint32_t num_ch)
static uint8_t dfs_find_ch_with_fallback(
struct wlan_dfs *dfs,
uint8_t *ch_wd,
uint8_t *center_freq_seg1,
uint8_t *ch_lst,
uint32_t num_ch)
{
bool flag = false;
uint32_t rand_byte = 0;
@ -229,9 +240,9 @@ static uint8_t dfs_find_ch_with_fallback(uint8_t *ch_wd,
ch_map.chan_bonding_set[5].start_chan = 149;
for (i = 0; i < num_ch; i++) {
dfs_info(NULL, WLAN_DEBUG_DFS_ALWAYS,
dfs_debug(dfs, WLAN_DEBUG_DFS_RANDOM_CHAN,
"channel = %d added to bitmap", ch_lst[i]);
dfs_random_channel_sel_set_bitmap(&ch_map, ch_lst[i]);
dfs_random_channel_sel_set_bitmap(dfs, &ch_map, ch_lst[i]);
}
/* populate available channel list from bitmap */
@ -242,11 +253,12 @@ static uint8_t dfs_find_ch_with_fallback(uint8_t *ch_wd,
if ((*ch_wd == DFS_CH_WIDTH_160MHZ) ||
(*ch_wd == DFS_CH_WIDTH_80P80MHZ) ||
(*ch_wd == DFS_CH_WIDTH_80MHZ)) {
dfs_info(NULL, WLAN_DEBUG_DFS_ALWAYS,
dfs_info(dfs, WLAN_DEBUG_DFS_ALWAYS,
"from [%d] to 40Mhz", *ch_wd);
*ch_wd = DFS_CH_WIDTH_40MHZ;
} else if (*ch_wd == DFS_CH_WIDTH_40MHZ) {
dfs_info(NULL, WLAN_DEBUG_DFS_ALWAYS, "from 40Mhz to 20MHz");
dfs_info(dfs, WLAN_DEBUG_DFS_ALWAYS,
"from 40Mhz to 20MHz");
*ch_wd = DFS_CH_WIDTH_20MHZ;
}
return 0;
@ -256,7 +268,7 @@ static uint8_t dfs_find_ch_with_fallback(uint8_t *ch_wd,
if (((*ch_wd == DFS_CH_WIDTH_160MHZ) ||
(*ch_wd == DFS_CH_WIDTH_80P80MHZ)) &&
(final_cnt < DFS_MAX_20M_SUB_CH)) {
dfs_info(NULL, WLAN_DEBUG_DFS_ALWAYS,
dfs_info(dfs, WLAN_DEBUG_DFS_ALWAYS,
"from [%d] to 80Mhz", *ch_wd);
*ch_wd = DFS_CH_WIDTH_80MHZ;
return 0;
@ -285,7 +297,7 @@ static uint8_t dfs_find_ch_with_fallback(uint8_t *ch_wd,
}
if ((flag == false) && (*ch_wd > DFS_CH_WIDTH_80MHZ)) {
dfs_info(NULL, WLAN_DEBUG_DFS_ALWAYS,
dfs_info(dfs, WLAN_DEBUG_DFS_ALWAYS,
"from [%d] to 80Mhz", *ch_wd);
*ch_wd = DFS_CH_WIDTH_80MHZ;
return 0;
@ -327,12 +339,12 @@ static uint8_t dfs_find_ch_with_fallback(uint8_t *ch_wd,
*ch_wd = DFS_CH_WIDTH_80MHZ;
*center_freq_seg1 = sec_seg_ch;
dfs_info(NULL, WLAN_DEBUG_DFS_ALWAYS,
dfs_info(dfs, WLAN_DEBUG_DFS_ALWAYS,
"Center frequency seg1 = %d", sec_seg_ch);
} else {
target_channel = dfs_get_rand_from_lst(final_lst, final_cnt);
}
dfs_info(NULL, WLAN_DEBUG_DFS_ALWAYS,
dfs_info(dfs, WLAN_DEBUG_DFS_ALWAYS,
"target channel = %d", target_channel);
return target_channel;
@ -380,7 +392,7 @@ static bool dfs_freq_is_in_nol(struct wlan_dfs *dfs, uint32_t freq)
nol = dfs->dfs_nol;
while (nol) {
if (freq == nol->nol_freq) {
dfs_info(dfs, WLAN_DEBUG_DFS_ALWAYS,
dfs_debug(dfs, WLAN_DEBUG_DFS_RANDOM_CHAN,
"%d is in nol", freq);
return true;
}
@ -423,7 +435,7 @@ static void dfs_apply_rules(struct wlan_dfs *dfs,
uint16_t flag_no_5g_chan = 0;
int i;
dfs_info(dfs, WLAN_DEBUG_DFS_ALWAYS, "flags %d", flags);
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;
@ -442,7 +454,8 @@ static void dfs_apply_rules(struct wlan_dfs *dfs,
if ((chan->dfs_ch_ieee == 0) ||
(chan->dfs_ch_ieee > MAX_CHANNEL_NUM)) {
dfs_err(dfs, WLAN_DEBUG_DFS_ALWAYS, "invalid channel %d",
dfs_debug(dfs, WLAN_DEBUG_DFS_RANDOM_CHAN,
"invalid channel %d",
chan->dfs_ch_ieee);
continue;
}
@ -451,7 +464,7 @@ static void dfs_apply_rules(struct wlan_dfs *dfs,
/* TODO : Skip all HT20 channels in the given mode */
if (chan->dfs_ch_ieee ==
dfs->dfs_curchan->dfs_ch_ieee) {
dfs_info(dfs, WLAN_DEBUG_DFS_ALWAYS,
dfs_debug(dfs, WLAN_DEBUG_DFS_RANDOM_CHAN,
"skip %d current operating channel\n",
chan->dfs_ch_ieee);
continue;
@ -461,7 +474,7 @@ static void dfs_apply_rules(struct wlan_dfs *dfs,
if (acs_info && (acs_info->acs_mode == 1) &&
((chan->dfs_ch_ieee < acs_info->start_ch) ||
(chan->dfs_ch_ieee > acs_info->end_ch))) {
dfs_info(dfs, WLAN_DEBUG_DFS_ALWAYS,
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);
@ -471,7 +484,7 @@ static void dfs_apply_rules(struct wlan_dfs *dfs,
if (flag_no_2g_chan &&
chan->dfs_ch_ieee <= DFS_MAX_24GHZ_CHANNEL) {
dfs_info(dfs, WLAN_DEBUG_DFS_ALWAYS,
dfs_debug(dfs, WLAN_DEBUG_DFS_RANDOM_CHAN,
"skip 2.4 GHz channel=%d",
chan->dfs_ch_ieee);
continue;
@ -479,7 +492,7 @@ static void dfs_apply_rules(struct wlan_dfs *dfs,
if (flag_no_5g_chan &&
chan->dfs_ch_ieee > DFS_MAX_24GHZ_CHANNEL) {
dfs_info(dfs, WLAN_DEBUG_DFS_ALWAYS,
dfs_debug(dfs, WLAN_DEBUG_DFS_RANDOM_CHAN,
"skip 5 GHz channel=%d",
chan->dfs_ch_ieee);
continue;
@ -487,7 +500,7 @@ static void dfs_apply_rules(struct wlan_dfs *dfs,
if (flag_no_weather) {
if (DFS_IS_CHANNEL_WEATHER_RADAR(chan->dfs_ch_freq)) {
dfs_info(dfs, WLAN_DEBUG_DFS_ALWAYS,
dfs_debug(dfs, WLAN_DEBUG_DFS_RANDOM_CHAN,
"skip weather channel=%d",
chan->dfs_ch_ieee);
continue;
@ -496,7 +509,7 @@ static void dfs_apply_rules(struct wlan_dfs *dfs,
if (flag_no_lower_5g &&
DFS_IS_CHAN_JAPAN_INDOOR(chan->dfs_ch_ieee)) {
dfs_info(dfs, WLAN_DEBUG_DFS_ALWAYS,
dfs_debug(dfs, WLAN_DEBUG_DFS_RANDOM_CHAN,
"skip indoor channel=%d",
chan->dfs_ch_ieee);
continue;
@ -504,20 +517,23 @@ static void dfs_apply_rules(struct wlan_dfs *dfs,
if (flag_no_upper_5g &&
DFS_IS_CHAN_JAPAN_OUTDOOR(chan->dfs_ch_ieee)) {
dfs_info(dfs, WLAN_DEBUG_DFS_ALWAYS, "skip outdoor channel=%d",
dfs_debug(dfs, WLAN_DEBUG_DFS_RANDOM_CHAN,
"skip outdoor channel=%d",
chan->dfs_ch_ieee);
continue;
}
if (flag_no_dfs_chan &&
(chan->dfs_ch_flagext & IEEE80211_CHAN_DFS)) {
dfs_info(dfs, WLAN_DEBUG_DFS_ALWAYS, "skip dfs channel=%d",
dfs_debug(dfs, WLAN_DEBUG_DFS_RANDOM_CHAN,
"skip dfs channel=%d",
chan->dfs_ch_ieee);
continue;
}
if (dfs_freq_is_in_nol(dfs, chan->dfs_ch_freq)) {
dfs_info(dfs, WLAN_DEBUG_DFS_ALWAYS, "skip nol channel=%d",
dfs_debug(dfs, WLAN_DEBUG_DFS_RANDOM_CHAN,
"skip nol channel=%d",
chan->dfs_ch_ieee);
continue;
}
@ -577,7 +593,7 @@ uint8_t dfs_prepare_random_channel(struct wlan_dfs *dfs,
break;
}
target_ch = dfs_find_ch_with_fallback(ch_wd,
target_ch = dfs_find_ch_with_fallback(dfs, ch_wd,
&cur_chan->dfs_ch_vhtop_ch_freq_seg2,
random_chan_list,
random_chan_cnt);
@ -591,7 +607,7 @@ uint8_t dfs_prepare_random_channel(struct wlan_dfs *dfs,
(target_ch ==
DFS_ADJACENT_WEATHER_RADAR_CHANNEL_NUM) &&
(*ch_wd == DFS_CH_WIDTH_40MHZ)) {
dfs_info(dfs, WLAN_DEBUG_DFS_ALWAYS,
dfs_debug(dfs, WLAN_DEBUG_DFS_RANDOM_CHAN,
"skip weather adjacent ch=%d\n",
target_ch);
continue;