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