1 /* 2 * Copyright (c) 2017-2021 The Linux Foundation. All rights reserved. 3 * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved. 4 * 5 * Permission to use, copy, modify, and/or distribute this software for 6 * any purpose with or without fee is hereby granted, provided that the 7 * above copyright notice and this permission notice appear in all 8 * copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 11 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 12 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 13 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 14 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 15 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 16 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 17 * PERFORMANCE OF THIS SOFTWARE. 18 */ 19 20 /** 21 * DOC: reg_services_public_struct.h 22 * This file contains regulatory data structures 23 */ 24 25 #ifndef __REG_SERVICES_PUBLIC_STRUCT_H_ 26 #define __REG_SERVICES_PUBLIC_STRUCT_H_ 27 28 #ifdef CONFIG_AFC_SUPPORT 29 #include <wlan_reg_afc.h> 30 #endif 31 32 #ifdef CONFIG_BAND_6GHZ 33 #define REG_MAX_CHANNELS_PER_OPERATING_CLASS 70 34 /* 35 * These tx-power macros are present till the 6G regdomains are defined to 36 * support tx-power values for various client types. 37 */ 38 #define REG_PSD_MAX_TXPOWER_FOR_DEFAULT_CLIENT (-1) /* dBm */ 39 #define REG_PSD_MAX_TXPOWER_FOR_SUBORDINATE_CLIENT 5 /* dBm */ 40 #define REG_EIRP_MAX_TXPOWER_FOR_SUBORDINATE_CLIENT 24 /* dBm */ 41 #else 42 #define REG_MAX_CHANNELS_PER_OPERATING_CLASS 28 43 #endif 44 45 #define REG_MAX_SUPP_OPER_CLASSES 32 46 #define REG_MAX_CHAN_CHANGE_CBKS 30 47 #define REG_INVALID_TXPOWER 255 48 #define MAX_STA_VDEV_CNT 4 49 #define INVALID_VDEV_ID 0xFF 50 #define INVALID_CHANNEL_NUM 0x0 51 #define CH_AVOID_MAX_RANGE (NUM_5GHZ_CHANNELS + NUM_24GHZ_CHANNELS) 52 #define REG_ALPHA2_LEN 2 53 #define MAX_REG_RULES 10 54 #define MAX_6G_REG_RULES 5 55 56 #define REGULATORY_CHAN_DISABLED BIT(0) 57 #define REGULATORY_CHAN_NO_IR BIT(1) 58 #define REGULATORY_CHAN_RADAR BIT(3) 59 #define REGULATORY_CHAN_NO_OFDM BIT(6) 60 #define REGULATORY_CHAN_INDOOR_ONLY BIT(9) 61 #define REGULATORY_CHAN_AFC BIT(13) 62 #define REGULATORY_CHAN_AFC_NOT_DONE BIT(16) 63 64 #define REGULATORY_CHAN_NO_HT40 BIT(4) 65 #define REGULATORY_CHAN_NO_80MHZ BIT(7) 66 #define REGULATORY_CHAN_NO_160MHZ BIT(8) 67 #define REGULATORY_CHAN_NO_20MHZ BIT(11) 68 #define REGULATORY_CHAN_NO_10MHZ BIT(12) 69 #define REGULATORY_CHAN_INVALID BIT(14) 70 71 #define REGULATORY_PHYMODE_NO11A BIT(0) 72 #define REGULATORY_PHYMODE_NO11B BIT(1) 73 #define REGULATORY_PHYMODE_NO11G BIT(2) 74 #define REGULATORY_CHAN_NO11N BIT(3) 75 #define REGULATORY_PHYMODE_NO11AC BIT(4) 76 #define REGULATORY_PHYMODE_NO11AX BIT(5) 77 #ifdef WLAN_FEATURE_11BE 78 #define REGULATORY_PHYMODE_NO11BE BIT(6) 79 #endif 80 81 #define BW_5_MHZ 5 82 #define BW_10_MHZ 10 83 #define BW_20_MHZ 20 84 #define BW_25_MHZ 25 85 #define BW_40_MHZ 40 86 #define BW_80_MHZ 80 87 #define BW_160_MHZ 160 88 #ifdef WLAN_FEATURE_11BE 89 #define BW_320_MHZ 320 90 #endif 91 #define BW_40_MHZ 40 92 93 #define MAX_NUM_PWR_LEVEL 16 94 95 #ifdef CONFIG_REG_CLIENT 96 #define MAX_NUM_FCC_RULES 2 97 /* 98 * As per spec valid range is range –64 dBm to 63 dBm. 99 * Powers in range of 64 - 191 will be invalid. 100 */ 101 #define INVALID_TPE_POWER 100 102 /* 802.11ax-2021 Table 9-276 Meaning of Local Maximum Transmit Power Count 103 * subfield if the Maximum Transmit Power Interpretation subfield is 0 or 2 104 */ 105 #define MAX_TX_PWR_COUNT_FOR_160MHZ 3 106 /* 802.11ax-2021 Table 9-277 Meaning of Maximum Transmit Power Count subfield 107 * if Maximum Transmit Power Interpretation subfield is 1 or 3 108 */ 109 #define MAX_TX_PWR_COUNT_FOR_160MHZ_PSD 4 110 #define MAX_NUM_TX_POWER_FOR_320MHZ 5 111 #define PUNCTURED_CHAN_POWER 128 112 #endif 113 114 /* no subchannels punctured */ 115 #define NO_SCHANS_PUNC 0x0000 116 117 #define REG_MIN_POWER -128 118 119 /** 120 * enum dfs_reg - DFS region 121 * @DFS_UNINIT_REGION: un-initialized region 122 * @DFS_FCC_REGION: FCC region 123 * @DFS_ETSI_REGION: ETSI region 124 * @DFS_MKK_REGION: MKK region 125 * @DFS_CN_REGION: China region 126 * @DFS_KR_REGION: Korea region 127 * @DFS_MKKN_REGION: MKKN region 128 * that supports updated W53 RADAR pattern 129 * detection. 130 * @DFS_UNDEF_REGION: Undefined region 131 */ 132 133 enum dfs_reg { 134 DFS_UNINIT_REGION = 0, 135 DFS_FCC_REGION = 1, 136 DFS_ETSI_REGION = 2, 137 DFS_MKK_REGION = 3, 138 DFS_CN_REGION = 4, 139 DFS_KR_REGION = 5, 140 DFS_MKKN_REGION = 6, 141 DFS_UNDEF_REGION = 0xFFFF, 142 }; 143 144 /** 145 * enum op_class_table_num 146 * @OP_CLASS_US: Class corresponds to US 147 * @OP_CLASS_EU: Class corresponds to EU 148 * @OP_CLASS_JAPAN: Class corresponds to JAPAN 149 * @OP_CLASS_GLOBAL: Class corresponds to GLOBAL 150 * @OP_CLASS_CHINA: Class corresponds to CHINA 151 */ 152 enum op_class_table_num { 153 OP_CLASS_US = 1, 154 OP_CLASS_EU, 155 OP_CLASS_JAPAN, 156 OP_CLASS_GLOBAL, 157 OP_CLASS_CHINA 158 }; 159 160 /* 161 * NB: not using kernel-doc comment marker since kernel-doc doesn't 162 * properly handle the conditional compilation 163 * enum channel_enum - channel enumeration 164 * @CHAN_ENUM_2412: channel with freq 2412 165 * @CHAN_ENUM_2417: channel with freq 2417 166 * @CHAN_ENUM_2422: channel with freq 2422 167 * @CHAN_ENUM_2427: channel with freq 2427 168 * @CHAN_ENUM_2432: channel with freq 2432 169 * @CHAN_ENUM_2437: channel with freq 2437 170 * @CHAN_ENUM_2442: channel with freq 2442 171 * @CHAN_ENUM_2447: channel with freq 2447 172 * @CHAN_ENUM_2452: channel with freq 2452 173 * @CHAN_ENUM_2457: channel with freq 2457 174 * @CHAN_ENUM_2462: channel with freq 2462 175 * @CHAN_ENUM_2467: channel with freq 2467 176 * @CHAN_ENUM_2472: channel with freq 2472 177 * @CHAN_ENUM_2484: channel with freq 2484 178 * @CHAN_ENUM_4912: channel with freq 4912 179 * @CHAN_ENUM_4915: channel with freq 4915 180 * @CHAN_ENUM_4917: channel with freq 4917 181 * @CHAN_ENUM_4920: channel with freq 4920 182 * @CHAN_ENUM_4922: channel with freq 4922 183 * @CHAN_ENUM_4925: channel with freq 4925 184 * @CHAN_ENUM_4927: channel with freq 4927 185 * @CHAN_ENUM_4932: channel with freq 4932 186 * @CHAN_ENUM_4935: channel with freq 4935 187 * @CHAN_ENUM_4937: channel with freq 4937 188 * @CHAN_ENUM_4940: channel with freq 4940 189 * @CHAN_ENUM_4942: channel with freq 4942 190 * @CHAN_ENUM_4945: channel with freq 4945 191 * @CHAN_ENUM_4947: channel with freq 4947 192 * @CHAN_ENUM_4950: channel with freq 4950 193 * @CHAN_ENUM_4952: channel with freq 4952 194 * @CHAN_ENUM_4955: channel with freq 4955 195 * @CHAN_ENUM_4957: channel with freq 4957 196 * @CHAN_ENUM_4960: channel with freq 4960 197 * @CHAN_ENUM_4962: channel with freq 4962 198 * @CHAN_ENUM_4965: channel with freq 4965 199 * @CHAN_ENUM_4967: channel with freq 4967 200 * @CHAN_ENUM_4970: channel with freq 4970 201 * @CHAN_ENUM_4972: channel with freq 4972 202 * @CHAN_ENUM_4975: channel with freq 4975 203 * @CHAN_ENUM_4977: channel with freq 4977 204 * @CHAN_ENUM_4980: channel with freq 4980 205 * @CHAN_ENUM_4982: channel with freq 4982 206 * @CHAN_ENUM_4985: channel with freq 4985 207 * @CHAN_ENUM_4987: channel with freq 4987 208 * @CHAN_ENUM_5032: channel with freq 5032 209 * @CHAN_ENUM_5035: channel with freq 5035 210 * @CHAN_ENUM_5037: channel with freq 5037 211 * @CHAN_ENUM_5040: channel with freq 5040 212 * @CHAN_ENUM_5042: channel with freq 5042 213 * @CHAN_ENUM_5045: channel with freq 5045 214 * @CHAN_ENUM_5047: channel with freq 5047 215 * @CHAN_ENUM_5052: channel with freq 5052 216 * @CHAN_ENUM_5055: channel with freq 5055 217 * @CHAN_ENUM_5057: channel with freq 5057 218 * @CHAN_ENUM_5060: channel with freq 5060 219 * @CHAN_ENUM_5080: channel with freq 5080 220 * @CHAN_ENUM_5180: channel with freq 5180 221 * @CHAN_ENUM_5200: channel with freq 5200 222 * @CHAN_ENUM_5220: channel with freq 5220 223 * @CHAN_ENUM_5240: channel with freq 5240 224 * @CHAN_ENUM_5260: channel with freq 5260 225 * @CHAN_ENUM_5280: channel with freq 5280 226 * @CHAN_ENUM_5300: channel with freq 5300 227 * @CHAN_ENUM_5320: channel with freq 5320 228 * @CHAN_ENUM_5500: channel with freq 5500 229 * @CHAN_ENUM_5520: channel with freq 5520 230 * @CHAN_ENUM_5540: channel with freq 5540 231 * @CHAN_ENUM_5560: channel with freq 5560 232 * @CHAN_ENUM_5580: channel with freq 5580 233 * @CHAN_ENUM_5600: channel with freq 5600 234 * @CHAN_ENUM_5620: channel with freq 5620 235 * @CHAN_ENUM_5640: channel with freq 5640 236 * @CHAN_ENUM_5660: channel with freq 5660 237 * @CHAN_ENUM_5680: channel with freq 5680 238 * @CHAN_ENUM_5700: channel with freq 5700 239 * @CHAN_ENUM_5720: channel with freq 5720 240 * @CHAN_ENUM_5745: channel with freq 5745 241 * @CHAN_ENUM_5765: channel with freq 5765 242 * @CHAN_ENUM_5785: channel with freq 5785 243 * @CHAN_ENUM_5805: channel with freq 5805 244 * @CHAN_ENUM_5825: channel with freq 5825 245 * @CHAN_ENUM_5845: channel with freq 5845 246 * @CHAN_ENUM_5850: channel with freq 5850 247 * @CHAN_ENUM_5855: channel with freq 5855 248 * @CHAN_ENUM_5860: channel with freq 5860 249 * @CHAN_ENUM_5865: channel with freq 5865 250 * @CHAN_ENUM_5870: channel with freq 5870 251 * @CHAN_ENUM_5875: channel with freq 5875 252 * @CHAN_ENUM_5880: channel with freq 5880 253 * @CHAN_ENUM_5885: channel with freq 5885 254 * @CHAN_ENUM_5890: channel with freq 5890 255 * @CHAN_ENUM_5895: channel with freq 5895 256 * @CHAN_ENUM_5900: channel with freq 5900 257 * @CHAN_ENUM_5905: channel with freq 5905 258 * @CHAN_ENUM_5910: channel with freq 5910 259 * @CHAN_ENUM_5915: channel with freq 5915 260 * @CHAN_ENUM_5920: channel with freq 5920 261 * @CHAN_ENUM_5935: channel with freq 5935 262 * @CHAN_ENUM_5955: channel with freq 5955 263 * @CHAN_ENUM_5975: channel with freq 5975 264 * @CHAN_ENUM_5995: channel with freq 5995 265 * @CHAN_ENUM_6015: channel with freq 6015 266 * @CHAN_ENUM_6035: channel with freq 6035 267 * @CHAN_ENUM_6055: channel with freq 6055 268 * @CHAN_ENUM_6075: channel with freq 6075 269 * @CHAN_ENUM_6095: channel with freq 6095 270 * @CHAN_ENUM_6115: channel with freq 6115 271 * @CHAN_ENUM_6135: channel with freq 6135 272 * @CHAN_ENUM_6155: channel with freq 6155 273 * @CHAN_ENUM_6175: channel with freq 6175 274 * @CHAN_ENUM_6195: channel with freq 6195 275 * @CHAN_ENUM_6215: channel with freq 6215 276 * @CHAN_ENUM_6235: channel with freq 6235 277 * @CHAN_ENUM_6255: channel with freq 6255 278 * @CHAN_ENUM_6275: channel with freq 6275 279 * @CHAN_ENUM_6295: channel with freq 6295 280 * @CHAN_ENUM_6315: channel with freq 6315 281 * @CHAN_ENUM_6335: channel with freq 6335 282 * @CHAN_ENUM_6355: channel with freq 6355 283 * @CHAN_ENUM_6375: channel with freq 6375 284 * @CHAN_ENUM_6395: channel with freq 6395 285 * @CHAN_ENUM_6415: channel with freq 6415 286 * @CHAN_ENUM_6435: channel with freq 6435 287 * @CHAN_ENUM_6455: channel with freq 6455 288 * @CHAN_ENUM_6475: channel with freq 6475 289 * @CHAN_ENUM_6495: channel with freq 6495 290 * @CHAN_ENUM_6515: channel with freq 6515 291 * @CHAN_ENUM_6535: channel with freq 6535 292 * @CHAN_ENUM_6555: channel with freq 6555 293 * @CHAN_ENUM_6575: channel with freq 6575 294 * @CHAN_ENUM_6595: channel with freq 6595 295 * @CHAN_ENUM_6615: channel with freq 6615 296 * @CHAN_ENUM_6635: channel with freq 6635 297 * @CHAN_ENUM_6655: channel with freq 6655 298 * @CHAN_ENUM_6675: channel with freq 6675 299 * @CHAN_ENUM_6695: channel with freq 6695 300 * @CHAN_ENUM_6715: channel with freq 6715 301 * @CHAN_ENUM_6735: channel with freq 6735 302 * @CHAN_ENUM_6755: channel with freq 6755 303 * @CHAN_ENUM_6775: channel with freq 6775 304 * @CHAN_ENUM_6795: channel with freq 6795 305 * @CHAN_ENUM_6815: channel with freq 6815 306 * @CHAN_ENUM_6835: channel with freq 6835 307 * @CHAN_ENUM_6855: channel with freq 6855 308 * @CHAN_ENUM_6875: channel with freq 6875 309 * @CHAN_ENUM_6895: channel with freq 6895 310 * @CHAN_ENUM_6915: channel with freq 6915 311 * @CHAN_ENUM_6935: channel with freq 6935 312 * @CHAN_ENUM_6955: channel with freq 6955 313 * @CHAN_ENUM_6975: channel with freq 6975 314 * @CHAN_ENUM_6995: channel with freq 6995 315 * @CHAN_ENUM_7015: channel with freq 7015 316 * @CHAN_ENUM_7035: channel with freq 7035 317 * @CHAN_ENUM_7055: channel with freq 7055 318 * @CHAN_ENUM_7075: channel with freq 7075 319 * @CHAN_ENUM_7095: channel with freq 7095 320 * @CHAN_ENUM_7115: channel with freq 7115 321 */ 322 enum channel_enum { 323 CHAN_ENUM_2412, 324 CHAN_ENUM_2417, 325 CHAN_ENUM_2422, 326 CHAN_ENUM_2427, 327 CHAN_ENUM_2432, 328 CHAN_ENUM_2437, 329 CHAN_ENUM_2442, 330 CHAN_ENUM_2447, 331 CHAN_ENUM_2452, 332 CHAN_ENUM_2457, 333 CHAN_ENUM_2462, 334 CHAN_ENUM_2467, 335 CHAN_ENUM_2472, 336 CHAN_ENUM_2484, 337 #ifdef CONFIG_49GHZ_CHAN 338 CHAN_ENUM_4912, 339 CHAN_ENUM_4915, 340 CHAN_ENUM_4917, 341 CHAN_ENUM_4920, 342 CHAN_ENUM_4922, 343 CHAN_ENUM_4925, 344 CHAN_ENUM_4927, 345 CHAN_ENUM_4932, 346 CHAN_ENUM_4935, 347 CHAN_ENUM_4937, 348 CHAN_ENUM_4940, 349 CHAN_ENUM_4942, 350 CHAN_ENUM_4945, 351 CHAN_ENUM_4947, 352 CHAN_ENUM_4950, 353 CHAN_ENUM_4952, 354 CHAN_ENUM_4955, 355 CHAN_ENUM_4957, 356 CHAN_ENUM_4960, 357 CHAN_ENUM_4962, 358 CHAN_ENUM_4965, 359 CHAN_ENUM_4967, 360 CHAN_ENUM_4970, 361 CHAN_ENUM_4972, 362 CHAN_ENUM_4975, 363 CHAN_ENUM_4977, 364 CHAN_ENUM_4980, 365 CHAN_ENUM_4982, 366 CHAN_ENUM_4985, 367 CHAN_ENUM_4987, 368 CHAN_ENUM_5032, 369 CHAN_ENUM_5035, 370 CHAN_ENUM_5037, 371 CHAN_ENUM_5040, 372 CHAN_ENUM_5042, 373 CHAN_ENUM_5045, 374 CHAN_ENUM_5047, 375 CHAN_ENUM_5052, 376 CHAN_ENUM_5055, 377 CHAN_ENUM_5057, 378 CHAN_ENUM_5060, 379 CHAN_ENUM_5080, 380 #endif /* CONFIG_49GHZ_CHAN */ 381 CHAN_ENUM_5180, 382 CHAN_ENUM_5200, 383 CHAN_ENUM_5220, 384 CHAN_ENUM_5240, 385 CHAN_ENUM_5260, 386 CHAN_ENUM_5280, 387 CHAN_ENUM_5300, 388 CHAN_ENUM_5320, 389 CHAN_ENUM_5500, 390 CHAN_ENUM_5520, 391 CHAN_ENUM_5540, 392 CHAN_ENUM_5560, 393 CHAN_ENUM_5580, 394 CHAN_ENUM_5600, 395 CHAN_ENUM_5620, 396 CHAN_ENUM_5640, 397 CHAN_ENUM_5660, 398 CHAN_ENUM_5680, 399 CHAN_ENUM_5700, 400 CHAN_ENUM_5720, 401 CHAN_ENUM_5745, 402 CHAN_ENUM_5765, 403 CHAN_ENUM_5785, 404 CHAN_ENUM_5805, 405 CHAN_ENUM_5825, 406 CHAN_ENUM_5845, 407 #ifdef WLAN_FEATURE_DSRC 408 CHAN_ENUM_5850, 409 CHAN_ENUM_5855, 410 CHAN_ENUM_5860, 411 #endif 412 CHAN_ENUM_5865, 413 #ifdef WLAN_FEATURE_DSRC 414 CHAN_ENUM_5870, 415 CHAN_ENUM_5875, 416 CHAN_ENUM_5880, 417 #endif 418 CHAN_ENUM_5885, 419 #ifdef WLAN_FEATURE_DSRC 420 CHAN_ENUM_5890, 421 CHAN_ENUM_5895, 422 CHAN_ENUM_5900, 423 CHAN_ENUM_5905, 424 CHAN_ENUM_5910, 425 CHAN_ENUM_5915, 426 CHAN_ENUM_5920, 427 #endif /* WLAN_FEATURE_DSRC */ 428 #ifdef CONFIG_BAND_6GHZ 429 CHAN_ENUM_5935, 430 CHAN_ENUM_5955, 431 CHAN_ENUM_5975, 432 CHAN_ENUM_5995, 433 CHAN_ENUM_6015, 434 CHAN_ENUM_6035, 435 CHAN_ENUM_6055, 436 CHAN_ENUM_6075, 437 CHAN_ENUM_6095, 438 CHAN_ENUM_6115, 439 CHAN_ENUM_6135, 440 CHAN_ENUM_6155, 441 CHAN_ENUM_6175, 442 CHAN_ENUM_6195, 443 CHAN_ENUM_6215, 444 CHAN_ENUM_6235, 445 CHAN_ENUM_6255, 446 CHAN_ENUM_6275, 447 CHAN_ENUM_6295, 448 CHAN_ENUM_6315, 449 CHAN_ENUM_6335, 450 CHAN_ENUM_6355, 451 CHAN_ENUM_6375, 452 CHAN_ENUM_6395, 453 CHAN_ENUM_6415, 454 CHAN_ENUM_6435, 455 CHAN_ENUM_6455, 456 CHAN_ENUM_6475, 457 CHAN_ENUM_6495, 458 CHAN_ENUM_6515, 459 CHAN_ENUM_6535, 460 CHAN_ENUM_6555, 461 CHAN_ENUM_6575, 462 CHAN_ENUM_6595, 463 CHAN_ENUM_6615, 464 CHAN_ENUM_6635, 465 CHAN_ENUM_6655, 466 CHAN_ENUM_6675, 467 CHAN_ENUM_6695, 468 CHAN_ENUM_6715, 469 CHAN_ENUM_6735, 470 CHAN_ENUM_6755, 471 CHAN_ENUM_6775, 472 CHAN_ENUM_6795, 473 CHAN_ENUM_6815, 474 CHAN_ENUM_6835, 475 CHAN_ENUM_6855, 476 CHAN_ENUM_6875, 477 CHAN_ENUM_6895, 478 CHAN_ENUM_6915, 479 CHAN_ENUM_6935, 480 CHAN_ENUM_6955, 481 CHAN_ENUM_6975, 482 CHAN_ENUM_6995, 483 CHAN_ENUM_7015, 484 CHAN_ENUM_7035, 485 CHAN_ENUM_7055, 486 CHAN_ENUM_7075, 487 CHAN_ENUM_7095, 488 CHAN_ENUM_7115, 489 #endif /* CONFIG_BAND_6GHZ */ 490 491 NUM_CHANNELS, 492 493 MIN_CHANNEL = CHAN_ENUM_2412, 494 MAX_CHANNEL = (NUM_CHANNELS - 1), 495 496 MIN_24GHZ_CHANNEL = CHAN_ENUM_2412, 497 MAX_24GHZ_CHANNEL = CHAN_ENUM_2484, 498 NUM_24GHZ_CHANNELS = (MAX_24GHZ_CHANNEL - MIN_24GHZ_CHANNEL + 1), 499 500 INVALID_CHANNEL = NUM_CHANNELS, 501 502 #ifdef CONFIG_49GHZ_CHAN 503 MIN_49GHZ_CHANNEL = CHAN_ENUM_4912, 504 MAX_49GHZ_CHANNEL = CHAN_ENUM_5080, 505 NUM_49GHZ_CHANNELS = (MAX_49GHZ_CHANNEL - MIN_49GHZ_CHANNEL + 1), 506 #else 507 MIN_49GHZ_CHANNEL = INVALID_CHANNEL, 508 MAX_49GHZ_CHANNEL = INVALID_CHANNEL, 509 NUM_49GHZ_CHANNELS = 0, 510 #endif /* CONFIG_49GHZ_CHAN */ 511 512 MIN_5GHZ_CHANNEL = CHAN_ENUM_5180, 513 #ifdef WLAN_FEATURE_DSRC 514 MAX_5GHZ_CHANNEL = CHAN_ENUM_5920, 515 #else 516 MAX_5GHZ_CHANNEL = CHAN_ENUM_5885, 517 #endif 518 NUM_5GHZ_CHANNELS = (MAX_5GHZ_CHANNEL - MIN_5GHZ_CHANNEL + 1), 519 520 #ifdef WLAN_FEATURE_DSRC 521 MIN_DSRC_CHANNEL = CHAN_ENUM_5850, 522 MAX_DSRC_CHANNEL = CHAN_ENUM_5920, 523 NUM_DSRC_CHANNELS = (MAX_DSRC_CHANNEL - MIN_DSRC_CHANNEL + 1), 524 #endif 525 526 MIN_5DOT9_CHANNEL = CHAN_ENUM_5845, 527 MAX_5DOT9_CHANNEL = CHAN_ENUM_5885, 528 NUM_5DOT9_CHANNELS = (MAX_5DOT9_CHANNEL - MIN_5DOT9_CHANNEL + 1), 529 530 #ifdef CONFIG_49GHZ_CHAN 531 #define BAND_5GHZ_START_CHANNEL MIN_49GHZ_CHANNEL 532 #else 533 #define BAND_5GHZ_START_CHANNEL MIN_5GHZ_CHANNEL 534 #endif /* CONFIG_49GHZ_CHAN */ 535 536 #ifdef DISABLE_UNII_SHARED_BANDS 537 MIN_UNII_1_BAND_CHANNEL = CHAN_ENUM_5180, 538 MAX_UNII_1_BAND_CHANNEL = CHAN_ENUM_5240, 539 NUM_UNII_1_BAND_CHANNELS = (MAX_UNII_1_BAND_CHANNEL - 540 MIN_UNII_1_BAND_CHANNEL + 1), 541 542 MIN_UNII_2A_BAND_CHANNEL = CHAN_ENUM_5260, 543 MAX_UNII_2A_BAND_CHANNEL = CHAN_ENUM_5320, 544 NUM_UNII_2A_BAND_CHANNELS = (MAX_UNII_2A_BAND_CHANNEL - 545 MIN_UNII_2A_BAND_CHANNEL + 1), 546 #endif 547 548 #ifdef CONFIG_BAND_6GHZ 549 MIN_6GHZ_CHANNEL = CHAN_ENUM_5935, 550 MAX_6GHZ_CHANNEL = CHAN_ENUM_7115, 551 NUM_6GHZ_CHANNELS = (MAX_6GHZ_CHANNEL - MIN_6GHZ_CHANNEL + 1), 552 MIN_6GHZ_NON_ORPHAN_CHANNEL = CHAN_ENUM_5955, 553 #else 554 MIN_6GHZ_CHANNEL = INVALID_CHANNEL, 555 MAX_6GHZ_CHANNEL = INVALID_CHANNEL, 556 NUM_6GHZ_CHANNELS = 0, 557 MIN_6GHZ_NON_ORPHAN_CHANNEL = INVALID_CHANNEL, 558 #endif /* CONFIG_BAND_6GHZ */ 559 }; 560 561 /** 562 * enum channel_state - channel state 563 * @CHANNEL_STATE_DISABLE: disabled state 564 * @CHANNEL_STATE_PASSIVE: passive state 565 * @CHANNEL_STATE_DFS: dfs state 566 * @CHANNEL_STATE_ENABLE: enabled state 567 * @CHANNEL_STATE_INVALID: invalid state 568 */ 569 enum channel_state { 570 CHANNEL_STATE_DISABLE, 571 CHANNEL_STATE_PASSIVE, 572 CHANNEL_STATE_DFS, 573 CHANNEL_STATE_ENABLE, 574 CHANNEL_STATE_INVALID, 575 }; 576 577 /** 578 * enum reg_6g_ap_type - Regulatory AP type for regulatory info subfield. 579 * @REG_INDOOR_AP: Indoor AP 580 * @REG_STANDARD_POWER_AP: Standard Power AP 581 * @REG_VERY_LOW_POWER_AP: Very low power AP 582 * @REG_CURRENT_MAX_AP_TYPE: current maximum, used to determine array size 583 * @REG_MAX_SUPP_AP_TYPE: Current maximum AP power typer supported in the IEEE 584 * standard. 585 * @REG_MAX_AP_TYPE: Maximum value possible for (3 bits) regulatory info 586 * sub-field in the 6G HE Operation IE 587 */ 588 enum reg_6g_ap_type { 589 REG_INDOOR_AP = 0, 590 REG_STANDARD_POWER_AP = 1, 591 REG_VERY_LOW_POWER_AP = 2, 592 REG_CURRENT_MAX_AP_TYPE, 593 REG_MAX_SUPP_AP_TYPE = REG_VERY_LOW_POWER_AP, 594 REG_MAX_AP_TYPE = 7, 595 }; 596 597 /** 598 * enum reg_6g_client_type - Regulatory client type for max tx-power category 599 * @REG_DEFAULT_CLIENT: Default client 600 * @REG_SUBORDINATE_CLIENT: Subordinate client 601 * @REG_MAX_CLIENT_TYPE: Maximum value possible for max tx-power category 602 * (2 bits) sub-field in the TPE (Transmit Power Envelope) IE 603 * @REG_INVALID_CLIENT_TYPE: Invalid client type 604 */ 605 enum reg_6g_client_type { 606 REG_DEFAULT_CLIENT = 0, 607 REG_SUBORDINATE_CLIENT = 1, 608 REG_MAX_CLIENT_TYPE = 2, 609 REG_INVALID_CLIENT_TYPE = REG_MAX_CLIENT_TYPE, 610 }; 611 612 /** 613 * enum v_REGDOMAIN_t: reg domain 614 * @REGDOMAIN_FCC: FCC domain 615 * @REGDOMAIN_ETSI: ETSI domain 616 * @REGDOMAIN_JAPAN: JAPAN domain 617 * @REGDOMAIN_WORLD: WORLD domain 618 * @REGDOMAIN_COUNT: Max domain 619 */ 620 typedef enum { 621 REGDOMAIN_FCC, 622 REGDOMAIN_ETSI, 623 REGDOMAIN_JAPAN, 624 REGDOMAIN_WORLD, 625 REGDOMAIN_COUNT 626 } v_REGDOMAIN_t; 627 628 /** 629 * enum ctl_value - CTL value 630 * @CTL_FCC: CTL FCC 631 * @CTL_MKK: CTL MKK 632 * @CTL_ETSI: CTL ETSI 633 * @CTL_KOR: CTL KOR 634 * @CTL_CHN: CTL CHINA 635 * @CTL_USER_DEF: CTL USER_DEF 636 * @CTL_NONE: CTL NONE 637 */ 638 enum ctl_value { 639 CTL_FCC = 0x10, 640 CTL_ETSI = 0x30, 641 CTL_MKK = 0x40, 642 CTL_KOR = 0x50, 643 CTL_CHN = 0x60, 644 CTL_USER_DEF = 0x70, 645 CTL_NONE = 0xff 646 }; 647 648 /** 649 * struct freq_range: The range/band of frequencies, indicated by left and right 650 * edge frequencies. 651 * @left: Left edge frequency(inclusive) 652 * @right: Right edge frequency(inclusive) 653 */ 654 struct freq_range { 655 qdf_freq_t left; 656 qdf_freq_t right; 657 }; 658 659 /** 660 * struct ch_params 661 * @ch_width: channel width 662 * @sec_ch_offset: secondary channel offset 663 * @center_freq_seg0: channel number for segment 0 664 * @center_freq_seg1: channel number segment 1 665 * @mhz_freq_seg0: Center frequency for segment 0 666 * @mhz_freq_seg1: Center frequency for segment 1 667 * @reg_punc_bitmap: Output puncturing bitmap 668 * @is_create_punc_bitmap: Whether puncturing bitmap is to be created or not 669 * Parameter 'reg_punc_bitmap' is valid only if 670 * is_create_punc_bitmap is true 671 * @input_punc_bitmap: Input puncture bitmap. The channels which are indicated 672 * as punctured by this bitmap are not validated by the 673 * regulatory. 674 */ 675 struct ch_params { 676 enum phy_ch_width ch_width; 677 uint8_t sec_ch_offset; 678 uint8_t center_freq_seg0; 679 uint8_t center_freq_seg1; 680 qdf_freq_t mhz_freq_seg0; 681 qdf_freq_t mhz_freq_seg1; 682 #ifdef WLAN_FEATURE_11BE 683 uint16_t reg_punc_bitmap; 684 bool is_create_punc_bitmap; 685 uint16_t input_punc_bitmap; 686 #endif 687 }; 688 689 #ifdef WLAN_FEATURE_11BE 690 #define MAX_NUM_CHAN_PARAM 2 691 692 /** 693 * struct reg_channel_list 694 * @num_ch_params: Number of chan_param elements 695 * @chan_param: Object of type struct ch_params to hold channel params 696 * Currently chan_param is an array of 2 because maximum possible 320 697 * channels for a given primary channel is 2. This may be dynamically 698 * allocated in the future by the caller if num_ch_params is greater than 2. 699 * 700 */ 701 struct reg_channel_list { 702 uint8_t num_ch_params; 703 struct ch_params chan_param[MAX_NUM_CHAN_PARAM]; 704 }; 705 #endif 706 707 /** 708 * struct channel_power 709 * @center_freq: Channel Center Frequency 710 * @chan_num: channel number 711 * @tx_power: TX power 712 */ 713 struct channel_power { 714 qdf_freq_t center_freq; 715 uint8_t chan_num; 716 uint32_t tx_power; 717 }; 718 719 /** 720 * enum offset_t: channel offset 721 * @BW20: 20 mhz channel 722 * @BW40_LOW_PRIMARY: lower channel in 40 mhz 723 * @BW40_HIGH_PRIMARY: higher channel in 40 mhz 724 * @BW80: 80 mhz channel 725 * @BWALL: unknown bandwidth 726 * @BW_INVALID: invalid bandwidth 727 */ 728 enum offset_t { 729 BW20 = 0, 730 BW40_LOW_PRIMARY = 1, 731 BW40_HIGH_PRIMARY = 3, 732 BW80, 733 BWALL, 734 BW_INVALID = 0xFF 735 }; 736 737 /** 738 * enum behav_limit - behavior limit 739 * @BEHAV_NONE: none 740 * @BEHAV_BW40_LOW_PRIMARY: BW40 low primary 741 * @BEHAV_BW40_HIGH_PRIMARY: BW40 high primary 742 * @BEHAV_BW80_PLUS: BW 80 plus 743 * @BEHAV_INVALID: invalid behavior 744 */ 745 enum behav_limit { 746 BEHAV_NONE, 747 BEHAV_BW40_LOW_PRIMARY, 748 BEHAV_BW40_HIGH_PRIMARY, 749 BEHAV_BW80_PLUS, 750 BEHAV_INVALID = 0xFF 751 }; 752 753 /** 754 * struct c_freq_lst: The list data structure for the center frequencies 755 * @num_cfis: Number of center frequencies 756 * @p_cfis_arr: Start address of the array of center frequency indices. Center 757 * for 40/80/160/320MHz band channel opclasses. For 20MHz the list 758 * is empty as it is already available in @channels variable. 759 */ 760 struct c_freq_lst { 761 uint8_t num_cfis; 762 const uint8_t *p_cfis_arr; 763 }; 764 765 /** 766 * struct reg_dmn_op_class_map_t: operating class 767 * @op_class: operating class number 768 * @chan_spacing: channel spacing 769 * @offset: offset 770 * @behav_limit: OR of bitmaps of enum behav_limit 771 * @start_freq: starting frequency 772 * @channels: channel set 773 * @p_cfi_lst_obj: Pointer to center frequency indices list 774 */ 775 struct reg_dmn_op_class_map_t { 776 uint8_t op_class; 777 uint16_t chan_spacing; 778 enum offset_t offset; 779 uint16_t behav_limit; 780 qdf_freq_t start_freq; 781 uint8_t channels[REG_MAX_CHANNELS_PER_OPERATING_CLASS]; 782 const struct c_freq_lst *p_cfi_lst_obj; 783 }; 784 785 /** 786 * enum opclass_config: Opclass configuration 787 * @OPCLASSES_SUPPORTED_BY_CUR_HWMODE: Retrieve opclasses that is supported 788 * by the current hw mode. 789 * @OPCLASSES_NOT_SUPPORTED_BY_CUR_HWMODE: Retrieve opclasses that are not 790 * supported by the current hw mode. 791 * @OPCLASSES_SUPPORTED_BY_DOMAIN: Populate the opclass supported by the radio 792 * without considering the capability of current hwmode. 793 */ 794 enum opclass_config { 795 OPCLASSES_SUPPORTED_BY_CUR_HWMODE = 1, 796 OPCLASSES_NOT_SUPPORTED_BY_CUR_HWMODE = 2, 797 OPCLASSES_SUPPORTED_BY_DOMAIN = 3 798 }; 799 800 /** 801 * struct regdmn_ap_cap_opclass_t: AP Cap operation class table 802 * @op_class: operating class number 803 * @ch_width: channel width in MHz 804 * @start_freq: Starting Frequency in MHz 805 * @behav_limit: OR of bitmaps of enum behav_limit 806 * @max_tx_pwr_dbm: Maximum tx power in dbm 807 * @num_supported_chan: Number of supported channels 808 * @num_non_supported_chan: Number of non-supported channels 809 * @sup_chan_list: Array of supported channel numbers 810 * @non_sup_chan_list: Array of non supported channel numbers 811 */ 812 struct regdmn_ap_cap_opclass_t { 813 uint8_t op_class; 814 uint16_t ch_width; 815 qdf_freq_t start_freq; 816 uint16_t behav_limit; 817 uint8_t max_tx_pwr_dbm; 818 uint8_t num_supported_chan; 819 uint8_t num_non_supported_chan; 820 uint8_t sup_chan_list[REG_MAX_CHANNELS_PER_OPERATING_CLASS]; 821 uint8_t non_sup_chan_list[REG_MAX_CHANNELS_PER_OPERATING_CLASS]; 822 }; 823 824 /** 825 * struct reg_dmn_supp_op_classes: operating classes 826 * @num_classes: number of classes 827 * @classes: classes 828 */ 829 struct reg_dmn_supp_op_classes { 830 uint8_t num_classes; 831 uint8_t classes[REG_MAX_SUPP_OPER_CLASSES]; 832 }; 833 834 /** 835 * struct reg_start_11d_scan_req: start 11d scan request 836 * @vdev_id: vdev id 837 * @scan_period_msec: scan duration in milli-seconds 838 * @start_interval_msec: offset duration to start the scan in milli-seconds 839 */ 840 struct reg_start_11d_scan_req { 841 uint8_t vdev_id; 842 uint32_t scan_period_msec; 843 uint32_t start_interval_msec; 844 }; 845 846 /** 847 * struct reg_11d_scan_msg: 11d scan message structure 848 * @psoc: pointer to psoc object 849 * @enable_11d_supp: enable 11d scan or disable 11d scan 850 */ 851 struct reg_11d_scan_msg { 852 struct wlan_objmgr_psoc *psoc; 853 bool enable_11d_supp; 854 }; 855 /** 856 * struct reg_stop_11d_scan_req: stop 11d scan request 857 * @vdev_id: vdev id 858 */ 859 struct reg_stop_11d_scan_req { 860 uint8_t vdev_id; 861 }; 862 863 /** 864 * struct reg_11d_new_country: regulatory 11d new coutry code 865 * @alpha2: new 11d alpha2 866 */ 867 struct reg_11d_new_country { 868 uint8_t alpha2[REG_ALPHA2_LEN + 1]; 869 }; 870 871 /** 872 * enum country_src: country source 873 * @SOURCE_UNKNOWN: source unknown 874 * @SOURCE_QUERY: source query 875 * @SOURCE_CORE: source regulatory core 876 * @SOURCE_DRIVER: source driver 877 * @SOURCE_USERSPACE: source userspace 878 * @SOURCE_11D: source 11D 879 */ 880 enum country_src { 881 SOURCE_UNKNOWN, 882 SOURCE_QUERY, 883 SOURCE_CORE, 884 SOURCE_DRIVER, 885 SOURCE_USERSPACE, 886 SOURCE_11D 887 }; 888 889 #ifdef WLAN_FEATURE_GET_USABLE_CHAN_LIST 890 /** 891 * enum iftype - (virtual) interface types 892 * 893 * @IFTYPE_UNSPECIFIED: unspecified type, driver decides 894 * @IFTYPE_ADHOC: independent BSS member 895 * @IFTYPE_STATION: managed BSS member 896 * @IFTYPE_AP: access point 897 * @IFTYPE_AP_VLAN: VLAN interface for access points; VLAN interfaces 898 * are a bit special in that they must always be tied to a pre-existing 899 * AP type interface. 900 * @IFTYPE_WDS: wireless distribution interface 901 * @IFTYPE_MONITOR: monitor interface receiving all frames 902 * @IFTYPE_MESH_POINT: mesh point 903 * @IFTYPE_P2P_CLIENT: P2P client 904 * @IFTYPE_P2P_GO: P2P group owner 905 * @IFTYPE_P2P_DEVICE: P2P device interface type, this is not a netdev 906 * and therefore can't be created in the normal ways, use the 907 * %NL80211_CMD_START_P2P_DEVICE and %NL80211_CMD_STOP_P2P_DEVICE 908 * commands to create and destroy one 909 * @IFTYPE_OCB: Outside Context of a BSS 910 * This mode corresponds to the MIB variable dot11OCBActivated=true 911 * @IFTYPE_NAN: NAN mode 912 * @IFTYPE_MAX: highest interface type number currently defined 913 * @NUM_IFTYPES: number of defined interface types 914 * 915 * These values are used with the %NL80211_ATTR_IFTYPE 916 * to set the type of an interface. 917 * 918 */ 919 enum iftype { 920 IFTYPE_UNSPECIFIED, 921 IFTYPE_ADHOC, 922 IFTYPE_STATION, 923 IFTYPE_AP, 924 IFTYPE_AP_VLAN, 925 IFTYPE_WDS, 926 IFTYPE_MONITOR, 927 IFTYPE_MESH_POINT, 928 IFTYPE_P2P_CLIENT, 929 IFTYPE_P2P_GO, 930 IFTYPE_P2P_DEVICE, 931 IFTYPE_OCB, 932 IFTYPE_NAN, 933 934 /* keep last */ 935 NUM_IFTYPES, 936 IFTYPE_MAX = NUM_IFTYPES - 1 937 }; 938 939 /** 940 * enum usable_channels_filter - Filters to get usable channels 941 * @FILTER_CELLULAR_COEX: Avoid lte coex channels 942 * @FILTER_WLAN_CONCURRENCY: Avoid con channels 943 **/ 944 enum usable_channels_filter { 945 FILTER_CELLULAR_COEX = 0, 946 FILTER_WLAN_CONCURRENCY = 1, 947 }; 948 949 /** 950 * struct get_usable_chan_res_params - Usable channels resp params 951 * @freq : center freq 952 * @seg0_freq : seg0 freq 953 * @seg1_freq: seg1 freq 954 * @bw : bandwidth 955 * @state: channel state 956 * @iface_mode_mask: interface mode mask 957 **/ 958 struct get_usable_chan_res_params { 959 qdf_freq_t freq; 960 uint32_t seg0_freq; 961 uint32_t seg1_freq; 962 enum phy_ch_width bw; 963 uint32_t iface_mode_mask; 964 enum channel_state state; 965 }; 966 967 /** 968 * struct get_usable_chan_req_params - Usable channels req params 969 * @band_mask: band mask 970 * @iface_mode_mask: interface mode mask 971 * @filter_mask: filter mask 972 **/ 973 struct get_usable_chan_req_params { 974 uint32_t band_mask; 975 uint32_t iface_mode_mask; 976 uint32_t filter_mask; 977 }; 978 #endif 979 980 /** 981 * struct regulatory_channel 982 * @center_freq: center frequency 983 * @chan_num: channel number 984 * @state: channel state 985 * @chan_flags: channel flags 986 * @tx_power: TX powers 987 * @min_bw: min bandwidth 988 * @max_bw: max bandwidth 989 * @ant_gain: antenna gain 990 * @nol_chan: whether channel is nol 991 * @nol_history: Set NOL-History when STA vap detects RADAR. 992 * @is_chan_hop_blocked: Whether channel is blocked for ACS hopping. 993 * @ht40intol_flags: Contains Flags to indicate whether the 40PLUS/40MINUS 994 * version of the channel is blocked by ACS due to 995 * intolerance. 996 * @psd_flag: is PSD channel or not 997 * @psd_eirp: PSD power level 998 * @is_static_punctured: is static punctured 999 * @opclass_chan_disable: Whether the channel is disabled/enabled by a user 1000 * command. The command provides an opclass and a 1001 * subset of the channels belonging to that opclass 1002 * as inputs and expects the driver to disable/enable 1003 * the channels in the subset. 1004 * @power_type: channel power type 1005 */ 1006 struct regulatory_channel { 1007 qdf_freq_t center_freq; 1008 uint8_t chan_num; 1009 enum channel_state state; 1010 uint32_t chan_flags; 1011 int32_t tx_power; 1012 uint16_t min_bw; 1013 uint16_t max_bw; 1014 uint8_t ant_gain; 1015 bool nol_chan; 1016 bool nol_history; 1017 #ifdef CONFIG_HOST_FIND_CHAN 1018 bool is_chan_hop_blocked; 1019 uint8_t ht40intol_flags; 1020 #endif 1021 #ifdef CONFIG_BAND_6GHZ 1022 bool psd_flag; 1023 uint16_t psd_eirp; 1024 #endif 1025 #ifdef CONFIG_REG_CLIENT 1026 uint8_t is_static_punctured; 1027 enum reg_6g_ap_type power_type; 1028 #endif 1029 #ifndef CONFIG_REG_CLIENT 1030 bool opclass_chan_disable; 1031 #endif 1032 }; 1033 1034 /** 1035 * struct ap_cli_pwr_mode_info: AP and client power mode information 1036 * @is_mode_ap: Is it AP or CLIENT 1037 * @cli_type: Is the client a default or subordinate 1038 * @ap_pwr_mode: LPI, SP or VLP 1039 */ 1040 struct ap_cli_pwr_mode_info { 1041 bool is_mode_ap; 1042 enum reg_6g_client_type cli_type; 1043 enum reg_6g_ap_type ap_pwr_mode; 1044 }; 1045 1046 /** 1047 * enum supported_6g_pwr_types: 6G supported AP and Client power types 1048 * @REG_BEST_PWR_MODE: Best power mode 1049 * @REG_CURRENT_PWR_MODE: Current power mode 1050 * @REG_AP_LPI: LPI AP power mode 1051 * @REG_AP_SP: SP AP power mode 1052 * @REG_AP_VLP: VLP AP power mode 1053 * @REG_CLI_DEF_LPI: LPI default client mode 1054 * @REG_CLI_DEF_SP: SP default client mode 1055 * @REG_CLI_DEF_VLP: VLP default client mode 1056 * @REG_CLI_SUB_LPI: LPI subordinate client mode 1057 * @REG_CLI_SUB_SP: SP subordinate client mode 1058 * @REG_CLI_SUB_VLP: VLP subordinate client mode 1059 * @REG_INVALID_PWR_MODE: Invalid power mode 1060 */ 1061 enum supported_6g_pwr_types { 1062 REG_BEST_PWR_MODE = -1, 1063 REG_CURRENT_PWR_MODE = 0, 1064 REG_AP_LPI = 1, 1065 REG_AP_SP = 2, 1066 REG_AP_VLP = 3, 1067 REG_CLI_DEF_LPI = 4, 1068 REG_CLI_DEF_SP = 5, 1069 REG_CLI_DEF_VLP = 6, 1070 REG_CLI_SUB_LPI = 7, 1071 REG_CLI_SUB_SP = 8, 1072 REG_CLI_SUB_VLP = 9, 1073 REG_INVALID_PWR_MODE = 10, 1074 }; 1075 1076 #define MAX_PWR_TYPES 10 1077 /** 1078 * struct psd_val: Regulatory power information 1079 * @psd_flag: Boolean to indicate if PSD is supported or not 1080 * @psd_eirp: PSD power 1081 * @tx_power: Maximum EIRP 1082 */ 1083 struct psd_val { 1084 bool psd_flag; 1085 uint16_t psd_eirp; 1086 uint32_t tx_power; 1087 }; 1088 1089 /** 1090 * struct super_chan_info: Information of a 6G channel for every power 1091 * mode 1092 * @power_types: Bitmap whose bit positions indicate the power modes supported 1093 * by a channel 1094 * @best_power_mode: Best power mode of a channel 1095 * @min_bw: Array of minimum bandwidths per power mode 1096 * @max_bw: Array of maximum bandwidths per power mode 1097 * @chan_flags_arr: Array of channel flags 1098 * @reg_chan_pwr: Array of powers 1099 * @state_arr: Array of states 1100 */ 1101 struct super_chan_info { 1102 uint16_t power_types; 1103 enum supported_6g_pwr_types best_power_mode; 1104 uint16_t min_bw[MAX_PWR_TYPES]; 1105 uint16_t max_bw[MAX_PWR_TYPES]; 1106 uint32_t chan_flags_arr[MAX_PWR_TYPES]; 1107 struct psd_val reg_chan_pwr[MAX_PWR_TYPES]; 1108 enum channel_state state_arr[MAX_PWR_TYPES]; 1109 }; 1110 1111 /** 1112 * struct regulatory: regulatory information 1113 * @reg_domain: regulatory domain pair 1114 * @eeprom_rd_ext: eeprom value 1115 * @country_code: current country in integer 1116 * @alpha2: current alpha2 1117 * @def_country: default country alpha2 1118 * @def_region: DFS region 1119 * @ctl_2g: 2G CTL value 1120 * @ctl_5g: 5G CTL value 1121 * @regpair: pointer to regulatory pair 1122 * @cc_src: country code src 1123 * @reg_flags: kernel regulatory flags 1124 */ 1125 struct regulatory { 1126 uint32_t reg_domain; 1127 uint32_t eeprom_rd_ext; 1128 uint16_t country_code; 1129 uint8_t alpha2[REG_ALPHA2_LEN + 1]; 1130 uint8_t ctl_2g; 1131 uint8_t ctl_5g; 1132 const void *regpair; 1133 enum country_src cc_src; 1134 uint32_t reg_flags; 1135 }; 1136 1137 /** 1138 * struct chan_map 1139 * @center_freq: center freq in mhz 1140 * @chan_num: channel number 1141 * @min_bw: min bw 1142 * @max_bw: max bw 1143 */ 1144 struct chan_map { 1145 qdf_freq_t center_freq; 1146 uint8_t chan_num; 1147 uint16_t min_bw; 1148 uint16_t max_bw; 1149 }; 1150 1151 /** 1152 * struct bonded_channel 1153 * @start_ch: start channel 1154 * @end_ch: end channel 1155 */ 1156 struct bonded_channel { 1157 uint8_t start_ch; 1158 uint8_t end_ch; 1159 }; 1160 1161 /** 1162 * struct bonded_channel_freq 1163 * @start_freq: start channel frequency 1164 * @end_freq: end channel frequency 1165 */ 1166 struct bonded_channel_freq { 1167 uint16_t start_freq; 1168 uint16_t end_freq; 1169 }; 1170 1171 struct set_country { 1172 uint8_t country[REG_ALPHA2_LEN + 1]; 1173 uint8_t pdev_id; 1174 }; 1175 /** 1176 * enum ht_sec_ch_offset 1177 * @NO_SEC_CH: no secondary 1178 * @LOW_PRIMARY_CH: low primary 1179 * @HIGH_PRIMARY_CH: high primary 1180 */ 1181 enum ht_sec_ch_offset { 1182 NO_SEC_CH = 0, 1183 LOW_PRIMARY_CH = 1, 1184 HIGH_PRIMARY_CH = 3, 1185 }; 1186 1187 enum cc_setting_code { 1188 REG_SET_CC_STATUS_PASS = 0, 1189 REG_CURRENT_ALPHA2_NOT_FOUND = 1, 1190 REG_INIT_ALPHA2_NOT_FOUND = 2, 1191 REG_SET_CC_CHANGE_NOT_ALLOWED = 3, 1192 REG_SET_CC_STATUS_NO_MEMORY = 4, 1193 REG_SET_CC_STATUS_FAIL = 5, 1194 }; 1195 1196 /** 1197 * struct cur_reg_rule 1198 * @start_freq: start frequency 1199 * @end_freq: end frequency 1200 * @max_bw: maximum bandwidth 1201 * @reg_power: regulatory power 1202 * @ant_gain: antenna gain 1203 * @flags: regulatory flags 1204 * @psd_flag: is PSD power used 1205 * @psd_eirp: maximum PSD EIRP value 1206 */ 1207 struct cur_reg_rule { 1208 uint16_t start_freq; 1209 uint16_t end_freq; 1210 uint16_t max_bw; 1211 uint8_t reg_power; 1212 uint8_t ant_gain; 1213 uint16_t flags; 1214 bool psd_flag; 1215 uint16_t psd_eirp; 1216 }; 1217 1218 #ifdef CONFIG_REG_CLIENT 1219 /** 1220 * struct cur_fcc_rule 1221 * @center_freq: center frequency 1222 * @tx_power: transmission power 1223 */ 1224 struct cur_fcc_rule { 1225 uint16_t center_freq; 1226 uint8_t tx_power; 1227 }; 1228 #endif 1229 1230 /** 1231 * struct cur_regulatory_info 1232 * @psoc: psoc ptr 1233 * @status_code: status value 1234 * @num_phy: number of phy 1235 * @phy_id: phy id 1236 * @reg_dmn_pair: reg domain pair 1237 * @ctry_code: country code 1238 * @alpha2: country alpha2 1239 * @offload_enabled: offload enabled 1240 * @dfs_region: dfs region 1241 * @phybitmap: phy bit map 1242 * @min_bw_2g: minimum 2G bw 1243 * @max_bw_2g: maximum 2G bw 1244 * @min_bw_5g: minimum 5G bw 1245 * @max_bw_5g: maximum 5G bw 1246 * @num_2g_reg_rules: number 2G reg rules 1247 * @num_5g_reg_rules: number 5G and 6G reg rules 1248 * @reg_6g_thresh_priority_freq: All frequencies greater or equal will be given 1249 * priority during channel selection by upper layer 1250 * @reg_rules_2g_ptr: ptr to 2G reg rules 1251 * @reg_rules_5g_ptr: ptr to 5G reg rules 1252 * @client_type: type of client 1253 * @rnr_tpe_usable: if RNR TPE octet is usable for country 1254 * @unspecified_ap_usable: if not set, AP usable for country 1255 * @domain_code_6g_ap: domain code for 6G AP 1256 * @domain_code_6g_client: domain code for 6G client in SP mode 1257 * @domain_code_6g_super_id: 6G super domain ID 1258 * @min_bw_6g_ap: minimum 6G bw for AP 1259 * @max_bw_6g_ap: maximum 6G bw for AP 1260 * @min_bw_6g_client: list of minimum 6G bw for clients 1261 * @max_bw_6g_client: list of maximum 6G bw for clients 1262 * @num_6g_reg_rules_ap: number of 6G reg rules for AP 1263 * @num_6g_reg_rules_client: list of number of 6G reg rules for client 1264 * @reg_rules_6g_ap_ptr: ptr to 6G AP reg rules 1265 * @reg_rules_6g_client_ptr: list of ptr to 6G client reg rules 1266 * @fcc_rules_ptr: ptr to fcc rules 1267 * @num_fcc_rules: Number of fcc rules sent by firmware 1268 */ 1269 struct cur_regulatory_info { 1270 struct wlan_objmgr_psoc *psoc; 1271 enum cc_setting_code status_code; 1272 uint8_t num_phy; 1273 uint8_t phy_id; 1274 uint16_t reg_dmn_pair; 1275 uint16_t ctry_code; 1276 uint8_t alpha2[REG_ALPHA2_LEN + 1]; 1277 bool offload_enabled; 1278 enum dfs_reg dfs_region; 1279 uint32_t phybitmap; 1280 uint32_t min_bw_2g; 1281 uint32_t max_bw_2g; 1282 uint32_t min_bw_5g; 1283 uint32_t max_bw_5g; 1284 uint32_t num_2g_reg_rules; 1285 uint32_t num_5g_reg_rules; 1286 qdf_freq_t reg_6g_thresh_priority_freq; 1287 struct cur_reg_rule *reg_rules_2g_ptr; 1288 struct cur_reg_rule *reg_rules_5g_ptr; 1289 enum reg_6g_client_type client_type; 1290 bool rnr_tpe_usable; 1291 bool unspecified_ap_usable; 1292 uint8_t domain_code_6g_ap[REG_CURRENT_MAX_AP_TYPE]; 1293 uint8_t domain_code_6g_client[REG_CURRENT_MAX_AP_TYPE][REG_MAX_CLIENT_TYPE]; 1294 uint32_t domain_code_6g_super_id; 1295 uint32_t min_bw_6g_ap[REG_CURRENT_MAX_AP_TYPE]; 1296 uint32_t max_bw_6g_ap[REG_CURRENT_MAX_AP_TYPE]; 1297 uint32_t min_bw_6g_client[REG_CURRENT_MAX_AP_TYPE][REG_MAX_CLIENT_TYPE]; 1298 uint32_t max_bw_6g_client[REG_CURRENT_MAX_AP_TYPE][REG_MAX_CLIENT_TYPE]; 1299 uint32_t num_6g_reg_rules_ap[REG_CURRENT_MAX_AP_TYPE]; 1300 uint32_t num_6g_reg_rules_client[REG_CURRENT_MAX_AP_TYPE][REG_MAX_CLIENT_TYPE]; 1301 struct cur_reg_rule *reg_rules_6g_ap_ptr[REG_CURRENT_MAX_AP_TYPE]; 1302 struct cur_reg_rule *reg_rules_6g_client_ptr[REG_CURRENT_MAX_AP_TYPE][REG_MAX_CLIENT_TYPE]; 1303 #ifdef CONFIG_REG_CLIENT 1304 struct cur_fcc_rule *fcc_rules_ptr; 1305 uint32_t num_fcc_rules; 1306 #endif 1307 }; 1308 1309 #if defined(CONFIG_AFC_SUPPORT) && defined(CONFIG_BAND_6GHZ) 1310 1311 /** 1312 * enum reg_afc_event_type - indicates the type of AFC event from FW to host. 1313 * @REG_AFC_EVENT_POWER_INFO: 1314 * 1. For sending Power Info REG_AFC_EVENT_POWER_INFO event is used. 1315 * @REG_AFC_EVENT_TIMER_EXPIRY: 1316 * 2. For sending AFC expiry use REG_AFC_EVENT_TIMER_EXPIRY 1317 * 1318 * This type can be expanded in future as per requirements. 1319 */ 1320 enum reg_afc_event_type { 1321 REG_AFC_EVENT_POWER_INFO = 1, 1322 REG_AFC_EVENT_TIMER_EXPIRY = 2, 1323 }; 1324 1325 /** 1326 * enum reg_afc_expiry_event_subtype - indicates the AFC expiry subtype. 1327 * @REG_AFC_EXPIRY_EVENT_START: 1328 * 1. At boot up AFC expiry will contain AFC start. 1329 * @REG_AFC_EXPIRY_EVENT_RENEW: 1330 * 2. If AFC timer expires AFC_RENEW status code will be sent to host 1331 * with expiry event. 1332 * @REG_AFC_EXPIRY_EVENT_SWITCH_TO_LPI: 1333 * 3. If AFC server is not responding to FW in specified time, FW will 1334 * indicate host to switch to LPI. 1335 * @REG_AFC_EXPIRY_EVENT_STOP_TX: 1336 */ 1337 enum reg_afc_expiry_event_subtype { 1338 REG_AFC_EXPIRY_EVENT_START = 1, 1339 REG_AFC_EXPIRY_EVENT_RENEW = 2, 1340 REG_AFC_EXPIRY_EVENT_SWITCH_TO_LPI = 3, 1341 REG_AFC_EXPIRY_EVENT_STOP_TX = 4, 1342 }; 1343 1344 /** 1345 * enum reg_fw_afc_power_event_status_code 1346 * @REG_FW_AFC_POWER_EVENT_SUCCESS: 1347 * 0. AFC power event is success. 1348 * @REG_FW_AFC_POWER_EVENT_RESP_NOT_RECEIVED: 1349 * 1. If Host does not indicate AFC indication cmd within certain time 1350 * of AFC expiry, REG_FW_AFC_POWER_EVENT_RESP_NOT_RECEIVED will be used. 1351 * @REG_FW_AFC_POWER_EVENT_RESP_PARSING_FAILURE: 1352 * 2. If FW is not able to parse afc_info, parsing_failure will be 1353 * indicated using REG_FW_AFC_POWER_EVENT_RESP_NOT_RECEIVED. 1354 * @REG_FW_AFC_POWER_EVENT_FAILURE: 1355 * 3. If due to some local reason AFC event is failed, AFC event failure 1356 * is indicated using REG_FW_AFC_POWER_EVENT_FAILURE. 1357 * 1358 * Firmware AFC power event status codes 1359 */ 1360 enum reg_fw_afc_power_event_status_code { 1361 REG_FW_AFC_POWER_EVENT_SUCCESS = 0, 1362 REG_FW_AFC_POWER_EVENT_RESP_NOT_RECEIVED = 1, 1363 REG_FW_AFC_POWER_EVENT_RESP_PARSING_FAILURE = 2, 1364 REG_FW_AFC_POWER_EVENT_FAILURE = 3, 1365 }; 1366 1367 /** 1368 * enum reg_afc_serv_resp_code - AFC server response codes 1369 * @REG_AFC_SERV_RESP_GENERAL_FAILURE: 1370 * @REG_AFC_SERV_RESP_SUCCESS: 1371 * @REG_AFC_SERV_RESP_VERSION_NOT_SUPPORTED: 1372 * @REG_AFC_SERV_RESP_DEVICE_UNALLOWED: 1373 * @REG_AFC_SERV_RESP_MISSING_PARAM: 1374 * @REG_AFC_SERV_RESP_INVALID_VALUE: 1375 * @REG_AFC_SERV_RESP_UNEXPECTED_PARAM: 1376 * @REG_AFC_SERV_RESP_UNSUPPORTED_SPECTRUM: 1377 * 1378 * The following reg_afc_server_resp_code is mutually exclusive. 1379 * This response code will be indicated to AFC server. 1380 * These codes are defined in WIFI spec doc for AFC as follows 1381 * -1: General Failure 1382 * 0: Success 1383 * 100 - 199: General errors related to the protocol 1384 * 300 - 399: Error events specific to message exchange for the 1385 * Available Spectrum Inquiry 1386 */ 1387 enum reg_afc_serv_resp_code { 1388 REG_AFC_SERV_RESP_GENERAL_FAILURE = -1, 1389 REG_AFC_SERV_RESP_SUCCESS = 0, 1390 REG_AFC_SERV_RESP_VERSION_NOT_SUPPORTED = 100, 1391 REG_AFC_SERV_RESP_DEVICE_UNALLOWED = 101, 1392 REG_AFC_SERV_RESP_MISSING_PARAM = 102, 1393 REG_AFC_SERV_RESP_INVALID_VALUE = 103, 1394 REG_AFC_SERV_RESP_UNEXPECTED_PARAM = 106, 1395 REG_AFC_SERV_RESP_UNSUPPORTED_SPECTRUM = 300, 1396 }; 1397 1398 /** 1399 * struct afc_freq_obj 1400 * @low_freq: Lower edge frequency 1401 * @high_freq: Upper edge frequency 1402 * @max_psd: Max PSD in 0.01 dBm/MHz units 1403 */ 1404 struct afc_freq_obj { 1405 qdf_freq_t low_freq; 1406 qdf_freq_t high_freq; 1407 int16_t max_psd; 1408 }; 1409 1410 /** 1411 * struct chan_eirp_obj 1412 * @cfi: Channel frequency index 1413 * @eirp_power: Max EIRP power in 0.01 dBm units 1414 */ 1415 struct chan_eirp_obj { 1416 uint8_t cfi; 1417 int16_t eirp_power; 1418 }; 1419 1420 /** 1421 * struct afc_chan_obj 1422 * @global_opclass: Global Operating class 1423 * @num_chans: Number of channels 1424 * @chan_eirp_info: Pointer to afc channel EIRP object 1425 */ 1426 struct afc_chan_obj { 1427 uint8_t global_opclass; 1428 uint8_t num_chans; 1429 struct chan_eirp_obj *chan_eirp_info; 1430 }; 1431 1432 /** 1433 * struct reg_afc_expiry_event 1434 * @request_id: AFC request id generated by the firmware 1435 * @event_subtype: AFC expiry event subtype 1436 */ 1437 struct reg_afc_expiry_event { 1438 uint32_t request_id; 1439 enum reg_afc_expiry_event_subtype event_subtype; 1440 }; 1441 1442 /** 1443 * struct reg_fw_afc_power_event 1444 * @resp_id: AFC server response id 1445 * @fw_status_code: firmware status code 1446 * @serv_resp_code: AFC server response code 1447 * @afc_wfa_version: AFC version 1448 * @avail_exp_time_d: Expiry date of the AFC power info 1449 * @avail_exp_time_t: Time left for expiry of the AFC power info 1450 * @num_freq_objs: Number of freq objects 1451 * @num_chan_objs: Number of channel objects 1452 * @afc_freq_info: Pointer to AFC freq object 1453 * @afc_chan_info: Pointer to AFC channel object 1454 */ 1455 struct reg_fw_afc_power_event { 1456 uint32_t resp_id; 1457 enum reg_fw_afc_power_event_status_code fw_status_code; 1458 enum reg_afc_serv_resp_code serv_resp_code; 1459 uint32_t afc_wfa_version; 1460 uint32_t avail_exp_time_d; 1461 uint32_t avail_exp_time_t; 1462 uint8_t num_freq_objs; 1463 uint8_t num_chan_objs; 1464 struct afc_freq_obj *afc_freq_info; 1465 struct afc_chan_obj *afc_chan_info; 1466 }; 1467 1468 /** 1469 * struct afc_regulatory_info 1470 * @psoc: psoc ptr 1471 * @phy_id: phy id 1472 * @event_type: AFC event type 1473 * @expiry_info: pointer to information present in the AFC expiry event 1474 * @power_info: pointer to information present in the AFC power event 1475 */ 1476 struct afc_regulatory_info { 1477 struct wlan_objmgr_psoc *psoc; 1478 uint8_t phy_id; 1479 enum reg_afc_event_type event_type; 1480 union { 1481 struct reg_afc_expiry_event *expiry_info; 1482 struct reg_fw_afc_power_event *power_info; 1483 }; 1484 }; 1485 #endif 1486 1487 /** 1488 * struct reg_rule_info 1489 * @alpha2: alpha2 of reg rules 1490 * @dfs_region: dfs region 1491 * @num_of_reg_rules: number of reg rules 1492 * @reg_rules: regulatory rules array 1493 * @num_of_6g_ap_reg_rules: number of 6g AP reg rules 1494 * @reg_rules_6g_ap: reg rules for all 6g AP 1495 * @num_of_6g_client_reg_rules: number of 6g client reg rules 1496 * @reg_rules_6g_client: reg rules for all 6g clients 1497 */ 1498 struct reg_rule_info { 1499 uint8_t alpha2[REG_ALPHA2_LEN + 1]; 1500 enum dfs_reg dfs_region; 1501 uint8_t num_of_reg_rules; 1502 struct cur_reg_rule reg_rules[MAX_REG_RULES]; 1503 #ifdef CONFIG_BAND_6GHZ 1504 uint8_t num_of_6g_ap_reg_rules[REG_CURRENT_MAX_AP_TYPE]; 1505 struct cur_reg_rule reg_rules_6g_ap[REG_CURRENT_MAX_AP_TYPE][MAX_6G_REG_RULES]; 1506 uint8_t num_of_6g_client_reg_rules[REG_CURRENT_MAX_AP_TYPE]; 1507 struct cur_reg_rule reg_rules_6g_client[REG_CURRENT_MAX_AP_TYPE][MAX_6G_REG_RULES]; 1508 #endif 1509 }; 1510 1511 /** 1512 * enum reg_wifi_band 1513 * @REG_BAND_2G: 2G band 1514 * @REG_BAND_5G: 5G band 1515 * @REG_BAND_6G: 6G band 1516 * @REG_BAND_UNKNOWN: Unsupported band 1517 */ 1518 enum reg_wifi_band { 1519 REG_BAND_2G, 1520 REG_BAND_5G, 1521 REG_BAND_6G, 1522 REG_BAND_UNKNOWN 1523 }; 1524 1525 #ifdef DISABLE_UNII_SHARED_BANDS 1526 /** 1527 * enum reg_unii_band 1528 * @REG_UNII_BAND_1: Disable UNII-1 band channels 1529 * @REG_UNII_BAND_2A: Disable UNII-2A band channels 1530 */ 1531 enum reg_unii_band { 1532 REG_UNII_BAND_1 = 0x0, 1533 REG_UNII_BAND_2A = 0x1, 1534 }; 1535 #endif 1536 1537 #define REG_BAND_MASK_ALL (BIT(REG_BAND_2G) | BIT(REG_BAND_5G) \ 1538 | BIT(REG_BAND_6G)) 1539 1540 /* Avoid the use of band_info as it does not support 6GHz band. Use 1541 * reg_wifi_band, as it supports the 6GHz band 1542 */ 1543 /** 1544 * enum band_info 1545 * @BAND_ALL:all bands 1546 * @BAND_2G: 2G band 1547 * @BAND_5G: 5G band 1548 * @BAND_UNKNOWN: Unsupported band 1549 */ 1550 enum band_info { 1551 BAND_ALL, 1552 BAND_2G, 1553 BAND_5G, 1554 BAND_UNKNOWN 1555 }; 1556 1557 /** 1558 * enum restart_beaconing_on_ch_avoid_rule: control the beaconing entity to 1559 * move away from active LTE channels 1560 * @CH_AVOID_RULE_DO_NOT_RESTART: Do not move from active LTE 1561 * channels 1562 * @CH_AVOID_RULE_RESTART: Move from active LTE channels 1563 * @CH_AVOID_RULE_RESTART_24G_ONLY: move from 2.4G active LTE 1564 * channels only 1565 */ 1566 enum restart_beaconing_on_ch_avoid_rule { 1567 CH_AVOID_RULE_DO_NOT_RESTART, 1568 CH_AVOID_RULE_RESTART, 1569 CH_AVOID_RULE_RESTART_24G_ONLY, 1570 }; 1571 1572 /** 1573 * struct reg_config_vars 1574 * @enable_11d_support: enable 11d support 1575 * @scan_11d_interval: 11d scan interval in ms 1576 * @userspace_ctry_priority: user priority 1577 * @band_capability: band capability 1578 * @dfs_enabled: dfs enabled 1579 * @indoor_chan_enabled: indoor channel support 1580 * @force_ssc_disable_indoor_channel: Disable indoor channel on sap start 1581 * @restart_beaconing: control the beaconing entity to move 1582 * away from active LTE channels 1583 * @enable_srd_chan_in_master_mode: SRD channel support in master mode 1584 * @enable_11d_in_world_mode: enable 11d in world mode 1585 * @enable_5dot9_ghz_chan_in_master_mode: 5.9 GHz channel support in 1586 * master mode 1587 * @retain_nol_across_regdmn_update: Retain the NOL list across the regdomain. 1588 * @coex_unsafe_chan_nb_user_prefer: Honor coex unsafe chan cmd from firmware or 1589 * userspace 1590 * @coex_unsafe_chan_reg_disable: To disable reg channels for received coex 1591 * unsafe channels list 1592 * @enable_6ghz_sp_pwrmode_supp: Enable target 6 GHz Standard Power mode support 1593 * @afc_disable_timer_check: Disable target AFC timer check 1594 * @afc_disable_request_id_check: Disable target AFC request id check 1595 * @is_afc_reg_noaction: Whether no action to AFC power event 1596 * @sta_sap_scc_on_indoor_channel: Value of sap+sta scc on indoor support 1597 * @p2p_indoor_ch_support: Allow P2P GO in indoor channels 1598 */ 1599 struct reg_config_vars { 1600 uint32_t enable_11d_support; 1601 uint32_t scan_11d_interval; 1602 uint32_t userspace_ctry_priority; 1603 uint32_t band_capability; 1604 uint32_t dfs_enabled; 1605 uint32_t indoor_chan_enabled; 1606 uint32_t force_ssc_disable_indoor_channel; 1607 enum restart_beaconing_on_ch_avoid_rule restart_beaconing; 1608 uint8_t enable_srd_chan_in_master_mode; 1609 bool enable_11d_in_world_mode; 1610 bool enable_5dot9_ghz_chan_in_master_mode; 1611 bool retain_nol_across_regdmn_update; 1612 #ifdef FEATURE_WLAN_CH_AVOID_EXT 1613 bool coex_unsafe_chan_nb_user_prefer; 1614 bool coex_unsafe_chan_reg_disable; 1615 #endif 1616 #if defined(CONFIG_AFC_SUPPORT) && defined(CONFIG_BAND_6GHZ) 1617 bool enable_6ghz_sp_pwrmode_supp; 1618 bool afc_disable_timer_check; 1619 bool afc_disable_request_id_check; 1620 bool is_afc_reg_noaction; 1621 #endif 1622 bool sta_sap_scc_on_indoor_channel; 1623 bool p2p_indoor_ch_support; 1624 }; 1625 1626 /** 1627 * struct reg_freq_range 1628 * @low_freq: low frequency 1629 * @high_freq: high frequency 1630 */ 1631 struct reg_freq_range { 1632 uint32_t low_freq; 1633 uint32_t high_freq; 1634 }; 1635 1636 /** 1637 * enum direction 1638 * @NORTHBOUND: northbound 1639 * @SOUTHBOUND: southbound 1640 */ 1641 enum direction { 1642 NORTHBOUND, 1643 SOUTHBOUND, 1644 }; 1645 1646 /** 1647 * struct mas_chan_params 1648 * @dfs_region: dfs region 1649 * @phybitmap: phybitmap 1650 * @mas_chan_list: master chan list for 2GHz and 5GHz channels 1651 * @is_6g_channel_list_populated: indicates the channel lists are populated 1652 * @mas_chan_list_6g_ap: master chan list for 6GHz AP channels 1653 * @mas_chan_list_6g_client: master chan list for 6GHz client 1654 * @is_6g_afc_power_event_received: indicates if the AFC event is received. 1655 * @mas_chan_list_6g_afc: master chan list for 6GHz AFC 1656 * @default_country: default country 1657 * @current_country: current country 1658 * @def_region_domain: default reg domain 1659 * @def_country_code: default country code 1660 * @reg_dmn_pair: reg domain pair 1661 * @reg_6g_superid: 6G super domain ID 1662 * @ctry_code: country code 1663 * @reg_rules: regulatory rules 1664 * @ap_pwr_type: type of AP 1665 * @client_type: type of client 1666 * @rnr_tpe_usable: if RNR TPE octet is usable for country 1667 * @unspecified_ap_usable: if not set, AP usable for country 1668 * @reg_6g_thresh_priority_freq: All frequencies greater or equal will be given 1669 * priority during channel selection by upper layer 1670 * @max_bw_5g: Maximum 5g Bandwidth 1671 */ 1672 struct mas_chan_params { 1673 enum dfs_reg dfs_region; 1674 uint32_t phybitmap; 1675 struct regulatory_channel mas_chan_list[NUM_CHANNELS]; 1676 #ifdef CONFIG_BAND_6GHZ 1677 bool is_6g_channel_list_populated; 1678 struct regulatory_channel mas_chan_list_6g_ap[REG_CURRENT_MAX_AP_TYPE][NUM_6GHZ_CHANNELS]; 1679 struct regulatory_channel mas_chan_list_6g_client[REG_CURRENT_MAX_AP_TYPE][REG_MAX_CLIENT_TYPE][NUM_6GHZ_CHANNELS]; 1680 #ifdef CONFIG_AFC_SUPPORT 1681 bool is_6g_afc_power_event_received; 1682 struct regulatory_channel mas_chan_list_6g_afc[NUM_6GHZ_CHANNELS]; 1683 #endif 1684 #endif 1685 char default_country[REG_ALPHA2_LEN + 1]; 1686 char current_country[REG_ALPHA2_LEN + 1]; 1687 uint16_t def_region_domain; 1688 uint16_t def_country_code; 1689 uint32_t reg_dmn_pair; 1690 uint16_t reg_6g_superid; 1691 uint16_t ctry_code; 1692 struct reg_rule_info reg_rules; 1693 #ifdef CONFIG_BAND_6GHZ 1694 enum reg_6g_ap_type ap_pwr_type; 1695 enum reg_6g_client_type client_type; 1696 bool rnr_tpe_usable; 1697 bool unspecified_ap_usable; 1698 qdf_freq_t reg_6g_thresh_priority_freq; 1699 #endif 1700 uint16_t max_bw_5g; 1701 }; 1702 1703 /** 1704 * enum cc_regdmn_flag: Regdomain flags 1705 * @INVALID_CC: Invalid flag 1706 * @CC_IS_SET: Country code is set 1707 * @REGDMN_IS_SET: Regdomain ID is set 1708 * @ALPHA_IS_SET: Country ISO is set 1709 */ 1710 enum cc_regdmn_flag { 1711 INVALID_CC, 1712 CC_IS_SET, 1713 REGDMN_IS_SET, 1714 ALPHA_IS_SET, 1715 }; 1716 1717 /** 1718 * struct cc_regdmn_s: User country code or regdomain 1719 * @cc: Union of country code/regulatory domain 1720 * @cc.country_code: Country code 1721 * @cc.regdmn: Regulatory domain 1722 * @cc.regdmn.reg_2g_5g_pair_id: Regdomain pair ID (2Ghz + 5Ghz domain pair) 1723 * @cc.regdmn.sixg_superdmn_id: 6Ghz super domain id 1724 * @cc.alpha: Country ISO 1725 * @flags: Regdomain flags (see enum cc_regdmn_flag) 1726 */ 1727 struct cc_regdmn_s { 1728 union { 1729 uint16_t country_code; 1730 struct { 1731 uint16_t reg_2g_5g_pair_id; 1732 uint16_t sixg_superdmn_id; 1733 } regdmn; 1734 uint8_t alpha[REG_ALPHA2_LEN + 1]; 1735 } cc; 1736 uint8_t flags; 1737 }; 1738 1739 /** 1740 * struct cur_regdmn_info: Current regulatory info 1741 * @regdmn_pair_id: Current regdomain pair ID 1742 * @dmn_id_2g: 2GHz regdomain ID 1743 * @dmn_id_5g: 5GHz regdomain ID 1744 * @ctl_2g: 2GHz CTL value 1745 * @ctl_5g: 5GHzCTL value 1746 * @dfs_region: dfs region 1747 */ 1748 struct cur_regdmn_info { 1749 uint16_t regdmn_pair_id; 1750 uint16_t dmn_id_2g; 1751 uint16_t dmn_id_5g; 1752 uint8_t ctl_2g; 1753 uint8_t ctl_5g; 1754 uint8_t dfs_region; 1755 }; 1756 1757 /** 1758 * struct ch_avoid_freq_type 1759 * @start_freq: start freq 1760 * @end_freq: end freq 1761 * @txpower: txpower 1762 * @is_valid_txpower: Is @txpower valid 1763 */ 1764 struct ch_avoid_freq_type { 1765 qdf_freq_t start_freq; 1766 qdf_freq_t end_freq; 1767 int32_t txpower; 1768 bool is_valid_txpower; 1769 }; 1770 1771 /** 1772 * struct ch_avoid_ind_type 1773 * @ch_avoid_range_cnt: count 1774 * @avoid_freq_range: avoid freq range array 1775 * @restriction_mask: restriction mask to apply txpower 1776 */ 1777 struct ch_avoid_ind_type { 1778 uint32_t ch_avoid_range_cnt; 1779 struct ch_avoid_freq_type avoid_freq_range[CH_AVOID_MAX_RANGE]; 1780 uint32_t restriction_mask; 1781 }; 1782 1783 /** 1784 * struct unsafe_ch_list 1785 * @chan_cnt: no.of channels 1786 * @chan_freq_list: channel frequency list 1787 * @txpower: Tx power per channel 1788 * @is_valid_txpower: Is @txpower valid per channel 1789 */ 1790 struct unsafe_ch_list { 1791 uint16_t chan_cnt; 1792 uint16_t chan_freq_list[NUM_CHANNELS]; 1793 int32_t txpower[NUM_CHANNELS]; 1794 bool is_valid_txpower[NUM_CHANNELS]; 1795 }; 1796 1797 /** 1798 * struct avoid_freq_ind_data 1799 * @freq_list: frequency list 1800 * @chan_list: channel list 1801 */ 1802 struct avoid_freq_ind_data { 1803 struct ch_avoid_ind_type freq_list; 1804 struct unsafe_ch_list chan_list; 1805 }; 1806 1807 /** 1808 * struct reg_sched_payload 1809 * @psoc: psoc ptr 1810 * @pdev: pdev ptr 1811 * @ch_avoid_ind: if avoidance event indicated 1812 * @avoid_info: chan avoid info if @ch_avoid_ind is true 1813 */ 1814 struct reg_sched_payload { 1815 struct wlan_objmgr_psoc *psoc; 1816 struct wlan_objmgr_pdev *pdev; 1817 bool ch_avoid_ind; 1818 struct avoid_freq_ind_data avoid_info; 1819 }; 1820 1821 #define FIVEG_STARTING_FREQ 5000 1822 #define TWOG_STARTING_FREQ 2407 1823 #define TWOG_CHAN_14_IN_MHZ 2484 1824 #define TWOG_CHAN_1_IN_MHZ 2412 1825 #define TWOG_CHAN_5_IN_MHZ 2432 1826 #define TWOG_CHAN_6_IN_MHZ 2437 1827 #define TWOG_CHAN_9_IN_MHZ 2452 1828 #define TWOG_CHAN_13_IN_MHZ 2472 1829 #define FIVEG_CHAN_36_IN_MHZ 5180 1830 #define FIVEG_CHAN_177_IN_MHZ 5885 1831 #define SIXG_CHAN_2_IN_MHZ 5935 1832 #define SIXG_CHAN_1_IN_MHZ 5955 1833 #define SIXG_CHAN_233_IN_MHZ 7115 1834 1835 #define HT40_SEC_OFFSET 20 1836 1837 #define IEEE_2GHZ_CH1 1 1838 #define IEEE_2GHZ_CH14 14 1839 #define IEEE_5GHZ_CH36 36 1840 #define IEEE_6GHZ_CH1 1 1841 #define IEEE_6GHZ_CH2 2 1842 #define IEEE_CH_SEP 5 1843 1844 /** 1845 * struct reg_ctl_params - reg ctl and regd info 1846 * @regd: regdomain pair 1847 * @regd_2g: 2g sub domain code 1848 * @regd_5g: 5g sub domain code 1849 * @ctl_2g: 2g ctl info 1850 * @ctl_5g: 5g ctl info 1851 */ 1852 struct reg_ctl_params { 1853 uint32_t regd; 1854 uint16_t regd_2g; 1855 uint16_t regd_5g; 1856 uint8_t ctl_2g; 1857 uint8_t ctl_5g; 1858 }; 1859 1860 /** 1861 * enum reg_phymode - Regulatory phymode 1862 * @REG_PHYMODE_INVALID: Invalid phymode 1863 * @REG_PHYMODE_11B: 802.11b phymode 1864 * @REG_PHYMODE_11G: 802.11g phymode 1865 * @REG_PHYMODE_11A: 802.11a phymode 1866 * @REG_PHYMODE_11N: 802.11n phymode 1867 * @REG_PHYMODE_11AC: 802.11ac phymode 1868 * @REG_PHYMODE_11AX: 802.11ax phymode 1869 * @REG_PHYMODE_11BE: 802.11be phymode 1870 * @REG_PHYMODE_MAX: placeholder for future phymodes 1871 */ 1872 enum reg_phymode { 1873 REG_PHYMODE_INVALID, 1874 REG_PHYMODE_11B, 1875 REG_PHYMODE_11G, 1876 REG_PHYMODE_11A, 1877 REG_PHYMODE_11N, 1878 REG_PHYMODE_11AC, 1879 REG_PHYMODE_11AX, 1880 #ifdef WLAN_FEATURE_11BE 1881 REG_PHYMODE_11BE, 1882 #endif 1883 REG_PHYMODE_MAX, 1884 }; 1885 1886 /** 1887 * struct chan_power_info - TPE containing power info per channel chunk 1888 * @chan_cfreq: channel center freq (MHz) 1889 * @tx_power: transmit power (dBm) 1890 */ 1891 struct chan_power_info { 1892 qdf_freq_t chan_cfreq; 1893 int8_t tx_power; 1894 }; 1895 1896 /** 1897 * struct reg_tpc_power_info - regulatory TPC power info 1898 * @is_psd_power: is PSD power or not 1899 * @eirp_power: Maximum EIRP power (dBm), valid only if power is PSD 1900 * @power_type_6g: type of power (SP/LPI/VLP) 1901 * @num_pwr_levels: number of power levels 1902 * @reg_max: Array of maximum TX power (dBm) per PSD value 1903 * @ap_constraint_power: AP constraint power (dBm) 1904 * @frequency: Array of operating frequency 1905 * @tpe: TPE values processed from TPE IE 1906 * @chan_power_info: power info to send to FW 1907 * @is_power_constraint_abs: is power constraint absolute or not 1908 */ 1909 struct reg_tpc_power_info { 1910 bool is_psd_power; 1911 int8_t eirp_power; 1912 uint8_t power_type_6g; 1913 uint8_t num_pwr_levels; 1914 uint8_t reg_max[MAX_NUM_PWR_LEVEL]; 1915 uint8_t ap_constraint_power; 1916 qdf_freq_t frequency[MAX_NUM_PWR_LEVEL]; 1917 uint8_t tpe[MAX_NUM_PWR_LEVEL]; 1918 struct chan_power_info chan_power_info[MAX_NUM_PWR_LEVEL]; 1919 bool is_power_constraint_abs; 1920 }; 1921 1922 #ifdef FEATURE_WLAN_CH_AVOID_EXT 1923 typedef struct unsafe_ch_list avoid_ch_ext_list; 1924 /** 1925 * struct chan_5g_center_freq 1926 * @center_freq_20: center frequency of max 200Mhz 1927 * @center_freq_40: center frequency of max 40Mhz 1928 * @center_freq_80: center frequency of max 80Mhz 1929 * @center_freq_160: center frequency of max 160Mhz 1930 */ 1931 struct chan_5g_center_freq { 1932 qdf_freq_t center_freq_20; 1933 qdf_freq_t center_freq_40; 1934 qdf_freq_t center_freq_80; 1935 qdf_freq_t center_freq_160; 1936 }; 1937 1938 #define INVALID_CENTER_FREQ 0 1939 /*MAX 5g channel numbers, not include dsrc*/ 1940 #define MAX_5G_CHAN_NUM 28 1941 1942 #endif 1943 1944 /** 1945 * enum HOST_REGDMN_MODE: 1946 * @HOST_REGDMN_MODE_11A: 11a channels 1947 * @HOST_REGDMN_MODE_TURBO: 11a turbo-only channels 1948 * @HOST_REGDMN_MODE_11B: 11b channels 1949 * @HOST_REGDMN_MODE_PUREG: 11g channels (OFDM only) 1950 * @HOST_REGDMN_MODE_11G: historical 1951 * @HOST_REGDMN_MODE_108G: 11g+Turbo channels 1952 * @HOST_REGDMN_MODE_108A: 11a+Turbo channels 1953 * @HOST_REGDMN_MODE_11AC_VHT20_2G: 2GHz, VHT20 1954 * @HOST_REGDMN_MODE_XR: XR channels 1955 * @HOST_REGDMN_MODE_11A_HALF_RATE: 11a half rate channels 1956 * @HOST_REGDMN_MODE_11A_QUARTER_RATE: 11a quarter rate channels 1957 * @HOST_REGDMN_MODE_11NG_HT20: 11ng HT20 channels 1958 * @HOST_REGDMN_MODE_11NA_HT20: 11na HT20 channels 1959 * @HOST_REGDMN_MODE_11NG_HT40PLUS: 11ng HT40+ channels 1960 * @HOST_REGDMN_MODE_11NG_HT40MINUS: 11ng HT40- channels 1961 * @HOST_REGDMN_MODE_11NA_HT40PLUS: 11na HT40+ channels 1962 * @HOST_REGDMN_MODE_11NA_HT40MINUS: 11na HT40- channels 1963 * @HOST_REGDMN_MODE_11AC_VHT20: 5GHz, VHT20 1964 * @HOST_REGDMN_MODE_11AC_VHT40PLUS: 5GHz, VHT40+ channels 1965 * @HOST_REGDMN_MODE_11AC_VHT40MINUS: 5GHz, VHT40- channels 1966 * @HOST_REGDMN_MODE_11AC_VHT80: 5GHz, VHT80 channels 1967 * @HOST_REGDMN_MODE_11AC_VHT160: 5GHz, VHT160 channels 1968 * @HOST_REGDMN_MODE_11AC_VHT80_80: 5GHz, VHT80+80 channels 1969 * @HOST_REGDMN_MODE_11AXG_HE20: 11ax 2.4GHz, HE20 channels 1970 * @HOST_REGDMN_MODE_11AXA_HE20: 11ax 5GHz, HE20 channels 1971 * @HOST_REGDMN_MODE_11AXG_HE40PLUS: 11ax 2.4GHz, HE40+ channels 1972 * @HOST_REGDMN_MODE_11AXG_HE40MINUS: 11ax 2.4GHz, HE40- channels 1973 * @HOST_REGDMN_MODE_11AXA_HE40PLUS: 11ax 5GHz, HE40+ channels 1974 * @HOST_REGDMN_MODE_11AXA_HE40MINUS: 11ax 5GHz, HE40- channels 1975 * @HOST_REGDMN_MODE_11AXA_HE80: 11ax 5GHz, HE80 channels 1976 * @HOST_REGDMN_MODE_11AXA_HE160: 11ax 5GHz, HE160 channels 1977 * @HOST_REGDMN_MODE_11AXA_HE80_80: 11ax 5GHz, HE80+80 channels 1978 * @HOST_REGDMN_MODE_11BEG_EHT20: 11be 2.4GHz, EHT20 channels 1979 * @HOST_REGDMN_MODE_11BEA_EHT20: 11be 5GHz, EHT20 channels 1980 * @HOST_REGDMN_MODE_11BEG_EHT40PLUS: 11be 2.4GHz, EHT40+ channels 1981 * @HOST_REGDMN_MODE_11BEG_EHT40MINUS: 11be 2.4GHz, EHT40- channels 1982 * @HOST_REGDMN_MODE_11BEA_EHT40PLUS: 11be 5GHz, EHT40+ channels 1983 * @HOST_REGDMN_MODE_11BEA_EHT40MINUS: 11be 5GHz, EHT40- channels 1984 * @HOST_REGDMN_MODE_11BEA_EHT80: 11be 5GHz, EHT80 channels 1985 * @HOST_REGDMN_MODE_11BEA_EHT160: 11be 5GHz, EHT160 channels 1986 * @HOST_REGDMN_MODE_11BEA_EHT320: 11be 5GHz, EHT320 channels 1987 * @HOST_REGDMN_MODE_ALL: All modes selected 1988 */ 1989 enum HOST_REGDMN_MODE { 1990 HOST_REGDMN_MODE_11A = 0x00000001, 1991 HOST_REGDMN_MODE_TURBO = 0x00000002, 1992 HOST_REGDMN_MODE_11B = 0x00000004, 1993 HOST_REGDMN_MODE_PUREG = 0x00000008, 1994 HOST_REGDMN_MODE_11G = 0x00000008, 1995 HOST_REGDMN_MODE_108G = 0x00000020, 1996 HOST_REGDMN_MODE_108A = 0x00000040, 1997 HOST_REGDMN_MODE_11AC_VHT20_2G = 0x00000080, 1998 HOST_REGDMN_MODE_XR = 0x00000100, 1999 HOST_REGDMN_MODE_11A_HALF_RATE = 0x00000200, 2000 HOST_REGDMN_MODE_11A_QUARTER_RATE = 0x00000400, 2001 HOST_REGDMN_MODE_11NG_HT20 = 0x00000800, 2002 HOST_REGDMN_MODE_11NA_HT20 = 0x00001000, 2003 HOST_REGDMN_MODE_11NG_HT40PLUS = 0x00002000, 2004 HOST_REGDMN_MODE_11NG_HT40MINUS = 0x00004000, 2005 HOST_REGDMN_MODE_11NA_HT40PLUS = 0x00008000, 2006 HOST_REGDMN_MODE_11NA_HT40MINUS = 0x00010000, 2007 HOST_REGDMN_MODE_11AC_VHT20 = 0x00020000, 2008 HOST_REGDMN_MODE_11AC_VHT40PLUS = 0x00040000, 2009 HOST_REGDMN_MODE_11AC_VHT40MINUS = 0x00080000, 2010 HOST_REGDMN_MODE_11AC_VHT80 = 0x00100000, 2011 HOST_REGDMN_MODE_11AC_VHT160 = 0x00200000, 2012 HOST_REGDMN_MODE_11AC_VHT80_80 = 0x00400000, 2013 HOST_REGDMN_MODE_11AXG_HE20 = 0x00800000, 2014 HOST_REGDMN_MODE_11AXA_HE20 = 0x01000000, 2015 HOST_REGDMN_MODE_11AXG_HE40PLUS = 0x02000000, 2016 HOST_REGDMN_MODE_11AXG_HE40MINUS = 0x04000000, 2017 HOST_REGDMN_MODE_11AXA_HE40PLUS = 0x08000000, 2018 HOST_REGDMN_MODE_11AXA_HE40MINUS = 0x10000000, 2019 HOST_REGDMN_MODE_11AXA_HE80 = 0x20000000, 2020 HOST_REGDMN_MODE_11AXA_HE160 = 0x40000000, 2021 HOST_REGDMN_MODE_11AXA_HE80_80 = 0x80000000, 2022 #ifdef WLAN_FEATURE_11BE 2023 HOST_REGDMN_MODE_11BEG_EHT20 = 0x0000000100000000, 2024 HOST_REGDMN_MODE_11BEA_EHT20 = 0x0000000200000000, 2025 HOST_REGDMN_MODE_11BEG_EHT40PLUS = 0x0000000400000000, 2026 HOST_REGDMN_MODE_11BEG_EHT40MINUS = 0x0000000800000000, 2027 HOST_REGDMN_MODE_11BEA_EHT40PLUS = 0x0000001000000000, 2028 HOST_REGDMN_MODE_11BEA_EHT40MINUS = 0x0000002000000000, 2029 HOST_REGDMN_MODE_11BEA_EHT80 = 0x0000004000000000, 2030 HOST_REGDMN_MODE_11BEA_EHT160 = 0x0000008000000000, 2031 HOST_REGDMN_MODE_11BEA_EHT320 = 0x0000010000000000, 2032 #endif 2033 HOST_REGDMN_MODE_ALL = 0xffffffffffffffff 2034 }; 2035 2036 #define WIRELESS_11AX_MODES (HOST_REGDMN_MODE_11AXG_HE20 \ 2037 | HOST_REGDMN_MODE_11AXG_HE40PLUS \ 2038 | HOST_REGDMN_MODE_11AXG_HE40MINUS \ 2039 | HOST_REGDMN_MODE_11AXA_HE20 \ 2040 | HOST_REGDMN_MODE_11AXA_HE40PLUS \ 2041 | HOST_REGDMN_MODE_11AXA_HE40MINUS \ 2042 | HOST_REGDMN_MODE_11AXA_HE80 \ 2043 | HOST_REGDMN_MODE_11AXA_HE160 \ 2044 | HOST_REGDMN_MODE_11AXA_HE80_80) 2045 2046 #ifdef WLAN_FEATURE_11BE 2047 #define WIRELESS_11BE_MODES (HOST_REGDMN_MODE_11BEG_EHT20 \ 2048 | HOST_REGDMN_MODE_11BEA_EHT20 \ 2049 | HOST_REGDMN_MODE_11BEG_EHT40PLUS \ 2050 | HOST_REGDMN_MODE_11BEG_EHT40MINUS \ 2051 | HOST_REGDMN_MODE_11BEA_EHT40PLUS \ 2052 | HOST_REGDMN_MODE_11BEA_EHT40MINUS \ 2053 | HOST_REGDMN_MODE_11BEA_EHT80 \ 2054 | HOST_REGDMN_MODE_11BEA_EHT160 \ 2055 | HOST_REGDMN_MODE_11BEA_EHT320) 2056 #endif 2057 2058 #define WIRELESS_11AC_MODES (HOST_REGDMN_MODE_11AC_VHT20 \ 2059 | HOST_REGDMN_MODE_11AC_VHT40PLUS \ 2060 | HOST_REGDMN_MODE_11AC_VHT40MINUS \ 2061 | HOST_REGDMN_MODE_11AC_VHT80 \ 2062 | HOST_REGDMN_MODE_11AC_VHT160 \ 2063 | HOST_REGDMN_MODE_11AC_VHT80_80) 2064 2065 #define WIRELESS_11N_MODES (HOST_REGDMN_MODE_11NG_HT20 \ 2066 | HOST_REGDMN_MODE_11NA_HT20 \ 2067 | HOST_REGDMN_MODE_11NG_HT40PLUS \ 2068 | HOST_REGDMN_MODE_11NG_HT40MINUS \ 2069 | HOST_REGDMN_MODE_11NA_HT40PLUS \ 2070 | HOST_REGDMN_MODE_11NA_HT40MINUS) 2071 2072 #define WIRELESS_11G_MODES (HOST_REGDMN_MODE_PUREG \ 2073 | HOST_REGDMN_MODE_11G \ 2074 | HOST_REGDMN_MODE_108G) 2075 2076 #define WIRELESS_11B_MODES (HOST_REGDMN_MODE_11B) 2077 2078 #define WIRELESS_11A_MODES (HOST_REGDMN_MODE_11A \ 2079 | HOST_REGDMN_MODE_TURBO \ 2080 | HOST_REGDMN_MODE_108A \ 2081 | HOST_REGDMN_MODE_11A_HALF_RATE \ 2082 | HOST_REGDMN_MODE_11A_QUARTER_RATE) 2083 2084 #ifdef WLAN_FEATURE_11BE 2085 #define WIRELESS_20_MODES (HOST_REGDMN_MODE_11A \ 2086 | HOST_REGDMN_MODE_TURBO \ 2087 | HOST_REGDMN_MODE_11B \ 2088 | HOST_REGDMN_MODE_PUREG \ 2089 | HOST_REGDMN_MODE_11G \ 2090 | HOST_REGDMN_MODE_11AC_VHT20_2G \ 2091 | HOST_REGDMN_MODE_11NG_HT20 \ 2092 | HOST_REGDMN_MODE_11NA_HT20 \ 2093 | HOST_REGDMN_MODE_11AC_VHT20 \ 2094 | HOST_REGDMN_MODE_11AXG_HE20 \ 2095 | HOST_REGDMN_MODE_11AXA_HE20 \ 2096 | HOST_REGDMN_MODE_11BEA_EHT20 \ 2097 | HOST_REGDMN_MODE_11BEG_EHT20) 2098 #else 2099 #define WIRELESS_20_MODES (HOST_REGDMN_MODE_11A \ 2100 | HOST_REGDMN_MODE_TURBO \ 2101 | HOST_REGDMN_MODE_11B \ 2102 | HOST_REGDMN_MODE_PUREG \ 2103 | HOST_REGDMN_MODE_11G \ 2104 | HOST_REGDMN_MODE_11AC_VHT20_2G \ 2105 | HOST_REGDMN_MODE_11NG_HT20 \ 2106 | HOST_REGDMN_MODE_11NA_HT20 \ 2107 | HOST_REGDMN_MODE_11AC_VHT20 \ 2108 | HOST_REGDMN_MODE_11AXG_HE20 \ 2109 | HOST_REGDMN_MODE_11AXA_HE20) 2110 #endif 2111 2112 #define WIRELESS_10_MODES (HOST_REGDMN_MODE_11A_HALF_RATE) 2113 #define WIRELESS_5_MODES (HOST_REGDMN_MODE_11A_QUARTER_RATE) 2114 2115 #ifdef WLAN_FEATURE_11BE 2116 #define WIRELESS_40_MODES (HOST_REGDMN_MODE_11NG_HT40PLUS \ 2117 | HOST_REGDMN_MODE_11NG_HT40MINUS \ 2118 | HOST_REGDMN_MODE_11NA_HT40PLUS \ 2119 | HOST_REGDMN_MODE_11NA_HT40MINUS \ 2120 | HOST_REGDMN_MODE_11AC_VHT40PLUS \ 2121 | HOST_REGDMN_MODE_11AC_VHT40MINUS \ 2122 | HOST_REGDMN_MODE_11AXG_HE40PLUS \ 2123 | HOST_REGDMN_MODE_11AXG_HE40MINUS \ 2124 | HOST_REGDMN_MODE_11AXA_HE40PLUS \ 2125 | HOST_REGDMN_MODE_11AXA_HE40MINUS \ 2126 | HOST_REGDMN_MODE_11BEA_EHT40PLUS \ 2127 | HOST_REGDMN_MODE_11BEA_EHT40MINUS \ 2128 | HOST_REGDMN_MODE_11BEG_EHT40PLUS \ 2129 | HOST_REGDMN_MODE_11BEG_EHT40MINUS) 2130 #else 2131 #define WIRELESS_40_MODES (HOST_REGDMN_MODE_11NG_HT40PLUS \ 2132 | HOST_REGDMN_MODE_11NG_HT40MINUS \ 2133 | HOST_REGDMN_MODE_11NA_HT40PLUS \ 2134 | HOST_REGDMN_MODE_11NA_HT40MINUS \ 2135 | HOST_REGDMN_MODE_11AC_VHT40PLUS \ 2136 | HOST_REGDMN_MODE_11AC_VHT40MINUS \ 2137 | HOST_REGDMN_MODE_11AXG_HE40PLUS \ 2138 | HOST_REGDMN_MODE_11AXG_HE40MINUS \ 2139 | HOST_REGDMN_MODE_11AXA_HE40PLUS \ 2140 | HOST_REGDMN_MODE_11AXA_HE40MINUS) 2141 #endif 2142 2143 #ifdef WLAN_FEATURE_11BE 2144 #define WIRELESS_80_MODES (HOST_REGDMN_MODE_11AC_VHT80 \ 2145 | HOST_REGDMN_MODE_11AXA_HE80 \ 2146 | HOST_REGDMN_MODE_11BEA_EHT80) 2147 #else 2148 #define WIRELESS_80_MODES (HOST_REGDMN_MODE_11AC_VHT80 \ 2149 | HOST_REGDMN_MODE_11AXA_HE80) 2150 #endif 2151 2152 #ifdef WLAN_FEATURE_11BE 2153 #define WIRELESS_160_MODES (HOST_REGDMN_MODE_11AC_VHT160 \ 2154 | HOST_REGDMN_MODE_11AXA_HE160 \ 2155 | HOST_REGDMN_MODE_11BEA_EHT160) 2156 #else 2157 #define WIRELESS_160_MODES (HOST_REGDMN_MODE_11AC_VHT160 \ 2158 | HOST_REGDMN_MODE_11AXA_HE160) 2159 #endif 2160 2161 #define WIRELESS_80P80_MODES (HOST_REGDMN_MODE_11AC_VHT80_80 \ 2162 | HOST_REGDMN_MODE_11AXA_HE80_80) 2163 2164 #ifdef WLAN_FEATURE_11BE 2165 #define WIRELESS_320_MODES (HOST_REGDMN_MODE_11BEA_EHT320) 2166 #endif 2167 2168 #ifdef WLAN_FEATURE_11BE 2169 #define WIRELESS_6G_MODES_11BE (HOST_REGDMN_MODE_11BEA_EHT20 \ 2170 | HOST_REGDMN_MODE_11BEA_EHT40PLUS \ 2171 | HOST_REGDMN_MODE_11BEA_EHT40MINUS \ 2172 | HOST_REGDMN_MODE_11BEA_EHT80 \ 2173 | HOST_REGDMN_MODE_11BEA_EHT160 \ 2174 | HOST_REGDMN_MODE_11BEA_EHT320) 2175 #else 2176 #define WIRELESS_6G_MODES_11BE 0 2177 #endif /* WLAN_FEATURE_11BE*/ 2178 2179 #ifdef WLAN_FEATURE_11BE 2180 #define WIRELESS_6G_MODES (HOST_REGDMN_MODE_11AXA_HE20 \ 2181 | HOST_REGDMN_MODE_11AXA_HE40PLUS \ 2182 | HOST_REGDMN_MODE_11AXA_HE40MINUS \ 2183 | HOST_REGDMN_MODE_11AXA_HE80 \ 2184 | HOST_REGDMN_MODE_11AXA_HE160 \ 2185 | HOST_REGDMN_MODE_11AXA_HE80_80 \ 2186 | HOST_REGDMN_MODE_11BEA_EHT20 \ 2187 | HOST_REGDMN_MODE_11BEA_EHT40PLUS \ 2188 | HOST_REGDMN_MODE_11BEA_EHT40MINUS \ 2189 | HOST_REGDMN_MODE_11BEA_EHT80 \ 2190 | HOST_REGDMN_MODE_11BEA_EHT160 \ 2191 | HOST_REGDMN_MODE_11BEA_EHT320) 2192 #else 2193 #define WIRELESS_6G_MODES (HOST_REGDMN_MODE_11AXA_HE20 \ 2194 | HOST_REGDMN_MODE_11AXA_HE40PLUS \ 2195 | HOST_REGDMN_MODE_11AXA_HE40MINUS \ 2196 | HOST_REGDMN_MODE_11AXA_HE80 \ 2197 | HOST_REGDMN_MODE_11AXA_HE160 \ 2198 | HOST_REGDMN_MODE_11AXA_HE80_80) 2199 #endif 2200 2201 #ifdef WLAN_FEATURE_11BE 2202 #define WIRELESS_5G_MODES_11BE (HOST_REGDMN_MODE_11BEA_EHT20 \ 2203 | HOST_REGDMN_MODE_11BEA_EHT40PLUS \ 2204 | HOST_REGDMN_MODE_11BEA_EHT40MINUS \ 2205 | HOST_REGDMN_MODE_11BEA_EHT80 \ 2206 | HOST_REGDMN_MODE_11BEA_EHT160 \ 2207 | HOST_REGDMN_MODE_11BEA_EHT320) 2208 #else 2209 #define WIRELESS_5G_MODES_11BE 0 2210 #endif /* WLAN_FEATURE_11BE*/ 2211 2212 #ifdef WLAN_FEATURE_11BE 2213 #define WIRELESS_5G_MODES (HOST_REGDMN_MODE_11BEA_EHT20 \ 2214 | HOST_REGDMN_MODE_11BEA_EHT40PLUS \ 2215 | HOST_REGDMN_MODE_11BEA_EHT40MINUS \ 2216 | HOST_REGDMN_MODE_11BEA_EHT80 \ 2217 | HOST_REGDMN_MODE_11BEA_EHT160 \ 2218 | HOST_REGDMN_MODE_11BEA_EHT320 \ 2219 | HOST_REGDMN_MODE_11AXA_HE20 \ 2220 | HOST_REGDMN_MODE_11AXA_HE40PLUS \ 2221 | HOST_REGDMN_MODE_11AXA_HE40MINUS \ 2222 | HOST_REGDMN_MODE_11AXA_HE80 \ 2223 | HOST_REGDMN_MODE_11AXA_HE160 \ 2224 | HOST_REGDMN_MODE_11AXA_HE80_80 \ 2225 | HOST_REGDMN_MODE_11AC_VHT20 \ 2226 | HOST_REGDMN_MODE_11AC_VHT40PLUS \ 2227 | HOST_REGDMN_MODE_11AC_VHT40MINUS \ 2228 | HOST_REGDMN_MODE_11AC_VHT80 \ 2229 | HOST_REGDMN_MODE_11AC_VHT160 \ 2230 | HOST_REGDMN_MODE_11AC_VHT80_80 \ 2231 | HOST_REGDMN_MODE_11NA_HT20 \ 2232 | HOST_REGDMN_MODE_11NA_HT40PLUS \ 2233 | HOST_REGDMN_MODE_11NA_HT40MINUS \ 2234 | HOST_REGDMN_MODE_11A \ 2235 | HOST_REGDMN_MODE_TURBO \ 2236 | HOST_REGDMN_MODE_108A \ 2237 | HOST_REGDMN_MODE_11A_HALF_RATE \ 2238 | HOST_REGDMN_MODE_11A_QUARTER_RATE) 2239 #else 2240 #define WIRELESS_5G_MODES (HOST_REGDMN_MODE_11AXA_HE20 \ 2241 | HOST_REGDMN_MODE_11AXA_HE40PLUS \ 2242 | HOST_REGDMN_MODE_11AXA_HE40MINUS \ 2243 | HOST_REGDMN_MODE_11AXA_HE80 \ 2244 | HOST_REGDMN_MODE_11AXA_HE160 \ 2245 | HOST_REGDMN_MODE_11AXA_HE80_80 \ 2246 | HOST_REGDMN_MODE_11AC_VHT20 \ 2247 | HOST_REGDMN_MODE_11AC_VHT40PLUS \ 2248 | HOST_REGDMN_MODE_11AC_VHT40MINUS \ 2249 | HOST_REGDMN_MODE_11AC_VHT80 \ 2250 | HOST_REGDMN_MODE_11AC_VHT160 \ 2251 | HOST_REGDMN_MODE_11AC_VHT80_80 \ 2252 | HOST_REGDMN_MODE_11NA_HT20 \ 2253 | HOST_REGDMN_MODE_11NA_HT40PLUS \ 2254 | HOST_REGDMN_MODE_11NA_HT40MINUS \ 2255 | HOST_REGDMN_MODE_11A \ 2256 | HOST_REGDMN_MODE_TURBO \ 2257 | HOST_REGDMN_MODE_108A \ 2258 | HOST_REGDMN_MODE_11A_HALF_RATE \ 2259 | HOST_REGDMN_MODE_11A_QUARTER_RATE) 2260 #endif 2261 2262 #define WIRELESS_49G_MODES (HOST_REGDMN_MODE_11A \ 2263 | HOST_REGDMN_MODE_11A_HALF_RATE \ 2264 | HOST_REGDMN_MODE_11A_QUARTER_RATE) 2265 #ifdef WLAN_FEATURE_11BE 2266 #define WIRELESS_2G_MODES_11BE (HOST_REGDMN_MODE_11BEG_EHT20 \ 2267 | HOST_REGDMN_MODE_11BEG_EHT40PLUS \ 2268 | HOST_REGDMN_MODE_11BEG_EHT40MINUS) 2269 #else 2270 #define WIRELESS_2G_MODES_11BE 0 2271 #endif /* WLAN_FEATURE_11BE*/ 2272 2273 #ifdef WLAN_FEATURE_11BE 2274 #define WIRELESS_2G_MODES (HOST_REGDMN_MODE_11BEG_EHT20 \ 2275 | HOST_REGDMN_MODE_11BEG_EHT40PLUS \ 2276 | HOST_REGDMN_MODE_11BEG_EHT40MINUS \ 2277 | HOST_REGDMN_MODE_11AXG_HE20 \ 2278 | HOST_REGDMN_MODE_11AXG_HE40PLUS \ 2279 | HOST_REGDMN_MODE_11AXG_HE40MINUS \ 2280 | HOST_REGDMN_MODE_11NG_HT20 \ 2281 | HOST_REGDMN_MODE_11NG_HT40PLUS \ 2282 | HOST_REGDMN_MODE_11NG_HT40MINUS \ 2283 | HOST_REGDMN_MODE_PUREG \ 2284 | HOST_REGDMN_MODE_11G \ 2285 | HOST_REGDMN_MODE_108G \ 2286 | HOST_REGDMN_MODE_11B) 2287 #else 2288 #define WIRELESS_2G_MODES (HOST_REGDMN_MODE_11AXG_HE20 \ 2289 | HOST_REGDMN_MODE_11AXG_HE40PLUS \ 2290 | HOST_REGDMN_MODE_11AXG_HE40MINUS \ 2291 | HOST_REGDMN_MODE_11NG_HT20 \ 2292 | HOST_REGDMN_MODE_11NG_HT40PLUS \ 2293 | HOST_REGDMN_MODE_11NG_HT40MINUS \ 2294 | HOST_REGDMN_MODE_PUREG \ 2295 | HOST_REGDMN_MODE_11G \ 2296 | HOST_REGDMN_MODE_108G \ 2297 | HOST_REGDMN_MODE_11B) 2298 #endif 2299 2300 #ifdef CONFIG_AFC_SUPPORT 2301 /** 2302 * enum reg_afc_cmd_type - Type of AFC command sent to FW 2303 * @REG_AFC_CMD_SERV_RESP_READY: Server response is ready 2304 * @REG_AFC_CMD_RESET_AFC: Ask the target to send an AFC expiry event 2305 * @REG_AFC_CMD_CLEAR_AFC_PAYLOAD: Ask the target to clear AFC Payload. 2306 * The target in response sends REG_AFC_EXPIRY_EVENT_STOP_TX to host. 2307 */ 2308 enum reg_afc_cmd_type { 2309 REG_AFC_CMD_SERV_RESP_READY = 1, 2310 REG_AFC_CMD_RESET_AFC = 2, 2311 REG_AFC_CMD_CLEAR_AFC_PAYLOAD = 3, 2312 }; 2313 2314 /** 2315 * enum reg_afc_serv_resp_format - Indicate the format in which afc_serv_format 2316 * is written in FW memory 2317 * @REG_AFC_SERV_RESP_FORMAT_JSON: Server response in JSON format 2318 * @REG_AFC_SERV_RESP_FORMAT_BINARY: Server response in BINARY format 2319 */ 2320 enum reg_afc_serv_resp_format { 2321 REG_AFC_SERV_RESP_FORMAT_JSON = 0, 2322 REG_AFC_SERV_RESP_FORMAT_BINARY = 1, 2323 }; 2324 2325 /** 2326 * struct reg_afc_resp_rx_ind_info - regulatory AFC indication info 2327 * @cmd_type: Type of AFC command send to FW 2328 * @serv_resp_format: AFC server response format 2329 */ 2330 struct reg_afc_resp_rx_ind_info { 2331 enum reg_afc_cmd_type cmd_type; 2332 enum reg_afc_serv_resp_format serv_resp_format; 2333 }; 2334 2335 /** 2336 * typedef afc_req_rx_evt_handler() - Function prototype of AFC request 2337 * received event handler 2338 * @pdev: Pointer to pdev 2339 * @afc_req: Pointer to AFC request 2340 * @arg: Pointer to void (opaque) argument object 2341 * 2342 * Return: void 2343 */ 2344 typedef void (*afc_req_rx_evt_handler)(struct wlan_objmgr_pdev *pdev, 2345 struct wlan_afc_host_request *afc_req, 2346 void *arg); 2347 2348 /** 2349 * typedef afc_power_tx_evt_handler() - Function prototype of AFC power event 2350 * sent handler 2351 * @pdev: Pointer to pdev 2352 * @power_info: Pointer to AFC power event data 2353 * @arg: Pointer to void (opaque) argument object 2354 * 2355 * Return: void 2356 */ 2357 typedef void 2358 (*afc_power_tx_evt_handler)(struct wlan_objmgr_pdev *pdev, 2359 struct reg_fw_afc_power_event *power_info, 2360 void *arg); 2361 2362 /** 2363 * typedef afc_payload_reset_tx_evt_handler() - Function prototype of AFC 2364 * payload reset event sent handler 2365 * @pdev: Pointer to pdev 2366 * @arg: Pointer to void (opaque) argument object 2367 * 2368 * Return: void 2369 */ 2370 typedef void 2371 (*afc_payload_reset_tx_evt_handler)(struct wlan_objmgr_pdev *pdev, 2372 void *arg); 2373 #endif 2374 2375 /** 2376 * reg_is_chan_enum_invalid() - Checks if the channel enum is invalid or not. 2377 * @chan_enum: Input channel enum. 2378 * 2379 * Return: true if channel enum is invalid else false. 2380 */ reg_is_chan_enum_invalid(enum channel_enum chan_enum)2381 static inline bool reg_is_chan_enum_invalid(enum channel_enum chan_enum) 2382 { 2383 return chan_enum >= INVALID_CHANNEL; 2384 } 2385 2386 /** 2387 * struct r2p_table_update_status_obj 2388 * @pdev_id: pdev id from target 2389 * @status: rate2power update status 2390 */ 2391 struct r2p_table_update_status_obj { 2392 uint32_t pdev_id; 2393 uint32_t status; 2394 }; 2395 #endif 2396