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