diff --git a/umac/dfs/core/src/dfs_channel.h b/umac/dfs/core/src/dfs_channel.h index 8e30bba1ea27..e46cda1fd238 100644 --- a/umac/dfs/core/src/dfs_channel.h +++ b/umac/dfs/core/src/dfs_channel.h @@ -162,6 +162,30 @@ enum dfs_ieee80211_opmode { /* VHT 80_80 channel */ #define IEEE80211_CHAN_VHT80_80 0x08000000 +/* HE 20 channel */ +#define IEEE80211_CHAN_HE20 0x0000000010000000 + +/* HE 40 with extension channel above */ +#define IEEE80211_CHAN_HE40PLUS 0x0000000020000000 + +/* HE 40 with extension channel below */ +#define IEEE80211_CHAN_HE40MINUS 0x0000000040000000 + +/* HE 40 Intolerant */ +#define IEEE80211_CHAN_HE40INTOL 0x0000000080000000 + +/* HE 40 Intolerant mark bit for ACS use */ +#define IEEE80211_CHAN_HE40INTOLMARK 0x0000000100000000 + +/* HE 80 channel */ +#define IEEE80211_CHAN_HE80 0x0000000200000000 + +/* HE 160 channel */ +#define IEEE80211_CHAN_HE160 0x0000000400000000 + +/* HE 80_80 channel */ +#define IEEE80211_CHAN_HE80_80 0x0000000800000000 + /* flagext */ #define IEEE80211_CHAN_DFS_RADAR_FOUND 0x01 @@ -238,6 +262,42 @@ enum dfs_ieee80211_opmode { #define IEEE80211_CHAN_11NA_HT40MINUS \ (IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_HT40MINUS) +#define IEEE80211_CHAN_11AXG_HE20 \ + (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_HE20) + +#define IEEE80211_CHAN_11AXA_HE20 \ + (IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_HE20) + +#define IEEE80211_CHAN_11AXG_HE40PLUS \ + (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_HE40PLUS) + +#define IEEE80211_CHAN_11AXG_HE40MINUS \ + (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_HE40MINUS) + +#define IEEE80211_CHAN_11AXG_HE40 \ + (IEEE80211_CHAN_11AXG_HE40PLUS | IEEE80211_CHAN_11AXG_HE40MINUS) + +#define IEEE80211_CHAN_11AXA_HE40PLUS \ + (IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_HE40PLUS) + +#define IEEE80211_CHAN_11AXA_HE40MINUS \ + (IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_HE40MINUS) + +#define IEEE80211_CHAN_11AXA_HE40 \ + (IEEE80211_CHAN_11AXA_HE40PLUS | IEEE80211_CHAN_11AXA_HE40MINUS) + +#define IEEE80211_CHAN_11AX_HE40 \ + (IEEE80211_CHAN_HE40PLUS | IEEE80211_CHAN_HE40MINUS) + +#define IEEE80211_CHAN_11AXA_HE80 \ + (IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_HE80) + +#define IEEE80211_CHAN_11AXA_HE160 \ + (IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_HE160) + +#define IEEE80211_CHAN_11AXA_HE80_80 \ + (IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_HE80_80) + #define IEEE80211_CHAN_ALL \ (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_5GHZ | \ IEEE80211_CHAN_GFSK | IEEE80211_CHAN_CCK | \ @@ -246,7 +306,11 @@ enum dfs_ieee80211_opmode { IEEE80211_CHAN_HT40MINUS | IEEE80211_CHAN_VHT20 | \ IEEE80211_CHAN_VHT40PLUS | IEEE80211_CHAN_VHT40MINUS | \ IEEE80211_CHAN_VHT80 | IEEE80211_CHAN_VHT160 | \ - IEEE80211_CHAN_VHT80_80 | IEEE80211_CHAN_HALF | IEEE80211_CHAN_QUARTER) + IEEE80211_CHAN_VHT80_80 | IEEE80211_CHAN_HALF | \ + IEEE80211_CHAN_QUARTER | IEEE80211_CHAN_HE20 | \ + IEEE80211_CHAN_HE40PLUS | IEEE80211_CHAN_HE40MINUS | \ + IEEE80211_CHAN_HE80 | IEEE80211_CHAN_HE160 | \ + IEEE80211_CHAN_HE80_80) #define IEEE80211_CHAN_ALLTURBO \ (IEEE80211_CHAN_ALL | IEEE80211_CHAN_TURBO | IEEE80211_CHAN_STURBO) diff --git a/umac/dfs/core/src/misc/dfs_process_radar_found_ind.c b/umac/dfs/core/src/misc/dfs_process_radar_found_ind.c index 056dfae69916..1f5859a82e89 100644 --- a/umac/dfs/core/src/misc/dfs_process_radar_found_ind.c +++ b/umac/dfs/core/src/misc/dfs_process_radar_found_ind.c @@ -244,31 +244,44 @@ void dfs_process_radar_found_indication(struct wlan_dfs *dfs, radar_found->freq_offset, radar_found->is_chirp, flag, freq_center); - if ((flag & IEEE80211_CHAN_HT20) || - (flag & IEEE80211_CHAN_VHT20)) { + if ((flag & IEEE80211_CHAN_A) || + (flag & IEEE80211_CHAN_11NA_HT20) || + (flag & IEEE80211_CHAN_HT20) || + (flag & IEEE80211_CHAN_VHT20) || + (flag & IEEE80211_CHAN_11AXA_HE20)) { if (radar_found->is_chirp || (sidx && !(abs(sidx) % DFS_BOUNDRY_SIDX))) { freq_offset.offset[1] -= DFS_CHIRP_OFFSET; freq_offset.offset[2] += DFS_CHIRP_OFFSET; } dfs_radar_chan_for_20(&freq_offset, freq_center); - } else if ((flag & IEEE80211_CHAN_VHT40PLUS) || - (flag & IEEE80211_CHAN_HT40PLUS) || - (flag & IEEE80211_CHAN_VHT40MINUS) || - (flag & IEEE80211_CHAN_HT40MINUS)) { + } else if ((flag & IEEE80211_CHAN_VHT40PLUS) || + (flag & IEEE80211_CHAN_VHT40MINUS) || + (flag & IEEE80211_CHAN_HT40PLUS) || + (flag & IEEE80211_CHAN_HT40MINUS) || + (flag & IEEE80211_CHAN_11NA_HT40PLUS) || + (flag & IEEE80211_CHAN_11NA_HT40MINUS) || + (flag & IEEE80211_CHAN_11AXA_HE40PLUS) || + (flag & IEEE80211_CHAN_11AXA_HE40MINUS)) { if (radar_found->is_chirp || !(abs(sidx) % DFS_BOUNDRY_SIDX)) { freq_offset.offset[1] -= DFS_CHIRP_OFFSET; freq_offset.offset[2] += DFS_CHIRP_OFFSET; } dfs_radar_chan_for_40(&freq_offset, freq_center); - } else if ((flag & IEEE80211_CHAN_VHT80) || - (flag & IEEE80211_CHAN_VHT80_80) || - (flag & IEEE80211_CHAN_VHT160)) { + } else if ((flag & IEEE80211_CHAN_VHT80) || + (flag & IEEE80211_CHAN_VHT80_80) || + (flag & IEEE80211_CHAN_VHT160) || + (flag & IEEE80211_CHAN_11AXA_HE80) || + (flag & IEEE80211_CHAN_11AXA_HE80_80) || + (flag & IEEE80211_CHAN_11AXA_HE160)) { if (radar_found->is_chirp || !(abs(sidx) % DFS_BOUNDRY_SIDX)) { freq_offset.offset[1] -= DFS_CHIRP_OFFSET; freq_offset.offset[2] += DFS_CHIRP_OFFSET; } dfs_radar_chan_for_80(&freq_offset, freq_center); + } else { + DFS_PRINTK("%s: channel flag(%d) is invalid\n", __func__, flag); + return; } for (i = 0; i < DFS_NUM_FREQ_OFFSET; i++) {