xref: /OK3568_Linux_fs/external/rkwifibt/drivers/rtl8723ds/core/rtw_chplan.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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		"55"
20 #define RTW_DOMAIN_MAP_M_VER	"g"
21 #define RTW_COUNTRY_MAP_VER		"29"
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 CH_LIST_ENT(_len, arg...) \
38 	{.len_ch_attr = (u8[_len + 2]) {_len, ##arg}, }
39 
40 #define CH_LIST_LEN(_ch_list) (_ch_list.len_ch_attr[0])
41 #define CH_LIST_CH(_ch_list, _i) (_ch_list.len_ch_attr[_i + 1])
42 #define CH_LIST_ATTRIB(_ch_list) (_ch_list.len_ch_attr[CH_LIST_LEN(_ch_list) + 1])
43 
44 enum rtw_chd_2g {
45 	RTW_CHD_2G_00 = 0,
46 	RTW_CHD_2G_01 = 1,
47 	RTW_CHD_2G_02 = 2,
48 	RTW_CHD_2G_03 = 3,
49 	RTW_CHD_2G_04 = 4,
50 	RTW_CHD_2G_05 = 5,
51 	RTW_CHD_2G_06 = 6,
52 
53 	RTW_CHD_2G_MAX,
54 	RTW_CHD_2G_NULL = RTW_CHD_2G_00,
55 };
56 
57 enum rtw_chd_5g {
58 	RTW_CHD_5G_00 = 0,
59 	RTW_CHD_5G_01 = 1,
60 	RTW_CHD_5G_02 = 2,
61 	RTW_CHD_5G_03 = 3,
62 	RTW_CHD_5G_04 = 4,
63 	RTW_CHD_5G_05 = 5,
64 	RTW_CHD_5G_06 = 6,
65 	RTW_CHD_5G_07 = 7,
66 	RTW_CHD_5G_08 = 8,
67 	RTW_CHD_5G_09 = 9,
68 	RTW_CHD_5G_10 = 10,
69 	RTW_CHD_5G_11 = 11,
70 	RTW_CHD_5G_12 = 12,
71 	RTW_CHD_5G_13 = 13,
72 	RTW_CHD_5G_14 = 14,
73 	RTW_CHD_5G_15 = 15,
74 	RTW_CHD_5G_16 = 16,
75 	RTW_CHD_5G_17 = 17,
76 	RTW_CHD_5G_18 = 18,
77 	RTW_CHD_5G_19 = 19,
78 	RTW_CHD_5G_20 = 20,
79 	RTW_CHD_5G_21 = 21,
80 	RTW_CHD_5G_22 = 22,
81 	RTW_CHD_5G_23 = 23,
82 	RTW_CHD_5G_24 = 24,
83 	RTW_CHD_5G_25 = 25,
84 	RTW_CHD_5G_26 = 26,
85 	RTW_CHD_5G_27 = 27,
86 	RTW_CHD_5G_28 = 28,
87 	RTW_CHD_5G_29 = 29,
88 	RTW_CHD_5G_30 = 30,
89 	RTW_CHD_5G_31 = 31,
90 	RTW_CHD_5G_32 = 32,
91 	RTW_CHD_5G_33 = 33,
92 	RTW_CHD_5G_34 = 34,
93 	RTW_CHD_5G_35 = 35,
94 	RTW_CHD_5G_36 = 36,
95 	RTW_CHD_5G_37 = 37,
96 	RTW_CHD_5G_38 = 38,
97 	RTW_CHD_5G_39 = 39,
98 	RTW_CHD_5G_40 = 40,
99 	RTW_CHD_5G_41 = 41,
100 	RTW_CHD_5G_42 = 42,
101 	RTW_CHD_5G_43 = 43,
102 	RTW_CHD_5G_44 = 44,
103 	RTW_CHD_5G_45 = 45,
104 	RTW_CHD_5G_46 = 46,
105 	RTW_CHD_5G_47 = 47,
106 	RTW_CHD_5G_48 = 48,
107 	RTW_CHD_5G_49 = 49,
108 	RTW_CHD_5G_50 = 50,
109 	RTW_CHD_5G_51 = 51,
110 
111 	RTW_CHD_5G_MAX,
112 	RTW_CHD_5G_NULL = RTW_CHD_5G_00,
113 };
114 
115 static const struct ch_list_t rtw_channel_def_2g[] = {
116 	/* 0, RTW_CHD_2G_00 */	CH_LIST_ENT(0, 0),
117 	/* 1, 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),
118 	/* 2, RTW_CHD_2G_02 */	CH_LIST_ENT(13, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0),
119 	/* 3, RTW_CHD_2G_03 */	CH_LIST_ENT(11, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0),
120 	/* 4, RTW_CHD_2G_04 */	CH_LIST_ENT(14, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0),
121 	/* 5, RTW_CHD_2G_05 */	CH_LIST_ENT(4, 10, 11, 12, 13, 0),
122 	/* 6, 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),
123 };
124 
125 #if CONFIG_IEEE80211_BAND_5GHZ
126 static const struct ch_list_t rtw_channel_def_5g[] = {
127 	/* 0, RTW_CHD_5G_00 */	CH_LIST_ENT(0, 0),
128 	/* 1, 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),
129 	/* 2, 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),
130 	/* 3, 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),
131 	/* 4, 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),
132 	/* 5, 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),
133 	/* 6, RTW_CHD_5G_06 */	CH_LIST_ENT(9, 36, 40, 44, 48, 149, 153, 157, 161, 165, 0),
134 	/* 7, 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),
135 	/* 8, RTW_CHD_5G_08 */	CH_LIST_ENT(12, 36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161, CLA_5G_B2_DFS),
136 	/* 9, RTW_CHD_5G_09 */	CH_LIST_ENT(5, 149, 153, 157, 161, 165, 0),
137 	/* 10, RTW_CHD_5G_10 */	CH_LIST_ENT(8, 36, 40, 44, 48, 52, 56, 60, 64, CLA_5G_B2_DFS),
138 	/* 11, RTW_CHD_5G_11 */	CH_LIST_ENT(11, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, CLA_5G_B3_DFS),
139 	/* 12, 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),
140 	/* 13, RTW_CHD_5G_13 */	CH_LIST_ENT(8, 56, 60, 64, 149, 153, 157, 161, 165, CLA_5G_B2_DFS),
141 	/* 14, RTW_CHD_5G_14 */	CH_LIST_ENT(4, 36, 40, 44, 48, 0),
142 	/* 15, RTW_CHD_5G_15 */	CH_LIST_ENT(4, 149, 153, 157, 161, 0),
143 	/* 16, RTW_CHD_5G_16 */	CH_LIST_ENT(11, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 0),
144 	/* 17, 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),
145 	/* 18, 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),
146 	/* 19, 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),
147 	/* 20, 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),
148 	/* 21, 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),
149 	/* 22, 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),
150 	/* 23, 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),
151 	/* 24, 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),
152 	/* 25, 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),
153 	/* 26, 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),
154 	/* 27, 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),
155 	/* 28, 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),
156 	/* 29, 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),
157 	/* 30, 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),
158 	/* 31, 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),
159 	/* 32, RTW_CHD_5G_32 */	CH_LIST_ENT(9, 52, 56, 60, 64, 149, 153, 157, 161, 165, CLA_5G_B2_DFS),
160 	/* 33, 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),
161 	/* 34, 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),
162 	/* 35, RTW_CHD_5G_35 */	CH_LIST_ENT(8, 100, 104, 108, 112, 116, 132, 136, 140, CLA_5G_B3_DFS),
163 	/* 36, 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),
164 	/* 37, RTW_CHD_5G_37 */	CH_LIST_ENT(8, 36, 40, 44, 48, 52, 56, 60, 64, CLA_5G_B1_PASSIVE | CLA_5G_B2_PASSIVE),
165 	/* 38, 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),
166 	/* 39, 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),
167 	/* 40, 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),
168 	/* 41, 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),
169 	/* 42, 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),
170 	/* 43, 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),
171 	/* 44, 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),
172 	/* 45, 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),
173 	/* 46, RTW_CHD_5G_46 */	CH_LIST_ENT(12, 36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161, CLA_5G_B2_PASSIVE),
174 	/* 47, 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),
175 	/* 48, 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),
176 	/* 49, 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),
177 	/* 50, 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),
178 	/* 51, 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),
179 };
180 #endif /* CONFIG_IEEE80211_BAND_5GHZ */
181 
182 struct chplan_ent_t {
183 	u8 regd_2g; /* value of REGULATION_TXPWR_LMT */
184 	u8 chd_2g;
185 #if CONFIG_IEEE80211_BAND_5GHZ
186 	u8 regd_5g; /* value of REGULATION_TXPWR_LMT */
187 	u8 chd_5g;
188 #endif
189 };
190 
191 #if CONFIG_IEEE80211_BAND_5GHZ
192 #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}
193 #else
194 #define CHPLAN_ENT(_regd_2g, _chd_2g, _regd_5g, _chd_5g) {.regd_2g = RTW_REGD_##_regd_2g, .chd_2g = RTW_CHD_2G_##_chd_2g}
195 #endif
196 
197 #define CHPLAN_ENT_NOT_DEFINED CHPLAN_ENT(NA, NULL, NA, NULL)
198 
199 static const struct chplan_ent_t RTW_ChannelPlanMap[] = {
200 	/* 0x00 */	CHPLAN_ENT(ETSI , 02, ETSI , 49),
201 	/* 0x01 */	CHPLAN_ENT(ETSI , 02, ETSI , 50),
202 	/* 0x02 */	CHPLAN_ENT(ETSI , 03, ETSI , 07),
203 	/* 0x03 */	CHPLAN_ENT(ACMA , 02, ACMA , 33),
204 	/* 0x04 */	CHPLAN_ENT(ETSI , 02, ETSI , 51),
205 	/* 0x05 */	CHPLAN_ENT(ETSI , 02, ETSI , 06),
206 	/* 0x06 */	CHPLAN_ENT(ETSI , 02, ETSI , 07),
207 	/* 0x07 */	CHPLAN_ENT(ETSI , 02, ETSI , 23),
208 	/* 0x08 */	CHPLAN_ENT(ETSI , 02, ETSI , 21),
209 	/* 0x09 */	CHPLAN_ENT(ETSI , 02, ETSI , 17),
210 	/* 0x0A */	CHPLAN_ENT_NOT_DEFINED,
211 	/* 0x0B */	CHPLAN_ENT_NOT_DEFINED,
212 	/* 0x0C */	CHPLAN_ENT_NOT_DEFINED,
213 	/* 0x0D */	CHPLAN_ENT_NOT_DEFINED,
214 	/* 0x0E */	CHPLAN_ENT_NOT_DEFINED,
215 	/* 0x0F */	CHPLAN_ENT_NOT_DEFINED,
216 	/* 0x10 */	CHPLAN_ENT_NOT_DEFINED,
217 	/* 0x11 */	CHPLAN_ENT_NOT_DEFINED,
218 	/* 0x12 */	CHPLAN_ENT_NOT_DEFINED,
219 	/* 0x13 */	CHPLAN_ENT_NOT_DEFINED,
220 	/* 0x14 */	CHPLAN_ENT_NOT_DEFINED,
221 	/* 0x15 */	CHPLAN_ENT_NOT_DEFINED,
222 	/* 0x16 */	CHPLAN_ENT_NOT_DEFINED,
223 	/* 0x17 */	CHPLAN_ENT_NOT_DEFINED,
224 	/* 0x18 */	CHPLAN_ENT_NOT_DEFINED,
225 	/* 0x19 */	CHPLAN_ENT_NOT_DEFINED,
226 	/* 0x1A */	CHPLAN_ENT_NOT_DEFINED,
227 	/* 0x1B */	CHPLAN_ENT_NOT_DEFINED,
228 	/* 0x1C */	CHPLAN_ENT_NOT_DEFINED,
229 	/* 0x1D */	CHPLAN_ENT_NOT_DEFINED,
230 	/* 0x1E */	CHPLAN_ENT_NOT_DEFINED,
231 	/* 0x1F */	CHPLAN_ENT_NOT_DEFINED,
232 	/* 0x20 */	CHPLAN_ENT(WW   , 01, NA   , 00),
233 	/* 0x21 */	CHPLAN_ENT(ETSI , 02, NA   , 00),
234 	/* 0x22 */	CHPLAN_ENT(FCC  , 03, NA   , 00),
235 	/* 0x23 */	CHPLAN_ENT(MKK  , 04, NA   , 00),
236 	/* 0x24 */	CHPLAN_ENT(ETSI , 05, NA   , 00),
237 	/* 0x25 */	CHPLAN_ENT(FCC  , 03, FCC  , 03),
238 	/* 0x26 */	CHPLAN_ENT(ETSI , 01, ETSI , 02),
239 	/* 0x27 */	CHPLAN_ENT(MKK  , 04, MKK  , 02),
240 	/* 0x28 */	CHPLAN_ENT(KCC  , 01, KCC  , 05),
241 	/* 0x29 */	CHPLAN_ENT(FCC  , 01, FCC  , 06),
242 	/* 0x2A */	CHPLAN_ENT(FCC  , 02, NA   , 00),
243 	/* 0x2B */	CHPLAN_ENT(IC   , 02, IC   , 33),
244 	/* 0x2C */	CHPLAN_ENT(MKK  , 02, NA   , 00),
245 	/* 0x2D */	CHPLAN_ENT(CHILE, 01, CHILE, 22),
246 	/* 0x2E */	CHPLAN_ENT(WW   , 03, WW   , 37),
247 	/* 0x2F */	CHPLAN_ENT(CHILE, 01, CHILE, 38),
248 	/* 0x30 */	CHPLAN_ENT(FCC  , 01, FCC  , 07),
249 	/* 0x31 */	CHPLAN_ENT(FCC  , 01, FCC  , 08),
250 	/* 0x32 */	CHPLAN_ENT(FCC  , 01, FCC  , 09),
251 	/* 0x33 */	CHPLAN_ENT(FCC  , 01, FCC  , 10),
252 	/* 0x34 */	CHPLAN_ENT(FCC  , 03, FCC  , 01),
253 	/* 0x35 */	CHPLAN_ENT(ETSI , 01, ETSI , 03),
254 	/* 0x36 */	CHPLAN_ENT(ETSI , 01, ETSI , 04),
255 	/* 0x37 */	CHPLAN_ENT(MKK  , 04, MKK  , 10),
256 	/* 0x38 */	CHPLAN_ENT(MKK  , 04, MKK  , 11),
257 	/* 0x39 */	CHPLAN_ENT(NCC  , 03, NCC  , 12),
258 	/* 0x3A */	CHPLAN_ENT(ETSI , 02, ETSI , 02),
259 	/* 0x3B */	CHPLAN_ENT(ACMA , 02, ACMA , 01),
260 	/* 0x3C */	CHPLAN_ENT(ETSI , 02, ETSI , 10),
261 	/* 0x3D */	CHPLAN_ENT(ETSI , 02, ETSI , 15),
262 	/* 0x3E */	CHPLAN_ENT(KCC  , 02, KCC  , 03),
263 	/* 0x3F */	CHPLAN_ENT(FCC  , 03, FCC  , 22),
264 	/* 0x40 */	CHPLAN_ENT(NCC  , 03, NCC  , 13),
265 	/* 0x41 */	CHPLAN_ENT(WW   , 06, NA   , 00),
266 	/* 0x42 */	CHPLAN_ENT(ETSI , 02, ETSI , 14),
267 	/* 0x43 */	CHPLAN_ENT(FCC  , 03, FCC  , 06),
268 	/* 0x44 */	CHPLAN_ENT(NCC  , 03, NCC  , 09),
269 	/* 0x45 */	CHPLAN_ENT(ACMA , 01, ACMA , 01),
270 	/* 0x46 */	CHPLAN_ENT(FCC  , 03, FCC  , 15),
271 	/* 0x47 */	CHPLAN_ENT(ETSI , 01, ETSI , 10),
272 	/* 0x48 */	CHPLAN_ENT(ETSI , 01, ETSI , 07),
273 	/* 0x49 */	CHPLAN_ENT(ETSI , 01, ETSI , 06),
274 	/* 0x4A */	CHPLAN_ENT(IC   , 03, IC   , 33),
275 	/* 0x4B */	CHPLAN_ENT(KCC  , 02, KCC  , 22),
276 	/* 0x4C */	CHPLAN_ENT(FCC  , 03, FCC  , 28),
277 	/* 0x4D */	CHPLAN_ENT(MEX  , 02, MEX  , 01),
278 	/* 0x4E */	CHPLAN_ENT(ETSI , 02, ETSI , 42),
279 	/* 0x4F */	CHPLAN_ENT(NA   , 00, MKK  , 43),
280 	/* 0x50 */	CHPLAN_ENT(ETSI , 01, ETSI , 16),
281 	/* 0x51 */	CHPLAN_ENT(ETSI , 01, ETSI , 09),
282 	/* 0x52 */	CHPLAN_ENT(ETSI , 01, ETSI , 17),
283 	/* 0x53 */	CHPLAN_ENT(NCC  , 03, NCC  , 18),
284 	/* 0x54 */	CHPLAN_ENT(ETSI , 01, ETSI , 15),
285 	/* 0x55 */	CHPLAN_ENT(FCC  , 03, FCC  , 01),
286 	/* 0x56 */	CHPLAN_ENT(ETSI , 01, ETSI , 19),
287 	/* 0x57 */	CHPLAN_ENT(FCC  , 03, FCC  , 20),
288 	/* 0x58 */	CHPLAN_ENT(MKK  , 02, MKK  , 14),
289 	/* 0x59 */	CHPLAN_ENT(ETSI , 01, ETSI , 21),
290 	/* 0x5A */	CHPLAN_ENT(NA   , 00, FCC  , 44),
291 	/* 0x5B */	CHPLAN_ENT(NA   , 00, FCC  , 45),
292 	/* 0x5C */	CHPLAN_ENT(NA   , 00, FCC  , 43),
293 	/* 0x5D */	CHPLAN_ENT(ETSI , 02, ETSI , 08),
294 	/* 0x5E */	CHPLAN_ENT(ETSI , 02, ETSI , 03),
295 	/* 0x5F */	CHPLAN_ENT(MKK  , 02, MKK  , 47),
296 	/* 0x60 */	CHPLAN_ENT(FCC  , 03, FCC  , 09),
297 	/* 0x61 */	CHPLAN_ENT(FCC  , 02, FCC  , 01),
298 	/* 0x62 */	CHPLAN_ENT(FCC  , 02, FCC  , 03),
299 	/* 0x63 */	CHPLAN_ENT(ETSI , 01, ETSI , 23),
300 	/* 0x64 */	CHPLAN_ENT(MKK  , 02, MKK  , 24),
301 	/* 0x65 */	CHPLAN_ENT(ETSI , 02, ETSI , 24),
302 	/* 0x66 */	CHPLAN_ENT(FCC  , 03, FCC  , 27),
303 	/* 0x67 */	CHPLAN_ENT(FCC  , 03, FCC  , 25),
304 	/* 0x68 */	CHPLAN_ENT(FCC  , 02, FCC  , 27),
305 	/* 0x69 */	CHPLAN_ENT(FCC  , 02, FCC  , 25),
306 	/* 0x6A */	CHPLAN_ENT(ETSI , 02, ETSI , 25),
307 	/* 0x6B */	CHPLAN_ENT(FCC  , 01, FCC  , 29),
308 	/* 0x6C */	CHPLAN_ENT(FCC  , 01, FCC  , 26),
309 	/* 0x6D */	CHPLAN_ENT(FCC  , 02, FCC  , 28),
310 	/* 0x6E */	CHPLAN_ENT(FCC  , 01, FCC  , 25),
311 	/* 0x6F */	CHPLAN_ENT(NA   , 00, ETSI , 06),
312 	/* 0x70 */	CHPLAN_ENT(NA   , 00, ETSI , 30),
313 	/* 0x71 */	CHPLAN_ENT(NA   , 00, ETSI , 25),
314 	/* 0x72 */	CHPLAN_ENT(NA   , 00, ETSI , 31),
315 	/* 0x73 */	CHPLAN_ENT(FCC  , 01, FCC  , 01),
316 	/* 0x74 */	CHPLAN_ENT(FCC  , 02, FCC  , 19),
317 	/* 0x75 */	CHPLAN_ENT(ETSI , 01, ETSI , 32),
318 	/* 0x76 */	CHPLAN_ENT(FCC  , 02, FCC  , 22),
319 	/* 0x77 */	CHPLAN_ENT(ETSI , 01, ETSI , 34),
320 	/* 0x78 */	CHPLAN_ENT(FCC  , 03, FCC  , 35),
321 	/* 0x79 */	CHPLAN_ENT(MKK  , 02, MKK  , 02),
322 	/* 0x7A */	CHPLAN_ENT(ETSI , 02, ETSI , 28),
323 	/* 0x7B */	CHPLAN_ENT(ETSI , 02, ETSI , 46),
324 	/* 0x7C */	CHPLAN_ENT(ETSI , 02, ETSI , 47),
325 	/* 0x7D */	CHPLAN_ENT(MKK  , 04, MKK  , 48),
326 	/* 0x7E */	CHPLAN_ENT(MKK  , 02, MKK  , 48),
327 	/* 0x7F */	CHPLAN_ENT(FCC  , 01, FCC  , 03),
328 };
329 
330 const int RTW_ChannelPlanMap_size = sizeof(RTW_ChannelPlanMap) / sizeof(RTW_ChannelPlanMap[0]);
331 
rtw_chplan_get_default_regd_2g(u8 id)332 u8 rtw_chplan_get_default_regd_2g(u8 id)
333 {
334 	return RTW_ChannelPlanMap[id].regd_2g;
335 }
336 
rtw_chplan_get_default_regd_5g(u8 id)337 u8 rtw_chplan_get_default_regd_5g(u8 id)
338 {
339 #if CONFIG_IEEE80211_BAND_5GHZ
340 	return RTW_ChannelPlanMap[id].regd_5g;
341 #else
342 	return TXPWR_LMT_NONE;
343 #endif
344 }
345 
rtw_chplan_get_default_regd(u8 id)346 u8 rtw_chplan_get_default_regd(u8 id)
347 {
348 	u8 regd_2g = rtw_chplan_get_default_regd_2g(id);
349 	u8 regd_5g = rtw_chplan_get_default_regd_5g(id);
350 
351 	if (regd_2g != RTW_REGD_NA && regd_5g != RTW_REGD_NA) {
352 		if (regd_2g != regd_5g)
353 			RTW_WARN("channel_plan:0x%02x, regd_2g:%u, regd_5g:%u not the same\n", id, regd_2g, regd_5g);
354 		return regd_5g;
355 	}
356 	return regd_2g != RTW_REGD_NA ? regd_2g : regd_5g;
357 }
358 
rtw_chplan_is_empty(u8 id)359 bool rtw_chplan_is_empty(u8 id)
360 {
361 	const struct chplan_ent_t *chplan_map = &RTW_ChannelPlanMap[id];
362 
363 	if (chplan_map->chd_2g == RTW_CHD_2G_NULL
364 		#if CONFIG_IEEE80211_BAND_5GHZ
365 		&& chplan_map->chd_5g == RTW_CHD_5G_NULL
366 		#endif
367 	)
368 		return _TRUE;
369 
370 	return _FALSE;
371 }
372 
rtw_is_channel_plan_valid(u8 id)373 bool rtw_is_channel_plan_valid(u8 id)
374 {
375 	return id < RTW_ChannelPlanMap_size && !rtw_chplan_is_empty(id);
376 }
377 
rtw_regsty_is_excl_chs(struct registry_priv * regsty,u8 ch)378 bool rtw_regsty_is_excl_chs(struct registry_priv *regsty, u8 ch)
379 {
380 	int i;
381 
382 	for (i = 0; i < MAX_CHANNEL_NUM; i++) {
383 		if (regsty->excl_chs[i] == 0)
384 			break;
385 		if (regsty->excl_chs[i] == ch)
386 			return _TRUE;
387 	}
388 	return _FALSE;
389 }
390 
391 const char *_regd_src_str[] = {
392 	[REGD_SRC_RTK_PRIV] = "RTK_PRIV",
393 	[REGD_SRC_OS] = "OS",
394 	[REGD_SRC_NUM] = "UNKNOWN",
395 };
396 
init_channel_set_from_rtk_priv(_adapter * padapter,RT_CHANNEL_INFO * channel_set)397 static u8 init_channel_set_from_rtk_priv(_adapter *padapter, RT_CHANNEL_INFO *channel_set)
398 {
399 	struct rf_ctl_t *rfctl = adapter_to_rfctl(padapter);
400 	struct registry_priv *regsty = adapter_to_regsty(padapter);
401 	u8 ChannelPlan = rfctl->ChannelPlan;
402 	u8 index, chanset_size = 0;
403 	u8 b5GBand = _FALSE, b2_4GBand = _FALSE;
404 	u8 ch, attrib;
405 #ifdef CONFIG_DFS_MASTER
406 	int i;
407 #endif
408 
409 	if (!rtw_is_channel_plan_valid(ChannelPlan)) {
410 		RTW_ERR("ChannelPlan ID 0x%02X error !!!!!\n", ChannelPlan);
411 		return chanset_size;
412 	}
413 
414 	_rtw_memset(channel_set, 0, sizeof(RT_CHANNEL_INFO) * MAX_CHANNEL_NUM);
415 
416 	if (IsSupported24G(regsty->wireless_mode) && hal_chk_band_cap(padapter, BAND_CAP_2G))
417 		b2_4GBand = _TRUE;
418 
419 	if (is_supported_5g(regsty->wireless_mode) && hal_chk_band_cap(padapter, BAND_CAP_5G))
420 		b5GBand = _TRUE;
421 
422 	if (b2_4GBand == _FALSE && b5GBand == _FALSE) {
423 		RTW_WARN("HW band_cap has no intersection with SW wireless_mode setting\n");
424 		return chanset_size;
425 	}
426 
427 	if (b2_4GBand) {
428 		u8 chd_2g = RTW_ChannelPlanMap[ChannelPlan].chd_2g;
429 
430 		attrib = CH_LIST_ATTRIB(rtw_channel_def_2g[chd_2g]);
431 
432 		for (index = 0; index < CH_LIST_LEN(rtw_channel_def_2g[chd_2g]); index++) {
433 			ch = CH_LIST_CH(rtw_channel_def_2g[chd_2g], index);
434 			if (rtw_regsty_is_excl_chs(regsty, ch) == _TRUE)
435 				continue;
436 
437 			if (chanset_size >= MAX_CHANNEL_NUM) {
438 				RTW_WARN("chset size can't exceed MAX_CHANNEL_NUM(%u)\n", MAX_CHANNEL_NUM);
439 				break;
440 			}
441 
442 			channel_set[chanset_size].ChannelNum = ch;
443 
444 			if (ch >= 12 && ch <= 14 && (attrib & CLA_2G_12_14_PASSIVE))
445 				channel_set[chanset_size].flags |= RTW_CHF_NO_IR;
446 
447 			if (channel_set[chanset_size].flags & RTW_CHF_NO_IR) {
448 				if (rfctl->country_ent || ch <= 11)
449 					RTW_INFO("ch%u is PASSIVE\n", ch);
450 			}
451 
452 			chanset_size++;
453 		}
454 	}
455 
456 #if CONFIG_IEEE80211_BAND_5GHZ
457 	if (b5GBand) {
458 		bool dfs;
459 		u8 chd_5g = RTW_ChannelPlanMap[ChannelPlan].chd_5g;
460 
461 		attrib = CH_LIST_ATTRIB(rtw_channel_def_5g[chd_5g]);
462 
463 		for (index = 0; index < CH_LIST_LEN(rtw_channel_def_5g[chd_5g]); index++) {
464 			ch = CH_LIST_CH(rtw_channel_def_5g[chd_5g], index);
465 			if (rtw_regsty_is_excl_chs(regsty, ch) == _TRUE)
466 				continue;
467 			dfs = (rtw_is_5g_band2(ch) && (attrib & CLA_5G_B2_DFS))
468 				|| (rtw_is_5g_band3(ch) && (attrib & CLA_5G_B3_DFS))
469 				|| (rtw_is_5g_band4(ch) && (attrib & CLA_5G_B4_DFS));
470 			#if !CONFIG_DFS
471 			if (dfs)
472 				continue;
473 			#endif
474 
475 			if (chanset_size >= MAX_CHANNEL_NUM) {
476 				RTW_WARN("chset size can't exceed MAX_CHANNEL_NUM(%u)\n", MAX_CHANNEL_NUM);
477 				break;
478 			}
479 
480 			channel_set[chanset_size].ChannelNum = ch;
481 
482 			if ((rtw_is_5g_band1(ch) && (attrib & CLA_5G_B1_PASSIVE)) /* band1 passive */
483 				|| (rtw_is_5g_band2(ch) && (attrib & CLA_5G_B2_PASSIVE)) /* band2 passive */
484 				|| (rtw_is_5g_band3(ch) && (attrib & CLA_5G_B3_PASSIVE)) /* band3 passive */
485 				|| (rtw_is_5g_band4(ch) && (attrib & CLA_5G_B4_PASSIVE)) /* band4 passive */
486 			)
487 				channel_set[chanset_size].flags |= RTW_CHF_NO_IR;
488 
489 			if (dfs)
490 				channel_set[chanset_size].flags |= RTW_CHF_DFS;
491 
492 			if (channel_set[chanset_size].flags & RTW_CHF_NO_IR) {
493 				if (rfctl->country_ent || (channel_set[chanset_size].flags & RTW_CHF_DFS))
494 					RTW_INFO("ch%u is PASSIVE%s\n", ch, dfs ? " DFS" : "");
495 			}
496 
497 			chanset_size++;
498 		}
499 	}
500 
501 	#ifdef CONFIG_DFS_MASTER
502 	for (i = 0; i < chanset_size; i++)
503 		channel_set[i].non_ocp_end_time = rtw_get_current_time();
504 	#endif
505 #endif /* CONFIG_IEEE80211_BAND_5GHZ */
506 
507 	if (chanset_size)
508 		RTW_INFO(FUNC_ADPT_FMT" ChannelPlan ID:0x%02x, ch num:%d\n"
509 			, FUNC_ADPT_ARG(padapter), ChannelPlan, chanset_size);
510 	else
511 		RTW_WARN(FUNC_ADPT_FMT" ChannelPlan ID:0x%02x, final chset has no channel\n"
512 			, FUNC_ADPT_ARG(padapter), ChannelPlan);
513 
514 	return chanset_size;
515 }
516 
init_channel_set(_adapter * adapter)517 u8 init_channel_set(_adapter *adapter)
518 {
519 	struct rf_ctl_t *rfctl = adapter_to_rfctl(adapter);
520 
521 	if (rfctl->regd_src == REGD_SRC_RTK_PRIV)
522 		return init_channel_set_from_rtk_priv(adapter, rfctl->channel_set);
523 #ifdef CONFIG_REGD_SRC_FROM_OS
524 	else if (rfctl->regd_src == REGD_SRC_OS)
525 		return rtw_os_init_channel_set(adapter, rfctl->channel_set);
526 #endif
527 	else
528 		rtw_warn_on(1);
529 
530 	return 0;
531 }
532 
rtw_chset_is_dfs_range(struct _RT_CHANNEL_INFO * chset,u32 hi,u32 lo)533 bool rtw_chset_is_dfs_range(struct _RT_CHANNEL_INFO *chset, u32 hi, u32 lo)
534 {
535 	u8 hi_ch = rtw_freq2ch(hi);
536 	u8 lo_ch = rtw_freq2ch(lo);
537 	int i;
538 
539 	for (i = 0; i < MAX_CHANNEL_NUM && chset[i].ChannelNum != 0; i++){
540 		if (!(chset[i].flags & RTW_CHF_DFS))
541 			continue;
542 		if (hi_ch > chset[i].ChannelNum && lo_ch < chset[i].ChannelNum)
543 			return 1;
544 	}
545 
546 	return 0;
547 }
548 
rtw_chset_is_dfs_ch(struct _RT_CHANNEL_INFO * chset,u8 ch)549 bool rtw_chset_is_dfs_ch(struct _RT_CHANNEL_INFO *chset, u8 ch)
550 {
551 	int i;
552 
553 	for (i = 0; i < MAX_CHANNEL_NUM && chset[i].ChannelNum != 0; i++){
554 		if (chset[i].ChannelNum == ch)
555 			return chset[i].flags & RTW_CHF_DFS ? 1 : 0;
556 	}
557 
558 	return 0;
559 }
560 
rtw_chset_is_dfs_chbw(struct _RT_CHANNEL_INFO * chset,u8 ch,u8 bw,u8 offset)561 bool rtw_chset_is_dfs_chbw(struct _RT_CHANNEL_INFO *chset, u8 ch, u8 bw, u8 offset)
562 {
563 	u32 hi, lo;
564 
565 	if (!rtw_chbw_to_freq_range(ch, bw, offset, &hi, &lo))
566 		return 0;
567 
568 	return rtw_chset_is_dfs_range(chset, hi, lo);
569 }
570 
rtw_process_beacon_hint(_adapter * adapter,WLAN_BSSID_EX * bss)571 u8 rtw_process_beacon_hint(_adapter *adapter, WLAN_BSSID_EX *bss)
572 {
573 #ifndef RTW_CHPLAN_BEACON_HINT_NON_WORLD_WIDE
574 #define RTW_CHPLAN_BEACON_HINT_NON_WORLD_WIDE 0
575 #endif
576 
577 #ifndef RTW_CHPLAN_BEACON_HINT_ON_2G_CH_1_11
578 #define RTW_CHPLAN_BEACON_HINT_ON_2G_CH_1_11 0
579 #endif
580 
581 #ifndef RTW_CHPLAN_BEACON_HINT_ON_DFS_CH
582 #define RTW_CHPLAN_BEACON_HINT_ON_DFS_CH 0
583 #endif
584 
585 	struct rf_ctl_t *rfctl = adapter_to_rfctl(adapter);
586 	RT_CHANNEL_INFO *chset = rfctl->channel_set;
587 	u8 ch = bss->Configuration.DSConfig;
588 	int chset_idx = rtw_chset_search_ch(chset, ch);
589 	u8 act_cnt = 0;
590 
591 	if (chset_idx < 0)
592 		goto exit;
593 
594 	if ((chset[chset_idx].flags & RTW_CHF_NO_IR)
595 		&& (RTW_CHPLAN_BEACON_HINT_NON_WORLD_WIDE || !rfctl->country_ent || IS_ALPHA2_WORLDWIDE(rfctl->country_ent->alpha2))
596 		&& (RTW_CHPLAN_BEACON_HINT_ON_2G_CH_1_11 || !(ch <= 11))
597 		&& (RTW_CHPLAN_BEACON_HINT_ON_DFS_CH || !(chset[chset_idx].flags & RTW_CHF_DFS))
598 	) {
599 		RTW_INFO("%s: change ch:%d to active\n", __func__, ch);
600 		chset[chset_idx].flags &= ~RTW_CHF_NO_IR;
601 		act_cnt++;
602 	}
603 
604 exit:
605 	return act_cnt;
606 }
607 
608 const char *const _regd_str[] = {
609 	[RTW_REGD_NA]		= "NA",
610 	[RTW_REGD_FCC]		= "FCC",
611 	[RTW_REGD_MKK]		= "MKK",
612 	[RTW_REGD_ETSI]		= "ETSI",
613 	[RTW_REGD_IC]		= "IC",
614 	[RTW_REGD_KCC]		= "KCC",
615 	[RTW_REGD_NCC]		= "NCC",
616 	[RTW_REGD_ACMA]		= "ACMA",
617 	[RTW_REGD_CHILE]	= "CHILE",
618 	[RTW_REGD_MEX]		= "MEX",
619 	[RTW_REGD_WW]		= "WW",
620 };
621 
622 const char *const _rtw_edcca_mode_str[] = {
623 	[RTW_EDCCA_NORMAL]	= "NORMAL",
624 	[RTW_EDCCA_ADAPT]	= "ADAPT",
625 	[RTW_EDCCA_CS]		= "CS",
626 };
627 
628 const char *_rtw_dfs_regd_str[] = {
629 	[RTW_DFS_REGD_NONE]	= "NONE",
630 	[RTW_DFS_REGD_FCC]	= "FCC",
631 	[RTW_DFS_REGD_MKK]	= "MKK",
632 	[RTW_DFS_REGD_ETSI]	= "ETSI",
633 };
634 
635 const char *const _txpwr_lmt_str[] = {
636 	[TXPWR_LMT_NONE]	= "NONE",
637 	[TXPWR_LMT_FCC]		= "FCC",
638 	[TXPWR_LMT_MKK]		= "MKK",
639 	[TXPWR_LMT_ETSI]	= "ETSI",
640 	[TXPWR_LMT_IC]		= "IC",
641 	[TXPWR_LMT_KCC]		= "KCC",
642 	[TXPWR_LMT_NCC]		= "NCC",
643 	[TXPWR_LMT_ACMA]	= "ACMA",
644 	[TXPWR_LMT_CHILE]	= "CHILE",
645 	[TXPWR_LMT_UKRAINE]	= "UKRAINE",
646 	[TXPWR_LMT_MEXICO]	= "MEXICO",
647 	[TXPWR_LMT_CN]		= "CN",
648 	[TXPWR_LMT_QATAR]	= "QATAR",
649 	[TXPWR_LMT_WW]		= "WW",
650 };
651 
652 const REGULATION_TXPWR_LMT _txpwr_lmt_alternate[] = {
653 	[TXPWR_LMT_NONE]	= TXPWR_LMT_NONE,
654 	[TXPWR_LMT_FCC]		= TXPWR_LMT_FCC,
655 	[TXPWR_LMT_MKK]		= TXPWR_LMT_MKK,
656 	[TXPWR_LMT_ETSI]	= TXPWR_LMT_ETSI,
657 	[TXPWR_LMT_WW]		= TXPWR_LMT_WW,
658 
659 	[TXPWR_LMT_IC]		= TXPWR_LMT_FCC,
660 	[TXPWR_LMT_KCC]		= TXPWR_LMT_ETSI,
661 	[TXPWR_LMT_NCC]		= TXPWR_LMT_FCC,
662 	[TXPWR_LMT_ACMA]	= TXPWR_LMT_ETSI,
663 	[TXPWR_LMT_CHILE]	= TXPWR_LMT_FCC,
664 	[TXPWR_LMT_UKRAINE]	= TXPWR_LMT_ETSI,
665 	[TXPWR_LMT_MEXICO]	= TXPWR_LMT_FCC,
666 	[TXPWR_LMT_CN]		= TXPWR_LMT_ETSI,
667 	[TXPWR_LMT_QATAR]	= TXPWR_LMT_ETSI,
668 };
669 
670 const enum rtw_edcca_mode _rtw_regd_to_edcca_mode[RTW_REGD_NUM] = {
671 	[RTW_REGD_NA] = RTW_EDCCA_MODE_NUM,
672 	[RTW_REGD_MKK] = RTW_EDCCA_CS,
673 	[RTW_REGD_ETSI] = RTW_EDCCA_ADAPT,
674 	[RTW_REGD_WW] = RTW_EDCCA_ADAPT,
675 };
676 
677 const REGULATION_TXPWR_LMT _rtw_regd_to_txpwr_lmt[] = {
678 	[RTW_REGD_NA]		= TXPWR_LMT_NONE,
679 	[RTW_REGD_FCC]		= TXPWR_LMT_FCC,
680 	[RTW_REGD_MKK]		= TXPWR_LMT_MKK,
681 	[RTW_REGD_ETSI]		= TXPWR_LMT_ETSI,
682 	[RTW_REGD_IC]		= TXPWR_LMT_IC,
683 	[RTW_REGD_KCC]		= TXPWR_LMT_KCC,
684 	[RTW_REGD_NCC]		= TXPWR_LMT_NCC,
685 	[RTW_REGD_ACMA]		= TXPWR_LMT_ACMA,
686 	[RTW_REGD_CHILE]	= TXPWR_LMT_CHILE,
687 	[RTW_REGD_MEX]		= TXPWR_LMT_MEXICO,
688 	[RTW_REGD_WW]		= TXPWR_LMT_WW,
689 };
690 
rtw_get_edcca_modes_str(char * buf,u8 modes[])691 char *rtw_get_edcca_modes_str(char *buf, u8 modes[])
692 {
693 #define EDCCA_MODE_SEQ_COMPARE(result, operand) (result == RTW_EDCCA_MODE_NUM ? operand : (operand == RTW_EDCCA_MODE_NUM ? result : (result != operand ? -1 : result)))
694 
695 	int mode = RTW_EDCCA_MODE_NUM;
696 	int cnt = 0;
697 
698 	mode = EDCCA_MODE_SEQ_COMPARE(mode, modes[BAND_ON_2_4G]);
699 #if CONFIG_IEEE80211_BAND_5GHZ
700 	mode = EDCCA_MODE_SEQ_COMPARE(mode, modes[BAND_ON_5G]);
701 #endif
702 
703 	if (mode != -1) { /* all available values are the same */
704 		cnt += snprintf(buf + cnt, EDCCA_MODES_STR_LEN - cnt - 1, "%s(%u) ", rtw_edcca_mode_str(mode), mode);
705 		if (cnt >= EDCCA_MODES_STR_LEN - 1)
706 			goto exit;
707 	} else {
708 		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]);
709 		if (cnt >= EDCCA_MODES_STR_LEN - 1)
710 			goto exit;
711 		#if CONFIG_IEEE80211_BAND_5GHZ
712 		cnt += snprintf(buf + cnt, EDCCA_MODES_STR_LEN - cnt - 1, "%s(%u) ", rtw_edcca_mode_str(modes[BAND_ON_5G]), modes[BAND_ON_5G]);
713 		if (cnt >= EDCCA_MODES_STR_LEN - 1)
714 			goto exit;
715 		#endif
716 	}
717 
718 exit:
719 	return buf;
720 }
721 
rtw_edcca_mode_update(struct dvobj_priv * dvobj)722 void rtw_edcca_mode_update(struct dvobj_priv *dvobj)
723 {
724 	struct registry_priv *regsty = dvobj_to_regsty(dvobj);
725 	struct rf_ctl_t *rfctl = dvobj_to_rfctl(dvobj);
726 
727 	if (regsty->adaptivity_en == 0) {
728 		/* force disable */
729 		rfctl->edcca_mode_2g = RTW_EDCCA_NORMAL;
730 		#if CONFIG_IEEE80211_BAND_5GHZ
731 		rfctl->edcca_mode_5g = RTW_EDCCA_NORMAL;
732 		#endif
733 
734 	} else if (regsty->adaptivity_en == 1) {
735 		/* force enable */
736 		if (!regsty->adaptivity_mode) {
737 			/* adaptivity */
738 			rfctl->edcca_mode_2g = RTW_EDCCA_ADAPT;
739 			#if CONFIG_IEEE80211_BAND_5GHZ
740 			rfctl->edcca_mode_5g = RTW_EDCCA_ADAPT;
741 			#endif
742 		} else {
743 			/* carrier sense */
744 			rfctl->edcca_mode_2g = RTW_EDCCA_CS;
745 			#if CONFIG_IEEE80211_BAND_5GHZ
746 			rfctl->edcca_mode_5g = RTW_EDCCA_CS;
747 			#endif
748 		}
749 
750 	} else {
751 		u8 modes[BAND_MAX];
752 		char buf[EDCCA_MODES_STR_LEN];
753 
754 		/* by regulatory setting */
755 		#ifdef CONFIG_REGD_SRC_FROM_OS
756 		if (rfctl->regd_src == REGD_SRC_OS
757 			&& rfctl->ChannelPlan == RTW_CHPLAN_UNSPECIFIED
758 		) {
759 			modes[BAND_ON_2_4G] = rfctl->edcca_mode_2g = RTW_EDCCA_ADAPT;
760 			#if CONFIG_IEEE80211_BAND_5GHZ
761 			modes[BAND_ON_5G] = rfctl->edcca_mode_5g = RTW_EDCCA_ADAPT;
762 			#endif
763 			RTW_PRINT("mapping %scountry:%c%c to edcca_mode:%s\n"
764 				, IS_ALPHA2_WORLDWIDE(rfctl->country_ent->alpha2) ? "" : "unsupported "
765 				, rfctl->country_ent->alpha2[0]
766 				, rfctl->country_ent->alpha2[1]
767 				, rtw_get_edcca_modes_str(buf, modes)
768 			);
769 		} else
770 		#endif
771 		{
772 			modes[BAND_ON_2_4G] = rfctl->edcca_mode_2g = rtw_regd_to_edcca_mode(rtw_chplan_get_default_regd_2g(rfctl->ChannelPlan));
773 			#if CONFIG_IEEE80211_BAND_5GHZ
774 			modes[BAND_ON_5G] = rfctl->edcca_mode_5g = rtw_regd_to_edcca_mode(rtw_chplan_get_default_regd_5g(rfctl->ChannelPlan));
775 			#endif
776 			RTW_PRINT("default mapping domain:0x%02x to edcca_mode:%s\n"
777 				, rfctl->ChannelPlan
778 				, rtw_get_edcca_modes_str(buf, modes)
779 			);
780 		}
781 	}
782 }
783 
rtw_get_edcca_mode(struct dvobj_priv * dvobj,BAND_TYPE band)784 u8 rtw_get_edcca_mode(struct dvobj_priv *dvobj, BAND_TYPE band)
785 {
786 	struct rf_ctl_t *rfctl = dvobj_to_rfctl(dvobj);
787 	u8 edcca_mode = RTW_EDCCA_NORMAL;
788 
789 	if (band == BAND_ON_2_4G)
790 		edcca_mode = rfctl->edcca_mode_2g;
791 	#if CONFIG_IEEE80211_BAND_5GHZ
792 	else if (band == BAND_ON_5G)
793 		edcca_mode = rfctl->edcca_mode_5g;
794 	#endif
795 
796 	return edcca_mode;
797 }
798 
799 #if defined(CONFIG_80211AC_VHT) || defined(CONFIG_80211AX_HE)
800 #define COUNTRY_CHPLAN_ASSIGN_PROTO_EN(_val) , .proto_en = (_val)
801 #else
802 #define COUNTRY_CHPLAN_ASSIGN_PROTO_EN(_val)
803 #endif
804 
805 #define COUNTRY_CHPLAN_ENT(_alpha2, _chplan, _txpwr_lmt_override, _en_11ax, _en_11ac) \
806 	{.alpha2 = (_alpha2), .chplan = (_chplan), .txpwr_lmt_override = TXPWR_LMT_##_txpwr_lmt_override \
807 		COUNTRY_CHPLAN_ASSIGN_PROTO_EN((_en_11ax ? CCHPLAN_PROTO_EN_AX : 0) | (_en_11ac ? CCHPLAN_PROTO_EN_AC : 0)) \
808 	}
809 
810 #ifdef CONFIG_CUSTOMIZED_COUNTRY_CHPLAN_MAP
811 
812 #include "../platform/custom_country_chplan.h"
813 
814 #elif RTW_DEF_MODULE_REGULATORY_CERT
815 
816 #if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8821AE_HMC_M2) /* 2013 certify */
817 static const struct country_chplan RTL8821AE_HMC_M2_country_chplan_map[] = {
818 	COUNTRY_CHPLAN_ENT("AE", 0x35, DEF    , 0, 1),
819 	COUNTRY_CHPLAN_ENT("AL", 0x26, DEF    , 0, 1),
820 	COUNTRY_CHPLAN_ENT("AN", 0x76, DEF    , 0, 1),
821 	COUNTRY_CHPLAN_ENT("AR", 0x61, DEF    , 0, 1),
822 	COUNTRY_CHPLAN_ENT("AT", 0x26, DEF    , 0, 1),
823 	COUNTRY_CHPLAN_ENT("AU", 0x45, DEF    , 0, 1),
824 	COUNTRY_CHPLAN_ENT("AZ", 0x26, DEF    , 0, 1),
825 	COUNTRY_CHPLAN_ENT("BA", 0x26, DEF    , 0, 1),
826 	COUNTRY_CHPLAN_ENT("BD", 0x26, DEF    , 0, 1),
827 	COUNTRY_CHPLAN_ENT("BE", 0x26, DEF    , 0, 1),
828 	COUNTRY_CHPLAN_ENT("BG", 0x26, DEF    , 0, 1),
829 	COUNTRY_CHPLAN_ENT("BH", 0x48, DEF    , 0, 1),
830 	COUNTRY_CHPLAN_ENT("BO", 0x73, DEF    , 0, 1),
831 	COUNTRY_CHPLAN_ENT("BR", 0x62, DEF    , 0, 1),
832 	COUNTRY_CHPLAN_ENT("BW", 0x35, DEF    , 0, 1),
833 	COUNTRY_CHPLAN_ENT("BY", 0x26, DEF    , 0, 1),
834 	COUNTRY_CHPLAN_ENT("CA", 0x34, DEF    , 0, 1),
835 	COUNTRY_CHPLAN_ENT("CH", 0x26, DEF    , 0, 1),
836 	COUNTRY_CHPLAN_ENT("CI", 0x42, DEF    , 0, 1),
837 	COUNTRY_CHPLAN_ENT("CL", 0x30, DEF    , 0, 1),
838 	COUNTRY_CHPLAN_ENT("CN", 0x51, DEF    , 0, 1),
839 	COUNTRY_CHPLAN_ENT("CO", 0x34, DEF    , 0, 1),
840 	COUNTRY_CHPLAN_ENT("CR", 0x34, DEF    , 0, 1),
841 	COUNTRY_CHPLAN_ENT("CY", 0x26, DEF    , 0, 1),
842 	COUNTRY_CHPLAN_ENT("CZ", 0x26, DEF    , 0, 1),
843 	COUNTRY_CHPLAN_ENT("DE", 0x26, DEF    , 0, 1),
844 	COUNTRY_CHPLAN_ENT("DK", 0x26, DEF    , 0, 1),
845 	COUNTRY_CHPLAN_ENT("DO", 0x34, DEF    , 0, 1),
846 	COUNTRY_CHPLAN_ENT("DZ", 0x00, DEF    , 0, 1),
847 	COUNTRY_CHPLAN_ENT("EC", 0x34, DEF    , 0, 1),
848 	COUNTRY_CHPLAN_ENT("EE", 0x26, DEF    , 0, 1),
849 	COUNTRY_CHPLAN_ENT("EG", 0x47, DEF    , 0, 1),
850 	COUNTRY_CHPLAN_ENT("ES", 0x26, DEF    , 0, 1),
851 	COUNTRY_CHPLAN_ENT("FI", 0x26, DEF    , 0, 1),
852 	COUNTRY_CHPLAN_ENT("FR", 0x26, DEF    , 0, 1),
853 	COUNTRY_CHPLAN_ENT("GB", 0x26, DEF    , 0, 1),
854 	COUNTRY_CHPLAN_ENT("GH", 0x26, DEF    , 0, 1),
855 	COUNTRY_CHPLAN_ENT("GR", 0x26, DEF    , 0, 1),
856 	COUNTRY_CHPLAN_ENT("GT", 0x34, DEF    , 0, 1),
857 	COUNTRY_CHPLAN_ENT("HK", 0x35, DEF    , 0, 1),
858 	COUNTRY_CHPLAN_ENT("HN", 0x32, DEF    , 0, 1),
859 	COUNTRY_CHPLAN_ENT("HR", 0x26, DEF    , 0, 1),
860 	COUNTRY_CHPLAN_ENT("HU", 0x26, DEF    , 0, 1),
861 	COUNTRY_CHPLAN_ENT("ID", 0x3D, DEF    , 0, 0),
862 	COUNTRY_CHPLAN_ENT("IE", 0x26, DEF    , 0, 1),
863 	COUNTRY_CHPLAN_ENT("IL", 0x47, DEF    , 0, 1),
864 	COUNTRY_CHPLAN_ENT("IN", 0x48, DEF    , 0, 1),
865 	COUNTRY_CHPLAN_ENT("IS", 0x26, DEF    , 0, 1),
866 	COUNTRY_CHPLAN_ENT("IT", 0x26, DEF    , 0, 1),
867 	COUNTRY_CHPLAN_ENT("JM", 0x32, DEF    , 0, 1),
868 	COUNTRY_CHPLAN_ENT("JO", 0x49, DEF    , 0, 1),
869 	COUNTRY_CHPLAN_ENT("JP", 0x27, DEF    , 0, 1),
870 	COUNTRY_CHPLAN_ENT("KE", 0x47, DEF    , 0, 1),
871 	COUNTRY_CHPLAN_ENT("KG", 0x26, DEF    , 0, 1),
872 	COUNTRY_CHPLAN_ENT("KH", 0x26, DEF    , 0, 1),
873 	COUNTRY_CHPLAN_ENT("KR", 0x28, DEF    , 0, 1),
874 	COUNTRY_CHPLAN_ENT("KW", 0x26, DEF    , 0, 1),
875 	COUNTRY_CHPLAN_ENT("LB", 0x26, DEF    , 0, 1),
876 	COUNTRY_CHPLAN_ENT("LI", 0x26, DEF    , 0, 1),
877 	COUNTRY_CHPLAN_ENT("LK", 0x26, DEF    , 0, 1),
878 	COUNTRY_CHPLAN_ENT("LS", 0x26, DEF    , 0, 1),
879 	COUNTRY_CHPLAN_ENT("LT", 0x26, DEF    , 0, 1),
880 	COUNTRY_CHPLAN_ENT("LU", 0x26, DEF    , 0, 1),
881 	COUNTRY_CHPLAN_ENT("LV", 0x26, DEF    , 0, 1),
882 	COUNTRY_CHPLAN_ENT("MA", 0x47, DEF    , 0, 1),
883 	COUNTRY_CHPLAN_ENT("MC", 0x26, DEF    , 0, 1),
884 	COUNTRY_CHPLAN_ENT("MD", 0x26, DEF    , 0, 1),
885 	COUNTRY_CHPLAN_ENT("ME", 0x26, DEF    , 0, 1),
886 	COUNTRY_CHPLAN_ENT("MK", 0x26, DEF    , 0, 1),
887 	COUNTRY_CHPLAN_ENT("MT", 0x26, DEF    , 0, 1),
888 	COUNTRY_CHPLAN_ENT("MX", 0x34, DEF    , 0, 1),
889 	COUNTRY_CHPLAN_ENT("MY", 0x47, DEF    , 0, 1),
890 	COUNTRY_CHPLAN_ENT("MZ", 0x26, DEF    , 0, 1),
891 	COUNTRY_CHPLAN_ENT("NG", 0x75, DEF    , 0, 1),
892 	COUNTRY_CHPLAN_ENT("NI", 0x34, DEF    , 0, 1),
893 	COUNTRY_CHPLAN_ENT("NL", 0x26, DEF    , 0, 1),
894 	COUNTRY_CHPLAN_ENT("NO", 0x26, DEF    , 0, 1),
895 	COUNTRY_CHPLAN_ENT("NZ", 0x45, DEF    , 0, 1),
896 	COUNTRY_CHPLAN_ENT("OM", 0x26, DEF    , 0, 1),
897 	COUNTRY_CHPLAN_ENT("PA", 0x34, DEF    , 0, 1),
898 	COUNTRY_CHPLAN_ENT("PE", 0x34, DEF    , 0, 1),
899 	COUNTRY_CHPLAN_ENT("PG", 0x35, DEF    , 0, 1),
900 	COUNTRY_CHPLAN_ENT("PH", 0x35, DEF    , 0, 1),
901 	COUNTRY_CHPLAN_ENT("PK", 0x51, DEF    , 0, 1),
902 	COUNTRY_CHPLAN_ENT("PL", 0x26, DEF    , 0, 1),
903 	COUNTRY_CHPLAN_ENT("PR", 0x34, DEF    , 0, 1),
904 	COUNTRY_CHPLAN_ENT("PT", 0x26, DEF    , 0, 1),
905 	COUNTRY_CHPLAN_ENT("PY", 0x34, DEF    , 0, 1),
906 	COUNTRY_CHPLAN_ENT("QA", 0x35, DEF    , 0, 1),
907 	COUNTRY_CHPLAN_ENT("RO", 0x26, DEF    , 0, 1),
908 	COUNTRY_CHPLAN_ENT("RS", 0x26, DEF    , 0, 1),
909 	COUNTRY_CHPLAN_ENT("RU", 0x59, DEF    , 0, 1),
910 	COUNTRY_CHPLAN_ENT("SA", 0x35, DEF    , 0, 1),
911 	COUNTRY_CHPLAN_ENT("SE", 0x26, DEF    , 0, 1),
912 	COUNTRY_CHPLAN_ENT("SG", 0x35, DEF    , 0, 1),
913 	COUNTRY_CHPLAN_ENT("SI", 0x26, DEF    , 0, 1),
914 	COUNTRY_CHPLAN_ENT("SK", 0x26, DEF    , 0, 1),
915 	COUNTRY_CHPLAN_ENT("SN", 0x26, DEF    , 0, 1),
916 	COUNTRY_CHPLAN_ENT("SV", 0x30, DEF    , 0, 1),
917 	COUNTRY_CHPLAN_ENT("TH", 0x35, DEF    , 0, 1),
918 	COUNTRY_CHPLAN_ENT("TN", 0x47, DEF    , 0, 1),
919 	COUNTRY_CHPLAN_ENT("TR", 0x26, DEF    , 0, 1),
920 	COUNTRY_CHPLAN_ENT("TT", 0x76, DEF    , 0, 1),
921 	COUNTRY_CHPLAN_ENT("TW", 0x39, DEF    , 0, 1),
922 	COUNTRY_CHPLAN_ENT("UA", 0x36, DEF    , 0, 0),
923 	COUNTRY_CHPLAN_ENT("UG", 0x26, DEF    , 0, 1),
924 	COUNTRY_CHPLAN_ENT("US", 0x34, DEF    , 0, 1),
925 	COUNTRY_CHPLAN_ENT("UY", 0x30, DEF    , 0, 1),
926 	COUNTRY_CHPLAN_ENT("VE", 0x30, DEF    , 0, 1),
927 	COUNTRY_CHPLAN_ENT("VN", 0x35, DEF    , 0, 1),
928 	COUNTRY_CHPLAN_ENT("ZA", 0x35, DEF    , 0, 1),
929 	COUNTRY_CHPLAN_ENT("ZW", 0x26, DEF    , 0, 1),
930 };
931 #endif
932 
933 #if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8821AU) /* 2014 certify */
934 static const struct country_chplan RTL8821AU_country_chplan_map[] = {
935 	COUNTRY_CHPLAN_ENT("AE", 0x35, DEF    , 0, 1),
936 	COUNTRY_CHPLAN_ENT("AR", 0x61, DEF    , 0, 1),
937 	COUNTRY_CHPLAN_ENT("AT", 0x26, DEF    , 0, 1),
938 	COUNTRY_CHPLAN_ENT("AU", 0x45, DEF    , 0, 1),
939 	COUNTRY_CHPLAN_ENT("BE", 0x26, DEF    , 0, 1),
940 	COUNTRY_CHPLAN_ENT("CA", 0x34, DEF    , 0, 1),
941 	COUNTRY_CHPLAN_ENT("CH", 0x26, DEF    , 0, 1),
942 	COUNTRY_CHPLAN_ENT("CN", 0x48, DEF    , 0, 1),
943 	COUNTRY_CHPLAN_ENT("CY", 0x26, DEF    , 0, 1),
944 	COUNTRY_CHPLAN_ENT("CZ", 0x26, DEF    , 0, 1),
945 	COUNTRY_CHPLAN_ENT("DE", 0x26, DEF    , 0, 1),
946 	COUNTRY_CHPLAN_ENT("DK", 0x26, DEF    , 0, 1),
947 	COUNTRY_CHPLAN_ENT("EE", 0x26, DEF    , 0, 1),
948 	COUNTRY_CHPLAN_ENT("ES", 0x26, DEF    , 0, 1),
949 	COUNTRY_CHPLAN_ENT("FI", 0x26, DEF    , 0, 1),
950 	COUNTRY_CHPLAN_ENT("FR", 0x26, DEF    , 0, 1),
951 	COUNTRY_CHPLAN_ENT("GB", 0x26, DEF    , 0, 1),
952 	COUNTRY_CHPLAN_ENT("GR", 0x26, DEF    , 0, 1),
953 	COUNTRY_CHPLAN_ENT("HK", 0x35, DEF    , 0, 1),
954 	COUNTRY_CHPLAN_ENT("HU", 0x26, DEF    , 0, 1),
955 	COUNTRY_CHPLAN_ENT("ID", 0x3D, DEF    , 0, 0),
956 	COUNTRY_CHPLAN_ENT("IE", 0x26, DEF    , 0, 1),
957 	COUNTRY_CHPLAN_ENT("IS", 0x26, DEF    , 0, 1),
958 	COUNTRY_CHPLAN_ENT("IT", 0x26, DEF    , 0, 1),
959 	COUNTRY_CHPLAN_ENT("JO", 0x49, DEF    , 0, 1),
960 	COUNTRY_CHPLAN_ENT("JP", 0x27, DEF    , 0, 1),
961 	COUNTRY_CHPLAN_ENT("KR", 0x28, DEF    , 0, 1),
962 	COUNTRY_CHPLAN_ENT("KW", 0x26, DEF    , 0, 1),
963 	COUNTRY_CHPLAN_ENT("LI", 0x26, DEF    , 0, 1),
964 	COUNTRY_CHPLAN_ENT("LT", 0x26, DEF    , 0, 1),
965 	COUNTRY_CHPLAN_ENT("LU", 0x26, DEF    , 0, 1),
966 	COUNTRY_CHPLAN_ENT("LV", 0x26, DEF    , 0, 1),
967 	COUNTRY_CHPLAN_ENT("MC", 0x26, DEF    , 0, 1),
968 	COUNTRY_CHPLAN_ENT("MT", 0x26, DEF    , 0, 1),
969 	COUNTRY_CHPLAN_ENT("NL", 0x26, DEF    , 0, 1),
970 	COUNTRY_CHPLAN_ENT("NO", 0x26, DEF    , 0, 1),
971 	COUNTRY_CHPLAN_ENT("NZ", 0x45, DEF    , 0, 1),
972 	COUNTRY_CHPLAN_ENT("PL", 0x26, DEF    , 0, 1),
973 	COUNTRY_CHPLAN_ENT("PT", 0x26, DEF    , 0, 1),
974 	COUNTRY_CHPLAN_ENT("RU", 0x59, DEF    , 0, 0),
975 	COUNTRY_CHPLAN_ENT("SA", 0x35, DEF    , 0, 1),
976 	COUNTRY_CHPLAN_ENT("SE", 0x26, DEF    , 0, 1),
977 	COUNTRY_CHPLAN_ENT("SG", 0x35, DEF    , 0, 1),
978 	COUNTRY_CHPLAN_ENT("SI", 0x26, DEF    , 0, 1),
979 	COUNTRY_CHPLAN_ENT("SK", 0x26, DEF    , 0, 1),
980 	COUNTRY_CHPLAN_ENT("TW", 0x39, DEF    , 0, 1),
981 	COUNTRY_CHPLAN_ENT("UA", 0x36, DEF    , 0, 0),
982 	COUNTRY_CHPLAN_ENT("US", 0x34, DEF    , 0, 1),
983 };
984 #endif
985 
986 #if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8812AENF_NGFF) /* 2014 certify */
987 static const struct country_chplan RTL8812AENF_NGFF_country_chplan_map[] = {
988 	COUNTRY_CHPLAN_ENT("JP", 0x27, DEF    , 0, 1),
989 	COUNTRY_CHPLAN_ENT("TW", 0x39, DEF    , 0, 1),
990 	COUNTRY_CHPLAN_ENT("US", 0x34, DEF    , 0, 1),
991 };
992 #endif
993 
994 #if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8812AEBT_HMC) /* 2013 certify */
995 static const struct country_chplan RTL8812AEBT_HMC_country_chplan_map[] = {
996 	COUNTRY_CHPLAN_ENT("AE", 0x35, DEF    , 0, 1),
997 	COUNTRY_CHPLAN_ENT("AT", 0x26, DEF    , 0, 1),
998 	COUNTRY_CHPLAN_ENT("AU", 0x45, DEF    , 0, 1),
999 	COUNTRY_CHPLAN_ENT("BE", 0x26, DEF    , 0, 1),
1000 	COUNTRY_CHPLAN_ENT("CA", 0x34, DEF    , 0, 1),
1001 	COUNTRY_CHPLAN_ENT("CH", 0x26, DEF    , 0, 1),
1002 	COUNTRY_CHPLAN_ENT("CN", 0x48, DEF    , 0, 1),
1003 	COUNTRY_CHPLAN_ENT("CY", 0x26, DEF    , 0, 1),
1004 	COUNTRY_CHPLAN_ENT("CZ", 0x26, DEF    , 0, 1),
1005 	COUNTRY_CHPLAN_ENT("DE", 0x26, DEF    , 0, 1),
1006 	COUNTRY_CHPLAN_ENT("DK", 0x26, DEF    , 0, 1),
1007 	COUNTRY_CHPLAN_ENT("EE", 0x26, DEF    , 0, 1),
1008 	COUNTRY_CHPLAN_ENT("ES", 0x26, DEF    , 0, 1),
1009 	COUNTRY_CHPLAN_ENT("FI", 0x26, DEF    , 0, 1),
1010 	COUNTRY_CHPLAN_ENT("FR", 0x26, DEF    , 0, 1),
1011 	COUNTRY_CHPLAN_ENT("GB", 0x26, DEF    , 0, 1),
1012 	COUNTRY_CHPLAN_ENT("GR", 0x26, DEF    , 0, 1),
1013 	COUNTRY_CHPLAN_ENT("HK", 0x35, DEF    , 0, 1),
1014 	COUNTRY_CHPLAN_ENT("HR", 0x26, DEF    , 0, 1),
1015 	COUNTRY_CHPLAN_ENT("HU", 0x26, DEF    , 0, 1),
1016 	COUNTRY_CHPLAN_ENT("IE", 0x26, DEF    , 0, 1),
1017 	COUNTRY_CHPLAN_ENT("IS", 0x26, DEF    , 0, 1),
1018 	COUNTRY_CHPLAN_ENT("IT", 0x26, DEF    , 0, 1),
1019 	COUNTRY_CHPLAN_ENT("JO", 0x49, DEF    , 0, 1),
1020 	COUNTRY_CHPLAN_ENT("JP", 0x27, DEF    , 0, 1),
1021 	COUNTRY_CHPLAN_ENT("KE", 0x47, DEF    , 0, 1),
1022 	COUNTRY_CHPLAN_ENT("KR", 0x28, DEF    , 0, 1),
1023 	COUNTRY_CHPLAN_ENT("KW", 0x26, DEF    , 0, 1),
1024 	COUNTRY_CHPLAN_ENT("LI", 0x26, DEF    , 0, 1),
1025 	COUNTRY_CHPLAN_ENT("LT", 0x26, DEF    , 0, 1),
1026 	COUNTRY_CHPLAN_ENT("LU", 0x26, DEF    , 0, 1),
1027 	COUNTRY_CHPLAN_ENT("LV", 0x26, DEF    , 0, 1),
1028 	COUNTRY_CHPLAN_ENT("MC", 0x26, DEF    , 0, 1),
1029 	COUNTRY_CHPLAN_ENT("MT", 0x26, DEF    , 0, 1),
1030 	COUNTRY_CHPLAN_ENT("NG", 0x75, DEF    , 0, 1),
1031 	COUNTRY_CHPLAN_ENT("NL", 0x26, DEF    , 0, 1),
1032 	COUNTRY_CHPLAN_ENT("NO", 0x26, DEF    , 0, 1),
1033 	COUNTRY_CHPLAN_ENT("NZ", 0x45, DEF    , 0, 1),
1034 	COUNTRY_CHPLAN_ENT("OM", 0x26, DEF    , 0, 1),
1035 	COUNTRY_CHPLAN_ENT("PL", 0x26, DEF    , 0, 1),
1036 	COUNTRY_CHPLAN_ENT("PT", 0x26, DEF    , 0, 1),
1037 	COUNTRY_CHPLAN_ENT("QA", 0x35, DEF    , 0, 1),
1038 	COUNTRY_CHPLAN_ENT("RU", 0x59, DEF    , 0, 0),
1039 	COUNTRY_CHPLAN_ENT("SA", 0x35, DEF    , 0, 1),
1040 	COUNTRY_CHPLAN_ENT("SE", 0x26, DEF    , 0, 1),
1041 	COUNTRY_CHPLAN_ENT("SG", 0x35, DEF    , 0, 1),
1042 	COUNTRY_CHPLAN_ENT("SI", 0x26, DEF    , 0, 1),
1043 	COUNTRY_CHPLAN_ENT("SK", 0x26, DEF    , 0, 1),
1044 	COUNTRY_CHPLAN_ENT("TW", 0x39, DEF    , 0, 1),
1045 	COUNTRY_CHPLAN_ENT("UA", 0x36, DEF    , 0, 0),
1046 	COUNTRY_CHPLAN_ENT("US", 0x34, DEF    , 0, 1),
1047 };
1048 #endif
1049 
1050 #if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8188EE_HMC_M2) /* 2012 certify */
1051 static const struct country_chplan RTL8188EE_HMC_M2_country_chplan_map[] = {
1052 	COUNTRY_CHPLAN_ENT("AE", 0x35, DEF    , 0, 1),
1053 	COUNTRY_CHPLAN_ENT("AL", 0x26, DEF    , 0, 1),
1054 	COUNTRY_CHPLAN_ENT("AM", 0x26, DEF    , 0, 1),
1055 	COUNTRY_CHPLAN_ENT("AN", 0x76, DEF    , 0, 1),
1056 	COUNTRY_CHPLAN_ENT("AR", 0x61, DEF    , 0, 1),
1057 	COUNTRY_CHPLAN_ENT("AT", 0x26, DEF    , 0, 1),
1058 	COUNTRY_CHPLAN_ENT("AU", 0x45, DEF    , 0, 1),
1059 	COUNTRY_CHPLAN_ENT("AW", 0x34, DEF    , 0, 1),
1060 	COUNTRY_CHPLAN_ENT("AZ", 0x26, DEF    , 0, 1),
1061 	COUNTRY_CHPLAN_ENT("BA", 0x26, DEF    , 0, 1),
1062 	COUNTRY_CHPLAN_ENT("BB", 0x34, DEF    , 0, 1),
1063 	COUNTRY_CHPLAN_ENT("BD", 0x26, DEF    , 0, 1),
1064 	COUNTRY_CHPLAN_ENT("BE", 0x26, DEF    , 0, 1),
1065 	COUNTRY_CHPLAN_ENT("BF", 0x26, DEF    , 0, 1),
1066 	COUNTRY_CHPLAN_ENT("BG", 0x26, DEF    , 0, 1),
1067 	COUNTRY_CHPLAN_ENT("BH", 0x48, DEF    , 0, 1),
1068 	COUNTRY_CHPLAN_ENT("BI", 0x26, DEF    , 0, 1),
1069 	COUNTRY_CHPLAN_ENT("BJ", 0x26, DEF    , 0, 1),
1070 	COUNTRY_CHPLAN_ENT("BN", 0x47, DEF    , 0, 1),
1071 	COUNTRY_CHPLAN_ENT("BO", 0x73, DEF    , 0, 1),
1072 	COUNTRY_CHPLAN_ENT("BR", 0x62, DEF    , 0, 1),
1073 	COUNTRY_CHPLAN_ENT("BW", 0x35, DEF    , 0, 1),
1074 	COUNTRY_CHPLAN_ENT("BY", 0x26, DEF    , 0, 1),
1075 	COUNTRY_CHPLAN_ENT("CA", 0x20, DEF    , 0, 1),
1076 	COUNTRY_CHPLAN_ENT("CD", 0x26, DEF    , 0, 1),
1077 	COUNTRY_CHPLAN_ENT("CF", 0x26, DEF    , 0, 1),
1078 	COUNTRY_CHPLAN_ENT("CG", 0x26, DEF    , 0, 1),
1079 	COUNTRY_CHPLAN_ENT("CH", 0x26, DEF    , 0, 1),
1080 	COUNTRY_CHPLAN_ENT("CI", 0x42, DEF    , 0, 1),
1081 	COUNTRY_CHPLAN_ENT("CL", 0x2D, DEF    , 0, 1),
1082 	COUNTRY_CHPLAN_ENT("CM", 0x26, DEF    , 0, 1),
1083 	COUNTRY_CHPLAN_ENT("CN", 0x48, DEF    , 0, 1),
1084 	COUNTRY_CHPLAN_ENT("CO", 0x34, DEF    , 0, 1),
1085 	COUNTRY_CHPLAN_ENT("CR", 0x34, DEF    , 0, 1),
1086 	COUNTRY_CHPLAN_ENT("CV", 0x26, DEF    , 0, 1),
1087 	COUNTRY_CHPLAN_ENT("CY", 0x26, DEF    , 0, 1),
1088 	COUNTRY_CHPLAN_ENT("CZ", 0x26, DEF    , 0, 1),
1089 	COUNTRY_CHPLAN_ENT("DE", 0x26, DEF    , 0, 1),
1090 	COUNTRY_CHPLAN_ENT("DK", 0x26, DEF    , 0, 1),
1091 	COUNTRY_CHPLAN_ENT("DO", 0x34, DEF    , 0, 1),
1092 	COUNTRY_CHPLAN_ENT("DZ", 0x00, DEF    , 0, 1),
1093 	COUNTRY_CHPLAN_ENT("EC", 0x34, DEF    , 0, 1),
1094 	COUNTRY_CHPLAN_ENT("EE", 0x26, DEF    , 0, 1),
1095 	COUNTRY_CHPLAN_ENT("EG", 0x47, DEF    , 0, 1),
1096 	COUNTRY_CHPLAN_ENT("ES", 0x26, DEF    , 0, 1),
1097 	COUNTRY_CHPLAN_ENT("ET", 0x26, DEF    , 0, 1),
1098 	COUNTRY_CHPLAN_ENT("FI", 0x26, DEF    , 0, 1),
1099 	COUNTRY_CHPLAN_ENT("FR", 0x26, DEF    , 0, 1),
1100 	COUNTRY_CHPLAN_ENT("GA", 0x26, DEF    , 0, 1),
1101 	COUNTRY_CHPLAN_ENT("GB", 0x26, DEF    , 0, 1),
1102 	COUNTRY_CHPLAN_ENT("GD", 0x76, DEF    , 0, 1),
1103 	COUNTRY_CHPLAN_ENT("GH", 0x26, DEF    , 0, 1),
1104 	COUNTRY_CHPLAN_ENT("GM", 0x26, DEF    , 0, 1),
1105 	COUNTRY_CHPLAN_ENT("GN", 0x26, DEF    , 0, 1),
1106 	COUNTRY_CHPLAN_ENT("GQ", 0x26, DEF    , 0, 1),
1107 	COUNTRY_CHPLAN_ENT("GR", 0x26, DEF    , 0, 1),
1108 	COUNTRY_CHPLAN_ENT("GT", 0x34, DEF    , 0, 1),
1109 	COUNTRY_CHPLAN_ENT("GW", 0x26, DEF    , 0, 1),
1110 	COUNTRY_CHPLAN_ENT("HK", 0x35, DEF    , 0, 1),
1111 	COUNTRY_CHPLAN_ENT("HN", 0x32, DEF    , 0, 1),
1112 	COUNTRY_CHPLAN_ENT("HR", 0x26, DEF    , 0, 1),
1113 	COUNTRY_CHPLAN_ENT("HT", 0x34, DEF    , 0, 1),
1114 	COUNTRY_CHPLAN_ENT("HU", 0x26, DEF    , 0, 1),
1115 	COUNTRY_CHPLAN_ENT("ID", 0x5D, DEF    , 0, 1),
1116 	COUNTRY_CHPLAN_ENT("IE", 0x26, DEF    , 0, 1),
1117 	COUNTRY_CHPLAN_ENT("IL", 0x47, DEF    , 0, 1),
1118 	COUNTRY_CHPLAN_ENT("IN", 0x48, DEF    , 0, 1),
1119 	COUNTRY_CHPLAN_ENT("IS", 0x26, DEF    , 0, 1),
1120 	COUNTRY_CHPLAN_ENT("IT", 0x26, DEF    , 0, 1),
1121 	COUNTRY_CHPLAN_ENT("JM", 0x32, DEF    , 0, 1),
1122 	COUNTRY_CHPLAN_ENT("JO", 0x49, DEF    , 0, 1),
1123 	COUNTRY_CHPLAN_ENT("JP", 0x27, DEF    , 0, 1),
1124 	COUNTRY_CHPLAN_ENT("KE", 0x47, DEF    , 0, 1),
1125 	COUNTRY_CHPLAN_ENT("KG", 0x26, DEF    , 0, 1),
1126 	COUNTRY_CHPLAN_ENT("KH", 0x26, DEF    , 0, 1),
1127 	COUNTRY_CHPLAN_ENT("KR", 0x28, DEF    , 0, 1),
1128 	COUNTRY_CHPLAN_ENT("KW", 0x26, DEF    , 0, 1),
1129 	COUNTRY_CHPLAN_ENT("LB", 0x26, DEF    , 0, 1),
1130 	COUNTRY_CHPLAN_ENT("LI", 0x26, DEF    , 0, 1),
1131 	COUNTRY_CHPLAN_ENT("LK", 0x26, DEF    , 0, 1),
1132 	COUNTRY_CHPLAN_ENT("LR", 0x26, DEF    , 0, 1),
1133 	COUNTRY_CHPLAN_ENT("LS", 0x26, DEF    , 0, 1),
1134 	COUNTRY_CHPLAN_ENT("LT", 0x26, DEF    , 0, 1),
1135 	COUNTRY_CHPLAN_ENT("LU", 0x26, DEF    , 0, 1),
1136 	COUNTRY_CHPLAN_ENT("LV", 0x26, DEF    , 0, 1),
1137 	COUNTRY_CHPLAN_ENT("MA", 0x47, DEF    , 0, 1),
1138 	COUNTRY_CHPLAN_ENT("MC", 0x26, DEF    , 0, 1),
1139 	COUNTRY_CHPLAN_ENT("MD", 0x26, DEF    , 0, 1),
1140 	COUNTRY_CHPLAN_ENT("ME", 0x26, DEF    , 0, 1),
1141 	COUNTRY_CHPLAN_ENT("MK", 0x26, DEF    , 0, 1),
1142 	COUNTRY_CHPLAN_ENT("ML", 0x26, DEF    , 0, 1),
1143 	COUNTRY_CHPLAN_ENT("MT", 0x26, DEF    , 0, 1),
1144 	COUNTRY_CHPLAN_ENT("MU", 0x26, DEF    , 0, 1),
1145 	COUNTRY_CHPLAN_ENT("MW", 0x26, DEF    , 0, 1),
1146 	COUNTRY_CHPLAN_ENT("MX", 0x34, DEF    , 0, 1),
1147 	COUNTRY_CHPLAN_ENT("MY", 0x63, DEF    , 0, 1),
1148 	COUNTRY_CHPLAN_ENT("MZ", 0x26, DEF    , 0, 1),
1149 	COUNTRY_CHPLAN_ENT("NE", 0x26, DEF    , 0, 1),
1150 	COUNTRY_CHPLAN_ENT("NG", 0x75, DEF    , 0, 1),
1151 	COUNTRY_CHPLAN_ENT("NI", 0x34, DEF    , 0, 1),
1152 	COUNTRY_CHPLAN_ENT("NL", 0x26, DEF    , 0, 1),
1153 	COUNTRY_CHPLAN_ENT("NO", 0x26, DEF    , 0, 1),
1154 	COUNTRY_CHPLAN_ENT("NP", 0x48, DEF    , 0, 1),
1155 	COUNTRY_CHPLAN_ENT("NZ", 0x45, DEF    , 0, 1),
1156 	COUNTRY_CHPLAN_ENT("OM", 0x26, DEF    , 0, 1),
1157 	COUNTRY_CHPLAN_ENT("PA", 0x34, DEF    , 0, 1),
1158 	COUNTRY_CHPLAN_ENT("PE", 0x34, DEF    , 0, 1),
1159 	COUNTRY_CHPLAN_ENT("PG", 0x35, DEF    , 0, 1),
1160 	COUNTRY_CHPLAN_ENT("PH", 0x35, DEF    , 0, 1),
1161 	COUNTRY_CHPLAN_ENT("PK", 0x51, DEF    , 0, 1),
1162 	COUNTRY_CHPLAN_ENT("PL", 0x26, DEF    , 0, 1),
1163 	COUNTRY_CHPLAN_ENT("PR", 0x34, DEF    , 0, 1),
1164 	COUNTRY_CHPLAN_ENT("PT", 0x26, DEF    , 0, 1),
1165 	COUNTRY_CHPLAN_ENT("PY", 0x34, DEF    , 0, 1),
1166 	COUNTRY_CHPLAN_ENT("QA", 0x35, DEF    , 0, 1),
1167 	COUNTRY_CHPLAN_ENT("RO", 0x26, DEF    , 0, 1),
1168 	COUNTRY_CHPLAN_ENT("RS", 0x26, DEF    , 0, 1),
1169 	COUNTRY_CHPLAN_ENT("RU", 0x59, DEF    , 0, 1),
1170 	COUNTRY_CHPLAN_ENT("RW", 0x26, DEF    , 0, 1),
1171 	COUNTRY_CHPLAN_ENT("SA", 0x35, DEF    , 0, 1),
1172 	COUNTRY_CHPLAN_ENT("SC", 0x34, DEF    , 0, 1),
1173 	COUNTRY_CHPLAN_ENT("SE", 0x26, DEF    , 0, 1),
1174 	COUNTRY_CHPLAN_ENT("SG", 0x35, DEF    , 0, 1),
1175 	COUNTRY_CHPLAN_ENT("SI", 0x26, DEF    , 0, 1),
1176 	COUNTRY_CHPLAN_ENT("SK", 0x26, DEF    , 0, 1),
1177 	COUNTRY_CHPLAN_ENT("SL", 0x26, DEF    , 0, 1),
1178 	COUNTRY_CHPLAN_ENT("SN", 0x26, DEF    , 0, 1),
1179 	COUNTRY_CHPLAN_ENT("SV", 0x30, DEF    , 0, 1),
1180 	COUNTRY_CHPLAN_ENT("TD", 0x26, DEF    , 0, 1),
1181 	COUNTRY_CHPLAN_ENT("TG", 0x26, DEF    , 0, 1),
1182 	COUNTRY_CHPLAN_ENT("TH", 0x35, DEF    , 0, 1),
1183 	COUNTRY_CHPLAN_ENT("TN", 0x47, DEF    , 0, 1),
1184 	COUNTRY_CHPLAN_ENT("TR", 0x26, DEF    , 0, 1),
1185 	COUNTRY_CHPLAN_ENT("TT", 0x76, DEF    , 0, 1),
1186 	COUNTRY_CHPLAN_ENT("TW", 0x39, DEF    , 0, 1),
1187 	COUNTRY_CHPLAN_ENT("TZ", 0x26, DEF    , 0, 1),
1188 	COUNTRY_CHPLAN_ENT("UA", 0x35, DEF    , 0, 1),
1189 	COUNTRY_CHPLAN_ENT("UG", 0x26, DEF    , 0, 1),
1190 	COUNTRY_CHPLAN_ENT("US", 0x34, DEF    , 0, 1),
1191 	COUNTRY_CHPLAN_ENT("UY", 0x30, DEF    , 0, 1),
1192 	COUNTRY_CHPLAN_ENT("UZ", 0x47, DEF    , 0, 1),
1193 	COUNTRY_CHPLAN_ENT("VC", 0x34, DEF    , 0, 1),
1194 	COUNTRY_CHPLAN_ENT("VE", 0x30, DEF    , 0, 1),
1195 	COUNTRY_CHPLAN_ENT("VN", 0x35, DEF    , 0, 1),
1196 	COUNTRY_CHPLAN_ENT("ZA", 0x35, DEF    , 0, 1),
1197 	COUNTRY_CHPLAN_ENT("ZM", 0x26, DEF    , 0, 1),
1198 	COUNTRY_CHPLAN_ENT("ZW", 0x26, DEF    , 0, 1),
1199 };
1200 #endif
1201 
1202 #if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8723BE_HMC_M2) /* 2013 certify */
1203 static const struct country_chplan RTL8723BE_HMC_M2_country_chplan_map[] = {
1204 	COUNTRY_CHPLAN_ENT("AE", 0x35, DEF    , 0, 1),
1205 	COUNTRY_CHPLAN_ENT("AL", 0x26, DEF    , 0, 1),
1206 	COUNTRY_CHPLAN_ENT("AM", 0x26, DEF    , 0, 1),
1207 	COUNTRY_CHPLAN_ENT("AN", 0x76, DEF    , 0, 1),
1208 	COUNTRY_CHPLAN_ENT("AO", 0x47, DEF    , 0, 1),
1209 	COUNTRY_CHPLAN_ENT("AR", 0x61, DEF    , 0, 1),
1210 	COUNTRY_CHPLAN_ENT("AT", 0x26, DEF    , 0, 1),
1211 	COUNTRY_CHPLAN_ENT("AU", 0x45, DEF    , 0, 1),
1212 	COUNTRY_CHPLAN_ENT("AW", 0x34, DEF    , 0, 1),
1213 	COUNTRY_CHPLAN_ENT("AZ", 0x26, DEF    , 0, 1),
1214 	COUNTRY_CHPLAN_ENT("BA", 0x26, DEF    , 0, 1),
1215 	COUNTRY_CHPLAN_ENT("BD", 0x26, DEF    , 0, 1),
1216 	COUNTRY_CHPLAN_ENT("BE", 0x26, DEF    , 0, 1),
1217 	COUNTRY_CHPLAN_ENT("BF", 0x26, DEF    , 0, 1),
1218 	COUNTRY_CHPLAN_ENT("BG", 0x26, DEF    , 0, 1),
1219 	COUNTRY_CHPLAN_ENT("BH", 0x48, DEF    , 0, 1),
1220 	COUNTRY_CHPLAN_ENT("BI", 0x26, DEF    , 0, 1),
1221 	COUNTRY_CHPLAN_ENT("BJ", 0x26, DEF    , 0, 1),
1222 	COUNTRY_CHPLAN_ENT("BO", 0x73, DEF    , 0, 1),
1223 	COUNTRY_CHPLAN_ENT("BR", 0x62, DEF    , 0, 1),
1224 	COUNTRY_CHPLAN_ENT("BS", 0x34, DEF    , 0, 1),
1225 	COUNTRY_CHPLAN_ENT("BW", 0x35, DEF    , 0, 1),
1226 	COUNTRY_CHPLAN_ENT("BY", 0x26, DEF    , 0, 1),
1227 	COUNTRY_CHPLAN_ENT("CA", 0x20, DEF    , 0, 1),
1228 	COUNTRY_CHPLAN_ENT("CD", 0x26, DEF    , 0, 1),
1229 	COUNTRY_CHPLAN_ENT("CF", 0x26, DEF    , 0, 1),
1230 	COUNTRY_CHPLAN_ENT("CG", 0x26, DEF    , 0, 1),
1231 	COUNTRY_CHPLAN_ENT("CH", 0x26, DEF    , 0, 1),
1232 	COUNTRY_CHPLAN_ENT("CI", 0x42, DEF    , 0, 1),
1233 	COUNTRY_CHPLAN_ENT("CL", 0x2D, DEF    , 0, 1),
1234 	COUNTRY_CHPLAN_ENT("CM", 0x26, DEF    , 0, 1),
1235 	COUNTRY_CHPLAN_ENT("CN", 0x48, DEF    , 0, 1),
1236 	COUNTRY_CHPLAN_ENT("CO", 0x34, DEF    , 0, 1),
1237 	COUNTRY_CHPLAN_ENT("CR", 0x34, DEF    , 0, 1),
1238 	COUNTRY_CHPLAN_ENT("CV", 0x26, DEF    , 0, 1),
1239 	COUNTRY_CHPLAN_ENT("CY", 0x26, DEF    , 0, 1),
1240 	COUNTRY_CHPLAN_ENT("CZ", 0x26, DEF    , 0, 1),
1241 	COUNTRY_CHPLAN_ENT("DE", 0x26, DEF    , 0, 1),
1242 	COUNTRY_CHPLAN_ENT("DK", 0x26, DEF    , 0, 1),
1243 	COUNTRY_CHPLAN_ENT("DO", 0x34, DEF    , 0, 1),
1244 	COUNTRY_CHPLAN_ENT("DZ", 0x00, DEF    , 0, 1),
1245 	COUNTRY_CHPLAN_ENT("EC", 0x34, DEF    , 0, 1),
1246 	COUNTRY_CHPLAN_ENT("EE", 0x26, DEF    , 0, 1),
1247 	COUNTRY_CHPLAN_ENT("EG", 0x47, DEF    , 0, 1),
1248 	COUNTRY_CHPLAN_ENT("ES", 0x26, DEF    , 0, 1),
1249 	COUNTRY_CHPLAN_ENT("ET", 0x26, DEF    , 0, 1),
1250 	COUNTRY_CHPLAN_ENT("FI", 0x26, DEF    , 0, 1),
1251 	COUNTRY_CHPLAN_ENT("FR", 0x26, DEF    , 0, 1),
1252 	COUNTRY_CHPLAN_ENT("GA", 0x26, DEF    , 0, 1),
1253 	COUNTRY_CHPLAN_ENT("GB", 0x26, DEF    , 0, 1),
1254 	COUNTRY_CHPLAN_ENT("GD", 0x76, DEF    , 0, 1),
1255 	COUNTRY_CHPLAN_ENT("GH", 0x26, DEF    , 0, 1),
1256 	COUNTRY_CHPLAN_ENT("GM", 0x26, DEF    , 0, 1),
1257 	COUNTRY_CHPLAN_ENT("GQ", 0x26, DEF    , 0, 1),
1258 	COUNTRY_CHPLAN_ENT("GR", 0x26, DEF    , 0, 1),
1259 	COUNTRY_CHPLAN_ENT("GT", 0x34, DEF    , 0, 1),
1260 	COUNTRY_CHPLAN_ENT("GW", 0x26, DEF    , 0, 1),
1261 	COUNTRY_CHPLAN_ENT("HK", 0x35, DEF    , 0, 1),
1262 	COUNTRY_CHPLAN_ENT("HN", 0x32, DEF    , 0, 1),
1263 	COUNTRY_CHPLAN_ENT("HR", 0x26, DEF    , 0, 1),
1264 	COUNTRY_CHPLAN_ENT("HU", 0x26, DEF    , 0, 1),
1265 	COUNTRY_CHPLAN_ENT("ID", 0x5D, DEF    , 0, 1),
1266 	COUNTRY_CHPLAN_ENT("IE", 0x26, DEF    , 0, 1),
1267 	COUNTRY_CHPLAN_ENT("IL", 0x47, DEF    , 0, 1),
1268 	COUNTRY_CHPLAN_ENT("IN", 0x48, DEF    , 0, 1),
1269 	COUNTRY_CHPLAN_ENT("IS", 0x26, DEF    , 0, 1),
1270 	COUNTRY_CHPLAN_ENT("IT", 0x26, DEF    , 0, 1),
1271 	COUNTRY_CHPLAN_ENT("JM", 0x32, DEF    , 0, 1),
1272 	COUNTRY_CHPLAN_ENT("JO", 0x49, DEF    , 0, 1),
1273 	COUNTRY_CHPLAN_ENT("JP", 0x27, DEF    , 0, 1),
1274 	COUNTRY_CHPLAN_ENT("KE", 0x47, DEF    , 0, 1),
1275 	COUNTRY_CHPLAN_ENT("KG", 0x26, DEF    , 0, 1),
1276 	COUNTRY_CHPLAN_ENT("KH", 0x26, DEF    , 0, 1),
1277 	COUNTRY_CHPLAN_ENT("KR", 0x28, DEF    , 0, 1),
1278 	COUNTRY_CHPLAN_ENT("KW", 0x26, DEF    , 0, 1),
1279 	COUNTRY_CHPLAN_ENT("LB", 0x26, DEF    , 0, 1),
1280 	COUNTRY_CHPLAN_ENT("LI", 0x26, DEF    , 0, 1),
1281 	COUNTRY_CHPLAN_ENT("LK", 0x26, DEF    , 0, 1),
1282 	COUNTRY_CHPLAN_ENT("LR", 0x26, DEF    , 0, 1),
1283 	COUNTRY_CHPLAN_ENT("LS", 0x26, DEF    , 0, 1),
1284 	COUNTRY_CHPLAN_ENT("LT", 0x26, DEF    , 0, 1),
1285 	COUNTRY_CHPLAN_ENT("LU", 0x26, DEF    , 0, 1),
1286 	COUNTRY_CHPLAN_ENT("LV", 0x26, DEF    , 0, 1),
1287 	COUNTRY_CHPLAN_ENT("MA", 0x47, DEF    , 0, 1),
1288 	COUNTRY_CHPLAN_ENT("MC", 0x26, DEF    , 0, 1),
1289 	COUNTRY_CHPLAN_ENT("MD", 0x26, DEF    , 0, 1),
1290 	COUNTRY_CHPLAN_ENT("ME", 0x26, DEF    , 0, 1),
1291 	COUNTRY_CHPLAN_ENT("MG", 0x26, DEF    , 0, 1),
1292 	COUNTRY_CHPLAN_ENT("MK", 0x26, DEF    , 0, 1),
1293 	COUNTRY_CHPLAN_ENT("ML", 0x26, DEF    , 0, 1),
1294 	COUNTRY_CHPLAN_ENT("MR", 0x26, DEF    , 0, 1),
1295 	COUNTRY_CHPLAN_ENT("MT", 0x26, DEF    , 0, 1),
1296 	COUNTRY_CHPLAN_ENT("MU", 0x26, DEF    , 0, 1),
1297 	COUNTRY_CHPLAN_ENT("MW", 0x26, DEF    , 0, 1),
1298 	COUNTRY_CHPLAN_ENT("MX", 0x34, DEF    , 0, 1),
1299 	COUNTRY_CHPLAN_ENT("MY", 0x63, DEF    , 0, 1),
1300 	COUNTRY_CHPLAN_ENT("MZ", 0x26, DEF    , 0, 1),
1301 	COUNTRY_CHPLAN_ENT("NE", 0x26, DEF    , 0, 1),
1302 	COUNTRY_CHPLAN_ENT("NG", 0x75, DEF    , 0, 1),
1303 	COUNTRY_CHPLAN_ENT("NI", 0x34, DEF    , 0, 1),
1304 	COUNTRY_CHPLAN_ENT("NL", 0x26, DEF    , 0, 1),
1305 	COUNTRY_CHPLAN_ENT("NO", 0x26, DEF    , 0, 1),
1306 	COUNTRY_CHPLAN_ENT("NP", 0x48, DEF    , 0, 1),
1307 	COUNTRY_CHPLAN_ENT("NZ", 0x45, DEF    , 0, 1),
1308 	COUNTRY_CHPLAN_ENT("OM", 0x26, DEF    , 0, 1),
1309 	COUNTRY_CHPLAN_ENT("PA", 0x34, DEF    , 0, 1),
1310 	COUNTRY_CHPLAN_ENT("PE", 0x34, DEF    , 0, 1),
1311 	COUNTRY_CHPLAN_ENT("PG", 0x35, DEF    , 0, 1),
1312 	COUNTRY_CHPLAN_ENT("PH", 0x35, DEF    , 0, 1),
1313 	COUNTRY_CHPLAN_ENT("PK", 0x51, DEF    , 0, 1),
1314 	COUNTRY_CHPLAN_ENT("PL", 0x26, DEF    , 0, 1),
1315 	COUNTRY_CHPLAN_ENT("PR", 0x34, DEF    , 0, 1),
1316 	COUNTRY_CHPLAN_ENT("PT", 0x26, DEF    , 0, 1),
1317 	COUNTRY_CHPLAN_ENT("PY", 0x34, DEF    , 0, 1),
1318 	COUNTRY_CHPLAN_ENT("QA", 0x35, DEF    , 0, 1),
1319 	COUNTRY_CHPLAN_ENT("RO", 0x26, DEF    , 0, 1),
1320 	COUNTRY_CHPLAN_ENT("RS", 0x26, DEF    , 0, 1),
1321 	COUNTRY_CHPLAN_ENT("RU", 0x59, DEF    , 0, 1),
1322 	COUNTRY_CHPLAN_ENT("RW", 0x26, DEF    , 0, 1),
1323 	COUNTRY_CHPLAN_ENT("SA", 0x35, DEF    , 0, 1),
1324 	COUNTRY_CHPLAN_ENT("SE", 0x26, DEF    , 0, 1),
1325 	COUNTRY_CHPLAN_ENT("SG", 0x35, DEF    , 0, 1),
1326 	COUNTRY_CHPLAN_ENT("SI", 0x26, DEF    , 0, 1),
1327 	COUNTRY_CHPLAN_ENT("SK", 0x26, DEF    , 0, 1),
1328 	COUNTRY_CHPLAN_ENT("SL", 0x26, DEF    , 0, 1),
1329 	COUNTRY_CHPLAN_ENT("SN", 0x26, DEF    , 0, 1),
1330 	COUNTRY_CHPLAN_ENT("SV", 0x30, DEF    , 0, 1),
1331 	COUNTRY_CHPLAN_ENT("SZ", 0x26, DEF    , 0, 1),
1332 	COUNTRY_CHPLAN_ENT("TD", 0x26, DEF    , 0, 1),
1333 	COUNTRY_CHPLAN_ENT("TG", 0x26, DEF    , 0, 1),
1334 	COUNTRY_CHPLAN_ENT("TH", 0x35, DEF    , 0, 1),
1335 	COUNTRY_CHPLAN_ENT("TN", 0x47, DEF    , 0, 1),
1336 	COUNTRY_CHPLAN_ENT("TR", 0x26, DEF    , 0, 1),
1337 	COUNTRY_CHPLAN_ENT("TT", 0x76, DEF    , 0, 1),
1338 	COUNTRY_CHPLAN_ENT("TW", 0x39, DEF    , 0, 1),
1339 	COUNTRY_CHPLAN_ENT("TZ", 0x26, DEF    , 0, 1),
1340 	COUNTRY_CHPLAN_ENT("UA", 0x35, DEF    , 0, 1),
1341 	COUNTRY_CHPLAN_ENT("UG", 0x26, DEF    , 0, 1),
1342 	COUNTRY_CHPLAN_ENT("US", 0x34, DEF    , 0, 1),
1343 	COUNTRY_CHPLAN_ENT("UY", 0x30, DEF    , 0, 1),
1344 	COUNTRY_CHPLAN_ENT("UZ", 0x47, DEF    , 0, 1),
1345 	COUNTRY_CHPLAN_ENT("VE", 0x30, DEF    , 0, 1),
1346 	COUNTRY_CHPLAN_ENT("VN", 0x35, DEF    , 0, 1),
1347 	COUNTRY_CHPLAN_ENT("ZA", 0x35, DEF    , 0, 1),
1348 	COUNTRY_CHPLAN_ENT("ZM", 0x26, DEF    , 0, 1),
1349 	COUNTRY_CHPLAN_ENT("ZW", 0x26, DEF    , 0, 1),
1350 };
1351 #endif
1352 
1353 #if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8723BS_NGFF1216) /* 2014 certify */
1354 static const struct country_chplan RTL8723BS_NGFF1216_country_chplan_map[] = {
1355 	COUNTRY_CHPLAN_ENT("AE", 0x35, DEF    , 0, 1),
1356 	COUNTRY_CHPLAN_ENT("AL", 0x26, DEF    , 0, 1),
1357 	COUNTRY_CHPLAN_ENT("AN", 0x76, DEF    , 0, 1),
1358 	COUNTRY_CHPLAN_ENT("AO", 0x47, DEF    , 0, 1),
1359 	COUNTRY_CHPLAN_ENT("AR", 0x61, DEF    , 0, 1),
1360 	COUNTRY_CHPLAN_ENT("AT", 0x26, DEF    , 0, 1),
1361 	COUNTRY_CHPLAN_ENT("AU", 0x45, DEF    , 0, 1),
1362 	COUNTRY_CHPLAN_ENT("AZ", 0x26, DEF    , 0, 1),
1363 	COUNTRY_CHPLAN_ENT("BA", 0x26, DEF    , 0, 1),
1364 	COUNTRY_CHPLAN_ENT("BB", 0x34, DEF    , 0, 1),
1365 	COUNTRY_CHPLAN_ENT("BD", 0x26, DEF    , 0, 1),
1366 	COUNTRY_CHPLAN_ENT("BE", 0x26, DEF    , 0, 1),
1367 	COUNTRY_CHPLAN_ENT("BG", 0x26, DEF    , 0, 1),
1368 	COUNTRY_CHPLAN_ENT("BH", 0x48, DEF    , 0, 1),
1369 	COUNTRY_CHPLAN_ENT("BO", 0x73, DEF    , 0, 1),
1370 	COUNTRY_CHPLAN_ENT("BR", 0x62, DEF    , 0, 1),
1371 	COUNTRY_CHPLAN_ENT("BW", 0x35, DEF    , 0, 1),
1372 	COUNTRY_CHPLAN_ENT("BY", 0x26, DEF    , 0, 1),
1373 	COUNTRY_CHPLAN_ENT("CA", 0x20, DEF    , 0, 1),
1374 	COUNTRY_CHPLAN_ENT("CH", 0x26, DEF    , 0, 1),
1375 	COUNTRY_CHPLAN_ENT("CI", 0x42, DEF    , 0, 1),
1376 	COUNTRY_CHPLAN_ENT("CL", 0x2D, DEF    , 0, 1),
1377 	COUNTRY_CHPLAN_ENT("CN", 0x48, DEF    , 0, 1),
1378 	COUNTRY_CHPLAN_ENT("CO", 0x34, DEF    , 0, 1),
1379 	COUNTRY_CHPLAN_ENT("CR", 0x34, DEF    , 0, 1),
1380 	COUNTRY_CHPLAN_ENT("CY", 0x26, DEF    , 0, 1),
1381 	COUNTRY_CHPLAN_ENT("CZ", 0x26, DEF    , 0, 1),
1382 	COUNTRY_CHPLAN_ENT("DE", 0x26, DEF    , 0, 1),
1383 	COUNTRY_CHPLAN_ENT("DK", 0x26, DEF    , 0, 1),
1384 	COUNTRY_CHPLAN_ENT("DO", 0x34, DEF    , 0, 1),
1385 	COUNTRY_CHPLAN_ENT("DZ", 0x00, DEF    , 0, 1),
1386 	COUNTRY_CHPLAN_ENT("EC", 0x34, DEF    , 0, 1),
1387 	COUNTRY_CHPLAN_ENT("EE", 0x26, DEF    , 0, 1),
1388 	COUNTRY_CHPLAN_ENT("EG", 0x47, DEF    , 0, 1),
1389 	COUNTRY_CHPLAN_ENT("ES", 0x26, DEF    , 0, 1),
1390 	COUNTRY_CHPLAN_ENT("FI", 0x26, DEF    , 0, 1),
1391 	COUNTRY_CHPLAN_ENT("FR", 0x26, DEF    , 0, 1),
1392 	COUNTRY_CHPLAN_ENT("GB", 0x26, DEF    , 0, 1),
1393 	COUNTRY_CHPLAN_ENT("GH", 0x26, DEF    , 0, 1),
1394 	COUNTRY_CHPLAN_ENT("GR", 0x26, DEF    , 0, 1),
1395 	COUNTRY_CHPLAN_ENT("GT", 0x34, DEF    , 0, 1),
1396 	COUNTRY_CHPLAN_ENT("HK", 0x35, DEF    , 0, 1),
1397 	COUNTRY_CHPLAN_ENT("HN", 0x32, DEF    , 0, 1),
1398 	COUNTRY_CHPLAN_ENT("HR", 0x26, DEF    , 0, 1),
1399 	COUNTRY_CHPLAN_ENT("HT", 0x34, DEF    , 0, 1),
1400 	COUNTRY_CHPLAN_ENT("HU", 0x26, DEF    , 0, 1),
1401 	COUNTRY_CHPLAN_ENT("ID", 0x5D, DEF    , 0, 1),
1402 	COUNTRY_CHPLAN_ENT("IE", 0x26, DEF    , 0, 1),
1403 	COUNTRY_CHPLAN_ENT("IL", 0x47, DEF    , 0, 1),
1404 	COUNTRY_CHPLAN_ENT("IN", 0x48, DEF    , 0, 1),
1405 	COUNTRY_CHPLAN_ENT("IS", 0x26, DEF    , 0, 1),
1406 	COUNTRY_CHPLAN_ENT("IT", 0x26, DEF    , 0, 1),
1407 	COUNTRY_CHPLAN_ENT("JM", 0x32, DEF    , 0, 1),
1408 	COUNTRY_CHPLAN_ENT("JO", 0x49, DEF    , 0, 1),
1409 	COUNTRY_CHPLAN_ENT("JP", 0x27, DEF    , 0, 1),
1410 	COUNTRY_CHPLAN_ENT("KE", 0x47, DEF    , 0, 1),
1411 	COUNTRY_CHPLAN_ENT("KG", 0x26, DEF    , 0, 1),
1412 	COUNTRY_CHPLAN_ENT("KH", 0x26, DEF    , 0, 1),
1413 	COUNTRY_CHPLAN_ENT("KR", 0x28, DEF    , 0, 1),
1414 	COUNTRY_CHPLAN_ENT("KW", 0x26, DEF    , 0, 1),
1415 	COUNTRY_CHPLAN_ENT("LB", 0x26, DEF    , 0, 1),
1416 	COUNTRY_CHPLAN_ENT("LI", 0x26, DEF    , 0, 1),
1417 	COUNTRY_CHPLAN_ENT("LK", 0x26, DEF    , 0, 1),
1418 	COUNTRY_CHPLAN_ENT("LS", 0x26, DEF    , 0, 1),
1419 	COUNTRY_CHPLAN_ENT("LT", 0x26, DEF    , 0, 1),
1420 	COUNTRY_CHPLAN_ENT("LU", 0x26, DEF    , 0, 1),
1421 	COUNTRY_CHPLAN_ENT("LV", 0x26, DEF    , 0, 1),
1422 	COUNTRY_CHPLAN_ENT("MA", 0x47, DEF    , 0, 1),
1423 	COUNTRY_CHPLAN_ENT("MC", 0x26, DEF    , 0, 1),
1424 	COUNTRY_CHPLAN_ENT("MD", 0x26, DEF    , 0, 1),
1425 	COUNTRY_CHPLAN_ENT("ME", 0x26, DEF    , 0, 1),
1426 	COUNTRY_CHPLAN_ENT("MK", 0x26, DEF    , 0, 1),
1427 	COUNTRY_CHPLAN_ENT("MQ", 0x26, DEF    , 0, 1),
1428 	COUNTRY_CHPLAN_ENT("MT", 0x26, DEF    , 0, 1),
1429 	COUNTRY_CHPLAN_ENT("MX", 0x34, DEF    , 0, 1),
1430 	COUNTRY_CHPLAN_ENT("MY", 0x63, DEF    , 0, 1),
1431 	COUNTRY_CHPLAN_ENT("MZ", 0x26, DEF    , 0, 1),
1432 	COUNTRY_CHPLAN_ENT("NG", 0x75, DEF    , 0, 1),
1433 	COUNTRY_CHPLAN_ENT("NI", 0x34, DEF    , 0, 1),
1434 	COUNTRY_CHPLAN_ENT("NL", 0x26, DEF    , 0, 1),
1435 	COUNTRY_CHPLAN_ENT("NO", 0x26, DEF    , 0, 1),
1436 	COUNTRY_CHPLAN_ENT("NP", 0x48, DEF    , 0, 1),
1437 	COUNTRY_CHPLAN_ENT("NZ", 0x45, DEF    , 0, 1),
1438 	COUNTRY_CHPLAN_ENT("OM", 0x26, DEF    , 0, 1),
1439 	COUNTRY_CHPLAN_ENT("PA", 0x34, DEF    , 0, 1),
1440 	COUNTRY_CHPLAN_ENT("PE", 0x34, DEF    , 0, 1),
1441 	COUNTRY_CHPLAN_ENT("PG", 0x35, DEF    , 0, 1),
1442 	COUNTRY_CHPLAN_ENT("PH", 0x35, DEF    , 0, 1),
1443 	COUNTRY_CHPLAN_ENT("PK", 0x51, DEF    , 0, 1),
1444 	COUNTRY_CHPLAN_ENT("PL", 0x26, DEF    , 0, 1),
1445 	COUNTRY_CHPLAN_ENT("PR", 0x34, DEF    , 0, 1),
1446 	COUNTRY_CHPLAN_ENT("PT", 0x26, DEF    , 0, 1),
1447 	COUNTRY_CHPLAN_ENT("PY", 0x34, DEF    , 0, 1),
1448 	COUNTRY_CHPLAN_ENT("QA", 0x35, DEF    , 0, 1),
1449 	COUNTRY_CHPLAN_ENT("RO", 0x26, DEF    , 0, 1),
1450 	COUNTRY_CHPLAN_ENT("RS", 0x26, DEF    , 0, 1),
1451 	COUNTRY_CHPLAN_ENT("RU", 0x59, DEF    , 0, 1),
1452 	COUNTRY_CHPLAN_ENT("SA", 0x35, DEF    , 0, 1),
1453 	COUNTRY_CHPLAN_ENT("SE", 0x26, DEF    , 0, 1),
1454 	COUNTRY_CHPLAN_ENT("SG", 0x35, DEF    , 0, 1),
1455 	COUNTRY_CHPLAN_ENT("SI", 0x26, DEF    , 0, 1),
1456 	COUNTRY_CHPLAN_ENT("SK", 0x26, DEF    , 0, 1),
1457 	COUNTRY_CHPLAN_ENT("SN", 0x26, DEF    , 0, 1),
1458 	COUNTRY_CHPLAN_ENT("SV", 0x30, DEF    , 0, 1),
1459 	COUNTRY_CHPLAN_ENT("TH", 0x35, DEF    , 0, 1),
1460 	COUNTRY_CHPLAN_ENT("TJ", 0x26, DEF    , 0, 1),
1461 	COUNTRY_CHPLAN_ENT("TN", 0x47, DEF    , 0, 1),
1462 	COUNTRY_CHPLAN_ENT("TR", 0x26, DEF    , 0, 1),
1463 	COUNTRY_CHPLAN_ENT("TT", 0x76, DEF    , 0, 1),
1464 	COUNTRY_CHPLAN_ENT("TW", 0x39, DEF    , 0, 1),
1465 	COUNTRY_CHPLAN_ENT("TZ", 0x26, DEF    , 0, 1),
1466 	COUNTRY_CHPLAN_ENT("UA", 0x35, DEF    , 0, 1),
1467 	COUNTRY_CHPLAN_ENT("UG", 0x26, DEF    , 0, 1),
1468 	COUNTRY_CHPLAN_ENT("US", 0x34, DEF    , 0, 1),
1469 	COUNTRY_CHPLAN_ENT("UY", 0x30, DEF    , 0, 1),
1470 	COUNTRY_CHPLAN_ENT("UZ", 0x47, DEF    , 0, 1),
1471 	COUNTRY_CHPLAN_ENT("VE", 0x30, DEF    , 0, 1),
1472 	COUNTRY_CHPLAN_ENT("VN", 0x35, DEF    , 0, 1),
1473 	COUNTRY_CHPLAN_ENT("YE", 0x26, DEF    , 0, 1),
1474 	COUNTRY_CHPLAN_ENT("ZA", 0x35, DEF    , 0, 1),
1475 	COUNTRY_CHPLAN_ENT("ZW", 0x26, DEF    , 0, 1),
1476 };
1477 #endif
1478 
1479 #if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8192EEBT_HMC_M2) /* 2013 certify */
1480 static const struct country_chplan RTL8192EEBT_HMC_M2_country_chplan_map[] = {
1481 	COUNTRY_CHPLAN_ENT("AE", 0x35, DEF    , 0, 1),
1482 	COUNTRY_CHPLAN_ENT("AL", 0x26, DEF    , 0, 1),
1483 	COUNTRY_CHPLAN_ENT("AM", 0x26, DEF    , 0, 1),
1484 	COUNTRY_CHPLAN_ENT("AN", 0x76, DEF    , 0, 1),
1485 	COUNTRY_CHPLAN_ENT("AO", 0x47, DEF    , 0, 1),
1486 	COUNTRY_CHPLAN_ENT("AR", 0x61, DEF    , 0, 1),
1487 	COUNTRY_CHPLAN_ENT("AT", 0x26, DEF    , 0, 1),
1488 	COUNTRY_CHPLAN_ENT("AU", 0x45, DEF    , 0, 1),
1489 	COUNTRY_CHPLAN_ENT("AW", 0x34, DEF    , 0, 1),
1490 	COUNTRY_CHPLAN_ENT("AZ", 0x26, DEF    , 0, 1),
1491 	COUNTRY_CHPLAN_ENT("BA", 0x26, DEF    , 0, 1),
1492 	COUNTRY_CHPLAN_ENT("BD", 0x26, DEF    , 0, 1),
1493 	COUNTRY_CHPLAN_ENT("BE", 0x26, DEF    , 0, 1),
1494 	COUNTRY_CHPLAN_ENT("BF", 0x26, DEF    , 0, 1),
1495 	COUNTRY_CHPLAN_ENT("BG", 0x26, DEF    , 0, 1),
1496 	COUNTRY_CHPLAN_ENT("BH", 0x48, DEF    , 0, 1),
1497 	COUNTRY_CHPLAN_ENT("BI", 0x26, DEF    , 0, 1),
1498 	COUNTRY_CHPLAN_ENT("BJ", 0x26, DEF    , 0, 1),
1499 	COUNTRY_CHPLAN_ENT("BO", 0x73, DEF    , 0, 1),
1500 	COUNTRY_CHPLAN_ENT("BR", 0x62, DEF    , 0, 1),
1501 	COUNTRY_CHPLAN_ENT("BW", 0x35, DEF    , 0, 1),
1502 	COUNTRY_CHPLAN_ENT("BY", 0x26, DEF    , 0, 1),
1503 	COUNTRY_CHPLAN_ENT("CA", 0x20, DEF    , 0, 1),
1504 	COUNTRY_CHPLAN_ENT("CD", 0x26, DEF    , 0, 1),
1505 	COUNTRY_CHPLAN_ENT("CF", 0x26, DEF    , 0, 1),
1506 	COUNTRY_CHPLAN_ENT("CG", 0x26, DEF    , 0, 1),
1507 	COUNTRY_CHPLAN_ENT("CH", 0x26, DEF    , 0, 1),
1508 	COUNTRY_CHPLAN_ENT("CI", 0x42, DEF    , 0, 1),
1509 	COUNTRY_CHPLAN_ENT("CL", 0x2D, DEF    , 0, 1),
1510 	COUNTRY_CHPLAN_ENT("CM", 0x26, DEF    , 0, 1),
1511 	COUNTRY_CHPLAN_ENT("CN", 0x48, DEF    , 0, 1),
1512 	COUNTRY_CHPLAN_ENT("CO", 0x34, DEF    , 0, 1),
1513 	COUNTRY_CHPLAN_ENT("CR", 0x34, DEF    , 0, 1),
1514 	COUNTRY_CHPLAN_ENT("CV", 0x26, DEF    , 0, 1),
1515 	COUNTRY_CHPLAN_ENT("CY", 0x26, DEF    , 0, 1),
1516 	COUNTRY_CHPLAN_ENT("CZ", 0x26, DEF    , 0, 1),
1517 	COUNTRY_CHPLAN_ENT("DE", 0x26, DEF    , 0, 1),
1518 	COUNTRY_CHPLAN_ENT("DJ", 0x26, DEF    , 0, 1),
1519 	COUNTRY_CHPLAN_ENT("DK", 0x26, DEF    , 0, 1),
1520 	COUNTRY_CHPLAN_ENT("DO", 0x34, DEF    , 0, 1),
1521 	COUNTRY_CHPLAN_ENT("DZ", 0x00, DEF    , 0, 1),
1522 	COUNTRY_CHPLAN_ENT("EC", 0x34, DEF    , 0, 1),
1523 	COUNTRY_CHPLAN_ENT("EE", 0x26, DEF    , 0, 1),
1524 	COUNTRY_CHPLAN_ENT("EG", 0x47, DEF    , 0, 1),
1525 	COUNTRY_CHPLAN_ENT("EH", 0x47, DEF    , 0, 1),
1526 	COUNTRY_CHPLAN_ENT("ES", 0x26, DEF    , 0, 1),
1527 	COUNTRY_CHPLAN_ENT("ET", 0x26, DEF    , 0, 1),
1528 	COUNTRY_CHPLAN_ENT("FI", 0x26, DEF    , 0, 1),
1529 	COUNTRY_CHPLAN_ENT("FR", 0x26, DEF    , 0, 1),
1530 	COUNTRY_CHPLAN_ENT("GA", 0x26, DEF    , 0, 1),
1531 	COUNTRY_CHPLAN_ENT("GB", 0x26, DEF    , 0, 1),
1532 	COUNTRY_CHPLAN_ENT("GD", 0x76, DEF    , 0, 1),
1533 	COUNTRY_CHPLAN_ENT("GF", 0x26, DEF    , 0, 1),
1534 	COUNTRY_CHPLAN_ENT("GH", 0x26, DEF    , 0, 1),
1535 	COUNTRY_CHPLAN_ENT("GM", 0x26, DEF    , 0, 1),
1536 	COUNTRY_CHPLAN_ENT("GQ", 0x26, DEF    , 0, 1),
1537 	COUNTRY_CHPLAN_ENT("GR", 0x26, DEF    , 0, 1),
1538 	COUNTRY_CHPLAN_ENT("GT", 0x34, DEF    , 0, 1),
1539 	COUNTRY_CHPLAN_ENT("GW", 0x26, DEF    , 0, 1),
1540 	COUNTRY_CHPLAN_ENT("HK", 0x35, DEF    , 0, 1),
1541 	COUNTRY_CHPLAN_ENT("HN", 0x32, DEF    , 0, 1),
1542 	COUNTRY_CHPLAN_ENT("HR", 0x26, DEF    , 0, 1),
1543 	COUNTRY_CHPLAN_ENT("HU", 0x26, DEF    , 0, 1),
1544 	COUNTRY_CHPLAN_ENT("ID", 0x5D, DEF    , 0, 1),
1545 	COUNTRY_CHPLAN_ENT("IE", 0x26, DEF    , 0, 1),
1546 	COUNTRY_CHPLAN_ENT("IL", 0x47, DEF    , 0, 1),
1547 	COUNTRY_CHPLAN_ENT("IN", 0x48, DEF    , 0, 1),
1548 	COUNTRY_CHPLAN_ENT("IS", 0x26, DEF    , 0, 1),
1549 	COUNTRY_CHPLAN_ENT("IT", 0x26, DEF    , 0, 1),
1550 	COUNTRY_CHPLAN_ENT("JM", 0x32, DEF    , 0, 1),
1551 	COUNTRY_CHPLAN_ENT("JO", 0x49, DEF    , 0, 1),
1552 	COUNTRY_CHPLAN_ENT("JP", 0x27, DEF    , 0, 1),
1553 	COUNTRY_CHPLAN_ENT("KE", 0x47, DEF    , 0, 1),
1554 	COUNTRY_CHPLAN_ENT("KG", 0x26, DEF    , 0, 1),
1555 	COUNTRY_CHPLAN_ENT("KH", 0x26, DEF    , 0, 1),
1556 	COUNTRY_CHPLAN_ENT("KR", 0x28, DEF    , 0, 1),
1557 	COUNTRY_CHPLAN_ENT("KW", 0x26, DEF    , 0, 1),
1558 	COUNTRY_CHPLAN_ENT("LB", 0x26, DEF    , 0, 1),
1559 	COUNTRY_CHPLAN_ENT("LI", 0x26, DEF    , 0, 1),
1560 	COUNTRY_CHPLAN_ENT("LK", 0x26, DEF    , 0, 1),
1561 	COUNTRY_CHPLAN_ENT("LR", 0x26, DEF    , 0, 1),
1562 	COUNTRY_CHPLAN_ENT("LS", 0x26, DEF    , 0, 1),
1563 	COUNTRY_CHPLAN_ENT("LT", 0x26, DEF    , 0, 1),
1564 	COUNTRY_CHPLAN_ENT("LU", 0x26, DEF    , 0, 1),
1565 	COUNTRY_CHPLAN_ENT("LV", 0x26, DEF    , 0, 1),
1566 	COUNTRY_CHPLAN_ENT("MA", 0x47, DEF    , 0, 1),
1567 	COUNTRY_CHPLAN_ENT("MC", 0x26, DEF    , 0, 1),
1568 	COUNTRY_CHPLAN_ENT("MD", 0x26, DEF    , 0, 1),
1569 	COUNTRY_CHPLAN_ENT("ME", 0x26, DEF    , 0, 1),
1570 	COUNTRY_CHPLAN_ENT("MK", 0x26, DEF    , 0, 1),
1571 	COUNTRY_CHPLAN_ENT("ML", 0x26, DEF    , 0, 1),
1572 	COUNTRY_CHPLAN_ENT("MR", 0x26, DEF    , 0, 1),
1573 	COUNTRY_CHPLAN_ENT("MT", 0x26, DEF    , 0, 1),
1574 	COUNTRY_CHPLAN_ENT("MU", 0x26, DEF    , 0, 1),
1575 	COUNTRY_CHPLAN_ENT("MW", 0x26, DEF    , 0, 1),
1576 	COUNTRY_CHPLAN_ENT("MX", 0x34, DEF    , 0, 1),
1577 	COUNTRY_CHPLAN_ENT("MY", 0x63, DEF    , 0, 1),
1578 	COUNTRY_CHPLAN_ENT("MZ", 0x26, DEF    , 0, 1),
1579 	COUNTRY_CHPLAN_ENT("NE", 0x26, DEF    , 0, 1),
1580 	COUNTRY_CHPLAN_ENT("NG", 0x75, DEF    , 0, 1),
1581 	COUNTRY_CHPLAN_ENT("NI", 0x34, DEF    , 0, 1),
1582 	COUNTRY_CHPLAN_ENT("NL", 0x26, DEF    , 0, 1),
1583 	COUNTRY_CHPLAN_ENT("NO", 0x26, DEF    , 0, 1),
1584 	COUNTRY_CHPLAN_ENT("NP", 0x48, DEF    , 0, 1),
1585 	COUNTRY_CHPLAN_ENT("NZ", 0x45, DEF    , 0, 1),
1586 	COUNTRY_CHPLAN_ENT("OM", 0x26, DEF    , 0, 1),
1587 	COUNTRY_CHPLAN_ENT("PA", 0x34, DEF    , 0, 1),
1588 	COUNTRY_CHPLAN_ENT("PE", 0x34, DEF    , 0, 1),
1589 	COUNTRY_CHPLAN_ENT("PG", 0x35, DEF    , 0, 1),
1590 	COUNTRY_CHPLAN_ENT("PH", 0x35, DEF    , 0, 1),
1591 	COUNTRY_CHPLAN_ENT("PK", 0x51, DEF    , 0, 1),
1592 	COUNTRY_CHPLAN_ENT("PL", 0x26, DEF    , 0, 1),
1593 	COUNTRY_CHPLAN_ENT("PR", 0x34, DEF    , 0, 1),
1594 	COUNTRY_CHPLAN_ENT("PT", 0x26, DEF    , 0, 1),
1595 	COUNTRY_CHPLAN_ENT("PY", 0x34, DEF    , 0, 1),
1596 	COUNTRY_CHPLAN_ENT("QA", 0x35, DEF    , 0, 1),
1597 	COUNTRY_CHPLAN_ENT("RO", 0x26, DEF    , 0, 1),
1598 	COUNTRY_CHPLAN_ENT("RS", 0x26, DEF    , 0, 1),
1599 	COUNTRY_CHPLAN_ENT("RU", 0x59, DEF    , 0, 1),
1600 	COUNTRY_CHPLAN_ENT("RW", 0x26, DEF    , 0, 1),
1601 	COUNTRY_CHPLAN_ENT("SA", 0x35, DEF    , 0, 1),
1602 	COUNTRY_CHPLAN_ENT("SC", 0x34, DEF    , 0, 1),
1603 	COUNTRY_CHPLAN_ENT("SE", 0x26, DEF    , 0, 1),
1604 	COUNTRY_CHPLAN_ENT("SG", 0x35, DEF    , 0, 1),
1605 	COUNTRY_CHPLAN_ENT("SI", 0x26, DEF    , 0, 1),
1606 	COUNTRY_CHPLAN_ENT("SK", 0x26, DEF    , 0, 1),
1607 	COUNTRY_CHPLAN_ENT("SL", 0x26, DEF    , 0, 1),
1608 	COUNTRY_CHPLAN_ENT("SN", 0x26, DEF    , 0, 1),
1609 	COUNTRY_CHPLAN_ENT("ST", 0x34, DEF    , 0, 1),
1610 	COUNTRY_CHPLAN_ENT("SV", 0x30, DEF    , 0, 1),
1611 	COUNTRY_CHPLAN_ENT("TD", 0x26, DEF    , 0, 1),
1612 	COUNTRY_CHPLAN_ENT("TF", 0x26, DEF    , 0, 1),
1613 	COUNTRY_CHPLAN_ENT("TG", 0x26, DEF    , 0, 1),
1614 	COUNTRY_CHPLAN_ENT("TH", 0x35, DEF    , 0, 1),
1615 	COUNTRY_CHPLAN_ENT("TN", 0x47, DEF    , 0, 1),
1616 	COUNTRY_CHPLAN_ENT("TR", 0x26, DEF    , 0, 1),
1617 	COUNTRY_CHPLAN_ENT("TT", 0x76, DEF    , 0, 1),
1618 	COUNTRY_CHPLAN_ENT("TW", 0x39, DEF    , 0, 1),
1619 	COUNTRY_CHPLAN_ENT("TZ", 0x26, DEF    , 0, 1),
1620 	COUNTRY_CHPLAN_ENT("UA", 0x35, DEF    , 0, 1),
1621 	COUNTRY_CHPLAN_ENT("UG", 0x26, DEF    , 0, 1),
1622 	COUNTRY_CHPLAN_ENT("US", 0x34, DEF    , 0, 1),
1623 	COUNTRY_CHPLAN_ENT("UY", 0x30, DEF    , 0, 1),
1624 	COUNTRY_CHPLAN_ENT("UZ", 0x47, DEF    , 0, 1),
1625 	COUNTRY_CHPLAN_ENT("VE", 0x30, DEF    , 0, 1),
1626 	COUNTRY_CHPLAN_ENT("VN", 0x35, DEF    , 0, 1),
1627 	COUNTRY_CHPLAN_ENT("YT", 0x26, DEF    , 0, 1),
1628 	COUNTRY_CHPLAN_ENT("ZA", 0x35, DEF    , 0, 1),
1629 	COUNTRY_CHPLAN_ENT("ZM", 0x26, DEF    , 0, 1),
1630 	COUNTRY_CHPLAN_ENT("ZW", 0x26, DEF    , 0, 1),
1631 };
1632 #endif
1633 
1634 #if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8723DE_NGFF1630) /* 2016 certify */
1635 static const struct country_chplan RTL8723DE_NGFF1630_country_chplan_map[] = {
1636 	COUNTRY_CHPLAN_ENT("AE", 0x35, DEF    , 0, 1),
1637 	COUNTRY_CHPLAN_ENT("AL", 0x26, DEF    , 0, 1),
1638 	COUNTRY_CHPLAN_ENT("AN", 0x76, DEF    , 0, 1),
1639 	COUNTRY_CHPLAN_ENT("AR", 0x61, DEF    , 0, 1),
1640 	COUNTRY_CHPLAN_ENT("AT", 0x26, DEF    , 0, 1),
1641 	COUNTRY_CHPLAN_ENT("AU", 0x45, DEF    , 0, 1),
1642 	COUNTRY_CHPLAN_ENT("AZ", 0x26, DEF    , 0, 1),
1643 	COUNTRY_CHPLAN_ENT("BA", 0x26, DEF    , 0, 1),
1644 	COUNTRY_CHPLAN_ENT("BD", 0x26, DEF    , 0, 1),
1645 	COUNTRY_CHPLAN_ENT("BE", 0x26, DEF    , 0, 1),
1646 	COUNTRY_CHPLAN_ENT("BG", 0x26, DEF    , 0, 1),
1647 	COUNTRY_CHPLAN_ENT("BH", 0x48, DEF    , 0, 1),
1648 	COUNTRY_CHPLAN_ENT("BO", 0x73, DEF    , 0, 1),
1649 	COUNTRY_CHPLAN_ENT("BR", 0x62, DEF    , 0, 1),
1650 	COUNTRY_CHPLAN_ENT("BY", 0x26, DEF    , 0, 1),
1651 	COUNTRY_CHPLAN_ENT("CA", 0x2A, DEF    , 0, 1),
1652 	COUNTRY_CHPLAN_ENT("CH", 0x26, DEF    , 0, 1),
1653 	COUNTRY_CHPLAN_ENT("CI", 0x42, DEF    , 0, 1),
1654 	COUNTRY_CHPLAN_ENT("CL", 0x2D, DEF    , 0, 1),
1655 	COUNTRY_CHPLAN_ENT("CN", 0x48, DEF    , 0, 1),
1656 	COUNTRY_CHPLAN_ENT("CO", 0x76, DEF    , 0, 1),
1657 	COUNTRY_CHPLAN_ENT("CR", 0x76, DEF    , 0, 1),
1658 	COUNTRY_CHPLAN_ENT("CY", 0x26, DEF    , 0, 1),
1659 	COUNTRY_CHPLAN_ENT("CZ", 0x26, DEF    , 0, 1),
1660 	COUNTRY_CHPLAN_ENT("DE", 0x26, DEF    , 0, 1),
1661 	COUNTRY_CHPLAN_ENT("DK", 0x26, DEF    , 0, 1),
1662 	COUNTRY_CHPLAN_ENT("DO", 0x76, DEF    , 0, 1),
1663 	COUNTRY_CHPLAN_ENT("DZ", 0x00, DEF    , 0, 1),
1664 	COUNTRY_CHPLAN_ENT("EC", 0x76, DEF    , 0, 1),
1665 	COUNTRY_CHPLAN_ENT("EE", 0x26, DEF    , 0, 1),
1666 	COUNTRY_CHPLAN_ENT("EG", 0x47, DEF    , 0, 1),
1667 	COUNTRY_CHPLAN_ENT("ES", 0x26, DEF    , 0, 1),
1668 	COUNTRY_CHPLAN_ENT("FI", 0x26, DEF    , 0, 1),
1669 	COUNTRY_CHPLAN_ENT("FR", 0x26, DEF    , 0, 1),
1670 	COUNTRY_CHPLAN_ENT("GB", 0x26, DEF    , 0, 1),
1671 	COUNTRY_CHPLAN_ENT("GH", 0x26, DEF    , 0, 1),
1672 	COUNTRY_CHPLAN_ENT("GR", 0x26, DEF    , 0, 1),
1673 	COUNTRY_CHPLAN_ENT("GT", 0x61, DEF    , 0, 1),
1674 	COUNTRY_CHPLAN_ENT("HK", 0x35, DEF    , 0, 1),
1675 	COUNTRY_CHPLAN_ENT("HN", 0x32, DEF    , 0, 1),
1676 	COUNTRY_CHPLAN_ENT("HR", 0x26, DEF    , 0, 1),
1677 	COUNTRY_CHPLAN_ENT("HU", 0x26, DEF    , 0, 1),
1678 	COUNTRY_CHPLAN_ENT("ID", 0x5D, DEF    , 0, 1),
1679 	COUNTRY_CHPLAN_ENT("IE", 0x26, DEF    , 0, 1),
1680 	COUNTRY_CHPLAN_ENT("IL", 0x47, DEF    , 0, 1),
1681 	COUNTRY_CHPLAN_ENT("IN", 0x48, DEF    , 0, 1),
1682 	COUNTRY_CHPLAN_ENT("IS", 0x26, DEF    , 0, 1),
1683 	COUNTRY_CHPLAN_ENT("IT", 0x26, DEF    , 0, 1),
1684 	COUNTRY_CHPLAN_ENT("JM", 0x32, DEF    , 0, 1),
1685 	COUNTRY_CHPLAN_ENT("JO", 0x49, DEF    , 0, 1),
1686 	COUNTRY_CHPLAN_ENT("JP", 0x27, DEF    , 0, 1),
1687 	COUNTRY_CHPLAN_ENT("KE", 0x47, DEF    , 0, 1),
1688 	COUNTRY_CHPLAN_ENT("KG", 0x26, DEF    , 0, 1),
1689 	COUNTRY_CHPLAN_ENT("KH", 0x26, DEF    , 0, 1),
1690 	COUNTRY_CHPLAN_ENT("KR", 0x28, DEF    , 0, 1),
1691 	COUNTRY_CHPLAN_ENT("KW", 0x26, DEF    , 0, 1),
1692 	COUNTRY_CHPLAN_ENT("KZ", 0x26, DEF    , 0, 1),
1693 	COUNTRY_CHPLAN_ENT("LB", 0x26, DEF    , 0, 1),
1694 	COUNTRY_CHPLAN_ENT("LI", 0x26, DEF    , 0, 1),
1695 	COUNTRY_CHPLAN_ENT("LK", 0x26, DEF    , 0, 1),
1696 	COUNTRY_CHPLAN_ENT("LS", 0x26, DEF    , 0, 1),
1697 	COUNTRY_CHPLAN_ENT("LT", 0x26, DEF    , 0, 1),
1698 	COUNTRY_CHPLAN_ENT("LU", 0x26, DEF    , 0, 1),
1699 	COUNTRY_CHPLAN_ENT("LV", 0x26, DEF    , 0, 1),
1700 	COUNTRY_CHPLAN_ENT("MA", 0x47, DEF    , 0, 1),
1701 	COUNTRY_CHPLAN_ENT("MC", 0x26, DEF    , 0, 1),
1702 	COUNTRY_CHPLAN_ENT("MD", 0x26, DEF    , 0, 1),
1703 	COUNTRY_CHPLAN_ENT("ME", 0x26, DEF    , 0, 1),
1704 	COUNTRY_CHPLAN_ENT("MK", 0x26, DEF    , 0, 1),
1705 	COUNTRY_CHPLAN_ENT("MT", 0x26, DEF    , 0, 1),
1706 	COUNTRY_CHPLAN_ENT("MX", 0x34, DEF    , 0, 1),
1707 	COUNTRY_CHPLAN_ENT("MY", 0x63, DEF    , 0, 1),
1708 	COUNTRY_CHPLAN_ENT("MZ", 0x26, DEF    , 0, 1),
1709 	COUNTRY_CHPLAN_ENT("NA", 0x26, DEF    , 0, 1),
1710 	COUNTRY_CHPLAN_ENT("NG", 0x75, DEF    , 0, 1),
1711 	COUNTRY_CHPLAN_ENT("NI", 0x76, DEF    , 0, 1),
1712 	COUNTRY_CHPLAN_ENT("NL", 0x26, DEF    , 0, 1),
1713 	COUNTRY_CHPLAN_ENT("NO", 0x26, DEF    , 0, 1),
1714 	COUNTRY_CHPLAN_ENT("NZ", 0x45, DEF    , 0, 1),
1715 	COUNTRY_CHPLAN_ENT("OM", 0x26, DEF    , 0, 1),
1716 	COUNTRY_CHPLAN_ENT("PA", 0x76, DEF    , 0, 1),
1717 	COUNTRY_CHPLAN_ENT("PE", 0x76, DEF    , 0, 1),
1718 	COUNTRY_CHPLAN_ENT("PG", 0x35, DEF    , 0, 1),
1719 	COUNTRY_CHPLAN_ENT("PH", 0x35, DEF    , 0, 1),
1720 	COUNTRY_CHPLAN_ENT("PK", 0x51, DEF    , 0, 1),
1721 	COUNTRY_CHPLAN_ENT("PL", 0x26, DEF    , 0, 1),
1722 	COUNTRY_CHPLAN_ENT("PR", 0x76, DEF    , 0, 1),
1723 	COUNTRY_CHPLAN_ENT("PT", 0x26, DEF    , 0, 1),
1724 	COUNTRY_CHPLAN_ENT("PY", 0x76, DEF    , 0, 1),
1725 	COUNTRY_CHPLAN_ENT("QA", 0x35, DEF    , 0, 1),
1726 	COUNTRY_CHPLAN_ENT("RO", 0x26, DEF    , 0, 1),
1727 	COUNTRY_CHPLAN_ENT("RS", 0x26, DEF    , 0, 1),
1728 	COUNTRY_CHPLAN_ENT("RU", 0x59, DEF    , 0, 1),
1729 	COUNTRY_CHPLAN_ENT("SA", 0x35, DEF    , 0, 1),
1730 	COUNTRY_CHPLAN_ENT("SE", 0x26, DEF    , 0, 1),
1731 	COUNTRY_CHPLAN_ENT("SG", 0x35, DEF    , 0, 1),
1732 	COUNTRY_CHPLAN_ENT("SI", 0x26, DEF    , 0, 1),
1733 	COUNTRY_CHPLAN_ENT("SK", 0x26, DEF    , 0, 1),
1734 	COUNTRY_CHPLAN_ENT("SN", 0x26, DEF    , 0, 1),
1735 	COUNTRY_CHPLAN_ENT("SV", 0x30, DEF    , 0, 1),
1736 	COUNTRY_CHPLAN_ENT("TH", 0x35, DEF    , 0, 1),
1737 	COUNTRY_CHPLAN_ENT("TN", 0x47, DEF    , 0, 1),
1738 	COUNTRY_CHPLAN_ENT("TR", 0x26, DEF    , 0, 1),
1739 	COUNTRY_CHPLAN_ENT("TT", 0x76, DEF    , 0, 1),
1740 	COUNTRY_CHPLAN_ENT("TW", 0x76, DEF    , 0, 1),
1741 	COUNTRY_CHPLAN_ENT("UA", 0x35, DEF    , 0, 1),
1742 	COUNTRY_CHPLAN_ENT("US", 0x76, DEF    , 0, 1),
1743 	COUNTRY_CHPLAN_ENT("UY", 0x30, DEF    , 0, 1),
1744 	COUNTRY_CHPLAN_ENT("VE", 0x30, DEF    , 0, 1),
1745 	COUNTRY_CHPLAN_ENT("VN", 0x35, DEF    , 0, 1),
1746 	COUNTRY_CHPLAN_ENT("ZA", 0x35, DEF    , 0, 1),
1747 	COUNTRY_CHPLAN_ENT("ZW", 0x26, DEF    , 0, 1),
1748 };
1749 #endif
1750 
1751 #if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8822BE) /* 2016 certify */
1752 static const struct country_chplan RTL8822BE_country_chplan_map[] = {
1753 	COUNTRY_CHPLAN_ENT("AE", 0x35, DEF    , 0, 1),
1754 	COUNTRY_CHPLAN_ENT("AL", 0x26, DEF    , 0, 1),
1755 	COUNTRY_CHPLAN_ENT("AM", 0x26, DEF    , 0, 1),
1756 	COUNTRY_CHPLAN_ENT("AN", 0x76, DEF    , 0, 1),
1757 	COUNTRY_CHPLAN_ENT("AO", 0x47, DEF    , 0, 1),
1758 	COUNTRY_CHPLAN_ENT("AR", 0x61, DEF    , 0, 1),
1759 	COUNTRY_CHPLAN_ENT("AT", 0x26, DEF    , 0, 1),
1760 	COUNTRY_CHPLAN_ENT("AU", 0x45, DEF    , 0, 1),
1761 	COUNTRY_CHPLAN_ENT("AZ", 0x26, DEF    , 0, 1),
1762 	COUNTRY_CHPLAN_ENT("BA", 0x26, DEF    , 0, 1),
1763 	COUNTRY_CHPLAN_ENT("BB", 0x76, DEF    , 0, 1),
1764 	COUNTRY_CHPLAN_ENT("BD", 0x26, DEF    , 0, 1),
1765 	COUNTRY_CHPLAN_ENT("BE", 0x26, DEF    , 0, 1),
1766 	COUNTRY_CHPLAN_ENT("BF", 0x26, DEF    , 0, 1),
1767 	COUNTRY_CHPLAN_ENT("BG", 0x26, DEF    , 0, 1),
1768 	COUNTRY_CHPLAN_ENT("BH", 0x48, DEF    , 0, 1),
1769 	COUNTRY_CHPLAN_ENT("BI", 0x26, DEF    , 0, 1),
1770 	COUNTRY_CHPLAN_ENT("BJ", 0x26, DEF    , 0, 1),
1771 	COUNTRY_CHPLAN_ENT("BM", 0x76, DEF    , 0, 1),
1772 	COUNTRY_CHPLAN_ENT("BN", 0x47, DEF    , 0, 1),
1773 	COUNTRY_CHPLAN_ENT("BO", 0x73, DEF    , 0, 1),
1774 	COUNTRY_CHPLAN_ENT("BR", 0x62, DEF    , 0, 1),
1775 	COUNTRY_CHPLAN_ENT("BS", 0x76, DEF    , 0, 1),
1776 	COUNTRY_CHPLAN_ENT("BW", 0x35, DEF    , 0, 1),
1777 	COUNTRY_CHPLAN_ENT("BY", 0x26, DEF    , 0, 1),
1778 	COUNTRY_CHPLAN_ENT("CA", 0x2B, DEF    , 0, 1),
1779 	COUNTRY_CHPLAN_ENT("CD", 0x26, DEF    , 0, 1),
1780 	COUNTRY_CHPLAN_ENT("CF", 0x26, DEF    , 0, 1),
1781 	COUNTRY_CHPLAN_ENT("CG", 0x26, DEF    , 0, 1),
1782 	COUNTRY_CHPLAN_ENT("CH", 0x26, DEF    , 0, 1),
1783 	COUNTRY_CHPLAN_ENT("CI", 0x42, DEF    , 0, 1),
1784 	COUNTRY_CHPLAN_ENT("CL", 0x2D, DEF    , 0, 1),
1785 	COUNTRY_CHPLAN_ENT("CM", 0x26, DEF    , 0, 1),
1786 	COUNTRY_CHPLAN_ENT("CN", 0x48, DEF    , 0, 1),
1787 	COUNTRY_CHPLAN_ENT("CO", 0x76, DEF    , 0, 1),
1788 	COUNTRY_CHPLAN_ENT("CR", 0x76, DEF    , 0, 1),
1789 	COUNTRY_CHPLAN_ENT("CV", 0x26, DEF    , 0, 1),
1790 	COUNTRY_CHPLAN_ENT("CY", 0x26, DEF    , 0, 1),
1791 	COUNTRY_CHPLAN_ENT("CZ", 0x26, DEF    , 0, 1),
1792 	COUNTRY_CHPLAN_ENT("DE", 0x26, DEF    , 0, 1),
1793 	COUNTRY_CHPLAN_ENT("DJ", 0x26, DEF    , 0, 1),
1794 	COUNTRY_CHPLAN_ENT("DK", 0x26, DEF    , 0, 1),
1795 	COUNTRY_CHPLAN_ENT("DO", 0x76, DEF    , 0, 1),
1796 	COUNTRY_CHPLAN_ENT("DZ", 0x00, DEF    , 0, 1),
1797 	COUNTRY_CHPLAN_ENT("EC", 0x76, DEF    , 0, 1),
1798 	COUNTRY_CHPLAN_ENT("EE", 0x26, DEF    , 0, 1),
1799 	COUNTRY_CHPLAN_ENT("EG", 0x47, DEF    , 0, 1),
1800 	COUNTRY_CHPLAN_ENT("EH", 0x47, DEF    , 0, 1),
1801 	COUNTRY_CHPLAN_ENT("ES", 0x26, DEF    , 0, 1),
1802 	COUNTRY_CHPLAN_ENT("FI", 0x26, DEF    , 0, 1),
1803 	COUNTRY_CHPLAN_ENT("FJ", 0x76, DEF    , 0, 1),
1804 	COUNTRY_CHPLAN_ENT("FR", 0x26, DEF    , 0, 1),
1805 	COUNTRY_CHPLAN_ENT("GA", 0x26, DEF    , 0, 1),
1806 	COUNTRY_CHPLAN_ENT("GB", 0x26, DEF    , 0, 1),
1807 	COUNTRY_CHPLAN_ENT("GE", 0x26, DEF    , 0, 1),
1808 	COUNTRY_CHPLAN_ENT("GH", 0x26, DEF    , 0, 1),
1809 	COUNTRY_CHPLAN_ENT("GI", 0x26, DEF    , 0, 1),
1810 	COUNTRY_CHPLAN_ENT("GL", 0x26, DEF    , 0, 1),
1811 	COUNTRY_CHPLAN_ENT("GM", 0x26, DEF    , 0, 1),
1812 	COUNTRY_CHPLAN_ENT("GN", 0x26, DEF    , 0, 1),
1813 	COUNTRY_CHPLAN_ENT("GP", 0x26, DEF    , 0, 1),
1814 	COUNTRY_CHPLAN_ENT("GQ", 0x26, DEF    , 0, 1),
1815 	COUNTRY_CHPLAN_ENT("GR", 0x26, DEF    , 0, 1),
1816 	COUNTRY_CHPLAN_ENT("GT", 0x61, DEF    , 0, 1),
1817 	COUNTRY_CHPLAN_ENT("GU", 0x76, DEF    , 0, 1),
1818 	COUNTRY_CHPLAN_ENT("GW", 0x26, DEF    , 0, 1),
1819 	COUNTRY_CHPLAN_ENT("HK", 0x35, DEF    , 0, 1),
1820 	COUNTRY_CHPLAN_ENT("HN", 0x32, DEF    , 0, 1),
1821 	COUNTRY_CHPLAN_ENT("HR", 0x26, DEF    , 0, 1),
1822 	COUNTRY_CHPLAN_ENT("HT", 0x76, DEF    , 0, 1),
1823 	COUNTRY_CHPLAN_ENT("HU", 0x26, DEF    , 0, 1),
1824 	COUNTRY_CHPLAN_ENT("ID", 0x3D, DEF    , 0, 0),
1825 	COUNTRY_CHPLAN_ENT("IE", 0x26, DEF    , 0, 1),
1826 	COUNTRY_CHPLAN_ENT("IL", 0x47, DEF    , 0, 1),
1827 	COUNTRY_CHPLAN_ENT("IN", 0x48, DEF    , 0, 1),
1828 	COUNTRY_CHPLAN_ENT("IS", 0x26, DEF    , 0, 1),
1829 	COUNTRY_CHPLAN_ENT("IT", 0x26, DEF    , 0, 1),
1830 	COUNTRY_CHPLAN_ENT("JM", 0x32, DEF    , 0, 1),
1831 	COUNTRY_CHPLAN_ENT("JO", 0x49, DEF    , 0, 1),
1832 	COUNTRY_CHPLAN_ENT("JP", 0x27, DEF    , 0, 1),
1833 	COUNTRY_CHPLAN_ENT("KE", 0x47, DEF    , 0, 1),
1834 	COUNTRY_CHPLAN_ENT("KG", 0x26, DEF    , 0, 1),
1835 	COUNTRY_CHPLAN_ENT("KH", 0x26, DEF    , 0, 1),
1836 	COUNTRY_CHPLAN_ENT("KR", 0x28, DEF    , 0, 1),
1837 	COUNTRY_CHPLAN_ENT("KW", 0x26, DEF    , 0, 1),
1838 	COUNTRY_CHPLAN_ENT("KZ", 0x26, DEF    , 0, 1),
1839 	COUNTRY_CHPLAN_ENT("LB", 0x26, DEF    , 0, 1),
1840 	COUNTRY_CHPLAN_ENT("LI", 0x26, DEF    , 0, 1),
1841 	COUNTRY_CHPLAN_ENT("LK", 0x26, DEF    , 0, 1),
1842 	COUNTRY_CHPLAN_ENT("LR", 0x26, DEF    , 0, 1),
1843 	COUNTRY_CHPLAN_ENT("LS", 0x26, DEF    , 0, 1),
1844 	COUNTRY_CHPLAN_ENT("LT", 0x26, DEF    , 0, 1),
1845 	COUNTRY_CHPLAN_ENT("LU", 0x26, DEF    , 0, 1),
1846 	COUNTRY_CHPLAN_ENT("LV", 0x26, DEF    , 0, 1),
1847 	COUNTRY_CHPLAN_ENT("MA", 0x47, DEF    , 0, 1),
1848 	COUNTRY_CHPLAN_ENT("MC", 0x26, DEF    , 0, 1),
1849 	COUNTRY_CHPLAN_ENT("MD", 0x26, DEF    , 0, 1),
1850 	COUNTRY_CHPLAN_ENT("ME", 0x26, DEF    , 0, 1),
1851 	COUNTRY_CHPLAN_ENT("MG", 0x26, DEF    , 0, 1),
1852 	COUNTRY_CHPLAN_ENT("MK", 0x26, DEF    , 0, 1),
1853 	COUNTRY_CHPLAN_ENT("ML", 0x26, DEF    , 0, 1),
1854 	COUNTRY_CHPLAN_ENT("MO", 0x35, DEF    , 0, 1),
1855 	COUNTRY_CHPLAN_ENT("MQ", 0x26, DEF    , 0, 1),
1856 	COUNTRY_CHPLAN_ENT("MR", 0x26, DEF    , 0, 1),
1857 	COUNTRY_CHPLAN_ENT("MT", 0x26, DEF    , 0, 1),
1858 	COUNTRY_CHPLAN_ENT("MU", 0x26, DEF    , 0, 1),
1859 	COUNTRY_CHPLAN_ENT("MW", 0x26, DEF    , 0, 1),
1860 	COUNTRY_CHPLAN_ENT("MX", 0x4D, DEF    , 0, 1),
1861 	COUNTRY_CHPLAN_ENT("MY", 0x63, DEF    , 0, 1),
1862 	COUNTRY_CHPLAN_ENT("MZ", 0x26, DEF    , 0, 1),
1863 	COUNTRY_CHPLAN_ENT("NA", 0x26, DEF    , 0, 1),
1864 	COUNTRY_CHPLAN_ENT("NE", 0x26, DEF    , 0, 1),
1865 	COUNTRY_CHPLAN_ENT("NG", 0x75, DEF    , 0, 1),
1866 	COUNTRY_CHPLAN_ENT("NI", 0x76, DEF    , 0, 1),
1867 	COUNTRY_CHPLAN_ENT("NL", 0x26, DEF    , 0, 1),
1868 	COUNTRY_CHPLAN_ENT("NO", 0x26, DEF    , 0, 1),
1869 	COUNTRY_CHPLAN_ENT("NP", 0x48, DEF    , 0, 1),
1870 	COUNTRY_CHPLAN_ENT("NZ", 0x45, DEF    , 0, 1),
1871 	COUNTRY_CHPLAN_ENT("OM", 0x26, DEF    , 0, 1),
1872 	COUNTRY_CHPLAN_ENT("PA", 0x76, DEF    , 0, 1),
1873 	COUNTRY_CHPLAN_ENT("PE", 0x76, DEF    , 0, 1),
1874 	COUNTRY_CHPLAN_ENT("PG", 0x35, DEF    , 0, 1),
1875 	COUNTRY_CHPLAN_ENT("PH", 0x35, DEF    , 0, 1),
1876 	COUNTRY_CHPLAN_ENT("PK", 0x51, DEF    , 0, 1),
1877 	COUNTRY_CHPLAN_ENT("PL", 0x26, DEF    , 0, 1),
1878 	COUNTRY_CHPLAN_ENT("PR", 0x76, DEF    , 0, 1),
1879 	COUNTRY_CHPLAN_ENT("PT", 0x26, DEF    , 0, 1),
1880 	COUNTRY_CHPLAN_ENT("PY", 0x76, DEF    , 0, 1),
1881 	COUNTRY_CHPLAN_ENT("QA", 0x35, DEF    , 0, 1),
1882 	COUNTRY_CHPLAN_ENT("RO", 0x26, DEF    , 0, 1),
1883 	COUNTRY_CHPLAN_ENT("RS", 0x26, DEF    , 0, 1),
1884 	COUNTRY_CHPLAN_ENT("RU", 0x59, DEF    , 0, 1),
1885 	COUNTRY_CHPLAN_ENT("SA", 0x35, DEF    , 0, 1),
1886 	COUNTRY_CHPLAN_ENT("SC", 0x76, DEF    , 0, 1),
1887 	COUNTRY_CHPLAN_ENT("SE", 0x26, DEF    , 0, 1),
1888 	COUNTRY_CHPLAN_ENT("SG", 0x35, DEF    , 0, 1),
1889 	COUNTRY_CHPLAN_ENT("SI", 0x26, DEF    , 0, 1),
1890 	COUNTRY_CHPLAN_ENT("SK", 0x26, DEF    , 0, 1),
1891 	COUNTRY_CHPLAN_ENT("SL", 0x26, DEF    , 0, 1),
1892 	COUNTRY_CHPLAN_ENT("SN", 0x26, DEF    , 0, 1),
1893 	COUNTRY_CHPLAN_ENT("ST", 0x76, DEF    , 0, 1),
1894 	COUNTRY_CHPLAN_ENT("SV", 0x30, DEF    , 0, 1),
1895 	COUNTRY_CHPLAN_ENT("TD", 0x26, DEF    , 0, 1),
1896 	COUNTRY_CHPLAN_ENT("TF", 0x26, DEF    , 0, 1),
1897 	COUNTRY_CHPLAN_ENT("TG", 0x26, DEF    , 0, 1),
1898 	COUNTRY_CHPLAN_ENT("TH", 0x35, DEF    , 0, 1),
1899 	COUNTRY_CHPLAN_ENT("TJ", 0x26, DEF    , 0, 1),
1900 	COUNTRY_CHPLAN_ENT("TN", 0x47, DEF    , 0, 1),
1901 	COUNTRY_CHPLAN_ENT("TR", 0x26, DEF    , 0, 1),
1902 	COUNTRY_CHPLAN_ENT("TT", 0x76, DEF    , 0, 1),
1903 	COUNTRY_CHPLAN_ENT("TW", 0x76, DEF    , 0, 1),
1904 	COUNTRY_CHPLAN_ENT("TZ", 0x26, DEF    , 0, 1),
1905 	COUNTRY_CHPLAN_ENT("UA", 0x35, UKRAINE, 0, 1),
1906 	COUNTRY_CHPLAN_ENT("UG", 0x26, DEF    , 0, 1),
1907 	COUNTRY_CHPLAN_ENT("US", 0x76, DEF    , 0, 1),
1908 	COUNTRY_CHPLAN_ENT("UY", 0x30, DEF    , 0, 1),
1909 	COUNTRY_CHPLAN_ENT("UZ", 0x47, DEF    , 0, 1),
1910 	COUNTRY_CHPLAN_ENT("VE", 0x30, DEF    , 0, 1),
1911 	COUNTRY_CHPLAN_ENT("VN", 0x35, DEF    , 0, 1),
1912 	COUNTRY_CHPLAN_ENT("YT", 0x26, DEF    , 0, 1),
1913 	COUNTRY_CHPLAN_ENT("ZA", 0x35, DEF    , 0, 1),
1914 	COUNTRY_CHPLAN_ENT("ZM", 0x26, DEF    , 0, 1),
1915 	COUNTRY_CHPLAN_ENT("ZW", 0x26, DEF    , 0, 1),
1916 };
1917 #endif
1918 
1919 #if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8821CE) /* 2016 certify */
1920 static const struct country_chplan RTL8821CE_country_chplan_map[] = {
1921 	COUNTRY_CHPLAN_ENT("AE", 0x35, DEF    , 0, 1),
1922 	COUNTRY_CHPLAN_ENT("AL", 0x26, DEF    , 0, 1),
1923 	COUNTRY_CHPLAN_ENT("AM", 0x26, DEF    , 0, 1),
1924 	COUNTRY_CHPLAN_ENT("AN", 0x76, DEF    , 0, 1),
1925 	COUNTRY_CHPLAN_ENT("AO", 0x47, DEF    , 0, 1),
1926 	COUNTRY_CHPLAN_ENT("AR", 0x61, DEF    , 0, 1),
1927 	COUNTRY_CHPLAN_ENT("AT", 0x26, DEF    , 0, 1),
1928 	COUNTRY_CHPLAN_ENT("AU", 0x45, DEF    , 0, 1),
1929 	COUNTRY_CHPLAN_ENT("AZ", 0x26, DEF    , 0, 1),
1930 	COUNTRY_CHPLAN_ENT("BA", 0x26, DEF    , 0, 1),
1931 	COUNTRY_CHPLAN_ENT("BB", 0x76, DEF    , 0, 1),
1932 	COUNTRY_CHPLAN_ENT("BD", 0x26, DEF    , 0, 1),
1933 	COUNTRY_CHPLAN_ENT("BE", 0x26, DEF    , 0, 1),
1934 	COUNTRY_CHPLAN_ENT("BF", 0x26, DEF    , 0, 1),
1935 	COUNTRY_CHPLAN_ENT("BG", 0x26, DEF    , 0, 1),
1936 	COUNTRY_CHPLAN_ENT("BH", 0x48, DEF    , 0, 1),
1937 	COUNTRY_CHPLAN_ENT("BI", 0x26, DEF    , 0, 1),
1938 	COUNTRY_CHPLAN_ENT("BJ", 0x26, DEF    , 0, 1),
1939 	COUNTRY_CHPLAN_ENT("BM", 0x76, DEF    , 0, 1),
1940 	COUNTRY_CHPLAN_ENT("BN", 0x47, DEF    , 0, 1),
1941 	COUNTRY_CHPLAN_ENT("BO", 0x73, DEF    , 0, 1),
1942 	COUNTRY_CHPLAN_ENT("BR", 0x62, DEF    , 0, 1),
1943 	COUNTRY_CHPLAN_ENT("BS", 0x76, DEF    , 0, 1),
1944 	COUNTRY_CHPLAN_ENT("BW", 0x35, DEF    , 0, 1),
1945 	COUNTRY_CHPLAN_ENT("BY", 0x26, DEF    , 0, 1),
1946 	COUNTRY_CHPLAN_ENT("CA", 0x2B, DEF    , 0, 1),
1947 	COUNTRY_CHPLAN_ENT("CD", 0x26, DEF    , 0, 1),
1948 	COUNTRY_CHPLAN_ENT("CF", 0x26, DEF    , 0, 1),
1949 	COUNTRY_CHPLAN_ENT("CG", 0x26, DEF    , 0, 1),
1950 	COUNTRY_CHPLAN_ENT("CH", 0x26, DEF    , 0, 1),
1951 	COUNTRY_CHPLAN_ENT("CI", 0x42, DEF    , 0, 1),
1952 	COUNTRY_CHPLAN_ENT("CL", 0x2D, DEF    , 0, 1),
1953 	COUNTRY_CHPLAN_ENT("CM", 0x26, DEF    , 0, 1),
1954 	COUNTRY_CHPLAN_ENT("CN", 0x48, DEF    , 0, 1),
1955 	COUNTRY_CHPLAN_ENT("CO", 0x76, DEF    , 0, 1),
1956 	COUNTRY_CHPLAN_ENT("CR", 0x76, DEF    , 0, 1),
1957 	COUNTRY_CHPLAN_ENT("CV", 0x26, DEF    , 0, 1),
1958 	COUNTRY_CHPLAN_ENT("CY", 0x26, DEF    , 0, 1),
1959 	COUNTRY_CHPLAN_ENT("CZ", 0x26, DEF    , 0, 1),
1960 	COUNTRY_CHPLAN_ENT("DE", 0x26, DEF    , 0, 1),
1961 	COUNTRY_CHPLAN_ENT("DJ", 0x26, DEF    , 0, 1),
1962 	COUNTRY_CHPLAN_ENT("DK", 0x26, DEF    , 0, 1),
1963 	COUNTRY_CHPLAN_ENT("DO", 0x76, DEF    , 0, 1),
1964 	COUNTRY_CHPLAN_ENT("DZ", 0x00, DEF    , 0, 1),
1965 	COUNTRY_CHPLAN_ENT("EC", 0x76, DEF    , 0, 1),
1966 	COUNTRY_CHPLAN_ENT("EE", 0x26, DEF    , 0, 1),
1967 	COUNTRY_CHPLAN_ENT("EG", 0x47, DEF    , 0, 1),
1968 	COUNTRY_CHPLAN_ENT("EH", 0x47, DEF    , 0, 1),
1969 	COUNTRY_CHPLAN_ENT("ES", 0x26, DEF    , 0, 1),
1970 	COUNTRY_CHPLAN_ENT("ET", 0x26, DEF    , 0, 1),
1971 	COUNTRY_CHPLAN_ENT("FI", 0x26, DEF    , 0, 1),
1972 	COUNTRY_CHPLAN_ENT("FJ", 0x76, DEF    , 0, 1),
1973 	COUNTRY_CHPLAN_ENT("FR", 0x26, DEF    , 0, 1),
1974 	COUNTRY_CHPLAN_ENT("GA", 0x26, DEF    , 0, 1),
1975 	COUNTRY_CHPLAN_ENT("GB", 0x26, DEF    , 0, 1),
1976 	COUNTRY_CHPLAN_ENT("GE", 0x26, DEF    , 0, 1),
1977 	COUNTRY_CHPLAN_ENT("GH", 0x26, DEF    , 0, 1),
1978 	COUNTRY_CHPLAN_ENT("GI", 0x26, DEF    , 0, 1),
1979 	COUNTRY_CHPLAN_ENT("GL", 0x26, DEF    , 0, 1),
1980 	COUNTRY_CHPLAN_ENT("GM", 0x26, DEF    , 0, 1),
1981 	COUNTRY_CHPLAN_ENT("GN", 0x26, DEF    , 0, 1),
1982 	COUNTRY_CHPLAN_ENT("GP", 0x26, DEF    , 0, 1),
1983 	COUNTRY_CHPLAN_ENT("GQ", 0x26, DEF    , 0, 1),
1984 	COUNTRY_CHPLAN_ENT("GR", 0x26, DEF    , 0, 1),
1985 	COUNTRY_CHPLAN_ENT("GT", 0x61, DEF    , 0, 1),
1986 	COUNTRY_CHPLAN_ENT("GU", 0x76, DEF    , 0, 1),
1987 	COUNTRY_CHPLAN_ENT("GW", 0x26, DEF    , 0, 1),
1988 	COUNTRY_CHPLAN_ENT("HK", 0x35, DEF    , 0, 1),
1989 	COUNTRY_CHPLAN_ENT("HN", 0x32, DEF    , 0, 1),
1990 	COUNTRY_CHPLAN_ENT("HR", 0x26, DEF    , 0, 1),
1991 	COUNTRY_CHPLAN_ENT("HT", 0x76, DEF    , 0, 1),
1992 	COUNTRY_CHPLAN_ENT("HU", 0x26, DEF    , 0, 1),
1993 	COUNTRY_CHPLAN_ENT("ID", 0x3D, DEF    , 0, 0),
1994 	COUNTRY_CHPLAN_ENT("IE", 0x26, DEF    , 0, 1),
1995 	COUNTRY_CHPLAN_ENT("IL", 0x47, DEF    , 0, 1),
1996 	COUNTRY_CHPLAN_ENT("IN", 0x48, DEF    , 0, 1),
1997 	COUNTRY_CHPLAN_ENT("IS", 0x26, DEF    , 0, 1),
1998 	COUNTRY_CHPLAN_ENT("IT", 0x26, DEF    , 0, 1),
1999 	COUNTRY_CHPLAN_ENT("JM", 0x32, DEF    , 0, 1),
2000 	COUNTRY_CHPLAN_ENT("JO", 0x49, DEF    , 0, 1),
2001 	COUNTRY_CHPLAN_ENT("JP", 0x27, DEF    , 0, 1),
2002 	COUNTRY_CHPLAN_ENT("KE", 0x47, DEF    , 0, 1),
2003 	COUNTRY_CHPLAN_ENT("KG", 0x26, DEF    , 0, 1),
2004 	COUNTRY_CHPLAN_ENT("KH", 0x26, DEF    , 0, 1),
2005 	COUNTRY_CHPLAN_ENT("KR", 0x28, DEF    , 0, 1),
2006 	COUNTRY_CHPLAN_ENT("KW", 0x26, DEF    , 0, 1),
2007 	COUNTRY_CHPLAN_ENT("KZ", 0x26, DEF    , 0, 1),
2008 	COUNTRY_CHPLAN_ENT("LB", 0x26, DEF    , 0, 1),
2009 	COUNTRY_CHPLAN_ENT("LI", 0x26, DEF    , 0, 1),
2010 	COUNTRY_CHPLAN_ENT("LK", 0x26, DEF    , 0, 1),
2011 	COUNTRY_CHPLAN_ENT("LR", 0x26, DEF    , 0, 1),
2012 	COUNTRY_CHPLAN_ENT("LS", 0x26, DEF    , 0, 1),
2013 	COUNTRY_CHPLAN_ENT("LT", 0x26, DEF    , 0, 1),
2014 	COUNTRY_CHPLAN_ENT("LU", 0x26, DEF    , 0, 1),
2015 	COUNTRY_CHPLAN_ENT("LV", 0x26, DEF    , 0, 1),
2016 	COUNTRY_CHPLAN_ENT("MA", 0x47, DEF    , 0, 1),
2017 	COUNTRY_CHPLAN_ENT("MC", 0x26, DEF    , 0, 1),
2018 	COUNTRY_CHPLAN_ENT("MD", 0x26, DEF    , 0, 1),
2019 	COUNTRY_CHPLAN_ENT("ME", 0x26, DEF    , 0, 1),
2020 	COUNTRY_CHPLAN_ENT("MG", 0x26, DEF    , 0, 1),
2021 	COUNTRY_CHPLAN_ENT("MK", 0x26, DEF    , 0, 1),
2022 	COUNTRY_CHPLAN_ENT("ML", 0x26, DEF    , 0, 1),
2023 	COUNTRY_CHPLAN_ENT("MO", 0x35, DEF    , 0, 1),
2024 	COUNTRY_CHPLAN_ENT("MQ", 0x26, DEF    , 0, 1),
2025 	COUNTRY_CHPLAN_ENT("MR", 0x26, DEF    , 0, 1),
2026 	COUNTRY_CHPLAN_ENT("MT", 0x26, DEF    , 0, 1),
2027 	COUNTRY_CHPLAN_ENT("MU", 0x26, DEF    , 0, 1),
2028 	COUNTRY_CHPLAN_ENT("MW", 0x26, DEF    , 0, 1),
2029 	COUNTRY_CHPLAN_ENT("MX", 0x4D, DEF    , 0, 1),
2030 	COUNTRY_CHPLAN_ENT("MY", 0x63, DEF    , 0, 1),
2031 	COUNTRY_CHPLAN_ENT("MZ", 0x26, DEF    , 0, 1),
2032 	COUNTRY_CHPLAN_ENT("NA", 0x26, DEF    , 0, 1),
2033 	COUNTRY_CHPLAN_ENT("NE", 0x26, DEF    , 0, 1),
2034 	COUNTRY_CHPLAN_ENT("NG", 0x75, DEF    , 0, 1),
2035 	COUNTRY_CHPLAN_ENT("NI", 0x76, DEF    , 0, 1),
2036 	COUNTRY_CHPLAN_ENT("NL", 0x26, DEF    , 0, 1),
2037 	COUNTRY_CHPLAN_ENT("NO", 0x26, DEF    , 0, 1),
2038 	COUNTRY_CHPLAN_ENT("NP", 0x48, DEF    , 0, 1),
2039 	COUNTRY_CHPLAN_ENT("NZ", 0x45, DEF    , 0, 1),
2040 	COUNTRY_CHPLAN_ENT("OM", 0x26, DEF    , 0, 1),
2041 	COUNTRY_CHPLAN_ENT("PA", 0x76, DEF    , 0, 1),
2042 	COUNTRY_CHPLAN_ENT("PE", 0x76, DEF    , 0, 1),
2043 	COUNTRY_CHPLAN_ENT("PG", 0x35, DEF    , 0, 1),
2044 	COUNTRY_CHPLAN_ENT("PH", 0x35, DEF    , 0, 1),
2045 	COUNTRY_CHPLAN_ENT("PK", 0x51, DEF    , 0, 1),
2046 	COUNTRY_CHPLAN_ENT("PL", 0x26, DEF    , 0, 1),
2047 	COUNTRY_CHPLAN_ENT("PR", 0x76, DEF    , 0, 1),
2048 	COUNTRY_CHPLAN_ENT("PT", 0x26, DEF    , 0, 1),
2049 	COUNTRY_CHPLAN_ENT("PY", 0x76, DEF    , 0, 1),
2050 	COUNTRY_CHPLAN_ENT("QA", 0x35, DEF    , 0, 1),
2051 	COUNTRY_CHPLAN_ENT("RO", 0x26, DEF    , 0, 1),
2052 	COUNTRY_CHPLAN_ENT("RS", 0x26, DEF    , 0, 1),
2053 	COUNTRY_CHPLAN_ENT("RU", 0x59, DEF    , 0, 1),
2054 	COUNTRY_CHPLAN_ENT("SA", 0x35, DEF    , 0, 1),
2055 	COUNTRY_CHPLAN_ENT("SC", 0x76, DEF    , 0, 1),
2056 	COUNTRY_CHPLAN_ENT("SE", 0x26, DEF    , 0, 1),
2057 	COUNTRY_CHPLAN_ENT("SG", 0x35, DEF    , 0, 1),
2058 	COUNTRY_CHPLAN_ENT("SI", 0x26, DEF    , 0, 1),
2059 	COUNTRY_CHPLAN_ENT("SK", 0x26, DEF    , 0, 1),
2060 	COUNTRY_CHPLAN_ENT("SL", 0x26, DEF    , 0, 1),
2061 	COUNTRY_CHPLAN_ENT("SN", 0x26, DEF    , 0, 1),
2062 	COUNTRY_CHPLAN_ENT("ST", 0x76, DEF    , 0, 1),
2063 	COUNTRY_CHPLAN_ENT("SV", 0x30, DEF    , 0, 1),
2064 	COUNTRY_CHPLAN_ENT("TD", 0x26, DEF    , 0, 1),
2065 	COUNTRY_CHPLAN_ENT("TF", 0x26, DEF    , 0, 1),
2066 	COUNTRY_CHPLAN_ENT("TG", 0x26, DEF    , 0, 1),
2067 	COUNTRY_CHPLAN_ENT("TH", 0x35, DEF    , 0, 1),
2068 	COUNTRY_CHPLAN_ENT("TJ", 0x26, DEF    , 0, 1),
2069 	COUNTRY_CHPLAN_ENT("TN", 0x47, DEF    , 0, 1),
2070 	COUNTRY_CHPLAN_ENT("TR", 0x26, DEF    , 0, 1),
2071 	COUNTRY_CHPLAN_ENT("TW", 0x76, DEF    , 0, 1),
2072 	COUNTRY_CHPLAN_ENT("TZ", 0x26, DEF    , 0, 1),
2073 	COUNTRY_CHPLAN_ENT("UA", 0x35, UKRAINE, 0, 1),
2074 	COUNTRY_CHPLAN_ENT("UG", 0x26, DEF    , 0, 1),
2075 	COUNTRY_CHPLAN_ENT("US", 0x76, DEF    , 0, 1),
2076 	COUNTRY_CHPLAN_ENT("UY", 0x30, DEF    , 0, 1),
2077 	COUNTRY_CHPLAN_ENT("UZ", 0x47, DEF    , 0, 1),
2078 	COUNTRY_CHPLAN_ENT("VE", 0x30, DEF    , 0, 1),
2079 	COUNTRY_CHPLAN_ENT("VN", 0x35, DEF    , 0, 1),
2080 	COUNTRY_CHPLAN_ENT("YT", 0x26, DEF    , 0, 1),
2081 	COUNTRY_CHPLAN_ENT("ZA", 0x35, DEF    , 0, 1),
2082 	COUNTRY_CHPLAN_ENT("ZM", 0x26, DEF    , 0, 1),
2083 	COUNTRY_CHPLAN_ENT("ZW", 0x26, DEF    , 0, 1),
2084 };
2085 #endif
2086 
2087 #if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8822CE) /* 2018 certify */
2088 static const struct country_chplan RTL8822CE_country_chplan_map[] = {
2089 	COUNTRY_CHPLAN_ENT("AE", 0x35, DEF    , 0, 1),
2090 	COUNTRY_CHPLAN_ENT("AL", 0x26, DEF    , 0, 1),
2091 	COUNTRY_CHPLAN_ENT("AM", 0x26, DEF    , 0, 1),
2092 	COUNTRY_CHPLAN_ENT("AN", 0x76, DEF    , 0, 1),
2093 	COUNTRY_CHPLAN_ENT("AO", 0x47, DEF    , 0, 1),
2094 	COUNTRY_CHPLAN_ENT("AR", 0x61, DEF    , 0, 1),
2095 	COUNTRY_CHPLAN_ENT("AT", 0x26, DEF    , 0, 1),
2096 	COUNTRY_CHPLAN_ENT("AU", 0x45, DEF    , 0, 1),
2097 	COUNTRY_CHPLAN_ENT("AW", 0x76, DEF    , 0, 1),
2098 	COUNTRY_CHPLAN_ENT("AZ", 0x26, DEF    , 0, 1),
2099 	COUNTRY_CHPLAN_ENT("BA", 0x26, DEF    , 0, 1),
2100 	COUNTRY_CHPLAN_ENT("BB", 0x76, DEF    , 0, 1),
2101 	COUNTRY_CHPLAN_ENT("BD", 0x26, DEF    , 0, 1),
2102 	COUNTRY_CHPLAN_ENT("BE", 0x26, DEF    , 0, 1),
2103 	COUNTRY_CHPLAN_ENT("BF", 0x26, DEF    , 0, 1),
2104 	COUNTRY_CHPLAN_ENT("BG", 0x26, DEF    , 0, 1),
2105 	COUNTRY_CHPLAN_ENT("BH", 0x48, DEF    , 0, 1),
2106 	COUNTRY_CHPLAN_ENT("BI", 0x26, DEF    , 0, 1),
2107 	COUNTRY_CHPLAN_ENT("BJ", 0x26, DEF    , 0, 1),
2108 	COUNTRY_CHPLAN_ENT("BM", 0x76, DEF    , 0, 1),
2109 	COUNTRY_CHPLAN_ENT("BN", 0x47, DEF    , 0, 1),
2110 	COUNTRY_CHPLAN_ENT("BO", 0x73, DEF    , 0, 1),
2111 	COUNTRY_CHPLAN_ENT("BR", 0x62, DEF    , 0, 1),
2112 	COUNTRY_CHPLAN_ENT("BS", 0x76, DEF    , 0, 1),
2113 	COUNTRY_CHPLAN_ENT("BW", 0x35, DEF    , 0, 1),
2114 	COUNTRY_CHPLAN_ENT("BY", 0x26, DEF    , 0, 1),
2115 	COUNTRY_CHPLAN_ENT("CA", 0x2B, DEF    , 0, 1),
2116 	COUNTRY_CHPLAN_ENT("CD", 0x26, DEF    , 0, 1),
2117 	COUNTRY_CHPLAN_ENT("CF", 0x26, DEF    , 0, 1),
2118 	COUNTRY_CHPLAN_ENT("CG", 0x26, DEF    , 0, 1),
2119 	COUNTRY_CHPLAN_ENT("CH", 0x26, DEF    , 0, 1),
2120 	COUNTRY_CHPLAN_ENT("CI", 0x42, DEF    , 0, 1),
2121 	COUNTRY_CHPLAN_ENT("CL", 0x2D, DEF    , 0, 1),
2122 	COUNTRY_CHPLAN_ENT("CM", 0x26, DEF    , 0, 1),
2123 	COUNTRY_CHPLAN_ENT("CN", 0x48, CN     , 0, 1),
2124 	COUNTRY_CHPLAN_ENT("CO", 0x76, DEF    , 0, 1),
2125 	COUNTRY_CHPLAN_ENT("CR", 0x76, DEF    , 0, 1),
2126 	COUNTRY_CHPLAN_ENT("CV", 0x26, DEF    , 0, 1),
2127 	COUNTRY_CHPLAN_ENT("CY", 0x26, DEF    , 0, 1),
2128 	COUNTRY_CHPLAN_ENT("CZ", 0x26, DEF    , 0, 1),
2129 	COUNTRY_CHPLAN_ENT("DE", 0x26, DEF    , 0, 1),
2130 	COUNTRY_CHPLAN_ENT("DJ", 0x26, DEF    , 0, 1),
2131 	COUNTRY_CHPLAN_ENT("DK", 0x26, DEF    , 0, 1),
2132 	COUNTRY_CHPLAN_ENT("DO", 0x76, DEF    , 0, 1),
2133 	COUNTRY_CHPLAN_ENT("DZ", 0x00, DEF    , 0, 1),
2134 	COUNTRY_CHPLAN_ENT("EC", 0x76, DEF    , 0, 1),
2135 	COUNTRY_CHPLAN_ENT("EE", 0x26, DEF    , 0, 1),
2136 	COUNTRY_CHPLAN_ENT("EG", 0x47, DEF    , 0, 1),
2137 	COUNTRY_CHPLAN_ENT("EH", 0x47, DEF    , 0, 1),
2138 	COUNTRY_CHPLAN_ENT("ES", 0x26, DEF    , 0, 1),
2139 	COUNTRY_CHPLAN_ENT("ET", 0x26, DEF    , 0, 1),
2140 	COUNTRY_CHPLAN_ENT("FI", 0x26, DEF    , 0, 1),
2141 	COUNTRY_CHPLAN_ENT("FJ", 0x76, DEF    , 0, 1),
2142 	COUNTRY_CHPLAN_ENT("FR", 0x26, DEF    , 0, 1),
2143 	COUNTRY_CHPLAN_ENT("GA", 0x26, DEF    , 0, 1),
2144 	COUNTRY_CHPLAN_ENT("GB", 0x26, DEF    , 0, 1),
2145 	COUNTRY_CHPLAN_ENT("GE", 0x26, DEF    , 0, 1),
2146 	COUNTRY_CHPLAN_ENT("GH", 0x26, DEF    , 0, 1),
2147 	COUNTRY_CHPLAN_ENT("GI", 0x26, DEF    , 0, 1),
2148 	COUNTRY_CHPLAN_ENT("GL", 0x26, DEF    , 0, 1),
2149 	COUNTRY_CHPLAN_ENT("GM", 0x26, DEF    , 0, 1),
2150 	COUNTRY_CHPLAN_ENT("GN", 0x26, DEF    , 0, 1),
2151 	COUNTRY_CHPLAN_ENT("GP", 0x26, DEF    , 0, 1),
2152 	COUNTRY_CHPLAN_ENT("GQ", 0x26, DEF    , 0, 1),
2153 	COUNTRY_CHPLAN_ENT("GR", 0x26, DEF    , 0, 1),
2154 	COUNTRY_CHPLAN_ENT("GT", 0x61, DEF    , 0, 1),
2155 	COUNTRY_CHPLAN_ENT("GU", 0x76, DEF    , 0, 1),
2156 	COUNTRY_CHPLAN_ENT("GW", 0x26, DEF    , 0, 1),
2157 	COUNTRY_CHPLAN_ENT("HK", 0x35, DEF    , 0, 1),
2158 	COUNTRY_CHPLAN_ENT("HN", 0x32, DEF    , 0, 1),
2159 	COUNTRY_CHPLAN_ENT("HR", 0x26, DEF    , 0, 1),
2160 	COUNTRY_CHPLAN_ENT("HT", 0x76, DEF    , 0, 1),
2161 	COUNTRY_CHPLAN_ENT("HU", 0x26, DEF    , 0, 1),
2162 	COUNTRY_CHPLAN_ENT("IE", 0x26, DEF    , 0, 1),
2163 	COUNTRY_CHPLAN_ENT("IL", 0x47, DEF    , 0, 1),
2164 	COUNTRY_CHPLAN_ENT("IN", 0x48, DEF    , 0, 1),
2165 	COUNTRY_CHPLAN_ENT("IS", 0x26, DEF    , 0, 1),
2166 	COUNTRY_CHPLAN_ENT("IT", 0x26, DEF    , 0, 1),
2167 	COUNTRY_CHPLAN_ENT("JM", 0x32, DEF    , 0, 1),
2168 	COUNTRY_CHPLAN_ENT("JO", 0x49, DEF    , 0, 1),
2169 	COUNTRY_CHPLAN_ENT("JP", 0x27, DEF    , 0, 1),
2170 	COUNTRY_CHPLAN_ENT("KE", 0x47, DEF    , 0, 1),
2171 	COUNTRY_CHPLAN_ENT("KG", 0x26, DEF    , 0, 1),
2172 	COUNTRY_CHPLAN_ENT("KH", 0x26, DEF    , 0, 1),
2173 	COUNTRY_CHPLAN_ENT("KM", 0x26, DEF    , 0, 1),
2174 	COUNTRY_CHPLAN_ENT("KR", 0x4B, DEF    , 0, 1),
2175 	COUNTRY_CHPLAN_ENT("KW", 0x26, DEF    , 0, 1),
2176 	COUNTRY_CHPLAN_ENT("KZ", 0x26, DEF    , 0, 1),
2177 	COUNTRY_CHPLAN_ENT("LB", 0x26, DEF    , 0, 1),
2178 	COUNTRY_CHPLAN_ENT("LI", 0x26, DEF    , 0, 1),
2179 	COUNTRY_CHPLAN_ENT("LK", 0x26, DEF    , 0, 1),
2180 	COUNTRY_CHPLAN_ENT("LR", 0x26, DEF    , 0, 1),
2181 	COUNTRY_CHPLAN_ENT("LS", 0x26, DEF    , 0, 1),
2182 	COUNTRY_CHPLAN_ENT("LT", 0x26, DEF    , 0, 1),
2183 	COUNTRY_CHPLAN_ENT("LU", 0x26, DEF    , 0, 1),
2184 	COUNTRY_CHPLAN_ENT("LV", 0x26, DEF    , 0, 1),
2185 	COUNTRY_CHPLAN_ENT("MA", 0x47, DEF    , 0, 1),
2186 	COUNTRY_CHPLAN_ENT("MC", 0x26, DEF    , 0, 1),
2187 	COUNTRY_CHPLAN_ENT("MD", 0x26, DEF    , 0, 1),
2188 	COUNTRY_CHPLAN_ENT("ME", 0x26, DEF    , 0, 1),
2189 	COUNTRY_CHPLAN_ENT("MG", 0x26, DEF    , 0, 1),
2190 	COUNTRY_CHPLAN_ENT("MK", 0x26, DEF    , 0, 1),
2191 	COUNTRY_CHPLAN_ENT("ML", 0x26, DEF    , 0, 1),
2192 	COUNTRY_CHPLAN_ENT("MO", 0x35, DEF    , 0, 1),
2193 	COUNTRY_CHPLAN_ENT("MQ", 0x26, DEF    , 0, 1),
2194 	COUNTRY_CHPLAN_ENT("MR", 0x26, DEF    , 0, 1),
2195 	COUNTRY_CHPLAN_ENT("MT", 0x26, DEF    , 0, 1),
2196 	COUNTRY_CHPLAN_ENT("MU", 0x26, DEF    , 0, 1),
2197 	COUNTRY_CHPLAN_ENT("MW", 0x26, DEF    , 0, 1),
2198 	COUNTRY_CHPLAN_ENT("MX", 0x4D, DEF    , 0, 1),
2199 	COUNTRY_CHPLAN_ENT("MY", 0x63, DEF    , 0, 1),
2200 	COUNTRY_CHPLAN_ENT("MZ", 0x26, DEF    , 0, 1),
2201 	COUNTRY_CHPLAN_ENT("NA", 0x26, DEF    , 0, 1),
2202 	COUNTRY_CHPLAN_ENT("NE", 0x26, DEF    , 0, 1),
2203 	COUNTRY_CHPLAN_ENT("NG", 0x75, DEF    , 0, 1),
2204 	COUNTRY_CHPLAN_ENT("NI", 0x76, DEF    , 0, 1),
2205 	COUNTRY_CHPLAN_ENT("NL", 0x26, DEF    , 0, 1),
2206 	COUNTRY_CHPLAN_ENT("NO", 0x26, DEF    , 0, 1),
2207 	COUNTRY_CHPLAN_ENT("NP", 0x48, DEF    , 0, 1),
2208 	COUNTRY_CHPLAN_ENT("NZ", 0x45, DEF    , 0, 1),
2209 	COUNTRY_CHPLAN_ENT("OM", 0x26, DEF    , 0, 1),
2210 	COUNTRY_CHPLAN_ENT("PA", 0x76, DEF    , 0, 1),
2211 	COUNTRY_CHPLAN_ENT("PE", 0x76, DEF    , 0, 1),
2212 	COUNTRY_CHPLAN_ENT("PG", 0x35, DEF    , 0, 1),
2213 	COUNTRY_CHPLAN_ENT("PH", 0x35, DEF    , 0, 1),
2214 	COUNTRY_CHPLAN_ENT("PK", 0x51, DEF    , 0, 1),
2215 	COUNTRY_CHPLAN_ENT("PL", 0x26, DEF    , 0, 1),
2216 	COUNTRY_CHPLAN_ENT("PR", 0x76, DEF    , 0, 1),
2217 	COUNTRY_CHPLAN_ENT("PT", 0x26, DEF    , 0, 1),
2218 	COUNTRY_CHPLAN_ENT("PY", 0x76, DEF    , 0, 1),
2219 	COUNTRY_CHPLAN_ENT("QA", 0x35, DEF    , 0, 1),
2220 	COUNTRY_CHPLAN_ENT("RO", 0x26, DEF    , 0, 1),
2221 	COUNTRY_CHPLAN_ENT("RS", 0x26, DEF    , 0, 1),
2222 	COUNTRY_CHPLAN_ENT("RU", 0x59, DEF    , 0, 1),
2223 	COUNTRY_CHPLAN_ENT("SA", 0x35, DEF    , 0, 1),
2224 	COUNTRY_CHPLAN_ENT("SC", 0x76, DEF    , 0, 1),
2225 	COUNTRY_CHPLAN_ENT("SE", 0x26, DEF    , 0, 1),
2226 	COUNTRY_CHPLAN_ENT("SG", 0x35, DEF    , 0, 1),
2227 	COUNTRY_CHPLAN_ENT("SI", 0x26, DEF    , 0, 1),
2228 	COUNTRY_CHPLAN_ENT("SK", 0x26, DEF    , 0, 1),
2229 	COUNTRY_CHPLAN_ENT("SL", 0x26, DEF    , 0, 1),
2230 	COUNTRY_CHPLAN_ENT("SN", 0x26, DEF    , 0, 1),
2231 	COUNTRY_CHPLAN_ENT("ST", 0x76, DEF    , 0, 1),
2232 	COUNTRY_CHPLAN_ENT("SV", 0x30, DEF    , 0, 1),
2233 	COUNTRY_CHPLAN_ENT("SZ", 0x26, DEF    , 0, 1),
2234 	COUNTRY_CHPLAN_ENT("TD", 0x26, DEF    , 0, 1),
2235 	COUNTRY_CHPLAN_ENT("TF", 0x26, DEF    , 0, 1),
2236 	COUNTRY_CHPLAN_ENT("TG", 0x26, DEF    , 0, 1),
2237 	COUNTRY_CHPLAN_ENT("TH", 0x35, DEF    , 0, 1),
2238 	COUNTRY_CHPLAN_ENT("TJ", 0x26, DEF    , 0, 1),
2239 	COUNTRY_CHPLAN_ENT("TN", 0x47, DEF    , 0, 1),
2240 	COUNTRY_CHPLAN_ENT("TR", 0x26, DEF    , 0, 1),
2241 	COUNTRY_CHPLAN_ENT("TW", 0x76, DEF    , 0, 1),
2242 	COUNTRY_CHPLAN_ENT("TZ", 0x26, DEF    , 0, 1),
2243 	COUNTRY_CHPLAN_ENT("UA", 0x35, UKRAINE, 0, 1),
2244 	COUNTRY_CHPLAN_ENT("UG", 0x26, DEF    , 0, 1),
2245 	COUNTRY_CHPLAN_ENT("US", 0x76, DEF    , 0, 1),
2246 	COUNTRY_CHPLAN_ENT("UY", 0x30, DEF    , 0, 1),
2247 	COUNTRY_CHPLAN_ENT("UZ", 0x47, DEF    , 0, 1),
2248 	COUNTRY_CHPLAN_ENT("VE", 0x30, DEF    , 0, 1),
2249 	COUNTRY_CHPLAN_ENT("VN", 0x35, DEF    , 0, 1),
2250 	COUNTRY_CHPLAN_ENT("YT", 0x26, DEF    , 0, 1),
2251 	COUNTRY_CHPLAN_ENT("ZA", 0x35, DEF    , 0, 1),
2252 	COUNTRY_CHPLAN_ENT("ZM", 0x26, DEF    , 0, 1),
2253 	COUNTRY_CHPLAN_ENT("ZW", 0x26, DEF    , 0, 1),
2254 };
2255 #endif
2256 
2257 /**
2258  * rtw_def_module_country_chplan_map -
2259  * @hal_map: returned map
2260  * @return: size of map
2261  */
rtw_def_module_country_chplan_map(const struct country_chplan ** hal_map)2262 static u16 rtw_def_module_country_chplan_map(const struct country_chplan **hal_map)
2263 {
2264 	u16 hal_map_sz = 0;
2265 
2266 	/* TODO: runtime selection for multi driver */
2267 #if (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8821AE_HMC_M2)
2268 	*hal_map = RTL8821AE_HMC_M2_country_chplan_map;
2269 	hal_map_sz = sizeof(RTL8821AE_HMC_M2_country_chplan_map) / sizeof(struct country_chplan);
2270 #elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8821AU)
2271 	*hal_map = RTL8821AU_country_chplan_map;
2272 	hal_map_sz = sizeof(RTL8821AU_country_chplan_map) / sizeof(struct country_chplan);
2273 #elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8812AENF_NGFF)
2274 	*hal_map = RTL8812AENF_NGFF_country_chplan_map;
2275 	hal_map_sz = sizeof(RTL8812AENF_NGFF_country_chplan_map) / sizeof(struct country_chplan);
2276 #elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8812AEBT_HMC)
2277 	*hal_map = RTL8812AEBT_HMC_country_chplan_map;
2278 	hal_map_sz = sizeof(RTL8812AEBT_HMC_country_chplan_map) / sizeof(struct country_chplan);
2279 #elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8188EE_HMC_M2)
2280 	*hal_map = RTL8188EE_HMC_M2_country_chplan_map;
2281 	hal_map_sz = sizeof(RTL8188EE_HMC_M2_country_chplan_map) / sizeof(struct country_chplan);
2282 #elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8723BE_HMC_M2)
2283 	*hal_map = RTL8723BE_HMC_M2_country_chplan_map;
2284 	hal_map_sz = sizeof(RTL8723BE_HMC_M2_country_chplan_map) / sizeof(struct country_chplan);
2285 #elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8723BS_NGFF1216)
2286 	*hal_map = RTL8723BS_NGFF1216_country_chplan_map;
2287 	hal_map_sz = sizeof(RTL8723BS_NGFF1216_country_chplan_map) / sizeof(struct country_chplan);
2288 #elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8192EEBT_HMC_M2)
2289 	*hal_map = RTL8192EEBT_HMC_M2_country_chplan_map;
2290 	hal_map_sz = sizeof(RTL8192EEBT_HMC_M2_country_chplan_map) / sizeof(struct country_chplan);
2291 #elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8723DE_NGFF1630)
2292 	*hal_map = RTL8723DE_NGFF1630_country_chplan_map;
2293 	hal_map_sz = sizeof(RTL8723DE_NGFF1630_country_chplan_map) / sizeof(struct country_chplan);
2294 #elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8822BE)
2295 	*hal_map = RTL8822BE_country_chplan_map;
2296 	hal_map_sz = sizeof(RTL8822BE_country_chplan_map) / sizeof(struct country_chplan);
2297 #elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8821CE)
2298 	*hal_map = RTL8821CE_country_chplan_map;
2299 	hal_map_sz = sizeof(RTL8821CE_country_chplan_map) / sizeof(struct country_chplan);
2300 #elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8822CE)
2301 	*hal_map = RTL8822CE_country_chplan_map;
2302 	hal_map_sz = sizeof(RTL8822CE_country_chplan_map) / sizeof(struct country_chplan);
2303 #endif
2304 
2305 	return hal_map_sz;
2306 }
2307 #else
2308 
2309 static const struct country_chplan country_chplan_map[] = {
2310 	COUNTRY_CHPLAN_ENT("AD", 0x3A, DEF    , 1, 1), /* Andorra */
2311 	COUNTRY_CHPLAN_ENT("AE", 0x5E, DEF    , 1, 1), /* United Arab Emirates */
2312 	COUNTRY_CHPLAN_ENT("AF", 0x42, DEF    , 1, 1), /* Afghanistan */
2313 	COUNTRY_CHPLAN_ENT("AG", 0x76, DEF    , 1, 1), /* Antigua & Barbuda */
2314 	COUNTRY_CHPLAN_ENT("AI", 0x5E, DEF    , 1, 1), /* Anguilla(UK) */
2315 	COUNTRY_CHPLAN_ENT("AL", 0x5E, DEF    , 1, 1), /* Albania */
2316 	COUNTRY_CHPLAN_ENT("AM", 0x5E, DEF    , 1, 1), /* Armenia */
2317 	COUNTRY_CHPLAN_ENT("AN", 0x76, DEF    , 1, 1), /* Netherlands Antilles */
2318 	COUNTRY_CHPLAN_ENT("AO", 0x5E, DEF    , 1, 1), /* Angola */
2319 	COUNTRY_CHPLAN_ENT("AQ", 0x26, DEF    , 1, 1), /* Antarctica */
2320 	COUNTRY_CHPLAN_ENT("AR", 0x4D, DEF    , 1, 1), /* Argentina */
2321 	COUNTRY_CHPLAN_ENT("AS", 0x76, DEF    , 1, 1), /* American Samoa */
2322 	COUNTRY_CHPLAN_ENT("AT", 0x5E, DEF    , 1, 1), /* Austria */
2323 	COUNTRY_CHPLAN_ENT("AU", 0x03, DEF    , 1, 1), /* Australia */
2324 	COUNTRY_CHPLAN_ENT("AW", 0x76, DEF    , 1, 1), /* Aruba */
2325 	COUNTRY_CHPLAN_ENT("AZ", 0x5E, DEF    , 1, 1), /* Azerbaijan */
2326 	COUNTRY_CHPLAN_ENT("BA", 0x5E, DEF    , 1, 1), /* Bosnia & Herzegovina */
2327 	COUNTRY_CHPLAN_ENT("BB", 0x76, DEF    , 1, 1), /* Barbados */
2328 	COUNTRY_CHPLAN_ENT("BD", 0x5E, DEF    , 1, 1), /* Bangladesh */
2329 	COUNTRY_CHPLAN_ENT("BE", 0x5E, DEF    , 1, 1), /* Belgium */
2330 	COUNTRY_CHPLAN_ENT("BF", 0x5E, DEF    , 1, 1), /* Burkina Faso */
2331 	COUNTRY_CHPLAN_ENT("BG", 0x5E, DEF    , 1, 1), /* Bulgaria */
2332 	COUNTRY_CHPLAN_ENT("BH", 0x06, DEF    , 1, 1), /* Bahrain */
2333 	COUNTRY_CHPLAN_ENT("BI", 0x3A, DEF    , 1, 1), /* Burundi */
2334 	COUNTRY_CHPLAN_ENT("BJ", 0x3A, DEF    , 1, 1), /* Benin */
2335 	COUNTRY_CHPLAN_ENT("BM", 0x76, DEF    , 1, 1), /* Bermuda (UK) */
2336 	COUNTRY_CHPLAN_ENT("BN", 0x06, DEF    , 1, 1), /* Brunei */
2337 	COUNTRY_CHPLAN_ENT("BO", 0x61, DEF    , 1, 1), /* Bolivia */
2338 	COUNTRY_CHPLAN_ENT("BR", 0x62, DEF    , 1, 1), /* Brazil */
2339 	COUNTRY_CHPLAN_ENT("BS", 0x76, DEF    , 1, 1), /* Bahamas */
2340 	COUNTRY_CHPLAN_ENT("BT", 0x5E, DEF    , 1, 1), /* Bhutan */
2341 	COUNTRY_CHPLAN_ENT("BV", 0x5E, DEF    , 1, 1), /* Bouvet Island (Norway) */
2342 	COUNTRY_CHPLAN_ENT("BW", 0x5E, DEF    , 1, 1), /* Botswana */
2343 	COUNTRY_CHPLAN_ENT("BY", 0x08, DEF    , 0, 1), /* Belarus */
2344 	COUNTRY_CHPLAN_ENT("BZ", 0x76, DEF    , 1, 1), /* Belize */
2345 	COUNTRY_CHPLAN_ENT("CA", 0x2B, DEF    , 1, 1), /* Canada */
2346 	COUNTRY_CHPLAN_ENT("CC", 0x3A, DEF    , 1, 1), /* Cocos (Keeling) Islands (Australia) */
2347 	COUNTRY_CHPLAN_ENT("CD", 0x3A, DEF    , 1, 1), /* Congo, Republic of the */
2348 	COUNTRY_CHPLAN_ENT("CF", 0x3A, DEF    , 1, 1), /* Central African Republic */
2349 	COUNTRY_CHPLAN_ENT("CG", 0x3A, DEF    , 1, 1), /* Congo, Democratic Republic of the. Zaire */
2350 	COUNTRY_CHPLAN_ENT("CH", 0x5E, DEF    , 1, 1), /* Switzerland */
2351 	COUNTRY_CHPLAN_ENT("CI", 0x42, DEF    , 1, 1), /* Cote d'Ivoire */
2352 	COUNTRY_CHPLAN_ENT("CK", 0x5E, DEF    , 1, 1), /* Cook Islands */
2353 	COUNTRY_CHPLAN_ENT("CL", 0x76, CHILE  , 1, 1), /* Chile */
2354 	COUNTRY_CHPLAN_ENT("CM", 0x5E, DEF    , 1, 1), /* Cameroon */
2355 	COUNTRY_CHPLAN_ENT("CN", 0x06, CN     , 1, 1), /* China */
2356 	COUNTRY_CHPLAN_ENT("CO", 0x76, DEF    , 1, 1), /* Colombia */
2357 	COUNTRY_CHPLAN_ENT("CR", 0x76, DEF    , 1, 1), /* Costa Rica */
2358 	COUNTRY_CHPLAN_ENT("CV", 0x5E, DEF    , 1, 1), /* Cape Verde */
2359 	COUNTRY_CHPLAN_ENT("CX", 0x03, DEF    , 1, 1), /* Christmas Island (Australia) */
2360 	COUNTRY_CHPLAN_ENT("CY", 0x5E, DEF    , 1, 1), /* Cyprus */
2361 	COUNTRY_CHPLAN_ENT("CZ", 0x5E, DEF    , 1, 1), /* Czech Republic */
2362 	COUNTRY_CHPLAN_ENT("DE", 0x5E, DEF    , 1, 1), /* Germany */
2363 	COUNTRY_CHPLAN_ENT("DJ", 0x3A, DEF    , 1, 1), /* Djibouti */
2364 	COUNTRY_CHPLAN_ENT("DK", 0x5E, DEF    , 1, 1), /* Denmark */
2365 	COUNTRY_CHPLAN_ENT("DM", 0x76, DEF    , 1, 1), /* Dominica */
2366 	COUNTRY_CHPLAN_ENT("DO", 0x76, DEF    , 1, 1), /* Dominican Republic */
2367 	COUNTRY_CHPLAN_ENT("DZ", 0x00, DEF    , 1, 1), /* Algeria */
2368 	COUNTRY_CHPLAN_ENT("EC", 0x76, DEF    , 1, 1), /* Ecuador */
2369 	COUNTRY_CHPLAN_ENT("EE", 0x5E, DEF    , 1, 1), /* Estonia */
2370 	COUNTRY_CHPLAN_ENT("EG", 0x3C, DEF    , 1, 1), /* Egypt */
2371 	COUNTRY_CHPLAN_ENT("EH", 0x3C, DEF    , 1, 1), /* Western Sahara */
2372 	COUNTRY_CHPLAN_ENT("ER", 0x3A, DEF    , 1, 1), /* Eritrea */
2373 	COUNTRY_CHPLAN_ENT("ES", 0x5E, DEF    , 1, 1), /* Spain, Canary Islands, Ceuta, Melilla */
2374 	COUNTRY_CHPLAN_ENT("ET", 0x3A, DEF    , 1, 1), /* Ethiopia */
2375 	COUNTRY_CHPLAN_ENT("FI", 0x5E, DEF    , 1, 1), /* Finland */
2376 	COUNTRY_CHPLAN_ENT("FJ", 0x76, DEF    , 1, 1), /* Fiji */
2377 	COUNTRY_CHPLAN_ENT("FK", 0x3A, DEF    , 1, 1), /* Falkland Islands (Islas Malvinas) (UK) */
2378 	COUNTRY_CHPLAN_ENT("FM", 0x76, DEF    , 1, 1), /* Micronesia, Federated States of (USA) */
2379 	COUNTRY_CHPLAN_ENT("FO", 0x3A, DEF    , 1, 1), /* Faroe Islands (Denmark) */
2380 	COUNTRY_CHPLAN_ENT("FR", 0x5E, DEF    , 1, 1), /* France */
2381 	COUNTRY_CHPLAN_ENT("GA", 0x5E, DEF    , 1, 1), /* Gabon */
2382 	COUNTRY_CHPLAN_ENT("GB", 0x5E, DEF    , 1, 1), /* Great Britain (United Kingdom; England) */
2383 	COUNTRY_CHPLAN_ENT("GD", 0x76, DEF    , 1, 1), /* Grenada */
2384 	COUNTRY_CHPLAN_ENT("GE", 0x5E, DEF    , 1, 1), /* Georgia */
2385 	COUNTRY_CHPLAN_ENT("GF", 0x3A, DEF    , 1, 1), /* French Guiana */
2386 	COUNTRY_CHPLAN_ENT("GG", 0x5E, DEF    , 1, 1), /* Guernsey (UK) */
2387 	COUNTRY_CHPLAN_ENT("GH", 0x5E, DEF    , 1, 1), /* Ghana */
2388 	COUNTRY_CHPLAN_ENT("GI", 0x3A, DEF    , 1, 1), /* Gibraltar (UK) */
2389 	COUNTRY_CHPLAN_ENT("GL", 0x5E, DEF    , 1, 1), /* Greenland (Denmark) */
2390 	COUNTRY_CHPLAN_ENT("GM", 0x3A, DEF    , 1, 1), /* Gambia */
2391 	COUNTRY_CHPLAN_ENT("GN", 0x3A, DEF    , 1, 1), /* Guinea */
2392 	COUNTRY_CHPLAN_ENT("GP", 0x3A, DEF    , 1, 1), /* Guadeloupe (France) */
2393 	COUNTRY_CHPLAN_ENT("GQ", 0x5E, DEF    , 1, 1), /* Equatorial Guinea */
2394 	COUNTRY_CHPLAN_ENT("GR", 0x5E, DEF    , 1, 1), /* Greece */
2395 	COUNTRY_CHPLAN_ENT("GS", 0x3A, DEF    , 1, 1), /* South Georgia and the Sandwich Islands (UK) */
2396 	COUNTRY_CHPLAN_ENT("GT", 0x76, DEF    , 1, 1), /* Guatemala */
2397 	COUNTRY_CHPLAN_ENT("GU", 0x76, DEF    , 1, 1), /* Guam (USA) */
2398 	COUNTRY_CHPLAN_ENT("GW", 0x3A, DEF    , 1, 1), /* Guinea-Bissau */
2399 	COUNTRY_CHPLAN_ENT("GY", 0x44, DEF    , 1, 1), /* Guyana */
2400 	COUNTRY_CHPLAN_ENT("HK", 0x5E, DEF    , 1, 1), /* Hong Kong */
2401 	COUNTRY_CHPLAN_ENT("HM", 0x03, DEF    , 1, 1), /* Heard and McDonald Islands (Australia) */
2402 	COUNTRY_CHPLAN_ENT("HN", 0x32, DEF    , 1, 1), /* Honduras */
2403 	COUNTRY_CHPLAN_ENT("HR", 0x5E, DEF    , 1, 1), /* Croatia */
2404 	COUNTRY_CHPLAN_ENT("HT", 0x76, DEF    , 0, 1), /* Haiti */
2405 	COUNTRY_CHPLAN_ENT("HU", 0x5E, DEF    , 1, 1), /* Hungary */
2406 	COUNTRY_CHPLAN_ENT("ID", 0x5D, DEF    , 1, 1), /* Indonesia */
2407 	COUNTRY_CHPLAN_ENT("IE", 0x5E, DEF    , 1, 1), /* Ireland */
2408 	COUNTRY_CHPLAN_ENT("IL", 0x5E, DEF    , 1, 1), /* Israel */
2409 	COUNTRY_CHPLAN_ENT("IM", 0x3A, DEF    , 1, 1), /* Isle of Man (UK) */
2410 	COUNTRY_CHPLAN_ENT("IN", 0x06, DEF    , 1, 1), /* India */
2411 	COUNTRY_CHPLAN_ENT("IO", 0x3A, DEF    , 1, 1), /* British Indian Ocean Territory (UK) */
2412 	COUNTRY_CHPLAN_ENT("IQ", 0x05, DEF    , 1, 1), /* Iraq */
2413 	COUNTRY_CHPLAN_ENT("IR", 0x3A, DEF    , 0, 0), /* Iran */
2414 	COUNTRY_CHPLAN_ENT("IS", 0x5E, DEF    , 1, 1), /* Iceland */
2415 	COUNTRY_CHPLAN_ENT("IT", 0x5E, DEF    , 1, 1), /* Italy */
2416 	COUNTRY_CHPLAN_ENT("JE", 0x3A, DEF    , 1, 1), /* Jersey (UK) */
2417 	COUNTRY_CHPLAN_ENT("JM", 0x76, DEF    , 1, 1), /* Jamaica */
2418 	COUNTRY_CHPLAN_ENT("JO", 0x05, DEF    , 1, 1), /* Jordan */
2419 	COUNTRY_CHPLAN_ENT("JP", 0x7D, DEF    , 1, 1), /* Japan- Telec */
2420 	COUNTRY_CHPLAN_ENT("KE", 0x5E, DEF    , 1, 1), /* Kenya */
2421 	COUNTRY_CHPLAN_ENT("KG", 0x5E, DEF    , 1, 1), /* Kyrgyzstan */
2422 	COUNTRY_CHPLAN_ENT("KH", 0x5E, DEF    , 1, 1), /* Cambodia */
2423 	COUNTRY_CHPLAN_ENT("KI", 0x5E, DEF    , 1, 1), /* Kiribati */
2424 	COUNTRY_CHPLAN_ENT("KM", 0x3A, DEF    , 1, 1), /* Comoros */
2425 	COUNTRY_CHPLAN_ENT("KN", 0x76, DEF    , 1, 1), /* Saint Kitts and Nevis */
2426 	COUNTRY_CHPLAN_ENT("KR", 0x4B, DEF    , 1, 1), /* South Korea */
2427 	COUNTRY_CHPLAN_ENT("KW", 0x5E, DEF    , 1, 1), /* Kuwait */
2428 	COUNTRY_CHPLAN_ENT("KY", 0x76, DEF    , 1, 1), /* Cayman Islands (UK) */
2429 	COUNTRY_CHPLAN_ENT("KZ", 0x5E, DEF    , 1, 1), /* Kazakhstan */
2430 	COUNTRY_CHPLAN_ENT("LA", 0x5E, DEF    , 1, 1), /* Laos */
2431 	COUNTRY_CHPLAN_ENT("LB", 0x5E, DEF    , 1, 1), /* Lebanon */
2432 	COUNTRY_CHPLAN_ENT("LC", 0x76, DEF    , 1, 1), /* Saint Lucia */
2433 	COUNTRY_CHPLAN_ENT("LI", 0x5E, DEF    , 1, 1), /* Liechtenstein */
2434 	COUNTRY_CHPLAN_ENT("LK", 0x5E, DEF    , 1, 1), /* Sri Lanka */
2435 	COUNTRY_CHPLAN_ENT("LR", 0x5E, DEF    , 1, 1), /* Liberia */
2436 	COUNTRY_CHPLAN_ENT("LS", 0x5E, DEF    , 1, 1), /* Lesotho */
2437 	COUNTRY_CHPLAN_ENT("LT", 0x5E, DEF    , 1, 1), /* Lithuania */
2438 	COUNTRY_CHPLAN_ENT("LU", 0x5E, DEF    , 1, 1), /* Luxembourg */
2439 	COUNTRY_CHPLAN_ENT("LV", 0x5E, DEF    , 1, 1), /* Latvia */
2440 	COUNTRY_CHPLAN_ENT("LY", 0x5E, DEF    , 1, 1), /* Libya */
2441 	COUNTRY_CHPLAN_ENT("MA", 0x3C, DEF    , 1, 1), /* Morocco */
2442 	COUNTRY_CHPLAN_ENT("MC", 0x5E, DEF    , 1, 1), /* Monaco */
2443 	COUNTRY_CHPLAN_ENT("MD", 0x5E, DEF    , 1, 1), /* Moldova */
2444 	COUNTRY_CHPLAN_ENT("ME", 0x3A, DEF    , 1, 1), /* Montenegro */
2445 	COUNTRY_CHPLAN_ENT("MF", 0x76, DEF    , 1, 1), /* Saint Martin */
2446 	COUNTRY_CHPLAN_ENT("MG", 0x5E, DEF    , 1, 1), /* Madagascar */
2447 	COUNTRY_CHPLAN_ENT("MH", 0x76, DEF    , 1, 1), /* Marshall Islands (USA) */
2448 	COUNTRY_CHPLAN_ENT("MK", 0x3A, DEF    , 1, 1), /* Republic of Macedonia (FYROM) */
2449 	COUNTRY_CHPLAN_ENT("ML", 0x5E, DEF    , 1, 1), /* Mali */
2450 	COUNTRY_CHPLAN_ENT("MM", 0x3A, DEF    , 1, 1), /* Burma (Myanmar) */
2451 	COUNTRY_CHPLAN_ENT("MN", 0x5E, DEF    , 1, 1), /* Mongolia */
2452 	COUNTRY_CHPLAN_ENT("MO", 0x5E, DEF    , 1, 1), /* Macau */
2453 	COUNTRY_CHPLAN_ENT("MP", 0x76, DEF    , 1, 1), /* Northern Mariana Islands (USA) */
2454 	COUNTRY_CHPLAN_ENT("MQ", 0x3A, DEF    , 1, 1), /* Martinique (France) */
2455 	COUNTRY_CHPLAN_ENT("MR", 0x5E, DEF    , 1, 1), /* Mauritania */
2456 	COUNTRY_CHPLAN_ENT("MS", 0x3A, DEF    , 1, 1), /* Montserrat (UK) */
2457 	COUNTRY_CHPLAN_ENT("MT", 0x5E, DEF    , 1, 1), /* Malta */
2458 	COUNTRY_CHPLAN_ENT("MU", 0x5E, DEF    , 1, 1), /* Mauritius */
2459 	COUNTRY_CHPLAN_ENT("MV", 0x3C, DEF    , 1, 1), /* Maldives */
2460 	COUNTRY_CHPLAN_ENT("MW", 0x5E, DEF    , 1, 1), /* Malawi */
2461 	COUNTRY_CHPLAN_ENT("MX", 0x4D, DEF    , 1, 1), /* Mexico */
2462 	COUNTRY_CHPLAN_ENT("MY", 0x07, DEF    , 1, 1), /* Malaysia */
2463 	COUNTRY_CHPLAN_ENT("MZ", 0x5E, DEF    , 1, 1), /* Mozambique */
2464 	COUNTRY_CHPLAN_ENT("NA", 0x5E, DEF    , 1, 1), /* Namibia */
2465 	COUNTRY_CHPLAN_ENT("NC", 0x3A, DEF    , 1, 1), /* New Caledonia */
2466 	COUNTRY_CHPLAN_ENT("NE", 0x5E, DEF    , 1, 1), /* Niger */
2467 	COUNTRY_CHPLAN_ENT("NF", 0x03, DEF    , 1, 1), /* Norfolk Island (Australia) */
2468 	COUNTRY_CHPLAN_ENT("NG", 0x75, DEF    , 1, 1), /* Nigeria */
2469 	COUNTRY_CHPLAN_ENT("NI", 0x76, DEF    , 1, 1), /* Nicaragua */
2470 	COUNTRY_CHPLAN_ENT("NL", 0x5E, DEF    , 1, 1), /* Netherlands */
2471 	COUNTRY_CHPLAN_ENT("NO", 0x5E, DEF    , 1, 1), /* Norway */
2472 	COUNTRY_CHPLAN_ENT("NP", 0x06, DEF    , 1, 1), /* Nepal */
2473 	COUNTRY_CHPLAN_ENT("NR", 0x3A, DEF    , 1, 1), /* Nauru */
2474 	COUNTRY_CHPLAN_ENT("NU", 0x03, DEF    , 1, 1), /* Niue */
2475 	COUNTRY_CHPLAN_ENT("NZ", 0x03, DEF    , 1, 1), /* New Zealand */
2476 	COUNTRY_CHPLAN_ENT("OM", 0x5E, DEF    , 1, 1), /* Oman */
2477 	COUNTRY_CHPLAN_ENT("PA", 0x76, DEF    , 1, 1), /* Panama */
2478 	COUNTRY_CHPLAN_ENT("PE", 0x76, DEF    , 1, 1), /* Peru */
2479 	COUNTRY_CHPLAN_ENT("PF", 0x3A, DEF    , 1, 1), /* French Polynesia (France) */
2480 	COUNTRY_CHPLAN_ENT("PG", 0x5E, DEF    , 1, 1), /* Papua New Guinea */
2481 	COUNTRY_CHPLAN_ENT("PH", 0x5E, DEF    , 1, 1), /* Philippines */
2482 	COUNTRY_CHPLAN_ENT("PK", 0x51, DEF    , 1, 1), /* Pakistan */
2483 	COUNTRY_CHPLAN_ENT("PL", 0x5E, DEF    , 1, 1), /* Poland */
2484 	COUNTRY_CHPLAN_ENT("PM", 0x3A, DEF    , 1, 1), /* Saint Pierre and Miquelon (France) */
2485 	COUNTRY_CHPLAN_ENT("PR", 0x76, DEF    , 1, 1), /* Puerto Rico */
2486 	COUNTRY_CHPLAN_ENT("PT", 0x5E, DEF    , 1, 1), /* Portugal */
2487 	COUNTRY_CHPLAN_ENT("PW", 0x76, DEF    , 1, 1), /* Palau */
2488 	COUNTRY_CHPLAN_ENT("PY", 0x76, DEF    , 1, 1), /* Paraguay */
2489 	COUNTRY_CHPLAN_ENT("QA", 0x5E, QATAR  , 1, 1), /* Qatar */
2490 	COUNTRY_CHPLAN_ENT("RE", 0x3A, DEF    , 1, 1), /* Reunion (France) */
2491 	COUNTRY_CHPLAN_ENT("RO", 0x5E, DEF    , 1, 1), /* Romania */
2492 	COUNTRY_CHPLAN_ENT("RS", 0x5E, DEF    , 1, 1), /* Serbia */
2493 	COUNTRY_CHPLAN_ENT("RU", 0x09, DEF    , 1, 1), /* Russia(fac/gost) */
2494 //	COUNTRY_CHPLAN_ENT("RU", 0x59, DEF    , 1, 1), /* Kaliningrad(Russia) */
2495 	COUNTRY_CHPLAN_ENT("RW", 0x5E, DEF    , 1, 1), /* Rwanda */
2496 	COUNTRY_CHPLAN_ENT("SA", 0x5E, DEF    , 1, 1), /* Saudi Arabia */
2497 	COUNTRY_CHPLAN_ENT("SB", 0x3A, DEF    , 1, 1), /* Solomon Islands */
2498 	COUNTRY_CHPLAN_ENT("SC", 0x76, DEF    , 1, 1), /* Seychelles */
2499 	COUNTRY_CHPLAN_ENT("SE", 0x5E, DEF    , 1, 1), /* Sweden */
2500 	COUNTRY_CHPLAN_ENT("SG", 0x5E, DEF    , 1, 1), /* Singapore */
2501 	COUNTRY_CHPLAN_ENT("SH", 0x3A, DEF    , 1, 1), /* Saint Helena (UK) */
2502 	COUNTRY_CHPLAN_ENT("SI", 0x5E, DEF    , 1, 1), /* Slovenia */
2503 	COUNTRY_CHPLAN_ENT("SJ", 0x3A, DEF    , 1, 1), /* Svalbard (Norway) */
2504 	COUNTRY_CHPLAN_ENT("SK", 0x5E, DEF    , 1, 1), /* Slovakia */
2505 	COUNTRY_CHPLAN_ENT("SL", 0x5E, DEF    , 1, 1), /* Sierra Leone */
2506 	COUNTRY_CHPLAN_ENT("SM", 0x3A, DEF    , 1, 1), /* San Marino */
2507 	COUNTRY_CHPLAN_ENT("SN", 0x3A, DEF    , 1, 1), /* Senegal */
2508 	COUNTRY_CHPLAN_ENT("SO", 0x3A, DEF    , 1, 1), /* Somalia */
2509 	COUNTRY_CHPLAN_ENT("SR", 0x74, DEF    , 1, 1), /* Suriname */
2510 	COUNTRY_CHPLAN_ENT("ST", 0x76, DEF    , 1, 1), /* Sao Tome and Principe */
2511 	COUNTRY_CHPLAN_ENT("SV", 0x76, DEF    , 1, 1), /* El Salvador */
2512 	COUNTRY_CHPLAN_ENT("SX", 0x76, DEF    , 1, 1), /* Sint Marteen */
2513 	COUNTRY_CHPLAN_ENT("SZ", 0x5E, DEF    , 1, 1), /* Swaziland */
2514 	COUNTRY_CHPLAN_ENT("TC", 0x3A, DEF    , 1, 1), /* Turks and Caicos Islands (UK) */
2515 	COUNTRY_CHPLAN_ENT("TD", 0x3A, DEF    , 1, 1), /* Chad */
2516 	COUNTRY_CHPLAN_ENT("TF", 0x3A, DEF    , 1, 1), /* French Southern and Antarctic Lands (FR Southern Territories) */
2517 	COUNTRY_CHPLAN_ENT("TG", 0x5E, DEF    , 1, 1), /* Togo */
2518 	COUNTRY_CHPLAN_ENT("TH", 0x5E, DEF    , 1, 1), /* Thailand */
2519 	COUNTRY_CHPLAN_ENT("TJ", 0x5E, DEF    , 1, 1), /* Tajikistan */
2520 	COUNTRY_CHPLAN_ENT("TK", 0x03, DEF    , 1, 1), /* Tokelau */
2521 	COUNTRY_CHPLAN_ENT("TM", 0x3A, DEF    , 1, 1), /* Turkmenistan */
2522 	COUNTRY_CHPLAN_ENT("TN", 0x04, DEF    , 1, 1), /* Tunisia */
2523 	COUNTRY_CHPLAN_ENT("TO", 0x3A, DEF    , 1, 1), /* Tonga */
2524 //	COUNTRY_CHPLAN_ENT("TR", 0x3A, DEF    , 1, 1), /* Northern Cyprus */
2525 	COUNTRY_CHPLAN_ENT("TR", 0x5E, DEF    , 1, 1), /* Turkey */
2526 	COUNTRY_CHPLAN_ENT("TT", 0x76, DEF    , 1, 1), /* Trinidad & Tobago */
2527 	COUNTRY_CHPLAN_ENT("TV", 0x21, DEF    , 0, 0), /* Tuvalu */
2528 	COUNTRY_CHPLAN_ENT("TW", 0x76, DEF    , 1, 1), /* Taiwan */
2529 	COUNTRY_CHPLAN_ENT("TZ", 0x5E, DEF    , 1, 1), /* Tanzania */
2530 	COUNTRY_CHPLAN_ENT("UA", 0x5E, UKRAINE, 1, 1), /* Ukraine */
2531 	COUNTRY_CHPLAN_ENT("UG", 0x3A, DEF    , 1, 1), /* Uganda */
2532 	COUNTRY_CHPLAN_ENT("US", 0x76, DEF    , 1, 1), /* United States of America (USA) */
2533 	COUNTRY_CHPLAN_ENT("UY", 0x30, DEF    , 1, 1), /* Uruguay */
2534 	COUNTRY_CHPLAN_ENT("UZ", 0x3C, DEF    , 1, 1), /* Uzbekistan */
2535 	COUNTRY_CHPLAN_ENT("VA", 0x3A, DEF    , 1, 1), /* Holy See (Vatican City) */
2536 	COUNTRY_CHPLAN_ENT("VC", 0x76, DEF    , 1, 1), /* Saint Vincent and the Grenadines */
2537 	COUNTRY_CHPLAN_ENT("VE", 0x30, DEF    , 1, 1), /* Venezuela */
2538 	COUNTRY_CHPLAN_ENT("VG", 0x76, DEF    , 1, 1), /* British Virgin Islands (UK) */
2539 	COUNTRY_CHPLAN_ENT("VI", 0x76, DEF    , 1, 1), /* United States Virgin Islands (USA) */
2540 	COUNTRY_CHPLAN_ENT("VN", 0x5E, DEF    , 1, 1), /* Vietnam */
2541 	COUNTRY_CHPLAN_ENT("VU", 0x26, DEF    , 1, 1), /* Vanuatu */
2542 	COUNTRY_CHPLAN_ENT("WF", 0x3A, DEF    , 1, 1), /* Wallis and Futuna (France) */
2543 	COUNTRY_CHPLAN_ENT("WS", 0x76, DEF    , 1, 1), /* Samoa */
2544 	COUNTRY_CHPLAN_ENT("XK", 0x3A, DEF    , 1, 1), /* Kosovo */
2545 	COUNTRY_CHPLAN_ENT("YE", 0x3A, DEF    , 1, 1), /* Yemen */
2546 	COUNTRY_CHPLAN_ENT("YT", 0x5E, DEF    , 1, 1), /* Mayotte (France) */
2547 	COUNTRY_CHPLAN_ENT("ZA", 0x5E, DEF    , 1, 1), /* South Africa */
2548 	COUNTRY_CHPLAN_ENT("ZM", 0x5E, DEF    , 1, 1), /* Zambia */
2549 	COUNTRY_CHPLAN_ENT("ZW", 0x5E, DEF    , 1, 1), /* Zimbabwe */
2550 };
2551 #endif /* CONFIG_CUSTOMIZED_COUNTRY_CHPLAN_MAP or RTW_DEF_MODULE_REGULATORY_CERT or newest */
2552 
2553 /*
2554 * rtw_get_chplan_from_country -
2555 * @country_code: string of country code
2556 *
2557 * Return pointer of struct country_chplan entry or NULL when unsupported country_code is given
2558 */
rtw_get_chplan_from_country(const char * country_code)2559 const struct country_chplan *rtw_get_chplan_from_country(const char *country_code)
2560 {
2561 	const struct country_chplan *ent = NULL;
2562 	const struct country_chplan *map = NULL;
2563 	u16 map_sz = 0;
2564 	char code[2];
2565 	int i;
2566 
2567 	code[0] = alpha_to_upper(country_code[0]);
2568 	code[1] = alpha_to_upper(country_code[1]);
2569 
2570 #ifdef CONFIG_CUSTOMIZED_COUNTRY_CHPLAN_MAP
2571 	map = CUSTOMIZED_country_chplan_map;
2572 	map_sz = sizeof(CUSTOMIZED_country_chplan_map) / sizeof(struct country_chplan);
2573 #elif RTW_DEF_MODULE_REGULATORY_CERT
2574 	map_sz = rtw_def_module_country_chplan_map(&map);
2575 #else
2576 	map = country_chplan_map;
2577 	map_sz = sizeof(country_chplan_map) / sizeof(struct country_chplan);
2578 #endif
2579 
2580 	for (i = 0; i < map_sz; i++) {
2581 		if (strncmp(code, map[i].alpha2, 2) == 0) {
2582 			ent = &map[i];
2583 			break;
2584 		}
2585 	}
2586 
2587 	return ent;
2588 }
2589 
dump_country_chplan(void * sel,const struct country_chplan * ent,bool regd_info)2590 void dump_country_chplan(void *sel, const struct country_chplan *ent, bool regd_info)
2591 {
2592 	char buf[16];
2593 
2594 	if (ent->chplan == RTW_CHPLAN_UNSPECIFIED)
2595 		sprintf(buf, "NA");
2596 	else
2597 		sprintf(buf, "0x%02X", ent->chplan);
2598 
2599 	RTW_PRINT_SEL(sel, "\"%c%c\", %s"
2600 		, ent->alpha2[0], ent->alpha2[1], buf);
2601 
2602 	if (regd_info) {
2603 		u8 txpwr_lmt;
2604 
2605 		if (ent->txpwr_lmt_override != TXPWR_LMT_DEF)
2606 			_RTW_PRINT_SEL(sel, " %-7s", txpwr_lmt_str(ent->txpwr_lmt_override));
2607 		else if (ent->chplan != RTW_CHPLAN_UNSPECIFIED) {
2608 			txpwr_lmt = rtw_regd_to_txpwr_lmt(rtw_chplan_get_default_regd(ent->chplan));
2609 			_RTW_PRINT_SEL(sel, " %-7s", txpwr_lmt_str(txpwr_lmt));
2610 		}
2611 	}
2612 
2613 	_RTW_PRINT_SEL(sel, " %s", COUNTRY_CHPLAN_EN_11AX(ent) ? "ax" : "  ");
2614 	_RTW_PRINT_SEL(sel, " %s", COUNTRY_CHPLAN_EN_11AC(ent) ? "ac" : "  ");
2615 
2616 	_RTW_PRINT_SEL(sel, "\n");
2617 }
2618 
dump_country_chplan_map(void * sel,bool regd_info)2619 void dump_country_chplan_map(void *sel, bool regd_info)
2620 {
2621 	const struct country_chplan *ent;
2622 	u8 code[2];
2623 
2624 #if RTW_DEF_MODULE_REGULATORY_CERT
2625 	RTW_PRINT_SEL(sel, "RTW_DEF_MODULE_REGULATORY_CERT:0x%x\n", RTW_DEF_MODULE_REGULATORY_CERT);
2626 #endif
2627 #ifdef CONFIG_CUSTOMIZED_COUNTRY_CHPLAN_MAP
2628 	RTW_PRINT_SEL(sel, "CONFIG_CUSTOMIZED_COUNTRY_CHPLAN_MAP\n");
2629 #endif
2630 
2631 	for (code[0] = 'A'; code[0] <= 'Z'; code[0]++) {
2632 		for (code[1] = 'A'; code[1] <= 'Z'; code[1]++) {
2633 			ent = rtw_get_chplan_from_country(code);
2634 			if (!ent)
2635 				continue;
2636 
2637 			dump_country_chplan(sel, ent, regd_info);
2638 		}
2639 	}
2640 }
2641 
dump_country_list(void * sel)2642 void dump_country_list(void *sel)
2643 {
2644 	const struct country_chplan *ent;
2645 	u8 code[2];
2646 	u8 first = 1;
2647 
2648 	for (code[0] = 'A'; code[0] <= 'Z'; code[0]++) {
2649 		for (code[1] = 'A'; code[1] <= 'Z'; code[1]++) {
2650 			ent = rtw_get_chplan_from_country(code);
2651 			if (!ent)
2652 				continue;
2653 
2654 			if (first) {
2655 				RTW_PRINT_SEL(sel, "%c%c ", code[0], code[1]);
2656 				first = 0;
2657 			} else
2658 				_RTW_PRINT_SEL(sel, "%c%c ", code[0], code[1]);
2659 		}
2660 	}
2661 	if (first == 0)
2662 		_RTW_PRINT_SEL(sel, "\n");
2663 }
2664 
dump_chplan_id_list(void * sel)2665 void dump_chplan_id_list(void *sel)
2666 {
2667 	u8 first = 1;
2668 	int i;
2669 
2670 	for (i = 0; i < RTW_ChannelPlanMap_size; i++) {
2671 		if (!rtw_is_channel_plan_valid(i))
2672 			continue;
2673 
2674 		if (first) {
2675 			RTW_PRINT_SEL(sel, "0x%02X ", i);
2676 			first = 0;
2677 		} else
2678 			_RTW_PRINT_SEL(sel, "0x%02X ", i);
2679 	}
2680 	if (first == 0)
2681 		_RTW_PRINT_SEL(sel, "\n");
2682 }
2683 
dump_chplan_country_list(void * sel)2684 void dump_chplan_country_list(void *sel)
2685 {
2686 	int i;
2687 
2688 	for (i = 0; i < RTW_ChannelPlanMap_size; i++) {
2689 		const struct country_chplan *ent;
2690 		u8 code[2];
2691 		u8 first;
2692 
2693 		if (!rtw_is_channel_plan_valid(i))
2694 			continue;
2695 
2696 		first = 1;
2697 		for (code[0] = 'A'; code[0] <= 'Z'; code[0]++) {
2698 			for (code[1] = 'A'; code[1] <= 'Z'; code[1]++) {
2699 				ent = rtw_get_chplan_from_country(code);
2700 				if (!ent || ent->chplan != i)
2701 					continue;
2702 
2703 				if (first) {
2704 					RTW_PRINT_SEL(sel, "0x%02X %c%c ", i, code[0], code[1]);
2705 					first = 0;
2706 				} else
2707 					_RTW_PRINT_SEL(sel, "%c%c ", code[0], code[1]);
2708 			}
2709 		}
2710 		if (first == 0)
2711 			_RTW_PRINT_SEL(sel, "\n");
2712 	}
2713 }
2714 
2715 #ifdef CONFIG_RTW_DEBUG
dump_chplan_test(void * sel)2716 void dump_chplan_test(void *sel)
2717 {
2718 	int i, j;
2719 
2720 	/* check redundent */
2721 	for (i = 0; i < RTW_CHD_2G_MAX; i++) {
2722 		for (j = 0; j < i; j++) {
2723 			if (CH_LIST_LEN(rtw_channel_def_2g[i]) == CH_LIST_LEN(rtw_channel_def_2g[j])
2724 				&& _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)
2725 				RTW_PRINT_SEL(sel, "2G chd:%u and %u is the same\n", i, j);
2726 		}
2727 	}
2728 
2729 	/* check invalid channel */
2730 	for (i = 0; i < RTW_CHD_2G_MAX; i++) {
2731 		for (j = 0; j < CH_LIST_LEN(rtw_channel_def_2g[i]); j++) {
2732 			if (rtw_ch2freq(CH_LIST_CH(rtw_channel_def_2g[i], j)) == 0)
2733 				RTW_PRINT_SEL(sel, "2G invalid ch:%u at (%d,%d)\n", CH_LIST_CH(rtw_channel_def_2g[i], j), i, j);
2734 		}
2735 	}
2736 
2737 #if CONFIG_IEEE80211_BAND_5GHZ
2738 	/* check redundent */
2739 	for (i = 0; i < RTW_CHD_5G_MAX; i++) {
2740 		for (j = 0; j < i; j++) {
2741 			if (CH_LIST_LEN(rtw_channel_def_5g[i]) == CH_LIST_LEN(rtw_channel_def_5g[j])
2742 				&& _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)
2743 				RTW_PRINT_SEL(sel, "5G chd:%u and %u is the same\n", i, j);
2744 		}
2745 	}
2746 
2747 	/* check invalid channel */
2748 	for (i = 0; i < RTW_CHD_5G_MAX; i++) {
2749 		for (j = 0; j < CH_LIST_LEN(rtw_channel_def_5g[i]); j++) {
2750 			if (rtw_ch2freq(CH_LIST_CH(rtw_channel_def_5g[i], j)) == 0)
2751 				RTW_PRINT_SEL(sel, "5G invalid ch:%u at (%d,%d)\n", CH_LIST_CH(rtw_channel_def_5g[i], j), i, j);
2752 		}
2753 	}
2754 #endif
2755 
2756 	/* check redundent */
2757 	for (i = 0; i < RTW_ChannelPlanMap_size; i++) {
2758 		if (!rtw_is_channel_plan_valid(i))
2759 			continue;
2760 		for (j = 0; j < i; j++) {
2761 			if (!rtw_is_channel_plan_valid(j))
2762 				continue;
2763 			if (_rtw_memcmp(&RTW_ChannelPlanMap[i], &RTW_ChannelPlanMap[j], sizeof(RTW_ChannelPlanMap[i])) == _TRUE)
2764 				RTW_PRINT_SEL(sel, "channel plan 0x%02x and 0x%02x is the same\n", i, j);
2765 		}
2766 	}
2767 }
2768 #endif /* CONFIG_RTW_DEBUG */
2769 
dump_chplan_ver(void * sel)2770 void dump_chplan_ver(void *sel)
2771 {
2772 	RTW_PRINT_SEL(sel, "%s%s-%s\n", RTW_DOMAIN_MAP_VER, RTW_DOMAIN_MAP_M_VER, RTW_COUNTRY_MAP_VER);
2773 }
2774