1 /*
2 *
3 * BlueZ - Bluetooth protocol stack for Linux
4 *
5 * Copyright (C) 2003-2010 Marcel Holtmann <marcel@holtmann.org>
6 *
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21 *
22 */
23
24 #ifdef HAVE_CONFIG_H
25 #include <config.h>
26 #endif
27
28 #include <stdio.h>
29 #include <errno.h>
30 #include <fcntl.h>
31 #include <unistd.h>
32 #include <stdlib.h>
33 #include <string.h>
34 #include <sys/stat.h>
35 #include <sys/mman.h>
36 #include <sys/socket.h>
37
38 #include <bluetooth/bluetooth.h>
39 #include <bluetooth/hci.h>
40 #include <bluetooth/hci_lib.h>
41
42 #include "csr.h"
43
44 struct psr_data {
45 uint16_t pskey;
46 uint8_t *value;
47 uint8_t size;
48 struct psr_data *next;
49 };
50
51 static struct psr_data *head = NULL, *tail = NULL;
52
53 static struct {
54 uint16_t id;
55 char *str;
56 } csr_map[] = {
57 { 66, "HCI 9.8" },
58 { 97, "HCI 10.3" },
59 { 101, "HCI 10.5" },
60 { 111, "HCI 11.0" },
61 { 112, "HCI 11.1" },
62 { 114, "HCI 11.2" },
63 { 115, "HCI 11.3" },
64 { 117, "HCI 12.0" },
65 { 119, "HCI 12.1" },
66 { 133, "HCI 12.2" },
67 { 134, "HCI 12.3" },
68 { 162, "HCI 12.4" },
69 { 165, "HCI 12.5" },
70 { 169, "HCI 12.6" },
71 { 188, "HCI 12.7" },
72 { 218, "HCI 12.8" },
73 { 283, "HCI 12.9" },
74 { 203, "HCI 13.2" },
75 { 204, "HCI 13.2" },
76 { 210, "HCI 13.3" },
77 { 211, "HCI 13.3" },
78 { 213, "HCI 13.4" },
79 { 214, "HCI 13.4" },
80 { 225, "HCI 13.5" },
81 { 226, "HCI 13.5" },
82 { 237, "HCI 13.6" },
83 { 238, "HCI 13.6" },
84 { 242, "HCI 14.0" },
85 { 243, "HCI 14.0" },
86 { 244, "HCI 14.0" },
87 { 245, "HCI 14.0" },
88 { 254, "HCI 13.7" },
89 { 255, "HCI 13.7" },
90 { 264, "HCI 14.1" },
91 { 265, "HCI 14.1" },
92 { 267, "HCI 14.2" },
93 { 268, "HCI 14.2" },
94 { 272, "HCI 14.3" },
95 { 273, "HCI 14.3" },
96 { 274, "HCI 13.8" },
97 { 275, "HCI 13.8" },
98 { 286, "HCI 13.9" },
99 { 287, "HCI 13.9" },
100 { 309, "HCI 13.10" },
101 { 310, "HCI 13.10" },
102 { 313, "HCI 14.4" },
103 { 314, "HCI 14.4" },
104 { 323, "HCI 14.5" },
105 { 324, "HCI 14.5" },
106 { 336, "HCI 14.6" },
107 { 337, "HCI 14.6" },
108 { 351, "HCI 13.11" },
109 { 352, "HCI 13.11" },
110 { 362, "HCI 15.0" },
111 { 363, "HCI 15.0" },
112 { 364, "HCI 15.0" },
113 { 365, "HCI 15.0" },
114 { 373, "HCI 14.7" },
115 { 374, "HCI 14.7" },
116 { 379, "HCI 15.1" },
117 { 380, "HCI 15.1" },
118 { 381, "HCI 15.1" },
119 { 382, "HCI 15.1" },
120 { 392, "HCI 15.2" },
121 { 393, "HCI 15.2" },
122 { 394, "HCI 15.2" },
123 { 395, "HCI 15.2" },
124 { 436, "HCI 16.0" },
125 { 437, "HCI 16.0" },
126 { 438, "HCI 16.0" },
127 { 439, "HCI 16.0" },
128 { 443, "HCI 15.3" },
129 { 444, "HCI 15.3" },
130 { 465, "HCI 16.1" },
131 { 466, "HCI 16.1" },
132 { 467, "HCI 16.1" },
133 { 468, "HCI 16.1" },
134 { 487, "HCI 14.8" },
135 { 488, "HCI 14.8" },
136 { 492, "HCI 16.2" },
137 { 493, "HCI 16.2" },
138 { 495, "HCI 16.2" },
139 { 496, "HCI 16.2" },
140 { 502, "HCI 16.1.1" },
141 { 503, "HCI 16.1.1" },
142 { 504, "HCI 16.1.1" },
143 { 505, "HCI 16.1.1" },
144 { 506, "HCI 16.1.2" },
145 { 507, "HCI 16.1.2" },
146 { 508, "HCI 16.1.2" },
147 { 509, "HCI 16.1.2" },
148 { 516, "HCI 16.3" },
149 { 517, "HCI 16.3" },
150 { 518, "HCI 16.3" },
151 { 519, "HCI 16.3" },
152 { 523, "HCI 16.4" },
153 { 524, "HCI 16.4" },
154 { 525, "HCI 16.4" },
155 { 526, "HCI 16.4" },
156 { 553, "HCI 15.3" },
157 { 554, "HCI 15.3" },
158 { 562, "HCI 16.5" },
159 { 563, "HCI 16.5" },
160 { 564, "HCI 16.5" },
161 { 565, "HCI 16.5" },
162 { 593, "HCI 17.0" },
163 { 594, "HCI 17.0" },
164 { 595, "HCI 17.0" },
165 { 599, "HCI 17.0" },
166 { 600, "HCI 17.0" },
167 { 608, "HCI 13.10.1" },
168 { 609, "HCI 13.10.1" },
169 { 613, "HCI 17.1" },
170 { 614, "HCI 17.1" },
171 { 615, "HCI 17.1" },
172 { 616, "HCI 17.1" },
173 { 618, "HCI 17.1" },
174 { 624, "HCI 17.2" },
175 { 625, "HCI 17.2" },
176 { 626, "HCI 17.2" },
177 { 627, "HCI 17.2" },
178 { 637, "HCI 16.6" },
179 { 638, "HCI 16.6" },
180 { 639, "HCI 16.6" },
181 { 640, "HCI 16.6" },
182 { 642, "HCI 13.10.2" },
183 { 643, "HCI 13.10.2" },
184 { 644, "HCI 13.10.3" },
185 { 645, "HCI 13.10.3" },
186 { 668, "HCI 13.10.4" },
187 { 669, "HCI 13.10.4" },
188 { 681, "HCI 16.7" },
189 { 682, "HCI 16.7" },
190 { 683, "HCI 16.7" },
191 { 684, "HCI 16.7" },
192 { 704, "HCI 16.8" },
193 { 718, "HCI 16.4.1" },
194 { 719, "HCI 16.4.1" },
195 { 720, "HCI 16.4.1" },
196 { 721, "HCI 16.4.1" },
197 { 722, "HCI 16.7.1" },
198 { 723, "HCI 16.7.1" },
199 { 724, "HCI 16.7.1" },
200 { 725, "HCI 16.7.1" },
201 { 731, "HCI 16.7.2" },
202 { 732, "HCI 16.7.2" },
203 { 733, "HCI 16.7.2" },
204 { 734, "HCI 16.7.2" },
205 { 735, "HCI 16.4.2" },
206 { 736, "HCI 16.4.2" },
207 { 737, "HCI 16.4.2" },
208 { 738, "HCI 16.4.2" },
209 { 750, "HCI 16.7.3" },
210 { 751, "HCI 16.7.3" },
211 { 752, "HCI 16.7.3" },
212 { 753, "HCI 16.7.3" },
213 { 760, "HCI 16.7.4" },
214 { 761, "HCI 16.7.4" },
215 { 762, "HCI 16.7.4" },
216 { 763, "HCI 16.7.4" },
217 { 770, "HCI 16.9" },
218 { 771, "HCI 16.9" },
219 { 772, "HCI 16.9" },
220 { 773, "HCI 16.9" },
221 { 774, "HCI 17.3" },
222 { 775, "HCI 17.3" },
223 { 776, "HCI 17.3" },
224 { 777, "HCI 17.3" },
225 { 781, "HCI 16.7.5" },
226 { 786, "HCI 16.10" },
227 { 787, "HCI 16.10" },
228 { 788, "HCI 16.10" },
229 { 789, "HCI 16.10" },
230 { 791, "HCI 16.4.3" },
231 { 792, "HCI 16.4.3" },
232 { 793, "HCI 16.4.3" },
233 { 794, "HCI 16.4.3" },
234 { 798, "HCI 16.11" },
235 { 799, "HCI 16.11" },
236 { 800, "HCI 16.11" },
237 { 801, "HCI 16.11" },
238 { 806, "HCI 16.7.5" },
239 { 807, "HCI 16.12" },
240 { 808, "HCI 16.12" },
241 { 809, "HCI 16.12" },
242 { 810, "HCI 16.12" },
243 { 817, "HCI 16.13" },
244 { 818, "HCI 16.13" },
245 { 819, "HCI 16.13" },
246 { 820, "HCI 16.13" },
247 { 823, "HCI 13.10.5" },
248 { 824, "HCI 13.10.5" },
249 { 826, "HCI 16.14" },
250 { 827, "HCI 16.14" },
251 { 828, "HCI 16.14" },
252 { 829, "HCI 16.14" },
253 { 843, "HCI 17.3.1" },
254 { 856, "HCI 17.3.2" },
255 { 857, "HCI 17.3.2" },
256 { 858, "HCI 17.3.2" },
257 { 1120, "HCI 17.11" },
258 { 1168, "HCI 18.1" },
259 { 1169, "HCI 18.1" },
260 { 1241, "HCI 18.x" },
261 { 1298, "HCI 18.2" },
262 { 1354, "HCI 18.2" },
263 { 1392, "HCI 18.2" },
264 { 1393, "HCI 18.2" },
265 { 1501, "HCI 18.2" },
266 { 1503, "HCI 18.2" },
267 { 1504, "HCI 18.2" },
268 { 1505, "HCI 18.2" },
269 { 1506, "HCI 18.2" },
270 { 1520, "HCI 18.2" },
271 { 1586, "HCI 18.2" },
272 { 1591, "HCI 18.2" },
273 { 1592, "HCI 18.2" },
274 { 1593, "HCI 18.2.1" },
275 { 1733, "HCI 18.3" },
276 { 1734, "HCI 18.3" },
277 { 1735, "HCI 18.3" },
278 { 1737, "HCI 18.3" },
279 { 1915, "HCI 19.2" },
280 { 1916, "HCI 19.2" },
281 { 1958, "HCI 19.2" },
282 { 1981, "Unified 20a" },
283 { 1982, "Unified 20a" },
284 { 1989, "HCI 18.4" },
285 { 2062, "Unified 20a1" },
286 { 2063, "Unified 20a1" },
287 { 2067, "Unified 18f" },
288 { 2068, "Unified 18f" },
289 { 2243, "Unified 18e" },
290 { 2244, "Unified 18e" },
291 { 2258, "Unified 20d" },
292 { 2259, "Unified 20d" },
293 { 2361, "Unified 20e" },
294 { 2362, "Unified 20e" },
295 { 2386, "Unified 21a" },
296 { 2387, "Unified 21a" },
297 { 2423, "Unified 21a" },
298 { 2424, "Unified 21a" },
299 { 2623, "Unified 21c" },
300 { 2624, "Unified 21c" },
301 { 2625, "Unified 21c" },
302 { 2626, "Unified 21c" },
303 { 2627, "Unified 21c" },
304 { 2628, "Unified 21c" },
305 { 2629, "Unified 21c" },
306 { 2630, "Unified 21c" },
307 { 2631, "Unified 21c" },
308 { 2632, "Unified 21c" },
309 { 2633, "Unified 21c" },
310 { 2634, "Unified 21c" },
311 { 2635, "Unified 21c" },
312 { 2636, "Unified 21c" },
313 { 2649, "Unified 21c" },
314 { 2650, "Unified 21c" },
315 { 2651, "Unified 21c" },
316 { 2652, "Unified 21c" },
317 { 2653, "Unified 21c" },
318 { 2654, "Unified 21c" },
319 { 2655, "Unified 21c" },
320 { 2656, "Unified 21c" },
321 { 2658, "Unified 21c" },
322 { 3057, "Unified 21d" },
323 { 3058, "Unified 21d" },
324 { 3059, "Unified 21d" },
325 { 3060, "Unified 21d" },
326 { 3062, "Unified 21d" },
327 { 3063, "Unified 21d" },
328 { 3064, "Unified 21d" },
329 { 3164, "Unified 21e" },
330 { 3413, "Unified 21f" },
331 { 3414, "Unified 21f" },
332 { 3415, "Unified 21f" },
333 { 3424, "Unified 21f" },
334 { 3454, "Unified 21f" },
335 { 3684, "Unified 21f" },
336 { 3764, "Unified 21f" },
337 { 4276, "Unified 22b" },
338 { 4277, "Unified 22b" },
339 { 4279, "Unified 22b" },
340 { 4281, "Unified 22b" },
341 { 4282, "Unified 22b" },
342 { 4283, "Unified 22b" },
343 { 4284, "Unified 22b" },
344 { 4285, "Unified 22b" },
345 { 4289, "Unified 22b" },
346 { 4290, "Unified 22b" },
347 { 4291, "Unified 22b" },
348 { 4292, "Unified 22b" },
349 { 4293, "Unified 22b" },
350 { 4294, "Unified 22b" },
351 { 4295, "Unified 22b" },
352 { 4363, "Unified 22c" },
353 { 4373, "Unified 22c" },
354 { 4374, "Unified 22c" },
355 { 4532, "Unified 22d" },
356 { 4533, "Unified 22d" },
357 { 4698, "Unified 23c" },
358 { 4839, "Unified 23c" },
359 { 4841, "Unified 23c" },
360 { 4866, "Unified 23c" },
361 { 4867, "Unified 23c" },
362 { 4868, "Unified 23c" },
363 { 4869, "Unified 23c" },
364 { 4870, "Unified 23c" },
365 { 4871, "Unified 23c" },
366 { 4872, "Unified 23c" },
367 { 4874, "Unified 23c" },
368 { 4875, "Unified 23c" },
369 { 4876, "Unified 23c" },
370 { 4877, "Unified 23c" },
371 { 2526, "Marcel 1 (2005-09-26)" },
372 { 2543, "Marcel 2 (2005-09-28)" },
373 { 2622, "Marcel 3 (2005-10-27)" },
374 { 3326, "Marcel 4 (2006-06-16)" },
375 { 3612, "Marcel 5 (2006-10-24)" },
376 { 4509, "Marcel 6 (2007-06-11)" },
377 { 5417, "Marcel 7 (2008-08-26)" },
378 { 195, "Sniff 1 (2001-11-27)" },
379 { 220, "Sniff 2 (2002-01-03)" },
380 { 269, "Sniff 3 (2002-02-22)" },
381 { 270, "Sniff 4 (2002-02-26)" },
382 { 284, "Sniff 5 (2002-03-12)" },
383 { 292, "Sniff 6 (2002-03-20)" },
384 { 305, "Sniff 7 (2002-04-12)" },
385 { 306, "Sniff 8 (2002-04-12)" },
386 { 343, "Sniff 9 (2002-05-02)" },
387 { 346, "Sniff 10 (2002-05-03)" },
388 { 355, "Sniff 11 (2002-05-16)" },
389 { 256, "Sniff 11 (2002-05-16)" },
390 { 390, "Sniff 12 (2002-06-26)" },
391 { 450, "Sniff 13 (2002-08-16)" },
392 { 451, "Sniff 13 (2002-08-16)" },
393 { 533, "Sniff 14 (2002-10-11)" },
394 { 580, "Sniff 15 (2002-11-14)" },
395 { 623, "Sniff 16 (2002-12-12)" },
396 { 678, "Sniff 17 (2003-01-29)" },
397 { 847, "Sniff 18 (2003-04-17)" },
398 { 876, "Sniff 19 (2003-06-10)" },
399 { 997, "Sniff 22 (2003-09-05)" },
400 { 1027, "Sniff 23 (2003-10-03)" },
401 { 1029, "Sniff 24 (2003-10-03)" },
402 { 1112, "Sniff 25 (2003-12-03)" },
403 { 1113, "Sniff 25 (2003-12-03)" },
404 { 1133, "Sniff 26 (2003-12-18)" },
405 { 1134, "Sniff 26 (2003-12-18)" },
406 { 1223, "Sniff 27 (2004-03-08)" },
407 { 1224, "Sniff 27 (2004-03-08)" },
408 { 1319, "Sniff 31 (2004-04-22)" },
409 { 1320, "Sniff 31 (2004-04-22)" },
410 { 1427, "Sniff 34 (2004-06-16)" },
411 { 1508, "Sniff 35 (2004-07-19)" },
412 { 1509, "Sniff 35 (2004-07-19)" },
413 { 1587, "Sniff 36 (2004-08-18)" },
414 { 1588, "Sniff 36 (2004-08-18)" },
415 { 1641, "Sniff 37 (2004-09-16)" },
416 { 1642, "Sniff 37 (2004-09-16)" },
417 { 1699, "Sniff 38 (2004-10-07)" },
418 { 1700, "Sniff 38 (2004-10-07)" },
419 { 1752, "Sniff 39 (2004-11-02)" },
420 { 1753, "Sniff 39 (2004-11-02)" },
421 { 1759, "Sniff 40 (2004-11-03)" },
422 { 1760, "Sniff 40 (2004-11-03)" },
423 { 1761, "Sniff 40 (2004-11-03)" },
424 { 2009, "Sniff 41 (2005-04-06)" },
425 { 2010, "Sniff 41 (2005-04-06)" },
426 { 2011, "Sniff 41 (2005-04-06)" },
427 { 2016, "Sniff 42 (2005-04-11)" },
428 { 2017, "Sniff 42 (2005-04-11)" },
429 { 2018, "Sniff 42 (2005-04-11)" },
430 { 2023, "Sniff 43 (2005-04-14)" },
431 { 2024, "Sniff 43 (2005-04-14)" },
432 { 2025, "Sniff 43 (2005-04-14)" },
433 { 2032, "Sniff 44 (2005-04-18)" },
434 { 2033, "Sniff 44 (2005-04-18)" },
435 { 2034, "Sniff 44 (2005-04-18)" },
436 { 2288, "Sniff 45 (2005-07-08)" },
437 { 2289, "Sniff 45 (2005-07-08)" },
438 { 2290, "Sniff 45 (2005-07-08)" },
439 { 2388, "Sniff 46 (2005-08-17)" },
440 { 2389, "Sniff 46 (2005-08-17)" },
441 { 2390, "Sniff 46 (2005-08-17)" },
442 { 2869, "Sniff 47 (2006-02-15)" },
443 { 2870, "Sniff 47 (2006-02-15)" },
444 { 2871, "Sniff 47 (2006-02-15)" },
445 { 3214, "Sniff 48 (2006-05-16)" },
446 { 3215, "Sniff 48 (2006-05-16)" },
447 { 3216, "Sniff 48 (2006-05-16)" },
448 { 3356, "Sniff 49 (2006-07-17)" },
449 { 3529, "Sniff 50 (2006-09-21)" },
450 { 3546, "Sniff 51 (2006-09-29)" },
451 { 3683, "Sniff 52 (2006-11-03)" },
452 { 0, }
453 };
454
csr_builddeftostr(uint16_t def)455 char *csr_builddeftostr(uint16_t def)
456 {
457 switch (def) {
458 case 0x0000:
459 return "NONE";
460 case 0x0001:
461 return "CHIP_BASE_BC01";
462 case 0x0002:
463 return "CHIP_BASE_BC02";
464 case 0x0003:
465 return "CHIP_BC01B";
466 case 0x0004:
467 return "CHIP_BC02_EXTERNAL";
468 case 0x0005:
469 return "BUILD_HCI";
470 case 0x0006:
471 return "BUILD_RFCOMM";
472 case 0x0007:
473 return "BT_VER_1_1";
474 case 0x0008:
475 return "TRANSPORT_ALL";
476 case 0x0009:
477 return "TRANSPORT_BCSP";
478 case 0x000a:
479 return "TRANSPORT_H4";
480 case 0x000b:
481 return "TRANSPORT_USB";
482 case 0x000c:
483 return "MAX_CRYPT_KEY_LEN_56";
484 case 0x000d:
485 return "MAX_CRYPT_KEY_LEN_128";
486 case 0x000e:
487 return "TRANSPORT_USER";
488 case 0x000f:
489 return "CHIP_BC02_KATO";
490 case 0x0010:
491 return "TRANSPORT_NONE";
492 case 0x0012:
493 return "REQUIRE_8MBIT";
494 case 0x0013:
495 return "RADIOTEST";
496 case 0x0014:
497 return "RADIOTEST_LITE";
498 case 0x0015:
499 return "INSTALL_FLASH";
500 case 0x0016:
501 return "INSTALL_EEPROM";
502 case 0x0017:
503 return "INSTALL_COMBO_DOT11";
504 case 0x0018:
505 return "LOWPOWER_TX";
506 case 0x0019:
507 return "TRANSPORT_TWUTL";
508 case 0x001a:
509 return "COMPILER_GCC";
510 case 0x001b:
511 return "CHIP_BC02_CLOUSEAU";
512 case 0x001c:
513 return "CHIP_BC02_TOULOUSE";
514 case 0x001d:
515 return "CHIP_BASE_BC3";
516 case 0x001e:
517 return "CHIP_BC3_NICKNACK";
518 case 0x001f:
519 return "CHIP_BC3_KALIMBA";
520 case 0x0020:
521 return "INSTALL_HCI_MODULE";
522 case 0x0021:
523 return "INSTALL_L2CAP_MODULE";
524 case 0x0022:
525 return "INSTALL_DM_MODULE";
526 case 0x0023:
527 return "INSTALL_SDP_MODULE";
528 case 0x0024:
529 return "INSTALL_RFCOMM_MODULE";
530 case 0x0025:
531 return "INSTALL_HIDIO_MODULE";
532 case 0x0026:
533 return "INSTALL_PAN_MODULE";
534 case 0x0027:
535 return "INSTALL_IPV4_MODULE";
536 case 0x0028:
537 return "INSTALL_IPV6_MODULE";
538 case 0x0029:
539 return "INSTALL_TCP_MODULE";
540 case 0x002a:
541 return "BT_VER_1_2";
542 case 0x002b:
543 return "INSTALL_UDP_MODULE";
544 case 0x002c:
545 return "REQUIRE_0_WAIT_STATES";
546 case 0x002d:
547 return "CHIP_BC3_PADDYWACK";
548 case 0x002e:
549 return "CHIP_BC4_COYOTE";
550 case 0x002f:
551 return "CHIP_BC4_ODDJOB";
552 case 0x0030:
553 return "TRANSPORT_H4DS";
554 case 0x0031:
555 return "CHIP_BASE_BC4";
556 default:
557 return "UNKNOWN";
558 }
559 }
560
csr_buildidtostr(uint16_t id)561 char *csr_buildidtostr(uint16_t id)
562 {
563 static char str[12];
564 int i;
565
566 for (i = 0; csr_map[i].id; i++)
567 if (csr_map[i].id == id)
568 return csr_map[i].str;
569
570 snprintf(str, 11, "Build %d", id);
571 return str;
572 }
573
csr_chipvertostr(uint16_t ver,uint16_t rev)574 char *csr_chipvertostr(uint16_t ver, uint16_t rev)
575 {
576 switch (ver) {
577 case 0x00:
578 return "BlueCore01a";
579 case 0x01:
580 switch (rev) {
581 case 0x64:
582 return "BlueCore01b (ES)";
583 case 0x65:
584 default:
585 return "BlueCore01b";
586 }
587 case 0x02:
588 switch (rev) {
589 case 0x89:
590 return "BlueCore02-External (ES2)";
591 case 0x8a:
592 return "BlueCore02-External";
593 case 0x28:
594 return "BlueCore02-ROM/Audio/Flash";
595 default:
596 return "BlueCore02";
597 }
598 case 0x03:
599 switch (rev) {
600 case 0x43:
601 return "BlueCore3-MM";
602 case 0x15:
603 return "BlueCore3-ROM";
604 case 0xe2:
605 return "BlueCore3-Flash";
606 case 0x26:
607 return "BlueCore4-External";
608 case 0x30:
609 return "BlueCore4-ROM";
610 default:
611 return "BlueCore3 or BlueCore4";
612 }
613 default:
614 return "Unknown";
615 }
616 }
617
csr_pskeytostr(uint16_t pskey)618 char *csr_pskeytostr(uint16_t pskey)
619 {
620 switch (pskey) {
621 case CSR_PSKEY_BDADDR:
622 return "Bluetooth address";
623 case CSR_PSKEY_COUNTRYCODE:
624 return "Country code";
625 case CSR_PSKEY_CLASSOFDEVICE:
626 return "Class of device";
627 case CSR_PSKEY_DEVICE_DRIFT:
628 return "Device drift";
629 case CSR_PSKEY_DEVICE_JITTER:
630 return "Device jitter";
631 case CSR_PSKEY_MAX_ACLS:
632 return "Maximum ACL links";
633 case CSR_PSKEY_MAX_SCOS:
634 return "Maximum SCO links";
635 case CSR_PSKEY_MAX_REMOTE_MASTERS:
636 return "Maximum remote masters";
637 case CSR_PSKEY_ENABLE_MASTERY_WITH_SLAVERY:
638 return "Support master and slave roles simultaneously";
639 case CSR_PSKEY_H_HC_FC_MAX_ACL_PKT_LEN:
640 return "Maximum HCI ACL packet length";
641 case CSR_PSKEY_H_HC_FC_MAX_SCO_PKT_LEN:
642 return "Maximum HCI SCO packet length";
643 case CSR_PSKEY_H_HC_FC_MAX_ACL_PKTS:
644 return "Maximum number of HCI ACL packets";
645 case CSR_PSKEY_H_HC_FC_MAX_SCO_PKTS:
646 return "Maximum number of HCI SCO packets";
647 case CSR_PSKEY_LC_FC_BUFFER_LOW_WATER_MARK:
648 return "Flow control low water mark";
649 case CSR_PSKEY_LC_MAX_TX_POWER:
650 return "Maximum transmit power";
651 case CSR_PSKEY_TX_GAIN_RAMP:
652 return "Transmit gain ramp rate";
653 case CSR_PSKEY_LC_POWER_TABLE:
654 return "Radio power table";
655 case CSR_PSKEY_LC_PEER_POWER_PERIOD:
656 return "Peer transmit power control interval";
657 case CSR_PSKEY_LC_FC_POOLS_LOW_WATER_MARK:
658 return "Flow control pool low water mark";
659 case CSR_PSKEY_LC_DEFAULT_TX_POWER:
660 return "Default transmit power";
661 case CSR_PSKEY_LC_RSSI_GOLDEN_RANGE:
662 return "RSSI at bottom of golden receive range";
663 case CSR_PSKEY_LC_COMBO_DISABLE_PIO_MASK:
664 return "Combo: PIO lines and logic to disable transmit";
665 case CSR_PSKEY_LC_COMBO_PRIORITY_PIO_MASK:
666 return "Combo: priority activity PIO lines and logic";
667 case CSR_PSKEY_LC_COMBO_DOT11_CHANNEL_PIO_BASE:
668 return "Combo: 802.11b channel number base PIO line";
669 case CSR_PSKEY_LC_COMBO_DOT11_BLOCK_CHANNELS:
670 return "Combo: channels to block either side of 802.11b";
671 case CSR_PSKEY_LC_MAX_TX_POWER_NO_RSSI:
672 return "Maximum transmit power when peer has no RSSI";
673 case CSR_PSKEY_LC_CONNECTION_RX_WINDOW:
674 return "Receive window size during connections";
675 case CSR_PSKEY_LC_COMBO_DOT11_TX_PROTECTION_MODE:
676 return "Combo: which TX packets shall we protect";
677 case CSR_PSKEY_LC_ENHANCED_POWER_TABLE:
678 return "Radio power table";
679 case CSR_PSKEY_LC_WIDEBAND_RSSI_CONFIG:
680 return "RSSI configuration for use with wideband RSSI";
681 case CSR_PSKEY_LC_COMBO_DOT11_PRIORITY_LEAD:
682 return "Combo: How much notice will we give the Combo Card";
683 case CSR_PSKEY_BT_CLOCK_INIT:
684 return "Initial value of Bluetooth clock";
685 case CSR_PSKEY_TX_MR_MOD_DELAY:
686 return "TX Mod delay";
687 case CSR_PSKEY_RX_MR_SYNC_TIMING:
688 return "RX MR Sync Timing";
689 case CSR_PSKEY_RX_MR_SYNC_CONFIG:
690 return "RX MR Sync Configuration";
691 case CSR_PSKEY_LC_LOST_SYNC_SLOTS:
692 return "Time in ms for lost sync in low power modes";
693 case CSR_PSKEY_RX_MR_SAMP_CONFIG:
694 return "RX MR Sync Configuration";
695 case CSR_PSKEY_AGC_HYST_LEVELS:
696 return "AGC hysteresis levels";
697 case CSR_PSKEY_RX_LEVEL_LOW_SIGNAL:
698 return "ANA_RX_LVL at low signal strengths";
699 case CSR_PSKEY_AGC_IQ_LVL_VALUES:
700 return "ANA_IQ_LVL values for AGC algorithmn";
701 case CSR_PSKEY_MR_FTRIM_OFFSET_12DB:
702 return "ANA_RX_FTRIM offset when using 12 dB IF atten ";
703 case CSR_PSKEY_MR_FTRIM_OFFSET_6DB:
704 return "ANA_RX_FTRIM offset when using 6 dB IF atten ";
705 case CSR_PSKEY_NO_CAL_ON_BOOT:
706 return "Do not calibrate radio on boot";
707 case CSR_PSKEY_RSSI_HI_TARGET:
708 return "RSSI high target";
709 case CSR_PSKEY_PREFERRED_MIN_ATTENUATION:
710 return "Preferred minimum attenuator setting";
711 case CSR_PSKEY_LC_COMBO_DOT11_PRIORITY_OVERRIDE:
712 return "Combo: Treat all packets as high priority";
713 case CSR_PSKEY_LC_MULTISLOT_HOLDOFF:
714 return "Time till single slot packets are used for resync";
715 case CSR_PSKEY_FREE_KEY_PIGEON_HOLE:
716 return "Link key store bitfield";
717 case CSR_PSKEY_LINK_KEY_BD_ADDR0:
718 return "Bluetooth address + link key 0";
719 case CSR_PSKEY_LINK_KEY_BD_ADDR1:
720 return "Bluetooth address + link key 1";
721 case CSR_PSKEY_LINK_KEY_BD_ADDR2:
722 return "Bluetooth address + link key 2";
723 case CSR_PSKEY_LINK_KEY_BD_ADDR3:
724 return "Bluetooth address + link key 3";
725 case CSR_PSKEY_LINK_KEY_BD_ADDR4:
726 return "Bluetooth address + link key 4";
727 case CSR_PSKEY_LINK_KEY_BD_ADDR5:
728 return "Bluetooth address + link key 5";
729 case CSR_PSKEY_LINK_KEY_BD_ADDR6:
730 return "Bluetooth address + link key 6";
731 case CSR_PSKEY_LINK_KEY_BD_ADDR7:
732 return "Bluetooth address + link key 7";
733 case CSR_PSKEY_LINK_KEY_BD_ADDR8:
734 return "Bluetooth address + link key 8";
735 case CSR_PSKEY_LINK_KEY_BD_ADDR9:
736 return "Bluetooth address + link key 9";
737 case CSR_PSKEY_LINK_KEY_BD_ADDR10:
738 return "Bluetooth address + link key 10";
739 case CSR_PSKEY_LINK_KEY_BD_ADDR11:
740 return "Bluetooth address + link key 11";
741 case CSR_PSKEY_LINK_KEY_BD_ADDR12:
742 return "Bluetooth address + link key 12";
743 case CSR_PSKEY_LINK_KEY_BD_ADDR13:
744 return "Bluetooth address + link key 13";
745 case CSR_PSKEY_LINK_KEY_BD_ADDR14:
746 return "Bluetooth address + link key 14";
747 case CSR_PSKEY_LINK_KEY_BD_ADDR15:
748 return "Bluetooth address + link key 15";
749 case CSR_PSKEY_ENC_KEY_LMIN:
750 return "Minimum encryption key length";
751 case CSR_PSKEY_ENC_KEY_LMAX:
752 return "Maximum encryption key length";
753 case CSR_PSKEY_LOCAL_SUPPORTED_FEATURES:
754 return "Local supported features block";
755 case CSR_PSKEY_LM_USE_UNIT_KEY:
756 return "Allow use of unit key for authentication?";
757 case CSR_PSKEY_HCI_NOP_DISABLE:
758 return "Disable the HCI Command_Status event on boot";
759 case CSR_PSKEY_LM_MAX_EVENT_FILTERS:
760 return "Maximum number of event filters";
761 case CSR_PSKEY_LM_USE_ENC_MODE_BROADCAST:
762 return "Allow LM to use enc_mode=2";
763 case CSR_PSKEY_LM_TEST_SEND_ACCEPTED_TWICE:
764 return "LM sends two LMP_accepted messages in test mode";
765 case CSR_PSKEY_LM_MAX_PAGE_HOLD_TIME:
766 return "Maximum time we hold a device around page";
767 case CSR_PSKEY_AFH_ADAPTATION_RESPONSE_TIME:
768 return "LM period for AFH adaption";
769 case CSR_PSKEY_AFH_OPTIONS:
770 return "Options to configure AFH";
771 case CSR_PSKEY_AFH_RSSI_RUN_PERIOD:
772 return "AFH RSSI reading period";
773 case CSR_PSKEY_AFH_REENABLE_CHANNEL_TIME:
774 return "AFH good channel adding time";
775 case CSR_PSKEY_NO_DROP_ON_ACR_MS_FAIL:
776 return "Complete link if acr barge-in role switch refused";
777 case CSR_PSKEY_MAX_PRIVATE_KEYS:
778 return "Max private link keys stored";
779 case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR0:
780 return "Bluetooth address + link key 0";
781 case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR1:
782 return "Bluetooth address + link key 1";
783 case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR2:
784 return "Bluetooth address + link key 2";
785 case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR3:
786 return "Bluetooth address + link key 3";
787 case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR4:
788 return "Bluetooth address + link key 4";
789 case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR5:
790 return "Bluetooth address + link key 5";
791 case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR6:
792 return "Bluetooth address + link key 6";
793 case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR7:
794 return "Bluetooth address + link key 7";
795 case CSR_PSKEY_LOCAL_SUPPORTED_COMMANDS:
796 return "Local supported commands";
797 case CSR_PSKEY_LM_MAX_ABSENCE_INDEX:
798 return "Maximum absence index allowed";
799 case CSR_PSKEY_DEVICE_NAME:
800 return "Local device's \"user friendly\" name";
801 case CSR_PSKEY_AFH_RSSI_THRESHOLD:
802 return "AFH RSSI threshold";
803 case CSR_PSKEY_LM_CASUAL_SCAN_INTERVAL:
804 return "Scan interval in slots for casual scanning";
805 case CSR_PSKEY_AFH_MIN_MAP_CHANGE:
806 return "The minimum amount to change an AFH map by";
807 case CSR_PSKEY_AFH_RSSI_LP_RUN_PERIOD:
808 return "AFH RSSI reading period when in low power mode";
809 case CSR_PSKEY_HCI_LMP_LOCAL_VERSION:
810 return "The HCI and LMP version reported locally";
811 case CSR_PSKEY_LMP_REMOTE_VERSION:
812 return "The LMP version reported remotely";
813 case CSR_PSKEY_HOLD_ERROR_MESSAGE_NUMBER:
814 return "Maximum number of queued HCI Hardware Error Events";
815 case CSR_PSKEY_DFU_ATTRIBUTES:
816 return "DFU attributes";
817 case CSR_PSKEY_DFU_DETACH_TO:
818 return "DFU detach timeout";
819 case CSR_PSKEY_DFU_TRANSFER_SIZE:
820 return "DFU transfer size";
821 case CSR_PSKEY_DFU_ENABLE:
822 return "DFU enable";
823 case CSR_PSKEY_DFU_LIN_REG_ENABLE:
824 return "Linear Regulator enabled at boot in DFU mode";
825 case CSR_PSKEY_DFUENC_VMAPP_PK_MODULUS_MSB:
826 return "DFU encryption VM application public key MSB";
827 case CSR_PSKEY_DFUENC_VMAPP_PK_MODULUS_LSB:
828 return "DFU encryption VM application public key LSB";
829 case CSR_PSKEY_DFUENC_VMAPP_PK_M_DASH:
830 return "DFU encryption VM application M dash";
831 case CSR_PSKEY_DFUENC_VMAPP_PK_R2N_MSB:
832 return "DFU encryption VM application public key R2N MSB";
833 case CSR_PSKEY_DFUENC_VMAPP_PK_R2N_LSB:
834 return "DFU encryption VM application public key R2N LSB";
835 case CSR_PSKEY_BCSP_LM_PS_BLOCK:
836 return "BCSP link establishment block";
837 case CSR_PSKEY_HOSTIO_FC_PS_BLOCK:
838 return "HCI flow control block";
839 case CSR_PSKEY_HOSTIO_PROTOCOL_INFO0:
840 return "Host transport channel 0 settings (BCSP ACK)";
841 case CSR_PSKEY_HOSTIO_PROTOCOL_INFO1:
842 return "Host transport channel 1 settings (BCSP-LE)";
843 case CSR_PSKEY_HOSTIO_PROTOCOL_INFO2:
844 return "Host transport channel 2 settings (BCCMD)";
845 case CSR_PSKEY_HOSTIO_PROTOCOL_INFO3:
846 return "Host transport channel 3 settings (HQ)";
847 case CSR_PSKEY_HOSTIO_PROTOCOL_INFO4:
848 return "Host transport channel 4 settings (DM)";
849 case CSR_PSKEY_HOSTIO_PROTOCOL_INFO5:
850 return "Host transport channel 5 settings (HCI CMD/EVT)";
851 case CSR_PSKEY_HOSTIO_PROTOCOL_INFO6:
852 return "Host transport channel 6 settings (HCI ACL)";
853 case CSR_PSKEY_HOSTIO_PROTOCOL_INFO7:
854 return "Host transport channel 7 settings (HCI SCO)";
855 case CSR_PSKEY_HOSTIO_PROTOCOL_INFO8:
856 return "Host transport channel 8 settings (L2CAP)";
857 case CSR_PSKEY_HOSTIO_PROTOCOL_INFO9:
858 return "Host transport channel 9 settings (RFCOMM)";
859 case CSR_PSKEY_HOSTIO_PROTOCOL_INFO10:
860 return "Host transport channel 10 settings (SDP)";
861 case CSR_PSKEY_HOSTIO_PROTOCOL_INFO11:
862 return "Host transport channel 11 settings (TEST)";
863 case CSR_PSKEY_HOSTIO_PROTOCOL_INFO12:
864 return "Host transport channel 12 settings (DFU)";
865 case CSR_PSKEY_HOSTIO_PROTOCOL_INFO13:
866 return "Host transport channel 13 settings (VM)";
867 case CSR_PSKEY_HOSTIO_PROTOCOL_INFO14:
868 return "Host transport channel 14 settings";
869 case CSR_PSKEY_HOSTIO_PROTOCOL_INFO15:
870 return "Host transport channel 15 settings";
871 case CSR_PSKEY_HOSTIO_UART_RESET_TIMEOUT:
872 return "UART reset counter timeout";
873 case CSR_PSKEY_HOSTIO_USE_HCI_EXTN:
874 return "Use hci_extn to route non-hci channels";
875 case CSR_PSKEY_HOSTIO_USE_HCI_EXTN_CCFC:
876 return "Use command-complete flow control for hci_extn";
877 case CSR_PSKEY_HOSTIO_HCI_EXTN_PAYLOAD_SIZE:
878 return "Maximum hci_extn payload size";
879 case CSR_PSKEY_BCSP_LM_CNF_CNT_LIMIT:
880 return "BCSP link establishment conf message count";
881 case CSR_PSKEY_HOSTIO_MAP_SCO_PCM:
882 return "Map SCO over PCM";
883 case CSR_PSKEY_HOSTIO_AWKWARD_PCM_SYNC:
884 return "PCM interface synchronisation is difficult";
885 case CSR_PSKEY_HOSTIO_BREAK_POLL_PERIOD:
886 return "Break poll period (microseconds)";
887 case CSR_PSKEY_HOSTIO_MIN_UART_HCI_SCO_SIZE:
888 return "Minimum SCO packet size sent to host over UART HCI";
889 case CSR_PSKEY_HOSTIO_MAP_SCO_CODEC:
890 return "Map SCO over the built-in codec";
891 case CSR_PSKEY_PCM_CVSD_TX_HI_FREQ_BOOST:
892 return "High frequency boost for PCM when transmitting CVSD";
893 case CSR_PSKEY_PCM_CVSD_RX_HI_FREQ_BOOST:
894 return "High frequency boost for PCM when receiving CVSD";
895 case CSR_PSKEY_PCM_CONFIG32:
896 return "PCM interface settings bitfields";
897 case CSR_PSKEY_USE_OLD_BCSP_LE:
898 return "Use the old version of BCSP link establishment";
899 case CSR_PSKEY_PCM_CVSD_USE_NEW_FILTER:
900 return "CVSD uses the new filter if available";
901 case CSR_PSKEY_PCM_FORMAT:
902 return "PCM data format";
903 case CSR_PSKEY_CODEC_OUT_GAIN:
904 return "Audio output gain when using built-in codec";
905 case CSR_PSKEY_CODEC_IN_GAIN:
906 return "Audio input gain when using built-in codec";
907 case CSR_PSKEY_CODEC_PIO:
908 return "PIO to enable when built-in codec is enabled";
909 case CSR_PSKEY_PCM_LOW_JITTER_CONFIG:
910 return "PCM interface settings for low jitter master mode";
911 case CSR_PSKEY_HOSTIO_SCO_PCM_THRESHOLDS:
912 return "Thresholds for SCO PCM buffers";
913 case CSR_PSKEY_HOSTIO_SCO_HCI_THRESHOLDS:
914 return "Thresholds for SCO HCI buffers";
915 case CSR_PSKEY_HOSTIO_MAP_SCO_PCM_SLOT:
916 return "Route SCO data to specified slot in pcm frame";
917 case CSR_PSKEY_UART_BAUDRATE:
918 return "UART Baud rate";
919 case CSR_PSKEY_UART_CONFIG_BCSP:
920 return "UART configuration when using BCSP";
921 case CSR_PSKEY_UART_CONFIG_H4:
922 return "UART configuration when using H4";
923 case CSR_PSKEY_UART_CONFIG_H5:
924 return "UART configuration when using H5";
925 case CSR_PSKEY_UART_CONFIG_USR:
926 return "UART configuration when under VM control";
927 case CSR_PSKEY_UART_TX_CRCS:
928 return "Use CRCs for BCSP or H5";
929 case CSR_PSKEY_UART_ACK_TIMEOUT:
930 return "Acknowledgement timeout for BCSP and H5";
931 case CSR_PSKEY_UART_TX_MAX_ATTEMPTS:
932 return "Max times to send reliable BCSP or H5 message";
933 case CSR_PSKEY_UART_TX_WINDOW_SIZE:
934 return "Transmit window size for BCSP and H5";
935 case CSR_PSKEY_UART_HOST_WAKE:
936 return "UART host wakeup";
937 case CSR_PSKEY_HOSTIO_THROTTLE_TIMEOUT:
938 return "Host interface performance control.";
939 case CSR_PSKEY_PCM_ALWAYS_ENABLE:
940 return "PCM port is always enable when chip is running";
941 case CSR_PSKEY_UART_HOST_WAKE_SIGNAL:
942 return "Signal to use for uart host wakeup protocol";
943 case CSR_PSKEY_UART_CONFIG_H4DS:
944 return "UART configuration when using H4DS";
945 case CSR_PSKEY_H4DS_WAKE_DURATION:
946 return "How long to spend waking the host when using H4DS";
947 case CSR_PSKEY_H4DS_MAXWU:
948 return "Maximum number of H4DS Wake-Up messages to send";
949 case CSR_PSKEY_H4DS_LE_TIMER_PERIOD:
950 return "H4DS Link Establishment Tsync and Tconf period";
951 case CSR_PSKEY_H4DS_TWU_TIMER_PERIOD:
952 return "H4DS Twu timer period";
953 case CSR_PSKEY_H4DS_UART_IDLE_TIMER_PERIOD:
954 return "H4DS Tuart_idle timer period";
955 case CSR_PSKEY_ANA_FTRIM:
956 return "Crystal frequency trim";
957 case CSR_PSKEY_WD_TIMEOUT:
958 return "Watchdog timeout (microseconds)";
959 case CSR_PSKEY_WD_PERIOD:
960 return "Watchdog period (microseconds)";
961 case CSR_PSKEY_HOST_INTERFACE:
962 return "Host interface";
963 case CSR_PSKEY_HQ_HOST_TIMEOUT:
964 return "HQ host command timeout";
965 case CSR_PSKEY_HQ_ACTIVE:
966 return "Enable host query task?";
967 case CSR_PSKEY_BCCMD_SECURITY_ACTIVE:
968 return "Enable configuration security";
969 case CSR_PSKEY_ANA_FREQ:
970 return "Crystal frequency";
971 case CSR_PSKEY_PIO_PROTECT_MASK:
972 return "Access to PIO pins";
973 case CSR_PSKEY_PMALLOC_SIZES:
974 return "pmalloc sizes array";
975 case CSR_PSKEY_UART_BAUD_RATE:
976 return "UART Baud rate (pre 18)";
977 case CSR_PSKEY_UART_CONFIG:
978 return "UART configuration bitfield";
979 case CSR_PSKEY_STUB:
980 return "Stub";
981 case CSR_PSKEY_TXRX_PIO_CONTROL:
982 return "TX and RX PIO control";
983 case CSR_PSKEY_ANA_RX_LEVEL:
984 return "ANA_RX_LVL register initial value";
985 case CSR_PSKEY_ANA_RX_FTRIM:
986 return "ANA_RX_FTRIM register initial value";
987 case CSR_PSKEY_PSBC_DATA_VERSION:
988 return "Persistent store version";
989 case CSR_PSKEY_PCM0_ATTENUATION:
990 return "Volume control on PCM channel 0";
991 case CSR_PSKEY_LO_LVL_MAX:
992 return "Maximum value of LO level control register";
993 case CSR_PSKEY_LO_ADC_AMPL_MIN:
994 return "Minimum value of the LO amplitude measured on the ADC";
995 case CSR_PSKEY_LO_ADC_AMPL_MAX:
996 return "Maximum value of the LO amplitude measured on the ADC";
997 case CSR_PSKEY_IQ_TRIM_CHANNEL:
998 return "IQ calibration channel";
999 case CSR_PSKEY_IQ_TRIM_GAIN:
1000 return "IQ calibration gain";
1001 case CSR_PSKEY_IQ_TRIM_ENABLE:
1002 return "IQ calibration enable";
1003 case CSR_PSKEY_TX_OFFSET_HALF_MHZ:
1004 return "Transmit offset";
1005 case CSR_PSKEY_GBL_MISC_ENABLES:
1006 return "Global miscellaneous hardware enables";
1007 case CSR_PSKEY_UART_SLEEP_TIMEOUT:
1008 return "Time in ms to deep sleep if nothing received";
1009 case CSR_PSKEY_DEEP_SLEEP_STATE:
1010 return "Deep sleep state usage";
1011 case CSR_PSKEY_IQ_ENABLE_PHASE_TRIM:
1012 return "IQ phase enable";
1013 case CSR_PSKEY_HCI_HANDLE_FREEZE_PERIOD:
1014 return "Time for which HCI handle is frozen after link removal";
1015 case CSR_PSKEY_MAX_FROZEN_HCI_HANDLES:
1016 return "Maximum number of frozen HCI handles";
1017 case CSR_PSKEY_PAGETABLE_DESTRUCTION_DELAY:
1018 return "Delay from freezing buf handle to deleting page table";
1019 case CSR_PSKEY_IQ_TRIM_PIO_SETTINGS:
1020 return "IQ PIO settings";
1021 case CSR_PSKEY_USE_EXTERNAL_CLOCK:
1022 return "Device uses an external clock";
1023 case CSR_PSKEY_DEEP_SLEEP_WAKE_CTS:
1024 return "Exit deep sleep on CTS line activity";
1025 case CSR_PSKEY_FC_HC2H_FLUSH_DELAY:
1026 return "Delay from disconnect to flushing HC->H FC tokens";
1027 case CSR_PSKEY_RX_HIGHSIDE:
1028 return "Disable the HIGHSIDE bit in ANA_CONFIG";
1029 case CSR_PSKEY_TX_PRE_LVL:
1030 return "TX pre-amplifier level";
1031 case CSR_PSKEY_RX_SINGLE_ENDED:
1032 return "RX single ended";
1033 case CSR_PSKEY_TX_FILTER_CONFIG:
1034 return "TX filter configuration";
1035 case CSR_PSKEY_CLOCK_REQUEST_ENABLE:
1036 return "External clock request enable";
1037 case CSR_PSKEY_RX_MIN_ATTEN:
1038 return "Minimum attenuation allowed for receiver";
1039 case CSR_PSKEY_XTAL_TARGET_AMPLITUDE:
1040 return "Crystal target amplitude";
1041 case CSR_PSKEY_PCM_MIN_CPU_CLOCK:
1042 return "Minimum CPU clock speed with PCM port running";
1043 case CSR_PSKEY_HOST_INTERFACE_PIO_USB:
1044 return "USB host interface selection PIO line";
1045 case CSR_PSKEY_CPU_IDLE_MODE:
1046 return "CPU idle mode when radio is active";
1047 case CSR_PSKEY_DEEP_SLEEP_CLEAR_RTS:
1048 return "Deep sleep clears the UART RTS line";
1049 case CSR_PSKEY_RF_RESONANCE_TRIM:
1050 return "Frequency trim for IQ and LNA resonant circuits";
1051 case CSR_PSKEY_DEEP_SLEEP_PIO_WAKE:
1052 return "PIO line to wake the chip from deep sleep";
1053 case CSR_PSKEY_DRAIN_BORE_TIMERS:
1054 return "Energy consumption measurement settings";
1055 case CSR_PSKEY_DRAIN_TX_POWER_BASE:
1056 return "Energy consumption measurement settings";
1057 case CSR_PSKEY_MODULE_ID:
1058 return "Module serial number";
1059 case CSR_PSKEY_MODULE_DESIGN:
1060 return "Module design ID";
1061 case CSR_PSKEY_MODULE_SECURITY_CODE:
1062 return "Module security code";
1063 case CSR_PSKEY_VM_DISABLE:
1064 return "VM disable";
1065 case CSR_PSKEY_MOD_MANUF0:
1066 return "Module manufactuer data 0";
1067 case CSR_PSKEY_MOD_MANUF1:
1068 return "Module manufactuer data 1";
1069 case CSR_PSKEY_MOD_MANUF2:
1070 return "Module manufactuer data 2";
1071 case CSR_PSKEY_MOD_MANUF3:
1072 return "Module manufactuer data 3";
1073 case CSR_PSKEY_MOD_MANUF4:
1074 return "Module manufactuer data 4";
1075 case CSR_PSKEY_MOD_MANUF5:
1076 return "Module manufactuer data 5";
1077 case CSR_PSKEY_MOD_MANUF6:
1078 return "Module manufactuer data 6";
1079 case CSR_PSKEY_MOD_MANUF7:
1080 return "Module manufactuer data 7";
1081 case CSR_PSKEY_MOD_MANUF8:
1082 return "Module manufactuer data 8";
1083 case CSR_PSKEY_MOD_MANUF9:
1084 return "Module manufactuer data 9";
1085 case CSR_PSKEY_DUT_VM_DISABLE:
1086 return "VM disable when entering radiotest modes";
1087 case CSR_PSKEY_USR0:
1088 return "User configuration data 0";
1089 case CSR_PSKEY_USR1:
1090 return "User configuration data 1";
1091 case CSR_PSKEY_USR2:
1092 return "User configuration data 2";
1093 case CSR_PSKEY_USR3:
1094 return "User configuration data 3";
1095 case CSR_PSKEY_USR4:
1096 return "User configuration data 4";
1097 case CSR_PSKEY_USR5:
1098 return "User configuration data 5";
1099 case CSR_PSKEY_USR6:
1100 return "User configuration data 6";
1101 case CSR_PSKEY_USR7:
1102 return "User configuration data 7";
1103 case CSR_PSKEY_USR8:
1104 return "User configuration data 8";
1105 case CSR_PSKEY_USR9:
1106 return "User configuration data 9";
1107 case CSR_PSKEY_USR10:
1108 return "User configuration data 10";
1109 case CSR_PSKEY_USR11:
1110 return "User configuration data 11";
1111 case CSR_PSKEY_USR12:
1112 return "User configuration data 12";
1113 case CSR_PSKEY_USR13:
1114 return "User configuration data 13";
1115 case CSR_PSKEY_USR14:
1116 return "User configuration data 14";
1117 case CSR_PSKEY_USR15:
1118 return "User configuration data 15";
1119 case CSR_PSKEY_USR16:
1120 return "User configuration data 16";
1121 case CSR_PSKEY_USR17:
1122 return "User configuration data 17";
1123 case CSR_PSKEY_USR18:
1124 return "User configuration data 18";
1125 case CSR_PSKEY_USR19:
1126 return "User configuration data 19";
1127 case CSR_PSKEY_USR20:
1128 return "User configuration data 20";
1129 case CSR_PSKEY_USR21:
1130 return "User configuration data 21";
1131 case CSR_PSKEY_USR22:
1132 return "User configuration data 22";
1133 case CSR_PSKEY_USR23:
1134 return "User configuration data 23";
1135 case CSR_PSKEY_USR24:
1136 return "User configuration data 24";
1137 case CSR_PSKEY_USR25:
1138 return "User configuration data 25";
1139 case CSR_PSKEY_USR26:
1140 return "User configuration data 26";
1141 case CSR_PSKEY_USR27:
1142 return "User configuration data 27";
1143 case CSR_PSKEY_USR28:
1144 return "User configuration data 28";
1145 case CSR_PSKEY_USR29:
1146 return "User configuration data 29";
1147 case CSR_PSKEY_USR30:
1148 return "User configuration data 30";
1149 case CSR_PSKEY_USR31:
1150 return "User configuration data 31";
1151 case CSR_PSKEY_USR32:
1152 return "User configuration data 32";
1153 case CSR_PSKEY_USR33:
1154 return "User configuration data 33";
1155 case CSR_PSKEY_USR34:
1156 return "User configuration data 34";
1157 case CSR_PSKEY_USR35:
1158 return "User configuration data 35";
1159 case CSR_PSKEY_USR36:
1160 return "User configuration data 36";
1161 case CSR_PSKEY_USR37:
1162 return "User configuration data 37";
1163 case CSR_PSKEY_USR38:
1164 return "User configuration data 38";
1165 case CSR_PSKEY_USR39:
1166 return "User configuration data 39";
1167 case CSR_PSKEY_USR40:
1168 return "User configuration data 40";
1169 case CSR_PSKEY_USR41:
1170 return "User configuration data 41";
1171 case CSR_PSKEY_USR42:
1172 return "User configuration data 42";
1173 case CSR_PSKEY_USR43:
1174 return "User configuration data 43";
1175 case CSR_PSKEY_USR44:
1176 return "User configuration data 44";
1177 case CSR_PSKEY_USR45:
1178 return "User configuration data 45";
1179 case CSR_PSKEY_USR46:
1180 return "User configuration data 46";
1181 case CSR_PSKEY_USR47:
1182 return "User configuration data 47";
1183 case CSR_PSKEY_USR48:
1184 return "User configuration data 48";
1185 case CSR_PSKEY_USR49:
1186 return "User configuration data 49";
1187 case CSR_PSKEY_USB_VERSION:
1188 return "USB specification version number";
1189 case CSR_PSKEY_USB_DEVICE_CLASS_CODES:
1190 return "USB device class codes";
1191 case CSR_PSKEY_USB_VENDOR_ID:
1192 return "USB vendor identifier";
1193 case CSR_PSKEY_USB_PRODUCT_ID:
1194 return "USB product identifier";
1195 case CSR_PSKEY_USB_MANUF_STRING:
1196 return "USB manufacturer string";
1197 case CSR_PSKEY_USB_PRODUCT_STRING:
1198 return "USB product string";
1199 case CSR_PSKEY_USB_SERIAL_NUMBER_STRING:
1200 return "USB serial number string";
1201 case CSR_PSKEY_USB_CONFIG_STRING:
1202 return "USB configuration string";
1203 case CSR_PSKEY_USB_ATTRIBUTES:
1204 return "USB attributes bitmap";
1205 case CSR_PSKEY_USB_MAX_POWER:
1206 return "USB device maximum power consumption";
1207 case CSR_PSKEY_USB_BT_IF_CLASS_CODES:
1208 return "USB Bluetooth interface class codes";
1209 case CSR_PSKEY_USB_LANGID:
1210 return "USB language strings supported";
1211 case CSR_PSKEY_USB_DFU_CLASS_CODES:
1212 return "USB DFU class codes block";
1213 case CSR_PSKEY_USB_DFU_PRODUCT_ID:
1214 return "USB DFU product ID";
1215 case CSR_PSKEY_USB_PIO_DETACH:
1216 return "USB detach/attach PIO line";
1217 case CSR_PSKEY_USB_PIO_WAKEUP:
1218 return "USB wakeup PIO line";
1219 case CSR_PSKEY_USB_PIO_PULLUP:
1220 return "USB D+ pullup PIO line";
1221 case CSR_PSKEY_USB_PIO_VBUS:
1222 return "USB VBus detection PIO Line";
1223 case CSR_PSKEY_USB_PIO_WAKE_TIMEOUT:
1224 return "Timeout for assertion of USB PIO wake signal";
1225 case CSR_PSKEY_USB_PIO_RESUME:
1226 return "PIO signal used in place of bus resume";
1227 case CSR_PSKEY_USB_BT_SCO_IF_CLASS_CODES:
1228 return "USB Bluetooth SCO interface class codes";
1229 case CSR_PSKEY_USB_SUSPEND_PIO_LEVEL:
1230 return "USB PIO levels to set when suspended";
1231 case CSR_PSKEY_USB_SUSPEND_PIO_DIR:
1232 return "USB PIO I/O directions to set when suspended";
1233 case CSR_PSKEY_USB_SUSPEND_PIO_MASK:
1234 return "USB PIO lines to be set forcibly in suspend";
1235 case CSR_PSKEY_USB_ENDPOINT_0_MAX_PACKET_SIZE:
1236 return "The maxmimum packet size for USB endpoint 0";
1237 case CSR_PSKEY_USB_CONFIG:
1238 return "USB config params for new chips (>bc2)";
1239 case CSR_PSKEY_RADIOTEST_ATTEN_INIT:
1240 return "Radio test initial attenuator";
1241 case CSR_PSKEY_RADIOTEST_FIRST_TRIM_TIME:
1242 return "IQ first calibration period in test";
1243 case CSR_PSKEY_RADIOTEST_SUBSEQUENT_TRIM_TIME:
1244 return "IQ subsequent calibration period in test";
1245 case CSR_PSKEY_RADIOTEST_LO_LVL_TRIM_ENABLE:
1246 return "LO_LVL calibration enable";
1247 case CSR_PSKEY_RADIOTEST_DISABLE_MODULATION:
1248 return "Disable modulation during radiotest transmissions";
1249 case CSR_PSKEY_RFCOMM_FCON_THRESHOLD:
1250 return "RFCOMM aggregate flow control on threshold";
1251 case CSR_PSKEY_RFCOMM_FCOFF_THRESHOLD:
1252 return "RFCOMM aggregate flow control off threshold";
1253 case CSR_PSKEY_IPV6_STATIC_ADDR:
1254 return "Static IPv6 address";
1255 case CSR_PSKEY_IPV4_STATIC_ADDR:
1256 return "Static IPv4 address";
1257 case CSR_PSKEY_IPV6_STATIC_PREFIX_LEN:
1258 return "Static IPv6 prefix length";
1259 case CSR_PSKEY_IPV6_STATIC_ROUTER_ADDR:
1260 return "Static IPv6 router address";
1261 case CSR_PSKEY_IPV4_STATIC_SUBNET_MASK:
1262 return "Static IPv4 subnet mask";
1263 case CSR_PSKEY_IPV4_STATIC_ROUTER_ADDR:
1264 return "Static IPv4 router address";
1265 case CSR_PSKEY_MDNS_NAME:
1266 return "Multicast DNS name";
1267 case CSR_PSKEY_FIXED_PIN:
1268 return "Fixed PIN";
1269 case CSR_PSKEY_MDNS_PORT:
1270 return "Multicast DNS port";
1271 case CSR_PSKEY_MDNS_TTL:
1272 return "Multicast DNS TTL";
1273 case CSR_PSKEY_MDNS_IPV4_ADDR:
1274 return "Multicast DNS IPv4 address";
1275 case CSR_PSKEY_ARP_CACHE_TIMEOUT:
1276 return "ARP cache timeout";
1277 case CSR_PSKEY_HFP_POWER_TABLE:
1278 return "HFP power table";
1279 case CSR_PSKEY_DRAIN_BORE_TIMER_COUNTERS:
1280 return "Energy consumption estimation timer counters";
1281 case CSR_PSKEY_DRAIN_BORE_COUNTERS:
1282 return "Energy consumption estimation counters";
1283 case CSR_PSKEY_LOOP_FILTER_TRIM:
1284 return "Trim value to optimise loop filter";
1285 case CSR_PSKEY_DRAIN_BORE_CURRENT_PEAK:
1286 return "Energy consumption estimation current peak";
1287 case CSR_PSKEY_VM_E2_CACHE_LIMIT:
1288 return "Maximum RAM for caching EEPROM VM application";
1289 case CSR_PSKEY_FORCE_16MHZ_REF_PIO:
1290 return "PIO line to force 16 MHz reference to be assumed";
1291 case CSR_PSKEY_CDMA_LO_REF_LIMITS:
1292 return "Local oscillator frequency reference limits for CDMA";
1293 case CSR_PSKEY_CDMA_LO_ERROR_LIMITS:
1294 return "Local oscillator frequency error limits for CDMA";
1295 case CSR_PSKEY_CLOCK_STARTUP_DELAY:
1296 return "Clock startup delay in milliseconds";
1297 case CSR_PSKEY_DEEP_SLEEP_CORRECTION_FACTOR:
1298 return "Deep sleep clock correction factor";
1299 case CSR_PSKEY_TEMPERATURE_CALIBRATION:
1300 return "Temperature in deg C for a given internal setting";
1301 case CSR_PSKEY_TEMPERATURE_VS_DELTA_INTERNAL_PA:
1302 return "Temperature for given internal PA adjustment";
1303 case CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_PRE_LVL:
1304 return "Temperature for a given TX_PRE_LVL adjustment";
1305 case CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_BB:
1306 return "Temperature for a given TX_BB adjustment";
1307 case CSR_PSKEY_TEMPERATURE_VS_DELTA_ANA_FTRIM:
1308 return "Temperature for given crystal trim adjustment";
1309 case CSR_PSKEY_TEST_DELTA_OFFSET:
1310 return "Frequency offset applied to synthesiser in test mode";
1311 case CSR_PSKEY_RX_DYNAMIC_LVL_OFFSET:
1312 return "Receiver dynamic level offset depending on channel";
1313 case CSR_PSKEY_TEST_FORCE_OFFSET:
1314 return "Force use of exact value in PSKEY_TEST_DELTA_OFFSET";
1315 case CSR_PSKEY_RF_TRAP_BAD_DIVISION_RATIOS:
1316 return "Trap bad division ratios in radio frequency tables";
1317 case CSR_PSKEY_RADIOTEST_CDMA_LO_REF_LIMITS:
1318 return "LO frequency reference limits for CDMA in radiotest";
1319 case CSR_PSKEY_INITIAL_BOOTMODE:
1320 return "Initial device bootmode";
1321 case CSR_PSKEY_ONCHIP_HCI_CLIENT:
1322 return "HCI traffic routed internally";
1323 case CSR_PSKEY_RX_ATTEN_BACKOFF:
1324 return "Receiver attenuation back-off";
1325 case CSR_PSKEY_RX_ATTEN_UPDATE_RATE:
1326 return "Receiver attenuation update rate";
1327 case CSR_PSKEY_SYNTH_TXRX_THRESHOLDS:
1328 return "Local oscillator tuning voltage limits for tx and rx";
1329 case CSR_PSKEY_MIN_WAIT_STATES:
1330 return "Flash wait state indicator";
1331 case CSR_PSKEY_RSSI_CORRECTION:
1332 return "RSSI correction factor.";
1333 case CSR_PSKEY_SCHED_THROTTLE_TIMEOUT:
1334 return "Scheduler performance control.";
1335 case CSR_PSKEY_DEEP_SLEEP_USE_EXTERNAL_CLOCK:
1336 return "Deep sleep uses external 32 kHz clock source";
1337 case CSR_PSKEY_TRIM_RADIO_FILTERS:
1338 return "Trim rx and tx radio filters if true.";
1339 case CSR_PSKEY_TRANSMIT_OFFSET:
1340 return "Transmit offset in units of 62.5 kHz";
1341 case CSR_PSKEY_USB_VM_CONTROL:
1342 return "VM application will supply USB descriptors";
1343 case CSR_PSKEY_MR_ANA_RX_FTRIM:
1344 return "Medium rate value for the ANA_RX_FTRIM register";
1345 case CSR_PSKEY_I2C_CONFIG:
1346 return "I2C configuration";
1347 case CSR_PSKEY_IQ_LVL_RX:
1348 return "IQ demand level for reception";
1349 case CSR_PSKEY_MR_TX_FILTER_CONFIG:
1350 return "TX filter configuration used for enhanced data rate";
1351 case CSR_PSKEY_MR_TX_CONFIG2:
1352 return "TX filter configuration used for enhanced data rate";
1353 case CSR_PSKEY_USB_DONT_RESET_BOOTMODE_ON_HOST_RESET:
1354 return "Don't reset bootmode if USB host resets";
1355 case CSR_PSKEY_LC_USE_THROTTLING:
1356 return "Adjust packet selection on packet error rate";
1357 case CSR_PSKEY_CHARGER_TRIM:
1358 return "Trim value for the current charger";
1359 case CSR_PSKEY_CLOCK_REQUEST_FEATURES:
1360 return "Clock request is tristated if enabled";
1361 case CSR_PSKEY_TRANSMIT_OFFSET_CLASS1:
1362 return "Transmit offset / 62.5 kHz for class 1 radios";
1363 case CSR_PSKEY_TX_AVOID_PA_CLASS1_PIO:
1364 return "PIO line asserted in class1 operation to avoid PA";
1365 case CSR_PSKEY_MR_PIO_CONFIG:
1366 return "PIO line asserted in class1 operation to avoid PA";
1367 case CSR_PSKEY_UART_CONFIG2:
1368 return "The UART Sampling point";
1369 case CSR_PSKEY_CLASS1_IQ_LVL:
1370 return "IQ demand level for class 1 power level";
1371 case CSR_PSKEY_CLASS1_TX_CONFIG2:
1372 return "TX filter configuration used for class 1 tx power";
1373 case CSR_PSKEY_TEMPERATURE_VS_DELTA_INTERNAL_PA_CLASS1:
1374 return "Temperature for given internal PA adjustment";
1375 case CSR_PSKEY_TEMPERATURE_VS_DELTA_EXTERNAL_PA_CLASS1:
1376 return "Temperature for given internal PA adjustment";
1377 case CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_PRE_LVL_MR:
1378 return "Temperature adjustment for TX_PRE_LVL in EDR";
1379 case CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_BB_MR_HEADER:
1380 return "Temperature for a given TX_BB in EDR header";
1381 case CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_BB_MR_PAYLOAD:
1382 return "Temperature for a given TX_BB in EDR payload";
1383 case CSR_PSKEY_RX_MR_EQ_TAPS:
1384 return "Adjust receiver configuration for EDR";
1385 case CSR_PSKEY_TX_PRE_LVL_CLASS1:
1386 return "TX pre-amplifier level in class 1 operation";
1387 case CSR_PSKEY_ANALOGUE_ATTENUATOR:
1388 return "TX analogue attenuator setting";
1389 case CSR_PSKEY_MR_RX_FILTER_TRIM:
1390 return "Trim for receiver used in EDR.";
1391 case CSR_PSKEY_MR_RX_FILTER_RESPONSE:
1392 return "Filter response for receiver used in EDR.";
1393 case CSR_PSKEY_PIO_WAKEUP_STATE:
1394 return "PIO deep sleep wake up state ";
1395 case CSR_PSKEY_MR_TX_IF_ATTEN_OFF_TEMP:
1396 return "TX IF atten off temperature when using EDR.";
1397 case CSR_PSKEY_LO_DIV_LATCH_BYPASS:
1398 return "Bypass latch for LO dividers";
1399 case CSR_PSKEY_LO_VCO_STANDBY:
1400 return "Use standby mode for the LO VCO";
1401 case CSR_PSKEY_SLOW_CLOCK_FILTER_SHIFT:
1402 return "Slow clock sampling filter constant";
1403 case CSR_PSKEY_SLOW_CLOCK_FILTER_DIVIDER:
1404 return "Slow clock filter fractional threshold";
1405 case CSR_PSKEY_USB_ATTRIBUTES_POWER:
1406 return "USB self powered";
1407 case CSR_PSKEY_USB_ATTRIBUTES_WAKEUP:
1408 return "USB responds to wake-up";
1409 case CSR_PSKEY_DFU_ATTRIBUTES_MANIFESTATION_TOLERANT:
1410 return "DFU manifestation tolerant";
1411 case CSR_PSKEY_DFU_ATTRIBUTES_CAN_UPLOAD:
1412 return "DFU can upload";
1413 case CSR_PSKEY_DFU_ATTRIBUTES_CAN_DOWNLOAD:
1414 return "DFU can download";
1415 case CSR_PSKEY_UART_CONFIG_STOP_BITS:
1416 return "UART: stop bits";
1417 case CSR_PSKEY_UART_CONFIG_PARITY_BIT:
1418 return "UART: parity bit";
1419 case CSR_PSKEY_UART_CONFIG_FLOW_CTRL_EN:
1420 return "UART: hardware flow control";
1421 case CSR_PSKEY_UART_CONFIG_RTS_AUTO_EN:
1422 return "UART: RTS auto-enabled";
1423 case CSR_PSKEY_UART_CONFIG_RTS:
1424 return "UART: RTS asserted";
1425 case CSR_PSKEY_UART_CONFIG_TX_ZERO_EN:
1426 return "UART: TX zero enable";
1427 case CSR_PSKEY_UART_CONFIG_NON_BCSP_EN:
1428 return "UART: enable BCSP-specific hardware";
1429 case CSR_PSKEY_UART_CONFIG_RX_RATE_DELAY:
1430 return "UART: RX rate delay";
1431 case CSR_PSKEY_UART_SEQ_TIMEOUT:
1432 return "UART: BCSP ack timeout";
1433 case CSR_PSKEY_UART_SEQ_RETRIES:
1434 return "UART: retry limit in sequencing layer";
1435 case CSR_PSKEY_UART_SEQ_WINSIZE:
1436 return "UART: BCSP transmit window size";
1437 case CSR_PSKEY_UART_USE_CRC_ON_TX:
1438 return "UART: use BCSP CRCs";
1439 case CSR_PSKEY_UART_HOST_INITIAL_STATE:
1440 return "UART: initial host state";
1441 case CSR_PSKEY_UART_HOST_ATTENTION_SPAN:
1442 return "UART: host attention span";
1443 case CSR_PSKEY_UART_HOST_WAKEUP_TIME:
1444 return "UART: host wakeup time";
1445 case CSR_PSKEY_UART_HOST_WAKEUP_WAIT:
1446 return "UART: host wakeup wait";
1447 case CSR_PSKEY_BCSP_LM_MODE:
1448 return "BCSP link establishment mode";
1449 case CSR_PSKEY_BCSP_LM_SYNC_RETRIES:
1450 return "BCSP link establishment sync retries";
1451 case CSR_PSKEY_BCSP_LM_TSHY:
1452 return "BCSP link establishment Tshy";
1453 case CSR_PSKEY_UART_DFU_CONFIG_STOP_BITS:
1454 return "DFU mode UART: stop bits";
1455 case CSR_PSKEY_UART_DFU_CONFIG_PARITY_BIT:
1456 return "DFU mode UART: parity bit";
1457 case CSR_PSKEY_UART_DFU_CONFIG_FLOW_CTRL_EN:
1458 return "DFU mode UART: hardware flow control";
1459 case CSR_PSKEY_UART_DFU_CONFIG_RTS_AUTO_EN:
1460 return "DFU mode UART: RTS auto-enabled";
1461 case CSR_PSKEY_UART_DFU_CONFIG_RTS:
1462 return "DFU mode UART: RTS asserted";
1463 case CSR_PSKEY_UART_DFU_CONFIG_TX_ZERO_EN:
1464 return "DFU mode UART: TX zero enable";
1465 case CSR_PSKEY_UART_DFU_CONFIG_NON_BCSP_EN:
1466 return "DFU mode UART: enable BCSP-specific hardware";
1467 case CSR_PSKEY_UART_DFU_CONFIG_RX_RATE_DELAY:
1468 return "DFU mode UART: RX rate delay";
1469 case CSR_PSKEY_AMUX_AIO0:
1470 return "Multiplexer for AIO 0";
1471 case CSR_PSKEY_AMUX_AIO1:
1472 return "Multiplexer for AIO 1";
1473 case CSR_PSKEY_AMUX_AIO2:
1474 return "Multiplexer for AIO 2";
1475 case CSR_PSKEY_AMUX_AIO3:
1476 return "Multiplexer for AIO 3";
1477 case CSR_PSKEY_LOCAL_NAME_SIMPLIFIED:
1478 return "Local Name (simplified)";
1479 case CSR_PSKEY_EXTENDED_STUB:
1480 return "Extended stub";
1481 default:
1482 return "Unknown";
1483 }
1484 }
1485
csr_pskeytoval(uint16_t pskey)1486 char *csr_pskeytoval(uint16_t pskey)
1487 {
1488 switch (pskey) {
1489 case CSR_PSKEY_BDADDR:
1490 return "BDADDR";
1491 case CSR_PSKEY_COUNTRYCODE:
1492 return "COUNTRYCODE";
1493 case CSR_PSKEY_CLASSOFDEVICE:
1494 return "CLASSOFDEVICE";
1495 case CSR_PSKEY_DEVICE_DRIFT:
1496 return "DEVICE_DRIFT";
1497 case CSR_PSKEY_DEVICE_JITTER:
1498 return "DEVICE_JITTER";
1499 case CSR_PSKEY_MAX_ACLS:
1500 return "MAX_ACLS";
1501 case CSR_PSKEY_MAX_SCOS:
1502 return "MAX_SCOS";
1503 case CSR_PSKEY_MAX_REMOTE_MASTERS:
1504 return "MAX_REMOTE_MASTERS";
1505 case CSR_PSKEY_ENABLE_MASTERY_WITH_SLAVERY:
1506 return "ENABLE_MASTERY_WITH_SLAVERY";
1507 case CSR_PSKEY_H_HC_FC_MAX_ACL_PKT_LEN:
1508 return "H_HC_FC_MAX_ACL_PKT_LEN";
1509 case CSR_PSKEY_H_HC_FC_MAX_SCO_PKT_LEN:
1510 return "H_HC_FC_MAX_SCO_PKT_LEN";
1511 case CSR_PSKEY_H_HC_FC_MAX_ACL_PKTS:
1512 return "H_HC_FC_MAX_ACL_PKTS";
1513 case CSR_PSKEY_H_HC_FC_MAX_SCO_PKTS:
1514 return "H_HC_FC_MAX_SCO_PKTS";
1515 case CSR_PSKEY_LC_FC_BUFFER_LOW_WATER_MARK:
1516 return "LC_FC_BUFFER_LOW_WATER_MARK";
1517 case CSR_PSKEY_LC_MAX_TX_POWER:
1518 return "LC_MAX_TX_POWER";
1519 case CSR_PSKEY_TX_GAIN_RAMP:
1520 return "TX_GAIN_RAMP";
1521 case CSR_PSKEY_LC_POWER_TABLE:
1522 return "LC_POWER_TABLE";
1523 case CSR_PSKEY_LC_PEER_POWER_PERIOD:
1524 return "LC_PEER_POWER_PERIOD";
1525 case CSR_PSKEY_LC_FC_POOLS_LOW_WATER_MARK:
1526 return "LC_FC_POOLS_LOW_WATER_MARK";
1527 case CSR_PSKEY_LC_DEFAULT_TX_POWER:
1528 return "LC_DEFAULT_TX_POWER";
1529 case CSR_PSKEY_LC_RSSI_GOLDEN_RANGE:
1530 return "LC_RSSI_GOLDEN_RANGE";
1531 case CSR_PSKEY_LC_COMBO_DISABLE_PIO_MASK:
1532 return "LC_COMBO_DISABLE_PIO_MASK";
1533 case CSR_PSKEY_LC_COMBO_PRIORITY_PIO_MASK:
1534 return "LC_COMBO_PRIORITY_PIO_MASK";
1535 case CSR_PSKEY_LC_COMBO_DOT11_CHANNEL_PIO_BASE:
1536 return "LC_COMBO_DOT11_CHANNEL_PIO_BASE";
1537 case CSR_PSKEY_LC_COMBO_DOT11_BLOCK_CHANNELS:
1538 return "LC_COMBO_DOT11_BLOCK_CHANNELS";
1539 case CSR_PSKEY_LC_MAX_TX_POWER_NO_RSSI:
1540 return "LC_MAX_TX_POWER_NO_RSSI";
1541 case CSR_PSKEY_LC_CONNECTION_RX_WINDOW:
1542 return "LC_CONNECTION_RX_WINDOW";
1543 case CSR_PSKEY_LC_COMBO_DOT11_TX_PROTECTION_MODE:
1544 return "LC_COMBO_DOT11_TX_PROTECTION_MODE";
1545 case CSR_PSKEY_LC_ENHANCED_POWER_TABLE:
1546 return "LC_ENHANCED_POWER_TABLE";
1547 case CSR_PSKEY_LC_WIDEBAND_RSSI_CONFIG:
1548 return "LC_WIDEBAND_RSSI_CONFIG";
1549 case CSR_PSKEY_LC_COMBO_DOT11_PRIORITY_LEAD:
1550 return "LC_COMBO_DOT11_PRIORITY_LEAD";
1551 case CSR_PSKEY_BT_CLOCK_INIT:
1552 return "BT_CLOCK_INIT";
1553 case CSR_PSKEY_TX_MR_MOD_DELAY:
1554 return "TX_MR_MOD_DELAY";
1555 case CSR_PSKEY_RX_MR_SYNC_TIMING:
1556 return "RX_MR_SYNC_TIMING";
1557 case CSR_PSKEY_RX_MR_SYNC_CONFIG:
1558 return "RX_MR_SYNC_CONFIG";
1559 case CSR_PSKEY_LC_LOST_SYNC_SLOTS:
1560 return "LC_LOST_SYNC_SLOTS";
1561 case CSR_PSKEY_RX_MR_SAMP_CONFIG:
1562 return "RX_MR_SAMP_CONFIG";
1563 case CSR_PSKEY_AGC_HYST_LEVELS:
1564 return "AGC_HYST_LEVELS";
1565 case CSR_PSKEY_RX_LEVEL_LOW_SIGNAL:
1566 return "RX_LEVEL_LOW_SIGNAL";
1567 case CSR_PSKEY_AGC_IQ_LVL_VALUES:
1568 return "AGC_IQ_LVL_VALUES";
1569 case CSR_PSKEY_MR_FTRIM_OFFSET_12DB:
1570 return "MR_FTRIM_OFFSET_12DB";
1571 case CSR_PSKEY_MR_FTRIM_OFFSET_6DB:
1572 return "MR_FTRIM_OFFSET_6DB";
1573 case CSR_PSKEY_NO_CAL_ON_BOOT:
1574 return "NO_CAL_ON_BOOT";
1575 case CSR_PSKEY_RSSI_HI_TARGET:
1576 return "RSSI_HI_TARGET";
1577 case CSR_PSKEY_PREFERRED_MIN_ATTENUATION:
1578 return "PREFERRED_MIN_ATTENUATION";
1579 case CSR_PSKEY_LC_COMBO_DOT11_PRIORITY_OVERRIDE:
1580 return "LC_COMBO_DOT11_PRIORITY_OVERRIDE";
1581 case CSR_PSKEY_LC_MULTISLOT_HOLDOFF:
1582 return "LC_MULTISLOT_HOLDOFF";
1583 case CSR_PSKEY_FREE_KEY_PIGEON_HOLE:
1584 return "FREE_KEY_PIGEON_HOLE";
1585 case CSR_PSKEY_LINK_KEY_BD_ADDR0:
1586 return "LINK_KEY_BD_ADDR0";
1587 case CSR_PSKEY_LINK_KEY_BD_ADDR1:
1588 return "LINK_KEY_BD_ADDR1";
1589 case CSR_PSKEY_LINK_KEY_BD_ADDR2:
1590 return "LINK_KEY_BD_ADDR2";
1591 case CSR_PSKEY_LINK_KEY_BD_ADDR3:
1592 return "LINK_KEY_BD_ADDR3";
1593 case CSR_PSKEY_LINK_KEY_BD_ADDR4:
1594 return "LINK_KEY_BD_ADDR4";
1595 case CSR_PSKEY_LINK_KEY_BD_ADDR5:
1596 return "LINK_KEY_BD_ADDR5";
1597 case CSR_PSKEY_LINK_KEY_BD_ADDR6:
1598 return "LINK_KEY_BD_ADDR6";
1599 case CSR_PSKEY_LINK_KEY_BD_ADDR7:
1600 return "LINK_KEY_BD_ADDR7";
1601 case CSR_PSKEY_LINK_KEY_BD_ADDR8:
1602 return "LINK_KEY_BD_ADDR8";
1603 case CSR_PSKEY_LINK_KEY_BD_ADDR9:
1604 return "LINK_KEY_BD_ADDR9";
1605 case CSR_PSKEY_LINK_KEY_BD_ADDR10:
1606 return "LINK_KEY_BD_ADDR10";
1607 case CSR_PSKEY_LINK_KEY_BD_ADDR11:
1608 return "LINK_KEY_BD_ADDR11";
1609 case CSR_PSKEY_LINK_KEY_BD_ADDR12:
1610 return "LINK_KEY_BD_ADDR12";
1611 case CSR_PSKEY_LINK_KEY_BD_ADDR13:
1612 return "LINK_KEY_BD_ADDR13";
1613 case CSR_PSKEY_LINK_KEY_BD_ADDR14:
1614 return "LINK_KEY_BD_ADDR14";
1615 case CSR_PSKEY_LINK_KEY_BD_ADDR15:
1616 return "LINK_KEY_BD_ADDR15";
1617 case CSR_PSKEY_ENC_KEY_LMIN:
1618 return "ENC_KEY_LMIN";
1619 case CSR_PSKEY_ENC_KEY_LMAX:
1620 return "ENC_KEY_LMAX";
1621 case CSR_PSKEY_LOCAL_SUPPORTED_FEATURES:
1622 return "LOCAL_SUPPORTED_FEATURES";
1623 case CSR_PSKEY_LM_USE_UNIT_KEY:
1624 return "LM_USE_UNIT_KEY";
1625 case CSR_PSKEY_HCI_NOP_DISABLE:
1626 return "HCI_NOP_DISABLE";
1627 case CSR_PSKEY_LM_MAX_EVENT_FILTERS:
1628 return "LM_MAX_EVENT_FILTERS";
1629 case CSR_PSKEY_LM_USE_ENC_MODE_BROADCAST:
1630 return "LM_USE_ENC_MODE_BROADCAST";
1631 case CSR_PSKEY_LM_TEST_SEND_ACCEPTED_TWICE:
1632 return "LM_TEST_SEND_ACCEPTED_TWICE";
1633 case CSR_PSKEY_LM_MAX_PAGE_HOLD_TIME:
1634 return "LM_MAX_PAGE_HOLD_TIME";
1635 case CSR_PSKEY_AFH_ADAPTATION_RESPONSE_TIME:
1636 return "AFH_ADAPTATION_RESPONSE_TIME";
1637 case CSR_PSKEY_AFH_OPTIONS:
1638 return "AFH_OPTIONS";
1639 case CSR_PSKEY_AFH_RSSI_RUN_PERIOD:
1640 return "AFH_RSSI_RUN_PERIOD";
1641 case CSR_PSKEY_AFH_REENABLE_CHANNEL_TIME:
1642 return "AFH_REENABLE_CHANNEL_TIME";
1643 case CSR_PSKEY_NO_DROP_ON_ACR_MS_FAIL:
1644 return "NO_DROP_ON_ACR_MS_FAIL";
1645 case CSR_PSKEY_MAX_PRIVATE_KEYS:
1646 return "MAX_PRIVATE_KEYS";
1647 case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR0:
1648 return "PRIVATE_LINK_KEY_BD_ADDR0";
1649 case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR1:
1650 return "PRIVATE_LINK_KEY_BD_ADDR1";
1651 case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR2:
1652 return "PRIVATE_LINK_KEY_BD_ADDR2";
1653 case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR3:
1654 return "PRIVATE_LINK_KEY_BD_ADDR3";
1655 case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR4:
1656 return "PRIVATE_LINK_KEY_BD_ADDR4";
1657 case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR5:
1658 return "PRIVATE_LINK_KEY_BD_ADDR5";
1659 case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR6:
1660 return "PRIVATE_LINK_KEY_BD_ADDR6";
1661 case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR7:
1662 return "PRIVATE_LINK_KEY_BD_ADDR7";
1663 case CSR_PSKEY_LOCAL_SUPPORTED_COMMANDS:
1664 return "LOCAL_SUPPORTED_COMMANDS";
1665 case CSR_PSKEY_LM_MAX_ABSENCE_INDEX:
1666 return "LM_MAX_ABSENCE_INDEX";
1667 case CSR_PSKEY_DEVICE_NAME:
1668 return "DEVICE_NAME";
1669 case CSR_PSKEY_AFH_RSSI_THRESHOLD:
1670 return "AFH_RSSI_THRESHOLD";
1671 case CSR_PSKEY_LM_CASUAL_SCAN_INTERVAL:
1672 return "LM_CASUAL_SCAN_INTERVAL";
1673 case CSR_PSKEY_AFH_MIN_MAP_CHANGE:
1674 return "AFH_MIN_MAP_CHANGE";
1675 case CSR_PSKEY_AFH_RSSI_LP_RUN_PERIOD:
1676 return "AFH_RSSI_LP_RUN_PERIOD";
1677 case CSR_PSKEY_HCI_LMP_LOCAL_VERSION:
1678 return "HCI_LMP_LOCAL_VERSION";
1679 case CSR_PSKEY_LMP_REMOTE_VERSION:
1680 return "LMP_REMOTE_VERSION";
1681 case CSR_PSKEY_HOLD_ERROR_MESSAGE_NUMBER:
1682 return "HOLD_ERROR_MESSAGE_NUMBER";
1683 case CSR_PSKEY_DFU_ATTRIBUTES:
1684 return "DFU_ATTRIBUTES";
1685 case CSR_PSKEY_DFU_DETACH_TO:
1686 return "DFU_DETACH_TO";
1687 case CSR_PSKEY_DFU_TRANSFER_SIZE:
1688 return "DFU_TRANSFER_SIZE";
1689 case CSR_PSKEY_DFU_ENABLE:
1690 return "DFU_ENABLE";
1691 case CSR_PSKEY_DFU_LIN_REG_ENABLE:
1692 return "DFU_LIN_REG_ENABLE";
1693 case CSR_PSKEY_DFUENC_VMAPP_PK_MODULUS_MSB:
1694 return "DFUENC_VMAPP_PK_MODULUS_MSB";
1695 case CSR_PSKEY_DFUENC_VMAPP_PK_MODULUS_LSB:
1696 return "DFUENC_VMAPP_PK_MODULUS_LSB";
1697 case CSR_PSKEY_DFUENC_VMAPP_PK_M_DASH:
1698 return "DFUENC_VMAPP_PK_M_DASH";
1699 case CSR_PSKEY_DFUENC_VMAPP_PK_R2N_MSB:
1700 return "DFUENC_VMAPP_PK_R2N_MSB";
1701 case CSR_PSKEY_DFUENC_VMAPP_PK_R2N_LSB:
1702 return "DFUENC_VMAPP_PK_R2N_LSB";
1703 case CSR_PSKEY_BCSP_LM_PS_BLOCK:
1704 return "BCSP_LM_PS_BLOCK";
1705 case CSR_PSKEY_HOSTIO_FC_PS_BLOCK:
1706 return "HOSTIO_FC_PS_BLOCK";
1707 case CSR_PSKEY_HOSTIO_PROTOCOL_INFO0:
1708 return "HOSTIO_PROTOCOL_INFO0";
1709 case CSR_PSKEY_HOSTIO_PROTOCOL_INFO1:
1710 return "HOSTIO_PROTOCOL_INFO1";
1711 case CSR_PSKEY_HOSTIO_PROTOCOL_INFO2:
1712 return "HOSTIO_PROTOCOL_INFO2";
1713 case CSR_PSKEY_HOSTIO_PROTOCOL_INFO3:
1714 return "HOSTIO_PROTOCOL_INFO3";
1715 case CSR_PSKEY_HOSTIO_PROTOCOL_INFO4:
1716 return "HOSTIO_PROTOCOL_INFO4";
1717 case CSR_PSKEY_HOSTIO_PROTOCOL_INFO5:
1718 return "HOSTIO_PROTOCOL_INFO5";
1719 case CSR_PSKEY_HOSTIO_PROTOCOL_INFO6:
1720 return "HOSTIO_PROTOCOL_INFO6";
1721 case CSR_PSKEY_HOSTIO_PROTOCOL_INFO7:
1722 return "HOSTIO_PROTOCOL_INFO7";
1723 case CSR_PSKEY_HOSTIO_PROTOCOL_INFO8:
1724 return "HOSTIO_PROTOCOL_INFO8";
1725 case CSR_PSKEY_HOSTIO_PROTOCOL_INFO9:
1726 return "HOSTIO_PROTOCOL_INFO9";
1727 case CSR_PSKEY_HOSTIO_PROTOCOL_INFO10:
1728 return "HOSTIO_PROTOCOL_INFO10";
1729 case CSR_PSKEY_HOSTIO_PROTOCOL_INFO11:
1730 return "HOSTIO_PROTOCOL_INFO11";
1731 case CSR_PSKEY_HOSTIO_PROTOCOL_INFO12:
1732 return "HOSTIO_PROTOCOL_INFO12";
1733 case CSR_PSKEY_HOSTIO_PROTOCOL_INFO13:
1734 return "HOSTIO_PROTOCOL_INFO13";
1735 case CSR_PSKEY_HOSTIO_PROTOCOL_INFO14:
1736 return "HOSTIO_PROTOCOL_INFO14";
1737 case CSR_PSKEY_HOSTIO_PROTOCOL_INFO15:
1738 return "HOSTIO_PROTOCOL_INFO15";
1739 case CSR_PSKEY_HOSTIO_UART_RESET_TIMEOUT:
1740 return "HOSTIO_UART_RESET_TIMEOUT";
1741 case CSR_PSKEY_HOSTIO_USE_HCI_EXTN:
1742 return "HOSTIO_USE_HCI_EXTN";
1743 case CSR_PSKEY_HOSTIO_USE_HCI_EXTN_CCFC:
1744 return "HOSTIO_USE_HCI_EXTN_CCFC";
1745 case CSR_PSKEY_HOSTIO_HCI_EXTN_PAYLOAD_SIZE:
1746 return "HOSTIO_HCI_EXTN_PAYLOAD_SIZE";
1747 case CSR_PSKEY_BCSP_LM_CNF_CNT_LIMIT:
1748 return "BCSP_LM_CNF_CNT_LIMIT";
1749 case CSR_PSKEY_HOSTIO_MAP_SCO_PCM:
1750 return "HOSTIO_MAP_SCO_PCM";
1751 case CSR_PSKEY_HOSTIO_AWKWARD_PCM_SYNC:
1752 return "HOSTIO_AWKWARD_PCM_SYNC";
1753 case CSR_PSKEY_HOSTIO_BREAK_POLL_PERIOD:
1754 return "HOSTIO_BREAK_POLL_PERIOD";
1755 case CSR_PSKEY_HOSTIO_MIN_UART_HCI_SCO_SIZE:
1756 return "HOSTIO_MIN_UART_HCI_SCO_SIZE";
1757 case CSR_PSKEY_HOSTIO_MAP_SCO_CODEC:
1758 return "HOSTIO_MAP_SCO_CODEC";
1759 case CSR_PSKEY_PCM_CVSD_TX_HI_FREQ_BOOST:
1760 return "PCM_CVSD_TX_HI_FREQ_BOOST";
1761 case CSR_PSKEY_PCM_CVSD_RX_HI_FREQ_BOOST:
1762 return "PCM_CVSD_RX_HI_FREQ_BOOST";
1763 case CSR_PSKEY_PCM_CONFIG32:
1764 return "PCM_CONFIG32";
1765 case CSR_PSKEY_USE_OLD_BCSP_LE:
1766 return "USE_OLD_BCSP_LE";
1767 case CSR_PSKEY_PCM_CVSD_USE_NEW_FILTER:
1768 return "PCM_CVSD_USE_NEW_FILTER";
1769 case CSR_PSKEY_PCM_FORMAT:
1770 return "PCM_FORMAT";
1771 case CSR_PSKEY_CODEC_OUT_GAIN:
1772 return "CODEC_OUT_GAIN";
1773 case CSR_PSKEY_CODEC_IN_GAIN:
1774 return "CODEC_IN_GAIN";
1775 case CSR_PSKEY_CODEC_PIO:
1776 return "CODEC_PIO";
1777 case CSR_PSKEY_PCM_LOW_JITTER_CONFIG:
1778 return "PCM_LOW_JITTER_CONFIG";
1779 case CSR_PSKEY_HOSTIO_SCO_PCM_THRESHOLDS:
1780 return "HOSTIO_SCO_PCM_THRESHOLDS";
1781 case CSR_PSKEY_HOSTIO_SCO_HCI_THRESHOLDS:
1782 return "HOSTIO_SCO_HCI_THRESHOLDS";
1783 case CSR_PSKEY_HOSTIO_MAP_SCO_PCM_SLOT:
1784 return "HOSTIO_MAP_SCO_PCM_SLOT";
1785 case CSR_PSKEY_UART_BAUDRATE:
1786 return "UART_BAUDRATE";
1787 case CSR_PSKEY_UART_CONFIG_BCSP:
1788 return "UART_CONFIG_BCSP";
1789 case CSR_PSKEY_UART_CONFIG_H4:
1790 return "UART_CONFIG_H4";
1791 case CSR_PSKEY_UART_CONFIG_H5:
1792 return "UART_CONFIG_H5";
1793 case CSR_PSKEY_UART_CONFIG_USR:
1794 return "UART_CONFIG_USR";
1795 case CSR_PSKEY_UART_TX_CRCS:
1796 return "UART_TX_CRCS";
1797 case CSR_PSKEY_UART_ACK_TIMEOUT:
1798 return "UART_ACK_TIMEOUT";
1799 case CSR_PSKEY_UART_TX_MAX_ATTEMPTS:
1800 return "UART_TX_MAX_ATTEMPTS";
1801 case CSR_PSKEY_UART_TX_WINDOW_SIZE:
1802 return "UART_TX_WINDOW_SIZE";
1803 case CSR_PSKEY_UART_HOST_WAKE:
1804 return "UART_HOST_WAKE";
1805 case CSR_PSKEY_HOSTIO_THROTTLE_TIMEOUT:
1806 return "HOSTIO_THROTTLE_TIMEOUT";
1807 case CSR_PSKEY_PCM_ALWAYS_ENABLE:
1808 return "PCM_ALWAYS_ENABLE";
1809 case CSR_PSKEY_UART_HOST_WAKE_SIGNAL:
1810 return "UART_HOST_WAKE_SIGNAL";
1811 case CSR_PSKEY_UART_CONFIG_H4DS:
1812 return "UART_CONFIG_H4DS";
1813 case CSR_PSKEY_H4DS_WAKE_DURATION:
1814 return "H4DS_WAKE_DURATION";
1815 case CSR_PSKEY_H4DS_MAXWU:
1816 return "H4DS_MAXWU";
1817 case CSR_PSKEY_H4DS_LE_TIMER_PERIOD:
1818 return "H4DS_LE_TIMER_PERIOD";
1819 case CSR_PSKEY_H4DS_TWU_TIMER_PERIOD:
1820 return "H4DS_TWU_TIMER_PERIOD";
1821 case CSR_PSKEY_H4DS_UART_IDLE_TIMER_PERIOD:
1822 return "H4DS_UART_IDLE_TIMER_PERIOD";
1823 case CSR_PSKEY_ANA_FTRIM:
1824 return "ANA_FTRIM";
1825 case CSR_PSKEY_WD_TIMEOUT:
1826 return "WD_TIMEOUT";
1827 case CSR_PSKEY_WD_PERIOD:
1828 return "WD_PERIOD";
1829 case CSR_PSKEY_HOST_INTERFACE:
1830 return "HOST_INTERFACE";
1831 case CSR_PSKEY_HQ_HOST_TIMEOUT:
1832 return "HQ_HOST_TIMEOUT";
1833 case CSR_PSKEY_HQ_ACTIVE:
1834 return "HQ_ACTIVE";
1835 case CSR_PSKEY_BCCMD_SECURITY_ACTIVE:
1836 return "BCCMD_SECURITY_ACTIVE";
1837 case CSR_PSKEY_ANA_FREQ:
1838 return "ANA_FREQ";
1839 case CSR_PSKEY_PIO_PROTECT_MASK:
1840 return "PIO_PROTECT_MASK";
1841 case CSR_PSKEY_PMALLOC_SIZES:
1842 return "PMALLOC_SIZES";
1843 case CSR_PSKEY_UART_BAUD_RATE:
1844 return "UART_BAUD_RATE";
1845 case CSR_PSKEY_UART_CONFIG:
1846 return "UART_CONFIG";
1847 case CSR_PSKEY_STUB:
1848 return "STUB";
1849 case CSR_PSKEY_TXRX_PIO_CONTROL:
1850 return "TXRX_PIO_CONTROL";
1851 case CSR_PSKEY_ANA_RX_LEVEL:
1852 return "ANA_RX_LEVEL";
1853 case CSR_PSKEY_ANA_RX_FTRIM:
1854 return "ANA_RX_FTRIM";
1855 case CSR_PSKEY_PSBC_DATA_VERSION:
1856 return "PSBC_DATA_VERSION";
1857 case CSR_PSKEY_PCM0_ATTENUATION:
1858 return "PCM0_ATTENUATION";
1859 case CSR_PSKEY_LO_LVL_MAX:
1860 return "LO_LVL_MAX";
1861 case CSR_PSKEY_LO_ADC_AMPL_MIN:
1862 return "LO_ADC_AMPL_MIN";
1863 case CSR_PSKEY_LO_ADC_AMPL_MAX:
1864 return "LO_ADC_AMPL_MAX";
1865 case CSR_PSKEY_IQ_TRIM_CHANNEL:
1866 return "IQ_TRIM_CHANNEL";
1867 case CSR_PSKEY_IQ_TRIM_GAIN:
1868 return "IQ_TRIM_GAIN";
1869 case CSR_PSKEY_IQ_TRIM_ENABLE:
1870 return "IQ_TRIM_ENABLE";
1871 case CSR_PSKEY_TX_OFFSET_HALF_MHZ:
1872 return "TX_OFFSET_HALF_MHZ";
1873 case CSR_PSKEY_GBL_MISC_ENABLES:
1874 return "GBL_MISC_ENABLES";
1875 case CSR_PSKEY_UART_SLEEP_TIMEOUT:
1876 return "UART_SLEEP_TIMEOUT";
1877 case CSR_PSKEY_DEEP_SLEEP_STATE:
1878 return "DEEP_SLEEP_STATE";
1879 case CSR_PSKEY_IQ_ENABLE_PHASE_TRIM:
1880 return "IQ_ENABLE_PHASE_TRIM";
1881 case CSR_PSKEY_HCI_HANDLE_FREEZE_PERIOD:
1882 return "HCI_HANDLE_FREEZE_PERIOD";
1883 case CSR_PSKEY_MAX_FROZEN_HCI_HANDLES:
1884 return "MAX_FROZEN_HCI_HANDLES";
1885 case CSR_PSKEY_PAGETABLE_DESTRUCTION_DELAY:
1886 return "PAGETABLE_DESTRUCTION_DELAY";
1887 case CSR_PSKEY_IQ_TRIM_PIO_SETTINGS:
1888 return "IQ_TRIM_PIO_SETTINGS";
1889 case CSR_PSKEY_USE_EXTERNAL_CLOCK:
1890 return "USE_EXTERNAL_CLOCK";
1891 case CSR_PSKEY_DEEP_SLEEP_WAKE_CTS:
1892 return "DEEP_SLEEP_WAKE_CTS";
1893 case CSR_PSKEY_FC_HC2H_FLUSH_DELAY:
1894 return "FC_HC2H_FLUSH_DELAY";
1895 case CSR_PSKEY_RX_HIGHSIDE:
1896 return "RX_HIGHSIDE";
1897 case CSR_PSKEY_TX_PRE_LVL:
1898 return "TX_PRE_LVL";
1899 case CSR_PSKEY_RX_SINGLE_ENDED:
1900 return "RX_SINGLE_ENDED";
1901 case CSR_PSKEY_TX_FILTER_CONFIG:
1902 return "TX_FILTER_CONFIG";
1903 case CSR_PSKEY_CLOCK_REQUEST_ENABLE:
1904 return "CLOCK_REQUEST_ENABLE";
1905 case CSR_PSKEY_RX_MIN_ATTEN:
1906 return "RX_MIN_ATTEN";
1907 case CSR_PSKEY_XTAL_TARGET_AMPLITUDE:
1908 return "XTAL_TARGET_AMPLITUDE";
1909 case CSR_PSKEY_PCM_MIN_CPU_CLOCK:
1910 return "PCM_MIN_CPU_CLOCK";
1911 case CSR_PSKEY_HOST_INTERFACE_PIO_USB:
1912 return "HOST_INTERFACE_PIO_USB";
1913 case CSR_PSKEY_CPU_IDLE_MODE:
1914 return "CPU_IDLE_MODE";
1915 case CSR_PSKEY_DEEP_SLEEP_CLEAR_RTS:
1916 return "DEEP_SLEEP_CLEAR_RTS";
1917 case CSR_PSKEY_RF_RESONANCE_TRIM:
1918 return "RF_RESONANCE_TRIM";
1919 case CSR_PSKEY_DEEP_SLEEP_PIO_WAKE:
1920 return "DEEP_SLEEP_PIO_WAKE";
1921 case CSR_PSKEY_DRAIN_BORE_TIMERS:
1922 return "DRAIN_BORE_TIMERS";
1923 case CSR_PSKEY_DRAIN_TX_POWER_BASE:
1924 return "DRAIN_TX_POWER_BASE";
1925 case CSR_PSKEY_MODULE_ID:
1926 return "MODULE_ID";
1927 case CSR_PSKEY_MODULE_DESIGN:
1928 return "MODULE_DESIGN";
1929 case CSR_PSKEY_MODULE_SECURITY_CODE:
1930 return "MODULE_SECURITY_CODE";
1931 case CSR_PSKEY_VM_DISABLE:
1932 return "VM_DISABLE";
1933 case CSR_PSKEY_MOD_MANUF0:
1934 return "MOD_MANUF0";
1935 case CSR_PSKEY_MOD_MANUF1:
1936 return "MOD_MANUF1";
1937 case CSR_PSKEY_MOD_MANUF2:
1938 return "MOD_MANUF2";
1939 case CSR_PSKEY_MOD_MANUF3:
1940 return "MOD_MANUF3";
1941 case CSR_PSKEY_MOD_MANUF4:
1942 return "MOD_MANUF4";
1943 case CSR_PSKEY_MOD_MANUF5:
1944 return "MOD_MANUF5";
1945 case CSR_PSKEY_MOD_MANUF6:
1946 return "MOD_MANUF6";
1947 case CSR_PSKEY_MOD_MANUF7:
1948 return "MOD_MANUF7";
1949 case CSR_PSKEY_MOD_MANUF8:
1950 return "MOD_MANUF8";
1951 case CSR_PSKEY_MOD_MANUF9:
1952 return "MOD_MANUF9";
1953 case CSR_PSKEY_DUT_VM_DISABLE:
1954 return "DUT_VM_DISABLE";
1955 case CSR_PSKEY_USR0:
1956 return "USR0";
1957 case CSR_PSKEY_USR1:
1958 return "USR1";
1959 case CSR_PSKEY_USR2:
1960 return "USR2";
1961 case CSR_PSKEY_USR3:
1962 return "USR3";
1963 case CSR_PSKEY_USR4:
1964 return "USR4";
1965 case CSR_PSKEY_USR5:
1966 return "USR5";
1967 case CSR_PSKEY_USR6:
1968 return "USR6";
1969 case CSR_PSKEY_USR7:
1970 return "USR7";
1971 case CSR_PSKEY_USR8:
1972 return "USR8";
1973 case CSR_PSKEY_USR9:
1974 return "USR9";
1975 case CSR_PSKEY_USR10:
1976 return "USR10";
1977 case CSR_PSKEY_USR11:
1978 return "USR11";
1979 case CSR_PSKEY_USR12:
1980 return "USR12";
1981 case CSR_PSKEY_USR13:
1982 return "USR13";
1983 case CSR_PSKEY_USR14:
1984 return "USR14";
1985 case CSR_PSKEY_USR15:
1986 return "USR15";
1987 case CSR_PSKEY_USR16:
1988 return "USR16";
1989 case CSR_PSKEY_USR17:
1990 return "USR17";
1991 case CSR_PSKEY_USR18:
1992 return "USR18";
1993 case CSR_PSKEY_USR19:
1994 return "USR19";
1995 case CSR_PSKEY_USR20:
1996 return "USR20";
1997 case CSR_PSKEY_USR21:
1998 return "USR21";
1999 case CSR_PSKEY_USR22:
2000 return "USR22";
2001 case CSR_PSKEY_USR23:
2002 return "USR23";
2003 case CSR_PSKEY_USR24:
2004 return "USR24";
2005 case CSR_PSKEY_USR25:
2006 return "USR25";
2007 case CSR_PSKEY_USR26:
2008 return "USR26";
2009 case CSR_PSKEY_USR27:
2010 return "USR27";
2011 case CSR_PSKEY_USR28:
2012 return "USR28";
2013 case CSR_PSKEY_USR29:
2014 return "USR29";
2015 case CSR_PSKEY_USR30:
2016 return "USR30";
2017 case CSR_PSKEY_USR31:
2018 return "USR31";
2019 case CSR_PSKEY_USR32:
2020 return "USR32";
2021 case CSR_PSKEY_USR33:
2022 return "USR33";
2023 case CSR_PSKEY_USR34:
2024 return "USR34";
2025 case CSR_PSKEY_USR35:
2026 return "USR35";
2027 case CSR_PSKEY_USR36:
2028 return "USR36";
2029 case CSR_PSKEY_USR37:
2030 return "USR37";
2031 case CSR_PSKEY_USR38:
2032 return "USR38";
2033 case CSR_PSKEY_USR39:
2034 return "USR39";
2035 case CSR_PSKEY_USR40:
2036 return "USR40";
2037 case CSR_PSKEY_USR41:
2038 return "USR41";
2039 case CSR_PSKEY_USR42:
2040 return "USR42";
2041 case CSR_PSKEY_USR43:
2042 return "USR43";
2043 case CSR_PSKEY_USR44:
2044 return "USR44";
2045 case CSR_PSKEY_USR45:
2046 return "USR45";
2047 case CSR_PSKEY_USR46:
2048 return "USR46";
2049 case CSR_PSKEY_USR47:
2050 return "USR47";
2051 case CSR_PSKEY_USR48:
2052 return "USR48";
2053 case CSR_PSKEY_USR49:
2054 return "USR49";
2055 case CSR_PSKEY_USB_VERSION:
2056 return "USB_VERSION";
2057 case CSR_PSKEY_USB_DEVICE_CLASS_CODES:
2058 return "USB_DEVICE_CLASS_CODES";
2059 case CSR_PSKEY_USB_VENDOR_ID:
2060 return "USB_VENDOR_ID";
2061 case CSR_PSKEY_USB_PRODUCT_ID:
2062 return "USB_PRODUCT_ID";
2063 case CSR_PSKEY_USB_MANUF_STRING:
2064 return "USB_MANUF_STRING";
2065 case CSR_PSKEY_USB_PRODUCT_STRING:
2066 return "USB_PRODUCT_STRING";
2067 case CSR_PSKEY_USB_SERIAL_NUMBER_STRING:
2068 return "USB_SERIAL_NUMBER_STRING";
2069 case CSR_PSKEY_USB_CONFIG_STRING:
2070 return "USB_CONFIG_STRING";
2071 case CSR_PSKEY_USB_ATTRIBUTES:
2072 return "USB_ATTRIBUTES";
2073 case CSR_PSKEY_USB_MAX_POWER:
2074 return "USB_MAX_POWER";
2075 case CSR_PSKEY_USB_BT_IF_CLASS_CODES:
2076 return "USB_BT_IF_CLASS_CODES";
2077 case CSR_PSKEY_USB_LANGID:
2078 return "USB_LANGID";
2079 case CSR_PSKEY_USB_DFU_CLASS_CODES:
2080 return "USB_DFU_CLASS_CODES";
2081 case CSR_PSKEY_USB_DFU_PRODUCT_ID:
2082 return "USB_DFU_PRODUCT_ID";
2083 case CSR_PSKEY_USB_PIO_DETACH:
2084 return "USB_PIO_DETACH";
2085 case CSR_PSKEY_USB_PIO_WAKEUP:
2086 return "USB_PIO_WAKEUP";
2087 case CSR_PSKEY_USB_PIO_PULLUP:
2088 return "USB_PIO_PULLUP";
2089 case CSR_PSKEY_USB_PIO_VBUS:
2090 return "USB_PIO_VBUS";
2091 case CSR_PSKEY_USB_PIO_WAKE_TIMEOUT:
2092 return "USB_PIO_WAKE_TIMEOUT";
2093 case CSR_PSKEY_USB_PIO_RESUME:
2094 return "USB_PIO_RESUME";
2095 case CSR_PSKEY_USB_BT_SCO_IF_CLASS_CODES:
2096 return "USB_BT_SCO_IF_CLASS_CODES";
2097 case CSR_PSKEY_USB_SUSPEND_PIO_LEVEL:
2098 return "USB_SUSPEND_PIO_LEVEL";
2099 case CSR_PSKEY_USB_SUSPEND_PIO_DIR:
2100 return "USB_SUSPEND_PIO_DIR";
2101 case CSR_PSKEY_USB_SUSPEND_PIO_MASK:
2102 return "USB_SUSPEND_PIO_MASK";
2103 case CSR_PSKEY_USB_ENDPOINT_0_MAX_PACKET_SIZE:
2104 return "USB_ENDPOINT_0_MAX_PACKET_SIZE";
2105 case CSR_PSKEY_USB_CONFIG:
2106 return "USB_CONFIG";
2107 case CSR_PSKEY_RADIOTEST_ATTEN_INIT:
2108 return "RADIOTEST_ATTEN_INIT";
2109 case CSR_PSKEY_RADIOTEST_FIRST_TRIM_TIME:
2110 return "RADIOTEST_FIRST_TRIM_TIME";
2111 case CSR_PSKEY_RADIOTEST_SUBSEQUENT_TRIM_TIME:
2112 return "RADIOTEST_SUBSEQUENT_TRIM_TIME";
2113 case CSR_PSKEY_RADIOTEST_LO_LVL_TRIM_ENABLE:
2114 return "RADIOTEST_LO_LVL_TRIM_ENABLE";
2115 case CSR_PSKEY_RADIOTEST_DISABLE_MODULATION:
2116 return "RADIOTEST_DISABLE_MODULATION";
2117 case CSR_PSKEY_RFCOMM_FCON_THRESHOLD:
2118 return "RFCOMM_FCON_THRESHOLD";
2119 case CSR_PSKEY_RFCOMM_FCOFF_THRESHOLD:
2120 return "RFCOMM_FCOFF_THRESHOLD";
2121 case CSR_PSKEY_IPV6_STATIC_ADDR:
2122 return "IPV6_STATIC_ADDR";
2123 case CSR_PSKEY_IPV4_STATIC_ADDR:
2124 return "IPV4_STATIC_ADDR";
2125 case CSR_PSKEY_IPV6_STATIC_PREFIX_LEN:
2126 return "IPV6_STATIC_PREFIX_LEN";
2127 case CSR_PSKEY_IPV6_STATIC_ROUTER_ADDR:
2128 return "IPV6_STATIC_ROUTER_ADDR";
2129 case CSR_PSKEY_IPV4_STATIC_SUBNET_MASK:
2130 return "IPV4_STATIC_SUBNET_MASK";
2131 case CSR_PSKEY_IPV4_STATIC_ROUTER_ADDR:
2132 return "IPV4_STATIC_ROUTER_ADDR";
2133 case CSR_PSKEY_MDNS_NAME:
2134 return "MDNS_NAME";
2135 case CSR_PSKEY_FIXED_PIN:
2136 return "FIXED_PIN";
2137 case CSR_PSKEY_MDNS_PORT:
2138 return "MDNS_PORT";
2139 case CSR_PSKEY_MDNS_TTL:
2140 return "MDNS_TTL";
2141 case CSR_PSKEY_MDNS_IPV4_ADDR:
2142 return "MDNS_IPV4_ADDR";
2143 case CSR_PSKEY_ARP_CACHE_TIMEOUT:
2144 return "ARP_CACHE_TIMEOUT";
2145 case CSR_PSKEY_HFP_POWER_TABLE:
2146 return "HFP_POWER_TABLE";
2147 case CSR_PSKEY_DRAIN_BORE_TIMER_COUNTERS:
2148 return "DRAIN_BORE_TIMER_COUNTERS";
2149 case CSR_PSKEY_DRAIN_BORE_COUNTERS:
2150 return "DRAIN_BORE_COUNTERS";
2151 case CSR_PSKEY_LOOP_FILTER_TRIM:
2152 return "LOOP_FILTER_TRIM";
2153 case CSR_PSKEY_DRAIN_BORE_CURRENT_PEAK:
2154 return "DRAIN_BORE_CURRENT_PEAK";
2155 case CSR_PSKEY_VM_E2_CACHE_LIMIT:
2156 return "VM_E2_CACHE_LIMIT";
2157 case CSR_PSKEY_FORCE_16MHZ_REF_PIO:
2158 return "FORCE_16MHZ_REF_PIO";
2159 case CSR_PSKEY_CDMA_LO_REF_LIMITS:
2160 return "CDMA_LO_REF_LIMITS";
2161 case CSR_PSKEY_CDMA_LO_ERROR_LIMITS:
2162 return "CDMA_LO_ERROR_LIMITS";
2163 case CSR_PSKEY_CLOCK_STARTUP_DELAY:
2164 return "CLOCK_STARTUP_DELAY";
2165 case CSR_PSKEY_DEEP_SLEEP_CORRECTION_FACTOR:
2166 return "DEEP_SLEEP_CORRECTION_FACTOR";
2167 case CSR_PSKEY_TEMPERATURE_CALIBRATION:
2168 return "TEMPERATURE_CALIBRATION";
2169 case CSR_PSKEY_TEMPERATURE_VS_DELTA_INTERNAL_PA:
2170 return "TEMPERATURE_VS_DELTA_INTERNAL_PA";
2171 case CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_PRE_LVL:
2172 return "TEMPERATURE_VS_DELTA_TX_PRE_LVL";
2173 case CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_BB:
2174 return "TEMPERATURE_VS_DELTA_TX_BB";
2175 case CSR_PSKEY_TEMPERATURE_VS_DELTA_ANA_FTRIM:
2176 return "TEMPERATURE_VS_DELTA_ANA_FTRIM";
2177 case CSR_PSKEY_TEST_DELTA_OFFSET:
2178 return "TEST_DELTA_OFFSET";
2179 case CSR_PSKEY_RX_DYNAMIC_LVL_OFFSET:
2180 return "RX_DYNAMIC_LVL_OFFSET";
2181 case CSR_PSKEY_TEST_FORCE_OFFSET:
2182 return "TEST_FORCE_OFFSET";
2183 case CSR_PSKEY_RF_TRAP_BAD_DIVISION_RATIOS:
2184 return "RF_TRAP_BAD_DIVISION_RATIOS";
2185 case CSR_PSKEY_RADIOTEST_CDMA_LO_REF_LIMITS:
2186 return "RADIOTEST_CDMA_LO_REF_LIMITS";
2187 case CSR_PSKEY_INITIAL_BOOTMODE:
2188 return "INITIAL_BOOTMODE";
2189 case CSR_PSKEY_ONCHIP_HCI_CLIENT:
2190 return "ONCHIP_HCI_CLIENT";
2191 case CSR_PSKEY_RX_ATTEN_BACKOFF:
2192 return "RX_ATTEN_BACKOFF";
2193 case CSR_PSKEY_RX_ATTEN_UPDATE_RATE:
2194 return "RX_ATTEN_UPDATE_RATE";
2195 case CSR_PSKEY_SYNTH_TXRX_THRESHOLDS:
2196 return "SYNTH_TXRX_THRESHOLDS";
2197 case CSR_PSKEY_MIN_WAIT_STATES:
2198 return "MIN_WAIT_STATES";
2199 case CSR_PSKEY_RSSI_CORRECTION:
2200 return "RSSI_CORRECTION";
2201 case CSR_PSKEY_SCHED_THROTTLE_TIMEOUT:
2202 return "SCHED_THROTTLE_TIMEOUT";
2203 case CSR_PSKEY_DEEP_SLEEP_USE_EXTERNAL_CLOCK:
2204 return "DEEP_SLEEP_USE_EXTERNAL_CLOCK";
2205 case CSR_PSKEY_TRIM_RADIO_FILTERS:
2206 return "TRIM_RADIO_FILTERS";
2207 case CSR_PSKEY_TRANSMIT_OFFSET:
2208 return "TRANSMIT_OFFSET";
2209 case CSR_PSKEY_USB_VM_CONTROL:
2210 return "USB_VM_CONTROL";
2211 case CSR_PSKEY_MR_ANA_RX_FTRIM:
2212 return "MR_ANA_RX_FTRIM";
2213 case CSR_PSKEY_I2C_CONFIG:
2214 return "I2C_CONFIG";
2215 case CSR_PSKEY_IQ_LVL_RX:
2216 return "IQ_LVL_RX";
2217 case CSR_PSKEY_MR_TX_FILTER_CONFIG:
2218 return "MR_TX_FILTER_CONFIG";
2219 case CSR_PSKEY_MR_TX_CONFIG2:
2220 return "MR_TX_CONFIG2";
2221 case CSR_PSKEY_USB_DONT_RESET_BOOTMODE_ON_HOST_RESET:
2222 return "USB_DONT_RESET_BOOTMODE_ON_HOST_RESET";
2223 case CSR_PSKEY_LC_USE_THROTTLING:
2224 return "LC_USE_THROTTLING";
2225 case CSR_PSKEY_CHARGER_TRIM:
2226 return "CHARGER_TRIM";
2227 case CSR_PSKEY_CLOCK_REQUEST_FEATURES:
2228 return "CLOCK_REQUEST_FEATURES";
2229 case CSR_PSKEY_TRANSMIT_OFFSET_CLASS1:
2230 return "TRANSMIT_OFFSET_CLASS1";
2231 case CSR_PSKEY_TX_AVOID_PA_CLASS1_PIO:
2232 return "TX_AVOID_PA_CLASS1_PIO";
2233 case CSR_PSKEY_MR_PIO_CONFIG:
2234 return "MR_PIO_CONFIG";
2235 case CSR_PSKEY_UART_CONFIG2:
2236 return "UART_CONFIG2";
2237 case CSR_PSKEY_CLASS1_IQ_LVL:
2238 return "CLASS1_IQ_LVL";
2239 case CSR_PSKEY_CLASS1_TX_CONFIG2:
2240 return "CLASS1_TX_CONFIG2";
2241 case CSR_PSKEY_TEMPERATURE_VS_DELTA_INTERNAL_PA_CLASS1:
2242 return "TEMPERATURE_VS_DELTA_INTERNAL_PA_CLASS1";
2243 case CSR_PSKEY_TEMPERATURE_VS_DELTA_EXTERNAL_PA_CLASS1:
2244 return "TEMPERATURE_VS_DELTA_EXTERNAL_PA_CLASS1";
2245 case CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_PRE_LVL_MR:
2246 return "TEMPERATURE_VS_DELTA_TX_PRE_LVL_MR";
2247 case CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_BB_MR_HEADER:
2248 return "TEMPERATURE_VS_DELTA_TX_BB_MR_HEADER";
2249 case CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_BB_MR_PAYLOAD:
2250 return "TEMPERATURE_VS_DELTA_TX_BB_MR_PAYLOAD";
2251 case CSR_PSKEY_RX_MR_EQ_TAPS:
2252 return "RX_MR_EQ_TAPS";
2253 case CSR_PSKEY_TX_PRE_LVL_CLASS1:
2254 return "TX_PRE_LVL_CLASS1";
2255 case CSR_PSKEY_ANALOGUE_ATTENUATOR:
2256 return "ANALOGUE_ATTENUATOR";
2257 case CSR_PSKEY_MR_RX_FILTER_TRIM:
2258 return "MR_RX_FILTER_TRIM";
2259 case CSR_PSKEY_MR_RX_FILTER_RESPONSE:
2260 return "MR_RX_FILTER_RESPONSE";
2261 case CSR_PSKEY_PIO_WAKEUP_STATE:
2262 return "PIO_WAKEUP_STATE";
2263 case CSR_PSKEY_MR_TX_IF_ATTEN_OFF_TEMP:
2264 return "MR_TX_IF_ATTEN_OFF_TEMP";
2265 case CSR_PSKEY_LO_DIV_LATCH_BYPASS:
2266 return "LO_DIV_LATCH_BYPASS";
2267 case CSR_PSKEY_LO_VCO_STANDBY:
2268 return "LO_VCO_STANDBY";
2269 case CSR_PSKEY_SLOW_CLOCK_FILTER_SHIFT:
2270 return "SLOW_CLOCK_FILTER_SHIFT";
2271 case CSR_PSKEY_SLOW_CLOCK_FILTER_DIVIDER:
2272 return "SLOW_CLOCK_FILTER_DIVIDER";
2273 case CSR_PSKEY_USB_ATTRIBUTES_POWER:
2274 return "USB_ATTRIBUTES_POWER";
2275 case CSR_PSKEY_USB_ATTRIBUTES_WAKEUP:
2276 return "USB_ATTRIBUTES_WAKEUP";
2277 case CSR_PSKEY_DFU_ATTRIBUTES_MANIFESTATION_TOLERANT:
2278 return "DFU_ATTRIBUTES_MANIFESTATION_TOLERANT";
2279 case CSR_PSKEY_DFU_ATTRIBUTES_CAN_UPLOAD:
2280 return "DFU_ATTRIBUTES_CAN_UPLOAD";
2281 case CSR_PSKEY_DFU_ATTRIBUTES_CAN_DOWNLOAD:
2282 return "DFU_ATTRIBUTES_CAN_DOWNLOAD";
2283 case CSR_PSKEY_UART_CONFIG_STOP_BITS:
2284 return "UART_CONFIG_STOP_BITS";
2285 case CSR_PSKEY_UART_CONFIG_PARITY_BIT:
2286 return "UART_CONFIG_PARITY_BIT";
2287 case CSR_PSKEY_UART_CONFIG_FLOW_CTRL_EN:
2288 return "UART_CONFIG_FLOW_CTRL_EN";
2289 case CSR_PSKEY_UART_CONFIG_RTS_AUTO_EN:
2290 return "UART_CONFIG_RTS_AUTO_EN";
2291 case CSR_PSKEY_UART_CONFIG_RTS:
2292 return "UART_CONFIG_RTS";
2293 case CSR_PSKEY_UART_CONFIG_TX_ZERO_EN:
2294 return "UART_CONFIG_TX_ZERO_EN";
2295 case CSR_PSKEY_UART_CONFIG_NON_BCSP_EN:
2296 return "UART_CONFIG_NON_BCSP_EN";
2297 case CSR_PSKEY_UART_CONFIG_RX_RATE_DELAY:
2298 return "UART_CONFIG_RX_RATE_DELAY";
2299 case CSR_PSKEY_UART_SEQ_TIMEOUT:
2300 return "UART_SEQ_TIMEOUT";
2301 case CSR_PSKEY_UART_SEQ_RETRIES:
2302 return "UART_SEQ_RETRIES";
2303 case CSR_PSKEY_UART_SEQ_WINSIZE:
2304 return "UART_SEQ_WINSIZE";
2305 case CSR_PSKEY_UART_USE_CRC_ON_TX:
2306 return "UART_USE_CRC_ON_TX";
2307 case CSR_PSKEY_UART_HOST_INITIAL_STATE:
2308 return "UART_HOST_INITIAL_STATE";
2309 case CSR_PSKEY_UART_HOST_ATTENTION_SPAN:
2310 return "UART_HOST_ATTENTION_SPAN";
2311 case CSR_PSKEY_UART_HOST_WAKEUP_TIME:
2312 return "UART_HOST_WAKEUP_TIME";
2313 case CSR_PSKEY_UART_HOST_WAKEUP_WAIT:
2314 return "UART_HOST_WAKEUP_WAIT";
2315 case CSR_PSKEY_BCSP_LM_MODE:
2316 return "BCSP_LM_MODE";
2317 case CSR_PSKEY_BCSP_LM_SYNC_RETRIES:
2318 return "BCSP_LM_SYNC_RETRIES";
2319 case CSR_PSKEY_BCSP_LM_TSHY:
2320 return "BCSP_LM_TSHY";
2321 case CSR_PSKEY_UART_DFU_CONFIG_STOP_BITS:
2322 return "UART_DFU_CONFIG_STOP_BITS";
2323 case CSR_PSKEY_UART_DFU_CONFIG_PARITY_BIT:
2324 return "UART_DFU_CONFIG_PARITY_BIT";
2325 case CSR_PSKEY_UART_DFU_CONFIG_FLOW_CTRL_EN:
2326 return "UART_DFU_CONFIG_FLOW_CTRL_EN";
2327 case CSR_PSKEY_UART_DFU_CONFIG_RTS_AUTO_EN:
2328 return "UART_DFU_CONFIG_RTS_AUTO_EN";
2329 case CSR_PSKEY_UART_DFU_CONFIG_RTS:
2330 return "UART_DFU_CONFIG_RTS";
2331 case CSR_PSKEY_UART_DFU_CONFIG_TX_ZERO_EN:
2332 return "UART_DFU_CONFIG_TX_ZERO_EN";
2333 case CSR_PSKEY_UART_DFU_CONFIG_NON_BCSP_EN:
2334 return "UART_DFU_CONFIG_NON_BCSP_EN";
2335 case CSR_PSKEY_UART_DFU_CONFIG_RX_RATE_DELAY:
2336 return "UART_DFU_CONFIG_RX_RATE_DELAY";
2337 case CSR_PSKEY_AMUX_AIO0:
2338 return "AMUX_AIO0";
2339 case CSR_PSKEY_AMUX_AIO1:
2340 return "AMUX_AIO1";
2341 case CSR_PSKEY_AMUX_AIO2:
2342 return "AMUX_AIO2";
2343 case CSR_PSKEY_AMUX_AIO3:
2344 return "AMUX_AIO3";
2345 case CSR_PSKEY_LOCAL_NAME_SIMPLIFIED:
2346 return "LOCAL_NAME_SIMPLIFIED";
2347 case CSR_PSKEY_EXTENDED_STUB:
2348 return "EXTENDED_STUB";
2349 default:
2350 return "UNKNOWN";
2351 }
2352 }
2353
csr_write_varid_valueless(int dd,uint16_t seqnum,uint16_t varid)2354 int csr_write_varid_valueless(int dd, uint16_t seqnum, uint16_t varid)
2355 {
2356 unsigned char cmd[] = { 0x02, 0x00, 0x09, 0x00,
2357 seqnum & 0xff, seqnum >> 8, varid & 0xff, varid >> 8, 0x00, 0x00,
2358 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
2359
2360 unsigned char cp[254], rp[254];
2361 struct hci_request rq;
2362
2363 memset(&cp, 0, sizeof(cp));
2364 cp[0] = 0xc2;
2365 memcpy(cp + 1, cmd, sizeof(cmd));
2366
2367 switch (varid) {
2368 case CSR_VARID_COLD_RESET:
2369 case CSR_VARID_WARM_RESET:
2370 case CSR_VARID_COLD_HALT:
2371 case CSR_VARID_WARM_HALT:
2372 return hci_send_cmd(dd, OGF_VENDOR_CMD, 0x00, sizeof(cmd) + 1, cp);
2373 }
2374
2375 memset(&rq, 0, sizeof(rq));
2376 rq.ogf = OGF_VENDOR_CMD;
2377 rq.ocf = 0x00;
2378 rq.event = EVT_VENDOR;
2379 rq.cparam = cp;
2380 rq.clen = sizeof(cmd) + 1;
2381 rq.rparam = rp;
2382 rq.rlen = sizeof(rp);
2383
2384 if (hci_send_req(dd, &rq, 2000) < 0)
2385 return -1;
2386
2387 if (rp[0] != 0xc2) {
2388 errno = EIO;
2389 return -1;
2390 }
2391
2392 if ((rp[9] + (rp[10] << 8)) != 0) {
2393 errno = ENXIO;
2394 return -1;
2395 }
2396
2397 return 0;
2398 }
2399
csr_write_varid_complex(int dd,uint16_t seqnum,uint16_t varid,uint8_t * value,uint16_t length)2400 int csr_write_varid_complex(int dd, uint16_t seqnum, uint16_t varid, uint8_t *value, uint16_t length)
2401 {
2402 unsigned char cmd[] = { 0x02, 0x00, ((length / 2) + 5) & 0xff, ((length / 2) + 5) >> 8,
2403 seqnum & 0xff, seqnum >> 8, varid & 0xff, varid >> 8, 0x00, 0x00,
2404 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
2405
2406 unsigned char cp[254], rp[254];
2407 struct hci_request rq;
2408
2409 memset(&cp, 0, sizeof(cp));
2410 cp[0] = 0xc2;
2411 memcpy(cp + 1, cmd, sizeof(cmd));
2412 memcpy(cp + 11, value, length);
2413
2414 memset(&rq, 0, sizeof(rq));
2415 rq.ogf = OGF_VENDOR_CMD;
2416 rq.ocf = 0x00;
2417 rq.event = EVT_VENDOR;
2418 rq.cparam = cp;
2419 rq.clen = sizeof(cmd) + length + 1;
2420 rq.rparam = rp;
2421 rq.rlen = sizeof(rp);
2422
2423 if (hci_send_req(dd, &rq, 2000) < 0)
2424 return -1;
2425
2426 if (rp[0] != 0xc2) {
2427 errno = EIO;
2428 return -1;
2429 }
2430
2431 if ((rp[9] + (rp[10] << 8)) != 0) {
2432 errno = ENXIO;
2433 return -1;
2434 }
2435
2436 return 0;
2437 }
2438
csr_read_varid_complex(int dd,uint16_t seqnum,uint16_t varid,uint8_t * value,uint16_t length)2439 int csr_read_varid_complex(int dd, uint16_t seqnum, uint16_t varid, uint8_t *value, uint16_t length)
2440 {
2441 unsigned char cmd[] = { 0x00, 0x00, ((length / 2) + 5) & 0xff, ((length / 2) + 5) >> 8,
2442 seqnum & 0xff, seqnum >> 8, varid & 0xff, varid >> 8, 0x00, 0x00,
2443 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
2444
2445 unsigned char cp[254], rp[254];
2446 struct hci_request rq;
2447
2448 memset(&cp, 0, sizeof(cp));
2449 cp[0] = 0xc2;
2450 memcpy(cp + 1, cmd, sizeof(cmd));
2451 memcpy(cp + 11, value, length);
2452
2453 memset(&rq, 0, sizeof(rq));
2454 rq.ogf = OGF_VENDOR_CMD;
2455 rq.ocf = 0x00;
2456 rq.event = EVT_VENDOR;
2457 rq.cparam = cp;
2458 rq.clen = sizeof(cmd) + length + 1;
2459 rq.rparam = rp;
2460 rq.rlen = sizeof(rp);
2461
2462 if (hci_send_req(dd, &rq, 2000) < 0)
2463 return -1;
2464
2465 if (rp[0] != 0xc2) {
2466 errno = EIO;
2467 return -1;
2468 }
2469
2470 if ((rp[9] + (rp[10] << 8)) != 0) {
2471 errno = ENXIO;
2472 return -1;
2473 }
2474
2475 memcpy(value, rp + 11, length);
2476
2477 return 0;
2478 }
2479
csr_read_varid_uint16(int dd,uint16_t seqnum,uint16_t varid,uint16_t * value)2480 int csr_read_varid_uint16(int dd, uint16_t seqnum, uint16_t varid, uint16_t *value)
2481 {
2482 unsigned char cmd[] = { 0x00, 0x00, 0x09, 0x00,
2483 seqnum & 0xff, seqnum >> 8, varid & 0xff, varid >> 8, 0x00, 0x00,
2484 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
2485
2486 unsigned char cp[254], rp[254];
2487 struct hci_request rq;
2488
2489 memset(&cp, 0, sizeof(cp));
2490 cp[0] = 0xc2;
2491 memcpy(cp + 1, cmd, sizeof(cmd));
2492
2493 memset(&rq, 0, sizeof(rq));
2494 rq.ogf = OGF_VENDOR_CMD;
2495 rq.ocf = 0x00;
2496 rq.event = EVT_VENDOR;
2497 rq.cparam = cp;
2498 rq.clen = sizeof(cmd) + 1;
2499 rq.rparam = rp;
2500 rq.rlen = sizeof(rp);
2501
2502 if (hci_send_req(dd, &rq, 2000) < 0)
2503 return -1;
2504
2505 if (rp[0] != 0xc2) {
2506 errno = EIO;
2507 return -1;
2508 }
2509
2510 if ((rp[9] + (rp[10] << 8)) != 0) {
2511 errno = ENXIO;
2512 return -1;
2513 }
2514
2515 *value = rp[11] + (rp[12] << 8);
2516
2517 return 0;
2518 }
2519
csr_read_varid_uint32(int dd,uint16_t seqnum,uint16_t varid,uint32_t * value)2520 int csr_read_varid_uint32(int dd, uint16_t seqnum, uint16_t varid, uint32_t *value)
2521 {
2522 unsigned char cmd[] = { 0x00, 0x00, 0x09, 0x00,
2523 seqnum & 0xff, seqnum >> 8, varid & 0xff, varid >> 8, 0x00, 0x00,
2524 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
2525
2526 unsigned char cp[254], rp[254];
2527 struct hci_request rq;
2528
2529 memset(&cp, 0, sizeof(cp));
2530 cp[0] = 0xc2;
2531 memcpy(cp + 1, cmd, sizeof(cmd));
2532
2533 memset(&rq, 0, sizeof(rq));
2534 rq.ogf = OGF_VENDOR_CMD;
2535 rq.ocf = 0x00;
2536 rq.event = EVT_VENDOR;
2537 rq.cparam = cp;
2538 rq.clen = sizeof(cmd) + 1;
2539 rq.rparam = rp;
2540 rq.rlen = sizeof(rp);
2541
2542 if (hci_send_req(dd, &rq, 2000) < 0)
2543 return -1;
2544
2545 if (rp[0] != 0xc2) {
2546 errno = EIO;
2547 return -1;
2548 }
2549
2550 if ((rp[9] + (rp[10] << 8)) != 0) {
2551 errno = ENXIO;
2552 return -1;
2553 }
2554
2555 *value = ((rp[11] + (rp[12] << 8)) << 16) + (rp[13] + (rp[14] << 8));
2556
2557 return 0;
2558 }
2559
csr_read_pskey_complex(int dd,uint16_t seqnum,uint16_t pskey,uint16_t stores,uint8_t * value,uint16_t length)2560 int csr_read_pskey_complex(int dd, uint16_t seqnum, uint16_t pskey, uint16_t stores, uint8_t *value, uint16_t length)
2561 {
2562 unsigned char cmd[] = { 0x00, 0x00, ((length / 2) + 8) & 0xff, ((length / 2) + 8) >> 8,
2563 seqnum & 0xff, seqnum >> 8, 0x03, 0x70, 0x00, 0x00,
2564 pskey & 0xff, pskey >> 8,
2565 (length / 2) & 0xff, (length / 2) >> 8,
2566 stores & 0xff, stores >> 8, 0x00, 0x00 };
2567
2568 unsigned char cp[254], rp[254];
2569 struct hci_request rq;
2570
2571 memset(&cp, 0, sizeof(cp));
2572 cp[0] = 0xc2;
2573 memcpy(cp + 1, cmd, sizeof(cmd));
2574
2575 memset(&rq, 0, sizeof(rq));
2576 rq.ogf = OGF_VENDOR_CMD;
2577 rq.ocf = 0x00;
2578 rq.event = EVT_VENDOR;
2579 rq.cparam = cp;
2580 rq.clen = sizeof(cmd) + length - 1;
2581 rq.rparam = rp;
2582 rq.rlen = sizeof(rp);
2583
2584 if (hci_send_req(dd, &rq, 2000) < 0)
2585 return -1;
2586
2587 if (rp[0] != 0xc2) {
2588 errno = EIO;
2589 return -1;
2590 }
2591
2592 if ((rp[9] + (rp[10] << 8)) != 0) {
2593 errno = ENXIO;
2594 return -1;
2595 }
2596
2597 memcpy(value, rp + 17, length);
2598
2599 return 0;
2600 }
2601
csr_write_pskey_complex(int dd,uint16_t seqnum,uint16_t pskey,uint16_t stores,uint8_t * value,uint16_t length)2602 int csr_write_pskey_complex(int dd, uint16_t seqnum, uint16_t pskey, uint16_t stores, uint8_t *value, uint16_t length)
2603 {
2604 unsigned char cmd[] = { 0x02, 0x00, ((length / 2) + 8) & 0xff, ((length / 2) + 8) >> 8,
2605 seqnum & 0xff, seqnum >> 8, 0x03, 0x70, 0x00, 0x00,
2606 pskey & 0xff, pskey >> 8,
2607 (length / 2) & 0xff, (length / 2) >> 8,
2608 stores & 0xff, stores >> 8, 0x00, 0x00 };
2609
2610 unsigned char cp[254], rp[254];
2611 struct hci_request rq;
2612
2613 memset(&cp, 0, sizeof(cp));
2614 cp[0] = 0xc2;
2615 memcpy(cp + 1, cmd, sizeof(cmd));
2616
2617 memcpy(cp + 17, value, length);
2618
2619 memset(&rq, 0, sizeof(rq));
2620 rq.ogf = OGF_VENDOR_CMD;
2621 rq.ocf = 0x00;
2622 rq.event = EVT_VENDOR;
2623 rq.cparam = cp;
2624 rq.clen = sizeof(cmd) + length - 1;
2625 rq.rparam = rp;
2626 rq.rlen = sizeof(rp);
2627
2628 if (hci_send_req(dd, &rq, 2000) < 0)
2629 return -1;
2630
2631 if (rp[0] != 0xc2) {
2632 errno = EIO;
2633 return -1;
2634 }
2635
2636 if ((rp[9] + (rp[10] << 8)) != 0) {
2637 errno = ENXIO;
2638 return -1;
2639 }
2640
2641 return 0;
2642 }
2643
csr_read_pskey_uint16(int dd,uint16_t seqnum,uint16_t pskey,uint16_t stores,uint16_t * value)2644 int csr_read_pskey_uint16(int dd, uint16_t seqnum, uint16_t pskey, uint16_t stores, uint16_t *value)
2645 {
2646 uint8_t array[2] = { 0x00, 0x00 };
2647 int err;
2648
2649 err = csr_read_pskey_complex(dd, seqnum, pskey, stores, array, 2);
2650
2651 *value = array[0] + (array[1] << 8);
2652
2653 return err;
2654 }
2655
csr_write_pskey_uint16(int dd,uint16_t seqnum,uint16_t pskey,uint16_t stores,uint16_t value)2656 int csr_write_pskey_uint16(int dd, uint16_t seqnum, uint16_t pskey, uint16_t stores, uint16_t value)
2657 {
2658 uint8_t array[2] = { value & 0xff, value >> 8 };
2659
2660 return csr_write_pskey_complex(dd, seqnum, pskey, stores, array, 2);
2661 }
2662
csr_read_pskey_uint32(int dd,uint16_t seqnum,uint16_t pskey,uint16_t stores,uint32_t * value)2663 int csr_read_pskey_uint32(int dd, uint16_t seqnum, uint16_t pskey, uint16_t stores, uint32_t *value)
2664 {
2665 uint8_t array[4] = { 0x00, 0x00, 0x00, 0x00 };
2666 int err;
2667
2668 err = csr_read_pskey_complex(dd, seqnum, pskey, stores, array, 4);
2669
2670 *value = ((array[0] + (array[1] << 8)) << 16) +
2671 (array[2] + (array[3] << 8));
2672
2673 return err;
2674 }
2675
csr_write_pskey_uint32(int dd,uint16_t seqnum,uint16_t pskey,uint16_t stores,uint32_t value)2676 int csr_write_pskey_uint32(int dd, uint16_t seqnum, uint16_t pskey, uint16_t stores, uint32_t value)
2677 {
2678 uint8_t array[4] = { (value & 0xff0000) >> 16, value >> 24,
2679 value & 0xff, (value & 0xff00) >> 8 };
2680
2681 return csr_write_pskey_complex(dd, seqnum, pskey, stores, array, 4);
2682 }
2683
psr_put(uint16_t pskey,uint8_t * value,uint16_t size)2684 int psr_put(uint16_t pskey, uint8_t *value, uint16_t size)
2685 {
2686 struct psr_data *item;
2687
2688 item = malloc(sizeof(*item));
2689 if (!item)
2690 return -ENOMEM;
2691
2692 item->pskey = pskey;
2693
2694 if (size > 0) {
2695 item->value = malloc(size);
2696 if (!item->value) {
2697 free(item);
2698 return -ENOMEM;
2699 }
2700
2701 memcpy(item->value, value, size);
2702 item->size = size;
2703 } else {
2704 item->value = NULL;
2705 item->size = 0;
2706 }
2707
2708 item->next = NULL;
2709
2710 if (!head)
2711 head = item;
2712 else
2713 tail->next = item;
2714
2715 tail = item;
2716
2717 return 0;
2718 }
2719
psr_get(uint16_t * pskey,uint8_t * value,uint16_t * size)2720 int psr_get(uint16_t *pskey, uint8_t *value, uint16_t *size)
2721 {
2722 struct psr_data *item = head;
2723
2724 if (!head)
2725 return -ENOENT;
2726
2727 *pskey = item->pskey;
2728
2729 if (item->value) {
2730 if (value && item->size > 0)
2731 memcpy(value, item->value, item->size);
2732 free(item->value);
2733 *size = item->size;
2734 } else
2735 *size = 0;
2736
2737 if (head == tail)
2738 tail = NULL;
2739
2740 head = head->next;
2741 free(item);
2742
2743 return 0;
2744 }
2745
parse_line(char * str)2746 static int parse_line(char *str)
2747 {
2748 uint8_t array[256];
2749 uint16_t value, pskey, length = 0;
2750 char *off, *end;
2751
2752 pskey = strtol(str + 1, NULL, 16);
2753 off = strstr(str, "=") + 1;
2754 if (!off)
2755 return -EIO;
2756
2757 while (1) {
2758 value = strtol(off, &end, 16);
2759 if (value == 0 && off == end)
2760 break;
2761
2762 array[length++] = value & 0xff;
2763 array[length++] = value >> 8;
2764
2765 if (*end == '\0')
2766 break;
2767
2768 off = end + 1;
2769 }
2770
2771 return psr_put(pskey, array, length);
2772 }
2773
psr_read(const char * filename)2774 int psr_read(const char *filename)
2775 {
2776 struct stat st;
2777 char *str, *map, *off, *end;
2778 int fd, err = 0;
2779
2780 fd = open(filename, O_RDONLY);
2781 if (fd < 0)
2782 return fd;
2783
2784 if (fstat(fd, &st) < 0) {
2785 err = -errno;
2786 goto close;
2787 }
2788
2789 map = mmap(0, st.st_size, PROT_READ, MAP_SHARED, fd, 0);
2790 if (!map || map == MAP_FAILED) {
2791 err = -errno;
2792 goto close;
2793 }
2794
2795 off = map;
2796
2797 while (1) {
2798 if (*off == '\r' || *off == '\n') {
2799 off++;
2800 continue;
2801 }
2802
2803 end = strpbrk(off, "\r\n");
2804 if (!end)
2805 break;
2806
2807 str = malloc(end - off + 1);
2808 if (!str)
2809 break;
2810
2811 memset(str, 0, end - off + 1);
2812 strncpy(str, off, end - off);
2813 if (*str == '&')
2814 parse_line(str);
2815
2816 free(str);
2817 off = end + 1;
2818 }
2819
2820 munmap(map, st.st_size);
2821
2822 close:
2823 close(fd);
2824
2825 return err;
2826 }
2827
psr_print(void)2828 int psr_print(void)
2829 {
2830 uint8_t array[256];
2831 uint16_t pskey, length;
2832 char *str, val[7];
2833 int i;
2834
2835 while (1) {
2836 if (psr_get(&pskey, array, &length) < 0)
2837 break;
2838
2839 str = csr_pskeytoval(pskey);
2840 if (!strcasecmp(str, "UNKNOWN")) {
2841 sprintf(val, "0x%04x", pskey);
2842 str = NULL;
2843 }
2844
2845 printf("// %s%s\n&%04x =", str ? "PSKEY_" : "",
2846 str ? str : val, pskey);
2847 for (i = 0; i < length / 2; i++)
2848 printf(" %02x%02x", array[i * 2 + 1], array[i * 2]);
2849 printf("\n");
2850 }
2851
2852 return 0;
2853 }
2854