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