2 * Copyright (c) 2008 Atheros Communications Inc.
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.
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.
22 #define ATH9K_MODE_11A_TURBO ATH9K_MODE_SEL_108A
23 #define ATH9K_MODE_11G_TURBO ATH9K_MODE_SEL_108G
26 #define BMZERO {(u_int64_t) 0, (u_int64_t) 0}
28 #define BM(_fa, _fb, _fc, _fd, _fe, _ff, _fg, _fh, _fi, _fj, _fk, _fl) \
29 {((((_fa >= 0) && (_fa < 64)) ? \
30 (((u_int64_t) 1) << _fa) : (u_int64_t) 0) | \
31 (((_fb >= 0) && (_fb < 64)) ? \
32 (((u_int64_t) 1) << _fb) : (u_int64_t) 0) | \
33 (((_fc >= 0) && (_fc < 64)) ? \
34 (((u_int64_t) 1) << _fc) : (u_int64_t) 0) | \
35 (((_fd >= 0) && (_fd < 64)) ? \
36 (((u_int64_t) 1) << _fd) : (u_int64_t) 0) | \
37 (((_fe >= 0) && (_fe < 64)) ? \
38 (((u_int64_t) 1) << _fe) : (u_int64_t) 0) | \
39 (((_ff >= 0) && (_ff < 64)) ? \
40 (((u_int64_t) 1) << _ff) : (u_int64_t) 0) | \
41 (((_fg >= 0) && (_fg < 64)) ? \
42 (((u_int64_t) 1) << _fg) : (u_int64_t) 0) | \
43 (((_fh >= 0) && (_fh < 64)) ? \
44 (((u_int64_t) 1) << _fh) : (u_int64_t) 0) | \
45 (((_fi >= 0) && (_fi < 64)) ? \
46 (((u_int64_t) 1) << _fi) : (u_int64_t) 0) | \
47 (((_fj >= 0) && (_fj < 64)) ? \
48 (((u_int64_t) 1) << _fj) : (u_int64_t) 0) | \
49 (((_fk >= 0) && (_fk < 64)) ? \
50 (((u_int64_t) 1) << _fk) : (u_int64_t) 0) | \
51 (((_fl >= 0) && (_fl < 64)) ? \
52 (((u_int64_t) 1) << _fl) : (u_int64_t) 0) | \
53 ((((_fa > 63) && (_fa < 128)) ? \
54 (((u_int64_t) 1) << (_fa - 64)) : (u_int64_t) 0) | \
55 (((_fb > 63) && (_fb < 128)) ? \
56 (((u_int64_t) 1) << (_fb - 64)) : (u_int64_t) 0) | \
57 (((_fc > 63) && (_fc < 128)) ? \
58 (((u_int64_t) 1) << (_fc - 64)) : (u_int64_t) 0) | \
59 (((_fd > 63) && (_fd < 128)) ? \
60 (((u_int64_t) 1) << (_fd - 64)) : (u_int64_t) 0) | \
61 (((_fe > 63) && (_fe < 128)) ? \
62 (((u_int64_t) 1) << (_fe - 64)) : (u_int64_t) 0) | \
63 (((_ff > 63) && (_ff < 128)) ? \
64 (((u_int64_t) 1) << (_ff - 64)) : (u_int64_t) 0) | \
65 (((_fg > 63) && (_fg < 128)) ? \
66 (((u_int64_t) 1) << (_fg - 64)) : (u_int64_t) 0) | \
67 (((_fh > 63) && (_fh < 128)) ? \
68 (((u_int64_t) 1) << (_fh - 64)) : (u_int64_t) 0) | \
69 (((_fi > 63) && (_fi < 128)) ? \
70 (((u_int64_t) 1) << (_fi - 64)) : (u_int64_t) 0) | \
71 (((_fj > 63) && (_fj < 128)) ? \
72 (((u_int64_t) 1) << (_fj - 64)) : (u_int64_t) 0) | \
73 (((_fk > 63) && (_fk < 128)) ? \
74 (((u_int64_t) 1) << (_fk - 64)) : (u_int64_t) 0) | \
75 (((_fl > 63) && (_fl < 128)) ? \
76 (((u_int64_t) 1) << (_fl - 64)) : (u_int64_t) 0)))}
78 #define DEF_REGDMN FCC1_FCCA
79 #define DEF_DMN_5 FCC1
80 #define DEF_DMN_2 FCCA
81 #define COUNTRY_ERD_FLAG 0x8000
82 #define WORLDWIDE_ROAMING_FLAG 0x4000
83 #define SUPER_DOMAIN_MASK 0x0fff
84 #define COUNTRY_CODE_MASK 0x3fff
85 #define CF_INTERFERENCE (CHANNEL_CW_INT | CHANNEL_RADAR_INT)
86 #define CHANNEL_14 (2484)
87 #define IS_11G_CH14(_ch,_cf) \
88 (((_ch) == CHANNEL_14) && ((_cf) == CHANNEL_G))
90 #define NO_PSCAN 0x0ULL
91 #define PSCAN_FCC 0x0000000000000001ULL
92 #define PSCAN_FCC_T 0x0000000000000002ULL
93 #define PSCAN_ETSI 0x0000000000000004ULL
94 #define PSCAN_MKK1 0x0000000000000008ULL
95 #define PSCAN_MKK2 0x0000000000000010ULL
96 #define PSCAN_MKKA 0x0000000000000020ULL
97 #define PSCAN_MKKA_G 0x0000000000000040ULL
98 #define PSCAN_ETSIA 0x0000000000000080ULL
99 #define PSCAN_ETSIB 0x0000000000000100ULL
100 #define PSCAN_ETSIC 0x0000000000000200ULL
101 #define PSCAN_WWR 0x0000000000000400ULL
102 #define PSCAN_MKKA1 0x0000000000000800ULL
103 #define PSCAN_MKKA1_G 0x0000000000001000ULL
104 #define PSCAN_MKKA2 0x0000000000002000ULL
105 #define PSCAN_MKKA2_G 0x0000000000004000ULL
106 #define PSCAN_MKK3 0x0000000000008000ULL
107 #define PSCAN_DEFER 0x7FFFFFFFFFFFFFFFULL
108 #define IS_ECM_CHAN 0x8000000000000000ULL
110 #define isWwrSKU(_ah) \
111 (((ath9k_regd_get_eepromRD((_ah)) & WORLD_SKU_MASK) == \
112 WORLD_SKU_PREFIX) || \
113 (ath9k_regd_get_eepromRD(_ah) == WORLD))
115 #define isWwrSKU_NoMidband(_ah) \
116 ((ath9k_regd_get_eepromRD((_ah)) == WOR3_WORLD) || \
117 (ath9k_regd_get_eepromRD(_ah) == WOR4_WORLD) || \
118 (ath9k_regd_get_eepromRD(_ah) == WOR5_ETSIC))
120 #define isUNII1OddChan(ch) \
121 ((ch == 5170) || (ch == 5190) || (ch == 5210) || (ch == 5230))
123 #define IS_HT40_MODE(_mode) \
124 (((_mode == ATH9K_MODE_SEL_11NA_HT40PLUS || \
125 _mode == ATH9K_MODE_SEL_11NG_HT40PLUS || \
126 _mode == ATH9K_MODE_SEL_11NA_HT40MINUS || \
127 _mode == ATH9K_MODE_SEL_11NG_HT40MINUS) ? AH_TRUE : AH_FALSE))
129 #define CHAN_FLAGS (CHANNEL_ALL|CHANNEL_HALF|CHANNEL_QUARTER)
131 #define swap(_a, _b, _size) { \
135 u_int8_t tmp = *_a; \
143 #define HALF_MAXCHANBW 10
145 #define MULTI_DOMAIN_MASK 0xFF00
147 #define WORLD_SKU_MASK 0x00F0
148 #define WORLD_SKU_PREFIX 0x0060
150 #define CHANNEL_HALF_BW 10
151 #define CHANNEL_QUARTER_BW 5
153 typedef int ath_hal_cmp_t(const void *, const void *);
155 struct reg_dmn_pair_mapping
{
156 u_int16_t regDmnEnum
;
157 u_int16_t regDmn5GHz
;
158 u_int16_t regDmn2GHz
;
167 u_int16_t countryCode
;
170 struct country_code_to_enum_rd
{
171 u_int16_t countryCode
;
172 u_int16_t regDmnEnum
;
175 enum hal_bool allow11g
;
176 enum hal_bool allow11aTurbo
;
177 enum hal_bool allow11gTurbo
;
178 enum hal_bool allow11ng20
;
179 enum hal_bool allow11ng40
;
180 enum hal_bool allow11na20
;
181 enum hal_bool allow11na40
;
182 u_int16_t outdoorChanStart
;
185 struct RegDmnFreqBand
{
186 u_int16_t lowChannel
;
187 u_int16_t highChannel
;
193 u_int64_t usePassScan
;
198 u_int16_t regDmnEnum
;
199 u_int8_t conformanceTestLimit
;
203 u_int64_t chan11a
[BMLEN
];
204 u_int64_t chan11a_turbo
[BMLEN
];
205 u_int64_t chan11a_dyn_turbo
[BMLEN
];
206 u_int64_t chan11b
[BMLEN
];
207 u_int64_t chan11g
[BMLEN
];
208 u_int64_t chan11g_turbo
[BMLEN
];
219 struct japan_bandcheck
{
220 u_int16_t freqbandbit
;
221 u_int32_t eepromflagtocheck
;
224 struct common_mode_power
{
237 CTRY_AZERBAIJAN
= 31,
243 CTRY_BOSNIA_HERZ
= 70,
245 CTRY_BRUNEI_DARUSSALAM
= 96,
251 CTRY_COSTA_RICA
= 188,
256 CTRY_DOMINICAN_REPUBLIC
= 214,
259 CTRY_EL_SALVADOR
= 222,
261 CTRY_FAEROE_ISLANDS
= 234,
267 CTRY_GUATEMALA
= 320,
269 CTRY_HONG_KONG
= 344,
273 CTRY_INDONESIA
= 360,
282 CTRY_KAZAKHSTAN
= 398,
284 CTRY_KOREA_NORTH
= 408,
285 CTRY_KOREA_ROC
= 410,
286 CTRY_KOREA_ROC2
= 411,
287 CTRY_KOREA_ROC3
= 412,
292 CTRY_LIECHTENSTEIN
= 438,
293 CTRY_LITHUANIA
= 440,
294 CTRY_LUXEMBOURG
= 442,
296 CTRY_MACEDONIA
= 807,
303 CTRY_NETHERLANDS
= 528,
304 CTRY_NETHERLANDS_ANTILLES
= 530,
305 CTRY_NEW_ZEALAND
= 554,
306 CTRY_NICARAGUA
= 558,
311 CTRY_PAPUA_NEW_GUINEA
= 598,
314 CTRY_PHILIPPINES
= 608,
317 CTRY_PUERTO_RICO
= 630,
321 CTRY_SAUDI_ARABIA
= 682,
322 CTRY_SERBIA_MONTENEGRO
= 891,
323 CTRY_SINGAPORE
= 702,
326 CTRY_SOUTH_AFRICA
= 710,
328 CTRY_SRI_LANKA
= 144,
330 CTRY_SWITZERLAND
= 756,
334 CTRY_TRINIDAD_Y_TOBAGO
= 780,
339 CTRY_UNITED_KINGDOM
= 826,
340 CTRY_UNITED_STATES
= 840,
341 CTRY_UNITED_STATES_FCC49
= 842,
343 CTRY_UZBEKISTAN
= 860,
344 CTRY_VENEZUELA
= 862,
407 CTRY_AUSTRALIA2
= 5000,
412 void ath9k_regd_get_current_country(struct ath_hal
*ah
,
413 struct hal_country_entry
*ctry
);