6 GHz: Add support for missing 6 GHz operating classes

Add support for missing 6 GHz operating classes as defined in
IEEE P802.11ax/D7.0.

This is needed to avoid OCV failures on the 6 GHz band when the channel
width is larger than 20 MHz.

Signed-off-by: Veerendranath Jakkam <vjakkam@codeaurora.org>
This commit is contained in:
Veerendranath Jakkam 2020-09-16 13:51:47 +05:30 committed by Jouni Malinen
parent 66bed14b22
commit 79e3f08d3c
5 changed files with 102 additions and 22 deletions

View file

@ -556,23 +556,32 @@ static int * wpas_add_channels(const struct oper_class_map *op,
static int * wpas_op_class_freqs(const struct oper_class_map *op,
struct hostapd_hw_modes *mode, int active)
{
u8 channels_80mhz[] = { 42, 58, 106, 122, 138, 155 };
u8 channels_160mhz[] = { 50, 114 };
u8 channels_80mhz_5ghz[] = { 42, 58, 106, 122, 138, 155 };
u8 channels_160mhz_5ghz[] = { 50, 114 };
u8 channels_80mhz_6ghz[] = { 7, 23, 39, 55, 71, 87, 103, 119, 135, 151,
167, 183, 199, 215 };
u8 channels_160mhz_6ghz[] = { 15, 47, 79, 111, 143, 175, 207 };
const u8 *channels = NULL;
size_t num_chan = 0;
int is_6ghz = is_6ghz_op_class(op->op_class);
/*
* When adding all channels in the operating class, 80 + 80 MHz
* operating classes are like 80 MHz channels because we add all valid
* channels anyway.
*/
if (op->bw == BW80 || op->bw == BW80P80)
return wpas_add_channels(op, mode, active, channels_80mhz,
ARRAY_SIZE(channels_80mhz));
if (op->bw == BW80 || op->bw == BW80P80) {
channels = is_6ghz ? channels_80mhz_6ghz : channels_80mhz_5ghz;
num_chan = is_6ghz ? ARRAY_SIZE(channels_80mhz_6ghz) :
ARRAY_SIZE(channels_80mhz_5ghz);
} else if (op->bw == BW160) {
channels = is_6ghz ? channels_160mhz_6ghz :
channels_160mhz_5ghz;
num_chan = is_6ghz ? ARRAY_SIZE(channels_160mhz_6ghz) :
ARRAY_SIZE(channels_160mhz_5ghz);
}
if (op->bw == BW160)
return wpas_add_channels(op, mode, active, channels_160mhz,
ARRAY_SIZE(channels_160mhz));
return wpas_add_channels(op, mode, active, NULL, 0);
return wpas_add_channels(op, mode, active, channels, num_chan);
}