xref: /OK3568_Linux_fs/external/rkwifibt/drivers/rtl8852bs/core/rtw_chplan.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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 }