1 /* 2 * 3 * BlueZ - Bluetooth protocol stack for Linux 4 * 5 * Copyright (C) 2003-2009 Marcel Holtmann <marcel (at) 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 } 2854