regd.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412
  1. /*
  2. * Copyright (c) 2008 Atheros Communications Inc.
  3. *
  4. * Permission to use, copy, modify, and/or distribute this software for any
  5. * purpose with or without fee is hereby granted, provided that the above
  6. * copyright notice and this permission notice appear in all copies.
  7. *
  8. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  9. * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  10. * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  11. * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  12. * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  13. * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  14. * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  15. */
  16. #ifndef REGD_H
  17. #define REGD_H
  18. #include "ath9k.h"
  19. #define BMLEN 2
  20. #define BMZERO {(u64) 0, (u64) 0}
  21. #define BM(_fa, _fb, _fc, _fd, _fe, _ff, _fg, _fh, _fi, _fj, _fk, _fl) \
  22. {((((_fa >= 0) && (_fa < 64)) ? \
  23. (((u64) 1) << _fa) : (u64) 0) | \
  24. (((_fb >= 0) && (_fb < 64)) ? \
  25. (((u64) 1) << _fb) : (u64) 0) | \
  26. (((_fc >= 0) && (_fc < 64)) ? \
  27. (((u64) 1) << _fc) : (u64) 0) | \
  28. (((_fd >= 0) && (_fd < 64)) ? \
  29. (((u64) 1) << _fd) : (u64) 0) | \
  30. (((_fe >= 0) && (_fe < 64)) ? \
  31. (((u64) 1) << _fe) : (u64) 0) | \
  32. (((_ff >= 0) && (_ff < 64)) ? \
  33. (((u64) 1) << _ff) : (u64) 0) | \
  34. (((_fg >= 0) && (_fg < 64)) ? \
  35. (((u64) 1) << _fg) : (u64) 0) | \
  36. (((_fh >= 0) && (_fh < 64)) ? \
  37. (((u64) 1) << _fh) : (u64) 0) | \
  38. (((_fi >= 0) && (_fi < 64)) ? \
  39. (((u64) 1) << _fi) : (u64) 0) | \
  40. (((_fj >= 0) && (_fj < 64)) ? \
  41. (((u64) 1) << _fj) : (u64) 0) | \
  42. (((_fk >= 0) && (_fk < 64)) ? \
  43. (((u64) 1) << _fk) : (u64) 0) | \
  44. (((_fl >= 0) && (_fl < 64)) ? \
  45. (((u64) 1) << _fl) : (u64) 0) | \
  46. ((((_fa > 63) && (_fa < 128)) ? \
  47. (((u64) 1) << (_fa - 64)) : (u64) 0) | \
  48. (((_fb > 63) && (_fb < 128)) ? \
  49. (((u64) 1) << (_fb - 64)) : (u64) 0) | \
  50. (((_fc > 63) && (_fc < 128)) ? \
  51. (((u64) 1) << (_fc - 64)) : (u64) 0) | \
  52. (((_fd > 63) && (_fd < 128)) ? \
  53. (((u64) 1) << (_fd - 64)) : (u64) 0) | \
  54. (((_fe > 63) && (_fe < 128)) ? \
  55. (((u64) 1) << (_fe - 64)) : (u64) 0) | \
  56. (((_ff > 63) && (_ff < 128)) ? \
  57. (((u64) 1) << (_ff - 64)) : (u64) 0) | \
  58. (((_fg > 63) && (_fg < 128)) ? \
  59. (((u64) 1) << (_fg - 64)) : (u64) 0) | \
  60. (((_fh > 63) && (_fh < 128)) ? \
  61. (((u64) 1) << (_fh - 64)) : (u64) 0) | \
  62. (((_fi > 63) && (_fi < 128)) ? \
  63. (((u64) 1) << (_fi - 64)) : (u64) 0) | \
  64. (((_fj > 63) && (_fj < 128)) ? \
  65. (((u64) 1) << (_fj - 64)) : (u64) 0) | \
  66. (((_fk > 63) && (_fk < 128)) ? \
  67. (((u64) 1) << (_fk - 64)) : (u64) 0) | \
  68. (((_fl > 63) && (_fl < 128)) ? \
  69. (((u64) 1) << (_fl - 64)) : (u64) 0)))}
  70. #define DEF_REGDMN FCC1_FCCA
  71. #define DEF_DMN_5 FCC1
  72. #define DEF_DMN_2 FCCA
  73. #define COUNTRY_ERD_FLAG 0x8000
  74. #define WORLDWIDE_ROAMING_FLAG 0x4000
  75. #define SUPER_DOMAIN_MASK 0x0fff
  76. #define COUNTRY_CODE_MASK 0x3fff
  77. #define CF_INTERFERENCE (CHANNEL_CW_INT | CHANNEL_RADAR_INT)
  78. #define CHANNEL_14 (2484)
  79. #define IS_11G_CH14(_ch,_cf) \
  80. (((_ch) == CHANNEL_14) && ((_cf) == CHANNEL_G))
  81. #define NO_PSCAN 0x0ULL
  82. #define PSCAN_FCC 0x0000000000000001ULL
  83. #define PSCAN_FCC_T 0x0000000000000002ULL
  84. #define PSCAN_ETSI 0x0000000000000004ULL
  85. #define PSCAN_MKK1 0x0000000000000008ULL
  86. #define PSCAN_MKK2 0x0000000000000010ULL
  87. #define PSCAN_MKKA 0x0000000000000020ULL
  88. #define PSCAN_MKKA_G 0x0000000000000040ULL
  89. #define PSCAN_ETSIA 0x0000000000000080ULL
  90. #define PSCAN_ETSIB 0x0000000000000100ULL
  91. #define PSCAN_ETSIC 0x0000000000000200ULL
  92. #define PSCAN_WWR 0x0000000000000400ULL
  93. #define PSCAN_MKKA1 0x0000000000000800ULL
  94. #define PSCAN_MKKA1_G 0x0000000000001000ULL
  95. #define PSCAN_MKKA2 0x0000000000002000ULL
  96. #define PSCAN_MKKA2_G 0x0000000000004000ULL
  97. #define PSCAN_MKK3 0x0000000000008000ULL
  98. #define PSCAN_DEFER 0x7FFFFFFFFFFFFFFFULL
  99. #define IS_ECM_CHAN 0x8000000000000000ULL
  100. #define isWwrSKU(_ah) \
  101. (((ath9k_regd_get_eepromRD((_ah)) & WORLD_SKU_MASK) == \
  102. WORLD_SKU_PREFIX) || \
  103. (ath9k_regd_get_eepromRD(_ah) == WORLD))
  104. #define isWwrSKU_NoMidband(_ah) \
  105. ((ath9k_regd_get_eepromRD((_ah)) == WOR3_WORLD) || \
  106. (ath9k_regd_get_eepromRD(_ah) == WOR4_WORLD) || \
  107. (ath9k_regd_get_eepromRD(_ah) == WOR5_ETSIC))
  108. #define isUNII1OddChan(ch) \
  109. ((ch == 5170) || (ch == 5190) || (ch == 5210) || (ch == 5230))
  110. #define IS_HT40_MODE(_mode) \
  111. (((_mode == ATH9K_MODE_11NA_HT40PLUS || \
  112. _mode == ATH9K_MODE_11NG_HT40PLUS || \
  113. _mode == ATH9K_MODE_11NA_HT40MINUS || \
  114. _mode == ATH9K_MODE_11NG_HT40MINUS) ? true : false))
  115. #define CHAN_FLAGS (CHANNEL_ALL|CHANNEL_HALF|CHANNEL_QUARTER)
  116. #define swap_array(_a, _b, _size) { \
  117. u8 *s = _b; \
  118. int i = _size; \
  119. do { \
  120. u8 tmp = *_a; \
  121. *_a++ = *s; \
  122. *s++ = tmp; \
  123. } while (--i); \
  124. _a -= _size; \
  125. }
  126. #define HALF_MAXCHANBW 10
  127. #define MULTI_DOMAIN_MASK 0xFF00
  128. #define WORLD_SKU_MASK 0x00F0
  129. #define WORLD_SKU_PREFIX 0x0060
  130. #define CHANNEL_HALF_BW 10
  131. #define CHANNEL_QUARTER_BW 5
  132. typedef int ath_hal_cmp_t(const void *, const void *);
  133. struct reg_dmn_pair_mapping {
  134. u16 regDmnEnum;
  135. u16 regDmn5GHz;
  136. u16 regDmn2GHz;
  137. u32 flags5GHz;
  138. u32 flags2GHz;
  139. u64 pscanMask;
  140. u16 singleCC;
  141. };
  142. struct ccmap {
  143. char isoName[3];
  144. u16 countryCode;
  145. };
  146. struct country_code_to_enum_rd {
  147. u16 countryCode;
  148. u16 regDmnEnum;
  149. const char *isoName;
  150. const char *name;
  151. bool allow11g;
  152. bool allow11aTurbo;
  153. bool allow11gTurbo;
  154. bool allow11ng20;
  155. bool allow11ng40;
  156. bool allow11na20;
  157. bool allow11na40;
  158. u16 outdoorChanStart;
  159. };
  160. struct RegDmnFreqBand {
  161. u16 lowChannel;
  162. u16 highChannel;
  163. u8 powerDfs;
  164. u8 antennaMax;
  165. u8 channelBW;
  166. u8 channelSep;
  167. u64 useDfs;
  168. u64 usePassScan;
  169. u8 regClassId;
  170. };
  171. struct regDomain {
  172. u16 regDmnEnum;
  173. u8 conformanceTestLimit;
  174. u64 dfsMask;
  175. u64 pscan;
  176. u32 flags;
  177. u64 chan11a[BMLEN];
  178. u64 chan11a_turbo[BMLEN];
  179. u64 chan11a_dyn_turbo[BMLEN];
  180. u64 chan11b[BMLEN];
  181. u64 chan11g[BMLEN];
  182. u64 chan11g_turbo[BMLEN];
  183. };
  184. struct cmode {
  185. u32 mode;
  186. u32 flags;
  187. };
  188. #define YES true
  189. #define NO false
  190. struct japan_bandcheck {
  191. u16 freqbandbit;
  192. u32 eepromflagtocheck;
  193. };
  194. struct common_mode_power {
  195. u16 lchan;
  196. u16 hchan;
  197. u8 pwrlvl;
  198. };
  199. enum CountryCode {
  200. CTRY_ALBANIA = 8,
  201. CTRY_ALGERIA = 12,
  202. CTRY_ARGENTINA = 32,
  203. CTRY_ARMENIA = 51,
  204. CTRY_AUSTRALIA = 36,
  205. CTRY_AUSTRIA = 40,
  206. CTRY_AZERBAIJAN = 31,
  207. CTRY_BAHRAIN = 48,
  208. CTRY_BELARUS = 112,
  209. CTRY_BELGIUM = 56,
  210. CTRY_BELIZE = 84,
  211. CTRY_BOLIVIA = 68,
  212. CTRY_BOSNIA_HERZ = 70,
  213. CTRY_BRAZIL = 76,
  214. CTRY_BRUNEI_DARUSSALAM = 96,
  215. CTRY_BULGARIA = 100,
  216. CTRY_CANADA = 124,
  217. CTRY_CHILE = 152,
  218. CTRY_CHINA = 156,
  219. CTRY_COLOMBIA = 170,
  220. CTRY_COSTA_RICA = 188,
  221. CTRY_CROATIA = 191,
  222. CTRY_CYPRUS = 196,
  223. CTRY_CZECH = 203,
  224. CTRY_DENMARK = 208,
  225. CTRY_DOMINICAN_REPUBLIC = 214,
  226. CTRY_ECUADOR = 218,
  227. CTRY_EGYPT = 818,
  228. CTRY_EL_SALVADOR = 222,
  229. CTRY_ESTONIA = 233,
  230. CTRY_FAEROE_ISLANDS = 234,
  231. CTRY_FINLAND = 246,
  232. CTRY_FRANCE = 250,
  233. CTRY_GEORGIA = 268,
  234. CTRY_GERMANY = 276,
  235. CTRY_GREECE = 300,
  236. CTRY_GUATEMALA = 320,
  237. CTRY_HONDURAS = 340,
  238. CTRY_HONG_KONG = 344,
  239. CTRY_HUNGARY = 348,
  240. CTRY_ICELAND = 352,
  241. CTRY_INDIA = 356,
  242. CTRY_INDONESIA = 360,
  243. CTRY_IRAN = 364,
  244. CTRY_IRAQ = 368,
  245. CTRY_IRELAND = 372,
  246. CTRY_ISRAEL = 376,
  247. CTRY_ITALY = 380,
  248. CTRY_JAMAICA = 388,
  249. CTRY_JAPAN = 392,
  250. CTRY_JORDAN = 400,
  251. CTRY_KAZAKHSTAN = 398,
  252. CTRY_KENYA = 404,
  253. CTRY_KOREA_NORTH = 408,
  254. CTRY_KOREA_ROC = 410,
  255. CTRY_KOREA_ROC2 = 411,
  256. CTRY_KOREA_ROC3 = 412,
  257. CTRY_KUWAIT = 414,
  258. CTRY_LATVIA = 428,
  259. CTRY_LEBANON = 422,
  260. CTRY_LIBYA = 434,
  261. CTRY_LIECHTENSTEIN = 438,
  262. CTRY_LITHUANIA = 440,
  263. CTRY_LUXEMBOURG = 442,
  264. CTRY_MACAU = 446,
  265. CTRY_MACEDONIA = 807,
  266. CTRY_MALAYSIA = 458,
  267. CTRY_MALTA = 470,
  268. CTRY_MEXICO = 484,
  269. CTRY_MONACO = 492,
  270. CTRY_MOROCCO = 504,
  271. CTRY_NEPAL = 524,
  272. CTRY_NETHERLANDS = 528,
  273. CTRY_NETHERLANDS_ANTILLES = 530,
  274. CTRY_NEW_ZEALAND = 554,
  275. CTRY_NICARAGUA = 558,
  276. CTRY_NORWAY = 578,
  277. CTRY_OMAN = 512,
  278. CTRY_PAKISTAN = 586,
  279. CTRY_PANAMA = 591,
  280. CTRY_PAPUA_NEW_GUINEA = 598,
  281. CTRY_PARAGUAY = 600,
  282. CTRY_PERU = 604,
  283. CTRY_PHILIPPINES = 608,
  284. CTRY_POLAND = 616,
  285. CTRY_PORTUGAL = 620,
  286. CTRY_PUERTO_RICO = 630,
  287. CTRY_QATAR = 634,
  288. CTRY_ROMANIA = 642,
  289. CTRY_RUSSIA = 643,
  290. CTRY_SAUDI_ARABIA = 682,
  291. CTRY_SERBIA_MONTENEGRO = 891,
  292. CTRY_SINGAPORE = 702,
  293. CTRY_SLOVAKIA = 703,
  294. CTRY_SLOVENIA = 705,
  295. CTRY_SOUTH_AFRICA = 710,
  296. CTRY_SPAIN = 724,
  297. CTRY_SRI_LANKA = 144,
  298. CTRY_SWEDEN = 752,
  299. CTRY_SWITZERLAND = 756,
  300. CTRY_SYRIA = 760,
  301. CTRY_TAIWAN = 158,
  302. CTRY_THAILAND = 764,
  303. CTRY_TRINIDAD_Y_TOBAGO = 780,
  304. CTRY_TUNISIA = 788,
  305. CTRY_TURKEY = 792,
  306. CTRY_UAE = 784,
  307. CTRY_UKRAINE = 804,
  308. CTRY_UNITED_KINGDOM = 826,
  309. CTRY_UNITED_STATES = 840,
  310. CTRY_UNITED_STATES_FCC49 = 842,
  311. CTRY_URUGUAY = 858,
  312. CTRY_UZBEKISTAN = 860,
  313. CTRY_VENEZUELA = 862,
  314. CTRY_VIET_NAM = 704,
  315. CTRY_YEMEN = 887,
  316. CTRY_ZIMBABWE = 716,
  317. CTRY_JAPAN1 = 393,
  318. CTRY_JAPAN2 = 394,
  319. CTRY_JAPAN3 = 395,
  320. CTRY_JAPAN4 = 396,
  321. CTRY_JAPAN5 = 397,
  322. CTRY_JAPAN6 = 4006,
  323. CTRY_JAPAN7 = 4007,
  324. CTRY_JAPAN8 = 4008,
  325. CTRY_JAPAN9 = 4009,
  326. CTRY_JAPAN10 = 4010,
  327. CTRY_JAPAN11 = 4011,
  328. CTRY_JAPAN12 = 4012,
  329. CTRY_JAPAN13 = 4013,
  330. CTRY_JAPAN14 = 4014,
  331. CTRY_JAPAN15 = 4015,
  332. CTRY_JAPAN16 = 4016,
  333. CTRY_JAPAN17 = 4017,
  334. CTRY_JAPAN18 = 4018,
  335. CTRY_JAPAN19 = 4019,
  336. CTRY_JAPAN20 = 4020,
  337. CTRY_JAPAN21 = 4021,
  338. CTRY_JAPAN22 = 4022,
  339. CTRY_JAPAN23 = 4023,
  340. CTRY_JAPAN24 = 4024,
  341. CTRY_JAPAN25 = 4025,
  342. CTRY_JAPAN26 = 4026,
  343. CTRY_JAPAN27 = 4027,
  344. CTRY_JAPAN28 = 4028,
  345. CTRY_JAPAN29 = 4029,
  346. CTRY_JAPAN30 = 4030,
  347. CTRY_JAPAN31 = 4031,
  348. CTRY_JAPAN32 = 4032,
  349. CTRY_JAPAN33 = 4033,
  350. CTRY_JAPAN34 = 4034,
  351. CTRY_JAPAN35 = 4035,
  352. CTRY_JAPAN36 = 4036,
  353. CTRY_JAPAN37 = 4037,
  354. CTRY_JAPAN38 = 4038,
  355. CTRY_JAPAN39 = 4039,
  356. CTRY_JAPAN40 = 4040,
  357. CTRY_JAPAN41 = 4041,
  358. CTRY_JAPAN42 = 4042,
  359. CTRY_JAPAN43 = 4043,
  360. CTRY_JAPAN44 = 4044,
  361. CTRY_JAPAN45 = 4045,
  362. CTRY_JAPAN46 = 4046,
  363. CTRY_JAPAN47 = 4047,
  364. CTRY_JAPAN48 = 4048,
  365. CTRY_JAPAN49 = 4049,
  366. CTRY_JAPAN50 = 4050,
  367. CTRY_JAPAN51 = 4051,
  368. CTRY_JAPAN52 = 4052,
  369. CTRY_JAPAN53 = 4053,
  370. CTRY_JAPAN54 = 4054,
  371. CTRY_JAPAN55 = 4055,
  372. CTRY_JAPAN56 = 4056,
  373. CTRY_JAPAN57 = 4057,
  374. CTRY_JAPAN58 = 4058,
  375. CTRY_JAPAN59 = 4059,
  376. CTRY_AUSTRALIA2 = 5000,
  377. CTRY_CANADA2 = 5001,
  378. CTRY_BELGIUM2 = 5002
  379. };
  380. void ath9k_regd_get_current_country(struct ath_hal *ah,
  381. struct ath9k_country_entry *ctry);
  382. #endif