diff --git a/umac/regulatory/core/src/reg_services.c b/umac/regulatory/core/src/reg_services.c index d5670ab4c39b..5ab1c465bac3 100644 --- a/umac/regulatory/core/src/reg_services.c +++ b/umac/regulatory/core/src/reg_services.c @@ -35,10 +35,17 @@ #include "reg_db_parser.h" #include +#define CHAN_12_CENT_FREQ 2467 #define MAX_PWR_FCC_CHAN_12 8 +#define CHAN_13_CENT_FREQ 2472 #define MAX_PWR_FCC_CHAN_13 2 #define SCAN_11D_PERIOD_MS 360000 +#define IS_VALID_PSOC_REG_OBJ(psoc_priv_obj) (NULL != psoc_priv_obj) +#define IS_VALID_PDEV_REG_OBJ(pdev_priv_obj) (NULL != pdev_priv_obj) + +const struct chan_map *channel_map; + const struct bonded_channel bonded_chan_40mhz_list[] = { {36, 40}, {44, 48}, @@ -78,67 +85,575 @@ const enum phy_ch_width get_next_lower_bw[] = { [CH_WIDTH_5MHZ] = CH_WIDTH_INVALID }; -const struct chan_map channel_map[NUM_CHANNELS] = { - [CHAN_ENUM_1] = {2412, 1}, - [CHAN_ENUM_2] = {2417, 2}, - [CHAN_ENUM_3] = {2422, 3}, - [CHAN_ENUM_4] = {2427, 4}, - [CHAN_ENUM_5] = {2432, 5}, - [CHAN_ENUM_6] = {2437, 6}, - [CHAN_ENUM_7] = {2442, 7}, - [CHAN_ENUM_8] = {2447, 8}, - [CHAN_ENUM_9] = {2452, 9}, - [CHAN_ENUM_10] = {2457, 10}, - [CHAN_ENUM_11] = {2462, 11}, - [CHAN_ENUM_12] = {2467, 12}, - [CHAN_ENUM_13] = {2472, 13}, - [CHAN_ENUM_14] = {2484, 14}, +#ifdef CONFIG_LEGACY_CHAN_ENUM +static const struct chan_map channel_map_old[NUM_CHANNELS] = { + [CHAN_ENUM_1] = {2412, 1, 2, 40}, + [CHAN_ENUM_2] = {2417, 2, 2, 40}, + [CHAN_ENUM_3] = {2422, 3, 2, 40}, + [CHAN_ENUM_4] = {2427, 4, 2, 40}, + [CHAN_ENUM_5] = {2432, 5, 2, 40}, + [CHAN_ENUM_6] = {2437, 6, 2, 40}, + [CHAN_ENUM_7] = {2442, 7, 2, 40}, + [CHAN_ENUM_8] = {2447, 8, 2, 40}, + [CHAN_ENUM_9] = {2452, 9, 2, 40}, + [CHAN_ENUM_10] = {2457, 10, 2, 40}, + [CHAN_ENUM_11] = {2462, 11, 2, 40}, + [CHAN_ENUM_12] = {2467, 12, 2, 40}, + [CHAN_ENUM_13] = {2472, 13, 2, 40}, + [CHAN_ENUM_14] = {2484, 14, 2, 40}, - [CHAN_ENUM_36] = {5180, 36}, - [CHAN_ENUM_40] = {5200, 40}, - [CHAN_ENUM_44] = {5220, 44}, - [CHAN_ENUM_48] = {5240, 48}, - [CHAN_ENUM_52] = {5260, 52}, - [CHAN_ENUM_56] = {5280, 56}, - [CHAN_ENUM_60] = {5300, 60}, - [CHAN_ENUM_64] = {5320, 64}, + [CHAN_ENUM_36] = {5180, 36, 2, 160}, + [CHAN_ENUM_40] = {5200, 40, 2, 160}, + [CHAN_ENUM_44] = {5220, 44, 2, 160}, + [CHAN_ENUM_48] = {5240, 48, 2, 160}, + [CHAN_ENUM_52] = {5260, 52, 2, 160}, + [CHAN_ENUM_56] = {5280, 56, 2, 160}, + [CHAN_ENUM_60] = {5300, 60, 2, 160}, + [CHAN_ENUM_64] = {5320, 64, 2, 160}, - [CHAN_ENUM_100] = {5500, 100}, - [CHAN_ENUM_104] = {5520, 104}, - [CHAN_ENUM_108] = {5540, 108}, - [CHAN_ENUM_112] = {5560, 112}, - [CHAN_ENUM_116] = {5580, 116}, - [CHAN_ENUM_120] = {5600, 120}, - [CHAN_ENUM_124] = {5620, 124}, - [CHAN_ENUM_128] = {5640, 128}, - [CHAN_ENUM_132] = {5660, 132}, - [CHAN_ENUM_136] = {5680, 136}, - [CHAN_ENUM_140] = {5700, 140}, - [CHAN_ENUM_144] = {5720, 144}, + [CHAN_ENUM_100] = {5500, 100, 2, 160}, + [CHAN_ENUM_104] = {5520, 104, 2, 160}, + [CHAN_ENUM_108] = {5540, 108, 2, 160}, + [CHAN_ENUM_112] = {5560, 112, 2, 160}, + [CHAN_ENUM_116] = {5580, 116, 2, 160}, + [CHAN_ENUM_120] = {5600, 120, 2, 160}, + [CHAN_ENUM_124] = {5620, 124, 2, 160}, + [CHAN_ENUM_128] = {5640, 128, 2, 160}, + [CHAN_ENUM_132] = {5660, 132, 2, 160}, + [CHAN_ENUM_136] = {5680, 136, 2, 160}, + [CHAN_ENUM_140] = {5700, 140, 2, 160}, + [CHAN_ENUM_144] = {5720, 144, 2, 160}, - [CHAN_ENUM_149] = {5745, 149}, - [CHAN_ENUM_153] = {5765, 153}, - [CHAN_ENUM_157] = {5785, 157}, - [CHAN_ENUM_161] = {5805, 161}, - [CHAN_ENUM_165] = {5825, 165}, + [CHAN_ENUM_149] = {5745, 149, 2, 160}, + [CHAN_ENUM_153] = {5765, 153, 2, 160}, + [CHAN_ENUM_157] = {5785, 157, 2, 160}, + [CHAN_ENUM_161] = {5805, 161, 2, 160}, + [CHAN_ENUM_165] = {5825, 165, 2, 160}, - [CHAN_ENUM_170] = {5852, 170}, - [CHAN_ENUM_171] = {5855, 171}, - [CHAN_ENUM_172] = {5860, 172}, - [CHAN_ENUM_173] = {5865, 173}, - [CHAN_ENUM_174] = {5870, 174}, - [CHAN_ENUM_175] = {5875, 175}, - [CHAN_ENUM_176] = {5880, 176}, - [CHAN_ENUM_177] = {5885, 177}, - [CHAN_ENUM_178] = {5890, 178}, - [CHAN_ENUM_179] = {5895, 179}, - [CHAN_ENUM_180] = {5900, 180}, - [CHAN_ENUM_181] = {5905, 181}, - [CHAN_ENUM_182] = {5910, 182}, - [CHAN_ENUM_183] = {5915, 183}, - [CHAN_ENUM_184] = {5920, 184}, + [CHAN_ENUM_170] = {5852, 170, 2, 20}, + [CHAN_ENUM_171] = {5855, 171, 2, 20}, + [CHAN_ENUM_172] = {5860, 172, 2, 20}, + [CHAN_ENUM_173] = {5865, 173, 2, 20}, + [CHAN_ENUM_174] = {5870, 174, 2, 20}, + [CHAN_ENUM_175] = {5875, 175, 2, 20}, + [CHAN_ENUM_176] = {5880, 176, 2, 20}, + [CHAN_ENUM_177] = {5885, 177, 2, 20}, + [CHAN_ENUM_178] = {5890, 178, 2, 20}, + [CHAN_ENUM_179] = {5895, 179, 2, 20}, + [CHAN_ENUM_180] = {5900, 180, 2, 20}, + [CHAN_ENUM_181] = {5905, 181, 2, 20}, + [CHAN_ENUM_182] = {5910, 182, 2, 20}, + [CHAN_ENUM_183] = {5915, 183, 2, 20}, + [CHAN_ENUM_184] = {5920, 184, 2, 20}, }; +#else +static const struct chan_map channel_map_us[NUM_CHANNELS] = { + [CHAN_ENUM_2412] = {2412, 1, 2, 40}, + [CHAN_ENUM_2417] = {2417, 2, 2, 40}, + [CHAN_ENUM_2422] = {2422, 3, 2, 40}, + [CHAN_ENUM_2427] = {2427, 4, 2, 40}, + [CHAN_ENUM_2432] = {2432, 5, 2, 40}, + [CHAN_ENUM_2437] = {2437, 6, 2, 40}, + [CHAN_ENUM_2442] = {2442, 7, 2, 40}, + [CHAN_ENUM_2447] = {2447, 8, 2, 40}, + [CHAN_ENUM_2452] = {2452, 9, 2, 40}, + [CHAN_ENUM_2457] = {2457, 10, 2, 40}, + [CHAN_ENUM_2462] = {2462, 11, 2, 40}, + [CHAN_ENUM_2467] = {2467, 12, 2, 40}, + [CHAN_ENUM_2472] = {2472, 13, 2, 40}, + [CHAN_ENUM_2484] = {2484, 14, 2, 40}, + + + [CHAN_ENUM_4912] = {4912, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4915] = {4915, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4917] = {4917, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4920] = {4920, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4922] = {4922, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4925] = {4925, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4927] = {4927, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4932] = {4932, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4935] = {4935, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4937] = {4937, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4940] = {4940, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4942] = {4942, 1, 5, 5}, + [CHAN_ENUM_4945] = {4945, 11, 10, 10}, + [CHAN_ENUM_4947] = {4947, 2, 5, 5}, + [CHAN_ENUM_4950] = {4950, 20, 10, 20}, + [CHAN_ENUM_4952] = {4952, 3, 5, 5}, + [CHAN_ENUM_4955] = {4955, 21, 10, 20}, + [CHAN_ENUM_4957] = {4957, 4, 5, 5}, + [CHAN_ENUM_4960] = {4960, 22, 10, 20}, + [CHAN_ENUM_4962] = {4962, 5, 5, 5}, + [CHAN_ENUM_4965] = {4965, 23, 10, 20}, + [CHAN_ENUM_4967] = {4967, 6, 5, 5}, + [CHAN_ENUM_4970] = {4970, 24, 10, 20}, + [CHAN_ENUM_4972] = {4972, 7, 5, 5}, + [CHAN_ENUM_4975] = {4975, 25, 10, 20}, + [CHAN_ENUM_4977] = {4977, 8, 5, 5}, + [CHAN_ENUM_4980] = {4980, 26, 10, 20}, + [CHAN_ENUM_4982] = {4982, 9, 5, 5}, + [CHAN_ENUM_4985] = {4985, 19, 10, 10}, + [CHAN_ENUM_4987] = {4987, 10, 5, 5}, + [CHAN_ENUM_5032] = {5032, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5035] = {5035, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5037] = {5037, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5040] = {5040, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5042] = {5042, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5045] = {5045, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5047] = {5047, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5052] = {5052, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5055] = {5055, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5057] = {5057, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5060] = {5060, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5080] = {5080, INVALID_CHANNEL_NUM, 2, 20}, + + [CHAN_ENUM_5180] = {5180, 36, 2, 160}, + [CHAN_ENUM_5200] = {5200, 40, 2, 160}, + [CHAN_ENUM_5220] = {5220, 44, 2, 160}, + [CHAN_ENUM_5240] = {5240, 48, 2, 160}, + [CHAN_ENUM_5260] = {5260, 52, 2, 160}, + [CHAN_ENUM_5280] = {5280, 56, 2, 160}, + [CHAN_ENUM_5300] = {5300, 60, 2, 160}, + [CHAN_ENUM_5320] = {5320, 64, 2, 160}, + [CHAN_ENUM_5500] = {5500, 100, 2, 160}, + [CHAN_ENUM_5520] = {5520, 104, 2, 160}, + [CHAN_ENUM_5540] = {5540, 108, 2, 160}, + [CHAN_ENUM_5560] = {5560, 112, 2, 160}, + [CHAN_ENUM_5580] = {5580, 116, 2, 160}, + [CHAN_ENUM_5600] = {5600, 120, 2, 160}, + [CHAN_ENUM_5620] = {5620, 124, 2, 160}, + [CHAN_ENUM_5640] = {5640, 128, 2, 160}, + [CHAN_ENUM_5660] = {5660, 132, 2, 160}, + [CHAN_ENUM_5680] = {5680, 136, 2, 160}, + [CHAN_ENUM_5700] = {5700, 140, 2, 160}, + [CHAN_ENUM_5720] = {5720, 144, 2, 160}, + [CHAN_ENUM_5745] = {5745, 149, 2, 160}, + [CHAN_ENUM_5765] = {5765, 153, 2, 160}, + [CHAN_ENUM_5785] = {5785, 157, 2, 160}, + [CHAN_ENUM_5805] = {5805, 161, 2, 160}, + [CHAN_ENUM_5825] = {5825, 165, 2, 160}, + [CHAN_ENUM_5850] = {5850, 170, 2, 160}, + [CHAN_ENUM_5855] = {5855, 171, 2, 160}, + [CHAN_ENUM_5860] = {5860, 172, 2, 160}, + [CHAN_ENUM_5865] = {5865, 173, 2, 160}, + [CHAN_ENUM_5870] = {5870, 174, 2, 160}, + [CHAN_ENUM_5875] = {5875, 175, 2, 160}, + [CHAN_ENUM_5880] = {5880, 176, 2, 160}, + [CHAN_ENUM_5885] = {5885, 177, 2, 160}, + [CHAN_ENUM_5890] = {5890, 178, 2, 160}, + [CHAN_ENUM_5895] = {5895, 179, 2, 160}, + [CHAN_ENUM_5900] = {5900, 180, 2, 160}, + [CHAN_ENUM_5905] = {5905, 181, 2, 160}, + [CHAN_ENUM_5910] = {5910, 182, 2, 160}, + [CHAN_ENUM_5915] = {5915, 183, 2, 160}, + [CHAN_ENUM_5920] = {5920, 184, 2, 160}, +}; + +static const struct chan_map channel_map_eu[NUM_CHANNELS] = { + [CHAN_ENUM_2412] = {2412, 1, 2, 40}, + [CHAN_ENUM_2417] = {2417, 2, 2, 40}, + [CHAN_ENUM_2422] = {2422, 3, 2, 40}, + [CHAN_ENUM_2427] = {2427, 4, 2, 40}, + [CHAN_ENUM_2432] = {2432, 5, 2, 40}, + [CHAN_ENUM_2437] = {2437, 6, 2, 40}, + [CHAN_ENUM_2442] = {2442, 7, 2, 40}, + [CHAN_ENUM_2447] = {2447, 8, 2, 40}, + [CHAN_ENUM_2452] = {2452, 9, 2, 40}, + [CHAN_ENUM_2457] = {2457, 10, 2, 40}, + [CHAN_ENUM_2462] = {2462, 11, 2, 40}, + [CHAN_ENUM_2467] = {2467, 12, 2, 40}, + [CHAN_ENUM_2472] = {2472, 13, 2, 40}, + [CHAN_ENUM_2484] = {2484, 14, 2, 40}, + + [CHAN_ENUM_4912] = {4912, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4915] = {4915, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4917] = {4917, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4920] = {4920, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4922] = {4922, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4925] = {4925, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4927] = {4927, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4932] = {4932, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4935] = {4935, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4937] = {4937, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4940] = {4940, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4942] = {4942, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4945] = {4945, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4947] = {4947, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4950] = {4950, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4952] = {4952, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4955] = {4955, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4957] = {4957, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4960] = {4960, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4962] = {4962, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4965] = {4965, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4967] = {4967, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4970] = {4970, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4972] = {4972, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4975] = {4975, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4977] = {4977, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4980] = {4980, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4982] = {4982, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4985] = {4985, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4987] = {4987, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5032] = {5032, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5035] = {5035, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5037] = {5037, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5040] = {5040, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5042] = {5042, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5045] = {5045, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5047] = {5047, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5052] = {5052, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5055] = {5055, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5057] = {5057, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5060] = {5060, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5080] = {5080, INVALID_CHANNEL_NUM, 2, 20}, + + [CHAN_ENUM_5180] = {5180, 36, 2, 160}, + [CHAN_ENUM_5200] = {5200, 40, 2, 160}, + [CHAN_ENUM_5220] = {5220, 44, 2, 160}, + [CHAN_ENUM_5240] = {5240, 48, 2, 160}, + [CHAN_ENUM_5260] = {5260, 52, 2, 160}, + [CHAN_ENUM_5280] = {5280, 56, 2, 160}, + [CHAN_ENUM_5300] = {5300, 60, 2, 160}, + [CHAN_ENUM_5320] = {5320, 64, 2, 160}, + [CHAN_ENUM_5500] = {5500, 100, 2, 160}, + [CHAN_ENUM_5520] = {5520, 104, 2, 160}, + [CHAN_ENUM_5540] = {5540, 108, 2, 160}, + [CHAN_ENUM_5560] = {5560, 112, 2, 160}, + [CHAN_ENUM_5580] = {5580, 116, 2, 160}, + [CHAN_ENUM_5600] = {5600, 120, 2, 160}, + [CHAN_ENUM_5620] = {5620, 124, 2, 160}, + [CHAN_ENUM_5640] = {5640, 128, 2, 160}, + [CHAN_ENUM_5660] = {5660, 132, 2, 160}, + [CHAN_ENUM_5680] = {5680, 136, 2, 160}, + [CHAN_ENUM_5700] = {5700, 140, 2, 160}, + [CHAN_ENUM_5720] = {5720, 144, 2, 160}, + [CHAN_ENUM_5745] = {5745, 149, 2, 160}, + [CHAN_ENUM_5765] = {5765, 153, 2, 160}, + [CHAN_ENUM_5785] = {5785, 157, 2, 160}, + [CHAN_ENUM_5805] = {5805, 161, 2, 160}, + [CHAN_ENUM_5825] = {5825, 165, 2, 160}, + [CHAN_ENUM_5850] = {5850, 170, 2, 160}, + [CHAN_ENUM_5855] = {5855, 171, 2, 160}, + [CHAN_ENUM_5860] = {5860, 172, 2, 160}, + [CHAN_ENUM_5865] = {5865, 173, 2, 160}, + [CHAN_ENUM_5870] = {5870, 174, 2, 160}, + [CHAN_ENUM_5875] = {5875, 175, 2, 160}, + [CHAN_ENUM_5880] = {5880, 176, 2, 160}, + [CHAN_ENUM_5885] = {5885, 177, 2, 160}, + [CHAN_ENUM_5890] = {5890, 178, 2, 160}, + [CHAN_ENUM_5895] = {5895, 179, 2, 160}, + [CHAN_ENUM_5900] = {5900, 180, 2, 160}, + [CHAN_ENUM_5905] = {5905, 181, 2, 160}, + [CHAN_ENUM_5910] = {5910, 182, 2, 160}, + [CHAN_ENUM_5915] = {5915, 183, 2, 160}, + [CHAN_ENUM_5920] = {5920, 184, 2, 160}, +}; + +static const struct chan_map channel_map_jp[NUM_CHANNELS] = { + [CHAN_ENUM_2412] = {2412, 1, 2, 40}, + [CHAN_ENUM_2417] = {2417, 2, 2, 40}, + [CHAN_ENUM_2422] = {2422, 3, 2, 40}, + [CHAN_ENUM_2427] = {2427, 4, 2, 40}, + [CHAN_ENUM_2432] = {2432, 5, 2, 40}, + [CHAN_ENUM_2437] = {2437, 6, 2, 40}, + [CHAN_ENUM_2442] = {2442, 7, 2, 40}, + [CHAN_ENUM_2447] = {2447, 8, 2, 40}, + [CHAN_ENUM_2452] = {2452, 9, 2, 40}, + [CHAN_ENUM_2457] = {2457, 10, 2, 40}, + [CHAN_ENUM_2462] = {2462, 11, 2, 40}, + [CHAN_ENUM_2467] = {2467, 12, 2, 40}, + [CHAN_ENUM_2472] = {2472, 13, 2, 40}, + [CHAN_ENUM_2484] = {2484, 14, 2, 40}, + + [CHAN_ENUM_4912] = {4912, 182, 5, 5}, + [CHAN_ENUM_4915] = {4915, 183, 10, 10}, + [CHAN_ENUM_4917] = {4917, 183, 5, 5}, + [CHAN_ENUM_4920] = {4920, 184, 10, 20}, + [CHAN_ENUM_4922] = {4922, 184, 5, 5}, + [CHAN_ENUM_4925] = {4925, 185, 10, 10}, + [CHAN_ENUM_4927] = {4927, 185, 5, 5}, + [CHAN_ENUM_4932] = {4932, 186, 5, 5}, + [CHAN_ENUM_4935] = {4935, 187, 10, 10}, + [CHAN_ENUM_4937] = {4937, 187, 5, 5}, + [CHAN_ENUM_4940] = {4940, 188, 10, 20}, + [CHAN_ENUM_4942] = {4942, 188, 5, 5}, + [CHAN_ENUM_4945] = {4945, 189, 10, 10}, + [CHAN_ENUM_4947] = {4947, 189, 5, 5}, + [CHAN_ENUM_4950] = {4950, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4952] = {4952, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4955] = {4955, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4957] = {4957, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4960] = {4960, 192, 20, 20}, + [CHAN_ENUM_4962] = {4962, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4965] = {4965, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4967] = {4967, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4970] = {4970, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4972] = {4972, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4975] = {4975, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4977] = {4977, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4980] = {4980, 196, 20, 20}, + [CHAN_ENUM_4982] = {4982, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4985] = {4985, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4987] = {4987, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5032] = {5032, 6, 5, 5}, + [CHAN_ENUM_5035] = {5035, 7, 10, 10}, + [CHAN_ENUM_5037] = {5037, 7, 5, 5}, + [CHAN_ENUM_5040] = {5040, 8, 10, 20}, + [CHAN_ENUM_5042] = {5042, 8, 5, 5}, + [CHAN_ENUM_5045] = {5045, 9, 10, 10}, + [CHAN_ENUM_5047] = {5047, 9, 5, 5}, + [CHAN_ENUM_5052] = {5052, 10, 5, 5}, + [CHAN_ENUM_5055] = {5055, 11, 10, 10}, + [CHAN_ENUM_5057] = {5057, 11, 5, 5}, + [CHAN_ENUM_5060] = {5060, 12, 20, 20}, + [CHAN_ENUM_5080] = {5080, 16, 20, 20}, + + [CHAN_ENUM_5180] = {5180, 36, 2, 160}, + [CHAN_ENUM_5200] = {5200, 40, 2, 160}, + [CHAN_ENUM_5220] = {5220, 44, 2, 160}, + [CHAN_ENUM_5240] = {5240, 48, 2, 160}, + [CHAN_ENUM_5260] = {5260, 52, 2, 160}, + [CHAN_ENUM_5280] = {5280, 56, 2, 160}, + [CHAN_ENUM_5300] = {5300, 60, 2, 160}, + [CHAN_ENUM_5320] = {5320, 64, 2, 160}, + [CHAN_ENUM_5500] = {5500, 100, 2, 160}, + [CHAN_ENUM_5520] = {5520, 104, 2, 160}, + [CHAN_ENUM_5540] = {5540, 108, 2, 160}, + [CHAN_ENUM_5560] = {5560, 112, 2, 160}, + [CHAN_ENUM_5580] = {5580, 116, 2, 160}, + [CHAN_ENUM_5600] = {5600, 120, 2, 160}, + [CHAN_ENUM_5620] = {5620, 124, 2, 160}, + [CHAN_ENUM_5640] = {5640, 128, 2, 160}, + [CHAN_ENUM_5660] = {5660, 132, 2, 160}, + [CHAN_ENUM_5680] = {5680, 136, 2, 160}, + [CHAN_ENUM_5700] = {5700, 140, 2, 160}, + [CHAN_ENUM_5720] = {5720, 144, 2, 160}, + [CHAN_ENUM_5745] = {5745, 149, 2, 160}, + [CHAN_ENUM_5765] = {5765, 153, 2, 160}, + [CHAN_ENUM_5785] = {5785, 157, 2, 160}, + [CHAN_ENUM_5805] = {5805, 161, 2, 160}, + [CHAN_ENUM_5825] = {5825, 165, 2, 160}, + [CHAN_ENUM_5850] = {5850, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5855] = {5855, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5860] = {5860, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5865] = {5865, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5870] = {5870, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5875] = {5875, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5880] = {5880, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5885] = {5885, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5890] = {5890, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5895] = {5895, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5900] = {5900, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5905] = {5905, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5910] = {5910, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5915] = {5915, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5920] = {5920, INVALID_CHANNEL_NUM, 2, 160}, +}; + +static const struct chan_map channel_map_global[NUM_CHANNELS] = { + [CHAN_ENUM_2412] = {2412, 1, 2, 40}, + [CHAN_ENUM_2417] = {2417, 2, 2, 40}, + [CHAN_ENUM_2422] = {2422, 3, 2, 40}, + [CHAN_ENUM_2427] = {2427, 4, 2, 40}, + [CHAN_ENUM_2432] = {2432, 5, 2, 40}, + [CHAN_ENUM_2437] = {2437, 6, 2, 40}, + [CHAN_ENUM_2442] = {2442, 7, 2, 40}, + [CHAN_ENUM_2447] = {2447, 8, 2, 40}, + [CHAN_ENUM_2452] = {2452, 9, 2, 40}, + [CHAN_ENUM_2457] = {2457, 10, 2, 40}, + [CHAN_ENUM_2462] = {2462, 11, 2, 40}, + [CHAN_ENUM_2467] = {2467, 12, 2, 40}, + [CHAN_ENUM_2472] = {2472, 13, 2, 40}, + [CHAN_ENUM_2484] = {2484, 14, 2, 40}, + + [CHAN_ENUM_4912] = {4912, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4915] = {4915, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4917] = {4917, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4920] = {4920, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4922] = {4922, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4925] = {4925, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4927] = {4927, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4932] = {4932, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4935] = {4935, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4937] = {4937, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4940] = {4940, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4942] = {4942, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4945] = {4945, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4947] = {4947, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4950] = {4950, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4952] = {4952, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4955] = {4955, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4957] = {4957, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4960] = {4960, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4962] = {4962, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4965] = {4965, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4967] = {4967, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4970] = {4970, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4972] = {4972, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4975] = {4975, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4977] = {4977, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4980] = {4980, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4982] = {4982, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4985] = {4985, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4987] = {4987, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5032] = {5032, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5035] = {5035, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5037] = {5037, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5040] = {5040, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5042] = {5042, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5045] = {5045, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5047] = {5047, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5052] = {5052, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5055] = {5055, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5057] = {5057, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5060] = {5060, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5080] = {5080, INVALID_CHANNEL_NUM, 2, 20}, + + [CHAN_ENUM_5180] = {5180, 36, 2, 160}, + [CHAN_ENUM_5200] = {5200, 40, 2, 160}, + [CHAN_ENUM_5220] = {5220, 44, 2, 160}, + [CHAN_ENUM_5240] = {5240, 48, 2, 160}, + [CHAN_ENUM_5260] = {5260, 52, 2, 160}, + [CHAN_ENUM_5280] = {5280, 56, 2, 160}, + [CHAN_ENUM_5300] = {5300, 60, 2, 160}, + [CHAN_ENUM_5320] = {5320, 64, 2, 160}, + [CHAN_ENUM_5500] = {5500, 100, 2, 160}, + [CHAN_ENUM_5520] = {5520, 104, 2, 160}, + [CHAN_ENUM_5540] = {5540, 108, 2, 160}, + [CHAN_ENUM_5560] = {5560, 112, 2, 160}, + [CHAN_ENUM_5580] = {5580, 116, 2, 160}, + [CHAN_ENUM_5600] = {5600, 120, 2, 160}, + [CHAN_ENUM_5620] = {5620, 124, 2, 160}, + [CHAN_ENUM_5640] = {5640, 128, 2, 160}, + [CHAN_ENUM_5660] = {5660, 132, 2, 160}, + [CHAN_ENUM_5680] = {5680, 136, 2, 160}, + [CHAN_ENUM_5700] = {5700, 140, 2, 160}, + [CHAN_ENUM_5720] = {5720, 144, 2, 160}, + [CHAN_ENUM_5745] = {5745, 149, 2, 160}, + [CHAN_ENUM_5765] = {5765, 153, 2, 160}, + [CHAN_ENUM_5785] = {5785, 157, 2, 160}, + [CHAN_ENUM_5805] = {5805, 161, 2, 160}, + [CHAN_ENUM_5825] = {5825, 165, 2, 160}, + [CHAN_ENUM_5850] = {5850, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5855] = {5855, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5860] = {5860, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5865] = {5865, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5870] = {5870, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5875] = {5875, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5880] = {5880, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5885] = {5885, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5890] = {5890, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5895] = {5895, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5900] = {5900, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5905] = {5905, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5910] = {5910, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5915] = {5915, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5920] = {5920, INVALID_CHANNEL_NUM, 2, 160}, +}; + +static const struct chan_map channel_map_china[NUM_CHANNELS] = { + [CHAN_ENUM_2412] = {2412, 1, 2, 40}, + [CHAN_ENUM_2417] = {2417, 2, 2, 40}, + [CHAN_ENUM_2422] = {2422, 3, 2, 40}, + [CHAN_ENUM_2427] = {2427, 4, 2, 40}, + [CHAN_ENUM_2432] = {2432, 5, 2, 40}, + [CHAN_ENUM_2437] = {2437, 6, 2, 40}, + [CHAN_ENUM_2442] = {2442, 7, 2, 40}, + [CHAN_ENUM_2447] = {2447, 8, 2, 40}, + [CHAN_ENUM_2452] = {2452, 9, 2, 40}, + [CHAN_ENUM_2457] = {2457, 10, 2, 40}, + [CHAN_ENUM_2462] = {2462, 11, 2, 40}, + [CHAN_ENUM_2467] = {2467, 12, 2, 40}, + [CHAN_ENUM_2472] = {2472, 13, 2, 40}, + [CHAN_ENUM_2484] = {2484, 14, 2, 40}, + + [CHAN_ENUM_4912] = {4912, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4915] = {4915, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4917] = {4917, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4920] = {4920, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4922] = {4922, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4925] = {4925, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4927] = {4927, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4932] = {4932, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4935] = {4935, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4937] = {4937, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4940] = {4940, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4942] = {4942, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4945] = {4945, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4947] = {4947, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4950] = {4950, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4952] = {4952, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4955] = {4955, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4957] = {4957, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4960] = {4960, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4962] = {4962, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4965] = {4965, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4967] = {4967, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4970] = {4970, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4972] = {4972, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4975] = {4975, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4977] = {4977, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4980] = {4980, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4982] = {4982, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4985] = {4985, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_4987] = {4987, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5032] = {5032, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5035] = {5035, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5037] = {5037, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5040] = {5040, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5042] = {5042, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5045] = {5045, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5047] = {5047, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5052] = {5052, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5055] = {5055, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5057] = {5057, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5060] = {5060, INVALID_CHANNEL_NUM, 2, 20}, + [CHAN_ENUM_5080] = {5080, INVALID_CHANNEL_NUM, 2, 20}, + + [CHAN_ENUM_5180] = {5180, 36, 2, 160}, + [CHAN_ENUM_5200] = {5200, 40, 2, 160}, + [CHAN_ENUM_5220] = {5220, 44, 2, 160}, + [CHAN_ENUM_5240] = {5240, 48, 2, 160}, + [CHAN_ENUM_5260] = {5260, 52, 2, 160}, + [CHAN_ENUM_5280] = {5280, 56, 2, 160}, + [CHAN_ENUM_5300] = {5300, 60, 2, 160}, + [CHAN_ENUM_5320] = {5320, 64, 2, 160}, + [CHAN_ENUM_5500] = {5500, 100, 2, 160}, + [CHAN_ENUM_5520] = {5520, 104, 2, 160}, + [CHAN_ENUM_5540] = {5540, 108, 2, 160}, + [CHAN_ENUM_5560] = {5560, 112, 2, 160}, + [CHAN_ENUM_5580] = {5580, 116, 2, 160}, + [CHAN_ENUM_5600] = {5600, 120, 2, 160}, + [CHAN_ENUM_5620] = {5620, 124, 2, 160}, + [CHAN_ENUM_5640] = {5640, 128, 2, 160}, + [CHAN_ENUM_5660] = {5660, 132, 2, 160}, + [CHAN_ENUM_5680] = {5680, 136, 2, 160}, + [CHAN_ENUM_5700] = {5700, 140, 2, 160}, + [CHAN_ENUM_5720] = {5720, 144, 2, 160}, + [CHAN_ENUM_5745] = {5745, 149, 2, 160}, + [CHAN_ENUM_5765] = {5765, 153, 2, 160}, + [CHAN_ENUM_5785] = {5785, 157, 2, 160}, + [CHAN_ENUM_5805] = {5805, 161, 2, 160}, + [CHAN_ENUM_5825] = {5825, 165, 2, 160}, + [CHAN_ENUM_5850] = {5850, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5855] = {5855, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5860] = {5860, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5865] = {5865, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5870] = {5870, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5875] = {5875, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5880] = {5880, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5885] = {5885, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5890] = {5890, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5895] = {5895, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5900] = {5900, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5905] = {5905, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5910] = {5910, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5915] = {5915, INVALID_CHANNEL_NUM, 2, 160}, + [CHAN_ENUM_5920] = {5920, INVALID_CHANNEL_NUM, 2, 160}, +}; +#endif static struct reg_dmn_supp_op_classes reg_dmn_curr_supp_opp_classes = { 0 }; @@ -325,7 +840,7 @@ QDF_STATUS reg_get_channel_list_with_power(struct wlan_objmgr_pdev *pdev, for (i = 0, count = 0; i < NUM_CHANNELS; i++) { if (reg_channels[i].state) { ch_list[count].chan_num = - channel_map[i].chan_num; + reg_channels[i].chan_num; ch_list[count++].tx_power = reg_channels[i].tx_power; } @@ -1229,31 +1744,36 @@ static void reg_fill_channel_info(enum channel_enum chan_enum, static void reg_populate_band_channels(enum channel_enum start_chan, - enum channel_enum end_chan, - struct cur_reg_rule *rule_start_ptr, - uint32_t num_reg_rules, - uint16_t min_bw, - struct regulatory_channel *mas_chan_list) + enum channel_enum end_chan, + struct cur_reg_rule *rule_start_ptr, + uint32_t num_reg_rules, + uint16_t min_bw, + struct regulatory_channel *mas_chan_list) { struct cur_reg_rule *found_rule_ptr; struct cur_reg_rule *cur_rule_ptr; struct regulatory_channel; enum channel_enum chan_enum; uint32_t rule_num, bw; + uint16_t max_bw; for (chan_enum = start_chan; chan_enum <= end_chan; chan_enum++) { found_rule_ptr = NULL; - for (bw = 20; ((bw >= 5) && (NULL == found_rule_ptr)); + + max_bw = QDF_MIN((uint16_t)20, channel_map[chan_enum].max_bw); + min_bw = QDF_MAX(min_bw, channel_map[chan_enum].min_bw); + + for (bw = max_bw; ((bw >= min_bw) && (NULL == found_rule_ptr)); bw = bw/2) { for (rule_num = 0, cur_rule_ptr = rule_start_ptr; rule_num < num_reg_rules; cur_rule_ptr++, rule_num++) { if ((cur_rule_ptr->start_freq <= - channel_map[chan_enum].center_freq - + mas_chan_list[chan_enum].center_freq - bw/2) && (cur_rule_ptr->end_freq >= - channel_map[chan_enum].center_freq + + mas_chan_list[chan_enum].center_freq + bw/2) && (min_bw <= bw)) { found_rule_ptr = cur_rule_ptr; break; @@ -1271,8 +1791,8 @@ static void reg_populate_band_channels(enum channel_enum start_chan, } static void reg_update_max_bw_per_rule(uint32_t num_reg_rules, - struct cur_reg_rule *reg_rule_start, - uint16_t max_bw) + struct cur_reg_rule *reg_rule_start, + uint16_t max_bw) { uint32_t count; @@ -1370,9 +1890,19 @@ static void reg_modify_chan_list_for_fcc_channel(struct regulatory_channel *chan_list, bool set_fcc_channel) { + enum channel_enum chan_enum; + if (set_fcc_channel) { - chan_list[CHAN_ENUM_12].tx_power = MAX_PWR_FCC_CHAN_12; - chan_list[CHAN_ENUM_13].tx_power = MAX_PWR_FCC_CHAN_13; + for (chan_enum = 0; chan_enum < NUM_CHANNELS; chan_enum++) { + if (chan_list[chan_enum].center_freq == + CHAN_12_CENT_FREQ) + chan_list[chan_enum].tx_power = + MAX_PWR_FCC_CHAN_12; + if (chan_list[chan_enum].center_freq == + CHAN_13_CENT_FREQ) + chan_list[chan_enum].tx_power = + MAX_PWR_FCC_CHAN_13; + } } } @@ -1854,6 +2384,39 @@ static void reg_run_11d_state_machine(struct wlan_objmgr_psoc *psoc) } } +#ifdef CONFIG_LEGACY_CHAN_ENUM +static void reg_init_channel_map(enum dfs_reg dfs_region) +{ + channel_map = channel_map_old; +} +#else +static void reg_init_channel_map(enum dfs_reg dfs_region) +{ + switch (dfs_region) { + case DFS_UNINIT_REG: + case DFS_UNDEF_REG: + channel_map = channel_map_global; + break; + case DFS_FCC_REG: + channel_map = channel_map_us; + break; + case DFS_ETSI_REG: + channel_map = channel_map_eu; + break; + case DFS_MKK_REG: + channel_map = channel_map_jp; + break; + case DFS_CN_REG: + channel_map = channel_map_china; + break; + case DFS_KR_REG: + channel_map = channel_map_eu; + break; + } +} +#endif + + QDF_STATUS reg_process_master_chan_list(struct cur_regulatory_info *regulat_info) { @@ -1882,6 +2445,8 @@ QDF_STATUS reg_process_master_chan_list(struct cur_regulatory_info phy_id = regulat_info->phy_id; mas_chan_list = soc_reg->mas_chan_params[phy_id].mas_chan_list; + reg_init_channel_map(regulat_info->dfs_region); + for (chan_enum = 0; chan_enum < NUM_CHANNELS; chan_enum++) { mas_chan_list[chan_enum].chan_num = @@ -1931,14 +2496,13 @@ QDF_STATUS reg_process_master_chan_list(struct cur_regulatory_info if (num_2g_reg_rules != 0) reg_populate_band_channels(MIN_24GHZ_CHANNEL, MAX_24GHZ_CHANNEL, - reg_rule_2g, num_2g_reg_rules, - min_bw_2g, mas_chan_list); + reg_rule_2g, num_2g_reg_rules, + min_bw_2g, mas_chan_list); if (num_5g_reg_rules != 0) reg_populate_band_channels(MIN_5GHZ_CHANNEL, MAX_5GHZ_CHANNEL, - reg_rule_5g, - num_5g_reg_rules, - min_bw_5g, mas_chan_list); + reg_rule_5g, num_5g_reg_rules, + min_bw_5g, mas_chan_list); soc_reg->cc_src = SOURCE_DRIVER; if (soc_reg->new_user_ctry_pending == true) { @@ -2023,10 +2587,6 @@ QDF_STATUS wlan_regulatory_psoc_obj_created_notification( for (chan_enum = 0; chan_enum < NUM_CHANNELS; chan_enum++) { - mas_chan_list[chan_enum].chan_num = - channel_map[chan_enum].chan_num; - mas_chan_list[chan_enum].center_freq = - channel_map[chan_enum].center_freq; mas_chan_list[chan_enum].chan_flags |= REGULATORY_CHAN_DISABLED; mas_chan_list[chan_enum].state = @@ -2477,7 +3037,7 @@ QDF_STATUS reg_11d_vdev_delete_update(struct wlan_objmgr_vdev *vdev) } QDF_STATUS reg_get_current_chan_list(struct wlan_objmgr_pdev *pdev, - struct regulatory_channel *chan_list) + struct regulatory_channel *chan_list) { struct wlan_regulatory_pdev_priv_obj *pdev_priv_obj; @@ -2659,7 +3219,7 @@ void reg_program_mas_chan_list(struct wlan_objmgr_psoc *psoc, qdf_mem_copy(psoc_priv_obj->cur_country, alpha2, REG_ALPHA2_LEN); - + reg_init_channel_map(dfs_region); for (count = 0; count < NUM_CHANNELS; count++) { reg_channels[count].chan_num = channel_map[count].chan_num; diff --git a/umac/regulatory/core/src/reg_services.h b/umac/regulatory/core/src/reg_services.h index 9b0ee34f6edf..ad91a6625802 100644 --- a/umac/regulatory/core/src/reg_services.h +++ b/umac/regulatory/core/src/reg_services.h @@ -73,7 +73,7 @@ /* EEPROM setting is a country code */ #define COUNTRY_ERD_FLAG 0x8000 -extern const struct chan_map channel_map[NUM_CHANNELS]; +extern const struct chan_map *channel_map; enum channel_enum reg_get_chan_enum(uint32_t chan_num); diff --git a/umac/regulatory/dispatcher/inc/reg_services_public_struct.h b/umac/regulatory/dispatcher/inc/reg_services_public_struct.h index 86cf0d9129c1..085d4383dd3f 100644 --- a/umac/regulatory/dispatcher/inc/reg_services_public_struct.h +++ b/umac/regulatory/dispatcher/inc/reg_services_public_struct.h @@ -32,6 +32,9 @@ #define REG_MAX_CHAN_CHANGE_CBKS 30 #define MAX_STA_VDEV_CNT 4 #define INVALID_VDEV_ID 0xFF +#define INVALID_CHANNEL_NUM 0xBAD + +#ifdef CONFIG_LEGACY_CHAN_ENUM /** * enum channel_enum - channel enumeration * @CHAN_ENUM_1: channel number 1 @@ -174,6 +177,224 @@ enum channel_enum { INVALID_CHANNEL = 0xBAD, }; +#else +/** + * enum channel_enum - channel enumeration + * @CHAN_ENUM_2412: channel with freq 2412 + * @CHAN_ENUM_2417: channel with freq 2417 + * @CHAN_ENUM_2422: channel with freq 2422 + * @CHAN_ENUM_2427: channel with freq 2427 + * @CHAN_ENUM_2432: channel with freq 2432 + * @CHAN_ENUM_2437: channel with freq 2437 + * @CHAN_ENUM_2442: channel with freq 2442 + * @CHAN_ENUM_2447: channel with freq 2447 + * @CHAN_ENUM_2452: channel with freq 2452 + * @CHAN_ENUM_2457: channel with freq 2457 + * @CHAN_ENUM_2462: channel with freq 2462 + * @CHAN_ENUM_2467: channel with freq 2467 + * @CHAN_ENUM_2472: channel with freq 2472 + * @CHAN_ENUM_2484: channel with freq 2484 + * @CHAN_ENUM_4912: channel with freq 4912 + * @CHAN_ENUM_4915: channel with freq 4915 + * @CHAN_ENUM_4917: channel with freq 4917 + * @CHAN_ENUM_4920: channel with freq 4920 + * @CHAN_ENUM_4922: channel with freq 4922 + * @CHAN_ENUM_4925: channel with freq 4925 + * @CHAN_ENUM_4927: channel with freq 4927 + * @CHAN_ENUM_4932: channel with freq 4932 + * @CHAN_ENUM_4935: channel with freq 4935 + * @CHAN_ENUM_4937: channel with freq 4937 + * @CHAN_ENUM_4940: channel with freq 4940 + * @CHAN_ENUM_4942: channel with freq 4942 + * @CHAN_ENUM_4945: channel with freq 4945 + * @CHAN_ENUM_4947: channel with freq 4947 + * @CHAN_ENUM_4950: channel with freq 4950 + * @CHAN_ENUM_4952: channel with freq 4952 + * @CHAN_ENUM_4955: channel with freq 4955 + * @CHAN_ENUM_4957: channel with freq 4957 + * @CHAN_ENUM_4960: channel with freq 4960 + * @CHAN_ENUM_4962: channel with freq 4962 + * @CHAN_ENUM_4965: channel with freq 4965 + * @CHAN_ENUM_4967: channel with freq 4967 + * @CHAN_ENUM_4970: channel with freq 4970 + * @CHAN_ENUM_4972: channel with freq 4972 + * @CHAN_ENUM_4975: channel with freq 4975 + * @CHAN_ENUM_4977: channel with freq 4977 + * @CHAN_ENUM_4980: channel with freq 4980 + * @CHAN_ENUM_4982: channel with freq 4982 + * @CHAN_ENUM_4985: channel with freq 4985 + * @CHAN_ENUM_4987: channel with freq 4987 + * @CHAN_ENUM_5032: channel with freq 5032 + * @CHAN_ENUM_5035: channel with freq 5035 + * @CHAN_ENUM_5037: channel with freq 5037 + * @CHAN_ENUM_5040: channel with freq 5040 + * @CHAN_ENUM_5042: channel with freq 5042 + * @CHAN_ENUM_5045: channel with freq 5045 + * @CHAN_ENUM_5047: channel with freq 5047 + * @CHAN_ENUM_5052: channel with freq 5052 + * @CHAN_ENUM_5055: channel with freq 5055 + * @CHAN_ENUM_5057: channel with freq 5057 + * @CHAN_ENUM_5060: channel with freq 5060 + * @CHAN_ENUM_5080: channel with freq 5080 + * @CHAN_ENUM_5180: channel with freq 5180 + * @CHAN_ENUM_5200: channel with freq 5200 + * @CHAN_ENUM_5220: channel with freq 5220 + * @CHAN_ENUM_5240: channel with freq 5240 + * @CHAN_ENUM_5260: channel with freq 5260 + * @CHAN_ENUM_5280: channel with freq 5280 + * @CHAN_ENUM_5300: channel with freq 5300 + * @CHAN_ENUM_5320: channel with freq 5320 + * @CHAN_ENUM_5500: channel with freq 5500 + * @CHAN_ENUM_5520: channel with freq 5520 + * @CHAN_ENUM_5540: channel with freq 5540 + * @CHAN_ENUM_5560: channel with freq 5560 + * @CHAN_ENUM_5580: channel with freq 5580 + * @CHAN_ENUM_5600: channel with freq 5600 + * @CHAN_ENUM_5620: channel with freq 5620 + * @CHAN_ENUM_5640: channel with freq 5640 + * @CHAN_ENUM_5660: channel with freq 5660 + * @CHAN_ENUM_5680: channel with freq 5680 + * @CHAN_ENUM_5700: channel with freq 5700 + * @CHAN_ENUM_5720: channel with freq 5720 + * @CHAN_ENUM_5745: channel with freq 5745 + * @CHAN_ENUM_5765: channel with freq 5765 + * @CHAN_ENUM_5785: channel with freq 5785 + * @CHAN_ENUM_5805: channel with freq 5805 + * @CHAN_ENUM_5825: channel with freq 5825 + * @CHAN_ENUM_5850: channel with freq 5850 + * @CHAN_ENUM_5855: channel with freq 5855 + * @CHAN_ENUM_5860: channel with freq 5860 + * @CHAN_ENUM_5865: channel with freq 5865 + * @CHAN_ENUM_5870: channel with freq 5870 + * @CHAN_ENUM_5875: channel with freq 5875 + * @CHAN_ENUM_5880: channel with freq 5880 + * @CHAN_ENUM_5885: channel with freq 5885 + * @CHAN_ENUM_5890: channel with freq 5890 + * @CHAN_ENUM_5895: channel with freq 5895 + * @CHAN_ENUM_5900: channel with freq 5900 + * @CHAN_ENUM_5905: channel with freq 5905 + * @CHAN_ENUM_5910: channel with freq 5910 + * @CHAN_ENUM_5915: channel with freq 5915 + * @CHAN_ENUM_5920: channel with freq 5920 + */ +enum channel_enum { + CHAN_ENUM_2412, + CHAN_ENUM_2417, + CHAN_ENUM_2422, + CHAN_ENUM_2427, + CHAN_ENUM_2432, + CHAN_ENUM_2437, + CHAN_ENUM_2442, + CHAN_ENUM_2447, + CHAN_ENUM_2452, + CHAN_ENUM_2457, + CHAN_ENUM_2462, + CHAN_ENUM_2467, + CHAN_ENUM_2472, + CHAN_ENUM_2484, + + CHAN_ENUM_4912, + CHAN_ENUM_4915, + CHAN_ENUM_4917, + CHAN_ENUM_4920, + CHAN_ENUM_4922, + CHAN_ENUM_4925, + CHAN_ENUM_4927, + CHAN_ENUM_4932, + CHAN_ENUM_4935, + CHAN_ENUM_4937, + CHAN_ENUM_4940, + CHAN_ENUM_4942, + CHAN_ENUM_4945, + CHAN_ENUM_4947, + CHAN_ENUM_4950, + CHAN_ENUM_4952, + CHAN_ENUM_4955, + CHAN_ENUM_4957, + CHAN_ENUM_4960, + CHAN_ENUM_4962, + CHAN_ENUM_4965, + CHAN_ENUM_4967, + CHAN_ENUM_4970, + CHAN_ENUM_4972, + CHAN_ENUM_4975, + CHAN_ENUM_4977, + CHAN_ENUM_4980, + CHAN_ENUM_4982, + CHAN_ENUM_4985, + CHAN_ENUM_4987, + CHAN_ENUM_5032, + CHAN_ENUM_5035, + CHAN_ENUM_5037, + CHAN_ENUM_5040, + CHAN_ENUM_5042, + CHAN_ENUM_5045, + CHAN_ENUM_5047, + CHAN_ENUM_5052, + CHAN_ENUM_5055, + CHAN_ENUM_5057, + CHAN_ENUM_5060, + CHAN_ENUM_5080, + + CHAN_ENUM_5180, + CHAN_ENUM_5200, + CHAN_ENUM_5220, + CHAN_ENUM_5240, + CHAN_ENUM_5260, + CHAN_ENUM_5280, + CHAN_ENUM_5300, + CHAN_ENUM_5320, + CHAN_ENUM_5500, + CHAN_ENUM_5520, + CHAN_ENUM_5540, + CHAN_ENUM_5560, + CHAN_ENUM_5580, + CHAN_ENUM_5600, + CHAN_ENUM_5620, + CHAN_ENUM_5640, + CHAN_ENUM_5660, + CHAN_ENUM_5680, + CHAN_ENUM_5700, + CHAN_ENUM_5720, + CHAN_ENUM_5745, + CHAN_ENUM_5765, + CHAN_ENUM_5785, + CHAN_ENUM_5805, + CHAN_ENUM_5825, + + CHAN_ENUM_5850, + CHAN_ENUM_5855, + CHAN_ENUM_5860, + CHAN_ENUM_5865, + CHAN_ENUM_5870, + CHAN_ENUM_5875, + CHAN_ENUM_5880, + CHAN_ENUM_5885, + CHAN_ENUM_5890, + CHAN_ENUM_5895, + CHAN_ENUM_5900, + CHAN_ENUM_5905, + CHAN_ENUM_5910, + CHAN_ENUM_5915, + CHAN_ENUM_5920, + + NUM_CHANNELS, + + MIN_24GHZ_CHANNEL = CHAN_ENUM_2412, + MAX_24GHZ_CHANNEL = CHAN_ENUM_2484, + NUM_24GHZ_CHANNELS = (MAX_24GHZ_CHANNEL - MIN_24GHZ_CHANNEL + 1), + + MIN_5GHZ_CHANNEL = CHAN_ENUM_5180, + MAX_5GHZ_CHANNEL = CHAN_ENUM_5920, + NUM_5GHZ_CHANNELS = (MAX_5GHZ_CHANNEL - MIN_5GHZ_CHANNEL + 1), + + MIN_11P_CHANNEL = CHAN_ENUM_5850, + MAX_11P_CHANNEL = CHAN_ENUM_5920, + NUM_11P_CHANNELS = (MAX_11P_CHANNEL - MIN_11P_CHANNEL + 1), + + INVALID_CHANNEL = 0xBAD, +}; +#endif /** * enum channel_state - channel state @@ -393,12 +614,16 @@ struct regulatory { /** * struct chan_map - * @start_ch: center frequency + * @center_freq: center freq in mhz * @chan_num: channel number + * @min_bw: min bw + * @max_bw: max bw */ struct chan_map { uint32_t center_freq; uint32_t chan_num; + uint16_t min_bw; + uint16_t max_bw; }; /**