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