• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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[] = "AE/1 AR/1 AT/1 AU/2 "
34                            "BE/1 BG/1 BN/1 "
35                            "CA/2 CH/1 CN/38 CY/1 CZ/1 "
36                            "DE/3 DK/1 "
37                            "EE/1 ES/1 "
38                            "FI/1 FR/1 "
39                            "GB/1 GR/1 "
40                            "HR/1 HU/1 "
41                            "ID/5 IE/1 IS/1 IT/1 "
42                            "JP/3 "
43                            "KR/4 KW/1 "
44                            "LI/1 LT/1 LU/1 LV/1 "
45                            "MA/1 MT/1 MX/1 "
46                            "NL/1 NO/1 "
47                            "PL/1 PT/1 PY/1 "
48                            "RO/1 RU/5 "
49                            "SE/1 SI/1 SK/1 "
50                            "TR/7 TW/2 "
51                            "US/26 "
52                            "XZ/11";
53 #else
54 const char ccode_43436[] = "";
55 #endif
56 
57 #ifdef CCODE_43455C0
58 const char ccode_43455c0[] =
59     "AE/6 AG/2 AI/1 AL/2 AS/12 AT/4 AU/6 AW/2 AZ/2 "
60     "BA/2 BD/1 BE/4 BG/4 BH/4 BM/12 BN/4 BR/2 BS/2 BY/3 "
61     "CA/2 CH/4 CN/38 CO/17 CR/17 CY/4 CZ/4 "
62     "DE/7 DK/4 "
63     "EC/21 EE/4 EG/13 ES/4 ET/2 "
64     "FI/4 FR/5 "
65     "GB/6 GD/2 GF/2 GP/2 GR/4 GT/1 GU/30 "
66     "HK/2 HR/4 HU/4 "
67     "ID/1 IE/5 IL/14 IN/3 IS/4 IT/4 "
68     "JO/3 JP/45 "
69     "KH/2 KR/96 KW/5 KY/3 "
70     "LA/2 LB/5 LI/4 LK/1 LS/2 LT/4 LU/3 LV/4 "
71     "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 "
72     "NI/2 NL/4 NO/4 NZ/4 "
73     "OM/4 "
74     "PA/17 PE/20 PH/5 PL/4 PR/38 PT/4 PY/2 "
75     "Q2/993 "
76     "RE/2 RO/4 RS/2 RU/13 "
77     "SE/4 SI/4 SK/4 SV/25 "
78     "TH/5 TN/1 TR/7 TT/3 TW/65 "
79     "UA/8 US/988 "
80     "VA/2 VE/3 VG/2 VN/4 "
81     "XZ/11 "
82     "YT/2 "
83     "ZA/6";
84 #else
85 const char ccode_43455c0[] = "";
86 #endif
87 #endif
88 
89 #ifdef CCODE_4356A2
90 const char ccode_4356a2[] =
91     "AE/6 AG/2 AI/1 AL/2 AN/2 AR/21 AS/12 AT/4 AU/6 AW/2 AZ/2 "
92     "BA/2 BD/2 BE/4 BG/4 BH/4 BM/12 BN/4 BR/4 BS/2 BY/3 "
93     "CA/31 CH/4 CN/38 CO/17 CR/17 CY/4 CZ/4 "
94     "DE/7 DK/4 DZ/1 "
95     "EC/21 EE/4 ES/4 ET/2 "
96     "FI/4 FR/5 "
97     "GB/6 GD/2 GF/2 GP/2 GR/4 GT/1 GU/12 "
98     "HK/2 HR/4 HU/4 "
99     "ID/13 IE/5 IL/7 IN/28 IS/4 IT/4 "
100     "JO/3 JP/45 "
101     "KH/2 KR/57 KW/5 KY/3 "
102     "LA/2 LB/5 LI/4 LK/1 LS/2 LT/4 LU/3 LV/4 "
103     "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 "
104     "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[] = "AE/6 AL/2 AM/1 AN/5 AR/21 AT/4 AU/6 AZ/2 "
154                             "BA/2 BE/4 BG/4 BH/4 BN/4 BO/5 BR/17 BY/3 "
155                             "CA/2 CH/4 CL/7 CN/38 CO/17 CR/17 CY/4 CZ/4 "
156                             "DE/7 DK/4 DZ/2 EC/18 EE/4 EG/13 ES/4 "
157                             "FI/4 FR/5 "
158                             "GB/6 GR/4 "
159                             "HK/999 HN/8 HR/4 HU/4 "
160                             "ID/5 IE/5 IL/7 IN/3 IS/4 IT/4 "
161                             "JO/3 JP/72 "
162                             "KE/1 KR/96 KW/5 KZ/5 "
163                             "LA/2 LB/5 LI/4 LK/2 LT/4 LU/4 LV/4 "
164                             "MA/7 MC/1 ME/2 MK/2 MO/4 MT/4 MX/20 MY/19 "
165                             "NL/4 NO/4 NZ/4 "
166                             "OM/4 "
167                             "PA/17 PE/20 PH/5 PK/2 PL/4 PR/20 PT/4 "
168                             "RO/4 RU/62 "
169                             "SA/5 SE/4 SG/12 SI/4 SK/4 SV/17 "
170                             "TH/5 TN/1 TR/7 TT/3 TW/65 "
171                             "UA/16 US/140 UY/10 "
172                             "VE/3 VN/4 "
173                             "XZ/11 "
174                             "ZA/19";
175 #else
176 const char ccode_4375b4[] = "";
177 #endif
178 
179 #ifdef CCODE_4358U
180 const char ccode_4358u[] = "BE/4 BR/4 "
181                            "CA/2 CH/4 CN/38 CY/4 "
182                            "DE/7 DK/4 "
183                            "ES/4 "
184                            "FI/4 FR/5 "
185                            "GB/6 GR/4 "
186                            "HK/2 HU/4 "
187                            "IE/5 IL/7 IS/4 IT/4 "
188                            "JP/72 "
189                            "KE/0 KR/4 "
190                            "MY/3 "
191                            "NL/4 "
192                            "PT/4 "
193                            "SA/5 SE/4 SG/0 SZ/0 "
194                            "TH/5 TR/7 TW/230 "
195                            "US/0 "
196                            "VN/4";
197 #else
198 const char ccode_4358u[] = "";
199 #endif
200 
201 typedef struct ccode_list_map_t {
202     uint chip;
203     uint chiprev;
204     const char *ccode_list;
205     const char *ccode_ww;
206 } ccode_list_map_t;
207 
208 extern const char ccode_43438[];
209 extern const char ccode_43455c0[];
210 extern const char ccode_4356a2[];
211 extern const char ccode_4359c0[];
212 extern const char ccode_4358u[];
213 
214 const ccode_list_map_t ccode_list_map[] = {
215 /* ChipID		Chiprev		ccode  */
216 #ifdef BCMSDIO
217     {BCM43430_CHIP_ID, 0, ccode_43438, ""},
218     {BCM43430_CHIP_ID, 1, ccode_43438, ""},
219     {BCM43430_CHIP_ID, 2, ccode_43436, ""},
220     {BCM4345_CHIP_ID, 6, ccode_43455c0, "XZ/11"},
221     {BCM43454_CHIP_ID, 6, ccode_43455c0, "XZ/11"},
222     {BCM4345_CHIP_ID, 9, ccode_43455c0, "XZ/11"},
223     {BCM43454_CHIP_ID, 9, ccode_43455c0, "XZ/11"},
224     {BCM4354_CHIP_ID, 2, ccode_4356a2, "XZ/11"},
225     {BCM4356_CHIP_ID, 2, ccode_4356a2, "XZ/11"},
226     {BCM4371_CHIP_ID, 2, ccode_4356a2, "XZ/11"},
227     {BCM4359_CHIP_ID, 9, ccode_4359c0, "XZ/11"},
228 #endif
229 #ifdef BCMPCIE
230     {BCM4354_CHIP_ID, 2, ccode_4356a2, "XZ/11"},
231     {BCM4356_CHIP_ID, 2, ccode_4356a2, "XZ/11"},
232     {BCM4359_CHIP_ID, 9, ccode_4359c0, "XZ/11"},
233     {BCM4375_CHIP_ID, 5, ccode_4375b4, "XZ/11"},
234 #endif
235 #ifdef BCMDBUS
236     {BCM43569_CHIP_ID, 2, ccode_4358u, "XW/0"},
237 #endif
238 };
239 
dhd_ccode_map_country_list(dhd_pub_t * dhd,wl_country_t * cspec)240 int dhd_ccode_map_country_list(dhd_pub_t *dhd, wl_country_t *cspec)
241 {
242     int bcmerror = -1, i;
243     uint chip = dhd->conf->chip, chiprev = dhd->conf->chiprev;
244     const char *ccode_list = NULL, *ccode_ww = NULL;
245     char *pch;
246 
247     for (i = 0; i < sizeof(ccode_list_map) / sizeof(ccode_list_map[0]); i++) {
248         const ccode_list_map_t *row = &ccode_list_map[i];
249         if (row->chip == chip && row->chiprev == chiprev) {
250             ccode_list = row->ccode_list;
251             ccode_ww = row->ccode_ww;
252             break;
253         }
254     }
255 
256     if (ccode_list) {
257         pch = strstr(ccode_list, cspec->ccode);
258         if (pch) {
259             cspec->rev =
260                 (int)simple_strtol(pch + strlen(cspec->ccode) + 1, NULL, 0);
261             bcmerror = 0;
262         }
263     }
264 
265     if (bcmerror && ccode_ww && strlen(ccode_ww) >= 0x4) {
266         memcpy(cspec->ccode, ccode_ww, 0x2);
267         cspec->rev = (int)simple_strtol(ccode_ww + 0x3, NULL, 0);
268     }
269 
270     return bcmerror;
271 }
272 #endif
273