1
2 #ifdef CCODE_LIST
3 #ifdef CONFIG_COMPAT
4 #include <linux/compat.h>
5 #endif /* COMFIG_COMPAT */
6 #include <typedefs.h>
7 #include <dhd_config.h>
8
9 #ifdef BCMSDIO
10 #define CCODE_43438
11 #define CCODE_43436
12 #define CCODE_43455C0
13 #endif
14 #if defined(BCMSDIO) || defined(BCMPCIE)
15 #define CCODE_4356A2
16 #define CCODE_4359C0
17 #endif
18 #if defined(BCMPCIE)
19 #define CCODE_4375B4
20 #endif
21 #ifdef BCMDBUS
22 #define CCODE_4358U
23 #endif
24
25 #ifdef BCMSDIO
26 #ifdef CCODE_43438
27 const char ccode_43438[] = "RU/13";
28 #else
29 const char ccode_43438[] = "";
30 #endif
31
32 #ifdef CCODE_43436
33 const char ccode_43436[] = \
34 "AE/1 AR/1 AT/1 AU/2 "\
35 "BE/1 BG/1 BN/1 "\
36 "CA/2 CH/1 CN/38 CY/1 CZ/1 "\
37 "DE/3 DK/1 "\
38 "EE/1 ES/1 "\
39 "FI/1 FR/1 "\
40 "GB/1 GR/1 "\
41 "HR/1 HU/1 "\
42 "ID/5 IE/1 IS/1 IT/1 "\
43 "JP/3 "\
44 "KR/4 KW/1 "\
45 "LI/1 LT/1 LU/1 LV/1 "\
46 "MA/1 MT/1 MX/1 "\
47 "NL/1 NO/1 "\
48 "PL/1 PT/1 PY/1 "\
49 "RO/1 RU/5 "\
50 "SE/1 SI/1 SK/1 "\
51 "TR/7 TW/2 "\
52 "US/26 "\
53 "XZ/11";
54 #else
55 const char ccode_43436[] = "";
56 #endif
57
58 #ifdef CCODE_43455C0
59 const char ccode_43455c0[] = \
60 "AE/6 AG/2 AI/1 AL/2 AS/12 AT/4 AU/6 AW/2 AZ/2 "\
61 "BA/2 BD/1 BE/4 BG/4 BH/4 BM/12 BN/4 BR/2 BS/2 BY/3 "\
62 "CA/2 CH/4 CN/38 CO/17 CR/17 CY/4 CZ/4 "\
63 "DE/7 DK/4 "\
64 "EC/21 EE/4 EG/13 ES/4 ET/2 "\
65 "FI/4 FR/5 "\
66 "GB/6 GD/2 GF/2 GP/2 GR/4 GT/1 GU/30 "\
67 "HK/2 HR/4 HU/4 "\
68 "ID/1 IE/5 IL/14 IN/3 IS/4 IT/4 "\
69 "JO/3 JP/45 "\
70 "KH/2 KR/96 KW/5 KY/3 "\
71 "LA/2 LB/5 LI/4 LK/1 LS/2 LT/4 LU/3 LV/4 "\
72 "MA/2 MC/1 MD/2 ME/2 MK/2 MN/1 MQ/2 MR/2 MT/4 MU/2 MV/3 MW/1 MX/44 MY/3 "\
73 "NI/2 NL/4 NO/4 NZ/4 "\
74 "OM/4 "\
75 "PA/17 PE/20 PH/5 PL/4 PR/38 PT/4 PY/2 "\
76 "Q2/993 "\
77 "RE/2 RO/4 RS/2 RU/13 "\
78 "SE/4 SI/4 SK/4 SV/25 "\
79 "TH/5 TN/1 TR/7 TT/3 TW/65 "\
80 "UA/8 US/988 "\
81 "VA/2 VE/3 VG/2 VN/4 "\
82 "XZ/11 "\
83 "YT/2 "\
84 "ZA/6";
85 #else
86 const char ccode_43455c0[] = "";
87 #endif
88 #endif
89
90 #ifdef CCODE_4356A2
91 const char ccode_4356a2[] = \
92 "AE/6 AG/2 AI/1 AL/2 AN/2 AR/21 AS/12 AT/4 AU/6 AW/2 AZ/2 "\
93 "BA/2 BD/2 BE/4 BG/4 BH/4 BM/12 BN/4 BR/4 BS/2 BY/3 "\
94 "CA/31 CH/4 CN/38 CO/17 CR/17 CY/4 CZ/4 "\
95 "DE/7 DK/4 DZ/1 "\
96 "EC/21 EE/4 ES/4 ET/2 "\
97 "FI/4 FR/5 "\
98 "GB/6 GD/2 GF/2 GP/2 GR/4 GT/1 GU/12 "\
99 "HK/2 HR/4 HU/4 "\
100 "ID/13 IE/5 IL/7 IN/28 IS/4 IT/4 "\
101 "JO/3 JP/58 "\
102 "KH/2 KR/57 KW/5 KY/3 "\
103 "LA/2 LB/5 LI/4 LK/1 LS/2 LT/4 LU/3 LV/4 "\
104 "MA/2 MC/1 MD/2 ME/2 MK/2 MN/1 MO/2 MR/2 MT/4 MQ/2 MU/2 MV/3 MW/1 MX/20 MY/16 "\
105 "NI/2 NL/4 NO/4 NP/3 NZ/4 "\
106 "OM/4 "\
107 "PA/17 PE/20 PG/2 PH/5 PL/4 PR/20 PT/4 PY/2 "\
108 "RE/2 RO/4 RS/2 RU/986 "\
109 "SE/4 SG/19 SI/4 SK/4 SN/2 SV/19 "\
110 "TH/9 TN/1 TR/7 TT/3 TW/1 "\
111 "UA/8 UG/2 US/1 UY/1 "\
112 "VA/2 VE/3 VG/2 VI/13 VN/4 "\
113 "XZ/11 "\
114 "YT/2 "\
115 "ZM/2 "\
116 "E0/32";
117 #else
118 const char ccode_4356a2[] = "";
119 #endif
120
121 #ifdef CCODE_4359C0
122 const char ccode_4359c0[] = \
123 "AD/1 AE/6 AG/2 AI/1 AL/3 AS/12 AT/21 AU/6 AW/2 AZ/8 "\
124 "BA/4 BD/1 BE/19 BG/18 BH/4 BM/12 BN/4 BR/2 BS/2 BY/3 "\
125 "CA/2 CN/38 CO/17 CR/17 CY/18 CZ/18 "\
126 "DE/30 DK/19 "\
127 "E0/32 EC/21 EE/18 EG/13 ES/21 ET/2 "\
128 "FI/19 FR/21 "\
129 "GB/996 GD/2 GE/1 GF/2 GP/2 GR/18 GT/1 GU/30 "\
130 "HK/2 HR/18 HU/18 "\
131 "ID/1 IE/21 IL/276 IN/3 IS/17 IT/20 "\
132 "JO/3 JP/967 "\
133 "KH/2 KR/70 KW/5 KY/3 "\
134 "LA/2 LB/5 LI/17 LK/1 LS/2 LT/18 LU/18 LV/18 "\
135 "MA/2 MC/2 MD/3 ME/5 MK/4 MN/1 MQ/2 MR/2 MT/18 MU/2 MV/3 MW/1 MX/44 MY/3 "\
136 "NI/2 NL/19 NO/18 NZ/4 "\
137 "OM/4 "\
138 "PA/17 PE/20 PH/5 PL/18 PR/38 PT/20 PY/2 "\
139 "Q1/947 Q2/993 "\
140 "RE/2 RO/18 RS/4 RU/986 "\
141 "SE/19 SI/18 SK/18 SM/1 SV/25 "\
142 "TH/5 TN/1 TR/18 TT/3 TW/980 "\
143 "UA/16 US/988 "\
144 "VA/3 VE/3 VG/2 VN/4 "\
145 "XZ/11 "\
146 "YT/2 "\
147 "ZA/6";
148 #else
149 const char ccode_4359c0[] = "";
150 #endif
151
152 #ifdef CCODE_4375B4
153 const char ccode_4375b4[] = \
154 "AE/6 AL/2 AM/1 AN/5 AR/21 AT/4 AU/6 AZ/2 "\
155 "BA/2 BE/4 BG/4 BH/4 BN/4 BO/5 BR/17 BY/3 "\
156 "CA/2 CH/4 CL/7 CN/38 CO/17 CR/17 CY/4 CZ/4 "\
157 "DE/7 DK/4 DZ/2 EC/18 EE/4 EG/13 ES/4 "\
158 "FI/4 FR/5 "\
159 "GB/6 GR/4 "\
160 "HK/999 HN/8 HR/4 HU/4 "\
161 "ID/5 IE/5 IL/7 IN/3 IS/4 IT/4 "\
162 "JO/3 JP/72 "\
163 "KE/1 KR/96 KW/5 KZ/5 "\
164 "LA/2 LB/5 LI/4 LK/2 LT/4 LU/4 LV/4 "\
165 "MA/7 MC/1 ME/2 MK/2 MO/4 MT/4 MX/20 MY/19 "\
166 "NL/4 NO/4 NZ/4 "\
167 "OM/4 "\
168 "PA/17 PE/20 PH/5 PK/2 PL/4 PR/20 PT/4 "\
169 "RO/4 RU/62 "\
170 "SA/5 SE/4 SG/12 SI/4 SK/4 SV/17 "\
171 "TH/5 TN/1 TR/7 TT/3 TW/65 "\
172 "UA/16 US/140 UY/10 "\
173 "VE/3 VN/4 "\
174 "XZ/11 "\
175 "ZA/19";
176 #else
177 const char ccode_4375b4[] = "";
178 #endif
179
180 #ifdef CCODE_4358U
181 const char ccode_4358u[] = \
182 "BE/4 BR/4 "\
183 "CA/2 CH/4 CN/38 CY/4 "\
184 "DE/7 DK/4 "\
185 "ES/4 "\
186 "FI/4 FR/5 "\
187 "GB/6 GR/4 "\
188 "HK/2 HU/4 "\
189 "IE/5 IL/7 IS/4 IT/4 "\
190 "JP/72 "\
191 "KE/0 KR/4 "\
192 "MY/3 "\
193 "NL/4 "\
194 "PT/4 "\
195 "SA/5 SE/4 SG/0 SZ/0 "\
196 "TH/5 TR/7 TW/230 "\
197 "US/0 "\
198 "VN/4";
199 #else
200 const char ccode_4358u[] = "";
201 #endif
202
203 typedef struct ccode_list_map_t {
204 uint chip;
205 uint chiprev;
206 const char *ccode_list;
207 const char *ccode_ww;
208 } ccode_list_map_t;
209
210 extern const char ccode_43438[];
211 extern const char ccode_43455c0[];
212 extern const char ccode_4356a2[];
213 extern const char ccode_4359c0[];
214 extern const char ccode_4358u[];
215
216 const ccode_list_map_t ccode_list_map[] = {
217 /* ChipID Chiprev ccode */
218 #ifdef BCMSDIO
219 {BCM43430_CHIP_ID, 0, ccode_43438, ""},
220 {BCM43430_CHIP_ID, 1, ccode_43438, ""},
221 {BCM43430_CHIP_ID, 2, ccode_43436, ""},
222 {BCM4345_CHIP_ID, 6, ccode_43455c0, "XZ/11"},
223 {BCM43454_CHIP_ID, 6, ccode_43455c0, "XZ/11"},
224 {BCM4345_CHIP_ID, 9, ccode_43455c0, "XZ/11"},
225 {BCM43454_CHIP_ID, 9, ccode_43455c0, "XZ/11"},
226 {BCM4354_CHIP_ID, 2, ccode_4356a2, "XZ/11"},
227 {BCM4356_CHIP_ID, 2, ccode_4356a2, "XZ/11"},
228 {BCM4371_CHIP_ID, 2, ccode_4356a2, "XZ/11"},
229 {BCM4359_CHIP_ID, 9, ccode_4359c0, "XZ/11"},
230 #endif
231 #ifdef BCMPCIE
232 {BCM4354_CHIP_ID, 2, ccode_4356a2, "XZ/11"},
233 {BCM4356_CHIP_ID, 2, ccode_4356a2, "XZ/11"},
234 {BCM4359_CHIP_ID, 9, ccode_4359c0, "XZ/11"},
235 {BCM4375_CHIP_ID, 5, ccode_4375b4, "XZ/11"},
236 #endif
237 #ifdef BCMDBUS
238 {BCM43569_CHIP_ID, 2, ccode_4358u, "XW/0"},
239 #endif
240 };
241
242 int
dhd_ccode_map_country_list(dhd_pub_t * dhd,wl_country_t * cspec)243 dhd_ccode_map_country_list(dhd_pub_t *dhd, wl_country_t *cspec)
244 {
245 int bcmerror = -1, i;
246 uint chip = dhd->conf->chip, chiprev = dhd->conf->chiprev;
247 const char *ccode_list = NULL, *ccode_ww = NULL;
248 char *pch;
249
250 for (i=0; i<sizeof(ccode_list_map)/sizeof(ccode_list_map[0]); i++) {
251 const ccode_list_map_t* row = &ccode_list_map[i];
252 if (row->chip == chip && row->chiprev == chiprev) {
253 ccode_list = row->ccode_list;
254 ccode_ww = row->ccode_ww;
255 break;
256 }
257 }
258
259 if (ccode_list) {
260 pch = strstr(ccode_list, cspec->ccode);
261 if (pch) {
262 cspec->rev = (int)simple_strtol(pch+strlen(cspec->ccode)+1, NULL, 0);
263 bcmerror = 0;
264 }
265 }
266
267 if (bcmerror && ccode_ww && strlen(ccode_ww)>=4) {
268 memcpy(cspec->ccode, ccode_ww, 2);
269 cspec->rev = (int)simple_strtol(ccode_ww+3, NULL, 0);
270 }
271
272 return bcmerror;
273 }
274 #endif
275