~ubuntu-branches/ubuntu/wily/bluez/wily

« back to all changes in this revision

Viewing changes to tools/csr.c

  • Committer: Bazaar Package Importer
  • Author(s): Mario Limonciello
  • Date: 2008-10-07 12:10:29 UTC
  • Revision ID: james.westby@ubuntu.com-20081007121029-4gup4fmmh2vfo5nh
Tags: upstream-4.12
ImportĀ upstreamĀ versionĀ 4.12

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 *
 
3
 *  BlueZ - Bluetooth protocol stack for Linux
 
4
 *
 
5
 *  Copyright (C) 2003-2008  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
 
 
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
 
 
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
 
 
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
 
 
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
 
 
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
 
 
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
 
 
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
 
 
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
 
 
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
 
 
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
 
 
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
 
 
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
 
 
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
 
 
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
 
 
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
 
 
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
 
 
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
 
 
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
 
 
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
 
 
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
 
 
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
}