1 /******************************************************************************
2 *
3 * Copyright(c) 2007 - 2019 Realtek Corporation.
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of version 2 of the GNU General Public License as
7 * published by the Free Software Foundation.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 *****************************************************************************/
15 #define _RTW_CHPLAN_C_
16
17 #include <drv_types.h>
18
19 #ifndef USE_RTW_REGD
20 #define USE_RTW_REGD 0
21 #endif
22
23 #if defined(PHL_FEATURE_NIC)
24 /*
25 * some PHL regulation APIs doesn't have pure database query function, even have, still need pointer of phl as context
26 * here use a global variable to workaround, this is workable for one-driver-one-dev situation
27 */
28 static void *phl_info;
29
phl_regulation_to_regd(enum REGULATION reg)30 static enum rtw_regd phl_regulation_to_regd(enum REGULATION reg)
31 {
32 switch (reg) {
33 case REGULATION_WW:
34 return RTW_REGD_WW;
35 case REGULATION_ETSI:
36 return RTW_REGD_ETSI;
37 case REGULATION_FCC:
38 return RTW_REGD_FCC;
39 case REGULATION_MKK:
40 return RTW_REGD_MKK;
41 case REGULATION_KCC:
42 return RTW_REGD_KCC;
43 case REGULATION_NCC:
44 return RTW_REGD_NCC;
45 case REGULATION_ACMA:
46 return RTW_REGD_ACMA;
47 case REGULATION_NA:
48 return RTW_REGD_NA;
49 case REGULATION_IC:
50 return RTW_REGD_IC;
51 case REGULATION_CHILE:
52 return RTW_REGD_CHILE;
53 case REGULATION_MEX:
54 return RTW_REGD_MEX;
55 case REGULATION_MAX:
56 default:
57 RTW_WARN("unknown reg:%d\n", reg);
58 rtw_warn_on(1);
59 return RTW_REGD_NA;
60 }
61 };
62
phl_tpo_to_txpwr_lmt(enum TP_OVERWRITE tpo)63 static REGULATION_TXPWR_LMT phl_tpo_to_txpwr_lmt(enum TP_OVERWRITE tpo)
64 {
65 switch (tpo) {
66 case TPO_CHILE:
67 return TXPWR_LMT_CHILE;
68 case TPO_QATAR:
69 return TXPWR_LMT_QATAR;
70 case TPO_UKRAINE:
71 return TXPWR_LMT_UKRAINE;
72 case TPO_CN:
73 return TXPWR_LMT_CN;
74 case TPO_NA:
75 return TXPWR_LMT_DEF;
76 default:
77 RTW_WARN("unknown tpo:%d\n", tpo);
78 rtw_warn_on(1);
79 return TXPWR_LMT_DEF;
80 }
81 }
82 #endif
83
84 #if USE_RTW_REGD
85 #define RTW_DOMAIN_MAP_VER "57"
86 #define RTW_DOMAIN_MAP_M_VER "h"
87 #define RTW_COUNTRY_MAP_VER "31"
88
89 struct ch_list_t {
90 u8 *len_ch_attr;
91 };
92
93 #define CLA_2G_12_14_PASSIVE BIT0
94
95 #define CLA_5G_B1_PASSIVE BIT0
96 #define CLA_5G_B2_PASSIVE BIT1
97 #define CLA_5G_B3_PASSIVE BIT2
98 #define CLA_5G_B4_PASSIVE BIT3
99 #define CLA_5G_B2_DFS BIT4
100 #define CLA_5G_B3_DFS BIT5
101 #define CLA_5G_B4_DFS BIT6
102
103 #define CLA_6G_B1_PASSIVE BIT0
104 #define CLA_6G_B2_PASSIVE BIT1
105 #define CLA_6G_B3_PASSIVE BIT2
106 #define CLA_6G_B4_PASSIVE BIT3
107
108 #define CH_LIST_ENT(_len, arg...) \
109 {.len_ch_attr = (u8[_len + 2]) {_len, ##arg}, }
110
111 #define CH_LIST_LEN(_ch_list) (_ch_list.len_ch_attr[0])
112 #define CH_LIST_CH(_ch_list, _i) (_ch_list.len_ch_attr[_i + 1])
113 #define CH_LIST_ATTRIB(_ch_list) (_ch_list.len_ch_attr[CH_LIST_LEN(_ch_list) + 1])
114
115 enum rtw_chd_2g {
116 RTW_CHD_2G_INVALID = 0,
117
118 RTW_CHD_2G_00,
119 RTW_CHD_2G_01,
120 RTW_CHD_2G_02,
121 RTW_CHD_2G_03,
122 RTW_CHD_2G_04,
123 RTW_CHD_2G_05,
124 RTW_CHD_2G_06,
125
126 RTW_CHD_2G_MAX,
127 RTW_CHD_2G_NULL = RTW_CHD_2G_00,
128 };
129
130 enum rtw_chd_5g {
131 RTW_CHD_5G_INVALID = 0,
132
133 RTW_CHD_5G_00,
134 RTW_CHD_5G_01,
135 RTW_CHD_5G_02,
136 RTW_CHD_5G_03,
137 RTW_CHD_5G_04,
138 RTW_CHD_5G_05,
139 RTW_CHD_5G_06,
140 RTW_CHD_5G_07,
141 RTW_CHD_5G_08,
142 RTW_CHD_5G_09,
143 RTW_CHD_5G_10,
144 RTW_CHD_5G_11,
145 RTW_CHD_5G_12,
146 RTW_CHD_5G_13,
147 RTW_CHD_5G_14,
148 RTW_CHD_5G_15,
149 RTW_CHD_5G_16,
150 RTW_CHD_5G_17,
151 RTW_CHD_5G_18,
152 RTW_CHD_5G_19,
153 RTW_CHD_5G_20,
154 RTW_CHD_5G_21,
155 RTW_CHD_5G_22,
156 RTW_CHD_5G_23,
157 RTW_CHD_5G_24,
158 RTW_CHD_5G_25,
159 RTW_CHD_5G_26,
160 RTW_CHD_5G_27,
161 RTW_CHD_5G_28,
162 RTW_CHD_5G_29,
163 RTW_CHD_5G_30,
164 RTW_CHD_5G_31,
165 RTW_CHD_5G_32,
166 RTW_CHD_5G_33,
167 RTW_CHD_5G_34,
168 RTW_CHD_5G_35,
169 RTW_CHD_5G_36,
170 RTW_CHD_5G_37,
171 RTW_CHD_5G_38,
172 RTW_CHD_5G_39,
173 RTW_CHD_5G_40,
174 RTW_CHD_5G_41,
175 RTW_CHD_5G_42,
176 RTW_CHD_5G_43,
177 RTW_CHD_5G_44,
178 RTW_CHD_5G_45,
179 RTW_CHD_5G_46,
180 RTW_CHD_5G_47,
181 RTW_CHD_5G_48,
182 RTW_CHD_5G_49,
183 RTW_CHD_5G_50,
184 RTW_CHD_5G_51,
185 RTW_CHD_5G_52,
186
187 RTW_CHD_5G_MAX,
188 RTW_CHD_5G_NULL = RTW_CHD_5G_00,
189 };
190
191 static const struct ch_list_t rtw_channel_def_2g[] = {
192 /* RTW_CHD_2G_INVALID */ CH_LIST_ENT(0, 0),
193 /* RTW_CHD_2G_00 */ CH_LIST_ENT(0, 0),
194 /* RTW_CHD_2G_01 */ CH_LIST_ENT(13, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, CLA_2G_12_14_PASSIVE),
195 /* RTW_CHD_2G_02 */ CH_LIST_ENT(13, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0),
196 /* RTW_CHD_2G_03 */ CH_LIST_ENT(11, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0),
197 /* RTW_CHD_2G_04 */ CH_LIST_ENT(14, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0),
198 /* RTW_CHD_2G_05 */ CH_LIST_ENT(4, 10, 11, 12, 13, 0),
199 /* RTW_CHD_2G_06 */ CH_LIST_ENT(14, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, CLA_2G_12_14_PASSIVE),
200 };
201
202 #if CONFIG_IEEE80211_BAND_5GHZ
203 static const struct ch_list_t rtw_channel_def_5g[] = {
204 /* RTW_CHD_5G_INVALID */ CH_LIST_ENT(0, 0),
205 /* RTW_CHD_5G_00 */ CH_LIST_ENT(0, 0),
206 /* RTW_CHD_5G_01 */ CH_LIST_ENT(21, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 132, 136, 140, 149, 153, 157, 161, 165, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
207 /* RTW_CHD_5G_02 */ CH_LIST_ENT(19, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
208 /* RTW_CHD_5G_03 */ CH_LIST_ENT(24, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
209 /* RTW_CHD_5G_04 */ CH_LIST_ENT(22, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 149, 153, 157, 161, 165, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
210 /* RTW_CHD_5G_05 */ CH_LIST_ENT(19, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 149, 153, 157, 161, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
211 /* RTW_CHD_5G_06 */ CH_LIST_ENT(9, 36, 40, 44, 48, 149, 153, 157, 161, 165, 0),
212 /* RTW_CHD_5G_07 */ CH_LIST_ENT(13, 36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161, 165, CLA_5G_B2_DFS),
213 /* RTW_CHD_5G_08 */ CH_LIST_ENT(12, 36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161, CLA_5G_B2_DFS),
214 /* RTW_CHD_5G_09 */ CH_LIST_ENT(5, 149, 153, 157, 161, 165, 0),
215 /* RTW_CHD_5G_10 */ CH_LIST_ENT(8, 36, 40, 44, 48, 52, 56, 60, 64, CLA_5G_B2_DFS),
216 /* RTW_CHD_5G_11 */ CH_LIST_ENT(11, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, CLA_5G_B3_DFS),
217 /* RTW_CHD_5G_12 */ CH_LIST_ENT(16, 56, 60, 64, 100, 104, 108, 112, 116, 132, 136, 140, 149, 153, 157, 161, 165, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
218 /* RTW_CHD_5G_13 */ CH_LIST_ENT(8, 56, 60, 64, 149, 153, 157, 161, 165, CLA_5G_B2_DFS),
219 /* RTW_CHD_5G_14 */ CH_LIST_ENT(4, 36, 40, 44, 48, 0),
220 /* RTW_CHD_5G_15 */ CH_LIST_ENT(4, 149, 153, 157, 161, 0),
221 /* RTW_CHD_5G_16 */ CH_LIST_ENT(11, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 0),
222 /* RTW_CHD_5G_17 */ CH_LIST_ENT(16, 36, 40, 44, 48, 52, 56, 60, 64, 132, 136, 140, 149, 153, 157, 161, 165, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
223 /* RTW_CHD_5G_18 */ CH_LIST_ENT(17, 52, 56, 60, 64, 100, 104, 108, 112, 116, 132, 136, 140, 149, 153, 157, 161, 165, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
224 /* RTW_CHD_5G_19 */ CH_LIST_ENT(16, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 132, 136, 140, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
225 /* RTW_CHD_5G_20 */ CH_LIST_ENT(20, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 132, 136, 140, 149, 153, 157, 161, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
226 /* RTW_CHD_5G_21 */ CH_LIST_ENT(11, 36, 40, 44, 48, 52, 56, 60, 64, 132, 136, 140, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
227 /* RTW_CHD_5G_22 */ CH_LIST_ENT(25, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144, 149, 153, 157, 161, 165, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
228 /* RTW_CHD_5G_23 */ CH_LIST_ENT(21, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 149, 153, 157, 161, 165, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
229 /* RTW_CHD_5G_24 */ CH_LIST_ENT(24, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165, CLA_5G_B2_PASSIVE | CLA_5G_B3_PASSIVE | CLA_5G_B4_PASSIVE),
230 /* RTW_CHD_5G_25 */ CH_LIST_ENT(24, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165, CLA_5G_B2_PASSIVE | CLA_5G_B3_PASSIVE),
231 /* RTW_CHD_5G_26 */ CH_LIST_ENT(24, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165, CLA_5G_B1_PASSIVE | CLA_5G_B2_PASSIVE | CLA_5G_B3_PASSIVE),
232 /* RTW_CHD_5G_27 */ CH_LIST_ENT(21, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 132, 136, 140, 149, 153, 157, 161, 165, CLA_5G_B2_PASSIVE | CLA_5G_B3_PASSIVE),
233 /* RTW_CHD_5G_28 */ CH_LIST_ENT(13, 36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161, 165, CLA_5G_B2_PASSIVE),
234 /* RTW_CHD_5G_29 */ CH_LIST_ENT(13, 36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161, 165, CLA_5G_B1_PASSIVE | CLA_5G_B2_PASSIVE),
235 /* RTW_CHD_5G_30 */ CH_LIST_ENT(9, 36, 40, 44, 48, 149, 153, 157, 161, 165, CLA_5G_B1_PASSIVE | CLA_5G_B4_PASSIVE),
236 /* RTW_CHD_5G_31 */ CH_LIST_ENT(24, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165, CLA_5G_B1_PASSIVE | CLA_5G_B2_PASSIVE | CLA_5G_B3_PASSIVE | CLA_5G_B4_PASSIVE),
237 /* RTW_CHD_5G_32 */ CH_LIST_ENT(9, 52, 56, 60, 64, 149, 153, 157, 161, 165, CLA_5G_B2_DFS),
238 /* RTW_CHD_5G_33 */ CH_LIST_ENT(22, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 132, 136, 140, 144, 149, 153, 157, 161, 165, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
239 /* RTW_CHD_5G_34 */ CH_LIST_ENT(13, 100, 104, 108, 112, 116, 132, 136, 140, 149, 153, 157, 161, 165, CLA_5G_B3_DFS),
240 /* RTW_CHD_5G_35 */ CH_LIST_ENT(8, 100, 104, 108, 112, 116, 132, 136, 140, CLA_5G_B3_DFS),
241 /* RTW_CHD_5G_36 */ CH_LIST_ENT(25, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144, 149, 153, 157, 161, 165, CLA_5G_B1_PASSIVE | CLA_5G_B2_PASSIVE | CLA_5G_B2_DFS | CLA_5G_B3_PASSIVE | CLA_5G_B3_DFS | CLA_5G_B4_PASSIVE),
242 /* RTW_CHD_5G_37 */ CH_LIST_ENT(8, 36, 40, 44, 48, 52, 56, 60, 64, CLA_5G_B1_PASSIVE | CLA_5G_B2_PASSIVE),
243 /* RTW_CHD_5G_38 */ CH_LIST_ENT(16, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
244 /* RTW_CHD_5G_39 */ CH_LIST_ENT(21, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 149, 153, 157, 161, 165, CLA_5G_B1_PASSIVE | CLA_5G_B2_DFS | CLA_5G_B3_DFS | CLA_5G_B4_DFS),
245 /* RTW_CHD_5G_40 */ CH_LIST_ENT(21, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 132, 136, 140, 149, 153, 157, 161, 165, CLA_5G_B1_PASSIVE | CLA_5G_B2_DFS | CLA_5G_B3_DFS),
246 /* RTW_CHD_5G_41 */ CH_LIST_ENT(24, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165, CLA_5G_B2_DFS | CLA_5G_B3_DFS | CLA_5G_B4_PASSIVE),
247 /* RTW_CHD_5G_42 */ CH_LIST_ENT(24, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165, CLA_5G_B1_PASSIVE | CLA_5G_B2_DFS | CLA_5G_B3_DFS | CLA_5G_B4_PASSIVE),
248 /* RTW_CHD_5G_43 */ CH_LIST_ENT(23, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 136, 140, 149, 153, 157, 161, 165, CLA_5G_B1_PASSIVE | CLA_5G_B2_PASSIVE | CLA_5G_B3_PASSIVE | CLA_5G_B4_PASSIVE),
249 /* RTW_CHD_5G_44 */ CH_LIST_ENT(21, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 132, 136, 140, 149, 153, 157, 161, 165, CLA_5G_B1_PASSIVE | CLA_5G_B2_PASSIVE | CLA_5G_B3_PASSIVE | CLA_5G_B4_PASSIVE),
250 /* RTW_CHD_5G_45 */ CH_LIST_ENT(13, 36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161, 165, CLA_5G_B1_PASSIVE | CLA_5G_B2_PASSIVE | CLA_5G_B4_PASSIVE),
251 /* RTW_CHD_5G_46 */ CH_LIST_ENT(12, 36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161, CLA_5G_B2_PASSIVE),
252 /* RTW_CHD_5G_47 */ CH_LIST_ENT(19, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, CLA_5G_B2_PASSIVE | CLA_5G_B3_PASSIVE),
253 /* RTW_CHD_5G_48 */ CH_LIST_ENT(20, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
254 /* RTW_CHD_5G_49 */ CH_LIST_ENT(17, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
255 /* RTW_CHD_5G_50 */ CH_LIST_ENT(17, 36, 40, 44, 48, 52, 56, 60, 64, 132, 136, 140, 144, 149, 153, 157, 161, 165, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
256 /* RTW_CHD_5G_51 */ CH_LIST_ENT(13, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
257 /* RTW_CHD_5G_52 */ CH_LIST_ENT(28, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144, 149, 153, 157, 161, 165, 169, 173, 177, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
258 };
259 #endif /* CONFIG_IEEE80211_BAND_5GHZ */
260
261 struct chplan_ent_t {
262 u8 regd_2g; /* value of enum rtw_regd */
263 u8 chd_2g;
264 #if CONFIG_IEEE80211_BAND_5GHZ
265 u8 regd_5g; /* value of enum rtw_regd */
266 u8 chd_5g;
267 #endif
268 };
269
270 #if CONFIG_IEEE80211_BAND_5GHZ
271 #define CHPLAN_ENT(_regd_2g, _chd_2g, _regd_5g, _chd_5g) {.regd_2g = RTW_REGD_##_regd_2g, .chd_2g = RTW_CHD_2G_##_chd_2g, .regd_5g = RTW_REGD_##_regd_5g, .chd_5g = RTW_CHD_5G_##_chd_5g}
272 #else
273 #define CHPLAN_ENT(_regd_2g, _chd_2g, _regd_5g, _chd_5g) {.regd_2g = RTW_REGD_##_regd_2g, .chd_2g = RTW_CHD_2G_##_chd_2g}
274 #endif
275
276 #define CHPLAN_ENT_NOT_DEFINED CHPLAN_ENT(NA, INVALID, NA, INVALID)
277
278 static const struct chplan_ent_t RTW_ChannelPlanMap[] = {
279 [0x00] = CHPLAN_ENT(ETSI , 02, ETSI , 49),
280 [0x01] = CHPLAN_ENT(ETSI , 02, ETSI , 50),
281 [0x02] = CHPLAN_ENT(ETSI , 03, ETSI , 07),
282 [0x03] = CHPLAN_ENT(ACMA , 02, ACMA , 33),
283 [0x04] = CHPLAN_ENT(ETSI , 02, ETSI , 51),
284 [0x05] = CHPLAN_ENT(ETSI , 02, ETSI , 06),
285 [0x06] = CHPLAN_ENT(ETSI , 02, ETSI , 07),
286 [0x07] = CHPLAN_ENT(ETSI , 02, ETSI , 23),
287 [0x08] = CHPLAN_ENT(ETSI , 02, ETSI , 21),
288 [0x09] = CHPLAN_ENT(ETSI , 02, ETSI , 17),
289 [0x1A] = CHPLAN_ENT(NA , 00, NA , 00),
290 [0x1B] = CHPLAN_ENT(FCC , 02, FCC , 52),
291 [0x20] = CHPLAN_ENT(WW , 01, NA , 00),
292 [0x21] = CHPLAN_ENT(ETSI , 02, NA , 00),
293 [0x22] = CHPLAN_ENT(FCC , 03, NA , 00),
294 [0x23] = CHPLAN_ENT(MKK , 04, NA , 00),
295 [0x24] = CHPLAN_ENT(ETSI , 05, NA , 00),
296 [0x25] = CHPLAN_ENT(FCC , 03, FCC , 03),
297 [0x26] = CHPLAN_ENT(ETSI , 01, ETSI , 02),
298 [0x27] = CHPLAN_ENT(MKK , 04, MKK , 02),
299 [0x28] = CHPLAN_ENT(KCC , 01, KCC , 05),
300 [0x29] = CHPLAN_ENT(FCC , 01, FCC , 06),
301 [0x2A] = CHPLAN_ENT(FCC , 02, NA , 00),
302 [0x2B] = CHPLAN_ENT(IC , 02, IC , 33),
303 [0x2C] = CHPLAN_ENT(MKK , 02, NA , 00),
304 [0x2D] = CHPLAN_ENT(CHILE, 01, CHILE, 22),
305 [0x2E] = CHPLAN_ENT(WW , 03, WW , 37),
306 [0x2F] = CHPLAN_ENT(CHILE, 01, CHILE, 38),
307 [0x30] = CHPLAN_ENT(FCC , 01, FCC , 07),
308 [0x31] = CHPLAN_ENT(FCC , 01, FCC , 08),
309 [0x32] = CHPLAN_ENT(FCC , 01, FCC , 09),
310 [0x33] = CHPLAN_ENT(FCC , 01, FCC , 10),
311 [0x34] = CHPLAN_ENT(FCC , 03, FCC , 01),
312 [0x35] = CHPLAN_ENT(ETSI , 01, ETSI , 03),
313 [0x36] = CHPLAN_ENT(ETSI , 01, ETSI , 04),
314 [0x37] = CHPLAN_ENT(MKK , 04, MKK , 10),
315 [0x38] = CHPLAN_ENT(MKK , 04, MKK , 11),
316 [0x39] = CHPLAN_ENT(NCC , 03, NCC , 12),
317 [0x3A] = CHPLAN_ENT(ETSI , 02, ETSI , 02),
318 [0x3B] = CHPLAN_ENT(ACMA , 02, ACMA , 01),
319 [0x3C] = CHPLAN_ENT(ETSI , 02, ETSI , 10),
320 [0x3D] = CHPLAN_ENT(ETSI , 02, ETSI , 15),
321 [0x3E] = CHPLAN_ENT(KCC , 02, KCC , 03),
322 [0x3F] = CHPLAN_ENT(FCC , 03, FCC , 22),
323 [0x40] = CHPLAN_ENT(NCC , 03, NCC , 13),
324 [0x41] = CHPLAN_ENT(WW , 06, NA , 00),
325 [0x42] = CHPLAN_ENT(ETSI , 02, ETSI , 14),
326 [0x43] = CHPLAN_ENT(FCC , 03, FCC , 06),
327 [0x44] = CHPLAN_ENT(NCC , 03, NCC , 09),
328 [0x45] = CHPLAN_ENT(ACMA , 01, ACMA , 01),
329 [0x46] = CHPLAN_ENT(FCC , 03, FCC , 15),
330 [0x47] = CHPLAN_ENT(ETSI , 01, ETSI , 10),
331 [0x48] = CHPLAN_ENT(ETSI , 01, ETSI , 07),
332 [0x49] = CHPLAN_ENT(ETSI , 01, ETSI , 06),
333 [0x4A] = CHPLAN_ENT(IC , 03, IC , 33),
334 [0x4B] = CHPLAN_ENT(KCC , 02, KCC , 22),
335 [0x4C] = CHPLAN_ENT(FCC , 03, FCC , 28),
336 [0x4D] = CHPLAN_ENT(MEX , 02, MEX , 01),
337 [0x4E] = CHPLAN_ENT(ETSI , 02, ETSI , 42),
338 [0x4F] = CHPLAN_ENT(NA , 00, MKK , 43),
339 [0x50] = CHPLAN_ENT(ETSI , 01, ETSI , 16),
340 [0x51] = CHPLAN_ENT(ETSI , 01, ETSI , 09),
341 [0x52] = CHPLAN_ENT(ETSI , 01, ETSI , 17),
342 [0x53] = CHPLAN_ENT(NCC , 03, NCC , 18),
343 [0x54] = CHPLAN_ENT(ETSI , 01, ETSI , 15),
344 [0x55] = CHPLAN_ENT(FCC , 03, FCC , 01),
345 [0x56] = CHPLAN_ENT(ETSI , 01, ETSI , 19),
346 [0x57] = CHPLAN_ENT(FCC , 03, FCC , 20),
347 [0x58] = CHPLAN_ENT(MKK , 02, MKK , 14),
348 [0x59] = CHPLAN_ENT(ETSI , 01, ETSI , 21),
349 [0x5A] = CHPLAN_ENT(NA , 00, FCC , 44),
350 [0x5B] = CHPLAN_ENT(NA , 00, FCC , 45),
351 [0x5C] = CHPLAN_ENT(NA , 00, FCC , 43),
352 [0x5D] = CHPLAN_ENT(ETSI , 02, ETSI , 08),
353 [0x5E] = CHPLAN_ENT(ETSI , 02, ETSI , 03),
354 [0x5F] = CHPLAN_ENT(MKK , 02, MKK , 47),
355 [0x60] = CHPLAN_ENT(FCC , 03, FCC , 09),
356 [0x61] = CHPLAN_ENT(FCC , 02, FCC , 01),
357 [0x62] = CHPLAN_ENT(FCC , 02, FCC , 03),
358 [0x63] = CHPLAN_ENT(ETSI , 01, ETSI , 23),
359 [0x64] = CHPLAN_ENT(MKK , 02, MKK , 24),
360 [0x65] = CHPLAN_ENT(ETSI , 02, ETSI , 24),
361 [0x66] = CHPLAN_ENT(FCC , 03, FCC , 27),
362 [0x67] = CHPLAN_ENT(FCC , 03, FCC , 25),
363 [0x68] = CHPLAN_ENT(FCC , 02, FCC , 27),
364 [0x69] = CHPLAN_ENT(FCC , 02, FCC , 25),
365 [0x6A] = CHPLAN_ENT(ETSI , 02, ETSI , 25),
366 [0x6B] = CHPLAN_ENT(FCC , 01, FCC , 29),
367 [0x6C] = CHPLAN_ENT(FCC , 01, FCC , 26),
368 [0x6D] = CHPLAN_ENT(FCC , 02, FCC , 28),
369 [0x6E] = CHPLAN_ENT(FCC , 01, FCC , 25),
370 [0x6F] = CHPLAN_ENT(NA , 00, ETSI , 06),
371 [0x70] = CHPLAN_ENT(NA , 00, ETSI , 30),
372 [0x71] = CHPLAN_ENT(NA , 00, ETSI , 25),
373 [0x72] = CHPLAN_ENT(NA , 00, ETSI , 31),
374 [0x73] = CHPLAN_ENT(FCC , 01, FCC , 01),
375 [0x74] = CHPLAN_ENT(FCC , 02, FCC , 19),
376 [0x75] = CHPLAN_ENT(ETSI , 01, ETSI , 32),
377 [0x76] = CHPLAN_ENT(FCC , 02, FCC , 22),
378 [0x77] = CHPLAN_ENT(ETSI , 01, ETSI , 34),
379 [0x78] = CHPLAN_ENT(FCC , 03, FCC , 35),
380 [0x79] = CHPLAN_ENT(MKK , 02, MKK , 02),
381 [0x7A] = CHPLAN_ENT(ETSI , 02, ETSI , 28),
382 [0x7B] = CHPLAN_ENT(ETSI , 02, ETSI , 46),
383 [0x7C] = CHPLAN_ENT(ETSI , 02, ETSI , 47),
384 [0x7D] = CHPLAN_ENT(MKK , 04, MKK , 48),
385 [0x7E] = CHPLAN_ENT(MKK , 02, MKK , 48),
386 [0x7F] = CHPLAN_ENT(WW , 01, WW , 36),
387 };
388
389 const int RTW_ChannelPlanMap_size = sizeof(RTW_ChannelPlanMap) / sizeof(RTW_ChannelPlanMap[0]);
390 #endif /* USE_RTW_REGD */
391
rtw_chplan_get_default_regd_2g(u8 id)392 u8 rtw_chplan_get_default_regd_2g(u8 id)
393 {
394 #if defined(PHL_FEATURE_NIC) && !USE_RTW_REGD
395 return phl_regulation_to_regd(rtw_phl_get_domain_regulation_2g(id));
396 #else
397 if (id < RTW_ChannelPlanMap_size)
398 return RTW_ChannelPlanMap[id].regd_2g;
399 return RTW_REGD_NA;
400 #endif
401 }
402
rtw_chplan_get_default_regd_5g(u8 id)403 u8 rtw_chplan_get_default_regd_5g(u8 id)
404 {
405 #if CONFIG_IEEE80211_BAND_5GHZ
406 #if defined(PHL_FEATURE_NIC) && !USE_RTW_REGD
407 return phl_regulation_to_regd(rtw_phl_get_domain_regulation_5g(id));
408 #else
409 if (id < RTW_ChannelPlanMap_size)
410 return RTW_ChannelPlanMap[id].regd_5g;
411 #endif
412 #endif
413 return RTW_REGD_NA;
414 }
415
rtw_is_channel_plan_valid(u8 id)416 bool rtw_is_channel_plan_valid(u8 id)
417 {
418 #if defined(PHL_FEATURE_NIC) && !USE_RTW_REGD
419 if (rtw_phl_valid_regulation_domain(id))
420 return _TRUE;
421 else
422 return _FALSE;
423 #else
424 if (id < RTW_ChannelPlanMap_size) {
425 const struct chplan_ent_t *chplan_map = &RTW_ChannelPlanMap[id];
426
427 if (chplan_map->chd_2g != RTW_CHD_2G_INVALID
428 #if CONFIG_IEEE80211_BAND_5GHZ
429 && chplan_map->chd_5g != RTW_CHD_5G_INVALID
430 #endif
431 )
432 return _TRUE;
433 }
434
435 return _FALSE;
436 #endif
437 }
438
rtw_regsty_is_excl_chs(struct registry_priv * regsty,u8 ch)439 bool rtw_regsty_is_excl_chs(struct registry_priv *regsty, u8 ch)
440 {
441 int i;
442
443 for (i = 0; i < MAX_CHANNEL_NUM_2G_5G; i++) {
444 if (regsty->excl_chs[i] == 0)
445 break;
446 if (regsty->excl_chs[i] == ch)
447 return _TRUE;
448 }
449 return _FALSE;
450 }
451
452 /*
453 * Search the @param ch in chplan by given @param id
454 * @id: the given channel plan id
455 * @ch: the given channel number
456 *
457 * return the index of channel_num in channel_set, -1 if not found
458 */
rtw_chplan_get_ch(u8 id,const u32 ch,u8 * flags)459 static bool rtw_chplan_get_ch(u8 id, const u32 ch, u8 *flags)
460 {
461 u8 index, chan, attrib;
462
463 if (flags)
464 *flags = 0;
465
466 #if defined(PHL_FEATURE_NIC) && !USE_RTW_REGD
467 if (phl_info) {
468 struct rtw_regulation_chplan plan;
469
470 /* this function check for capability inside */
471 if (rtw_phl_query_specific_chplan(phl_info, id, &plan)) {
472 for (index = 0; index < plan.cnt; index++) {
473 if (plan.ch[index].band != BAND_ON_24G && plan.ch[index].band != BAND_ON_5G)
474 continue;
475 if (plan.ch[index].channel != ch)
476 continue;
477 if (flags) {
478 if (plan.ch[index].property & CH_PASSIVE)
479 *flags |= RTW_CHF_NO_IR;
480 if (plan.ch[index].property & CH_DFS)
481 *flags |= RTW_CHF_DFS;
482 }
483 return 1;
484 }
485 }
486 }
487 #else
488 #if CONFIG_IEEE80211_BAND_5GHZ
489 if (ch > 14) {
490 u8 chd_5g = RTW_ChannelPlanMap[id].chd_5g;
491
492 attrib = CH_LIST_ATTRIB(rtw_channel_def_5g[chd_5g]);
493
494 for (index = 0; index < CH_LIST_LEN(rtw_channel_def_5g[chd_5g]); index++) {
495 if (CH_LIST_CH(rtw_channel_def_5g[chd_5g], index) == ch) {
496 if (flags) {
497 if ((rtw_is_5g_band1(ch) && (attrib & CLA_5G_B1_PASSIVE)) /* band1 passive */
498 || (rtw_is_5g_band2(ch) && (attrib & CLA_5G_B2_PASSIVE)) /* band2 passive */
499 || (rtw_is_5g_band3(ch) && (attrib & CLA_5G_B3_PASSIVE)) /* band3 passive */
500 || (rtw_is_5g_band4(ch) && (attrib & CLA_5G_B4_PASSIVE)) /* band4 passive */
501 )
502 *flags |= RTW_CHF_NO_IR;
503
504 if ((rtw_is_5g_band2(ch) && (attrib & CLA_5G_B2_DFS))
505 || (rtw_is_5g_band3(ch) && (attrib & CLA_5G_B3_DFS))
506 || (rtw_is_5g_band4(ch) && (attrib & CLA_5G_B4_DFS)))
507 *flags |= RTW_CHF_DFS;
508 }
509 return 1;
510 }
511 }
512 } else
513 #endif /* CONFIG_IEEE80211_BAND_5GHZ */
514 {
515 u8 chd_2g = RTW_ChannelPlanMap[id].chd_2g;
516
517 attrib = CH_LIST_ATTRIB(rtw_channel_def_2g[chd_2g]);
518
519 for (index = 0; index < CH_LIST_LEN(rtw_channel_def_2g[chd_2g]); index++) {
520 if (CH_LIST_CH(rtw_channel_def_2g[chd_2g], index) == ch) {
521 if (flags) {
522 if (ch >= 12 && ch <= 14 && (attrib & CLA_2G_12_14_PASSIVE))
523 *flags |= RTW_CHF_NO_IR;
524 }
525 return 1;
526 }
527 }
528 }
529 #endif /* defined(PHL_FEATURE_NIC) && !USE_RTW_REGD */
530
531 return 0;
532 }
533
534 #if CONFIG_IEEE80211_BAND_6GHZ
535 #if USE_RTW_REGD
536 enum rtw_chd_6g {
537 RTW_CHD_6G_INVALID = 0,
538
539 RTW_CHD_6G_00,
540 RTW_CHD_6G_01,
541 RTW_CHD_6G_02,
542 RTW_CHD_6G_03,
543 RTW_CHD_6G_04,
544 RTW_CHD_6G_05, /* 6G Worldwide */
545
546 RTW_CHD_6G_MAX,
547 RTW_CHD_6G_NULL = RTW_CHD_6G_00,
548 };
549
550 static const struct ch_list_t rtw_channel_def_6g[] = {
551 /* RTW_CHD_6G_INVALID */ CH_LIST_ENT(0, 0),
552 /* RTW_CHD_6G_00 */ CH_LIST_ENT(0, 0),
553 /* RTW_CHD_6G_01 */ CH_LIST_ENT(24, 1, 5, 9, 13, 17, 21, 25, 29, 33, 37, 41, 45, 49, 53, 57, 61, 65, 69, 73, 77, 81, 85, 89, 93, 0),
554 /* RTW_CHD_6G_02 */ CH_LIST_ENT(6, 97, 101, 105, 109, 113, 117, 0),
555 /* RTW_CHD_6G_03 */ CH_LIST_ENT(18, 121, 125, 129, 133, 137, 141, 145, 149, 153, 157, 161, 165, 169, 173, 177, 181, 185, 189, 0),
556 /* RTW_CHD_6G_04 */ CH_LIST_ENT(11, 193, 197, 201, 205, 209, 213, 217, 221, 225, 229, 233, 0),
557 /* RTW_CHD_6G_05 */ CH_LIST_ENT(59, 1, 5, 9, 13, 17, 21, 25, 29, 33, 37, 41, 45, 49, 53, 57, 61, 65, 69, 73, 77, 81, 85, 89, 93, 97, 101, 105, 109, 113, 117, 121, 125, 129, 133, 137, 141, 145, 149, 153, 157, 161, 165, 169, 173, 177, 181, 185, 189, 193, 197, 201, 205, 209, 213, 217, 221, 225, 229, 233, CLA_6G_B1_PASSIVE | CLA_6G_B2_PASSIVE | CLA_6G_B3_PASSIVE | CLA_6G_B4_PASSIVE),
558 };
559
560 struct chplan_6g_ent_t {
561 u8 regd; /* value of enum rtw_regd */
562 u8 chd;
563 };
564
565 #define CHPLAN_6G_ENT(_regd, _chd) {.regd = RTW_REGD_##_regd, .chd = RTW_CHD_6G_##_chd}
566
567 #define CHPLAN_6G_ENT_NOT_DEFINED CHPLAN_6G_ENT(NA, INVALID)
568
569 static const struct chplan_6g_ent_t rtw_chplan_6g_map[] = {
570 [0x00] = CHPLAN_6G_ENT(NA , 00),
571 [0x01] = CHPLAN_6G_ENT(FCC , 01),
572 [0x02] = CHPLAN_6G_ENT(FCC , 02),
573 [0x03] = CHPLAN_6G_ENT(FCC , 03),
574 [0x04] = CHPLAN_6G_ENT(FCC , 04),
575 [0x7F] = CHPLAN_6G_ENT(WW , 05),
576 };
577
578 const int rtw_chplan_6g_map_size = sizeof(rtw_chplan_6g_map) / sizeof(rtw_chplan_6g_map[0]);
579 #endif /* USE_RTW_REGD */
580
rtw_chplan_get_default_regd_6g(u8 id)581 u8 rtw_chplan_get_default_regd_6g(u8 id)
582 {
583 #if defined(PHL_FEATURE_NIC) && !USE_RTW_REGD
584 /* wait PHL ready */
585 return RTW_REGD_NA;
586 #else
587 if (id < rtw_chplan_6g_map_size)
588 return rtw_chplan_6g_map[id].regd;
589 return RTW_REGD_NA;
590 #endif
591 }
592
rtw_is_channel_plan_6g_valid(u8 id)593 bool rtw_is_channel_plan_6g_valid(u8 id)
594 {
595 #if defined(PHL_FEATURE_NIC) && !USE_RTW_REGD
596 /* TODO: wait PHL ready */
597 return _FALSE;
598 #else
599 if (id < rtw_chplan_6g_map_size) {
600 const struct chplan_6g_ent_t *chplan_map = &rtw_chplan_6g_map[id];
601
602 if (chplan_map->chd != RTW_CHD_6G_INVALID)
603 return _TRUE;
604 }
605
606 return _FALSE;
607 #endif
608 }
609
rtw_regsty_is_excl_chs_6g(struct registry_priv * regsty,u8 ch)610 bool rtw_regsty_is_excl_chs_6g(struct registry_priv *regsty, u8 ch)
611 {
612 int i;
613
614 for (i = 0; i < MAX_CHANNEL_NUM_6G; i++) {
615 if (regsty->excl_chs_6g[i] == 0)
616 break;
617 if (regsty->excl_chs_6g[i] == ch)
618 return _TRUE;
619 }
620 return _FALSE;
621 }
622
623 /*
624 * Search the @param ch in chplan by given @param id
625 * @id: the given channel plan id
626 * @ch: the given channel number
627 *
628 * return the index of channel_num in channel_set, -1 if not found
629 */
rtw_chplan_6g_get_ch(u8 id,const u32 ch,u8 * flags)630 static bool rtw_chplan_6g_get_ch(u8 id, const u32 ch, u8 *flags)
631 {
632 u8 index, chan, attrib;
633 u8 chd_6g;
634
635 if (flags)
636 *flags = 0;
637
638 #if defined(PHL_FEATURE_NIC) && !USE_RTW_REGD
639 if (phl_info) {
640 /* Wait PHL ready */
641 }
642 #else
643 chd_6g = rtw_chplan_6g_map[id].chd;
644
645 attrib = CH_LIST_ATTRIB(rtw_channel_def_6g[chd_6g]);
646
647 for (index = 0; index < CH_LIST_LEN(rtw_channel_def_6g[chd_6g]); index++) {
648 if (CH_LIST_CH(rtw_channel_def_6g[chd_6g], index) == ch) {
649 if (flags) {
650 if ((rtw_is_6g_band1(ch) && (attrib & CLA_6G_B1_PASSIVE)) /* band1 passive */
651 || (rtw_is_6g_band2(ch) && (attrib & CLA_6G_B2_PASSIVE)) /* band2 passive */
652 || (rtw_is_6g_band3(ch) && (attrib & CLA_6G_B3_PASSIVE)) /* band3 passive */
653 || (rtw_is_6g_band4(ch) && (attrib & CLA_6G_B4_PASSIVE)) /* band4 passive */
654 )
655 *flags |= RTW_CHF_NO_IR;
656 }
657 return 1;
658 }
659 }
660 #endif
661
662 return 0;
663 }
664 #endif /* CONFIG_IEEE80211_BAND_6GHZ */
665
666 /*
667 * Check if the @param ch, bw, offset is valid for the given @param id, id_6g
668 * @ch_set: the given channel set
669 * @ch: the given channel number
670 * @bw: the given bandwidth
671 * @offset: the given channel offset
672 *
673 * return valid (1) or not (0)
674 */
rtw_chplan_is_chbw_valid(u8 id,u8 id_6g,enum band_type band,u8 ch,u8 bw,u8 offset,bool allow_primary_passive,bool allow_passive,struct registry_priv * regsty)675 u8 rtw_chplan_is_chbw_valid(u8 id, u8 id_6g, enum band_type band, u8 ch, u8 bw, u8 offset
676 , bool allow_primary_passive, bool allow_passive, struct registry_priv *regsty)
677 {
678 u8 cch;
679 u8 *op_chs;
680 u8 op_ch_num;
681 u8 op_ch;
682 u8 valid = 0;
683 int i;
684 int ch_idx;
685 u8 flags;
686
687 #if CONFIG_IEEE80211_BAND_6GHZ
688 if (band == BAND_ON_6G)
689 goto exit;
690 #endif
691
692 cch = rtw_get_center_ch(ch, bw, offset); /* TODO: 6G */
693
694 if (!rtw_get_op_chs_by_cch_bw(cch, bw, &op_chs, &op_ch_num)) /* TODO: 6G */
695 goto exit;
696
697 for (i = 0; i < op_ch_num; i++) {
698 op_ch = *(op_chs + i);
699 if (0)
700 RTW_INFO("%u,%u,%u - cch:%u, bw:%u, op_ch:%u\n", ch, bw, offset, cch, bw, op_ch);
701 #if CONFIG_IEEE80211_BAND_6GHZ
702 if (band == BAND_ON_6G) {
703 if (!rtw_chplan_6g_get_ch(id_6g, op_ch, &flags)
704 || (regsty && rtw_regsty_is_excl_chs_6g(regsty, op_ch) == _TRUE))
705 break;
706 } else
707 #endif
708 {
709 if (!rtw_chplan_get_ch(id, op_ch, &flags)
710 || (regsty && rtw_regsty_is_excl_chs(regsty, op_ch) == _TRUE))
711 break;
712 }
713 if (flags & RTW_CHF_NO_IR) {
714 if (!allow_passive
715 || (!allow_primary_passive && op_ch == ch))
716 break;
717 }
718 }
719
720 if (op_ch_num != 0 && i == op_ch_num)
721 valid = 1;
722
723 exit:
724 return valid;
725 }
726
727 const char *_regd_src_str[] = {
728 [REGD_SRC_RTK_PRIV] = "RTK_PRIV",
729 [REGD_SRC_OS] = "OS",
730 [REGD_SRC_NUM] = "UNKNOWN",
731 };
732
733 #if defined(PHL_FEATURE_NIC) && !USE_RTW_REGD
init_channel_set_from_rtk_priv(_adapter * adapter,RT_CHANNEL_INFO * channel_set)734 static u8 init_channel_set_from_rtk_priv(_adapter *adapter, RT_CHANNEL_INFO *channel_set)
735 {
736 struct dvobj_priv *dvobj = adapter_to_dvobj(adapter);
737 struct rf_ctl_t *rfctl = adapter_to_rfctl(adapter);
738 struct registry_priv *regsty = adapter_to_regsty(adapter);
739 u8 ChannelPlan = rfctl->ChannelPlan;
740 struct rtw_regulation_chplan plan = {0};
741 u8 index, chanset_size = 0;
742 int i = 0;
743
744 _rtw_memset(channel_set, 0, sizeof(RT_CHANNEL_INFO) * MAX_CHANNEL_NUM);
745
746 /* Set and query channel plan from PHL*/
747 if (IS_ALPHA2_WORLDWIDE(rfctl->alpha2) || IS_ALPHA2_UNSPEC(rfctl->alpha2)) {
748 if (rtw_phl_regulation_set_domain(GET_PHL_INFO(dvobj), rfctl->ChannelPlan, REGU_RSN_DEFAULT) != true) {
749 RTW_WARN("rtw_phl_regulation_set_domain() != true\n");
750 goto exit;
751 }
752 #if CONFIG_IEEE80211_BAND_6GHZ && 0 /* Wait PHL ready */
753 /* set 6g domain code */
754 #endif
755 } else {
756 if (rtw_phl_regulation_set_country(GET_PHL_INFO(dvobj), rfctl->alpha2, REGU_RSN_DEFAULT) != true) {
757 RTW_WARN("rtw_phl_regulation_set_country() != true\n");
758 goto exit;
759 }
760 }
761
762 if (rtw_phl_regulation_query_chplan(GET_PHL_INFO(dvobj), REGULQ_CHPLAN_FULL, NULL, &plan) != true) {
763 RTW_WARN("rtw_phl_regulation_query_chplan() return false\n");
764 goto exit;
765 }
766
767 for (i = 0; i < plan.cnt; i++) {
768 if (rtw_regsty_is_excl_chs(regsty, plan.ch[i].channel) == _TRUE)
769 continue;
770
771 if (plan.ch[i].property & CH_DFS) {
772 #if CONFIG_DFS
773 channel_set[chanset_size].flags |= RTW_CHF_DFS;
774 #else
775 continue;
776 #endif
777 }
778
779 channel_set[chanset_size].band = plan.ch[i].band;
780 channel_set[chanset_size].ChannelNum = plan.ch[i].channel;
781 if (plan.ch[i].property & CH_PASSIVE)
782 channel_set[chanset_size].flags |= RTW_CHF_NO_IR;
783
784 if (channel_set[chanset_size].flags & RTW_CHF_NO_IR) {
785 if (!rtw_rfctl_reg_allow_beacon_hint(rfctl) || !rtw_chinfo_allow_beacon_hint(&channel_set[chanset_size]))
786 RTW_INFO("band:%s ch%u is NO_IR%s while beacon hint not allowed\n"
787 , band_str(plan.ch[i].band), plan.ch[i].channel, plan.ch[i].property & CH_DFS ? " DFS" : "");
788 }
789
790 chanset_size++;
791 }
792
793 #ifdef CONFIG_DFS_MASTER
794 for (i = 0; i < chanset_size; i++)
795 channel_set[i].non_ocp_end_time = rtw_get_current_time();
796 #endif
797
798 exit:
799 if (chanset_size)
800 RTW_INFO(FUNC_ADPT_FMT" ch num:%d\n", FUNC_ADPT_ARG(adapter), chanset_size);
801 else
802 RTW_WARN(FUNC_ADPT_FMT" final chset has no channel\n", FUNC_ADPT_ARG(adapter));
803
804 return chanset_size;
805 }
806 #else
init_channel_set_from_rtk_priv_2g_5g(_adapter * adapter,RT_CHANNEL_INFO * channel_set,u8 * ch_num)807 static u8 init_channel_set_from_rtk_priv_2g_5g(_adapter *adapter, RT_CHANNEL_INFO *channel_set, u8 *ch_num)
808 {
809 struct dvobj_priv *dvobj = adapter_to_dvobj(adapter);
810 struct rf_ctl_t *rfctl = adapter_to_rfctl(adapter);
811 struct registry_priv *regsty = adapter_to_regsty(adapter);
812 u8 chplan = rfctl->ChannelPlan;
813 u8 index, chanset_size = *ch_num;
814 u8 b5GBand = _FALSE, b2_4GBand = _FALSE;
815 u8 ch, attrib;
816
817 if (!rtw_is_channel_plan_valid(chplan)) {
818 RTW_ERR(FUNC_ADPT_FMT" invalid chplan:0x%02X\n", FUNC_ADPT_ARG(adapter), chplan);
819 goto exit;
820 }
821 RTW_INFO(FUNC_ADPT_FMT" chplan:0x%02X\n", FUNC_ADPT_ARG(adapter), chplan);
822
823 if (is_supported_24g(regsty->band_type) && rtw_hw_chk_band_cap(dvobj, BAND_CAP_2G))
824 b2_4GBand = _TRUE;
825
826 if (is_supported_5g(regsty->band_type) && rtw_hw_chk_band_cap(dvobj, BAND_CAP_5G))
827 b5GBand = _TRUE;
828
829 if (b2_4GBand) {
830 u8 chd_2g = RTW_ChannelPlanMap[chplan].chd_2g;
831
832 attrib = CH_LIST_ATTRIB(rtw_channel_def_2g[chd_2g]);
833
834 for (index = 0; index < CH_LIST_LEN(rtw_channel_def_2g[chd_2g]); index++) {
835 ch = CH_LIST_CH(rtw_channel_def_2g[chd_2g], index);
836 if (rtw_regsty_is_excl_chs(regsty, ch) == _TRUE)
837 continue;
838
839 if (chanset_size >= MAX_CHANNEL_NUM) {
840 RTW_WARN("chset size can't exceed MAX_CHANNEL_NUM(%u)\n", MAX_CHANNEL_NUM);
841 break;
842 }
843
844 channel_set[chanset_size].band = BAND_ON_24G;
845 channel_set[chanset_size].ChannelNum = ch;
846
847 if (ch >= 12 && ch <= 14 && (attrib & CLA_2G_12_14_PASSIVE))
848 channel_set[chanset_size].flags |= RTW_CHF_NO_IR;
849
850 if (channel_set[chanset_size].flags & RTW_CHF_NO_IR) {
851 if (!rtw_rfctl_reg_allow_beacon_hint(rfctl) || !rtw_chinfo_allow_beacon_hint(&channel_set[chanset_size]))
852 RTW_INFO("band:%s ch%u is NO_IR while beacon hint not allowed\n", band_str(BAND_ON_24G), ch);
853 }
854
855 chanset_size++;
856 }
857 }
858
859 #if CONFIG_IEEE80211_BAND_5GHZ
860 if (b5GBand) {
861 bool dfs;
862 u8 chd_5g = RTW_ChannelPlanMap[chplan].chd_5g;
863
864 attrib = CH_LIST_ATTRIB(rtw_channel_def_5g[chd_5g]);
865
866 for (index = 0; index < CH_LIST_LEN(rtw_channel_def_5g[chd_5g]); index++) {
867 ch = CH_LIST_CH(rtw_channel_def_5g[chd_5g], index);
868 if (rtw_regsty_is_excl_chs(regsty, ch) == _TRUE)
869 continue;
870 dfs = (rtw_is_5g_band2(ch) && (attrib & CLA_5G_B2_DFS))
871 || (rtw_is_5g_band3(ch) && (attrib & CLA_5G_B3_DFS))
872 || (rtw_is_5g_band4(ch) && (attrib & CLA_5G_B4_DFS));
873 #if !CONFIG_DFS
874 if (dfs)
875 continue;
876 #endif
877
878 if (chanset_size >= MAX_CHANNEL_NUM) {
879 RTW_WARN("chset size can't exceed MAX_CHANNEL_NUM(%u)\n", MAX_CHANNEL_NUM);
880 break;
881 }
882
883 channel_set[chanset_size].band = BAND_ON_5G;
884 channel_set[chanset_size].ChannelNum = ch;
885
886 if ((rtw_is_5g_band1(ch) && (attrib & CLA_5G_B1_PASSIVE)) /* band1 passive */
887 || (rtw_is_5g_band2(ch) && (attrib & CLA_5G_B2_PASSIVE)) /* band2 passive */
888 || (rtw_is_5g_band3(ch) && (attrib & CLA_5G_B3_PASSIVE)) /* band3 passive */
889 || (rtw_is_5g_band4(ch) && (attrib & CLA_5G_B4_PASSIVE)) /* band4 passive */
890 )
891 channel_set[chanset_size].flags |= RTW_CHF_NO_IR;
892
893 if (dfs)
894 channel_set[chanset_size].flags |= RTW_CHF_DFS;
895
896 if (channel_set[chanset_size].flags & RTW_CHF_NO_IR) {
897 if (!rtw_rfctl_reg_allow_beacon_hint(rfctl) || !rtw_chinfo_allow_beacon_hint(&channel_set[chanset_size]))
898 RTW_INFO("band:%s ch%u is NO_IR%s while beacon hint not allowed\n", band_str(BAND_ON_5G), ch, dfs ? " DFS" : "");
899 }
900
901 chanset_size++;
902 }
903 }
904 #endif /* CONFIG_IEEE80211_BAND_5GHZ */
905
906 exit:
907 *ch_num = chanset_size;
908
909 return chanset_size;
910 }
911
912 #if CONFIG_IEEE80211_BAND_6GHZ
init_channel_set_from_rtk_priv_6g(_adapter * adapter,RT_CHANNEL_INFO * channel_set,u8 * ch_num)913 static u8 init_channel_set_from_rtk_priv_6g(_adapter *adapter, RT_CHANNEL_INFO *channel_set, u8 *ch_num)
914 {
915 struct dvobj_priv *dvobj = adapter_to_dvobj(adapter);
916 struct rf_ctl_t *rfctl = adapter_to_rfctl(adapter);
917 struct registry_priv *regsty = adapter_to_regsty(adapter);
918 u8 chplan_6g = rfctl->chplan_6g;
919 u8 index, chanset_size = *ch_num;
920 bool band_6g = _FALSE;
921 u8 chd_6g;
922 u8 ch, attrib;
923
924 if (!rtw_is_channel_plan_6g_valid(chplan_6g)) {
925 RTW_ERR(FUNC_ADPT_FMT" invalid chplan_6g:0x%02X\n", FUNC_ADPT_ARG(adapter), chplan_6g);
926 goto exit;
927 }
928 RTW_INFO(FUNC_ADPT_FMT" chplan_6g:0x%02X\n", FUNC_ADPT_ARG(adapter), chplan_6g);
929
930 if (is_supported_6g(regsty->band_type) && rtw_hw_chk_band_cap(dvobj, BAND_CAP_6G))
931 band_6g = _TRUE;
932 if (!band_6g)
933 goto exit;
934
935 chd_6g = rtw_chplan_6g_map[chplan_6g].chd;
936
937 attrib = CH_LIST_ATTRIB(rtw_channel_def_6g[chd_6g]);
938
939 for (index = 0; index < CH_LIST_LEN(rtw_channel_def_6g[chd_6g]); index++) {
940 ch = CH_LIST_CH(rtw_channel_def_6g[chd_6g], index);
941 if (rtw_regsty_is_excl_chs_6g(regsty, ch) == _TRUE)
942 continue;
943 if (chanset_size >= MAX_CHANNEL_NUM) {
944 RTW_WARN("chset size can't exceed MAX_CHANNEL_NUM(%u)\n", MAX_CHANNEL_NUM);
945 break;
946 }
947
948 channel_set[chanset_size].band = BAND_ON_6G;
949 channel_set[chanset_size].ChannelNum = ch;
950
951 if ((rtw_is_6g_band1(ch) && (attrib & CLA_6G_B1_PASSIVE)) /* band1 passive */
952 || (rtw_is_6g_band2(ch) && (attrib & CLA_6G_B2_PASSIVE)) /* band2 passive */
953 || (rtw_is_6g_band3(ch) && (attrib & CLA_6G_B3_PASSIVE)) /* band3 passive */
954 || (rtw_is_6g_band4(ch) && (attrib & CLA_6G_B4_PASSIVE)) /* band4 passive */
955 )
956 channel_set[chanset_size].flags |= RTW_CHF_NO_IR;
957
958 chanset_size++;
959 }
960
961 exit:
962 *ch_num = chanset_size;
963
964 return chanset_size;
965 }
966 #endif /* CONFIG_IEEE80211_BAND_6GHZ */
967
init_channel_set_from_rtk_priv(_adapter * adapter,RT_CHANNEL_INFO * channel_set)968 static u8 init_channel_set_from_rtk_priv(_adapter *adapter, RT_CHANNEL_INFO *channel_set)
969 {
970 u8 chanset_size = 0;
971 #ifdef CONFIG_DFS_MASTER
972 int i;
973 #endif
974
975 _rtw_memset(channel_set, 0, sizeof(RT_CHANNEL_INFO) * MAX_CHANNEL_NUM);
976
977 init_channel_set_from_rtk_priv_2g_5g(adapter, channel_set, &chanset_size);
978
979 #if CONFIG_IEEE80211_BAND_6GHZ
980 init_channel_set_from_rtk_priv_6g(adapter, channel_set, &chanset_size);
981 #endif
982
983 #ifdef CONFIG_DFS_MASTER
984 for (i = 0; i < chanset_size; i++)
985 channel_set[i].non_ocp_end_time = rtw_get_current_time();
986 #endif
987
988 if (chanset_size)
989 RTW_INFO(FUNC_ADPT_FMT" ch num:%d\n", FUNC_ADPT_ARG(adapter), chanset_size);
990 else
991 RTW_WARN(FUNC_ADPT_FMT" final chset has no channel\n", FUNC_ADPT_ARG(adapter));
992
993 return chanset_size;
994 }
995 #endif /* defined(PHL_FEATURE_NIC) && !USE_RTW_REGD */
996
init_channel_set(_adapter * adapter)997 u8 init_channel_set(_adapter *adapter)
998 {
999 struct rf_ctl_t *rfctl = adapter_to_rfctl(adapter);
1000
1001 if (rfctl->regd_src == REGD_SRC_RTK_PRIV)
1002 rfctl->max_chan_nums = init_channel_set_from_rtk_priv(adapter, rfctl->channel_set);
1003 #ifdef CONFIG_REGD_SRC_FROM_OS
1004 else if (rfctl->regd_src == REGD_SRC_OS)
1005 rfctl->max_chan_nums = rtw_os_init_channel_set(adapter, rfctl->channel_set);
1006 #endif
1007 else {
1008 rfctl->max_chan_nums = 0;
1009 rtw_warn_on(1);
1010 }
1011
1012 return rfctl->max_chan_nums;
1013 }
1014
rtw_chset_is_dfs_range(struct _RT_CHANNEL_INFO * chset,u32 hi,u32 lo)1015 bool rtw_chset_is_dfs_range(struct _RT_CHANNEL_INFO *chset, u32 hi, u32 lo)
1016 {
1017 u8 hi_ch = rtw_freq2ch(hi);
1018 u8 lo_ch = rtw_freq2ch(lo);
1019 int i;
1020
1021 for (i = 0; i < MAX_CHANNEL_NUM && chset[i].ChannelNum != 0; i++){
1022 if (!(chset[i].flags & RTW_CHF_DFS))
1023 continue;
1024 if (hi_ch > chset[i].ChannelNum && lo_ch < chset[i].ChannelNum)
1025 return 1;
1026 }
1027
1028 return 0;
1029 }
1030
rtw_chset_is_dfs_ch(struct _RT_CHANNEL_INFO * chset,u8 ch)1031 bool rtw_chset_is_dfs_ch(struct _RT_CHANNEL_INFO *chset, u8 ch)
1032 {
1033 int i;
1034
1035 for (i = 0; i < MAX_CHANNEL_NUM && chset[i].ChannelNum != 0; i++){
1036 if (chset[i].ChannelNum == ch)
1037 return chset[i].flags & RTW_CHF_DFS ? 1 : 0;
1038 }
1039
1040 return 0;
1041 }
1042
rtw_chset_is_dfs_chbw(struct _RT_CHANNEL_INFO * chset,u8 ch,u8 bw,u8 offset)1043 bool rtw_chset_is_dfs_chbw(struct _RT_CHANNEL_INFO *chset, u8 ch, u8 bw, u8 offset)
1044 {
1045 u32 hi, lo;
1046
1047 if (!rtw_chbw_to_freq_range(ch, bw, offset, &hi, &lo))
1048 return 0;
1049
1050 return rtw_chset_is_dfs_range(chset, hi, lo);
1051 }
1052
1053 /* channel specific beacon hint rules */
1054 #ifndef RTW_CHPLAN_BEACON_HINT_ON_2G_CH_1_11
1055 #define RTW_CHPLAN_BEACON_HINT_ON_2G_CH_1_11 0
1056 #endif
1057 #ifndef RTW_CHPLAN_BEACON_HINT_ON_DFS_CH
1058 #define RTW_CHPLAN_BEACON_HINT_ON_DFS_CH 0
1059 #endif
1060
rtw_chinfo_allow_beacon_hint(struct _RT_CHANNEL_INFO * chinfo)1061 bool rtw_chinfo_allow_beacon_hint(struct _RT_CHANNEL_INFO *chinfo)
1062 {
1063 return (RTW_CHPLAN_BEACON_HINT_ON_2G_CH_1_11 || !(chinfo->band == BAND_ON_24G && chinfo->ChannelNum <= 11))
1064 && (RTW_CHPLAN_BEACON_HINT_ON_DFS_CH || !(chinfo->flags & RTW_CHF_DFS));
1065 }
1066
rtw_process_beacon_hint(_adapter * adapter,WLAN_BSSID_EX * bss)1067 u8 rtw_process_beacon_hint(_adapter *adapter, WLAN_BSSID_EX *bss)
1068 {
1069 struct rf_ctl_t *rfctl = adapter_to_rfctl(adapter);
1070 RT_CHANNEL_INFO *chset = rfctl->channel_set;
1071 u8 ch = bss->Configuration.DSConfig;
1072 int chset_idx = rtw_chset_search_ch(chset, ch);
1073 RT_CHANNEL_INFO *chinfo;
1074 u8 act_cnt = 0;
1075
1076 if (chset_idx < 0)
1077 goto exit;
1078
1079 chinfo = &chset[chset_idx];
1080
1081 if ((chinfo->flags & RTW_CHF_NO_IR)
1082 && rtw_rfctl_reg_allow_beacon_hint(rfctl)
1083 && rtw_chinfo_allow_beacon_hint(chinfo)
1084 ) {
1085 RTW_INFO("%s: change band:%s ch:%d to active\n", __func__, band_str(chinfo->band), ch);
1086 chinfo->flags &= ~RTW_CHF_NO_IR;
1087 act_cnt++;
1088 }
1089
1090 exit:
1091 return act_cnt;
1092 }
1093
1094 const char *const _regd_inr_str[] = {
1095 [RTW_REGD_SET_BY_INIT] = "INIT",
1096 [RTW_REGD_SET_BY_USER] = "USER",
1097 [RTW_REGD_SET_BY_COUNTRY_IE] = "COUNTRY_IE",
1098 [RTW_REGD_SET_BY_DRIVER] = "DRIVER",
1099 [RTW_REGD_SET_BY_CORE] = "CORE",
1100 [RTW_REGD_SET_BY_NUM] = "UNKNOWN",
1101 };
1102
1103 const char *const _regd_str[] = {
1104 [RTW_REGD_NA] = "NA",
1105 [RTW_REGD_FCC] = "FCC",
1106 [RTW_REGD_MKK] = "MKK",
1107 [RTW_REGD_ETSI] = "ETSI",
1108 [RTW_REGD_IC] = "IC",
1109 [RTW_REGD_KCC] = "KCC",
1110 [RTW_REGD_NCC] = "NCC",
1111 [RTW_REGD_ACMA] = "ACMA",
1112 [RTW_REGD_CHILE] = "CHILE",
1113 [RTW_REGD_MEX] = "MEX",
1114 [RTW_REGD_WW] = "WW",
1115 };
1116
1117 const char *const _rtw_edcca_mode_str[] = {
1118 [RTW_EDCCA_NORM] = "NORMAL",
1119 [RTW_EDCCA_ADAPT] = "ADAPT",
1120 [RTW_EDCCA_CS] = "CS",
1121 };
1122
1123 const char *const _rtw_dfs_regd_str[] = {
1124 [RTW_DFS_REGD_NONE] = "NONE",
1125 [RTW_DFS_REGD_FCC] = "FCC",
1126 [RTW_DFS_REGD_MKK] = "MKK",
1127 [RTW_DFS_REGD_ETSI] = "ETSI",
1128 };
1129
1130 const char *const _txpwr_lmt_str[] = {
1131 [TXPWR_LMT_NONE] = "NONE",
1132 [TXPWR_LMT_FCC] = "FCC",
1133 [TXPWR_LMT_MKK] = "MKK",
1134 [TXPWR_LMT_ETSI] = "ETSI",
1135 [TXPWR_LMT_IC] = "IC",
1136 [TXPWR_LMT_KCC] = "KCC",
1137 [TXPWR_LMT_NCC] = "NCC",
1138 [TXPWR_LMT_ACMA] = "ACMA",
1139 [TXPWR_LMT_CHILE] = "CHILE",
1140 [TXPWR_LMT_UKRAINE] = "UKRAINE",
1141 [TXPWR_LMT_MEXICO] = "MEXICO",
1142 [TXPWR_LMT_CN] = "CN",
1143 [TXPWR_LMT_QATAR] = "QATAR",
1144 [TXPWR_LMT_WW] = "WW",
1145 [TXPWR_LMT_NUM] = NULL,
1146 };
1147
1148 const REGULATION_TXPWR_LMT _txpwr_lmt_alternate[] = {
1149 [TXPWR_LMT_NONE] = TXPWR_LMT_NONE,
1150 [TXPWR_LMT_FCC] = TXPWR_LMT_FCC,
1151 [TXPWR_LMT_MKK] = TXPWR_LMT_MKK,
1152 [TXPWR_LMT_ETSI] = TXPWR_LMT_ETSI,
1153 [TXPWR_LMT_WW] = TXPWR_LMT_WW,
1154 [TXPWR_LMT_NUM] = TXPWR_LMT_NUM,
1155
1156 [TXPWR_LMT_IC] = TXPWR_LMT_FCC,
1157 [TXPWR_LMT_KCC] = TXPWR_LMT_ETSI,
1158 [TXPWR_LMT_NCC] = TXPWR_LMT_FCC,
1159 [TXPWR_LMT_ACMA] = TXPWR_LMT_ETSI,
1160 [TXPWR_LMT_CHILE] = TXPWR_LMT_FCC,
1161 [TXPWR_LMT_UKRAINE] = TXPWR_LMT_ETSI,
1162 [TXPWR_LMT_MEXICO] = TXPWR_LMT_FCC,
1163 [TXPWR_LMT_CN] = TXPWR_LMT_ETSI,
1164 [TXPWR_LMT_QATAR] = TXPWR_LMT_ETSI,
1165 };
1166
1167 const enum rtw_edcca_mode_t _rtw_regd_to_edcca_mode[RTW_REGD_NUM] = {
1168 [RTW_REGD_NA] = RTW_EDCCA_MODE_NUM,
1169 [RTW_REGD_MKK] = RTW_EDCCA_CS,
1170 [RTW_REGD_ETSI] = RTW_EDCCA_ADAPT,
1171 [RTW_REGD_WW] = RTW_EDCCA_ADAPT,
1172 };
1173
1174 const REGULATION_TXPWR_LMT _rtw_regd_to_txpwr_lmt[] = {
1175 [RTW_REGD_NA] = TXPWR_LMT_NUM,
1176 [RTW_REGD_FCC] = TXPWR_LMT_FCC,
1177 [RTW_REGD_MKK] = TXPWR_LMT_MKK,
1178 [RTW_REGD_ETSI] = TXPWR_LMT_ETSI,
1179 [RTW_REGD_IC] = TXPWR_LMT_IC,
1180 [RTW_REGD_KCC] = TXPWR_LMT_KCC,
1181 [RTW_REGD_NCC] = TXPWR_LMT_NCC,
1182 [RTW_REGD_ACMA] = TXPWR_LMT_ACMA,
1183 [RTW_REGD_CHILE] = TXPWR_LMT_CHILE,
1184 [RTW_REGD_MEX] = TXPWR_LMT_MEXICO,
1185 [RTW_REGD_WW] = TXPWR_LMT_WW,
1186 };
1187
rtw_get_edcca_modes_str(char * buf,u8 modes[])1188 char *rtw_get_edcca_modes_str(char *buf, u8 modes[])
1189 {
1190 #define EDCCA_MODE_SEQ_COMPARE(result, operand) (result == RTW_EDCCA_MODE_NUM ? operand : (operand == RTW_EDCCA_MODE_NUM ? result : (result != operand ? -1 : result)))
1191
1192 int mode = RTW_EDCCA_MODE_NUM;
1193 int cnt = 0;
1194
1195 mode = EDCCA_MODE_SEQ_COMPARE(mode, modes[BAND_ON_24G]);
1196 #if CONFIG_IEEE80211_BAND_5GHZ
1197 mode = EDCCA_MODE_SEQ_COMPARE(mode, modes[BAND_ON_5G]);
1198 #endif
1199 #if CONFIG_IEEE80211_BAND_6GHZ
1200 mode = EDCCA_MODE_SEQ_COMPARE(mode, modes[BAND_ON_6G]);
1201 #endif
1202
1203 if (mode != -1) { /* all available values are the same */
1204 cnt += snprintf(buf + cnt, EDCCA_MODES_STR_LEN - cnt - 1, "%s(%u)", rtw_edcca_mode_str(mode), mode);
1205 if (cnt >= EDCCA_MODES_STR_LEN - 1)
1206 goto exit;
1207 } else {
1208 cnt += snprintf(buf + cnt, EDCCA_MODES_STR_LEN - cnt - 1, "%s(%u) ", rtw_edcca_mode_str(modes[BAND_ON_24G]), modes[BAND_ON_24G]);
1209 if (cnt >= EDCCA_MODES_STR_LEN - 1)
1210 goto exit;
1211 #if CONFIG_IEEE80211_BAND_5GHZ
1212 cnt += snprintf(buf + cnt, EDCCA_MODES_STR_LEN - cnt - 1, "%s(%u) ", rtw_edcca_mode_str(modes[BAND_ON_5G]), modes[BAND_ON_5G]);
1213 if (cnt >= EDCCA_MODES_STR_LEN - 1)
1214 goto exit;
1215 #endif
1216 #if CONFIG_IEEE80211_BAND_6GHZ
1217 cnt += snprintf(buf + cnt, EDCCA_MODES_STR_LEN - cnt - 1, "%s(%u) ", rtw_edcca_mode_str(modes[BAND_ON_6G]), modes[BAND_ON_6G]);
1218 if (cnt >= EDCCA_MODES_STR_LEN - 1)
1219 goto exit;
1220 #endif
1221 buf[cnt - 1] = 0;
1222 }
1223
1224 exit:
1225 return buf;
1226 }
1227
rtw_edcca_mode_update(struct dvobj_priv * dvobj)1228 void rtw_edcca_mode_update(struct dvobj_priv *dvobj)
1229 {
1230 struct registry_priv *regsty = dvobj_to_regsty(dvobj);
1231 struct rf_ctl_t *rfctl = dvobj_to_rfctl(dvobj);
1232
1233 if (regsty->adaptivity_en == 0) {
1234 /* force disable */
1235 rfctl->edcca_mode_2g = RTW_EDCCA_NORM;
1236 #if CONFIG_IEEE80211_BAND_5GHZ
1237 rfctl->edcca_mode_5g = RTW_EDCCA_NORM;
1238 #endif
1239 #if CONFIG_IEEE80211_BAND_6GHZ
1240 rfctl->edcca_mode_6g = RTW_EDCCA_NORM;
1241 #endif
1242
1243 } else if (regsty->adaptivity_en == 1) {
1244 /* force enable */
1245 if (!regsty->adaptivity_mode) {
1246 /* adaptivity */
1247 rfctl->edcca_mode_2g = RTW_EDCCA_ADAPT;
1248 #if CONFIG_IEEE80211_BAND_5GHZ
1249 rfctl->edcca_mode_5g = RTW_EDCCA_ADAPT;
1250 #endif
1251 #if CONFIG_IEEE80211_BAND_6GHZ
1252 rfctl->edcca_mode_6g = RTW_EDCCA_ADAPT;
1253 #endif
1254 } else {
1255 /* carrier sense */
1256 rfctl->edcca_mode_2g = RTW_EDCCA_CS;
1257 #if CONFIG_IEEE80211_BAND_5GHZ
1258 rfctl->edcca_mode_5g = RTW_EDCCA_CS;
1259 #endif
1260 #if CONFIG_IEEE80211_BAND_6GHZ
1261 rfctl->edcca_mode_6g = RTW_EDCCA_CS;
1262 #endif
1263 }
1264
1265 } else {
1266 u8 modes[BAND_MAX];
1267 char buf[EDCCA_MODES_STR_LEN];
1268
1269 /* by regulatory setting */
1270 #ifdef CONFIG_REGD_SRC_FROM_OS
1271 if (rfctl->regd_src == REGD_SRC_OS
1272 && rfctl->ChannelPlan == RTW_CHPLAN_UNSPECIFIED
1273 ) {
1274 modes[BAND_ON_24G] = rfctl->edcca_mode_2g = RTW_EDCCA_ADAPT;
1275 #if CONFIG_IEEE80211_BAND_5GHZ
1276 modes[BAND_ON_5G] = rfctl->edcca_mode_5g = RTW_EDCCA_ADAPT;
1277 #endif
1278 #if CONFIG_IEEE80211_BAND_6GHZ
1279 modes[BAND_ON_6G] = rfctl->edcca_mode_6g = RTW_EDCCA_ADAPT;
1280 #endif
1281 RTW_PRINT("mapping %scountry:%c%c to edcca_mode:%s\n"
1282 , RFCTL_REG_WORLDWIDE(rfctl) ? "" : "unsupported "
1283 , rfctl->alpha2[0]
1284 , rfctl->alpha2[1]
1285 , rtw_get_edcca_modes_str(buf, modes)
1286 );
1287 } else
1288 #endif
1289 {
1290 modes[BAND_ON_24G] = rfctl->edcca_mode_2g =
1291 rfctl->edcca_mode_2g_override != RTW_EDCCA_DEF ? rfctl->edcca_mode_2g_override :
1292 rtw_regd_to_edcca_mode(rtw_chplan_get_default_regd_2g(rfctl->ChannelPlan));
1293 #if CONFIG_IEEE80211_BAND_5GHZ
1294 modes[BAND_ON_5G] = rfctl->edcca_mode_5g =
1295 rfctl->edcca_mode_5g_override != RTW_EDCCA_DEF ? rfctl->edcca_mode_5g_override :
1296 rtw_regd_to_edcca_mode(rtw_chplan_get_default_regd_5g(rfctl->ChannelPlan));
1297 #endif
1298 #if CONFIG_IEEE80211_BAND_6GHZ
1299 modes[BAND_ON_6G] = rfctl->edcca_mode_6g =
1300 rfctl->edcca_mode_6g_override != RTW_EDCCA_DEF ? rfctl->edcca_mode_6g_override :
1301 rtw_regd_to_edcca_mode(rtw_chplan_get_default_regd_6g(rfctl->chplan_6g));
1302 #endif
1303 RTW_PRINT("update edcca_mode:%s\n"
1304 , rtw_get_edcca_modes_str(buf, modes)
1305 );
1306 }
1307 }
1308 }
1309
rtw_get_edcca_mode(struct dvobj_priv * dvobj,enum band_type band)1310 u8 rtw_get_edcca_mode(struct dvobj_priv *dvobj, enum band_type band)
1311 {
1312 struct rf_ctl_t *rfctl = dvobj_to_rfctl(dvobj);
1313 u8 edcca_mode = RTW_EDCCA_NORM;
1314
1315 if (band == BAND_ON_24G)
1316 edcca_mode = rfctl->edcca_mode_2g;
1317 #if CONFIG_IEEE80211_BAND_5GHZ
1318 else if (band == BAND_ON_5G)
1319 edcca_mode = rfctl->edcca_mode_5g;
1320 #endif
1321 #if CONFIG_IEEE80211_BAND_6GHZ
1322 else if (band == BAND_ON_6G)
1323 edcca_mode = rfctl->edcca_mode_6g;
1324 #endif
1325
1326 return edcca_mode;
1327 }
1328
rtw_get_txpwr_lmt_names_str(char * buf,const char * names[],u8 unknown_bmp)1329 char *rtw_get_txpwr_lmt_names_str(char *buf, const char *names[], u8 unknown_bmp)
1330 {
1331 #define NAME_DIFF ((void *)1)
1332 /* input comes form organized database, string with same content will not have different pointer */
1333 #define NAME_SEQ_COMPARE(result, operand) (result == NULL ? operand : (operand == NULL ? result : (result != operand ? NAME_DIFF : result)))
1334
1335 const char *name = NULL;
1336 int cnt = 0;
1337
1338 name = NAME_SEQ_COMPARE(name, names[BAND_ON_24G]);
1339 #if CONFIG_IEEE80211_BAND_5GHZ
1340 name = NAME_SEQ_COMPARE(name, names[BAND_ON_5G]);
1341 #endif
1342 #if CONFIG_IEEE80211_BAND_6GHZ
1343 name = NAME_SEQ_COMPARE(name, names[BAND_ON_6G]);
1344 #endif
1345
1346 if (name != NAME_DIFF) { /* all available values are the same */
1347 cnt += snprintf(buf + cnt, TXPWR_NAMES_STR_LEN - cnt - 1, "%s%s", (unknown_bmp & BIT(BAND_ON_24G)) ? "?" : "", name);
1348 if (cnt >= TXPWR_NAMES_STR_LEN - 1)
1349 goto exit;
1350 } else {
1351 cnt += snprintf(buf + cnt, TXPWR_NAMES_STR_LEN - cnt - 1, "%s%s ", (unknown_bmp & BIT(BAND_ON_24G)) ? "?" : "", names[BAND_ON_24G]);
1352 if (cnt >= TXPWR_NAMES_STR_LEN - 1)
1353 goto exit;
1354 #if CONFIG_IEEE80211_BAND_5GHZ
1355 cnt += snprintf(buf + cnt, TXPWR_NAMES_STR_LEN - cnt - 1, "%s%s ", (unknown_bmp & BIT(BAND_ON_5G)) ? "?" : "", names[BAND_ON_5G]);
1356 if (cnt >= TXPWR_NAMES_STR_LEN - 1)
1357 goto exit;
1358 #endif
1359 #if CONFIG_IEEE80211_BAND_6GHZ
1360 cnt += snprintf(buf + cnt, TXPWR_NAMES_STR_LEN - cnt - 1, "%s%s ", (unknown_bmp & BIT(BAND_ON_6G)) ? "?" : "", names[BAND_ON_6G]);
1361 if (cnt >= TXPWR_NAMES_STR_LEN - 1)
1362 goto exit;
1363 #endif
1364 buf[cnt - 1] = 0;
1365 }
1366
1367 exit:
1368 return buf;
1369 }
1370
1371 #if CONFIG_IEEE80211_BAND_5GHZ
1372 #define COUNTRY_CHPLAN_ASSIGN_EDCCA_MODE_5G_OVERRIDE(_val) , .edcca_mode_5g_override = (_val)
1373 #else
1374 #define COUNTRY_CHPLAN_ASSIGN_EDCCA_MODE_5G_OVERRIDE(_val)
1375 #endif
1376
1377 #if CONFIG_IEEE80211_BAND_6GHZ
1378 #define COUNTRY_CHPLAN_ASSIGN_CHPLAN_6G(_val) , .chplan_6g = (_val)
1379 #define COUNTRY_CHPLAN_ASSIGN_EDCCA_MODE_6G_OVERRIDE(_val) , .edcca_mode_6g_override = (_val)
1380 #else
1381 #define COUNTRY_CHPLAN_ASSIGN_CHPLAN_6G(_val)
1382 #define COUNTRY_CHPLAN_ASSIGN_EDCCA_MODE_6G_OVERRIDE(_val)
1383 #endif
1384
1385 #if defined(CONFIG_80211AC_VHT) || defined(CONFIG_80211AX_HE)
1386 #define COUNTRY_CHPLAN_ASSIGN_PROTO_EN(_val) , .proto_en = (_val)
1387 #else
1388 #define COUNTRY_CHPLAN_ASSIGN_PROTO_EN(_val)
1389 #endif
1390
1391 #define COUNTRY_CHPLAN_ENT(_alpha2, _chplan, _chplan_6g, _txpwr_lmt_override, _en_11ax, _en_11ac) \
1392 {.alpha2 = (_alpha2), .chplan = (_chplan) \
1393 COUNTRY_CHPLAN_ASSIGN_CHPLAN_6G(_chplan_6g) \
1394 , .edcca_mode_2g_override = RTW_EDCCA_DEF \
1395 COUNTRY_CHPLAN_ASSIGN_EDCCA_MODE_5G_OVERRIDE(RTW_EDCCA_DEF) \
1396 COUNTRY_CHPLAN_ASSIGN_EDCCA_MODE_6G_OVERRIDE(RTW_EDCCA_DEF) \
1397 , .txpwr_lmt_override = TXPWR_LMT_##_txpwr_lmt_override \
1398 COUNTRY_CHPLAN_ASSIGN_PROTO_EN((_en_11ax ? CHPLAN_PROTO_EN_AX : 0) | (_en_11ac ? CHPLAN_PROTO_EN_AC : 0)) \
1399 }
1400
1401 static const struct country_chplan world_wide_chplan =
1402 COUNTRY_CHPLAN_ENT(WORLDWIDE_ALPHA2, RTW_CHPLAN_WORLDWIDE, RTW_CHPLAN_6G_WORLDWIDE, DEF, 1, 1);
1403
1404 #ifdef CONFIG_CUSTOMIZED_COUNTRY_CHPLAN_MAP
1405
1406 #include "../platform/custom_country_chplan.h"
1407
1408 #elif RTW_DEF_MODULE_REGULATORY_CERT
1409
1410 #if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8821AE_HMC_M2) /* 2013 certify */
1411 static const struct country_chplan RTL8821AE_HMC_M2_country_chplan_map[] = {
1412 COUNTRY_CHPLAN_ENT("AE", 0x35, 0x00, DEF , 0, 1),
1413 COUNTRY_CHPLAN_ENT("AL", 0x26, 0x00, DEF , 0, 1),
1414 COUNTRY_CHPLAN_ENT("AN", 0x76, 0x00, DEF , 0, 1),
1415 COUNTRY_CHPLAN_ENT("AR", 0x61, 0x00, DEF , 0, 1),
1416 COUNTRY_CHPLAN_ENT("AT", 0x26, 0x00, DEF , 0, 1),
1417 COUNTRY_CHPLAN_ENT("AU", 0x45, 0x00, DEF , 0, 1),
1418 COUNTRY_CHPLAN_ENT("AZ", 0x26, 0x00, DEF , 0, 1),
1419 COUNTRY_CHPLAN_ENT("BA", 0x26, 0x00, DEF , 0, 1),
1420 COUNTRY_CHPLAN_ENT("BD", 0x26, 0x00, DEF , 0, 1),
1421 COUNTRY_CHPLAN_ENT("BE", 0x26, 0x00, DEF , 0, 1),
1422 COUNTRY_CHPLAN_ENT("BG", 0x26, 0x00, DEF , 0, 1),
1423 COUNTRY_CHPLAN_ENT("BH", 0x48, 0x00, DEF , 0, 1),
1424 COUNTRY_CHPLAN_ENT("BO", 0x73, 0x00, DEF , 0, 1),
1425 COUNTRY_CHPLAN_ENT("BR", 0x62, 0x00, DEF , 0, 1),
1426 COUNTRY_CHPLAN_ENT("BW", 0x35, 0x00, DEF , 0, 1),
1427 COUNTRY_CHPLAN_ENT("BY", 0x26, 0x00, DEF , 0, 1),
1428 COUNTRY_CHPLAN_ENT("CA", 0x34, 0x00, DEF , 0, 1),
1429 COUNTRY_CHPLAN_ENT("CH", 0x26, 0x00, DEF , 0, 1),
1430 COUNTRY_CHPLAN_ENT("CI", 0x42, 0x00, DEF , 0, 1),
1431 COUNTRY_CHPLAN_ENT("CL", 0x30, 0x00, DEF , 0, 1),
1432 COUNTRY_CHPLAN_ENT("CN", 0x51, 0x00, DEF , 0, 1),
1433 COUNTRY_CHPLAN_ENT("CO", 0x34, 0x00, DEF , 0, 1),
1434 COUNTRY_CHPLAN_ENT("CR", 0x34, 0x00, DEF , 0, 1),
1435 COUNTRY_CHPLAN_ENT("CY", 0x26, 0x00, DEF , 0, 1),
1436 COUNTRY_CHPLAN_ENT("CZ", 0x26, 0x00, DEF , 0, 1),
1437 COUNTRY_CHPLAN_ENT("DE", 0x26, 0x00, DEF , 0, 1),
1438 COUNTRY_CHPLAN_ENT("DK", 0x26, 0x00, DEF , 0, 1),
1439 COUNTRY_CHPLAN_ENT("DO", 0x34, 0x00, DEF , 0, 1),
1440 COUNTRY_CHPLAN_ENT("DZ", 0x00, 0x00, DEF , 0, 1),
1441 COUNTRY_CHPLAN_ENT("EC", 0x34, 0x00, DEF , 0, 1),
1442 COUNTRY_CHPLAN_ENT("EE", 0x26, 0x00, DEF , 0, 1),
1443 COUNTRY_CHPLAN_ENT("EG", 0x47, 0x00, DEF , 0, 1),
1444 COUNTRY_CHPLAN_ENT("ES", 0x26, 0x00, DEF , 0, 1),
1445 COUNTRY_CHPLAN_ENT("FI", 0x26, 0x00, DEF , 0, 1),
1446 COUNTRY_CHPLAN_ENT("FR", 0x26, 0x00, DEF , 0, 1),
1447 COUNTRY_CHPLAN_ENT("GB", 0x26, 0x00, DEF , 0, 1),
1448 COUNTRY_CHPLAN_ENT("GH", 0x26, 0x00, DEF , 0, 1),
1449 COUNTRY_CHPLAN_ENT("GR", 0x26, 0x00, DEF , 0, 1),
1450 COUNTRY_CHPLAN_ENT("GT", 0x34, 0x00, DEF , 0, 1),
1451 COUNTRY_CHPLAN_ENT("HK", 0x35, 0x00, DEF , 0, 1),
1452 COUNTRY_CHPLAN_ENT("HN", 0x32, 0x00, DEF , 0, 1),
1453 COUNTRY_CHPLAN_ENT("HR", 0x26, 0x00, DEF , 0, 1),
1454 COUNTRY_CHPLAN_ENT("HU", 0x26, 0x00, DEF , 0, 1),
1455 COUNTRY_CHPLAN_ENT("ID", 0x3D, 0x00, DEF , 0, 0),
1456 COUNTRY_CHPLAN_ENT("IE", 0x26, 0x00, DEF , 0, 1),
1457 COUNTRY_CHPLAN_ENT("IL", 0x47, 0x00, DEF , 0, 1),
1458 COUNTRY_CHPLAN_ENT("IN", 0x48, 0x00, DEF , 0, 1),
1459 COUNTRY_CHPLAN_ENT("IS", 0x26, 0x00, DEF , 0, 1),
1460 COUNTRY_CHPLAN_ENT("IT", 0x26, 0x00, DEF , 0, 1),
1461 COUNTRY_CHPLAN_ENT("JM", 0x32, 0x00, DEF , 0, 1),
1462 COUNTRY_CHPLAN_ENT("JO", 0x49, 0x00, DEF , 0, 1),
1463 COUNTRY_CHPLAN_ENT("JP", 0x27, 0x00, DEF , 0, 1),
1464 COUNTRY_CHPLAN_ENT("KE", 0x47, 0x00, DEF , 0, 1),
1465 COUNTRY_CHPLAN_ENT("KG", 0x26, 0x00, DEF , 0, 1),
1466 COUNTRY_CHPLAN_ENT("KH", 0x26, 0x00, DEF , 0, 1),
1467 COUNTRY_CHPLAN_ENT("KR", 0x28, 0x00, DEF , 0, 1),
1468 COUNTRY_CHPLAN_ENT("KW", 0x26, 0x00, DEF , 0, 1),
1469 COUNTRY_CHPLAN_ENT("LB", 0x26, 0x00, DEF , 0, 1),
1470 COUNTRY_CHPLAN_ENT("LI", 0x26, 0x00, DEF , 0, 1),
1471 COUNTRY_CHPLAN_ENT("LK", 0x26, 0x00, DEF , 0, 1),
1472 COUNTRY_CHPLAN_ENT("LS", 0x26, 0x00, DEF , 0, 1),
1473 COUNTRY_CHPLAN_ENT("LT", 0x26, 0x00, DEF , 0, 1),
1474 COUNTRY_CHPLAN_ENT("LU", 0x26, 0x00, DEF , 0, 1),
1475 COUNTRY_CHPLAN_ENT("LV", 0x26, 0x00, DEF , 0, 1),
1476 COUNTRY_CHPLAN_ENT("MA", 0x47, 0x00, DEF , 0, 1),
1477 COUNTRY_CHPLAN_ENT("MC", 0x26, 0x00, DEF , 0, 1),
1478 COUNTRY_CHPLAN_ENT("MD", 0x26, 0x00, DEF , 0, 1),
1479 COUNTRY_CHPLAN_ENT("ME", 0x26, 0x00, DEF , 0, 1),
1480 COUNTRY_CHPLAN_ENT("MK", 0x26, 0x00, DEF , 0, 1),
1481 COUNTRY_CHPLAN_ENT("MT", 0x26, 0x00, DEF , 0, 1),
1482 COUNTRY_CHPLAN_ENT("MX", 0x34, 0x00, DEF , 0, 1),
1483 COUNTRY_CHPLAN_ENT("MY", 0x47, 0x00, DEF , 0, 1),
1484 COUNTRY_CHPLAN_ENT("MZ", 0x26, 0x00, DEF , 0, 1),
1485 COUNTRY_CHPLAN_ENT("NG", 0x75, 0x00, DEF , 0, 1),
1486 COUNTRY_CHPLAN_ENT("NI", 0x34, 0x00, DEF , 0, 1),
1487 COUNTRY_CHPLAN_ENT("NL", 0x26, 0x00, DEF , 0, 1),
1488 COUNTRY_CHPLAN_ENT("NO", 0x26, 0x00, DEF , 0, 1),
1489 COUNTRY_CHPLAN_ENT("NZ", 0x45, 0x00, DEF , 0, 1),
1490 COUNTRY_CHPLAN_ENT("OM", 0x26, 0x00, DEF , 0, 1),
1491 COUNTRY_CHPLAN_ENT("PA", 0x34, 0x00, DEF , 0, 1),
1492 COUNTRY_CHPLAN_ENT("PE", 0x34, 0x00, DEF , 0, 1),
1493 COUNTRY_CHPLAN_ENT("PG", 0x35, 0x00, DEF , 0, 1),
1494 COUNTRY_CHPLAN_ENT("PH", 0x35, 0x00, DEF , 0, 1),
1495 COUNTRY_CHPLAN_ENT("PK", 0x51, 0x00, DEF , 0, 1),
1496 COUNTRY_CHPLAN_ENT("PL", 0x26, 0x00, DEF , 0, 1),
1497 COUNTRY_CHPLAN_ENT("PR", 0x34, 0x00, DEF , 0, 1),
1498 COUNTRY_CHPLAN_ENT("PT", 0x26, 0x00, DEF , 0, 1),
1499 COUNTRY_CHPLAN_ENT("PY", 0x34, 0x00, DEF , 0, 1),
1500 COUNTRY_CHPLAN_ENT("QA", 0x35, 0x00, DEF , 0, 1),
1501 COUNTRY_CHPLAN_ENT("RO", 0x26, 0x00, DEF , 0, 1),
1502 COUNTRY_CHPLAN_ENT("RS", 0x26, 0x00, DEF , 0, 1),
1503 COUNTRY_CHPLAN_ENT("RU", 0x59, 0x00, DEF , 0, 1),
1504 COUNTRY_CHPLAN_ENT("SA", 0x35, 0x00, DEF , 0, 1),
1505 COUNTRY_CHPLAN_ENT("SE", 0x26, 0x00, DEF , 0, 1),
1506 COUNTRY_CHPLAN_ENT("SG", 0x35, 0x00, DEF , 0, 1),
1507 COUNTRY_CHPLAN_ENT("SI", 0x26, 0x00, DEF , 0, 1),
1508 COUNTRY_CHPLAN_ENT("SK", 0x26, 0x00, DEF , 0, 1),
1509 COUNTRY_CHPLAN_ENT("SN", 0x26, 0x00, DEF , 0, 1),
1510 COUNTRY_CHPLAN_ENT("SV", 0x30, 0x00, DEF , 0, 1),
1511 COUNTRY_CHPLAN_ENT("TH", 0x35, 0x00, DEF , 0, 1),
1512 COUNTRY_CHPLAN_ENT("TN", 0x47, 0x00, DEF , 0, 1),
1513 COUNTRY_CHPLAN_ENT("TR", 0x26, 0x00, DEF , 0, 1),
1514 COUNTRY_CHPLAN_ENT("TT", 0x76, 0x00, DEF , 0, 1),
1515 COUNTRY_CHPLAN_ENT("TW", 0x39, 0x00, DEF , 0, 1),
1516 COUNTRY_CHPLAN_ENT("UA", 0x36, 0x00, DEF , 0, 0),
1517 COUNTRY_CHPLAN_ENT("UG", 0x26, 0x00, DEF , 0, 1),
1518 COUNTRY_CHPLAN_ENT("US", 0x34, 0x00, DEF , 0, 1),
1519 COUNTRY_CHPLAN_ENT("UY", 0x30, 0x00, DEF , 0, 1),
1520 COUNTRY_CHPLAN_ENT("VE", 0x30, 0x00, DEF , 0, 1),
1521 COUNTRY_CHPLAN_ENT("VN", 0x35, 0x00, DEF , 0, 1),
1522 COUNTRY_CHPLAN_ENT("ZA", 0x35, 0x00, DEF , 0, 1),
1523 COUNTRY_CHPLAN_ENT("ZW", 0x26, 0x00, DEF , 0, 1),
1524 };
1525 #endif
1526
1527 #if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8821AU) /* 2014 certify */
1528 static const struct country_chplan RTL8821AU_country_chplan_map[] = {
1529 COUNTRY_CHPLAN_ENT("AE", 0x35, 0x00, DEF , 0, 1),
1530 COUNTRY_CHPLAN_ENT("AR", 0x61, 0x00, DEF , 0, 1),
1531 COUNTRY_CHPLAN_ENT("AT", 0x26, 0x00, DEF , 0, 1),
1532 COUNTRY_CHPLAN_ENT("AU", 0x45, 0x00, DEF , 0, 1),
1533 COUNTRY_CHPLAN_ENT("BE", 0x26, 0x00, DEF , 0, 1),
1534 COUNTRY_CHPLAN_ENT("CA", 0x34, 0x00, DEF , 0, 1),
1535 COUNTRY_CHPLAN_ENT("CH", 0x26, 0x00, DEF , 0, 1),
1536 COUNTRY_CHPLAN_ENT("CN", 0x48, 0x00, DEF , 0, 1),
1537 COUNTRY_CHPLAN_ENT("CY", 0x26, 0x00, DEF , 0, 1),
1538 COUNTRY_CHPLAN_ENT("CZ", 0x26, 0x00, DEF , 0, 1),
1539 COUNTRY_CHPLAN_ENT("DE", 0x26, 0x00, DEF , 0, 1),
1540 COUNTRY_CHPLAN_ENT("DK", 0x26, 0x00, DEF , 0, 1),
1541 COUNTRY_CHPLAN_ENT("EE", 0x26, 0x00, DEF , 0, 1),
1542 COUNTRY_CHPLAN_ENT("ES", 0x26, 0x00, DEF , 0, 1),
1543 COUNTRY_CHPLAN_ENT("FI", 0x26, 0x00, DEF , 0, 1),
1544 COUNTRY_CHPLAN_ENT("FR", 0x26, 0x00, DEF , 0, 1),
1545 COUNTRY_CHPLAN_ENT("GB", 0x26, 0x00, DEF , 0, 1),
1546 COUNTRY_CHPLAN_ENT("GR", 0x26, 0x00, DEF , 0, 1),
1547 COUNTRY_CHPLAN_ENT("HK", 0x35, 0x00, DEF , 0, 1),
1548 COUNTRY_CHPLAN_ENT("HU", 0x26, 0x00, DEF , 0, 1),
1549 COUNTRY_CHPLAN_ENT("ID", 0x3D, 0x00, DEF , 0, 0),
1550 COUNTRY_CHPLAN_ENT("IE", 0x26, 0x00, DEF , 0, 1),
1551 COUNTRY_CHPLAN_ENT("IS", 0x26, 0x00, DEF , 0, 1),
1552 COUNTRY_CHPLAN_ENT("IT", 0x26, 0x00, DEF , 0, 1),
1553 COUNTRY_CHPLAN_ENT("JO", 0x49, 0x00, DEF , 0, 1),
1554 COUNTRY_CHPLAN_ENT("JP", 0x27, 0x00, DEF , 0, 1),
1555 COUNTRY_CHPLAN_ENT("KR", 0x28, 0x00, DEF , 0, 1),
1556 COUNTRY_CHPLAN_ENT("KW", 0x26, 0x00, DEF , 0, 1),
1557 COUNTRY_CHPLAN_ENT("LI", 0x26, 0x00, DEF , 0, 1),
1558 COUNTRY_CHPLAN_ENT("LT", 0x26, 0x00, DEF , 0, 1),
1559 COUNTRY_CHPLAN_ENT("LU", 0x26, 0x00, DEF , 0, 1),
1560 COUNTRY_CHPLAN_ENT("LV", 0x26, 0x00, DEF , 0, 1),
1561 COUNTRY_CHPLAN_ENT("MC", 0x26, 0x00, DEF , 0, 1),
1562 COUNTRY_CHPLAN_ENT("MT", 0x26, 0x00, DEF , 0, 1),
1563 COUNTRY_CHPLAN_ENT("NL", 0x26, 0x00, DEF , 0, 1),
1564 COUNTRY_CHPLAN_ENT("NO", 0x26, 0x00, DEF , 0, 1),
1565 COUNTRY_CHPLAN_ENT("NZ", 0x45, 0x00, DEF , 0, 1),
1566 COUNTRY_CHPLAN_ENT("PL", 0x26, 0x00, DEF , 0, 1),
1567 COUNTRY_CHPLAN_ENT("PT", 0x26, 0x00, DEF , 0, 1),
1568 COUNTRY_CHPLAN_ENT("RU", 0x59, 0x00, DEF , 0, 0),
1569 COUNTRY_CHPLAN_ENT("SA", 0x35, 0x00, DEF , 0, 1),
1570 COUNTRY_CHPLAN_ENT("SE", 0x26, 0x00, DEF , 0, 1),
1571 COUNTRY_CHPLAN_ENT("SG", 0x35, 0x00, DEF , 0, 1),
1572 COUNTRY_CHPLAN_ENT("SI", 0x26, 0x00, DEF , 0, 1),
1573 COUNTRY_CHPLAN_ENT("SK", 0x26, 0x00, DEF , 0, 1),
1574 COUNTRY_CHPLAN_ENT("TW", 0x39, 0x00, DEF , 0, 1),
1575 COUNTRY_CHPLAN_ENT("UA", 0x36, 0x00, DEF , 0, 0),
1576 COUNTRY_CHPLAN_ENT("US", 0x34, 0x00, DEF , 0, 1),
1577 };
1578 #endif
1579
1580 #if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8812AENF_NGFF) /* 2014 certify */
1581 static const struct country_chplan RTL8812AENF_NGFF_country_chplan_map[] = {
1582 COUNTRY_CHPLAN_ENT("JP", 0x27, 0x00, DEF , 0, 1),
1583 COUNTRY_CHPLAN_ENT("TW", 0x39, 0x00, DEF , 0, 1),
1584 COUNTRY_CHPLAN_ENT("US", 0x34, 0x00, DEF , 0, 1),
1585 };
1586 #endif
1587
1588 #if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8812AEBT_HMC) /* 2013 certify */
1589 static const struct country_chplan RTL8812AEBT_HMC_country_chplan_map[] = {
1590 COUNTRY_CHPLAN_ENT("AE", 0x35, 0x00, DEF , 0, 1),
1591 COUNTRY_CHPLAN_ENT("AT", 0x26, 0x00, DEF , 0, 1),
1592 COUNTRY_CHPLAN_ENT("AU", 0x45, 0x00, DEF , 0, 1),
1593 COUNTRY_CHPLAN_ENT("BE", 0x26, 0x00, DEF , 0, 1),
1594 COUNTRY_CHPLAN_ENT("CA", 0x34, 0x00, DEF , 0, 1),
1595 COUNTRY_CHPLAN_ENT("CH", 0x26, 0x00, DEF , 0, 1),
1596 COUNTRY_CHPLAN_ENT("CN", 0x48, 0x00, DEF , 0, 1),
1597 COUNTRY_CHPLAN_ENT("CY", 0x26, 0x00, DEF , 0, 1),
1598 COUNTRY_CHPLAN_ENT("CZ", 0x26, 0x00, DEF , 0, 1),
1599 COUNTRY_CHPLAN_ENT("DE", 0x26, 0x00, DEF , 0, 1),
1600 COUNTRY_CHPLAN_ENT("DK", 0x26, 0x00, DEF , 0, 1),
1601 COUNTRY_CHPLAN_ENT("EE", 0x26, 0x00, DEF , 0, 1),
1602 COUNTRY_CHPLAN_ENT("ES", 0x26, 0x00, DEF , 0, 1),
1603 COUNTRY_CHPLAN_ENT("FI", 0x26, 0x00, DEF , 0, 1),
1604 COUNTRY_CHPLAN_ENT("FR", 0x26, 0x00, DEF , 0, 1),
1605 COUNTRY_CHPLAN_ENT("GB", 0x26, 0x00, DEF , 0, 1),
1606 COUNTRY_CHPLAN_ENT("GR", 0x26, 0x00, DEF , 0, 1),
1607 COUNTRY_CHPLAN_ENT("HK", 0x35, 0x00, DEF , 0, 1),
1608 COUNTRY_CHPLAN_ENT("HR", 0x26, 0x00, DEF , 0, 1),
1609 COUNTRY_CHPLAN_ENT("HU", 0x26, 0x00, DEF , 0, 1),
1610 COUNTRY_CHPLAN_ENT("IE", 0x26, 0x00, DEF , 0, 1),
1611 COUNTRY_CHPLAN_ENT("IS", 0x26, 0x00, DEF , 0, 1),
1612 COUNTRY_CHPLAN_ENT("IT", 0x26, 0x00, DEF , 0, 1),
1613 COUNTRY_CHPLAN_ENT("JO", 0x49, 0x00, DEF , 0, 1),
1614 COUNTRY_CHPLAN_ENT("JP", 0x27, 0x00, DEF , 0, 1),
1615 COUNTRY_CHPLAN_ENT("KE", 0x47, 0x00, DEF , 0, 1),
1616 COUNTRY_CHPLAN_ENT("KR", 0x28, 0x00, DEF , 0, 1),
1617 COUNTRY_CHPLAN_ENT("KW", 0x26, 0x00, DEF , 0, 1),
1618 COUNTRY_CHPLAN_ENT("LI", 0x26, 0x00, DEF , 0, 1),
1619 COUNTRY_CHPLAN_ENT("LT", 0x26, 0x00, DEF , 0, 1),
1620 COUNTRY_CHPLAN_ENT("LU", 0x26, 0x00, DEF , 0, 1),
1621 COUNTRY_CHPLAN_ENT("LV", 0x26, 0x00, DEF , 0, 1),
1622 COUNTRY_CHPLAN_ENT("MC", 0x26, 0x00, DEF , 0, 1),
1623 COUNTRY_CHPLAN_ENT("MT", 0x26, 0x00, DEF , 0, 1),
1624 COUNTRY_CHPLAN_ENT("NG", 0x75, 0x00, DEF , 0, 1),
1625 COUNTRY_CHPLAN_ENT("NL", 0x26, 0x00, DEF , 0, 1),
1626 COUNTRY_CHPLAN_ENT("NO", 0x26, 0x00, DEF , 0, 1),
1627 COUNTRY_CHPLAN_ENT("NZ", 0x45, 0x00, DEF , 0, 1),
1628 COUNTRY_CHPLAN_ENT("OM", 0x26, 0x00, DEF , 0, 1),
1629 COUNTRY_CHPLAN_ENT("PL", 0x26, 0x00, DEF , 0, 1),
1630 COUNTRY_CHPLAN_ENT("PT", 0x26, 0x00, DEF , 0, 1),
1631 COUNTRY_CHPLAN_ENT("QA", 0x35, 0x00, DEF , 0, 1),
1632 COUNTRY_CHPLAN_ENT("RU", 0x59, 0x00, DEF , 0, 0),
1633 COUNTRY_CHPLAN_ENT("SA", 0x35, 0x00, DEF , 0, 1),
1634 COUNTRY_CHPLAN_ENT("SE", 0x26, 0x00, DEF , 0, 1),
1635 COUNTRY_CHPLAN_ENT("SG", 0x35, 0x00, DEF , 0, 1),
1636 COUNTRY_CHPLAN_ENT("SI", 0x26, 0x00, DEF , 0, 1),
1637 COUNTRY_CHPLAN_ENT("SK", 0x26, 0x00, DEF , 0, 1),
1638 COUNTRY_CHPLAN_ENT("TW", 0x39, 0x00, DEF , 0, 1),
1639 COUNTRY_CHPLAN_ENT("UA", 0x36, 0x00, DEF , 0, 0),
1640 COUNTRY_CHPLAN_ENT("US", 0x34, 0x00, DEF , 0, 1),
1641 };
1642 #endif
1643
1644 #if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8188EE_HMC_M2) /* 2012 certify */
1645 static const struct country_chplan RTL8188EE_HMC_M2_country_chplan_map[] = {
1646 COUNTRY_CHPLAN_ENT("AE", 0x35, 0x00, DEF , 0, 1),
1647 COUNTRY_CHPLAN_ENT("AL", 0x26, 0x00, DEF , 0, 1),
1648 COUNTRY_CHPLAN_ENT("AM", 0x26, 0x00, DEF , 0, 1),
1649 COUNTRY_CHPLAN_ENT("AN", 0x76, 0x00, DEF , 0, 1),
1650 COUNTRY_CHPLAN_ENT("AR", 0x61, 0x00, DEF , 0, 1),
1651 COUNTRY_CHPLAN_ENT("AT", 0x26, 0x00, DEF , 0, 1),
1652 COUNTRY_CHPLAN_ENT("AU", 0x45, 0x00, DEF , 0, 1),
1653 COUNTRY_CHPLAN_ENT("AW", 0x34, 0x00, DEF , 0, 1),
1654 COUNTRY_CHPLAN_ENT("AZ", 0x26, 0x00, DEF , 0, 1),
1655 COUNTRY_CHPLAN_ENT("BA", 0x26, 0x00, DEF , 0, 1),
1656 COUNTRY_CHPLAN_ENT("BB", 0x34, 0x00, DEF , 0, 1),
1657 COUNTRY_CHPLAN_ENT("BD", 0x26, 0x00, DEF , 0, 1),
1658 COUNTRY_CHPLAN_ENT("BE", 0x26, 0x00, DEF , 0, 1),
1659 COUNTRY_CHPLAN_ENT("BF", 0x26, 0x00, DEF , 0, 1),
1660 COUNTRY_CHPLAN_ENT("BG", 0x26, 0x00, DEF , 0, 1),
1661 COUNTRY_CHPLAN_ENT("BH", 0x48, 0x00, DEF , 0, 1),
1662 COUNTRY_CHPLAN_ENT("BI", 0x26, 0x00, DEF , 0, 1),
1663 COUNTRY_CHPLAN_ENT("BJ", 0x26, 0x00, DEF , 0, 1),
1664 COUNTRY_CHPLAN_ENT("BN", 0x47, 0x00, DEF , 0, 1),
1665 COUNTRY_CHPLAN_ENT("BO", 0x73, 0x00, DEF , 0, 1),
1666 COUNTRY_CHPLAN_ENT("BR", 0x62, 0x00, DEF , 0, 1),
1667 COUNTRY_CHPLAN_ENT("BW", 0x35, 0x00, DEF , 0, 1),
1668 COUNTRY_CHPLAN_ENT("BY", 0x26, 0x00, DEF , 0, 1),
1669 COUNTRY_CHPLAN_ENT("CA", 0x20, 0x00, DEF , 0, 1),
1670 COUNTRY_CHPLAN_ENT("CD", 0x26, 0x00, DEF , 0, 1),
1671 COUNTRY_CHPLAN_ENT("CF", 0x26, 0x00, DEF , 0, 1),
1672 COUNTRY_CHPLAN_ENT("CG", 0x26, 0x00, DEF , 0, 1),
1673 COUNTRY_CHPLAN_ENT("CH", 0x26, 0x00, DEF , 0, 1),
1674 COUNTRY_CHPLAN_ENT("CI", 0x42, 0x00, DEF , 0, 1),
1675 COUNTRY_CHPLAN_ENT("CL", 0x2D, 0x00, DEF , 0, 1),
1676 COUNTRY_CHPLAN_ENT("CM", 0x26, 0x00, DEF , 0, 1),
1677 COUNTRY_CHPLAN_ENT("CN", 0x48, 0x00, DEF , 0, 1),
1678 COUNTRY_CHPLAN_ENT("CO", 0x34, 0x00, DEF , 0, 1),
1679 COUNTRY_CHPLAN_ENT("CR", 0x34, 0x00, DEF , 0, 1),
1680 COUNTRY_CHPLAN_ENT("CV", 0x26, 0x00, DEF , 0, 1),
1681 COUNTRY_CHPLAN_ENT("CY", 0x26, 0x00, DEF , 0, 1),
1682 COUNTRY_CHPLAN_ENT("CZ", 0x26, 0x00, DEF , 0, 1),
1683 COUNTRY_CHPLAN_ENT("DE", 0x26, 0x00, DEF , 0, 1),
1684 COUNTRY_CHPLAN_ENT("DK", 0x26, 0x00, DEF , 0, 1),
1685 COUNTRY_CHPLAN_ENT("DO", 0x34, 0x00, DEF , 0, 1),
1686 COUNTRY_CHPLAN_ENT("DZ", 0x00, 0x00, DEF , 0, 1),
1687 COUNTRY_CHPLAN_ENT("EC", 0x34, 0x00, DEF , 0, 1),
1688 COUNTRY_CHPLAN_ENT("EE", 0x26, 0x00, DEF , 0, 1),
1689 COUNTRY_CHPLAN_ENT("EG", 0x47, 0x00, DEF , 0, 1),
1690 COUNTRY_CHPLAN_ENT("ES", 0x26, 0x00, DEF , 0, 1),
1691 COUNTRY_CHPLAN_ENT("ET", 0x26, 0x00, DEF , 0, 1),
1692 COUNTRY_CHPLAN_ENT("FI", 0x26, 0x00, DEF , 0, 1),
1693 COUNTRY_CHPLAN_ENT("FR", 0x26, 0x00, DEF , 0, 1),
1694 COUNTRY_CHPLAN_ENT("GA", 0x26, 0x00, DEF , 0, 1),
1695 COUNTRY_CHPLAN_ENT("GB", 0x26, 0x00, DEF , 0, 1),
1696 COUNTRY_CHPLAN_ENT("GD", 0x76, 0x00, DEF , 0, 1),
1697 COUNTRY_CHPLAN_ENT("GH", 0x26, 0x00, DEF , 0, 1),
1698 COUNTRY_CHPLAN_ENT("GM", 0x26, 0x00, DEF , 0, 1),
1699 COUNTRY_CHPLAN_ENT("GN", 0x26, 0x00, DEF , 0, 1),
1700 COUNTRY_CHPLAN_ENT("GQ", 0x26, 0x00, DEF , 0, 1),
1701 COUNTRY_CHPLAN_ENT("GR", 0x26, 0x00, DEF , 0, 1),
1702 COUNTRY_CHPLAN_ENT("GT", 0x34, 0x00, DEF , 0, 1),
1703 COUNTRY_CHPLAN_ENT("GW", 0x26, 0x00, DEF , 0, 1),
1704 COUNTRY_CHPLAN_ENT("HK", 0x35, 0x00, DEF , 0, 1),
1705 COUNTRY_CHPLAN_ENT("HN", 0x32, 0x00, DEF , 0, 1),
1706 COUNTRY_CHPLAN_ENT("HR", 0x26, 0x00, DEF , 0, 1),
1707 COUNTRY_CHPLAN_ENT("HT", 0x34, 0x00, DEF , 0, 1),
1708 COUNTRY_CHPLAN_ENT("HU", 0x26, 0x00, DEF , 0, 1),
1709 COUNTRY_CHPLAN_ENT("ID", 0x5D, 0x00, DEF , 0, 1),
1710 COUNTRY_CHPLAN_ENT("IE", 0x26, 0x00, DEF , 0, 1),
1711 COUNTRY_CHPLAN_ENT("IL", 0x47, 0x00, DEF , 0, 1),
1712 COUNTRY_CHPLAN_ENT("IN", 0x48, 0x00, DEF , 0, 1),
1713 COUNTRY_CHPLAN_ENT("IS", 0x26, 0x00, DEF , 0, 1),
1714 COUNTRY_CHPLAN_ENT("IT", 0x26, 0x00, DEF , 0, 1),
1715 COUNTRY_CHPLAN_ENT("JM", 0x32, 0x00, DEF , 0, 1),
1716 COUNTRY_CHPLAN_ENT("JO", 0x49, 0x00, DEF , 0, 1),
1717 COUNTRY_CHPLAN_ENT("JP", 0x27, 0x00, DEF , 0, 1),
1718 COUNTRY_CHPLAN_ENT("KE", 0x47, 0x00, DEF , 0, 1),
1719 COUNTRY_CHPLAN_ENT("KG", 0x26, 0x00, DEF , 0, 1),
1720 COUNTRY_CHPLAN_ENT("KH", 0x26, 0x00, DEF , 0, 1),
1721 COUNTRY_CHPLAN_ENT("KR", 0x28, 0x00, DEF , 0, 1),
1722 COUNTRY_CHPLAN_ENT("KW", 0x26, 0x00, DEF , 0, 1),
1723 COUNTRY_CHPLAN_ENT("LB", 0x26, 0x00, DEF , 0, 1),
1724 COUNTRY_CHPLAN_ENT("LI", 0x26, 0x00, DEF , 0, 1),
1725 COUNTRY_CHPLAN_ENT("LK", 0x26, 0x00, DEF , 0, 1),
1726 COUNTRY_CHPLAN_ENT("LR", 0x26, 0x00, DEF , 0, 1),
1727 COUNTRY_CHPLAN_ENT("LS", 0x26, 0x00, DEF , 0, 1),
1728 COUNTRY_CHPLAN_ENT("LT", 0x26, 0x00, DEF , 0, 1),
1729 COUNTRY_CHPLAN_ENT("LU", 0x26, 0x00, DEF , 0, 1),
1730 COUNTRY_CHPLAN_ENT("LV", 0x26, 0x00, DEF , 0, 1),
1731 COUNTRY_CHPLAN_ENT("MA", 0x47, 0x00, DEF , 0, 1),
1732 COUNTRY_CHPLAN_ENT("MC", 0x26, 0x00, DEF , 0, 1),
1733 COUNTRY_CHPLAN_ENT("MD", 0x26, 0x00, DEF , 0, 1),
1734 COUNTRY_CHPLAN_ENT("ME", 0x26, 0x00, DEF , 0, 1),
1735 COUNTRY_CHPLAN_ENT("MK", 0x26, 0x00, DEF , 0, 1),
1736 COUNTRY_CHPLAN_ENT("ML", 0x26, 0x00, DEF , 0, 1),
1737 COUNTRY_CHPLAN_ENT("MT", 0x26, 0x00, DEF , 0, 1),
1738 COUNTRY_CHPLAN_ENT("MU", 0x26, 0x00, DEF , 0, 1),
1739 COUNTRY_CHPLAN_ENT("MW", 0x26, 0x00, DEF , 0, 1),
1740 COUNTRY_CHPLAN_ENT("MX", 0x34, 0x00, DEF , 0, 1),
1741 COUNTRY_CHPLAN_ENT("MY", 0x63, 0x00, DEF , 0, 1),
1742 COUNTRY_CHPLAN_ENT("MZ", 0x26, 0x00, DEF , 0, 1),
1743 COUNTRY_CHPLAN_ENT("NE", 0x26, 0x00, DEF , 0, 1),
1744 COUNTRY_CHPLAN_ENT("NG", 0x75, 0x00, DEF , 0, 1),
1745 COUNTRY_CHPLAN_ENT("NI", 0x34, 0x00, DEF , 0, 1),
1746 COUNTRY_CHPLAN_ENT("NL", 0x26, 0x00, DEF , 0, 1),
1747 COUNTRY_CHPLAN_ENT("NO", 0x26, 0x00, DEF , 0, 1),
1748 COUNTRY_CHPLAN_ENT("NP", 0x48, 0x00, DEF , 0, 1),
1749 COUNTRY_CHPLAN_ENT("NZ", 0x45, 0x00, DEF , 0, 1),
1750 COUNTRY_CHPLAN_ENT("OM", 0x26, 0x00, DEF , 0, 1),
1751 COUNTRY_CHPLAN_ENT("PA", 0x34, 0x00, DEF , 0, 1),
1752 COUNTRY_CHPLAN_ENT("PE", 0x34, 0x00, DEF , 0, 1),
1753 COUNTRY_CHPLAN_ENT("PG", 0x35, 0x00, DEF , 0, 1),
1754 COUNTRY_CHPLAN_ENT("PH", 0x35, 0x00, DEF , 0, 1),
1755 COUNTRY_CHPLAN_ENT("PK", 0x51, 0x00, DEF , 0, 1),
1756 COUNTRY_CHPLAN_ENT("PL", 0x26, 0x00, DEF , 0, 1),
1757 COUNTRY_CHPLAN_ENT("PR", 0x34, 0x00, DEF , 0, 1),
1758 COUNTRY_CHPLAN_ENT("PT", 0x26, 0x00, DEF , 0, 1),
1759 COUNTRY_CHPLAN_ENT("PY", 0x34, 0x00, DEF , 0, 1),
1760 COUNTRY_CHPLAN_ENT("QA", 0x35, 0x00, DEF , 0, 1),
1761 COUNTRY_CHPLAN_ENT("RO", 0x26, 0x00, DEF , 0, 1),
1762 COUNTRY_CHPLAN_ENT("RS", 0x26, 0x00, DEF , 0, 1),
1763 COUNTRY_CHPLAN_ENT("RU", 0x59, 0x00, DEF , 0, 1),
1764 COUNTRY_CHPLAN_ENT("RW", 0x26, 0x00, DEF , 0, 1),
1765 COUNTRY_CHPLAN_ENT("SA", 0x35, 0x00, DEF , 0, 1),
1766 COUNTRY_CHPLAN_ENT("SC", 0x34, 0x00, DEF , 0, 1),
1767 COUNTRY_CHPLAN_ENT("SE", 0x26, 0x00, DEF , 0, 1),
1768 COUNTRY_CHPLAN_ENT("SG", 0x35, 0x00, DEF , 0, 1),
1769 COUNTRY_CHPLAN_ENT("SI", 0x26, 0x00, DEF , 0, 1),
1770 COUNTRY_CHPLAN_ENT("SK", 0x26, 0x00, DEF , 0, 1),
1771 COUNTRY_CHPLAN_ENT("SL", 0x26, 0x00, DEF , 0, 1),
1772 COUNTRY_CHPLAN_ENT("SN", 0x26, 0x00, DEF , 0, 1),
1773 COUNTRY_CHPLAN_ENT("SV", 0x30, 0x00, DEF , 0, 1),
1774 COUNTRY_CHPLAN_ENT("TD", 0x26, 0x00, DEF , 0, 1),
1775 COUNTRY_CHPLAN_ENT("TG", 0x26, 0x00, DEF , 0, 1),
1776 COUNTRY_CHPLAN_ENT("TH", 0x35, 0x00, DEF , 0, 1),
1777 COUNTRY_CHPLAN_ENT("TN", 0x47, 0x00, DEF , 0, 1),
1778 COUNTRY_CHPLAN_ENT("TR", 0x26, 0x00, DEF , 0, 1),
1779 COUNTRY_CHPLAN_ENT("TT", 0x76, 0x00, DEF , 0, 1),
1780 COUNTRY_CHPLAN_ENT("TW", 0x39, 0x00, DEF , 0, 1),
1781 COUNTRY_CHPLAN_ENT("TZ", 0x26, 0x00, DEF , 0, 1),
1782 COUNTRY_CHPLAN_ENT("UA", 0x35, 0x00, DEF , 0, 1),
1783 COUNTRY_CHPLAN_ENT("UG", 0x26, 0x00, DEF , 0, 1),
1784 COUNTRY_CHPLAN_ENT("US", 0x34, 0x00, DEF , 0, 1),
1785 COUNTRY_CHPLAN_ENT("UY", 0x30, 0x00, DEF , 0, 1),
1786 COUNTRY_CHPLAN_ENT("UZ", 0x47, 0x00, DEF , 0, 1),
1787 COUNTRY_CHPLAN_ENT("VC", 0x34, 0x00, DEF , 0, 1),
1788 COUNTRY_CHPLAN_ENT("VE", 0x30, 0x00, DEF , 0, 1),
1789 COUNTRY_CHPLAN_ENT("VN", 0x35, 0x00, DEF , 0, 1),
1790 COUNTRY_CHPLAN_ENT("ZA", 0x35, 0x00, DEF , 0, 1),
1791 COUNTRY_CHPLAN_ENT("ZM", 0x26, 0x00, DEF , 0, 1),
1792 COUNTRY_CHPLAN_ENT("ZW", 0x26, 0x00, DEF , 0, 1),
1793 };
1794 #endif
1795
1796 #if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8723BE_HMC_M2) /* 2013 certify */
1797 static const struct country_chplan RTL8723BE_HMC_M2_country_chplan_map[] = {
1798 COUNTRY_CHPLAN_ENT("AE", 0x35, 0x00, DEF , 0, 1),
1799 COUNTRY_CHPLAN_ENT("AL", 0x26, 0x00, DEF , 0, 1),
1800 COUNTRY_CHPLAN_ENT("AM", 0x26, 0x00, DEF , 0, 1),
1801 COUNTRY_CHPLAN_ENT("AN", 0x76, 0x00, DEF , 0, 1),
1802 COUNTRY_CHPLAN_ENT("AO", 0x47, 0x00, DEF , 0, 1),
1803 COUNTRY_CHPLAN_ENT("AR", 0x61, 0x00, DEF , 0, 1),
1804 COUNTRY_CHPLAN_ENT("AT", 0x26, 0x00, DEF , 0, 1),
1805 COUNTRY_CHPLAN_ENT("AU", 0x45, 0x00, DEF , 0, 1),
1806 COUNTRY_CHPLAN_ENT("AW", 0x34, 0x00, DEF , 0, 1),
1807 COUNTRY_CHPLAN_ENT("AZ", 0x26, 0x00, DEF , 0, 1),
1808 COUNTRY_CHPLAN_ENT("BA", 0x26, 0x00, DEF , 0, 1),
1809 COUNTRY_CHPLAN_ENT("BD", 0x26, 0x00, DEF , 0, 1),
1810 COUNTRY_CHPLAN_ENT("BE", 0x26, 0x00, DEF , 0, 1),
1811 COUNTRY_CHPLAN_ENT("BF", 0x26, 0x00, DEF , 0, 1),
1812 COUNTRY_CHPLAN_ENT("BG", 0x26, 0x00, DEF , 0, 1),
1813 COUNTRY_CHPLAN_ENT("BH", 0x48, 0x00, DEF , 0, 1),
1814 COUNTRY_CHPLAN_ENT("BI", 0x26, 0x00, DEF , 0, 1),
1815 COUNTRY_CHPLAN_ENT("BJ", 0x26, 0x00, DEF , 0, 1),
1816 COUNTRY_CHPLAN_ENT("BO", 0x73, 0x00, DEF , 0, 1),
1817 COUNTRY_CHPLAN_ENT("BR", 0x62, 0x00, DEF , 0, 1),
1818 COUNTRY_CHPLAN_ENT("BS", 0x34, 0x00, DEF , 0, 1),
1819 COUNTRY_CHPLAN_ENT("BW", 0x35, 0x00, DEF , 0, 1),
1820 COUNTRY_CHPLAN_ENT("BY", 0x26, 0x00, DEF , 0, 1),
1821 COUNTRY_CHPLAN_ENT("CA", 0x20, 0x00, DEF , 0, 1),
1822 COUNTRY_CHPLAN_ENT("CD", 0x26, 0x00, DEF , 0, 1),
1823 COUNTRY_CHPLAN_ENT("CF", 0x26, 0x00, DEF , 0, 1),
1824 COUNTRY_CHPLAN_ENT("CG", 0x26, 0x00, DEF , 0, 1),
1825 COUNTRY_CHPLAN_ENT("CH", 0x26, 0x00, DEF , 0, 1),
1826 COUNTRY_CHPLAN_ENT("CI", 0x42, 0x00, DEF , 0, 1),
1827 COUNTRY_CHPLAN_ENT("CL", 0x2D, 0x00, DEF , 0, 1),
1828 COUNTRY_CHPLAN_ENT("CM", 0x26, 0x00, DEF , 0, 1),
1829 COUNTRY_CHPLAN_ENT("CN", 0x48, 0x00, DEF , 0, 1),
1830 COUNTRY_CHPLAN_ENT("CO", 0x34, 0x00, DEF , 0, 1),
1831 COUNTRY_CHPLAN_ENT("CR", 0x34, 0x00, DEF , 0, 1),
1832 COUNTRY_CHPLAN_ENT("CV", 0x26, 0x00, DEF , 0, 1),
1833 COUNTRY_CHPLAN_ENT("CY", 0x26, 0x00, DEF , 0, 1),
1834 COUNTRY_CHPLAN_ENT("CZ", 0x26, 0x00, DEF , 0, 1),
1835 COUNTRY_CHPLAN_ENT("DE", 0x26, 0x00, DEF , 0, 1),
1836 COUNTRY_CHPLAN_ENT("DK", 0x26, 0x00, DEF , 0, 1),
1837 COUNTRY_CHPLAN_ENT("DO", 0x34, 0x00, DEF , 0, 1),
1838 COUNTRY_CHPLAN_ENT("DZ", 0x00, 0x00, DEF , 0, 1),
1839 COUNTRY_CHPLAN_ENT("EC", 0x34, 0x00, DEF , 0, 1),
1840 COUNTRY_CHPLAN_ENT("EE", 0x26, 0x00, DEF , 0, 1),
1841 COUNTRY_CHPLAN_ENT("EG", 0x47, 0x00, DEF , 0, 1),
1842 COUNTRY_CHPLAN_ENT("ES", 0x26, 0x00, DEF , 0, 1),
1843 COUNTRY_CHPLAN_ENT("ET", 0x26, 0x00, DEF , 0, 1),
1844 COUNTRY_CHPLAN_ENT("FI", 0x26, 0x00, DEF , 0, 1),
1845 COUNTRY_CHPLAN_ENT("FR", 0x26, 0x00, DEF , 0, 1),
1846 COUNTRY_CHPLAN_ENT("GA", 0x26, 0x00, DEF , 0, 1),
1847 COUNTRY_CHPLAN_ENT("GB", 0x26, 0x00, DEF , 0, 1),
1848 COUNTRY_CHPLAN_ENT("GD", 0x76, 0x00, DEF , 0, 1),
1849 COUNTRY_CHPLAN_ENT("GH", 0x26, 0x00, DEF , 0, 1),
1850 COUNTRY_CHPLAN_ENT("GM", 0x26, 0x00, DEF , 0, 1),
1851 COUNTRY_CHPLAN_ENT("GQ", 0x26, 0x00, DEF , 0, 1),
1852 COUNTRY_CHPLAN_ENT("GR", 0x26, 0x00, DEF , 0, 1),
1853 COUNTRY_CHPLAN_ENT("GT", 0x34, 0x00, DEF , 0, 1),
1854 COUNTRY_CHPLAN_ENT("GW", 0x26, 0x00, DEF , 0, 1),
1855 COUNTRY_CHPLAN_ENT("HK", 0x35, 0x00, DEF , 0, 1),
1856 COUNTRY_CHPLAN_ENT("HN", 0x32, 0x00, DEF , 0, 1),
1857 COUNTRY_CHPLAN_ENT("HR", 0x26, 0x00, DEF , 0, 1),
1858 COUNTRY_CHPLAN_ENT("HU", 0x26, 0x00, DEF , 0, 1),
1859 COUNTRY_CHPLAN_ENT("ID", 0x5D, 0x00, DEF , 0, 1),
1860 COUNTRY_CHPLAN_ENT("IE", 0x26, 0x00, DEF , 0, 1),
1861 COUNTRY_CHPLAN_ENT("IL", 0x47, 0x00, DEF , 0, 1),
1862 COUNTRY_CHPLAN_ENT("IN", 0x48, 0x00, DEF , 0, 1),
1863 COUNTRY_CHPLAN_ENT("IS", 0x26, 0x00, DEF , 0, 1),
1864 COUNTRY_CHPLAN_ENT("IT", 0x26, 0x00, DEF , 0, 1),
1865 COUNTRY_CHPLAN_ENT("JM", 0x32, 0x00, DEF , 0, 1),
1866 COUNTRY_CHPLAN_ENT("JO", 0x49, 0x00, DEF , 0, 1),
1867 COUNTRY_CHPLAN_ENT("JP", 0x27, 0x00, DEF , 0, 1),
1868 COUNTRY_CHPLAN_ENT("KE", 0x47, 0x00, DEF , 0, 1),
1869 COUNTRY_CHPLAN_ENT("KG", 0x26, 0x00, DEF , 0, 1),
1870 COUNTRY_CHPLAN_ENT("KH", 0x26, 0x00, DEF , 0, 1),
1871 COUNTRY_CHPLAN_ENT("KR", 0x28, 0x00, DEF , 0, 1),
1872 COUNTRY_CHPLAN_ENT("KW", 0x26, 0x00, DEF , 0, 1),
1873 COUNTRY_CHPLAN_ENT("LB", 0x26, 0x00, DEF , 0, 1),
1874 COUNTRY_CHPLAN_ENT("LI", 0x26, 0x00, DEF , 0, 1),
1875 COUNTRY_CHPLAN_ENT("LK", 0x26, 0x00, DEF , 0, 1),
1876 COUNTRY_CHPLAN_ENT("LR", 0x26, 0x00, DEF , 0, 1),
1877 COUNTRY_CHPLAN_ENT("LS", 0x26, 0x00, DEF , 0, 1),
1878 COUNTRY_CHPLAN_ENT("LT", 0x26, 0x00, DEF , 0, 1),
1879 COUNTRY_CHPLAN_ENT("LU", 0x26, 0x00, DEF , 0, 1),
1880 COUNTRY_CHPLAN_ENT("LV", 0x26, 0x00, DEF , 0, 1),
1881 COUNTRY_CHPLAN_ENT("MA", 0x47, 0x00, DEF , 0, 1),
1882 COUNTRY_CHPLAN_ENT("MC", 0x26, 0x00, DEF , 0, 1),
1883 COUNTRY_CHPLAN_ENT("MD", 0x26, 0x00, DEF , 0, 1),
1884 COUNTRY_CHPLAN_ENT("ME", 0x26, 0x00, DEF , 0, 1),
1885 COUNTRY_CHPLAN_ENT("MG", 0x26, 0x00, DEF , 0, 1),
1886 COUNTRY_CHPLAN_ENT("MK", 0x26, 0x00, DEF , 0, 1),
1887 COUNTRY_CHPLAN_ENT("ML", 0x26, 0x00, DEF , 0, 1),
1888 COUNTRY_CHPLAN_ENT("MR", 0x26, 0x00, DEF , 0, 1),
1889 COUNTRY_CHPLAN_ENT("MT", 0x26, 0x00, DEF , 0, 1),
1890 COUNTRY_CHPLAN_ENT("MU", 0x26, 0x00, DEF , 0, 1),
1891 COUNTRY_CHPLAN_ENT("MW", 0x26, 0x00, DEF , 0, 1),
1892 COUNTRY_CHPLAN_ENT("MX", 0x34, 0x00, DEF , 0, 1),
1893 COUNTRY_CHPLAN_ENT("MY", 0x63, 0x00, DEF , 0, 1),
1894 COUNTRY_CHPLAN_ENT("MZ", 0x26, 0x00, DEF , 0, 1),
1895 COUNTRY_CHPLAN_ENT("NE", 0x26, 0x00, DEF , 0, 1),
1896 COUNTRY_CHPLAN_ENT("NG", 0x75, 0x00, DEF , 0, 1),
1897 COUNTRY_CHPLAN_ENT("NI", 0x34, 0x00, DEF , 0, 1),
1898 COUNTRY_CHPLAN_ENT("NL", 0x26, 0x00, DEF , 0, 1),
1899 COUNTRY_CHPLAN_ENT("NO", 0x26, 0x00, DEF , 0, 1),
1900 COUNTRY_CHPLAN_ENT("NP", 0x48, 0x00, DEF , 0, 1),
1901 COUNTRY_CHPLAN_ENT("NZ", 0x45, 0x00, DEF , 0, 1),
1902 COUNTRY_CHPLAN_ENT("OM", 0x26, 0x00, DEF , 0, 1),
1903 COUNTRY_CHPLAN_ENT("PA", 0x34, 0x00, DEF , 0, 1),
1904 COUNTRY_CHPLAN_ENT("PE", 0x34, 0x00, DEF , 0, 1),
1905 COUNTRY_CHPLAN_ENT("PG", 0x35, 0x00, DEF , 0, 1),
1906 COUNTRY_CHPLAN_ENT("PH", 0x35, 0x00, DEF , 0, 1),
1907 COUNTRY_CHPLAN_ENT("PK", 0x51, 0x00, DEF , 0, 1),
1908 COUNTRY_CHPLAN_ENT("PL", 0x26, 0x00, DEF , 0, 1),
1909 COUNTRY_CHPLAN_ENT("PR", 0x34, 0x00, DEF , 0, 1),
1910 COUNTRY_CHPLAN_ENT("PT", 0x26, 0x00, DEF , 0, 1),
1911 COUNTRY_CHPLAN_ENT("PY", 0x34, 0x00, DEF , 0, 1),
1912 COUNTRY_CHPLAN_ENT("QA", 0x35, 0x00, DEF , 0, 1),
1913 COUNTRY_CHPLAN_ENT("RO", 0x26, 0x00, DEF , 0, 1),
1914 COUNTRY_CHPLAN_ENT("RS", 0x26, 0x00, DEF , 0, 1),
1915 COUNTRY_CHPLAN_ENT("RU", 0x59, 0x00, DEF , 0, 1),
1916 COUNTRY_CHPLAN_ENT("RW", 0x26, 0x00, DEF , 0, 1),
1917 COUNTRY_CHPLAN_ENT("SA", 0x35, 0x00, DEF , 0, 1),
1918 COUNTRY_CHPLAN_ENT("SE", 0x26, 0x00, DEF , 0, 1),
1919 COUNTRY_CHPLAN_ENT("SG", 0x35, 0x00, DEF , 0, 1),
1920 COUNTRY_CHPLAN_ENT("SI", 0x26, 0x00, DEF , 0, 1),
1921 COUNTRY_CHPLAN_ENT("SK", 0x26, 0x00, DEF , 0, 1),
1922 COUNTRY_CHPLAN_ENT("SL", 0x26, 0x00, DEF , 0, 1),
1923 COUNTRY_CHPLAN_ENT("SN", 0x26, 0x00, DEF , 0, 1),
1924 COUNTRY_CHPLAN_ENT("SV", 0x30, 0x00, DEF , 0, 1),
1925 COUNTRY_CHPLAN_ENT("SZ", 0x26, 0x00, DEF , 0, 1),
1926 COUNTRY_CHPLAN_ENT("TD", 0x26, 0x00, DEF , 0, 1),
1927 COUNTRY_CHPLAN_ENT("TG", 0x26, 0x00, DEF , 0, 1),
1928 COUNTRY_CHPLAN_ENT("TH", 0x35, 0x00, DEF , 0, 1),
1929 COUNTRY_CHPLAN_ENT("TN", 0x47, 0x00, DEF , 0, 1),
1930 COUNTRY_CHPLAN_ENT("TR", 0x26, 0x00, DEF , 0, 1),
1931 COUNTRY_CHPLAN_ENT("TT", 0x76, 0x00, DEF , 0, 1),
1932 COUNTRY_CHPLAN_ENT("TW", 0x39, 0x00, DEF , 0, 1),
1933 COUNTRY_CHPLAN_ENT("TZ", 0x26, 0x00, DEF , 0, 1),
1934 COUNTRY_CHPLAN_ENT("UA", 0x35, 0x00, DEF , 0, 1),
1935 COUNTRY_CHPLAN_ENT("UG", 0x26, 0x00, DEF , 0, 1),
1936 COUNTRY_CHPLAN_ENT("US", 0x34, 0x00, DEF , 0, 1),
1937 COUNTRY_CHPLAN_ENT("UY", 0x30, 0x00, DEF , 0, 1),
1938 COUNTRY_CHPLAN_ENT("UZ", 0x47, 0x00, DEF , 0, 1),
1939 COUNTRY_CHPLAN_ENT("VE", 0x30, 0x00, DEF , 0, 1),
1940 COUNTRY_CHPLAN_ENT("VN", 0x35, 0x00, DEF , 0, 1),
1941 COUNTRY_CHPLAN_ENT("ZA", 0x35, 0x00, DEF , 0, 1),
1942 COUNTRY_CHPLAN_ENT("ZM", 0x26, 0x00, DEF , 0, 1),
1943 COUNTRY_CHPLAN_ENT("ZW", 0x26, 0x00, DEF , 0, 1),
1944 };
1945 #endif
1946
1947 #if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8723BS_NGFF1216) /* 2014 certify */
1948 static const struct country_chplan RTL8723BS_NGFF1216_country_chplan_map[] = {
1949 COUNTRY_CHPLAN_ENT("AE", 0x35, 0x00, DEF , 0, 1),
1950 COUNTRY_CHPLAN_ENT("AL", 0x26, 0x00, DEF , 0, 1),
1951 COUNTRY_CHPLAN_ENT("AN", 0x76, 0x00, DEF , 0, 1),
1952 COUNTRY_CHPLAN_ENT("AO", 0x47, 0x00, DEF , 0, 1),
1953 COUNTRY_CHPLAN_ENT("AR", 0x61, 0x00, DEF , 0, 1),
1954 COUNTRY_CHPLAN_ENT("AT", 0x26, 0x00, DEF , 0, 1),
1955 COUNTRY_CHPLAN_ENT("AU", 0x45, 0x00, DEF , 0, 1),
1956 COUNTRY_CHPLAN_ENT("AZ", 0x26, 0x00, DEF , 0, 1),
1957 COUNTRY_CHPLAN_ENT("BA", 0x26, 0x00, DEF , 0, 1),
1958 COUNTRY_CHPLAN_ENT("BB", 0x34, 0x00, DEF , 0, 1),
1959 COUNTRY_CHPLAN_ENT("BD", 0x26, 0x00, DEF , 0, 1),
1960 COUNTRY_CHPLAN_ENT("BE", 0x26, 0x00, DEF , 0, 1),
1961 COUNTRY_CHPLAN_ENT("BG", 0x26, 0x00, DEF , 0, 1),
1962 COUNTRY_CHPLAN_ENT("BH", 0x48, 0x00, DEF , 0, 1),
1963 COUNTRY_CHPLAN_ENT("BO", 0x73, 0x00, DEF , 0, 1),
1964 COUNTRY_CHPLAN_ENT("BR", 0x62, 0x00, DEF , 0, 1),
1965 COUNTRY_CHPLAN_ENT("BW", 0x35, 0x00, DEF , 0, 1),
1966 COUNTRY_CHPLAN_ENT("BY", 0x26, 0x00, DEF , 0, 1),
1967 COUNTRY_CHPLAN_ENT("CA", 0x20, 0x00, DEF , 0, 1),
1968 COUNTRY_CHPLAN_ENT("CH", 0x26, 0x00, DEF , 0, 1),
1969 COUNTRY_CHPLAN_ENT("CI", 0x42, 0x00, DEF , 0, 1),
1970 COUNTRY_CHPLAN_ENT("CL", 0x2D, 0x00, DEF , 0, 1),
1971 COUNTRY_CHPLAN_ENT("CN", 0x48, 0x00, DEF , 0, 1),
1972 COUNTRY_CHPLAN_ENT("CO", 0x34, 0x00, DEF , 0, 1),
1973 COUNTRY_CHPLAN_ENT("CR", 0x34, 0x00, DEF , 0, 1),
1974 COUNTRY_CHPLAN_ENT("CY", 0x26, 0x00, DEF , 0, 1),
1975 COUNTRY_CHPLAN_ENT("CZ", 0x26, 0x00, DEF , 0, 1),
1976 COUNTRY_CHPLAN_ENT("DE", 0x26, 0x00, DEF , 0, 1),
1977 COUNTRY_CHPLAN_ENT("DK", 0x26, 0x00, DEF , 0, 1),
1978 COUNTRY_CHPLAN_ENT("DO", 0x34, 0x00, DEF , 0, 1),
1979 COUNTRY_CHPLAN_ENT("DZ", 0x00, 0x00, DEF , 0, 1),
1980 COUNTRY_CHPLAN_ENT("EC", 0x34, 0x00, DEF , 0, 1),
1981 COUNTRY_CHPLAN_ENT("EE", 0x26, 0x00, DEF , 0, 1),
1982 COUNTRY_CHPLAN_ENT("EG", 0x47, 0x00, DEF , 0, 1),
1983 COUNTRY_CHPLAN_ENT("ES", 0x26, 0x00, DEF , 0, 1),
1984 COUNTRY_CHPLAN_ENT("FI", 0x26, 0x00, DEF , 0, 1),
1985 COUNTRY_CHPLAN_ENT("FR", 0x26, 0x00, DEF , 0, 1),
1986 COUNTRY_CHPLAN_ENT("GB", 0x26, 0x00, DEF , 0, 1),
1987 COUNTRY_CHPLAN_ENT("GH", 0x26, 0x00, DEF , 0, 1),
1988 COUNTRY_CHPLAN_ENT("GR", 0x26, 0x00, DEF , 0, 1),
1989 COUNTRY_CHPLAN_ENT("GT", 0x34, 0x00, DEF , 0, 1),
1990 COUNTRY_CHPLAN_ENT("HK", 0x35, 0x00, DEF , 0, 1),
1991 COUNTRY_CHPLAN_ENT("HN", 0x32, 0x00, DEF , 0, 1),
1992 COUNTRY_CHPLAN_ENT("HR", 0x26, 0x00, DEF , 0, 1),
1993 COUNTRY_CHPLAN_ENT("HT", 0x34, 0x00, DEF , 0, 1),
1994 COUNTRY_CHPLAN_ENT("HU", 0x26, 0x00, DEF , 0, 1),
1995 COUNTRY_CHPLAN_ENT("ID", 0x5D, 0x00, DEF , 0, 1),
1996 COUNTRY_CHPLAN_ENT("IE", 0x26, 0x00, DEF , 0, 1),
1997 COUNTRY_CHPLAN_ENT("IL", 0x47, 0x00, DEF , 0, 1),
1998 COUNTRY_CHPLAN_ENT("IN", 0x48, 0x00, DEF , 0, 1),
1999 COUNTRY_CHPLAN_ENT("IS", 0x26, 0x00, DEF , 0, 1),
2000 COUNTRY_CHPLAN_ENT("IT", 0x26, 0x00, DEF , 0, 1),
2001 COUNTRY_CHPLAN_ENT("JM", 0x32, 0x00, DEF , 0, 1),
2002 COUNTRY_CHPLAN_ENT("JO", 0x49, 0x00, DEF , 0, 1),
2003 COUNTRY_CHPLAN_ENT("JP", 0x27, 0x00, DEF , 0, 1),
2004 COUNTRY_CHPLAN_ENT("KE", 0x47, 0x00, DEF , 0, 1),
2005 COUNTRY_CHPLAN_ENT("KG", 0x26, 0x00, DEF , 0, 1),
2006 COUNTRY_CHPLAN_ENT("KH", 0x26, 0x00, DEF , 0, 1),
2007 COUNTRY_CHPLAN_ENT("KR", 0x28, 0x00, DEF , 0, 1),
2008 COUNTRY_CHPLAN_ENT("KW", 0x26, 0x00, DEF , 0, 1),
2009 COUNTRY_CHPLAN_ENT("LB", 0x26, 0x00, DEF , 0, 1),
2010 COUNTRY_CHPLAN_ENT("LI", 0x26, 0x00, DEF , 0, 1),
2011 COUNTRY_CHPLAN_ENT("LK", 0x26, 0x00, DEF , 0, 1),
2012 COUNTRY_CHPLAN_ENT("LS", 0x26, 0x00, DEF , 0, 1),
2013 COUNTRY_CHPLAN_ENT("LT", 0x26, 0x00, DEF , 0, 1),
2014 COUNTRY_CHPLAN_ENT("LU", 0x26, 0x00, DEF , 0, 1),
2015 COUNTRY_CHPLAN_ENT("LV", 0x26, 0x00, DEF , 0, 1),
2016 COUNTRY_CHPLAN_ENT("MA", 0x47, 0x00, DEF , 0, 1),
2017 COUNTRY_CHPLAN_ENT("MC", 0x26, 0x00, DEF , 0, 1),
2018 COUNTRY_CHPLAN_ENT("MD", 0x26, 0x00, DEF , 0, 1),
2019 COUNTRY_CHPLAN_ENT("ME", 0x26, 0x00, DEF , 0, 1),
2020 COUNTRY_CHPLAN_ENT("MK", 0x26, 0x00, DEF , 0, 1),
2021 COUNTRY_CHPLAN_ENT("MQ", 0x26, 0x00, DEF , 0, 1),
2022 COUNTRY_CHPLAN_ENT("MT", 0x26, 0x00, DEF , 0, 1),
2023 COUNTRY_CHPLAN_ENT("MX", 0x34, 0x00, DEF , 0, 1),
2024 COUNTRY_CHPLAN_ENT("MY", 0x63, 0x00, DEF , 0, 1),
2025 COUNTRY_CHPLAN_ENT("MZ", 0x26, 0x00, DEF , 0, 1),
2026 COUNTRY_CHPLAN_ENT("NG", 0x75, 0x00, DEF , 0, 1),
2027 COUNTRY_CHPLAN_ENT("NI", 0x34, 0x00, DEF , 0, 1),
2028 COUNTRY_CHPLAN_ENT("NL", 0x26, 0x00, DEF , 0, 1),
2029 COUNTRY_CHPLAN_ENT("NO", 0x26, 0x00, DEF , 0, 1),
2030 COUNTRY_CHPLAN_ENT("NP", 0x48, 0x00, DEF , 0, 1),
2031 COUNTRY_CHPLAN_ENT("NZ", 0x45, 0x00, DEF , 0, 1),
2032 COUNTRY_CHPLAN_ENT("OM", 0x26, 0x00, DEF , 0, 1),
2033 COUNTRY_CHPLAN_ENT("PA", 0x34, 0x00, DEF , 0, 1),
2034 COUNTRY_CHPLAN_ENT("PE", 0x34, 0x00, DEF , 0, 1),
2035 COUNTRY_CHPLAN_ENT("PG", 0x35, 0x00, DEF , 0, 1),
2036 COUNTRY_CHPLAN_ENT("PH", 0x35, 0x00, DEF , 0, 1),
2037 COUNTRY_CHPLAN_ENT("PK", 0x51, 0x00, DEF , 0, 1),
2038 COUNTRY_CHPLAN_ENT("PL", 0x26, 0x00, DEF , 0, 1),
2039 COUNTRY_CHPLAN_ENT("PR", 0x34, 0x00, DEF , 0, 1),
2040 COUNTRY_CHPLAN_ENT("PT", 0x26, 0x00, DEF , 0, 1),
2041 COUNTRY_CHPLAN_ENT("PY", 0x34, 0x00, DEF , 0, 1),
2042 COUNTRY_CHPLAN_ENT("QA", 0x35, 0x00, DEF , 0, 1),
2043 COUNTRY_CHPLAN_ENT("RO", 0x26, 0x00, DEF , 0, 1),
2044 COUNTRY_CHPLAN_ENT("RS", 0x26, 0x00, DEF , 0, 1),
2045 COUNTRY_CHPLAN_ENT("RU", 0x59, 0x00, DEF , 0, 1),
2046 COUNTRY_CHPLAN_ENT("SA", 0x35, 0x00, DEF , 0, 1),
2047 COUNTRY_CHPLAN_ENT("SE", 0x26, 0x00, DEF , 0, 1),
2048 COUNTRY_CHPLAN_ENT("SG", 0x35, 0x00, DEF , 0, 1),
2049 COUNTRY_CHPLAN_ENT("SI", 0x26, 0x00, DEF , 0, 1),
2050 COUNTRY_CHPLAN_ENT("SK", 0x26, 0x00, DEF , 0, 1),
2051 COUNTRY_CHPLAN_ENT("SN", 0x26, 0x00, DEF , 0, 1),
2052 COUNTRY_CHPLAN_ENT("SV", 0x30, 0x00, DEF , 0, 1),
2053 COUNTRY_CHPLAN_ENT("TH", 0x35, 0x00, DEF , 0, 1),
2054 COUNTRY_CHPLAN_ENT("TJ", 0x26, 0x00, DEF , 0, 1),
2055 COUNTRY_CHPLAN_ENT("TN", 0x47, 0x00, DEF , 0, 1),
2056 COUNTRY_CHPLAN_ENT("TR", 0x26, 0x00, DEF , 0, 1),
2057 COUNTRY_CHPLAN_ENT("TT", 0x76, 0x00, DEF , 0, 1),
2058 COUNTRY_CHPLAN_ENT("TW", 0x39, 0x00, DEF , 0, 1),
2059 COUNTRY_CHPLAN_ENT("TZ", 0x26, 0x00, DEF , 0, 1),
2060 COUNTRY_CHPLAN_ENT("UA", 0x35, 0x00, DEF , 0, 1),
2061 COUNTRY_CHPLAN_ENT("UG", 0x26, 0x00, DEF , 0, 1),
2062 COUNTRY_CHPLAN_ENT("US", 0x34, 0x00, DEF , 0, 1),
2063 COUNTRY_CHPLAN_ENT("UY", 0x30, 0x00, DEF , 0, 1),
2064 COUNTRY_CHPLAN_ENT("UZ", 0x47, 0x00, DEF , 0, 1),
2065 COUNTRY_CHPLAN_ENT("VE", 0x30, 0x00, DEF , 0, 1),
2066 COUNTRY_CHPLAN_ENT("VN", 0x35, 0x00, DEF , 0, 1),
2067 COUNTRY_CHPLAN_ENT("YE", 0x26, 0x00, DEF , 0, 1),
2068 COUNTRY_CHPLAN_ENT("ZA", 0x35, 0x00, DEF , 0, 1),
2069 COUNTRY_CHPLAN_ENT("ZW", 0x26, 0x00, DEF , 0, 1),
2070 };
2071 #endif
2072
2073 #if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8192EEBT_HMC_M2) /* 2013 certify */
2074 static const struct country_chplan RTL8192EEBT_HMC_M2_country_chplan_map[] = {
2075 COUNTRY_CHPLAN_ENT("AE", 0x35, 0x00, DEF , 0, 1),
2076 COUNTRY_CHPLAN_ENT("AL", 0x26, 0x00, DEF , 0, 1),
2077 COUNTRY_CHPLAN_ENT("AM", 0x26, 0x00, DEF , 0, 1),
2078 COUNTRY_CHPLAN_ENT("AN", 0x76, 0x00, DEF , 0, 1),
2079 COUNTRY_CHPLAN_ENT("AO", 0x47, 0x00, DEF , 0, 1),
2080 COUNTRY_CHPLAN_ENT("AR", 0x61, 0x00, DEF , 0, 1),
2081 COUNTRY_CHPLAN_ENT("AT", 0x26, 0x00, DEF , 0, 1),
2082 COUNTRY_CHPLAN_ENT("AU", 0x45, 0x00, DEF , 0, 1),
2083 COUNTRY_CHPLAN_ENT("AW", 0x34, 0x00, DEF , 0, 1),
2084 COUNTRY_CHPLAN_ENT("AZ", 0x26, 0x00, DEF , 0, 1),
2085 COUNTRY_CHPLAN_ENT("BA", 0x26, 0x00, DEF , 0, 1),
2086 COUNTRY_CHPLAN_ENT("BD", 0x26, 0x00, DEF , 0, 1),
2087 COUNTRY_CHPLAN_ENT("BE", 0x26, 0x00, DEF , 0, 1),
2088 COUNTRY_CHPLAN_ENT("BF", 0x26, 0x00, DEF , 0, 1),
2089 COUNTRY_CHPLAN_ENT("BG", 0x26, 0x00, DEF , 0, 1),
2090 COUNTRY_CHPLAN_ENT("BH", 0x48, 0x00, DEF , 0, 1),
2091 COUNTRY_CHPLAN_ENT("BI", 0x26, 0x00, DEF , 0, 1),
2092 COUNTRY_CHPLAN_ENT("BJ", 0x26, 0x00, DEF , 0, 1),
2093 COUNTRY_CHPLAN_ENT("BO", 0x73, 0x00, DEF , 0, 1),
2094 COUNTRY_CHPLAN_ENT("BR", 0x62, 0x00, DEF , 0, 1),
2095 COUNTRY_CHPLAN_ENT("BW", 0x35, 0x00, DEF , 0, 1),
2096 COUNTRY_CHPLAN_ENT("BY", 0x26, 0x00, DEF , 0, 1),
2097 COUNTRY_CHPLAN_ENT("CA", 0x20, 0x00, DEF , 0, 1),
2098 COUNTRY_CHPLAN_ENT("CD", 0x26, 0x00, DEF , 0, 1),
2099 COUNTRY_CHPLAN_ENT("CF", 0x26, 0x00, DEF , 0, 1),
2100 COUNTRY_CHPLAN_ENT("CG", 0x26, 0x00, DEF , 0, 1),
2101 COUNTRY_CHPLAN_ENT("CH", 0x26, 0x00, DEF , 0, 1),
2102 COUNTRY_CHPLAN_ENT("CI", 0x42, 0x00, DEF , 0, 1),
2103 COUNTRY_CHPLAN_ENT("CL", 0x2D, 0x00, DEF , 0, 1),
2104 COUNTRY_CHPLAN_ENT("CM", 0x26, 0x00, DEF , 0, 1),
2105 COUNTRY_CHPLAN_ENT("CN", 0x48, 0x00, DEF , 0, 1),
2106 COUNTRY_CHPLAN_ENT("CO", 0x34, 0x00, DEF , 0, 1),
2107 COUNTRY_CHPLAN_ENT("CR", 0x34, 0x00, DEF , 0, 1),
2108 COUNTRY_CHPLAN_ENT("CV", 0x26, 0x00, DEF , 0, 1),
2109 COUNTRY_CHPLAN_ENT("CY", 0x26, 0x00, DEF , 0, 1),
2110 COUNTRY_CHPLAN_ENT("CZ", 0x26, 0x00, DEF , 0, 1),
2111 COUNTRY_CHPLAN_ENT("DE", 0x26, 0x00, DEF , 0, 1),
2112 COUNTRY_CHPLAN_ENT("DJ", 0x26, 0x00, DEF , 0, 1),
2113 COUNTRY_CHPLAN_ENT("DK", 0x26, 0x00, DEF , 0, 1),
2114 COUNTRY_CHPLAN_ENT("DO", 0x34, 0x00, DEF , 0, 1),
2115 COUNTRY_CHPLAN_ENT("DZ", 0x00, 0x00, DEF , 0, 1),
2116 COUNTRY_CHPLAN_ENT("EC", 0x34, 0x00, DEF , 0, 1),
2117 COUNTRY_CHPLAN_ENT("EE", 0x26, 0x00, DEF , 0, 1),
2118 COUNTRY_CHPLAN_ENT("EG", 0x47, 0x00, DEF , 0, 1),
2119 COUNTRY_CHPLAN_ENT("EH", 0x47, 0x00, DEF , 0, 1),
2120 COUNTRY_CHPLAN_ENT("ES", 0x26, 0x00, DEF , 0, 1),
2121 COUNTRY_CHPLAN_ENT("ET", 0x26, 0x00, DEF , 0, 1),
2122 COUNTRY_CHPLAN_ENT("FI", 0x26, 0x00, DEF , 0, 1),
2123 COUNTRY_CHPLAN_ENT("FR", 0x26, 0x00, DEF , 0, 1),
2124 COUNTRY_CHPLAN_ENT("GA", 0x26, 0x00, DEF , 0, 1),
2125 COUNTRY_CHPLAN_ENT("GB", 0x26, 0x00, DEF , 0, 1),
2126 COUNTRY_CHPLAN_ENT("GD", 0x76, 0x00, DEF , 0, 1),
2127 COUNTRY_CHPLAN_ENT("GF", 0x26, 0x00, DEF , 0, 1),
2128 COUNTRY_CHPLAN_ENT("GH", 0x26, 0x00, DEF , 0, 1),
2129 COUNTRY_CHPLAN_ENT("GM", 0x26, 0x00, DEF , 0, 1),
2130 COUNTRY_CHPLAN_ENT("GQ", 0x26, 0x00, DEF , 0, 1),
2131 COUNTRY_CHPLAN_ENT("GR", 0x26, 0x00, DEF , 0, 1),
2132 COUNTRY_CHPLAN_ENT("GT", 0x34, 0x00, DEF , 0, 1),
2133 COUNTRY_CHPLAN_ENT("GW", 0x26, 0x00, DEF , 0, 1),
2134 COUNTRY_CHPLAN_ENT("HK", 0x35, 0x00, DEF , 0, 1),
2135 COUNTRY_CHPLAN_ENT("HN", 0x32, 0x00, DEF , 0, 1),
2136 COUNTRY_CHPLAN_ENT("HR", 0x26, 0x00, DEF , 0, 1),
2137 COUNTRY_CHPLAN_ENT("HU", 0x26, 0x00, DEF , 0, 1),
2138 COUNTRY_CHPLAN_ENT("ID", 0x5D, 0x00, DEF , 0, 1),
2139 COUNTRY_CHPLAN_ENT("IE", 0x26, 0x00, DEF , 0, 1),
2140 COUNTRY_CHPLAN_ENT("IL", 0x47, 0x00, DEF , 0, 1),
2141 COUNTRY_CHPLAN_ENT("IN", 0x48, 0x00, DEF , 0, 1),
2142 COUNTRY_CHPLAN_ENT("IS", 0x26, 0x00, DEF , 0, 1),
2143 COUNTRY_CHPLAN_ENT("IT", 0x26, 0x00, DEF , 0, 1),
2144 COUNTRY_CHPLAN_ENT("JM", 0x32, 0x00, DEF , 0, 1),
2145 COUNTRY_CHPLAN_ENT("JO", 0x49, 0x00, DEF , 0, 1),
2146 COUNTRY_CHPLAN_ENT("JP", 0x27, 0x00, DEF , 0, 1),
2147 COUNTRY_CHPLAN_ENT("KE", 0x47, 0x00, DEF , 0, 1),
2148 COUNTRY_CHPLAN_ENT("KG", 0x26, 0x00, DEF , 0, 1),
2149 COUNTRY_CHPLAN_ENT("KH", 0x26, 0x00, DEF , 0, 1),
2150 COUNTRY_CHPLAN_ENT("KR", 0x28, 0x00, DEF , 0, 1),
2151 COUNTRY_CHPLAN_ENT("KW", 0x26, 0x00, DEF , 0, 1),
2152 COUNTRY_CHPLAN_ENT("LB", 0x26, 0x00, DEF , 0, 1),
2153 COUNTRY_CHPLAN_ENT("LI", 0x26, 0x00, DEF , 0, 1),
2154 COUNTRY_CHPLAN_ENT("LK", 0x26, 0x00, DEF , 0, 1),
2155 COUNTRY_CHPLAN_ENT("LR", 0x26, 0x00, DEF , 0, 1),
2156 COUNTRY_CHPLAN_ENT("LS", 0x26, 0x00, DEF , 0, 1),
2157 COUNTRY_CHPLAN_ENT("LT", 0x26, 0x00, DEF , 0, 1),
2158 COUNTRY_CHPLAN_ENT("LU", 0x26, 0x00, DEF , 0, 1),
2159 COUNTRY_CHPLAN_ENT("LV", 0x26, 0x00, DEF , 0, 1),
2160 COUNTRY_CHPLAN_ENT("MA", 0x47, 0x00, DEF , 0, 1),
2161 COUNTRY_CHPLAN_ENT("MC", 0x26, 0x00, DEF , 0, 1),
2162 COUNTRY_CHPLAN_ENT("MD", 0x26, 0x00, DEF , 0, 1),
2163 COUNTRY_CHPLAN_ENT("ME", 0x26, 0x00, DEF , 0, 1),
2164 COUNTRY_CHPLAN_ENT("MK", 0x26, 0x00, DEF , 0, 1),
2165 COUNTRY_CHPLAN_ENT("ML", 0x26, 0x00, DEF , 0, 1),
2166 COUNTRY_CHPLAN_ENT("MR", 0x26, 0x00, DEF , 0, 1),
2167 COUNTRY_CHPLAN_ENT("MT", 0x26, 0x00, DEF , 0, 1),
2168 COUNTRY_CHPLAN_ENT("MU", 0x26, 0x00, DEF , 0, 1),
2169 COUNTRY_CHPLAN_ENT("MW", 0x26, 0x00, DEF , 0, 1),
2170 COUNTRY_CHPLAN_ENT("MX", 0x34, 0x00, DEF , 0, 1),
2171 COUNTRY_CHPLAN_ENT("MY", 0x63, 0x00, DEF , 0, 1),
2172 COUNTRY_CHPLAN_ENT("MZ", 0x26, 0x00, DEF , 0, 1),
2173 COUNTRY_CHPLAN_ENT("NE", 0x26, 0x00, DEF , 0, 1),
2174 COUNTRY_CHPLAN_ENT("NG", 0x75, 0x00, DEF , 0, 1),
2175 COUNTRY_CHPLAN_ENT("NI", 0x34, 0x00, DEF , 0, 1),
2176 COUNTRY_CHPLAN_ENT("NL", 0x26, 0x00, DEF , 0, 1),
2177 COUNTRY_CHPLAN_ENT("NO", 0x26, 0x00, DEF , 0, 1),
2178 COUNTRY_CHPLAN_ENT("NP", 0x48, 0x00, DEF , 0, 1),
2179 COUNTRY_CHPLAN_ENT("NZ", 0x45, 0x00, DEF , 0, 1),
2180 COUNTRY_CHPLAN_ENT("OM", 0x26, 0x00, DEF , 0, 1),
2181 COUNTRY_CHPLAN_ENT("PA", 0x34, 0x00, DEF , 0, 1),
2182 COUNTRY_CHPLAN_ENT("PE", 0x34, 0x00, DEF , 0, 1),
2183 COUNTRY_CHPLAN_ENT("PG", 0x35, 0x00, DEF , 0, 1),
2184 COUNTRY_CHPLAN_ENT("PH", 0x35, 0x00, DEF , 0, 1),
2185 COUNTRY_CHPLAN_ENT("PK", 0x51, 0x00, DEF , 0, 1),
2186 COUNTRY_CHPLAN_ENT("PL", 0x26, 0x00, DEF , 0, 1),
2187 COUNTRY_CHPLAN_ENT("PR", 0x34, 0x00, DEF , 0, 1),
2188 COUNTRY_CHPLAN_ENT("PT", 0x26, 0x00, DEF , 0, 1),
2189 COUNTRY_CHPLAN_ENT("PY", 0x34, 0x00, DEF , 0, 1),
2190 COUNTRY_CHPLAN_ENT("QA", 0x35, 0x00, DEF , 0, 1),
2191 COUNTRY_CHPLAN_ENT("RO", 0x26, 0x00, DEF , 0, 1),
2192 COUNTRY_CHPLAN_ENT("RS", 0x26, 0x00, DEF , 0, 1),
2193 COUNTRY_CHPLAN_ENT("RU", 0x59, 0x00, DEF , 0, 1),
2194 COUNTRY_CHPLAN_ENT("RW", 0x26, 0x00, DEF , 0, 1),
2195 COUNTRY_CHPLAN_ENT("SA", 0x35, 0x00, DEF , 0, 1),
2196 COUNTRY_CHPLAN_ENT("SC", 0x34, 0x00, DEF , 0, 1),
2197 COUNTRY_CHPLAN_ENT("SE", 0x26, 0x00, DEF , 0, 1),
2198 COUNTRY_CHPLAN_ENT("SG", 0x35, 0x00, DEF , 0, 1),
2199 COUNTRY_CHPLAN_ENT("SI", 0x26, 0x00, DEF , 0, 1),
2200 COUNTRY_CHPLAN_ENT("SK", 0x26, 0x00, DEF , 0, 1),
2201 COUNTRY_CHPLAN_ENT("SL", 0x26, 0x00, DEF , 0, 1),
2202 COUNTRY_CHPLAN_ENT("SN", 0x26, 0x00, DEF , 0, 1),
2203 COUNTRY_CHPLAN_ENT("ST", 0x34, 0x00, DEF , 0, 1),
2204 COUNTRY_CHPLAN_ENT("SV", 0x30, 0x00, DEF , 0, 1),
2205 COUNTRY_CHPLAN_ENT("TD", 0x26, 0x00, DEF , 0, 1),
2206 COUNTRY_CHPLAN_ENT("TF", 0x26, 0x00, DEF , 0, 1),
2207 COUNTRY_CHPLAN_ENT("TG", 0x26, 0x00, DEF , 0, 1),
2208 COUNTRY_CHPLAN_ENT("TH", 0x35, 0x00, DEF , 0, 1),
2209 COUNTRY_CHPLAN_ENT("TN", 0x47, 0x00, DEF , 0, 1),
2210 COUNTRY_CHPLAN_ENT("TR", 0x26, 0x00, DEF , 0, 1),
2211 COUNTRY_CHPLAN_ENT("TT", 0x76, 0x00, DEF , 0, 1),
2212 COUNTRY_CHPLAN_ENT("TW", 0x39, 0x00, DEF , 0, 1),
2213 COUNTRY_CHPLAN_ENT("TZ", 0x26, 0x00, DEF , 0, 1),
2214 COUNTRY_CHPLAN_ENT("UA", 0x35, 0x00, DEF , 0, 1),
2215 COUNTRY_CHPLAN_ENT("UG", 0x26, 0x00, DEF , 0, 1),
2216 COUNTRY_CHPLAN_ENT("US", 0x34, 0x00, DEF , 0, 1),
2217 COUNTRY_CHPLAN_ENT("UY", 0x30, 0x00, DEF , 0, 1),
2218 COUNTRY_CHPLAN_ENT("UZ", 0x47, 0x00, DEF , 0, 1),
2219 COUNTRY_CHPLAN_ENT("VE", 0x30, 0x00, DEF , 0, 1),
2220 COUNTRY_CHPLAN_ENT("VN", 0x35, 0x00, DEF , 0, 1),
2221 COUNTRY_CHPLAN_ENT("YT", 0x26, 0x00, DEF , 0, 1),
2222 COUNTRY_CHPLAN_ENT("ZA", 0x35, 0x00, DEF , 0, 1),
2223 COUNTRY_CHPLAN_ENT("ZM", 0x26, 0x00, DEF , 0, 1),
2224 COUNTRY_CHPLAN_ENT("ZW", 0x26, 0x00, DEF , 0, 1),
2225 };
2226 #endif
2227
2228 #if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8723DE_NGFF1630) /* 2016 certify */
2229 static const struct country_chplan RTL8723DE_NGFF1630_country_chplan_map[] = {
2230 COUNTRY_CHPLAN_ENT("AE", 0x35, 0x00, DEF , 0, 1),
2231 COUNTRY_CHPLAN_ENT("AL", 0x26, 0x00, DEF , 0, 1),
2232 COUNTRY_CHPLAN_ENT("AN", 0x76, 0x00, DEF , 0, 1),
2233 COUNTRY_CHPLAN_ENT("AR", 0x61, 0x00, DEF , 0, 1),
2234 COUNTRY_CHPLAN_ENT("AT", 0x26, 0x00, DEF , 0, 1),
2235 COUNTRY_CHPLAN_ENT("AU", 0x45, 0x00, DEF , 0, 1),
2236 COUNTRY_CHPLAN_ENT("AZ", 0x26, 0x00, DEF , 0, 1),
2237 COUNTRY_CHPLAN_ENT("BA", 0x26, 0x00, DEF , 0, 1),
2238 COUNTRY_CHPLAN_ENT("BD", 0x26, 0x00, DEF , 0, 1),
2239 COUNTRY_CHPLAN_ENT("BE", 0x26, 0x00, DEF , 0, 1),
2240 COUNTRY_CHPLAN_ENT("BG", 0x26, 0x00, DEF , 0, 1),
2241 COUNTRY_CHPLAN_ENT("BH", 0x48, 0x00, DEF , 0, 1),
2242 COUNTRY_CHPLAN_ENT("BO", 0x73, 0x00, DEF , 0, 1),
2243 COUNTRY_CHPLAN_ENT("BR", 0x62, 0x00, DEF , 0, 1),
2244 COUNTRY_CHPLAN_ENT("BY", 0x26, 0x00, DEF , 0, 1),
2245 COUNTRY_CHPLAN_ENT("CA", 0x2A, 0x00, DEF , 0, 1),
2246 COUNTRY_CHPLAN_ENT("CH", 0x26, 0x00, DEF , 0, 1),
2247 COUNTRY_CHPLAN_ENT("CI", 0x42, 0x00, DEF , 0, 1),
2248 COUNTRY_CHPLAN_ENT("CL", 0x2D, 0x00, DEF , 0, 1),
2249 COUNTRY_CHPLAN_ENT("CN", 0x48, 0x00, DEF , 0, 1),
2250 COUNTRY_CHPLAN_ENT("CO", 0x76, 0x00, DEF , 0, 1),
2251 COUNTRY_CHPLAN_ENT("CR", 0x76, 0x00, DEF , 0, 1),
2252 COUNTRY_CHPLAN_ENT("CY", 0x26, 0x00, DEF , 0, 1),
2253 COUNTRY_CHPLAN_ENT("CZ", 0x26, 0x00, DEF , 0, 1),
2254 COUNTRY_CHPLAN_ENT("DE", 0x26, 0x00, DEF , 0, 1),
2255 COUNTRY_CHPLAN_ENT("DK", 0x26, 0x00, DEF , 0, 1),
2256 COUNTRY_CHPLAN_ENT("DO", 0x76, 0x00, DEF , 0, 1),
2257 COUNTRY_CHPLAN_ENT("DZ", 0x00, 0x00, DEF , 0, 1),
2258 COUNTRY_CHPLAN_ENT("EC", 0x76, 0x00, DEF , 0, 1),
2259 COUNTRY_CHPLAN_ENT("EE", 0x26, 0x00, DEF , 0, 1),
2260 COUNTRY_CHPLAN_ENT("EG", 0x47, 0x00, DEF , 0, 1),
2261 COUNTRY_CHPLAN_ENT("ES", 0x26, 0x00, DEF , 0, 1),
2262 COUNTRY_CHPLAN_ENT("FI", 0x26, 0x00, DEF , 0, 1),
2263 COUNTRY_CHPLAN_ENT("FR", 0x26, 0x00, DEF , 0, 1),
2264 COUNTRY_CHPLAN_ENT("GB", 0x26, 0x00, DEF , 0, 1),
2265 COUNTRY_CHPLAN_ENT("GH", 0x26, 0x00, DEF , 0, 1),
2266 COUNTRY_CHPLAN_ENT("GR", 0x26, 0x00, DEF , 0, 1),
2267 COUNTRY_CHPLAN_ENT("GT", 0x61, 0x00, DEF , 0, 1),
2268 COUNTRY_CHPLAN_ENT("HK", 0x35, 0x00, DEF , 0, 1),
2269 COUNTRY_CHPLAN_ENT("HN", 0x32, 0x00, DEF , 0, 1),
2270 COUNTRY_CHPLAN_ENT("HR", 0x26, 0x00, DEF , 0, 1),
2271 COUNTRY_CHPLAN_ENT("HU", 0x26, 0x00, DEF , 0, 1),
2272 COUNTRY_CHPLAN_ENT("ID", 0x5D, 0x00, DEF , 0, 1),
2273 COUNTRY_CHPLAN_ENT("IE", 0x26, 0x00, DEF , 0, 1),
2274 COUNTRY_CHPLAN_ENT("IL", 0x47, 0x00, DEF , 0, 1),
2275 COUNTRY_CHPLAN_ENT("IN", 0x48, 0x00, DEF , 0, 1),
2276 COUNTRY_CHPLAN_ENT("IS", 0x26, 0x00, DEF , 0, 1),
2277 COUNTRY_CHPLAN_ENT("IT", 0x26, 0x00, DEF , 0, 1),
2278 COUNTRY_CHPLAN_ENT("JM", 0x32, 0x00, DEF , 0, 1),
2279 COUNTRY_CHPLAN_ENT("JO", 0x49, 0x00, DEF , 0, 1),
2280 COUNTRY_CHPLAN_ENT("JP", 0x27, 0x00, DEF , 0, 1),
2281 COUNTRY_CHPLAN_ENT("KE", 0x47, 0x00, DEF , 0, 1),
2282 COUNTRY_CHPLAN_ENT("KG", 0x26, 0x00, DEF , 0, 1),
2283 COUNTRY_CHPLAN_ENT("KH", 0x26, 0x00, DEF , 0, 1),
2284 COUNTRY_CHPLAN_ENT("KR", 0x28, 0x00, DEF , 0, 1),
2285 COUNTRY_CHPLAN_ENT("KW", 0x26, 0x00, DEF , 0, 1),
2286 COUNTRY_CHPLAN_ENT("KZ", 0x26, 0x00, DEF , 0, 1),
2287 COUNTRY_CHPLAN_ENT("LB", 0x26, 0x00, DEF , 0, 1),
2288 COUNTRY_CHPLAN_ENT("LI", 0x26, 0x00, DEF , 0, 1),
2289 COUNTRY_CHPLAN_ENT("LK", 0x26, 0x00, DEF , 0, 1),
2290 COUNTRY_CHPLAN_ENT("LS", 0x26, 0x00, DEF , 0, 1),
2291 COUNTRY_CHPLAN_ENT("LT", 0x26, 0x00, DEF , 0, 1),
2292 COUNTRY_CHPLAN_ENT("LU", 0x26, 0x00, DEF , 0, 1),
2293 COUNTRY_CHPLAN_ENT("LV", 0x26, 0x00, DEF , 0, 1),
2294 COUNTRY_CHPLAN_ENT("MA", 0x47, 0x00, DEF , 0, 1),
2295 COUNTRY_CHPLAN_ENT("MC", 0x26, 0x00, DEF , 0, 1),
2296 COUNTRY_CHPLAN_ENT("MD", 0x26, 0x00, DEF , 0, 1),
2297 COUNTRY_CHPLAN_ENT("ME", 0x26, 0x00, DEF , 0, 1),
2298 COUNTRY_CHPLAN_ENT("MK", 0x26, 0x00, DEF , 0, 1),
2299 COUNTRY_CHPLAN_ENT("MT", 0x26, 0x00, DEF , 0, 1),
2300 COUNTRY_CHPLAN_ENT("MX", 0x34, 0x00, DEF , 0, 1),
2301 COUNTRY_CHPLAN_ENT("MY", 0x63, 0x00, DEF , 0, 1),
2302 COUNTRY_CHPLAN_ENT("MZ", 0x26, 0x00, DEF , 0, 1),
2303 COUNTRY_CHPLAN_ENT("NA", 0x26, 0x00, DEF , 0, 1),
2304 COUNTRY_CHPLAN_ENT("NG", 0x75, 0x00, DEF , 0, 1),
2305 COUNTRY_CHPLAN_ENT("NI", 0x76, 0x00, DEF , 0, 1),
2306 COUNTRY_CHPLAN_ENT("NL", 0x26, 0x00, DEF , 0, 1),
2307 COUNTRY_CHPLAN_ENT("NO", 0x26, 0x00, DEF , 0, 1),
2308 COUNTRY_CHPLAN_ENT("NZ", 0x45, 0x00, DEF , 0, 1),
2309 COUNTRY_CHPLAN_ENT("OM", 0x26, 0x00, DEF , 0, 1),
2310 COUNTRY_CHPLAN_ENT("PA", 0x76, 0x00, DEF , 0, 1),
2311 COUNTRY_CHPLAN_ENT("PE", 0x76, 0x00, DEF , 0, 1),
2312 COUNTRY_CHPLAN_ENT("PG", 0x35, 0x00, DEF , 0, 1),
2313 COUNTRY_CHPLAN_ENT("PH", 0x35, 0x00, DEF , 0, 1),
2314 COUNTRY_CHPLAN_ENT("PK", 0x51, 0x00, DEF , 0, 1),
2315 COUNTRY_CHPLAN_ENT("PL", 0x26, 0x00, DEF , 0, 1),
2316 COUNTRY_CHPLAN_ENT("PR", 0x76, 0x00, DEF , 0, 1),
2317 COUNTRY_CHPLAN_ENT("PT", 0x26, 0x00, DEF , 0, 1),
2318 COUNTRY_CHPLAN_ENT("PY", 0x76, 0x00, DEF , 0, 1),
2319 COUNTRY_CHPLAN_ENT("QA", 0x35, 0x00, DEF , 0, 1),
2320 COUNTRY_CHPLAN_ENT("RO", 0x26, 0x00, DEF , 0, 1),
2321 COUNTRY_CHPLAN_ENT("RS", 0x26, 0x00, DEF , 0, 1),
2322 COUNTRY_CHPLAN_ENT("RU", 0x59, 0x00, DEF , 0, 1),
2323 COUNTRY_CHPLAN_ENT("SA", 0x35, 0x00, DEF , 0, 1),
2324 COUNTRY_CHPLAN_ENT("SE", 0x26, 0x00, DEF , 0, 1),
2325 COUNTRY_CHPLAN_ENT("SG", 0x35, 0x00, DEF , 0, 1),
2326 COUNTRY_CHPLAN_ENT("SI", 0x26, 0x00, DEF , 0, 1),
2327 COUNTRY_CHPLAN_ENT("SK", 0x26, 0x00, DEF , 0, 1),
2328 COUNTRY_CHPLAN_ENT("SN", 0x26, 0x00, DEF , 0, 1),
2329 COUNTRY_CHPLAN_ENT("SV", 0x30, 0x00, DEF , 0, 1),
2330 COUNTRY_CHPLAN_ENT("TH", 0x35, 0x00, DEF , 0, 1),
2331 COUNTRY_CHPLAN_ENT("TN", 0x47, 0x00, DEF , 0, 1),
2332 COUNTRY_CHPLAN_ENT("TR", 0x26, 0x00, DEF , 0, 1),
2333 COUNTRY_CHPLAN_ENT("TT", 0x76, 0x00, DEF , 0, 1),
2334 COUNTRY_CHPLAN_ENT("TW", 0x76, 0x00, DEF , 0, 1),
2335 COUNTRY_CHPLAN_ENT("UA", 0x35, 0x00, DEF , 0, 1),
2336 COUNTRY_CHPLAN_ENT("US", 0x76, 0x00, DEF , 0, 1),
2337 COUNTRY_CHPLAN_ENT("UY", 0x30, 0x00, DEF , 0, 1),
2338 COUNTRY_CHPLAN_ENT("VE", 0x30, 0x00, DEF , 0, 1),
2339 COUNTRY_CHPLAN_ENT("VN", 0x35, 0x00, DEF , 0, 1),
2340 COUNTRY_CHPLAN_ENT("ZA", 0x35, 0x00, DEF , 0, 1),
2341 COUNTRY_CHPLAN_ENT("ZW", 0x26, 0x00, DEF , 0, 1),
2342 };
2343 #endif
2344
2345 #if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8822BE) /* 2016 certify */
2346 static const struct country_chplan RTL8822BE_country_chplan_map[] = {
2347 COUNTRY_CHPLAN_ENT("AE", 0x35, 0x00, DEF , 0, 1),
2348 COUNTRY_CHPLAN_ENT("AL", 0x26, 0x00, DEF , 0, 1),
2349 COUNTRY_CHPLAN_ENT("AM", 0x26, 0x00, DEF , 0, 1),
2350 COUNTRY_CHPLAN_ENT("AN", 0x76, 0x00, DEF , 0, 1),
2351 COUNTRY_CHPLAN_ENT("AO", 0x47, 0x00, DEF , 0, 1),
2352 COUNTRY_CHPLAN_ENT("AR", 0x61, 0x00, DEF , 0, 1),
2353 COUNTRY_CHPLAN_ENT("AT", 0x26, 0x00, DEF , 0, 1),
2354 COUNTRY_CHPLAN_ENT("AU", 0x45, 0x00, DEF , 0, 1),
2355 COUNTRY_CHPLAN_ENT("AZ", 0x26, 0x00, DEF , 0, 1),
2356 COUNTRY_CHPLAN_ENT("BA", 0x26, 0x00, DEF , 0, 1),
2357 COUNTRY_CHPLAN_ENT("BB", 0x76, 0x00, DEF , 0, 1),
2358 COUNTRY_CHPLAN_ENT("BD", 0x26, 0x00, DEF , 0, 1),
2359 COUNTRY_CHPLAN_ENT("BE", 0x26, 0x00, DEF , 0, 1),
2360 COUNTRY_CHPLAN_ENT("BF", 0x26, 0x00, DEF , 0, 1),
2361 COUNTRY_CHPLAN_ENT("BG", 0x26, 0x00, DEF , 0, 1),
2362 COUNTRY_CHPLAN_ENT("BH", 0x48, 0x00, DEF , 0, 1),
2363 COUNTRY_CHPLAN_ENT("BI", 0x26, 0x00, DEF , 0, 1),
2364 COUNTRY_CHPLAN_ENT("BJ", 0x26, 0x00, DEF , 0, 1),
2365 COUNTRY_CHPLAN_ENT("BM", 0x76, 0x00, DEF , 0, 1),
2366 COUNTRY_CHPLAN_ENT("BN", 0x47, 0x00, DEF , 0, 1),
2367 COUNTRY_CHPLAN_ENT("BO", 0x73, 0x00, DEF , 0, 1),
2368 COUNTRY_CHPLAN_ENT("BR", 0x62, 0x00, DEF , 0, 1),
2369 COUNTRY_CHPLAN_ENT("BS", 0x76, 0x00, DEF , 0, 1),
2370 COUNTRY_CHPLAN_ENT("BW", 0x35, 0x00, DEF , 0, 1),
2371 COUNTRY_CHPLAN_ENT("BY", 0x26, 0x00, DEF , 0, 1),
2372 COUNTRY_CHPLAN_ENT("CA", 0x2B, 0x00, DEF , 0, 1),
2373 COUNTRY_CHPLAN_ENT("CD", 0x26, 0x00, DEF , 0, 1),
2374 COUNTRY_CHPLAN_ENT("CF", 0x26, 0x00, DEF , 0, 1),
2375 COUNTRY_CHPLAN_ENT("CG", 0x26, 0x00, DEF , 0, 1),
2376 COUNTRY_CHPLAN_ENT("CH", 0x26, 0x00, DEF , 0, 1),
2377 COUNTRY_CHPLAN_ENT("CI", 0x42, 0x00, DEF , 0, 1),
2378 COUNTRY_CHPLAN_ENT("CL", 0x2D, 0x00, DEF , 0, 1),
2379 COUNTRY_CHPLAN_ENT("CM", 0x26, 0x00, DEF , 0, 1),
2380 COUNTRY_CHPLAN_ENT("CN", 0x48, 0x00, DEF , 0, 1),
2381 COUNTRY_CHPLAN_ENT("CO", 0x76, 0x00, DEF , 0, 1),
2382 COUNTRY_CHPLAN_ENT("CR", 0x76, 0x00, DEF , 0, 1),
2383 COUNTRY_CHPLAN_ENT("CV", 0x26, 0x00, DEF , 0, 1),
2384 COUNTRY_CHPLAN_ENT("CY", 0x26, 0x00, DEF , 0, 1),
2385 COUNTRY_CHPLAN_ENT("CZ", 0x26, 0x00, DEF , 0, 1),
2386 COUNTRY_CHPLAN_ENT("DE", 0x26, 0x00, DEF , 0, 1),
2387 COUNTRY_CHPLAN_ENT("DJ", 0x26, 0x00, DEF , 0, 1),
2388 COUNTRY_CHPLAN_ENT("DK", 0x26, 0x00, DEF , 0, 1),
2389 COUNTRY_CHPLAN_ENT("DO", 0x76, 0x00, DEF , 0, 1),
2390 COUNTRY_CHPLAN_ENT("DZ", 0x00, 0x00, DEF , 0, 1),
2391 COUNTRY_CHPLAN_ENT("EC", 0x76, 0x00, DEF , 0, 1),
2392 COUNTRY_CHPLAN_ENT("EE", 0x26, 0x00, DEF , 0, 1),
2393 COUNTRY_CHPLAN_ENT("EG", 0x47, 0x00, DEF , 0, 1),
2394 COUNTRY_CHPLAN_ENT("EH", 0x47, 0x00, DEF , 0, 1),
2395 COUNTRY_CHPLAN_ENT("ES", 0x26, 0x00, DEF , 0, 1),
2396 COUNTRY_CHPLAN_ENT("FI", 0x26, 0x00, DEF , 0, 1),
2397 COUNTRY_CHPLAN_ENT("FJ", 0x76, 0x00, DEF , 0, 1),
2398 COUNTRY_CHPLAN_ENT("FR", 0x26, 0x00, DEF , 0, 1),
2399 COUNTRY_CHPLAN_ENT("GA", 0x26, 0x00, DEF , 0, 1),
2400 COUNTRY_CHPLAN_ENT("GB", 0x26, 0x00, DEF , 0, 1),
2401 COUNTRY_CHPLAN_ENT("GE", 0x26, 0x00, DEF , 0, 1),
2402 COUNTRY_CHPLAN_ENT("GH", 0x26, 0x00, DEF , 0, 1),
2403 COUNTRY_CHPLAN_ENT("GI", 0x26, 0x00, DEF , 0, 1),
2404 COUNTRY_CHPLAN_ENT("GL", 0x26, 0x00, DEF , 0, 1),
2405 COUNTRY_CHPLAN_ENT("GM", 0x26, 0x00, DEF , 0, 1),
2406 COUNTRY_CHPLAN_ENT("GN", 0x26, 0x00, DEF , 0, 1),
2407 COUNTRY_CHPLAN_ENT("GP", 0x26, 0x00, DEF , 0, 1),
2408 COUNTRY_CHPLAN_ENT("GQ", 0x26, 0x00, DEF , 0, 1),
2409 COUNTRY_CHPLAN_ENT("GR", 0x26, 0x00, DEF , 0, 1),
2410 COUNTRY_CHPLAN_ENT("GT", 0x61, 0x00, DEF , 0, 1),
2411 COUNTRY_CHPLAN_ENT("GU", 0x76, 0x00, DEF , 0, 1),
2412 COUNTRY_CHPLAN_ENT("GW", 0x26, 0x00, DEF , 0, 1),
2413 COUNTRY_CHPLAN_ENT("HK", 0x35, 0x00, DEF , 0, 1),
2414 COUNTRY_CHPLAN_ENT("HN", 0x32, 0x00, DEF , 0, 1),
2415 COUNTRY_CHPLAN_ENT("HR", 0x26, 0x00, DEF , 0, 1),
2416 COUNTRY_CHPLAN_ENT("HT", 0x76, 0x00, DEF , 0, 1),
2417 COUNTRY_CHPLAN_ENT("HU", 0x26, 0x00, DEF , 0, 1),
2418 COUNTRY_CHPLAN_ENT("ID", 0x3D, 0x00, DEF , 0, 0),
2419 COUNTRY_CHPLAN_ENT("IE", 0x26, 0x00, DEF , 0, 1),
2420 COUNTRY_CHPLAN_ENT("IL", 0x47, 0x00, DEF , 0, 1),
2421 COUNTRY_CHPLAN_ENT("IN", 0x48, 0x00, DEF , 0, 1),
2422 COUNTRY_CHPLAN_ENT("IS", 0x26, 0x00, DEF , 0, 1),
2423 COUNTRY_CHPLAN_ENT("IT", 0x26, 0x00, DEF , 0, 1),
2424 COUNTRY_CHPLAN_ENT("JM", 0x32, 0x00, DEF , 0, 1),
2425 COUNTRY_CHPLAN_ENT("JO", 0x49, 0x00, DEF , 0, 1),
2426 COUNTRY_CHPLAN_ENT("JP", 0x27, 0x00, DEF , 0, 1),
2427 COUNTRY_CHPLAN_ENT("KE", 0x47, 0x00, DEF , 0, 1),
2428 COUNTRY_CHPLAN_ENT("KG", 0x26, 0x00, DEF , 0, 1),
2429 COUNTRY_CHPLAN_ENT("KH", 0x26, 0x00, DEF , 0, 1),
2430 COUNTRY_CHPLAN_ENT("KR", 0x28, 0x00, DEF , 0, 1),
2431 COUNTRY_CHPLAN_ENT("KW", 0x26, 0x00, DEF , 0, 1),
2432 COUNTRY_CHPLAN_ENT("KZ", 0x26, 0x00, DEF , 0, 1),
2433 COUNTRY_CHPLAN_ENT("LB", 0x26, 0x00, DEF , 0, 1),
2434 COUNTRY_CHPLAN_ENT("LI", 0x26, 0x00, DEF , 0, 1),
2435 COUNTRY_CHPLAN_ENT("LK", 0x26, 0x00, DEF , 0, 1),
2436 COUNTRY_CHPLAN_ENT("LR", 0x26, 0x00, DEF , 0, 1),
2437 COUNTRY_CHPLAN_ENT("LS", 0x26, 0x00, DEF , 0, 1),
2438 COUNTRY_CHPLAN_ENT("LT", 0x26, 0x00, DEF , 0, 1),
2439 COUNTRY_CHPLAN_ENT("LU", 0x26, 0x00, DEF , 0, 1),
2440 COUNTRY_CHPLAN_ENT("LV", 0x26, 0x00, DEF , 0, 1),
2441 COUNTRY_CHPLAN_ENT("MA", 0x47, 0x00, DEF , 0, 1),
2442 COUNTRY_CHPLAN_ENT("MC", 0x26, 0x00, DEF , 0, 1),
2443 COUNTRY_CHPLAN_ENT("MD", 0x26, 0x00, DEF , 0, 1),
2444 COUNTRY_CHPLAN_ENT("ME", 0x26, 0x00, DEF , 0, 1),
2445 COUNTRY_CHPLAN_ENT("MG", 0x26, 0x00, DEF , 0, 1),
2446 COUNTRY_CHPLAN_ENT("MK", 0x26, 0x00, DEF , 0, 1),
2447 COUNTRY_CHPLAN_ENT("ML", 0x26, 0x00, DEF , 0, 1),
2448 COUNTRY_CHPLAN_ENT("MO", 0x35, 0x00, DEF , 0, 1),
2449 COUNTRY_CHPLAN_ENT("MQ", 0x26, 0x00, DEF , 0, 1),
2450 COUNTRY_CHPLAN_ENT("MR", 0x26, 0x00, DEF , 0, 1),
2451 COUNTRY_CHPLAN_ENT("MT", 0x26, 0x00, DEF , 0, 1),
2452 COUNTRY_CHPLAN_ENT("MU", 0x26, 0x00, DEF , 0, 1),
2453 COUNTRY_CHPLAN_ENT("MW", 0x26, 0x00, DEF , 0, 1),
2454 COUNTRY_CHPLAN_ENT("MX", 0x4D, 0x00, DEF , 0, 1),
2455 COUNTRY_CHPLAN_ENT("MY", 0x63, 0x00, DEF , 0, 1),
2456 COUNTRY_CHPLAN_ENT("MZ", 0x26, 0x00, DEF , 0, 1),
2457 COUNTRY_CHPLAN_ENT("NA", 0x26, 0x00, DEF , 0, 1),
2458 COUNTRY_CHPLAN_ENT("NE", 0x26, 0x00, DEF , 0, 1),
2459 COUNTRY_CHPLAN_ENT("NG", 0x75, 0x00, DEF , 0, 1),
2460 COUNTRY_CHPLAN_ENT("NI", 0x76, 0x00, DEF , 0, 1),
2461 COUNTRY_CHPLAN_ENT("NL", 0x26, 0x00, DEF , 0, 1),
2462 COUNTRY_CHPLAN_ENT("NO", 0x26, 0x00, DEF , 0, 1),
2463 COUNTRY_CHPLAN_ENT("NP", 0x48, 0x00, DEF , 0, 1),
2464 COUNTRY_CHPLAN_ENT("NZ", 0x45, 0x00, DEF , 0, 1),
2465 COUNTRY_CHPLAN_ENT("OM", 0x26, 0x00, DEF , 0, 1),
2466 COUNTRY_CHPLAN_ENT("PA", 0x76, 0x00, DEF , 0, 1),
2467 COUNTRY_CHPLAN_ENT("PE", 0x76, 0x00, DEF , 0, 1),
2468 COUNTRY_CHPLAN_ENT("PG", 0x35, 0x00, DEF , 0, 1),
2469 COUNTRY_CHPLAN_ENT("PH", 0x35, 0x00, DEF , 0, 1),
2470 COUNTRY_CHPLAN_ENT("PK", 0x51, 0x00, DEF , 0, 1),
2471 COUNTRY_CHPLAN_ENT("PL", 0x26, 0x00, DEF , 0, 1),
2472 COUNTRY_CHPLAN_ENT("PR", 0x76, 0x00, DEF , 0, 1),
2473 COUNTRY_CHPLAN_ENT("PT", 0x26, 0x00, DEF , 0, 1),
2474 COUNTRY_CHPLAN_ENT("PY", 0x76, 0x00, DEF , 0, 1),
2475 COUNTRY_CHPLAN_ENT("QA", 0x35, 0x00, DEF , 0, 1),
2476 COUNTRY_CHPLAN_ENT("RO", 0x26, 0x00, DEF , 0, 1),
2477 COUNTRY_CHPLAN_ENT("RS", 0x26, 0x00, DEF , 0, 1),
2478 COUNTRY_CHPLAN_ENT("RU", 0x59, 0x00, DEF , 0, 1),
2479 COUNTRY_CHPLAN_ENT("SA", 0x35, 0x00, DEF , 0, 1),
2480 COUNTRY_CHPLAN_ENT("SC", 0x76, 0x00, DEF , 0, 1),
2481 COUNTRY_CHPLAN_ENT("SE", 0x26, 0x00, DEF , 0, 1),
2482 COUNTRY_CHPLAN_ENT("SG", 0x35, 0x00, DEF , 0, 1),
2483 COUNTRY_CHPLAN_ENT("SI", 0x26, 0x00, DEF , 0, 1),
2484 COUNTRY_CHPLAN_ENT("SK", 0x26, 0x00, DEF , 0, 1),
2485 COUNTRY_CHPLAN_ENT("SL", 0x26, 0x00, DEF , 0, 1),
2486 COUNTRY_CHPLAN_ENT("SN", 0x26, 0x00, DEF , 0, 1),
2487 COUNTRY_CHPLAN_ENT("ST", 0x76, 0x00, DEF , 0, 1),
2488 COUNTRY_CHPLAN_ENT("SV", 0x30, 0x00, DEF , 0, 1),
2489 COUNTRY_CHPLAN_ENT("TD", 0x26, 0x00, DEF , 0, 1),
2490 COUNTRY_CHPLAN_ENT("TF", 0x26, 0x00, DEF , 0, 1),
2491 COUNTRY_CHPLAN_ENT("TG", 0x26, 0x00, DEF , 0, 1),
2492 COUNTRY_CHPLAN_ENT("TH", 0x35, 0x00, DEF , 0, 1),
2493 COUNTRY_CHPLAN_ENT("TJ", 0x26, 0x00, DEF , 0, 1),
2494 COUNTRY_CHPLAN_ENT("TN", 0x47, 0x00, DEF , 0, 1),
2495 COUNTRY_CHPLAN_ENT("TR", 0x26, 0x00, DEF , 0, 1),
2496 COUNTRY_CHPLAN_ENT("TT", 0x76, 0x00, DEF , 0, 1),
2497 COUNTRY_CHPLAN_ENT("TW", 0x76, 0x00, DEF , 0, 1),
2498 COUNTRY_CHPLAN_ENT("TZ", 0x26, 0x00, DEF , 0, 1),
2499 COUNTRY_CHPLAN_ENT("UA", 0x35, 0x00, UKRAINE, 0, 1),
2500 COUNTRY_CHPLAN_ENT("UG", 0x26, 0x00, DEF , 0, 1),
2501 COUNTRY_CHPLAN_ENT("US", 0x76, 0x00, DEF , 0, 1),
2502 COUNTRY_CHPLAN_ENT("UY", 0x30, 0x00, DEF , 0, 1),
2503 COUNTRY_CHPLAN_ENT("UZ", 0x47, 0x00, DEF , 0, 1),
2504 COUNTRY_CHPLAN_ENT("VE", 0x30, 0x00, DEF , 0, 1),
2505 COUNTRY_CHPLAN_ENT("VN", 0x35, 0x00, DEF , 0, 1),
2506 COUNTRY_CHPLAN_ENT("YT", 0x26, 0x00, DEF , 0, 1),
2507 COUNTRY_CHPLAN_ENT("ZA", 0x35, 0x00, DEF , 0, 1),
2508 COUNTRY_CHPLAN_ENT("ZM", 0x26, 0x00, DEF , 0, 1),
2509 COUNTRY_CHPLAN_ENT("ZW", 0x26, 0x00, DEF , 0, 1),
2510 };
2511 #endif
2512
2513 #if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8821CE) /* 2016 certify */
2514 static const struct country_chplan RTL8821CE_country_chplan_map[] = {
2515 COUNTRY_CHPLAN_ENT("AE", 0x35, 0x00, DEF , 0, 1),
2516 COUNTRY_CHPLAN_ENT("AL", 0x26, 0x00, DEF , 0, 1),
2517 COUNTRY_CHPLAN_ENT("AM", 0x26, 0x00, DEF , 0, 1),
2518 COUNTRY_CHPLAN_ENT("AN", 0x76, 0x00, DEF , 0, 1),
2519 COUNTRY_CHPLAN_ENT("AO", 0x47, 0x00, DEF , 0, 1),
2520 COUNTRY_CHPLAN_ENT("AR", 0x61, 0x00, DEF , 0, 1),
2521 COUNTRY_CHPLAN_ENT("AT", 0x26, 0x00, DEF , 0, 1),
2522 COUNTRY_CHPLAN_ENT("AU", 0x45, 0x00, DEF , 0, 1),
2523 COUNTRY_CHPLAN_ENT("AZ", 0x26, 0x00, DEF , 0, 1),
2524 COUNTRY_CHPLAN_ENT("BA", 0x26, 0x00, DEF , 0, 1),
2525 COUNTRY_CHPLAN_ENT("BB", 0x76, 0x00, DEF , 0, 1),
2526 COUNTRY_CHPLAN_ENT("BD", 0x26, 0x00, DEF , 0, 1),
2527 COUNTRY_CHPLAN_ENT("BE", 0x26, 0x00, DEF , 0, 1),
2528 COUNTRY_CHPLAN_ENT("BF", 0x26, 0x00, DEF , 0, 1),
2529 COUNTRY_CHPLAN_ENT("BG", 0x26, 0x00, DEF , 0, 1),
2530 COUNTRY_CHPLAN_ENT("BH", 0x48, 0x00, DEF , 0, 1),
2531 COUNTRY_CHPLAN_ENT("BI", 0x26, 0x00, DEF , 0, 1),
2532 COUNTRY_CHPLAN_ENT("BJ", 0x26, 0x00, DEF , 0, 1),
2533 COUNTRY_CHPLAN_ENT("BM", 0x76, 0x00, DEF , 0, 1),
2534 COUNTRY_CHPLAN_ENT("BN", 0x47, 0x00, DEF , 0, 1),
2535 COUNTRY_CHPLAN_ENT("BO", 0x73, 0x00, DEF , 0, 1),
2536 COUNTRY_CHPLAN_ENT("BR", 0x62, 0x00, DEF , 0, 1),
2537 COUNTRY_CHPLAN_ENT("BS", 0x76, 0x00, DEF , 0, 1),
2538 COUNTRY_CHPLAN_ENT("BW", 0x35, 0x00, DEF , 0, 1),
2539 COUNTRY_CHPLAN_ENT("BY", 0x26, 0x00, DEF , 0, 1),
2540 COUNTRY_CHPLAN_ENT("CA", 0x2B, 0x00, DEF , 0, 1),
2541 COUNTRY_CHPLAN_ENT("CD", 0x26, 0x00, DEF , 0, 1),
2542 COUNTRY_CHPLAN_ENT("CF", 0x26, 0x00, DEF , 0, 1),
2543 COUNTRY_CHPLAN_ENT("CG", 0x26, 0x00, DEF , 0, 1),
2544 COUNTRY_CHPLAN_ENT("CH", 0x26, 0x00, DEF , 0, 1),
2545 COUNTRY_CHPLAN_ENT("CI", 0x42, 0x00, DEF , 0, 1),
2546 COUNTRY_CHPLAN_ENT("CL", 0x2D, 0x00, DEF , 0, 1),
2547 COUNTRY_CHPLAN_ENT("CM", 0x26, 0x00, DEF , 0, 1),
2548 COUNTRY_CHPLAN_ENT("CN", 0x48, 0x00, DEF , 0, 1),
2549 COUNTRY_CHPLAN_ENT("CO", 0x76, 0x00, DEF , 0, 1),
2550 COUNTRY_CHPLAN_ENT("CR", 0x76, 0x00, DEF , 0, 1),
2551 COUNTRY_CHPLAN_ENT("CV", 0x26, 0x00, DEF , 0, 1),
2552 COUNTRY_CHPLAN_ENT("CY", 0x26, 0x00, DEF , 0, 1),
2553 COUNTRY_CHPLAN_ENT("CZ", 0x26, 0x00, DEF , 0, 1),
2554 COUNTRY_CHPLAN_ENT("DE", 0x26, 0x00, DEF , 0, 1),
2555 COUNTRY_CHPLAN_ENT("DJ", 0x26, 0x00, DEF , 0, 1),
2556 COUNTRY_CHPLAN_ENT("DK", 0x26, 0x00, DEF , 0, 1),
2557 COUNTRY_CHPLAN_ENT("DO", 0x76, 0x00, DEF , 0, 1),
2558 COUNTRY_CHPLAN_ENT("DZ", 0x00, 0x00, DEF , 0, 1),
2559 COUNTRY_CHPLAN_ENT("EC", 0x76, 0x00, DEF , 0, 1),
2560 COUNTRY_CHPLAN_ENT("EE", 0x26, 0x00, DEF , 0, 1),
2561 COUNTRY_CHPLAN_ENT("EG", 0x47, 0x00, DEF , 0, 1),
2562 COUNTRY_CHPLAN_ENT("EH", 0x47, 0x00, DEF , 0, 1),
2563 COUNTRY_CHPLAN_ENT("ES", 0x26, 0x00, DEF , 0, 1),
2564 COUNTRY_CHPLAN_ENT("ET", 0x26, 0x00, DEF , 0, 1),
2565 COUNTRY_CHPLAN_ENT("FI", 0x26, 0x00, DEF , 0, 1),
2566 COUNTRY_CHPLAN_ENT("FJ", 0x76, 0x00, DEF , 0, 1),
2567 COUNTRY_CHPLAN_ENT("FR", 0x26, 0x00, DEF , 0, 1),
2568 COUNTRY_CHPLAN_ENT("GA", 0x26, 0x00, DEF , 0, 1),
2569 COUNTRY_CHPLAN_ENT("GB", 0x26, 0x00, DEF , 0, 1),
2570 COUNTRY_CHPLAN_ENT("GE", 0x26, 0x00, DEF , 0, 1),
2571 COUNTRY_CHPLAN_ENT("GH", 0x26, 0x00, DEF , 0, 1),
2572 COUNTRY_CHPLAN_ENT("GI", 0x26, 0x00, DEF , 0, 1),
2573 COUNTRY_CHPLAN_ENT("GL", 0x26, 0x00, DEF , 0, 1),
2574 COUNTRY_CHPLAN_ENT("GM", 0x26, 0x00, DEF , 0, 1),
2575 COUNTRY_CHPLAN_ENT("GN", 0x26, 0x00, DEF , 0, 1),
2576 COUNTRY_CHPLAN_ENT("GP", 0x26, 0x00, DEF , 0, 1),
2577 COUNTRY_CHPLAN_ENT("GQ", 0x26, 0x00, DEF , 0, 1),
2578 COUNTRY_CHPLAN_ENT("GR", 0x26, 0x00, DEF , 0, 1),
2579 COUNTRY_CHPLAN_ENT("GT", 0x61, 0x00, DEF , 0, 1),
2580 COUNTRY_CHPLAN_ENT("GU", 0x76, 0x00, DEF , 0, 1),
2581 COUNTRY_CHPLAN_ENT("GW", 0x26, 0x00, DEF , 0, 1),
2582 COUNTRY_CHPLAN_ENT("HK", 0x35, 0x00, DEF , 0, 1),
2583 COUNTRY_CHPLAN_ENT("HN", 0x32, 0x00, DEF , 0, 1),
2584 COUNTRY_CHPLAN_ENT("HR", 0x26, 0x00, DEF , 0, 1),
2585 COUNTRY_CHPLAN_ENT("HT", 0x76, 0x00, DEF , 0, 1),
2586 COUNTRY_CHPLAN_ENT("HU", 0x26, 0x00, DEF , 0, 1),
2587 COUNTRY_CHPLAN_ENT("ID", 0x3D, 0x00, DEF , 0, 0),
2588 COUNTRY_CHPLAN_ENT("IE", 0x26, 0x00, DEF , 0, 1),
2589 COUNTRY_CHPLAN_ENT("IL", 0x47, 0x00, DEF , 0, 1),
2590 COUNTRY_CHPLAN_ENT("IN", 0x48, 0x00, DEF , 0, 1),
2591 COUNTRY_CHPLAN_ENT("IS", 0x26, 0x00, DEF , 0, 1),
2592 COUNTRY_CHPLAN_ENT("IT", 0x26, 0x00, DEF , 0, 1),
2593 COUNTRY_CHPLAN_ENT("JM", 0x32, 0x00, DEF , 0, 1),
2594 COUNTRY_CHPLAN_ENT("JO", 0x49, 0x00, DEF , 0, 1),
2595 COUNTRY_CHPLAN_ENT("JP", 0x27, 0x00, DEF , 0, 1),
2596 COUNTRY_CHPLAN_ENT("KE", 0x47, 0x00, DEF , 0, 1),
2597 COUNTRY_CHPLAN_ENT("KG", 0x26, 0x00, DEF , 0, 1),
2598 COUNTRY_CHPLAN_ENT("KH", 0x26, 0x00, DEF , 0, 1),
2599 COUNTRY_CHPLAN_ENT("KR", 0x28, 0x00, DEF , 0, 1),
2600 COUNTRY_CHPLAN_ENT("KW", 0x26, 0x00, DEF , 0, 1),
2601 COUNTRY_CHPLAN_ENT("KZ", 0x26, 0x00, DEF , 0, 1),
2602 COUNTRY_CHPLAN_ENT("LB", 0x26, 0x00, DEF , 0, 1),
2603 COUNTRY_CHPLAN_ENT("LI", 0x26, 0x00, DEF , 0, 1),
2604 COUNTRY_CHPLAN_ENT("LK", 0x26, 0x00, DEF , 0, 1),
2605 COUNTRY_CHPLAN_ENT("LR", 0x26, 0x00, DEF , 0, 1),
2606 COUNTRY_CHPLAN_ENT("LS", 0x26, 0x00, DEF , 0, 1),
2607 COUNTRY_CHPLAN_ENT("LT", 0x26, 0x00, DEF , 0, 1),
2608 COUNTRY_CHPLAN_ENT("LU", 0x26, 0x00, DEF , 0, 1),
2609 COUNTRY_CHPLAN_ENT("LV", 0x26, 0x00, DEF , 0, 1),
2610 COUNTRY_CHPLAN_ENT("MA", 0x47, 0x00, DEF , 0, 1),
2611 COUNTRY_CHPLAN_ENT("MC", 0x26, 0x00, DEF , 0, 1),
2612 COUNTRY_CHPLAN_ENT("MD", 0x26, 0x00, DEF , 0, 1),
2613 COUNTRY_CHPLAN_ENT("ME", 0x26, 0x00, DEF , 0, 1),
2614 COUNTRY_CHPLAN_ENT("MG", 0x26, 0x00, DEF , 0, 1),
2615 COUNTRY_CHPLAN_ENT("MK", 0x26, 0x00, DEF , 0, 1),
2616 COUNTRY_CHPLAN_ENT("ML", 0x26, 0x00, DEF , 0, 1),
2617 COUNTRY_CHPLAN_ENT("MO", 0x35, 0x00, DEF , 0, 1),
2618 COUNTRY_CHPLAN_ENT("MQ", 0x26, 0x00, DEF , 0, 1),
2619 COUNTRY_CHPLAN_ENT("MR", 0x26, 0x00, DEF , 0, 1),
2620 COUNTRY_CHPLAN_ENT("MT", 0x26, 0x00, DEF , 0, 1),
2621 COUNTRY_CHPLAN_ENT("MU", 0x26, 0x00, DEF , 0, 1),
2622 COUNTRY_CHPLAN_ENT("MW", 0x26, 0x00, DEF , 0, 1),
2623 COUNTRY_CHPLAN_ENT("MX", 0x4D, 0x00, DEF , 0, 1),
2624 COUNTRY_CHPLAN_ENT("MY", 0x63, 0x00, DEF , 0, 1),
2625 COUNTRY_CHPLAN_ENT("MZ", 0x26, 0x00, DEF , 0, 1),
2626 COUNTRY_CHPLAN_ENT("NA", 0x26, 0x00, DEF , 0, 1),
2627 COUNTRY_CHPLAN_ENT("NE", 0x26, 0x00, DEF , 0, 1),
2628 COUNTRY_CHPLAN_ENT("NG", 0x75, 0x00, DEF , 0, 1),
2629 COUNTRY_CHPLAN_ENT("NI", 0x76, 0x00, DEF , 0, 1),
2630 COUNTRY_CHPLAN_ENT("NL", 0x26, 0x00, DEF , 0, 1),
2631 COUNTRY_CHPLAN_ENT("NO", 0x26, 0x00, DEF , 0, 1),
2632 COUNTRY_CHPLAN_ENT("NP", 0x48, 0x00, DEF , 0, 1),
2633 COUNTRY_CHPLAN_ENT("NZ", 0x45, 0x00, DEF , 0, 1),
2634 COUNTRY_CHPLAN_ENT("OM", 0x26, 0x00, DEF , 0, 1),
2635 COUNTRY_CHPLAN_ENT("PA", 0x76, 0x00, DEF , 0, 1),
2636 COUNTRY_CHPLAN_ENT("PE", 0x76, 0x00, DEF , 0, 1),
2637 COUNTRY_CHPLAN_ENT("PG", 0x35, 0x00, DEF , 0, 1),
2638 COUNTRY_CHPLAN_ENT("PH", 0x35, 0x00, DEF , 0, 1),
2639 COUNTRY_CHPLAN_ENT("PK", 0x51, 0x00, DEF , 0, 1),
2640 COUNTRY_CHPLAN_ENT("PL", 0x26, 0x00, DEF , 0, 1),
2641 COUNTRY_CHPLAN_ENT("PR", 0x76, 0x00, DEF , 0, 1),
2642 COUNTRY_CHPLAN_ENT("PT", 0x26, 0x00, DEF , 0, 1),
2643 COUNTRY_CHPLAN_ENT("PY", 0x76, 0x00, DEF , 0, 1),
2644 COUNTRY_CHPLAN_ENT("QA", 0x35, 0x00, DEF , 0, 1),
2645 COUNTRY_CHPLAN_ENT("RO", 0x26, 0x00, DEF , 0, 1),
2646 COUNTRY_CHPLAN_ENT("RS", 0x26, 0x00, DEF , 0, 1),
2647 COUNTRY_CHPLAN_ENT("RU", 0x59, 0x00, DEF , 0, 1),
2648 COUNTRY_CHPLAN_ENT("SA", 0x35, 0x00, DEF , 0, 1),
2649 COUNTRY_CHPLAN_ENT("SC", 0x76, 0x00, DEF , 0, 1),
2650 COUNTRY_CHPLAN_ENT("SE", 0x26, 0x00, DEF , 0, 1),
2651 COUNTRY_CHPLAN_ENT("SG", 0x35, 0x00, DEF , 0, 1),
2652 COUNTRY_CHPLAN_ENT("SI", 0x26, 0x00, DEF , 0, 1),
2653 COUNTRY_CHPLAN_ENT("SK", 0x26, 0x00, DEF , 0, 1),
2654 COUNTRY_CHPLAN_ENT("SL", 0x26, 0x00, DEF , 0, 1),
2655 COUNTRY_CHPLAN_ENT("SN", 0x26, 0x00, DEF , 0, 1),
2656 COUNTRY_CHPLAN_ENT("ST", 0x76, 0x00, DEF , 0, 1),
2657 COUNTRY_CHPLAN_ENT("SV", 0x30, 0x00, DEF , 0, 1),
2658 COUNTRY_CHPLAN_ENT("TD", 0x26, 0x00, DEF , 0, 1),
2659 COUNTRY_CHPLAN_ENT("TF", 0x26, 0x00, DEF , 0, 1),
2660 COUNTRY_CHPLAN_ENT("TG", 0x26, 0x00, DEF , 0, 1),
2661 COUNTRY_CHPLAN_ENT("TH", 0x35, 0x00, DEF , 0, 1),
2662 COUNTRY_CHPLAN_ENT("TJ", 0x26, 0x00, DEF , 0, 1),
2663 COUNTRY_CHPLAN_ENT("TN", 0x47, 0x00, DEF , 0, 1),
2664 COUNTRY_CHPLAN_ENT("TR", 0x26, 0x00, DEF , 0, 1),
2665 COUNTRY_CHPLAN_ENT("TW", 0x76, 0x00, DEF , 0, 1),
2666 COUNTRY_CHPLAN_ENT("TZ", 0x26, 0x00, DEF , 0, 1),
2667 COUNTRY_CHPLAN_ENT("UA", 0x35, 0x00, UKRAINE, 0, 1),
2668 COUNTRY_CHPLAN_ENT("UG", 0x26, 0x00, DEF , 0, 1),
2669 COUNTRY_CHPLAN_ENT("US", 0x76, 0x00, DEF , 0, 1),
2670 COUNTRY_CHPLAN_ENT("UY", 0x30, 0x00, DEF , 0, 1),
2671 COUNTRY_CHPLAN_ENT("UZ", 0x47, 0x00, DEF , 0, 1),
2672 COUNTRY_CHPLAN_ENT("VE", 0x30, 0x00, DEF , 0, 1),
2673 COUNTRY_CHPLAN_ENT("VN", 0x35, 0x00, DEF , 0, 1),
2674 COUNTRY_CHPLAN_ENT("YT", 0x26, 0x00, DEF , 0, 1),
2675 COUNTRY_CHPLAN_ENT("ZA", 0x35, 0x00, DEF , 0, 1),
2676 COUNTRY_CHPLAN_ENT("ZM", 0x26, 0x00, DEF , 0, 1),
2677 COUNTRY_CHPLAN_ENT("ZW", 0x26, 0x00, DEF , 0, 1),
2678 };
2679 #endif
2680
2681 #if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8822CE) /* 2018 certify */
2682 static const struct country_chplan RTL8822CE_country_chplan_map[] = {
2683 COUNTRY_CHPLAN_ENT("AE", 0x35, 0x00, DEF , 0, 1),
2684 COUNTRY_CHPLAN_ENT("AL", 0x26, 0x00, DEF , 0, 1),
2685 COUNTRY_CHPLAN_ENT("AM", 0x26, 0x00, DEF , 0, 1),
2686 COUNTRY_CHPLAN_ENT("AN", 0x76, 0x00, DEF , 0, 1),
2687 COUNTRY_CHPLAN_ENT("AO", 0x47, 0x00, DEF , 0, 1),
2688 COUNTRY_CHPLAN_ENT("AR", 0x61, 0x00, DEF , 0, 1),
2689 COUNTRY_CHPLAN_ENT("AT", 0x26, 0x00, DEF , 0, 1),
2690 COUNTRY_CHPLAN_ENT("AU", 0x45, 0x00, DEF , 0, 1),
2691 COUNTRY_CHPLAN_ENT("AW", 0x76, 0x00, DEF , 0, 1),
2692 COUNTRY_CHPLAN_ENT("AZ", 0x26, 0x00, DEF , 0, 1),
2693 COUNTRY_CHPLAN_ENT("BA", 0x26, 0x00, DEF , 0, 1),
2694 COUNTRY_CHPLAN_ENT("BB", 0x76, 0x00, DEF , 0, 1),
2695 COUNTRY_CHPLAN_ENT("BD", 0x26, 0x00, DEF , 0, 1),
2696 COUNTRY_CHPLAN_ENT("BE", 0x26, 0x00, DEF , 0, 1),
2697 COUNTRY_CHPLAN_ENT("BF", 0x26, 0x00, DEF , 0, 1),
2698 COUNTRY_CHPLAN_ENT("BG", 0x26, 0x00, DEF , 0, 1),
2699 COUNTRY_CHPLAN_ENT("BH", 0x48, 0x00, DEF , 0, 1),
2700 COUNTRY_CHPLAN_ENT("BI", 0x26, 0x00, DEF , 0, 1),
2701 COUNTRY_CHPLAN_ENT("BJ", 0x26, 0x00, DEF , 0, 1),
2702 COUNTRY_CHPLAN_ENT("BM", 0x76, 0x00, DEF , 0, 1),
2703 COUNTRY_CHPLAN_ENT("BN", 0x47, 0x00, DEF , 0, 1),
2704 COUNTRY_CHPLAN_ENT("BO", 0x73, 0x00, DEF , 0, 1),
2705 COUNTRY_CHPLAN_ENT("BR", 0x62, 0x00, DEF , 0, 1),
2706 COUNTRY_CHPLAN_ENT("BS", 0x76, 0x00, DEF , 0, 1),
2707 COUNTRY_CHPLAN_ENT("BW", 0x35, 0x00, DEF , 0, 1),
2708 COUNTRY_CHPLAN_ENT("BY", 0x26, 0x00, DEF , 0, 1),
2709 COUNTRY_CHPLAN_ENT("CA", 0x2B, 0x00, DEF , 0, 1),
2710 COUNTRY_CHPLAN_ENT("CD", 0x26, 0x00, DEF , 0, 1),
2711 COUNTRY_CHPLAN_ENT("CF", 0x26, 0x00, DEF , 0, 1),
2712 COUNTRY_CHPLAN_ENT("CG", 0x26, 0x00, DEF , 0, 1),
2713 COUNTRY_CHPLAN_ENT("CH", 0x26, 0x00, DEF , 0, 1),
2714 COUNTRY_CHPLAN_ENT("CI", 0x42, 0x00, DEF , 0, 1),
2715 COUNTRY_CHPLAN_ENT("CL", 0x2D, 0x00, DEF , 0, 1),
2716 COUNTRY_CHPLAN_ENT("CM", 0x26, 0x00, DEF , 0, 1),
2717 COUNTRY_CHPLAN_ENT("CN", 0x48, 0x00, CN , 0, 1),
2718 COUNTRY_CHPLAN_ENT("CO", 0x76, 0x00, DEF , 0, 1),
2719 COUNTRY_CHPLAN_ENT("CR", 0x76, 0x00, DEF , 0, 1),
2720 COUNTRY_CHPLAN_ENT("CV", 0x26, 0x00, DEF , 0, 1),
2721 COUNTRY_CHPLAN_ENT("CY", 0x26, 0x00, DEF , 0, 1),
2722 COUNTRY_CHPLAN_ENT("CZ", 0x26, 0x00, DEF , 0, 1),
2723 COUNTRY_CHPLAN_ENT("DE", 0x26, 0x00, DEF , 0, 1),
2724 COUNTRY_CHPLAN_ENT("DJ", 0x26, 0x00, DEF , 0, 1),
2725 COUNTRY_CHPLAN_ENT("DK", 0x26, 0x00, DEF , 0, 1),
2726 COUNTRY_CHPLAN_ENT("DO", 0x76, 0x00, DEF , 0, 1),
2727 COUNTRY_CHPLAN_ENT("DZ", 0x00, 0x00, DEF , 0, 1),
2728 COUNTRY_CHPLAN_ENT("EC", 0x76, 0x00, DEF , 0, 1),
2729 COUNTRY_CHPLAN_ENT("EE", 0x26, 0x00, DEF , 0, 1),
2730 COUNTRY_CHPLAN_ENT("EG", 0x47, 0x00, DEF , 0, 1),
2731 COUNTRY_CHPLAN_ENT("EH", 0x47, 0x00, DEF , 0, 1),
2732 COUNTRY_CHPLAN_ENT("ES", 0x26, 0x00, DEF , 0, 1),
2733 COUNTRY_CHPLAN_ENT("ET", 0x26, 0x00, DEF , 0, 1),
2734 COUNTRY_CHPLAN_ENT("FI", 0x26, 0x00, DEF , 0, 1),
2735 COUNTRY_CHPLAN_ENT("FJ", 0x76, 0x00, DEF , 0, 1),
2736 COUNTRY_CHPLAN_ENT("FR", 0x26, 0x00, DEF , 0, 1),
2737 COUNTRY_CHPLAN_ENT("GA", 0x26, 0x00, DEF , 0, 1),
2738 COUNTRY_CHPLAN_ENT("GB", 0x26, 0x00, DEF , 0, 1),
2739 COUNTRY_CHPLAN_ENT("GE", 0x26, 0x00, DEF , 0, 1),
2740 COUNTRY_CHPLAN_ENT("GH", 0x26, 0x00, DEF , 0, 1),
2741 COUNTRY_CHPLAN_ENT("GI", 0x26, 0x00, DEF , 0, 1),
2742 COUNTRY_CHPLAN_ENT("GL", 0x26, 0x00, DEF , 0, 1),
2743 COUNTRY_CHPLAN_ENT("GM", 0x26, 0x00, DEF , 0, 1),
2744 COUNTRY_CHPLAN_ENT("GN", 0x26, 0x00, DEF , 0, 1),
2745 COUNTRY_CHPLAN_ENT("GP", 0x26, 0x00, DEF , 0, 1),
2746 COUNTRY_CHPLAN_ENT("GQ", 0x26, 0x00, DEF , 0, 1),
2747 COUNTRY_CHPLAN_ENT("GR", 0x26, 0x00, DEF , 0, 1),
2748 COUNTRY_CHPLAN_ENT("GT", 0x61, 0x00, DEF , 0, 1),
2749 COUNTRY_CHPLAN_ENT("GU", 0x76, 0x00, DEF , 0, 1),
2750 COUNTRY_CHPLAN_ENT("GW", 0x26, 0x00, DEF , 0, 1),
2751 COUNTRY_CHPLAN_ENT("HK", 0x35, 0x00, DEF , 0, 1),
2752 COUNTRY_CHPLAN_ENT("HN", 0x32, 0x00, DEF , 0, 1),
2753 COUNTRY_CHPLAN_ENT("HR", 0x26, 0x00, DEF , 0, 1),
2754 COUNTRY_CHPLAN_ENT("HT", 0x76, 0x00, DEF , 0, 1),
2755 COUNTRY_CHPLAN_ENT("HU", 0x26, 0x00, DEF , 0, 1),
2756 COUNTRY_CHPLAN_ENT("IE", 0x26, 0x00, DEF , 0, 1),
2757 COUNTRY_CHPLAN_ENT("IL", 0x47, 0x00, DEF , 0, 1),
2758 COUNTRY_CHPLAN_ENT("IN", 0x48, 0x00, DEF , 0, 1),
2759 COUNTRY_CHPLAN_ENT("IS", 0x26, 0x00, DEF , 0, 1),
2760 COUNTRY_CHPLAN_ENT("IT", 0x26, 0x00, DEF , 0, 1),
2761 COUNTRY_CHPLAN_ENT("JM", 0x32, 0x00, DEF , 0, 1),
2762 COUNTRY_CHPLAN_ENT("JO", 0x49, 0x00, DEF , 0, 1),
2763 COUNTRY_CHPLAN_ENT("JP", 0x27, 0x00, DEF , 0, 1),
2764 COUNTRY_CHPLAN_ENT("KE", 0x47, 0x00, DEF , 0, 1),
2765 COUNTRY_CHPLAN_ENT("KG", 0x26, 0x00, DEF , 0, 1),
2766 COUNTRY_CHPLAN_ENT("KH", 0x26, 0x00, DEF , 0, 1),
2767 COUNTRY_CHPLAN_ENT("KM", 0x26, 0x00, DEF , 0, 1),
2768 COUNTRY_CHPLAN_ENT("KR", 0x4B, 0x00, DEF , 0, 1),
2769 COUNTRY_CHPLAN_ENT("KW", 0x26, 0x00, DEF , 0, 1),
2770 COUNTRY_CHPLAN_ENT("KZ", 0x26, 0x00, DEF , 0, 1),
2771 COUNTRY_CHPLAN_ENT("LB", 0x26, 0x00, DEF , 0, 1),
2772 COUNTRY_CHPLAN_ENT("LI", 0x26, 0x00, DEF , 0, 1),
2773 COUNTRY_CHPLAN_ENT("LK", 0x26, 0x00, DEF , 0, 1),
2774 COUNTRY_CHPLAN_ENT("LR", 0x26, 0x00, DEF , 0, 1),
2775 COUNTRY_CHPLAN_ENT("LS", 0x26, 0x00, DEF , 0, 1),
2776 COUNTRY_CHPLAN_ENT("LT", 0x26, 0x00, DEF , 0, 1),
2777 COUNTRY_CHPLAN_ENT("LU", 0x26, 0x00, DEF , 0, 1),
2778 COUNTRY_CHPLAN_ENT("LV", 0x26, 0x00, DEF , 0, 1),
2779 COUNTRY_CHPLAN_ENT("MA", 0x47, 0x00, DEF , 0, 1),
2780 COUNTRY_CHPLAN_ENT("MC", 0x26, 0x00, DEF , 0, 1),
2781 COUNTRY_CHPLAN_ENT("MD", 0x26, 0x00, DEF , 0, 1),
2782 COUNTRY_CHPLAN_ENT("ME", 0x26, 0x00, DEF , 0, 1),
2783 COUNTRY_CHPLAN_ENT("MG", 0x26, 0x00, DEF , 0, 1),
2784 COUNTRY_CHPLAN_ENT("MK", 0x26, 0x00, DEF , 0, 1),
2785 COUNTRY_CHPLAN_ENT("ML", 0x26, 0x00, DEF , 0, 1),
2786 COUNTRY_CHPLAN_ENT("MO", 0x35, 0x00, DEF , 0, 1),
2787 COUNTRY_CHPLAN_ENT("MQ", 0x26, 0x00, DEF , 0, 1),
2788 COUNTRY_CHPLAN_ENT("MR", 0x26, 0x00, DEF , 0, 1),
2789 COUNTRY_CHPLAN_ENT("MT", 0x26, 0x00, DEF , 0, 1),
2790 COUNTRY_CHPLAN_ENT("MU", 0x26, 0x00, DEF , 0, 1),
2791 COUNTRY_CHPLAN_ENT("MW", 0x26, 0x00, DEF , 0, 1),
2792 COUNTRY_CHPLAN_ENT("MX", 0x4D, 0x00, DEF , 0, 1),
2793 COUNTRY_CHPLAN_ENT("MY", 0x63, 0x00, DEF , 0, 1),
2794 COUNTRY_CHPLAN_ENT("MZ", 0x26, 0x00, DEF , 0, 1),
2795 COUNTRY_CHPLAN_ENT("NA", 0x26, 0x00, DEF , 0, 1),
2796 COUNTRY_CHPLAN_ENT("NE", 0x26, 0x00, DEF , 0, 1),
2797 COUNTRY_CHPLAN_ENT("NG", 0x75, 0x00, DEF , 0, 1),
2798 COUNTRY_CHPLAN_ENT("NI", 0x76, 0x00, DEF , 0, 1),
2799 COUNTRY_CHPLAN_ENT("NL", 0x26, 0x00, DEF , 0, 1),
2800 COUNTRY_CHPLAN_ENT("NO", 0x26, 0x00, DEF , 0, 1),
2801 COUNTRY_CHPLAN_ENT("NP", 0x48, 0x00, DEF , 0, 1),
2802 COUNTRY_CHPLAN_ENT("NZ", 0x45, 0x00, DEF , 0, 1),
2803 COUNTRY_CHPLAN_ENT("OM", 0x26, 0x00, DEF , 0, 1),
2804 COUNTRY_CHPLAN_ENT("PA", 0x76, 0x00, DEF , 0, 1),
2805 COUNTRY_CHPLAN_ENT("PE", 0x76, 0x00, DEF , 0, 1),
2806 COUNTRY_CHPLAN_ENT("PG", 0x35, 0x00, DEF , 0, 1),
2807 COUNTRY_CHPLAN_ENT("PH", 0x35, 0x00, DEF , 0, 1),
2808 COUNTRY_CHPLAN_ENT("PK", 0x51, 0x00, DEF , 0, 1),
2809 COUNTRY_CHPLAN_ENT("PL", 0x26, 0x00, DEF , 0, 1),
2810 COUNTRY_CHPLAN_ENT("PR", 0x76, 0x00, DEF , 0, 1),
2811 COUNTRY_CHPLAN_ENT("PT", 0x26, 0x00, DEF , 0, 1),
2812 COUNTRY_CHPLAN_ENT("PY", 0x76, 0x00, DEF , 0, 1),
2813 COUNTRY_CHPLAN_ENT("QA", 0x35, 0x00, DEF , 0, 1),
2814 COUNTRY_CHPLAN_ENT("RO", 0x26, 0x00, DEF , 0, 1),
2815 COUNTRY_CHPLAN_ENT("RS", 0x26, 0x00, DEF , 0, 1),
2816 COUNTRY_CHPLAN_ENT("RU", 0x59, 0x00, DEF , 0, 1),
2817 COUNTRY_CHPLAN_ENT("SA", 0x35, 0x00, DEF , 0, 1),
2818 COUNTRY_CHPLAN_ENT("SC", 0x76, 0x00, DEF , 0, 1),
2819 COUNTRY_CHPLAN_ENT("SE", 0x26, 0x00, DEF , 0, 1),
2820 COUNTRY_CHPLAN_ENT("SG", 0x35, 0x00, DEF , 0, 1),
2821 COUNTRY_CHPLAN_ENT("SI", 0x26, 0x00, DEF , 0, 1),
2822 COUNTRY_CHPLAN_ENT("SK", 0x26, 0x00, DEF , 0, 1),
2823 COUNTRY_CHPLAN_ENT("SL", 0x26, 0x00, DEF , 0, 1),
2824 COUNTRY_CHPLAN_ENT("SN", 0x26, 0x00, DEF , 0, 1),
2825 COUNTRY_CHPLAN_ENT("ST", 0x76, 0x00, DEF , 0, 1),
2826 COUNTRY_CHPLAN_ENT("SV", 0x30, 0x00, DEF , 0, 1),
2827 COUNTRY_CHPLAN_ENT("SZ", 0x26, 0x00, DEF , 0, 1),
2828 COUNTRY_CHPLAN_ENT("TD", 0x26, 0x00, DEF , 0, 1),
2829 COUNTRY_CHPLAN_ENT("TF", 0x26, 0x00, DEF , 0, 1),
2830 COUNTRY_CHPLAN_ENT("TG", 0x26, 0x00, DEF , 0, 1),
2831 COUNTRY_CHPLAN_ENT("TH", 0x35, 0x00, DEF , 0, 1),
2832 COUNTRY_CHPLAN_ENT("TJ", 0x26, 0x00, DEF , 0, 1),
2833 COUNTRY_CHPLAN_ENT("TN", 0x47, 0x00, DEF , 0, 1),
2834 COUNTRY_CHPLAN_ENT("TR", 0x26, 0x00, DEF , 0, 1),
2835 COUNTRY_CHPLAN_ENT("TW", 0x76, 0x00, DEF , 0, 1),
2836 COUNTRY_CHPLAN_ENT("TZ", 0x26, 0x00, DEF , 0, 1),
2837 COUNTRY_CHPLAN_ENT("UA", 0x35, 0x00, UKRAINE, 0, 1),
2838 COUNTRY_CHPLAN_ENT("UG", 0x26, 0x00, DEF , 0, 1),
2839 COUNTRY_CHPLAN_ENT("US", 0x76, 0x00, DEF , 0, 1),
2840 COUNTRY_CHPLAN_ENT("UY", 0x30, 0x00, DEF , 0, 1),
2841 COUNTRY_CHPLAN_ENT("UZ", 0x47, 0x00, DEF , 0, 1),
2842 COUNTRY_CHPLAN_ENT("VE", 0x30, 0x00, DEF , 0, 1),
2843 COUNTRY_CHPLAN_ENT("VN", 0x35, 0x00, DEF , 0, 1),
2844 COUNTRY_CHPLAN_ENT("YT", 0x26, 0x00, DEF , 0, 1),
2845 COUNTRY_CHPLAN_ENT("ZA", 0x35, 0x00, DEF , 0, 1),
2846 COUNTRY_CHPLAN_ENT("ZM", 0x26, 0x00, DEF , 0, 1),
2847 COUNTRY_CHPLAN_ENT("ZW", 0x26, 0x00, DEF , 0, 1),
2848 };
2849 #endif
2850
2851 /**
2852 * rtw_def_module_country_chplan_map -
2853 * @hal_map: returned map
2854 * @return: size of map
2855 */
rtw_def_module_country_chplan_map(const struct country_chplan ** hal_map)2856 static u16 rtw_def_module_country_chplan_map(const struct country_chplan **hal_map)
2857 {
2858 u16 hal_map_sz = 0;
2859
2860 /* TODO: runtime selection for multi driver */
2861 #if (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8821AE_HMC_M2)
2862 *hal_map = RTL8821AE_HMC_M2_country_chplan_map;
2863 hal_map_sz = sizeof(RTL8821AE_HMC_M2_country_chplan_map) / sizeof(struct country_chplan);
2864 #elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8821AU)
2865 *hal_map = RTL8821AU_country_chplan_map;
2866 hal_map_sz = sizeof(RTL8821AU_country_chplan_map) / sizeof(struct country_chplan);
2867 #elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8812AENF_NGFF)
2868 *hal_map = RTL8812AENF_NGFF_country_chplan_map;
2869 hal_map_sz = sizeof(RTL8812AENF_NGFF_country_chplan_map) / sizeof(struct country_chplan);
2870 #elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8812AEBT_HMC)
2871 *hal_map = RTL8812AEBT_HMC_country_chplan_map;
2872 hal_map_sz = sizeof(RTL8812AEBT_HMC_country_chplan_map) / sizeof(struct country_chplan);
2873 #elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8188EE_HMC_M2)
2874 *hal_map = RTL8188EE_HMC_M2_country_chplan_map;
2875 hal_map_sz = sizeof(RTL8188EE_HMC_M2_country_chplan_map) / sizeof(struct country_chplan);
2876 #elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8723BE_HMC_M2)
2877 *hal_map = RTL8723BE_HMC_M2_country_chplan_map;
2878 hal_map_sz = sizeof(RTL8723BE_HMC_M2_country_chplan_map) / sizeof(struct country_chplan);
2879 #elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8723BS_NGFF1216)
2880 *hal_map = RTL8723BS_NGFF1216_country_chplan_map;
2881 hal_map_sz = sizeof(RTL8723BS_NGFF1216_country_chplan_map) / sizeof(struct country_chplan);
2882 #elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8192EEBT_HMC_M2)
2883 *hal_map = RTL8192EEBT_HMC_M2_country_chplan_map;
2884 hal_map_sz = sizeof(RTL8192EEBT_HMC_M2_country_chplan_map) / sizeof(struct country_chplan);
2885 #elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8723DE_NGFF1630)
2886 *hal_map = RTL8723DE_NGFF1630_country_chplan_map;
2887 hal_map_sz = sizeof(RTL8723DE_NGFF1630_country_chplan_map) / sizeof(struct country_chplan);
2888 #elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8822BE)
2889 *hal_map = RTL8822BE_country_chplan_map;
2890 hal_map_sz = sizeof(RTL8822BE_country_chplan_map) / sizeof(struct country_chplan);
2891 #elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8821CE)
2892 *hal_map = RTL8821CE_country_chplan_map;
2893 hal_map_sz = sizeof(RTL8821CE_country_chplan_map) / sizeof(struct country_chplan);
2894 #elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8822CE)
2895 *hal_map = RTL8822CE_country_chplan_map;
2896 hal_map_sz = sizeof(RTL8822CE_country_chplan_map) / sizeof(struct country_chplan);
2897 #endif
2898
2899 return hal_map_sz;
2900 }
2901 #else
2902
2903 static const struct country_chplan country_chplan_map[] = {
2904 COUNTRY_CHPLAN_ENT("AD", 0x3A, 0x00, DEF , 1, 1), /* Andorra */
2905 COUNTRY_CHPLAN_ENT("AE", 0x5E, 0x00, DEF , 1, 1), /* United Arab Emirates */
2906 COUNTRY_CHPLAN_ENT("AF", 0x42, 0x00, DEF , 1, 1), /* Afghanistan */
2907 COUNTRY_CHPLAN_ENT("AG", 0x76, 0x00, DEF , 1, 1), /* Antigua & Barbuda */
2908 COUNTRY_CHPLAN_ENT("AI", 0x5E, 0x00, DEF , 1, 1), /* Anguilla(UK) */
2909 COUNTRY_CHPLAN_ENT("AL", 0x5E, 0x00, DEF , 1, 1), /* Albania */
2910 COUNTRY_CHPLAN_ENT("AM", 0x5E, 0x00, DEF , 1, 1), /* Armenia */
2911 COUNTRY_CHPLAN_ENT("AN", 0x76, 0x00, DEF , 1, 1), /* Netherlands Antilles */
2912 COUNTRY_CHPLAN_ENT("AO", 0x5E, 0x00, DEF , 1, 1), /* Angola */
2913 COUNTRY_CHPLAN_ENT("AQ", 0x26, 0x00, DEF , 1, 1), /* Antarctica */
2914 COUNTRY_CHPLAN_ENT("AR", 0x4D, 0x00, DEF , 1, 1), /* Argentina */
2915 COUNTRY_CHPLAN_ENT("AS", 0x76, 0x00, DEF , 1, 1), /* American Samoa */
2916 COUNTRY_CHPLAN_ENT("AT", 0x5E, 0x00, DEF , 1, 1), /* Austria */
2917 COUNTRY_CHPLAN_ENT("AU", 0x03, 0x00, DEF , 1, 1), /* Australia */
2918 COUNTRY_CHPLAN_ENT("AW", 0x76, 0x00, DEF , 1, 1), /* Aruba */
2919 COUNTRY_CHPLAN_ENT("AZ", 0x5E, 0x00, DEF , 1, 1), /* Azerbaijan */
2920 COUNTRY_CHPLAN_ENT("BA", 0x5E, 0x00, DEF , 1, 1), /* Bosnia & Herzegovina */
2921 COUNTRY_CHPLAN_ENT("BB", 0x76, 0x00, DEF , 1, 1), /* Barbados */
2922 COUNTRY_CHPLAN_ENT("BD", 0x5E, 0x00, DEF , 1, 1), /* Bangladesh */
2923 COUNTRY_CHPLAN_ENT("BE", 0x5E, 0x00, DEF , 1, 1), /* Belgium */
2924 COUNTRY_CHPLAN_ENT("BF", 0x5E, 0x00, DEF , 1, 1), /* Burkina Faso */
2925 COUNTRY_CHPLAN_ENT("BG", 0x5E, 0x00, DEF , 1, 1), /* Bulgaria */
2926 COUNTRY_CHPLAN_ENT("BH", 0x06, 0x00, DEF , 1, 1), /* Bahrain */
2927 COUNTRY_CHPLAN_ENT("BI", 0x3A, 0x00, DEF , 1, 1), /* Burundi */
2928 COUNTRY_CHPLAN_ENT("BJ", 0x3A, 0x00, DEF , 1, 1), /* Benin */
2929 COUNTRY_CHPLAN_ENT("BM", 0x76, 0x00, DEF , 1, 1), /* Bermuda (UK) */
2930 COUNTRY_CHPLAN_ENT("BN", 0x06, 0x00, DEF , 1, 1), /* Brunei */
2931 COUNTRY_CHPLAN_ENT("BO", 0x61, 0x00, DEF , 1, 1), /* Bolivia */
2932 COUNTRY_CHPLAN_ENT("BR", 0x62, 0x00, DEF , 1, 1), /* Brazil */
2933 COUNTRY_CHPLAN_ENT("BS", 0x76, 0x00, DEF , 1, 1), /* Bahamas */
2934 COUNTRY_CHPLAN_ENT("BT", 0x5E, 0x00, DEF , 1, 1), /* Bhutan */
2935 COUNTRY_CHPLAN_ENT("BV", 0x5E, 0x00, DEF , 1, 1), /* Bouvet Island (Norway) */
2936 COUNTRY_CHPLAN_ENT("BW", 0x5E, 0x00, DEF , 1, 1), /* Botswana */
2937 COUNTRY_CHPLAN_ENT("BY", 0x08, 0x00, DEF , 0, 1), /* Belarus */
2938 COUNTRY_CHPLAN_ENT("BZ", 0x76, 0x00, DEF , 1, 1), /* Belize */
2939 COUNTRY_CHPLAN_ENT("CA", 0x2B, 0x00, DEF , 1, 1), /* Canada */
2940 COUNTRY_CHPLAN_ENT("CC", 0x3A, 0x00, DEF , 1, 1), /* Cocos (Keeling) Islands (Australia) */
2941 COUNTRY_CHPLAN_ENT("CD", 0x3A, 0x00, DEF , 1, 1), /* Congo, Republic of the */
2942 COUNTRY_CHPLAN_ENT("CF", 0x3A, 0x00, DEF , 1, 1), /* Central African Republic */
2943 COUNTRY_CHPLAN_ENT("CG", 0x3A, 0x00, DEF , 1, 1), /* Congo, Democratic Republic of the. Zaire */
2944 COUNTRY_CHPLAN_ENT("CH", 0x5E, 0x00, DEF , 1, 1), /* Switzerland */
2945 COUNTRY_CHPLAN_ENT("CI", 0x42, 0x00, DEF , 1, 1), /* Cote d'Ivoire */
2946 COUNTRY_CHPLAN_ENT("CK", 0x5E, 0x00, DEF , 1, 1), /* Cook Islands */
2947 COUNTRY_CHPLAN_ENT("CL", 0x76, 0x00, CHILE , 1, 1), /* Chile */
2948 COUNTRY_CHPLAN_ENT("CM", 0x5E, 0x00, DEF , 1, 1), /* Cameroon */
2949 COUNTRY_CHPLAN_ENT("CN", 0x06, 0x00, CN , 1, 1), /* China */
2950 COUNTRY_CHPLAN_ENT("CO", 0x76, 0x00, DEF , 1, 1), /* Colombia */
2951 COUNTRY_CHPLAN_ENT("CR", 0x76, 0x00, DEF , 1, 1), /* Costa Rica */
2952 COUNTRY_CHPLAN_ENT("CV", 0x5E, 0x00, DEF , 1, 1), /* Cape Verde */
2953 COUNTRY_CHPLAN_ENT("CX", 0x03, 0x00, DEF , 1, 1), /* Christmas Island (Australia) */
2954 COUNTRY_CHPLAN_ENT("CY", 0x5E, 0x00, DEF , 1, 1), /* Cyprus */
2955 COUNTRY_CHPLAN_ENT("CZ", 0x5E, 0x00, DEF , 1, 1), /* Czech Republic */
2956 COUNTRY_CHPLAN_ENT("DE", 0x5E, 0x00, DEF , 1, 1), /* Germany */
2957 COUNTRY_CHPLAN_ENT("DJ", 0x3A, 0x00, DEF , 1, 1), /* Djibouti */
2958 COUNTRY_CHPLAN_ENT("DK", 0x5E, 0x00, DEF , 1, 1), /* Denmark */
2959 COUNTRY_CHPLAN_ENT("DM", 0x76, 0x00, DEF , 1, 1), /* Dominica */
2960 COUNTRY_CHPLAN_ENT("DO", 0x76, 0x00, DEF , 1, 1), /* Dominican Republic */
2961 COUNTRY_CHPLAN_ENT("DZ", 0x00, 0x00, DEF , 1, 1), /* Algeria */
2962 COUNTRY_CHPLAN_ENT("EC", 0x76, 0x00, DEF , 1, 1), /* Ecuador */
2963 COUNTRY_CHPLAN_ENT("EE", 0x5E, 0x00, DEF , 1, 1), /* Estonia */
2964 COUNTRY_CHPLAN_ENT("EG", 0x3C, 0x00, DEF , 1, 1), /* Egypt */
2965 COUNTRY_CHPLAN_ENT("EH", 0x3C, 0x00, DEF , 1, 1), /* Western Sahara */
2966 COUNTRY_CHPLAN_ENT("ER", 0x3A, 0x00, DEF , 1, 1), /* Eritrea */
2967 COUNTRY_CHPLAN_ENT("ES", 0x5E, 0x00, DEF , 1, 1), /* Spain, Canary Islands, Ceuta, Melilla */
2968 COUNTRY_CHPLAN_ENT("ET", 0x3A, 0x00, DEF , 1, 1), /* Ethiopia */
2969 COUNTRY_CHPLAN_ENT("FI", 0x5E, 0x00, DEF , 1, 1), /* Finland */
2970 COUNTRY_CHPLAN_ENT("FJ", 0x76, 0x00, DEF , 1, 1), /* Fiji */
2971 COUNTRY_CHPLAN_ENT("FK", 0x3A, 0x00, DEF , 1, 1), /* Falkland Islands (Islas Malvinas) (UK) */
2972 COUNTRY_CHPLAN_ENT("FM", 0x76, 0x00, DEF , 1, 1), /* Micronesia, Federated States of (USA) */
2973 COUNTRY_CHPLAN_ENT("FO", 0x3A, 0x00, DEF , 1, 1), /* Faroe Islands (Denmark) */
2974 COUNTRY_CHPLAN_ENT("FR", 0x5E, 0x00, DEF , 1, 1), /* France */
2975 COUNTRY_CHPLAN_ENT("GA", 0x5E, 0x00, DEF , 1, 1), /* Gabon */
2976 COUNTRY_CHPLAN_ENT("GB", 0x5E, 0x00, DEF , 1, 1), /* Great Britain (United Kingdom; England) */
2977 COUNTRY_CHPLAN_ENT("GD", 0x76, 0x00, DEF , 1, 1), /* Grenada */
2978 COUNTRY_CHPLAN_ENT("GE", 0x5E, 0x00, DEF , 1, 1), /* Georgia */
2979 COUNTRY_CHPLAN_ENT("GF", 0x3A, 0x00, DEF , 1, 1), /* French Guiana */
2980 COUNTRY_CHPLAN_ENT("GG", 0x5E, 0x00, DEF , 1, 1), /* Guernsey (UK) */
2981 COUNTRY_CHPLAN_ENT("GH", 0x5E, 0x00, DEF , 1, 1), /* Ghana */
2982 COUNTRY_CHPLAN_ENT("GI", 0x3A, 0x00, DEF , 1, 1), /* Gibraltar (UK) */
2983 COUNTRY_CHPLAN_ENT("GL", 0x5E, 0x00, DEF , 1, 1), /* Greenland (Denmark) */
2984 COUNTRY_CHPLAN_ENT("GM", 0x3A, 0x00, DEF , 1, 1), /* Gambia */
2985 COUNTRY_CHPLAN_ENT("GN", 0x3A, 0x00, DEF , 1, 1), /* Guinea */
2986 COUNTRY_CHPLAN_ENT("GP", 0x3A, 0x00, DEF , 1, 1), /* Guadeloupe (France) */
2987 COUNTRY_CHPLAN_ENT("GQ", 0x5E, 0x00, DEF , 1, 1), /* Equatorial Guinea */
2988 COUNTRY_CHPLAN_ENT("GR", 0x5E, 0x00, DEF , 1, 1), /* Greece */
2989 COUNTRY_CHPLAN_ENT("GS", 0x3A, 0x00, DEF , 1, 1), /* South Georgia and the Sandwich Islands (UK) */
2990 COUNTRY_CHPLAN_ENT("GT", 0x76, 0x00, DEF , 1, 1), /* Guatemala */
2991 COUNTRY_CHPLAN_ENT("GU", 0x76, 0x00, DEF , 1, 1), /* Guam (USA) */
2992 COUNTRY_CHPLAN_ENT("GW", 0x3A, 0x00, DEF , 1, 1), /* Guinea-Bissau */
2993 COUNTRY_CHPLAN_ENT("GY", 0x44, 0x00, DEF , 1, 1), /* Guyana */
2994 COUNTRY_CHPLAN_ENT("HK", 0x5E, 0x00, DEF , 1, 1), /* Hong Kong */
2995 COUNTRY_CHPLAN_ENT("HM", 0x03, 0x00, DEF , 1, 1), /* Heard and McDonald Islands (Australia) */
2996 COUNTRY_CHPLAN_ENT("HN", 0x32, 0x00, DEF , 1, 1), /* Honduras */
2997 COUNTRY_CHPLAN_ENT("HR", 0x5E, 0x00, DEF , 1, 1), /* Croatia */
2998 COUNTRY_CHPLAN_ENT("HT", 0x76, 0x00, DEF , 0, 1), /* Haiti */
2999 COUNTRY_CHPLAN_ENT("HU", 0x5E, 0x00, DEF , 1, 1), /* Hungary */
3000 COUNTRY_CHPLAN_ENT("ID", 0x5D, 0x00, DEF , 1, 1), /* Indonesia */
3001 COUNTRY_CHPLAN_ENT("IE", 0x5E, 0x00, DEF , 1, 1), /* Ireland */
3002 COUNTRY_CHPLAN_ENT("IL", 0x5E, 0x00, DEF , 1, 1), /* Israel */
3003 COUNTRY_CHPLAN_ENT("IM", 0x3A, 0x00, DEF , 1, 1), /* Isle of Man (UK) */
3004 COUNTRY_CHPLAN_ENT("IN", 0x06, 0x00, DEF , 1, 1), /* India */
3005 COUNTRY_CHPLAN_ENT("IO", 0x3A, 0x00, DEF , 1, 1), /* British Indian Ocean Territory (UK) */
3006 COUNTRY_CHPLAN_ENT("IQ", 0x05, 0x00, DEF , 1, 1), /* Iraq */
3007 COUNTRY_CHPLAN_ENT("IR", 0x3A, 0x00, DEF , 0, 0), /* Iran */
3008 COUNTRY_CHPLAN_ENT("IS", 0x5E, 0x00, DEF , 1, 1), /* Iceland */
3009 COUNTRY_CHPLAN_ENT("IT", 0x5E, 0x00, DEF , 1, 1), /* Italy */
3010 COUNTRY_CHPLAN_ENT("JE", 0x3A, 0x00, DEF , 1, 1), /* Jersey (UK) */
3011 COUNTRY_CHPLAN_ENT("JM", 0x76, 0x00, DEF , 1, 1), /* Jamaica */
3012 COUNTRY_CHPLAN_ENT("JO", 0x05, 0x00, DEF , 1, 1), /* Jordan */
3013 COUNTRY_CHPLAN_ENT("JP", 0x7D, 0x00, DEF , 1, 1), /* Japan- Telec */
3014 COUNTRY_CHPLAN_ENT("KE", 0x5E, 0x00, DEF , 1, 1), /* Kenya */
3015 COUNTRY_CHPLAN_ENT("KG", 0x5E, 0x00, DEF , 1, 1), /* Kyrgyzstan */
3016 COUNTRY_CHPLAN_ENT("KH", 0x5E, 0x00, DEF , 1, 1), /* Cambodia */
3017 COUNTRY_CHPLAN_ENT("KI", 0x5E, 0x00, DEF , 1, 1), /* Kiribati */
3018 COUNTRY_CHPLAN_ENT("KM", 0x3A, 0x00, DEF , 1, 1), /* Comoros */
3019 COUNTRY_CHPLAN_ENT("KN", 0x76, 0x00, DEF , 1, 1), /* Saint Kitts and Nevis */
3020 COUNTRY_CHPLAN_ENT("KR", 0x4B, 0x00, DEF , 1, 1), /* South Korea */
3021 COUNTRY_CHPLAN_ENT("KW", 0x5E, 0x00, DEF , 1, 1), /* Kuwait */
3022 COUNTRY_CHPLAN_ENT("KY", 0x76, 0x00, DEF , 1, 1), /* Cayman Islands (UK) */
3023 COUNTRY_CHPLAN_ENT("KZ", 0x5E, 0x00, DEF , 1, 1), /* Kazakhstan */
3024 COUNTRY_CHPLAN_ENT("LA", 0x5E, 0x00, DEF , 1, 1), /* Laos */
3025 COUNTRY_CHPLAN_ENT("LB", 0x5E, 0x00, DEF , 1, 1), /* Lebanon */
3026 COUNTRY_CHPLAN_ENT("LC", 0x76, 0x00, DEF , 1, 1), /* Saint Lucia */
3027 COUNTRY_CHPLAN_ENT("LI", 0x5E, 0x00, DEF , 1, 1), /* Liechtenstein */
3028 COUNTRY_CHPLAN_ENT("LK", 0x5E, 0x00, DEF , 1, 1), /* Sri Lanka */
3029 COUNTRY_CHPLAN_ENT("LR", 0x5E, 0x00, DEF , 1, 1), /* Liberia */
3030 COUNTRY_CHPLAN_ENT("LS", 0x5E, 0x00, DEF , 1, 1), /* Lesotho */
3031 COUNTRY_CHPLAN_ENT("LT", 0x5E, 0x00, DEF , 1, 1), /* Lithuania */
3032 COUNTRY_CHPLAN_ENT("LU", 0x5E, 0x00, DEF , 1, 1), /* Luxembourg */
3033 COUNTRY_CHPLAN_ENT("LV", 0x5E, 0x00, DEF , 1, 1), /* Latvia */
3034 COUNTRY_CHPLAN_ENT("LY", 0x5E, 0x00, DEF , 1, 1), /* Libya */
3035 COUNTRY_CHPLAN_ENT("MA", 0x3C, 0x00, DEF , 1, 1), /* Morocco */
3036 COUNTRY_CHPLAN_ENT("MC", 0x5E, 0x00, DEF , 1, 1), /* Monaco */
3037 COUNTRY_CHPLAN_ENT("MD", 0x5E, 0x00, DEF , 1, 1), /* Moldova */
3038 COUNTRY_CHPLAN_ENT("ME", 0x3A, 0x00, DEF , 1, 1), /* Montenegro */
3039 COUNTRY_CHPLAN_ENT("MF", 0x76, 0x00, DEF , 1, 1), /* Saint Martin */
3040 COUNTRY_CHPLAN_ENT("MG", 0x5E, 0x00, DEF , 1, 1), /* Madagascar */
3041 COUNTRY_CHPLAN_ENT("MH", 0x76, 0x00, DEF , 1, 1), /* Marshall Islands (USA) */
3042 COUNTRY_CHPLAN_ENT("MK", 0x3A, 0x00, DEF , 1, 1), /* Republic of Macedonia (FYROM) */
3043 COUNTRY_CHPLAN_ENT("ML", 0x5E, 0x00, DEF , 1, 1), /* Mali */
3044 COUNTRY_CHPLAN_ENT("MM", 0x3A, 0x00, DEF , 1, 1), /* Burma (Myanmar) */
3045 COUNTRY_CHPLAN_ENT("MN", 0x5E, 0x00, DEF , 1, 1), /* Mongolia */
3046 COUNTRY_CHPLAN_ENT("MO", 0x5E, 0x00, DEF , 1, 1), /* Macau */
3047 COUNTRY_CHPLAN_ENT("MP", 0x76, 0x00, DEF , 1, 1), /* Northern Mariana Islands (USA) */
3048 COUNTRY_CHPLAN_ENT("MQ", 0x3A, 0x00, DEF , 1, 1), /* Martinique (France) */
3049 COUNTRY_CHPLAN_ENT("MR", 0x5E, 0x00, DEF , 1, 1), /* Mauritania */
3050 COUNTRY_CHPLAN_ENT("MS", 0x3A, 0x00, DEF , 1, 1), /* Montserrat (UK) */
3051 COUNTRY_CHPLAN_ENT("MT", 0x5E, 0x00, DEF , 1, 1), /* Malta */
3052 COUNTRY_CHPLAN_ENT("MU", 0x5E, 0x00, DEF , 1, 1), /* Mauritius */
3053 COUNTRY_CHPLAN_ENT("MV", 0x3C, 0x00, DEF , 1, 1), /* Maldives */
3054 COUNTRY_CHPLAN_ENT("MW", 0x5E, 0x00, DEF , 1, 1), /* Malawi */
3055 COUNTRY_CHPLAN_ENT("MX", 0x4D, 0x00, DEF , 1, 1), /* Mexico */
3056 COUNTRY_CHPLAN_ENT("MY", 0x07, 0x00, DEF , 1, 1), /* Malaysia */
3057 COUNTRY_CHPLAN_ENT("MZ", 0x5E, 0x00, DEF , 1, 1), /* Mozambique */
3058 COUNTRY_CHPLAN_ENT("NA", 0x5E, 0x00, DEF , 1, 1), /* Namibia */
3059 COUNTRY_CHPLAN_ENT("NC", 0x3A, 0x00, DEF , 1, 1), /* New Caledonia */
3060 COUNTRY_CHPLAN_ENT("NE", 0x5E, 0x00, DEF , 1, 1), /* Niger */
3061 COUNTRY_CHPLAN_ENT("NF", 0x03, 0x00, DEF , 1, 1), /* Norfolk Island (Australia) */
3062 COUNTRY_CHPLAN_ENT("NG", 0x75, 0x00, DEF , 1, 1), /* Nigeria */
3063 COUNTRY_CHPLAN_ENT("NI", 0x76, 0x00, DEF , 1, 1), /* Nicaragua */
3064 COUNTRY_CHPLAN_ENT("NL", 0x5E, 0x00, DEF , 1, 1), /* Netherlands */
3065 COUNTRY_CHPLAN_ENT("NO", 0x5E, 0x00, DEF , 1, 1), /* Norway */
3066 COUNTRY_CHPLAN_ENT("NP", 0x06, 0x00, DEF , 1, 1), /* Nepal */
3067 COUNTRY_CHPLAN_ENT("NR", 0x3A, 0x00, DEF , 1, 1), /* Nauru */
3068 COUNTRY_CHPLAN_ENT("NU", 0x03, 0x00, DEF , 1, 1), /* Niue */
3069 COUNTRY_CHPLAN_ENT("NZ", 0x03, 0x00, DEF , 1, 1), /* New Zealand */
3070 COUNTRY_CHPLAN_ENT("OM", 0x5E, 0x00, DEF , 1, 1), /* Oman */
3071 COUNTRY_CHPLAN_ENT("PA", 0x76, 0x00, DEF , 1, 1), /* Panama */
3072 COUNTRY_CHPLAN_ENT("PE", 0x76, 0x00, DEF , 1, 1), /* Peru */
3073 COUNTRY_CHPLAN_ENT("PF", 0x3A, 0x00, DEF , 1, 1), /* French Polynesia (France) */
3074 COUNTRY_CHPLAN_ENT("PG", 0x5E, 0x00, DEF , 1, 1), /* Papua New Guinea */
3075 COUNTRY_CHPLAN_ENT("PH", 0x5E, 0x00, DEF , 1, 1), /* Philippines */
3076 COUNTRY_CHPLAN_ENT("PK", 0x51, 0x00, DEF , 1, 1), /* Pakistan */
3077 COUNTRY_CHPLAN_ENT("PL", 0x5E, 0x00, DEF , 1, 1), /* Poland */
3078 COUNTRY_CHPLAN_ENT("PM", 0x3A, 0x00, DEF , 1, 1), /* Saint Pierre and Miquelon (France) */
3079 COUNTRY_CHPLAN_ENT("PR", 0x76, 0x00, DEF , 1, 1), /* Puerto Rico */
3080 COUNTRY_CHPLAN_ENT("PS", 0x5E, 0x00, DEF , 1, 1), /* Palestine */
3081 COUNTRY_CHPLAN_ENT("PT", 0x5E, 0x00, DEF , 1, 1), /* Portugal */
3082 COUNTRY_CHPLAN_ENT("PW", 0x76, 0x00, DEF , 1, 1), /* Palau */
3083 COUNTRY_CHPLAN_ENT("PY", 0x76, 0x00, DEF , 1, 1), /* Paraguay */
3084 COUNTRY_CHPLAN_ENT("QA", 0x5E, 0x00, QATAR , 1, 1), /* Qatar */
3085 COUNTRY_CHPLAN_ENT("RE", 0x3A, 0x00, DEF , 1, 1), /* Reunion (France) */
3086 COUNTRY_CHPLAN_ENT("RO", 0x5E, 0x00, DEF , 1, 1), /* Romania */
3087 COUNTRY_CHPLAN_ENT("RS", 0x5E, 0x00, DEF , 1, 1), /* Serbia */
3088 COUNTRY_CHPLAN_ENT("RU", 0x09, 0x00, DEF , 1, 1), /* Russia(fac/gost), Kaliningrad */
3089 COUNTRY_CHPLAN_ENT("RW", 0x5E, 0x00, DEF , 1, 1), /* Rwanda */
3090 COUNTRY_CHPLAN_ENT("SA", 0x5E, 0x00, DEF , 1, 1), /* Saudi Arabia */
3091 COUNTRY_CHPLAN_ENT("SB", 0x3A, 0x00, DEF , 1, 1), /* Solomon Islands */
3092 COUNTRY_CHPLAN_ENT("SC", 0x76, 0x00, DEF , 1, 1), /* Seychelles */
3093 COUNTRY_CHPLAN_ENT("SE", 0x5E, 0x00, DEF , 1, 1), /* Sweden */
3094 COUNTRY_CHPLAN_ENT("SG", 0x5E, 0x00, DEF , 1, 1), /* Singapore */
3095 COUNTRY_CHPLAN_ENT("SH", 0x3A, 0x00, DEF , 1, 1), /* Saint Helena (UK) */
3096 COUNTRY_CHPLAN_ENT("SI", 0x5E, 0x00, DEF , 1, 1), /* Slovenia */
3097 COUNTRY_CHPLAN_ENT("SJ", 0x3A, 0x00, DEF , 1, 1), /* Svalbard (Norway) */
3098 COUNTRY_CHPLAN_ENT("SK", 0x5E, 0x00, DEF , 1, 1), /* Slovakia */
3099 COUNTRY_CHPLAN_ENT("SL", 0x5E, 0x00, DEF , 1, 1), /* Sierra Leone */
3100 COUNTRY_CHPLAN_ENT("SM", 0x3A, 0x00, DEF , 1, 1), /* San Marino */
3101 COUNTRY_CHPLAN_ENT("SN", 0x3A, 0x00, DEF , 1, 1), /* Senegal */
3102 COUNTRY_CHPLAN_ENT("SO", 0x3A, 0x00, DEF , 1, 1), /* Somalia */
3103 COUNTRY_CHPLAN_ENT("SR", 0x74, 0x00, DEF , 1, 1), /* Suriname */
3104 COUNTRY_CHPLAN_ENT("ST", 0x76, 0x00, DEF , 1, 1), /* Sao Tome and Principe */
3105 COUNTRY_CHPLAN_ENT("SV", 0x76, 0x00, DEF , 1, 1), /* El Salvador */
3106 COUNTRY_CHPLAN_ENT("SX", 0x76, 0x00, DEF , 1, 1), /* Sint Marteen */
3107 COUNTRY_CHPLAN_ENT("SZ", 0x5E, 0x00, DEF , 1, 1), /* Swaziland */
3108 COUNTRY_CHPLAN_ENT("TC", 0x3A, 0x00, DEF , 1, 1), /* Turks and Caicos Islands (UK) */
3109 COUNTRY_CHPLAN_ENT("TD", 0x3A, 0x00, DEF , 1, 1), /* Chad */
3110 COUNTRY_CHPLAN_ENT("TF", 0x3A, 0x00, DEF , 1, 1), /* French Southern and Antarctic Lands (FR Southern Territories) */
3111 COUNTRY_CHPLAN_ENT("TG", 0x5E, 0x00, DEF , 1, 1), /* Togo */
3112 COUNTRY_CHPLAN_ENT("TH", 0x5E, 0x00, DEF , 1, 1), /* Thailand */
3113 COUNTRY_CHPLAN_ENT("TJ", 0x5E, 0x00, DEF , 1, 1), /* Tajikistan */
3114 COUNTRY_CHPLAN_ENT("TK", 0x03, 0x00, DEF , 1, 1), /* Tokelau */
3115 COUNTRY_CHPLAN_ENT("TM", 0x3A, 0x00, DEF , 1, 1), /* Turkmenistan */
3116 COUNTRY_CHPLAN_ENT("TN", 0x04, 0x00, DEF , 1, 1), /* Tunisia */
3117 COUNTRY_CHPLAN_ENT("TO", 0x3A, 0x00, DEF , 1, 1), /* Tonga */
3118 COUNTRY_CHPLAN_ENT("TR", 0x5E, 0x00, DEF , 1, 1), /* Turkey, Northern Cyprus */
3119 COUNTRY_CHPLAN_ENT("TT", 0x76, 0x00, DEF , 1, 1), /* Trinidad & Tobago */
3120 COUNTRY_CHPLAN_ENT("TV", 0x21, 0x00, DEF , 0, 0), /* Tuvalu */
3121 COUNTRY_CHPLAN_ENT("TW", 0x76, 0x00, DEF , 1, 1), /* Taiwan */
3122 COUNTRY_CHPLAN_ENT("TZ", 0x5E, 0x00, DEF , 1, 1), /* Tanzania */
3123 COUNTRY_CHPLAN_ENT("UA", 0x5E, 0x00, UKRAINE, 1, 1), /* Ukraine */
3124 COUNTRY_CHPLAN_ENT("UG", 0x3A, 0x00, DEF , 1, 1), /* Uganda */
3125 COUNTRY_CHPLAN_ENT("US", 0x76, 0x7F, DEF , 1, 1), /* United States of America (USA) */
3126 COUNTRY_CHPLAN_ENT("UY", 0x30, 0x00, DEF , 1, 1), /* Uruguay */
3127 COUNTRY_CHPLAN_ENT("UZ", 0x3C, 0x00, DEF , 1, 1), /* Uzbekistan */
3128 COUNTRY_CHPLAN_ENT("VA", 0x3A, 0x00, DEF , 1, 1), /* Holy See (Vatican City) */
3129 COUNTRY_CHPLAN_ENT("VC", 0x76, 0x00, DEF , 1, 1), /* Saint Vincent and the Grenadines */
3130 COUNTRY_CHPLAN_ENT("VE", 0x30, 0x00, DEF , 1, 1), /* Venezuela */
3131 COUNTRY_CHPLAN_ENT("VG", 0x76, 0x00, DEF , 1, 1), /* British Virgin Islands (UK) */
3132 COUNTRY_CHPLAN_ENT("VI", 0x76, 0x00, DEF , 1, 1), /* United States Virgin Islands (USA) */
3133 COUNTRY_CHPLAN_ENT("VN", 0x5E, 0x00, DEF , 1, 1), /* Vietnam */
3134 COUNTRY_CHPLAN_ENT("VU", 0x26, 0x00, DEF , 1, 1), /* Vanuatu */
3135 COUNTRY_CHPLAN_ENT("WF", 0x3A, 0x00, DEF , 1, 1), /* Wallis and Futuna (France) */
3136 COUNTRY_CHPLAN_ENT("WS", 0x76, 0x00, DEF , 1, 1), /* Samoa */
3137 COUNTRY_CHPLAN_ENT("XK", 0x3A, 0x00, DEF , 1, 1), /* Kosovo */
3138 COUNTRY_CHPLAN_ENT("YE", 0x3A, 0x00, DEF , 1, 1), /* Yemen */
3139 COUNTRY_CHPLAN_ENT("YT", 0x5E, 0x00, DEF , 1, 1), /* Mayotte (France) */
3140 COUNTRY_CHPLAN_ENT("ZA", 0x5E, 0x00, DEF , 1, 1), /* South Africa */
3141 COUNTRY_CHPLAN_ENT("ZM", 0x5E, 0x00, DEF , 1, 1), /* Zambia */
3142 COUNTRY_CHPLAN_ENT("ZW", 0x5E, 0x00, DEF , 1, 1), /* Zimbabwe */
3143 };
3144 #endif /* CONFIG_CUSTOMIZED_COUNTRY_CHPLAN_MAP or RTW_DEF_MODULE_REGULATORY_CERT or newest */
3145
3146 /*
3147 * rtw_get_chplan_worldwide -
3148 * @ent: the buf to copy country_chplan entry content
3149 */
rtw_get_chplan_worldwide(struct country_chplan * ent)3150 void rtw_get_chplan_worldwide(struct country_chplan *ent)
3151 {
3152 _rtw_memcpy(ent, &world_wide_chplan, sizeof(*ent));
3153 }
3154
3155 /*
3156 * rtw_get_chplan_from_country -
3157 * @country_code: string of country code
3158 * @ent: the buf to copy country_chplan entry content
3159 *
3160 * Return _TRUE or _FALSE when unsupported country_code is given
3161 */
rtw_get_chplan_from_country(const char * country_code,struct country_chplan * ent)3162 bool rtw_get_chplan_from_country(const char *country_code, struct country_chplan *ent)
3163 {
3164 #if defined(PHL_FEATURE_NIC) && !USE_RTW_REGD
3165 struct country_chplan phl_ent = {.alpha2 = "\0\0"};
3166 #endif
3167 const struct country_chplan *map = NULL;
3168 u16 map_sz = 0;
3169 char code[2];
3170 int i;
3171
3172 code[0] = alpha_to_upper(country_code[0]);
3173 code[1] = alpha_to_upper(country_code[1]);
3174
3175 #ifdef CONFIG_CUSTOMIZED_COUNTRY_CHPLAN_MAP
3176 map = CUSTOMIZED_country_chplan_map;
3177 map_sz = sizeof(CUSTOMIZED_country_chplan_map) / sizeof(struct country_chplan);
3178 #elif RTW_DEF_MODULE_REGULATORY_CERT
3179 map_sz = rtw_def_module_country_chplan_map(&map);
3180 #else
3181 #if defined(PHL_FEATURE_NIC) && !USE_RTW_REGD
3182 {
3183 struct rtw_regulation_country_chplan plan;
3184
3185 _rtw_memset(&plan, 0, sizeof(plan));
3186 if (rtw_phl_query_country_chplan(code, &plan)) {
3187 _rtw_memcpy(phl_ent.alpha2, code, 2);
3188 phl_ent.chplan = plan.domain_code;
3189 #if CONFIG_IEEE80211_BAND_6GHZ
3190 phl_ent.chplan_6g = RTW_CHPLAN_6G_NULL; /* TODO: get from PHL */
3191 #endif
3192 phl_ent.edcca_mode_2g_override = RTW_EDCCA_DEF;
3193 #if CONFIG_IEEE80211_BAND_5GHZ
3194 phl_ent.edcca_mode_5g_override = RTW_EDCCA_DEF;
3195 #endif
3196 #if CONFIG_IEEE80211_BAND_6GHZ
3197 phl_ent.edcca_mode_6g_override = RTW_EDCCA_DEF;
3198 #endif
3199 phl_ent.txpwr_lmt_override = phl_tpo_to_txpwr_lmt(plan.tpo);
3200 #if defined(CONFIG_80211AX_HE) || defined(CONFIG_80211AC_VHT)
3201 phl_ent.proto_en = 0
3202 | ((plan.support_mode & SUPPORT_11AC) ? CHPLAN_PROTO_EN_AC : 0)
3203 | ((plan.support_mode & SUPPORT_11AX) ? CHPLAN_PROTO_EN_AX : 0)
3204 ;
3205 #endif
3206 map = &phl_ent;
3207 map_sz = 1;
3208 }
3209 }
3210 #else
3211 map = country_chplan_map;
3212 map_sz = sizeof(country_chplan_map) / sizeof(struct country_chplan);
3213 #endif
3214 #endif
3215
3216 for (i = 0; i < map_sz; i++) {
3217 if (strncmp(code, map[i].alpha2, 2) == 0) {
3218 if (ent)
3219 _rtw_memcpy(ent, &map[i], sizeof(*ent));
3220 return _TRUE;
3221 }
3222 }
3223
3224 return _FALSE;
3225 }
3226
rtw_chplan_ioctl_input_mapping(u16 * chplan,u16 * chplan_6g)3227 void rtw_chplan_ioctl_input_mapping(u16 *chplan, u16 *chplan_6g)
3228 {
3229 if (chplan) {
3230 if (*chplan == RTW_CHPLAN_IOCTL_UNSPECIFIED)
3231 *chplan = RTW_CHPLAN_UNSPECIFIED;
3232 else if (*chplan == RTW_CHPLAN_IOCTL_NULL)
3233 *chplan = RTW_CHPLAN_NULL;
3234 }
3235
3236 if (chplan_6g) {
3237 if (*chplan_6g == RTW_CHPLAN_IOCTL_UNSPECIFIED)
3238 *chplan_6g = RTW_CHPLAN_6G_UNSPECIFIED;
3239 else if (*chplan_6g == RTW_CHPLAN_IOCTL_NULL)
3240 *chplan_6g = RTW_CHPLAN_6G_NULL;
3241 }
3242 }
3243
rtw_chplan_ids_is_world_wide(u8 chplan,u8 chplan_6g)3244 bool rtw_chplan_ids_is_world_wide(u8 chplan, u8 chplan_6g)
3245 {
3246 return !(chplan == RTW_CHPLAN_NULL
3247 #if CONFIG_IEEE80211_BAND_6GHZ
3248 && chplan_6g == RTW_CHPLAN_6G_NULL
3249 #endif
3250 )
3251 && (chplan == RTW_CHPLAN_WORLDWIDE || chplan == RTW_CHPLAN_NULL)
3252 #if CONFIG_IEEE80211_BAND_6GHZ
3253 && (chplan_6g == RTW_CHPLAN_6G_WORLDWIDE || chplan_6g == RTW_CHPLAN_6G_NULL)
3254 #endif
3255 ;
3256 }
3257
3258 /*
3259 * Check if the @param ch, bw, offset is valid for the given @param ent
3260 * @ch_set: the given channel set
3261 * @ch: the given channel number
3262 * @bw: the given bandwidth
3263 * @offset: the given channel offset
3264 *
3265 * return valid (1) or not (0)
3266 */
rtw_country_chplan_is_chbw_valid(struct country_chplan * ent,enum band_type band,u8 ch,u8 bw,u8 offset,bool allow_primary_passive,bool allow_passive,struct registry_priv * regsty)3267 u8 rtw_country_chplan_is_chbw_valid(struct country_chplan *ent, enum band_type band, u8 ch, u8 bw, u8 offset
3268 , bool allow_primary_passive, bool allow_passive, struct registry_priv *regsty)
3269 {
3270 u8 chplan_6g = RTW_CHPLAN_6G_NULL;
3271 u8 valid = 0;
3272
3273 if (bw >= CHANNEL_WIDTH_80 && !COUNTRY_CHPLAN_EN_11AC(ent))
3274 goto exit;
3275
3276 #if CONFIG_IEEE80211_BAND_6GHZ
3277 chplan_6g = ent->chplan_6g;
3278 #endif
3279
3280 valid = rtw_chplan_is_chbw_valid(ent->chplan, chplan_6g, band, ch, bw, offset
3281 , allow_primary_passive, allow_passive, regsty);
3282
3283 exit:
3284 return valid;
3285 }
3286
rtw_country_chplan_get_edcca_modes(const struct country_chplan * ent,u8 modes[])3287 static void rtw_country_chplan_get_edcca_modes(const struct country_chplan *ent, u8 modes[])
3288 {
3289 modes[BAND_ON_24G] =
3290 ent->edcca_mode_2g_override != RTW_EDCCA_DEF ? ent->edcca_mode_2g_override :
3291 rtw_regd_to_edcca_mode(rtw_chplan_get_default_regd_2g(ent->chplan));
3292 #if CONFIG_IEEE80211_BAND_5GHZ
3293 modes[BAND_ON_5G] =
3294 ent->edcca_mode_5g_override != RTW_EDCCA_DEF ? ent->edcca_mode_5g_override :
3295 rtw_regd_to_edcca_mode(rtw_chplan_get_default_regd_5g(ent->chplan));
3296 #endif
3297 #if CONFIG_IEEE80211_BAND_6GHZ
3298 modes[BAND_ON_6G] =
3299 ent->edcca_mode_6g_override != RTW_EDCCA_DEF ? ent->edcca_mode_6g_override :
3300 rtw_regd_to_edcca_mode(rtw_chplan_get_default_regd_6g(ent->chplan_6g));
3301 #endif
3302 }
3303
rtw_country_chplan_get_txpwr_lmts(const struct country_chplan * ent,u8 txpwr_lmt[])3304 static void rtw_country_chplan_get_txpwr_lmts(const struct country_chplan *ent, u8 txpwr_lmt[])
3305 {
3306 txpwr_lmt[BAND_ON_24G] =
3307 ent->txpwr_lmt_override != TXPWR_LMT_DEF ? ent->txpwr_lmt_override :
3308 rtw_regd_to_txpwr_lmt(rtw_chplan_get_default_regd_2g(ent->chplan));
3309 #if CONFIG_IEEE80211_BAND_5GHZ
3310 txpwr_lmt[BAND_ON_5G] =
3311 ent->txpwr_lmt_override != TXPWR_LMT_DEF ? ent->txpwr_lmt_override :
3312 rtw_regd_to_txpwr_lmt(rtw_chplan_get_default_regd_5g(ent->chplan));
3313 #endif
3314 #if CONFIG_IEEE80211_BAND_6GHZ
3315 txpwr_lmt[BAND_ON_6G] =
3316 ent->txpwr_lmt_override != TXPWR_LMT_DEF ? ent->txpwr_lmt_override :
3317 rtw_regd_to_txpwr_lmt(rtw_chplan_get_default_regd_6g(ent->chplan_6g));
3318 #endif
3319 }
3320
3321 #ifdef CONFIG_80211D
3322 const char *const _cis_status_str[] = {
3323 [COUNTRY_IE_SLAVE_NOCOUNTRY] = "NOCOUNTRY",
3324 [COUNTRY_IE_SLAVE_UNKNOWN] = "UNKNOWN",
3325 [COUNTRY_IE_SLAVE_OPCH_NOEXIST] = "OPCH_NOEXIST",
3326 [COUNTRY_IE_SLAVE_APPLICABLE] = "APPLICABLE",
3327 [COUNTRY_IE_SLAVE_STATUS_NUM] = "INVALID",
3328 };
3329
dump_country_ie_slave_records(void * sel,struct rf_ctl_t * rfctl,bool skip_noset)3330 void dump_country_ie_slave_records(void *sel, struct rf_ctl_t *rfctl, bool skip_noset)
3331 {
3332 int i;
3333
3334 RTW_PRINT_SEL(sel, " %-6s %-4s %-4s %s\n", "alpha2", "band", "opch", "status");
3335 for (i = 0; i < CONFIG_IFACE_NUMBER; i++) {
3336 if (skip_noset && strncmp(rfctl->cisr[i].alpha2, "\x00\x00", 2) == 0)
3337 continue;
3338 RTW_PRINT_SEL(sel, "%c%d "ALPHA2_FMT" %4s %4u %s\n"
3339 , i == rfctl->effected_cisr_id ? '*' : ' ', i, ALPHA2_ARG(rfctl->cisr[i].alpha2)
3340 , band_str(rfctl->cisr[i].band), rfctl->cisr[i].opch, cis_status_str(rfctl->cisr[i].status));
3341 }
3342 }
3343
rtw_get_chplan_from_recv_country_ie(_adapter * adapter,enum band_type band,u8 opch,const u8 * country_ie,struct country_chplan * ent,struct country_ie_slave_record * cisr,const char * caller_msg)3344 enum country_ie_slave_status rtw_get_chplan_from_recv_country_ie(_adapter *adapter
3345 , enum band_type band, u8 opch, const u8 *country_ie, struct country_chplan *ent
3346 , struct country_ie_slave_record *cisr, const char *caller_msg)
3347 {
3348 struct registry_priv *regsty = adapter_to_regsty(adapter);
3349 const char *country_code = country_ie ? country_ie + 2 : NULL;
3350 u8 chplan_6g = RTW_CHPLAN_6G_NULL;
3351 enum country_ie_slave_status ret;
3352
3353 _rtw_memset(ent, 0, sizeof(*ent));
3354
3355 if (!country_code || strncmp(country_code, "XX", 2) == 0) {
3356 if (caller_msg && country_code)
3357 RTW_INFO("%s("ADPT_FMT") noncountry \"XX\"\n", caller_msg, ADPT_ARG(adapter));
3358 ret = COUNTRY_IE_SLAVE_NOCOUNTRY;
3359 goto exit;
3360 }
3361
3362 if (!rtw_get_chplan_from_country(country_code, ent)) {
3363 if (caller_msg) {
3364 if (is_alpha(country_code[0]) == _FALSE || is_alpha(country_code[1]) == _FALSE) {
3365 RTW_INFO("%s("ADPT_FMT") country_code is not alpha2, use world wide instead\n"
3366 , caller_msg, ADPT_ARG(adapter));
3367 } else {
3368 RTW_INFO("%s("ADPT_FMT") unsupported country_code:\"%c%c\", use world wide\n"
3369 , caller_msg, ADPT_ARG(adapter), country_code[0], country_code[1]);
3370 }
3371 }
3372 rtw_get_chplan_worldwide(ent);
3373 ret = COUNTRY_IE_SLAVE_UNKNOWN;
3374 goto exit;
3375 }
3376
3377 #if CONFIG_IEEE80211_BAND_6GHZ
3378 chplan_6g = ent->chplan_6g;
3379 #endif
3380
3381 if (!rtw_chplan_is_chbw_valid(ent->chplan, chplan_6g, band, opch
3382 , CHANNEL_WIDTH_20, CHAN_OFFSET_NO_EXT, 1, 1, regsty)
3383 ) {
3384 u8 edcca_modes[BAND_MAX];
3385
3386 if (caller_msg) {
3387 RTW_INFO("%s("ADPT_FMT") \"%c%c\" no band:%s ch:%u, use world wide with ori edcca modes\n"
3388 , caller_msg, ADPT_ARG(adapter), country_code[0], country_code[1], band_str(band), opch);
3389 }
3390 rtw_country_chplan_get_edcca_modes(ent, edcca_modes);
3391 rtw_get_chplan_worldwide(ent);
3392 ent->edcca_mode_2g_override = edcca_modes[BAND_ON_24G];
3393 #if CONFIG_IEEE80211_BAND_5GHZ
3394 ent->edcca_mode_5g_override = edcca_modes[BAND_ON_5G];
3395 #endif
3396 #if CONFIG_IEEE80211_BAND_6GHZ
3397 ent->edcca_mode_6g_override = edcca_modes[BAND_ON_6G];
3398 #endif
3399 ret = COUNTRY_IE_SLAVE_OPCH_NOEXIST;
3400 goto exit;
3401 }
3402
3403 if (caller_msg) {
3404 RTW_INFO("%s("ADPT_FMT") country_code:\"%c%c\" is applicapble\n"
3405 , caller_msg, ADPT_ARG(adapter), country_code[0], country_code[1]);
3406 }
3407 ret = COUNTRY_IE_SLAVE_APPLICABLE;
3408
3409 exit:
3410 if (cisr) {
3411 _rtw_memcpy(cisr->alpha2, country_code ? country_code : "\x00\x00", 2);
3412 cisr->band = band;
3413 cisr->opch = opch;
3414 cisr->status = ret;
3415 }
3416
3417 return ret;
3418 }
3419
rtw_get_chplan_from_cisrs(struct rf_ctl_t * rfctl,struct country_chplan * ent,const char * caller_msg)3420 enum country_ie_slave_status rtw_get_chplan_from_cisrs(struct rf_ctl_t *rfctl
3421 , struct country_chplan *ent, const char *caller_msg)
3422 {
3423 struct dvobj_priv *dvobj = rfctl_to_dvobj(rfctl);
3424 _adapter *adapter = dvobj->padapters[rfctl->effected_cisr_id];
3425 struct country_ie_slave_record *cisr = &rfctl->cisr[rfctl->effected_cisr_id];
3426 const u8 country_ie[4] = {WLAN_EID_COUNTRY, 2, cisr->alpha2[0], cisr->alpha2[1]};
3427 enum country_ie_slave_status status;
3428
3429 status = rtw_get_chplan_from_recv_country_ie(adapter, cisr->band, cisr->opch, country_ie, ent, NULL, caller_msg);
3430 rtw_warn_on(cisr->status != status);
3431
3432 return status;
3433 }
3434 #endif /* CONFIG_80211D */
3435
dump_country_chplan(void * sel,const struct country_chplan * ent,bool regd_info)3436 void dump_country_chplan(void *sel, const struct country_chplan *ent, bool regd_info)
3437 {
3438 char buf[16];
3439 char *pos = buf;
3440
3441 if (ent->chplan == RTW_CHPLAN_UNSPECIFIED)
3442 pos += sprintf(pos, "NA");
3443 else
3444 pos += sprintf(pos, "0x%02X", ent->chplan);
3445
3446 #if CONFIG_IEEE80211_BAND_6GHZ
3447 if (ent->chplan_6g == RTW_CHPLAN_6G_UNSPECIFIED)
3448 pos += sprintf(pos, " NA");
3449 else
3450 pos += sprintf(pos, " 0x%02X", ent->chplan_6g);
3451 #endif
3452
3453 RTW_PRINT_SEL(sel, "\"%c%c\", %s"
3454 , ent->alpha2[0], ent->alpha2[1], buf);
3455
3456 if (regd_info) {
3457 u8 edcca_modes[BAND_MAX];
3458 u8 txpwr_lmts[BAND_MAX];
3459
3460 rtw_country_chplan_get_edcca_modes(ent, edcca_modes);
3461 _RTW_PRINT_SEL(sel, " {%-6s", rtw_edcca_mode_str(edcca_modes[BAND_ON_24G]));
3462 #if CONFIG_IEEE80211_BAND_5GHZ
3463 _RTW_PRINT_SEL(sel, " %-6s", rtw_edcca_mode_str(edcca_modes[BAND_ON_5G]));
3464 #endif
3465 #if CONFIG_IEEE80211_BAND_6GHZ
3466 _RTW_PRINT_SEL(sel, " %-6s", rtw_edcca_mode_str(edcca_modes[BAND_ON_6G]));
3467 #endif
3468 _RTW_PRINT_SEL(sel, "}");
3469
3470 rtw_country_chplan_get_txpwr_lmts(ent, txpwr_lmts);
3471 _RTW_PRINT_SEL(sel, " {%-7s", txpwr_lmt_str(txpwr_lmts[BAND_ON_24G]));
3472 #if CONFIG_IEEE80211_BAND_5GHZ
3473 _RTW_PRINT_SEL(sel, " %-7s", txpwr_lmt_str(txpwr_lmts[BAND_ON_5G]));
3474 #endif
3475 #if CONFIG_IEEE80211_BAND_6GHZ
3476 _RTW_PRINT_SEL(sel, " %-7s", txpwr_lmt_str(txpwr_lmts[BAND_ON_6G]));
3477 #endif
3478 _RTW_PRINT_SEL(sel, "}");
3479 }
3480
3481 _RTW_PRINT_SEL(sel, " %s", COUNTRY_CHPLAN_EN_11AX(ent) ? "ax" : " ");
3482 _RTW_PRINT_SEL(sel, " %s", COUNTRY_CHPLAN_EN_11AC(ent) ? "ac" : " ");
3483
3484 _RTW_PRINT_SEL(sel, "\n");
3485 }
3486
dump_country_chplan_map(void * sel,bool regd_info)3487 void dump_country_chplan_map(void *sel, bool regd_info)
3488 {
3489 struct country_chplan ent;
3490 u8 code[2];
3491
3492 #if RTW_DEF_MODULE_REGULATORY_CERT
3493 RTW_PRINT_SEL(sel, "RTW_DEF_MODULE_REGULATORY_CERT:0x%x\n", RTW_DEF_MODULE_REGULATORY_CERT);
3494 #endif
3495 #ifdef CONFIG_CUSTOMIZED_COUNTRY_CHPLAN_MAP
3496 RTW_PRINT_SEL(sel, "CONFIG_CUSTOMIZED_COUNTRY_CHPLAN_MAP\n");
3497 #endif
3498
3499 rtw_get_chplan_worldwide(&ent);
3500 dump_country_chplan(sel, &ent, regd_info);
3501
3502 for (code[0] = 'A'; code[0] <= 'Z'; code[0]++) {
3503 for (code[1] = 'A'; code[1] <= 'Z'; code[1]++) {
3504 if (rtw_get_chplan_from_country(code, &ent) == _FALSE)
3505 continue;
3506
3507 dump_country_chplan(sel, &ent, regd_info);
3508 }
3509 }
3510 }
3511
dump_country_list(void * sel)3512 void dump_country_list(void *sel)
3513 {
3514 u8 code[2];
3515
3516 RTW_PRINT_SEL(sel, "%s ", WORLDWIDE_ALPHA2);
3517
3518 for (code[0] = 'A'; code[0] <= 'Z'; code[0]++) {
3519 for (code[1] = 'A'; code[1] <= 'Z'; code[1]++) {
3520 if (!rtw_get_chplan_from_country(code, NULL))
3521 continue;
3522
3523 _RTW_PRINT_SEL(sel, "%c%c ", code[0], code[1]);
3524 }
3525 }
3526 _RTW_PRINT_SEL(sel, "\n");
3527 }
3528
dump_chplan_id_list(void * sel)3529 void dump_chplan_id_list(void *sel)
3530 {
3531 #if defined(PHL_FEATURE_NIC) && !USE_RTW_REGD
3532 u8 id_search_max = 255;
3533 #else
3534 u8 id_search_max = RTW_ChannelPlanMap_size - 1;
3535 #endif
3536 u8 first = 1;
3537 int i;
3538
3539 for (i = 0; i <= id_search_max; i++) {
3540 if (!rtw_is_channel_plan_valid(i))
3541 continue;
3542
3543 if (first) {
3544 RTW_PRINT_SEL(sel, "0x%02X ", i);
3545 first = 0;
3546 } else
3547 _RTW_PRINT_SEL(sel, "0x%02X ", i);
3548 }
3549 if (first == 0)
3550 _RTW_PRINT_SEL(sel, "\n");
3551 }
3552
dump_chplan_country_list(void * sel)3553 void dump_chplan_country_list(void *sel)
3554 {
3555 #if defined(PHL_FEATURE_NIC) && !USE_RTW_REGD
3556 u8 id_search_max = 255;
3557 #else
3558 u8 id_search_max = RTW_ChannelPlanMap_size - 1;
3559 #endif
3560 int i;
3561
3562 for (i = 0; i <= id_search_max; i++) {
3563 struct country_chplan ent;
3564 u8 code[2];
3565 u8 first;
3566
3567 if (!rtw_is_channel_plan_valid(i))
3568 continue;
3569
3570 first = 1;
3571 for (code[0] = 'A'; code[0] <= 'Z'; code[0]++) {
3572 for (code[1] = 'A'; code[1] <= 'Z'; code[1]++) {
3573 if (!rtw_get_chplan_from_country(code, &ent) || ent.chplan != i)
3574 continue;
3575
3576 if (first) {
3577 RTW_PRINT_SEL(sel, "0x%02X %c%c ", i, code[0], code[1]);
3578 first = 0;
3579 } else
3580 _RTW_PRINT_SEL(sel, "%c%c ", code[0], code[1]);
3581 }
3582 }
3583 if (first == 0)
3584 _RTW_PRINT_SEL(sel, "\n");
3585 }
3586 }
3587
3588 #if CONFIG_IEEE80211_BAND_6GHZ
dump_chplan_6g_id_list(void * sel)3589 void dump_chplan_6g_id_list(void *sel)
3590 {
3591 #if defined(PHL_FEATURE_NIC) && !USE_RTW_REGD
3592 u8 id_search_max = 255;
3593 #else
3594 u8 id_search_max = rtw_chplan_6g_map_size - 1;
3595 #endif
3596 u8 first = 1;
3597 int i;
3598
3599 for (i = 0; i <= id_search_max; i++) {
3600 if (!rtw_is_channel_plan_6g_valid(i))
3601 continue;
3602
3603 if (first) {
3604 RTW_PRINT_SEL(sel, "0x%02X ", i);
3605 first = 0;
3606 } else
3607 _RTW_PRINT_SEL(sel, "0x%02X ", i);
3608 }
3609 if (first == 0)
3610 _RTW_PRINT_SEL(sel, "\n");
3611 }
3612
dump_chplan_6g_country_list(void * sel)3613 void dump_chplan_6g_country_list(void *sel)
3614 {
3615 #if defined(PHL_FEATURE_NIC) && !USE_RTW_REGD
3616 u8 id_search_max = 255;
3617 #else
3618 u8 id_search_max = rtw_chplan_6g_map_size - 1;
3619 #endif
3620 int i;
3621
3622 for (i = 0; i <= id_search_max; i++) {
3623 struct country_chplan ent;
3624 u8 code[2];
3625 u8 first;
3626
3627 if (!rtw_is_channel_plan_6g_valid(i))
3628 continue;
3629
3630 first = 1;
3631 for (code[0] = 'A'; code[0] <= 'Z'; code[0]++) {
3632 for (code[1] = 'A'; code[1] <= 'Z'; code[1]++) {
3633 if (!rtw_get_chplan_from_country(code, &ent) || ent.chplan_6g != i)
3634 continue;
3635
3636 if (first) {
3637 RTW_PRINT_SEL(sel, "0x%02X %c%c ", i, code[0], code[1]);
3638 first = 0;
3639 } else
3640 _RTW_PRINT_SEL(sel, "%c%c ", code[0], code[1]);
3641 }
3642 }
3643 if (first == 0)
3644 _RTW_PRINT_SEL(sel, "\n");
3645 }
3646 }
3647 #endif /* CONFIG_IEEE80211_BAND_6GHZ */
3648
3649 #ifdef CONFIG_RTW_DEBUG
dump_chplan_test(void * sel)3650 void dump_chplan_test(void *sel)
3651 {
3652 #if defined(PHL_FEATURE_NIC) && !USE_RTW_REGD
3653 #else
3654 int i, j;
3655
3656 /* check 2G CHD redundent */
3657 for (i = RTW_CHD_2G_00; i < RTW_CHD_2G_MAX; i++) {
3658 for (j = RTW_CHD_2G_00; j < i; j++) {
3659 if (CH_LIST_LEN(rtw_channel_def_2g[i]) == CH_LIST_LEN(rtw_channel_def_2g[j])
3660 && _rtw_memcmp(&CH_LIST_CH(rtw_channel_def_2g[i], 0), &CH_LIST_CH(rtw_channel_def_2g[j], 0), CH_LIST_LEN(rtw_channel_def_2g[i]) + 1) == _TRUE)
3661 RTW_PRINT_SEL(sel, "2G chd:%u and %u is the same\n", i, j);
3662 }
3663 }
3664
3665 /* check 2G CHD invalid channel */
3666 for (i = RTW_CHD_2G_00; i < RTW_CHD_2G_MAX; i++) {
3667 for (j = 0; j < CH_LIST_LEN(rtw_channel_def_2g[i]); j++) {
3668 if (rtw_ch2freq(CH_LIST_CH(rtw_channel_def_2g[i], j)) == 0)
3669 RTW_PRINT_SEL(sel, "2G invalid ch:%u at (%d,%d)\n", CH_LIST_CH(rtw_channel_def_2g[i], j), i, j);
3670 }
3671 }
3672
3673 #if CONFIG_IEEE80211_BAND_5GHZ
3674 /* check 5G CHD redundent */
3675 for (i = RTW_CHD_5G_00; i < RTW_CHD_5G_MAX; i++) {
3676 for (j = RTW_CHD_5G_00; j < i; j++) {
3677 if (CH_LIST_LEN(rtw_channel_def_5g[i]) == CH_LIST_LEN(rtw_channel_def_5g[j])
3678 && _rtw_memcmp(&CH_LIST_CH(rtw_channel_def_5g[i], 0), &CH_LIST_CH(rtw_channel_def_5g[j], 0), CH_LIST_LEN(rtw_channel_def_5g[i]) + 1) == _TRUE)
3679 RTW_PRINT_SEL(sel, "5G chd:%u and %u is the same\n", i, j);
3680 }
3681 }
3682
3683 /* check 5G CHD invalid channel */
3684 for (i = RTW_CHD_5G_00; i < RTW_CHD_5G_MAX; i++) {
3685 for (j = 0; j < CH_LIST_LEN(rtw_channel_def_5g[i]); j++) {
3686 if (rtw_ch2freq(CH_LIST_CH(rtw_channel_def_5g[i], j)) == 0)
3687 RTW_PRINT_SEL(sel, "5G invalid ch:%u at (%d,%d)\n", CH_LIST_CH(rtw_channel_def_5g[i], j), i, j);
3688 }
3689 }
3690 #endif
3691
3692 #if CONFIG_IEEE80211_BAND_6GHZ
3693 /* check 6G CHD redundent */
3694 for (i = RTW_CHD_6G_00; i < RTW_CHD_6G_MAX; i++) {
3695 for (j = RTW_CHD_6G_00; j < i; j++) {
3696 if (CH_LIST_LEN(rtw_channel_def_6g[i]) == CH_LIST_LEN(rtw_channel_def_6g[j])
3697 && _rtw_memcmp(&CH_LIST_CH(rtw_channel_def_6g[i], 0), &CH_LIST_CH(rtw_channel_def_6g[j], 0), CH_LIST_LEN(rtw_channel_def_6g[i]) + 1) == _TRUE)
3698 RTW_PRINT_SEL(sel, "6G chd:%u and %u is the same\n", i, j);
3699 }
3700 }
3701
3702 /* check 6G CHD invalid channel */
3703 for (i = RTW_CHD_6G_00; i < RTW_CHD_6G_MAX; i++) {
3704 for (j = 0; j < CH_LIST_LEN(rtw_channel_def_6g[i]); j++) {
3705 if (rtw_6gch2freq(CH_LIST_CH(rtw_channel_def_6g[i], j)) == 0)
3706 RTW_PRINT_SEL(sel, "6G invalid ch:%u at (%d,%d)\n", CH_LIST_CH(rtw_channel_def_6g[i], j), i, j);
3707 }
3708 }
3709 #endif
3710
3711 /* check chplan 2G_5G redundent */
3712 for (i = 0; i < RTW_ChannelPlanMap_size; i++) {
3713 if (!rtw_is_channel_plan_valid(i))
3714 continue;
3715 for (j = 0; j < i; j++) {
3716 if (!rtw_is_channel_plan_valid(j))
3717 continue;
3718 if (_rtw_memcmp(&RTW_ChannelPlanMap[i], &RTW_ChannelPlanMap[j], sizeof(RTW_ChannelPlanMap[i])) == _TRUE)
3719 RTW_PRINT_SEL(sel, "channel plan 0x%02x and 0x%02x is the same\n", i, j);
3720 }
3721 }
3722
3723 #if CONFIG_IEEE80211_BAND_6GHZ
3724 /* check chplan 6G redundent */
3725 for (i = 0; i < rtw_chplan_6g_map_size; i++) {
3726 if (!rtw_is_channel_plan_6g_valid(i))
3727 continue;
3728 for (j = 0; j < i; j++) {
3729 if (!rtw_is_channel_plan_6g_valid(j))
3730 continue;
3731 if (_rtw_memcmp(&rtw_chplan_6g_map[i], &rtw_chplan_6g_map[j], sizeof(rtw_chplan_6g_map[i])) == _TRUE)
3732 RTW_PRINT_SEL(sel, "channel plan 6g 0x%02x and 0x%02x is the same\n", i, j);
3733 }
3734 }
3735 #endif
3736
3737
3738 /* check country invalid chplan/chplan_6g */
3739 {
3740 struct country_chplan ent;
3741 u8 code[2];
3742
3743 for (code[0] = 'A'; code[0] <= 'Z'; code[0]++) {
3744 for (code[1] = 'A'; code[1] <= 'Z'; code[1]++) {
3745 if (!rtw_get_chplan_from_country(code, &ent))
3746 continue;
3747 if (!rtw_is_channel_plan_valid(ent.chplan))
3748 RTW_PRINT_SEL(sel, "country \"%c%c\" has invalid chplan:0x%02X\n", code[0], code[1], ent.chplan);
3749 #if CONFIG_IEEE80211_BAND_6GHZ
3750 if (!rtw_is_channel_plan_6g_valid(ent.chplan_6g))
3751 RTW_PRINT_SEL(sel, "country \"%c%c\" has invalid chplan_6g:0x%02X\n", code[0], code[1], ent.chplan_6g);
3752 #endif
3753 }
3754 }
3755 }
3756 #endif
3757 }
3758 #endif /* CONFIG_RTW_DEBUG */
3759
dump_chplan_ver(void * sel)3760 void dump_chplan_ver(void *sel)
3761 {
3762 #if defined(PHL_FEATURE_NIC) && !USE_RTW_REGD
3763 struct rtw_regulation_info info = {0};
3764
3765 if (!rtw_phl_query_regulation_info(phl_info, &info)) {
3766 RTW_PRINT_SEL(sel, "query chplan version fail\n");
3767 return;
3768 }
3769 RTW_PRINT_SEL(sel, "%d-%d\n", info.chplan_ver, info.country_ver);
3770 #else
3771 RTW_PRINT_SEL(sel, "%s%s-%s\n", RTW_DOMAIN_MAP_VER, RTW_DOMAIN_MAP_M_VER, RTW_COUNTRY_MAP_VER);
3772 #endif
3773 }
3774
rtw_set_phl_regulation_ctx(struct dvobj_priv * dvobj)3775 void rtw_set_phl_regulation_ctx(struct dvobj_priv *dvobj)
3776 {
3777 #ifdef PHL_FEATURE_NIC
3778 if (!phl_info)
3779 phl_info = GET_PHL_INFO(dvobj);
3780 #endif
3781 }
3782
rtw_clear_phl_regulation_ctx(struct dvobj_priv * dvobj)3783 void rtw_clear_phl_regulation_ctx(struct dvobj_priv *dvobj)
3784 {
3785 #ifdef PHL_FEATURE_NIC
3786 if (phl_info == GET_PHL_INFO(dvobj))
3787 phl_info = NULL;
3788 #endif
3789 }