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