diff --git a/Makefile.tools b/Makefile.tools
index 0423293d6..d5fdf2d89 100644
--- a/Makefile.tools
+++ b/Makefile.tools
@@ -176,9 +176,8 @@ tools_userchan_tester_LDADD = lib/libbluetooth-internal.la \
 endif
 
 if TOOLS
-bin_PROGRAMS += tools/rctest tools/l2test tools/l2ping tools/bccmd \
-			tools/bluemoon tools/hex2hcd tools/mpris-proxy \
-			tools/btattach
+bin_PROGRAMS += tools/rctest tools/l2test tools/l2ping tools/bluemoon \
+		tools/hex2hcd tools/mpris-proxy tools/btattach
 
 noinst_PROGRAMS += tools/bdaddr tools/avinfo tools/avtest \
 			tools/scotest tools/amptest tools/hwdb \
@@ -278,12 +277,6 @@ tools_l2test_LDADD = lib/libbluetooth-internal.la
 
 tools_l2ping_LDADD = lib/libbluetooth-internal.la
 
-tools_bccmd_SOURCES = tools/bccmd.c tools/csr.h tools/csr.c \
-			tools/csr_hci.c tools/csr_usb.c \
-			tools/csr_h4.c tools/csr_3wire.c \
-			tools/csr_bcsp.c tools/ubcsp.h tools/ubcsp.c
-tools_bccmd_LDADD = lib/libbluetooth-internal.la
-
 tools_bluemoon_SOURCES = tools/bluemoon.c monitor/bt.h
 tools_bluemoon_LDADD = src/libshared-mainloop.la
 
@@ -298,7 +291,7 @@ tools_gatt_service_LDADD = $(GLIB_LIBS) $(DBUS_LIBS) gdbus/libgdbus-internal.la
 profiles_iap_iapd_SOURCES = profiles/iap/main.c
 profiles_iap_iapd_LDADD = gdbus/libgdbus-internal.la $(GLIB_LIBS) $(DBUS_LIBS)
 
-dist_man_MANS += tools/rctest.1 tools/l2ping.1 tools/bccmd.1 tools/btattach.1
+dist_man_MANS += tools/rctest.1 tools/l2ping.1 tools/btattach.1
 
 EXTRA_DIST += tools/bdaddr.1
 
@@ -360,7 +353,7 @@ tools_hciattach_SOURCES = tools/hciattach.c tools/hciattach.h \
 						tools/hciattach_bcm43xx.c
 tools_hciattach_LDADD = lib/libbluetooth-internal.la
 
-tools_hciconfig_SOURCES = tools/hciconfig.c tools/csr.h tools/csr.c
+tools_hciconfig_SOURCES = tools/hciconfig.c
 tools_hciconfig_LDADD = lib/libbluetooth-internal.la
 
 tools_hcitool_SOURCES = tools/hcitool.c src/oui.h src/oui.c
@@ -409,7 +402,7 @@ EXTRA_DIST += tools/hciattach.1 tools/hciconfig.1 \
 			tools/rfcomm.1 tools/sdptool.1 tools/ciptool.1
 endif
 else
-EXTRA_DIST += tools/rctest.1 tools/l2ping.1 tools/bccmd.1 tools/btattach.1
+EXTRA_DIST += tools/rctest.1 tools/l2ping.1 tools/btattach.1
 endif
 
 if HID2HCI
diff --git a/tools/bccmd.1 b/tools/bccmd.1
deleted file mode 100644
index 26c83a6a2..000000000
--- a/tools/bccmd.1
+++ /dev/null
@@ -1,130 +0,0 @@
-.TH BCCMD 1 "Jun 20 2006" BlueZ "Linux System Administration"
-.SH NAME
-bccmd \- Utility for the CSR BCCMD interface
-.SH SYNOPSIS
-.B bccmd
-.br
-.B bccmd [-t <transport>] [-d <device>] <command> [<args>]
-.br
-.B bccmd [-h --help]
-.br
-.SH DESCRIPTION
-.B
-bccmd
-issues BlueCore commands to
-.B
-Cambridge Silicon Radio
-devices. If run without the <command> argument, a short help page will be displayed.
-.SH OPTIONS
-.TP
-.BI -t\ <transport>
-Specify the communication transport. Valid options are:
-.RS
-.TP
-.BI HCI
-Local device with Host Controller Interface (default).
-.TP
-.BI USB
-Direct USB connection.
-.TP
-.BI BCSP
-Blue Core Serial Protocol.
-.TP
-.BI H4
-H4 serial protocol.
-.TP
-.BI 3WIRE
-3WIRE protocol (not implemented).
-.SH
-.TP
-.BI -d\ <dev>
-Specify a particular device to operate on. If not specified, default is the first available HCI device
-or /dev/ttyS0 for serial transports.
-.SH COMMANDS
-.TP
-.BI builddef
-Get build definitions
-.TP
-.BI keylen\ <handle>
-Get current crypt key length
-.TP
-.BI clock
-Get local Bluetooth clock
-.TP
-.BI rand
-Get random number
-.TP
-.BI chiprev
-Get chip revision
-.TP
-.BI buildname
-Get the full build name
-.TP
-.BI panicarg
-Get panic code argument
-.TP
-.BI faultarg
-Get fault code argument
-.TP
-.BI coldreset
-Perform cold reset
-.TP
-.BI warmreset
-Perform warm reset
-.TP
-.BI disabletx
-Disable TX on the device
-.TP
-.BI enabletx
-Enable TX on the device
-.TP
-.BI singlechan\ <channel>
-Lock radio on specific channel
-.TP
-.BI hoppingon
-Revert to channel hopping
-.TP
-.BI rttxdata1\ <decimal\ freq\ MHz>\ <level>
-TXData1 radio test
-.TP
-.BI radiotest\ <decimal\ freq\ MHz>\ <level>\ <id>
-Run radio tests, tests 4, 6 and 7 are transmit tests
-.TP
-.BI memtypes
-Get memory types
-.TP
-.BI psget\ [-r]\ [-s\ <stores>]\ <key>
-Get value for PS key.
--r sends a warm reset afterwards
-.TP
-.BI psset\ [-r]\ [-s\ <stores>]\ <key>\ <value>
-Set value for PS key.
--r sends a warm reset afterwards
-.TP
-.BI psclr\ [-r]\ [-s\ <stores>]\ <key>
-Clear value for PS key.
--r sends a warm reset afterwards
-.TP
-.BI pslist\ [-r]\ [-s\ <stores>]
-List all PS keys.
--r sends a warm reset afterwards
-.TP
-.BI psread\ [-r]\ [-s\ <stores>]
-Read all PS keys.
--r sends a warm reset afterwards
-.TP
-.BI psload\ [-r]\ [-s\ <stores>]\ <file>
-Load all PS keys from PSR file.
--r sends a warm reset afterwards
-.TP
-.BI pscheck\ [-r]\ [-s\ <stores>]\ <file>
-Check syntax of PSR file.
--r sends a warm reset afterwards
-.SH KEYS
-bdaddr country devclass keymin keymax features commands version
-remver hciextn mapsco baudrate hostintf anafreq anaftrim usbvid
-usbpid dfupid bootmode
-.SH AUTHORS
-Written by Marcel Holtmann <marcel@holtmann.org>,
-man page by Adam Laurie <adam@algroup.co.uk>
-.PP
diff --git a/tools/bccmd.c b/tools/bccmd.c
deleted file mode 100644
index 2c215ace7..000000000
--- a/tools/bccmd.c
+++ /dev/null
@@ -1,1248 +0,0 @@
-/*
- *
- *  BlueZ - Bluetooth protocol stack for Linux
- *
- *  Copyright (C) 2004-2010  Marcel Holtmann <marcel@holtmann.org>
- *
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#define _GNU_SOURCE
-#include <stdio.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <sys/socket.h>
-#include <unistd.h>
-
-#include "lib/bluetooth.h"
-#include "lib/hci.h"
-#include "lib/hci_lib.h"
-
-#include "src/shared/tty.h"
-
-#include "csr.h"
-
-#define CSR_TRANSPORT_UNKNOWN	0
-#define CSR_TRANSPORT_HCI	1
-#define CSR_TRANSPORT_USB	2
-#define CSR_TRANSPORT_BCSP	3
-#define CSR_TRANSPORT_H4	4
-#define CSR_TRANSPORT_3WIRE	5
-
-#define CSR_STORES_PSI		(0x0001)
-#define CSR_STORES_PSF		(0x0002)
-#define CSR_STORES_PSROM	(0x0004)
-#define CSR_STORES_PSRAM	(0x0008)
-#define CSR_STORES_DEFAULT	(CSR_STORES_PSI | CSR_STORES_PSF)
-
-#define CSR_TYPE_NULL		0
-#define CSR_TYPE_COMPLEX	1
-#define CSR_TYPE_UINT8		2
-#define CSR_TYPE_UINT16		3
-#define CSR_TYPE_UINT32		4
-
-#define CSR_TYPE_ARRAY		CSR_TYPE_COMPLEX
-#define CSR_TYPE_BDADDR		CSR_TYPE_COMPLEX
-
-static inline int transport_open(int transport, char *device, speed_t bcsp_rate)
-{
-	switch (transport) {
-	case CSR_TRANSPORT_HCI:
-		return csr_open_hci(device);
-	case CSR_TRANSPORT_USB:
-		return csr_open_usb(device);
-	case CSR_TRANSPORT_BCSP:
-		return csr_open_bcsp(device, bcsp_rate);
-	case CSR_TRANSPORT_H4:
-		return csr_open_h4(device);
-	case CSR_TRANSPORT_3WIRE:
-		return csr_open_3wire(device);
-	default:
-		fprintf(stderr, "Unsupported transport\n");
-		return -1;
-	}
-}
-
-static inline int transport_read(int transport, uint16_t varid, uint8_t *value, uint16_t length)
-{
-	switch (transport) {
-	case CSR_TRANSPORT_HCI:
-		return csr_read_hci(varid, value, length);
-	case CSR_TRANSPORT_USB:
-		return csr_read_usb(varid, value, length);
-	case CSR_TRANSPORT_BCSP:
-		return csr_read_bcsp(varid, value, length);
-	case CSR_TRANSPORT_H4:
-		return csr_read_h4(varid, value, length);
-	case CSR_TRANSPORT_3WIRE:
-		return csr_read_3wire(varid, value, length);
-	default:
-		errno = EOPNOTSUPP;
-		return -1;
-	}
-}
-
-static inline int transport_write(int transport, uint16_t varid, uint8_t *value, uint16_t length)
-{
-	switch (transport) {
-	case CSR_TRANSPORT_HCI:
-		return csr_write_hci(varid, value, length);
-	case CSR_TRANSPORT_USB:
-		return csr_write_usb(varid, value, length);
-	case CSR_TRANSPORT_BCSP:
-		return csr_write_bcsp(varid, value, length);
-	case CSR_TRANSPORT_H4:
-		return csr_write_h4(varid, value, length);
-	case CSR_TRANSPORT_3WIRE:
-		return csr_write_3wire(varid, value, length);
-	default:
-		errno = EOPNOTSUPP;
-		return -1;
-	}
-}
-
-static inline void transport_close(int transport)
-{
-	switch (transport) {
-	case CSR_TRANSPORT_HCI:
-		csr_close_hci();
-		break;
-	case CSR_TRANSPORT_USB:
-		csr_close_usb();
-		break;
-	case CSR_TRANSPORT_BCSP:
-		csr_close_bcsp();
-		break;
-	case CSR_TRANSPORT_H4:
-		csr_close_h4();
-		break;
-	case CSR_TRANSPORT_3WIRE:
-		csr_close_3wire();
-		break;
-	}
-}
-
-static struct {
-	uint16_t pskey;
-	int type;
-	int size;
-	char *str;
-} storage[] = {
-	{ CSR_PSKEY_BDADDR,                   CSR_TYPE_BDADDR,  8,  "bdaddr"   },
-	{ CSR_PSKEY_COUNTRYCODE,              CSR_TYPE_UINT16,  0,  "country"  },
-	{ CSR_PSKEY_CLASSOFDEVICE,            CSR_TYPE_UINT32,  0,  "devclass" },
-	{ CSR_PSKEY_ENC_KEY_LMIN,             CSR_TYPE_UINT16,  0,  "keymin"   },
-	{ CSR_PSKEY_ENC_KEY_LMAX,             CSR_TYPE_UINT16,  0,  "keymax"   },
-	{ CSR_PSKEY_LOCAL_SUPPORTED_FEATURES, CSR_TYPE_ARRAY,   8,  "features" },
-	{ CSR_PSKEY_LOCAL_SUPPORTED_COMMANDS, CSR_TYPE_ARRAY,   18, "commands" },
-	{ CSR_PSKEY_HCI_LMP_LOCAL_VERSION,    CSR_TYPE_UINT16,  0,  "version"  },
-	{ CSR_PSKEY_LMP_REMOTE_VERSION,       CSR_TYPE_UINT8,   0,  "remver"   },
-	{ CSR_PSKEY_HOSTIO_USE_HCI_EXTN,      CSR_TYPE_UINT16,  0,  "hciextn"  },
-	{ CSR_PSKEY_HOSTIO_MAP_SCO_PCM,       CSR_TYPE_UINT16,  0,  "mapsco"   },
-	{ CSR_PSKEY_UART_BAUDRATE,            CSR_TYPE_UINT16,  0,  "baudrate" },
-	{ CSR_PSKEY_HOST_INTERFACE,           CSR_TYPE_UINT16,  0,  "hostintf" },
-	{ CSR_PSKEY_ANA_FREQ,                 CSR_TYPE_UINT16,  0,  "anafreq"  },
-	{ CSR_PSKEY_ANA_FTRIM,                CSR_TYPE_UINT16,  0,  "anaftrim" },
-	{ CSR_PSKEY_USB_VENDOR_ID,            CSR_TYPE_UINT16,  0,  "usbvid"   },
-	{ CSR_PSKEY_USB_PRODUCT_ID,           CSR_TYPE_UINT16,  0,  "usbpid"   },
-	{ CSR_PSKEY_USB_DFU_PRODUCT_ID,       CSR_TYPE_UINT16,  0,  "dfupid"   },
-	{ CSR_PSKEY_INITIAL_BOOTMODE,         CSR_TYPE_UINT16,  0,  "bootmode" },
-	{ 0x0000 },
-};
-
-static char *storestostr(uint16_t stores)
-{
-	switch (stores) {
-	case 0x0000:
-		return "Default";
-	case 0x0001:
-		return "psi";
-	case 0x0002:
-		return "psf";
-	case 0x0004:
-		return "psrom";
-	case 0x0008:
-		return "psram";
-	default:
-		return "Unknown";
-	}
-}
-
-static char *memorytostr(uint16_t type)
-{
-	switch (type) {
-	case 0x0000:
-		return "Flash memory";
-	case 0x0001:
-		return "EEPROM";
-	case 0x0002:
-		return "RAM (transient)";
-	case 0x0003:
-		return "ROM (or \"read-only\" flash memory)";
-	default:
-		return "Unknown";
-	}
-}
-
-#define OPT_RANGE(min, max) \
-		if (argc < (min)) { errno = EINVAL; return -1; } \
-		if (argc > (max)) { errno = E2BIG; return -1; }
-
-static struct option help_options[] = {
-	{ "help",	0, 0, 'h' },
-	{ 0, 0, 0, 0 }
-};
-
-static int opt_help(int argc, char *argv[], int *help)
-{
-	int opt;
-
-	while ((opt=getopt_long(argc, argv, "+h", help_options, NULL)) != EOF) {
-		switch (opt) {
-		case 'h':
-			if (help)
-				*help = 1;
-			break;
-		}
-	}
-
-	return optind;
-}
-
-#define OPT_HELP(range, help) \
-		opt_help(argc, argv, (help)); \
-		argc -= optind; argv += optind; optind = 0; \
-		OPT_RANGE((range), (range))
-
-static int cmd_builddef(int transport, int argc, char *argv[])
-{
-	uint8_t array[8];
-	uint16_t def = 0x0000, nextdef = 0x0000;
-	int err = 0;
-
-	OPT_HELP(0, NULL);
-
-	printf("Build definitions:\n");
-
-	while (1) {
-		memset(array, 0, sizeof(array));
-		array[0] = def & 0xff;
-		array[1] = def >> 8;
-
-		err = transport_read(transport, CSR_VARID_GET_NEXT_BUILDDEF, array, 8);
-		if (err < 0)
-			break;
-
-		nextdef = array[2] | (array[3] << 8);
-
-		if (nextdef == 0x0000)
-			break;
-
-		def = nextdef;
-
-		printf("0x%04x - %s\n", def, csr_builddeftostr(def));
-	}
-
-	return err;
-}
-
-static int cmd_keylen(int transport, int argc, char *argv[])
-{
-	uint8_t array[8];
-	uint16_t handle, keylen;
-	int err;
-
-	OPT_HELP(1, NULL);
-
-	handle = atoi(argv[0]);
-
-	memset(array, 0, sizeof(array));
-	array[0] = handle & 0xff;
-	array[1] = handle >> 8;
-
-	err = transport_read(transport, CSR_VARID_CRYPT_KEY_LENGTH, array, 8);
-	if (err < 0)
-		return -1;
-
-	keylen = array[2] | (array[3] << 8);
-
-	printf("Crypt key length: %d bit\n", keylen * 8);
-
-	return 0;
-}
-
-static int cmd_clock(int transport, int argc, char *argv[])
-{
-	uint8_t array[8];
-	uint32_t clock;
-	int err;
-
-	OPT_HELP(0, NULL);
-
-	memset(array, 0, sizeof(array));
-
-	err = transport_read(transport, CSR_VARID_BT_CLOCK, array, 8);
-	if (err < 0)
-		return -1;
-
-	clock = array[2] | (array[3] << 8) | (array[0] << 16) | (array[1] << 24);
-
-	printf("Bluetooth clock: 0x%04x (%d)\n", clock, clock);
-
-	return 0;
-}
-
-static int cmd_rand(int transport, int argc, char *argv[])
-{
-	uint8_t array[8];
-	uint16_t rand;
-	int err;
-
-	OPT_HELP(0, NULL);
-
-	memset(array, 0, sizeof(array));
-
-	err = transport_read(transport, CSR_VARID_RAND, array, 8);
-	if (err < 0)
-		return -1;
-
-	rand = array[0] | (array[1] << 8);
-
-	printf("Random number: 0x%02x (%d)\n", rand, rand);
-
-	return 0;
-}
-
-static int cmd_chiprev(int transport, int argc, char *argv[])
-{
-	uint8_t array[8];
-	uint16_t rev;
-	char *str;
-	int err;
-
-	OPT_HELP(0, NULL);
-
-	memset(array, 0, sizeof(array));
-
-	err = transport_read(transport, CSR_VARID_CHIPREV, array, 8);
-	if (err < 0)
-		return -1;
-
-	rev = array[0] | (array[1] << 8);
-
-	switch (rev) {
-	case 0x64:
-		str = "BC1 ES";
-		break;
-	case 0x65:
-		str = "BC1";
-		break;
-	case 0x89:
-		str = "BC2-External A";
-		break;
-	case 0x8a:
-		str = "BC2-External B";
-		break;
-	case 0x28:
-		str = "BC2-ROM";
-		break;
-	case 0x43:
-		str = "BC3-Multimedia";
-		break;
-	case 0x15:
-		str = "BC3-ROM";
-		break;
-	case 0xe2:
-		str = "BC3-Flash";
-		break;
-	case 0x26:
-		str = "BC4-External";
-		break;
-	case 0x30:
-		str = "BC4-ROM";
-		break;
-	default:
-		str = "NA";
-		break;
-	}
-
-	printf("Chip revision: 0x%04x (%s)\n", rev, str);
-
-	return 0;
-}
-
-static int cmd_buildname(int transport, int argc, char *argv[])
-{
-	uint8_t array[131];
-	char name[64];
-	unsigned int i;
-	int err;
-
-	OPT_HELP(0, NULL);
-
-	memset(array, 0, sizeof(array));
-
-	err = transport_read(transport, CSR_VARID_READ_BUILD_NAME, array, 128);
-	if (err < 0)
-		return -1;
-
-	for (i = 0; i < sizeof(name); i++)
-		name[i] = array[(i * 2) + 4];
-
-	printf("Build name: %s\n", name);
-
-	return 0;
-}
-
-static int cmd_panicarg(int transport, int argc, char *argv[])
-{
-	uint8_t array[8];
-	uint16_t error;
-	int err;
-
-	OPT_HELP(0, NULL);
-
-	memset(array, 0, sizeof(array));
-
-	err = transport_read(transport, CSR_VARID_PANIC_ARG, array, 8);
-	if (err < 0)
-		return -1;
-
-	error = array[0] | (array[1] << 8);
-
-	printf("Panic code: 0x%02x (%s)\n", error,
-					error < 0x100 ? "valid" : "invalid");
-
-	return 0;
-}
-
-static int cmd_faultarg(int transport, int argc, char *argv[])
-{
-	uint8_t array[8];
-	uint16_t error;
-	int err;
-
-	OPT_HELP(0, NULL);
-
-	memset(array, 0, sizeof(array));
-
-	err = transport_read(transport, CSR_VARID_FAULT_ARG, array, 8);
-	if (err < 0)
-		return -1;
-
-	error = array[0] | (array[1] << 8);
-
-	printf("Fault code: 0x%02x (%s)\n", error,
-					error < 0x100 ? "valid" : "invalid");
-
-	return 0;
-}
-
-static int cmd_coldreset(int transport, int argc, char *argv[])
-{
-	return transport_write(transport, CSR_VARID_COLD_RESET, NULL, 0);
-}
-
-static int cmd_warmreset(int transport, int argc, char *argv[])
-{
-	return transport_write(transport, CSR_VARID_WARM_RESET, NULL, 0);
-}
-
-static int cmd_disabletx(int transport, int argc, char *argv[])
-{
-	return transport_write(transport, CSR_VARID_DISABLE_TX, NULL, 0);
-}
-
-static int cmd_enabletx(int transport, int argc, char *argv[])
-{
-	return transport_write(transport, CSR_VARID_ENABLE_TX, NULL, 0);
-}
-
-static int cmd_singlechan(int transport, int argc, char *argv[])
-{
-	uint8_t array[8];
-	uint16_t channel;
-
-	OPT_HELP(1, NULL);
-
-	channel = atoi(argv[0]);
-
-	if (channel > 2401 && channel < 2481)
-		channel -= 2402;
-
-	if (channel > 78) {
-		errno = EINVAL;
-		return -1;
-	}
-
-	memset(array, 0, sizeof(array));
-	array[0] = channel & 0xff;
-	array[1] = channel >> 8;
-
-	return transport_write(transport, CSR_VARID_SINGLE_CHAN, array, 8);
-}
-
-static int cmd_hoppingon(int transport, int argc, char *argv[])
-{
-	return transport_write(transport, CSR_VARID_HOPPING_ON, NULL, 0);
-}
-
-static int cmd_rttxdata1(int transport, int argc, char *argv[])
-{
-	uint8_t array[8];
-	uint16_t freq, level;
-
-	OPT_HELP(2, NULL);
-
-	freq = atoi(argv[0]);
-
-	if (!strncasecmp(argv[1], "0x", 2))
-		level = strtol(argv[1], NULL, 16);
-	else
-		level = atoi(argv[1]);
-
-	memset(array, 0, sizeof(array));
-	array[0] = 0x04;
-	array[1] = 0x00;
-	array[2] = freq & 0xff;
-	array[3] = freq >> 8;
-	array[4] = level & 0xff;
-	array[5] = level >> 8;
-
-	return transport_write(transport, CSR_VARID_RADIOTEST, array, 8);
-}
-
-static int cmd_radiotest(int transport, int argc, char *argv[])
-{
-	uint8_t array[8];
-	uint16_t freq, level, test;
-
-	OPT_HELP(3, NULL);
-
-	freq = atoi(argv[0]);
-
-	if (!strncasecmp(argv[1], "0x", 2))
-		level = strtol(argv[1], NULL, 16);
-	else
-		level = atoi(argv[1]);
-
-	test = atoi(argv[2]);
-
-	memset(array, 0, sizeof(array));
-	array[0] = test & 0xff;
-	array[1] = test >> 8;
-	array[2] = freq & 0xff;
-	array[3] = freq >> 8;
-	array[4] = level & 0xff;
-	array[5] = level >> 8;
-
-	return transport_write(transport, CSR_VARID_RADIOTEST, array, 8);
-}
-
-static int cmd_memtypes(int transport, int argc, char *argv[])
-{
-	uint8_t array[8];
-	uint16_t type, stores[4] = { 0x0001, 0x0002, 0x0004, 0x0008 };
-	int i, err;
-
-	OPT_HELP(0, NULL);
-
-	for (i = 0; i < 4; i++) {
-		memset(array, 0, sizeof(array));
-		array[0] = stores[i] & 0xff;
-		array[1] = stores[i] >> 8;
-
-		err = transport_read(transport, CSR_VARID_PS_MEMORY_TYPE, array, 8);
-		if (err < 0)
-			continue;
-
-		type = array[2] + (array[3] << 8);
-
-		printf("%s (0x%04x) = %s (%d)\n", storestostr(stores[i]),
-					stores[i], memorytostr(type), type);
-	}
-
-	return 0;
-}
-
-static struct option pskey_options[] = {
-	{ "stores",	1, 0, 's' },
-	{ "reset",	0, 0, 'r' },
-	{ "help",	0, 0, 'h' },
-	{ 0, 0, 0, 0 }
-};
-
-static int opt_pskey(int argc, char *argv[], uint16_t *stores, int *reset, int *help)
-{
-	int opt;
-
-	while ((opt=getopt_long(argc, argv, "+s:rh", pskey_options, NULL)) != EOF) {
-		switch (opt) {
-		case 's':
-			if (!stores)
-				break;
-			if (!strcasecmp(optarg, "default"))
-				*stores = 0x0000;
-			else if (!strcasecmp(optarg, "implementation"))
-				*stores = 0x0001;
-			else if (!strcasecmp(optarg, "factory"))
-				*stores = 0x0002;
-			else if (!strcasecmp(optarg, "rom"))
-				*stores = 0x0004;
-			else if (!strcasecmp(optarg, "ram"))
-				*stores = 0x0008;
-			else if (!strcasecmp(optarg, "psi"))
-				*stores = 0x0001;
-			else if (!strcasecmp(optarg, "psf"))
-				*stores = 0x0002;
-			else if (!strcasecmp(optarg, "psrom"))
-				*stores = 0x0004;
-			else if (!strcasecmp(optarg, "psram"))
-				*stores = 0x0008;
-			else if (!strncasecmp(optarg, "0x", 2))
-				*stores = strtol(optarg, NULL, 16);
-			else
-				*stores = atoi(optarg);
-			break;
-
-		case 'r':
-			if (reset)
-				*reset = 1;
-			break;
-
-		case 'h':
-			if (help)
-				*help = 1;
-			break;
-		}
-	}
-
-	return optind;
-}
-
-#define OPT_PSKEY(min, max, stores, reset, help) \
-		opt_pskey(argc, argv, (stores), (reset), (help)); \
-		argc -= optind; argv += optind; optind = 0; \
-		OPT_RANGE((min), (max))
-
-static int cmd_psget(int transport, int argc, char *argv[])
-{
-	uint8_t array[128];
-	uint16_t pskey, length, value, stores = CSR_STORES_DEFAULT;
-	uint32_t val32;
-	int i, err, reset = 0;
-
-	memset(array, 0, sizeof(array));
-
-	OPT_PSKEY(1, 1, &stores, &reset, NULL);
-
-	if (strncasecmp(argv[0], "0x", 2)) {
-		pskey = atoi(argv[0]);
-
-		for (i = 0; storage[i].pskey; i++) {
-			if (strcasecmp(storage[i].str, argv[0]))
-				continue;
-
-			pskey = storage[i].pskey;
-			break;
-		}
-	} else
-		pskey = strtol(argv[0] + 2, NULL, 16);
-
-	memset(array, 0, sizeof(array));
-	array[0] = pskey & 0xff;
-	array[1] = pskey >> 8;
-	array[2] = stores & 0xff;
-	array[3] = stores >> 8;
-
-	err = transport_read(transport, CSR_VARID_PS_SIZE, array, 8);
-	if (err < 0)
-		return err;
-
-	length = array[2] + (array[3] << 8);
-	if (length + 6 > (int) sizeof(array) / 2)
-		return -EIO;
-
-	memset(array, 0, sizeof(array));
-	array[0] = pskey & 0xff;
-	array[1] = pskey >> 8;
-	array[2] = length & 0xff;
-	array[3] = length >> 8;
-	array[4] = stores & 0xff;
-	array[5] = stores >> 8;
-
-	err = transport_read(transport, CSR_VARID_PS, array, (length + 3) * 2);
-	if (err < 0)
-		return err;
-
-	switch (length) {
-	case 1:
-		value = array[6] | (array[7] << 8);
-		printf("%s: 0x%04x (%d)\n", csr_pskeytostr(pskey), value, value);
-		break;
-
-	case 2:
-		val32 = array[8] | (array[9] << 8) | (array[6] << 16) | (array[7] << 24);
-		printf("%s: 0x%08x (%d)\n", csr_pskeytostr(pskey), val32, val32);
-		break;
-
-	default:
-		printf("%s:", csr_pskeytostr(pskey));
-		for (i = 0; i < length; i++)
-			printf(" 0x%02x%02x", array[(i * 2) + 6], array[(i * 2) + 7]);
-		printf("\n");
-		break;
-	}
-
-	if (reset)
-		transport_write(transport, CSR_VARID_WARM_RESET, NULL, 0);
-
-	return err;
-}
-
-static int cmd_psset(int transport, int argc, char *argv[])
-{
-	uint8_t array[128];
-	uint16_t pskey, length, value, stores = CSR_STORES_PSRAM;
-	uint32_t val32;
-	int i, err, reset = 0;
-
-	memset(array, 0, sizeof(array));
-
-	OPT_PSKEY(2, 81, &stores, &reset, NULL);
-
-	if (strncasecmp(argv[0], "0x", 2)) {
-		pskey = atoi(argv[0]);
-
-		for (i = 0; storage[i].pskey; i++) {
-			if (strcasecmp(storage[i].str, argv[0]))
-				continue;
-
-			pskey = storage[i].pskey;
-			break;
-		}
-	} else
-		pskey = strtol(argv[0] + 2, NULL, 16);
-
-	memset(array, 0, sizeof(array));
-	array[0] = pskey & 0xff;
-	array[1] = pskey >> 8;
-	array[2] = stores & 0xff;
-	array[3] = stores >> 8;
-
-	err = transport_read(transport, CSR_VARID_PS_SIZE, array, 8);
-	if (err < 0)
-		return err;
-
-	length = array[2] + (array[3] << 8);
-	if (length + 6 > (int) sizeof(array) / 2)
-		return -EIO;
-
-	memset(array, 0, sizeof(array));
-	array[0] = pskey & 0xff;
-	array[1] = pskey >> 8;
-	array[2] = length & 0xff;
-	array[3] = length >> 8;
-	array[4] = stores & 0xff;
-	array[5] = stores >> 8;
-
-	argc--;
-	argv++;
-
-	switch (length) {
-	case 1:
-		if (argc != 1) {
-			errno = E2BIG;
-			return -1;
-		}
-
-		if (!strncasecmp(argv[0], "0x", 2))
-			value = strtol(argv[0] + 2, NULL, 16);
-		else
-			value = atoi(argv[0]);
-
-		array[6] = value & 0xff;
-		array[7] = value >> 8;
-		break;
-
-	case 2:
-		if (argc != 1) {
-			errno = E2BIG;
-			return -1;
-		}
-
-		if (!strncasecmp(argv[0], "0x", 2))
-			val32 = strtol(argv[0] + 2, NULL, 16);
-		else
-			val32 = atoi(argv[0]);
-
-		array[6] = (val32 & 0xff0000) >> 16;
-		array[7] = val32 >> 24;
-		array[8] = val32 & 0xff;
-		array[9] = (val32 & 0xff00) >> 8;
-		break;
-
-	default:
-		if (argc != length * 2) {
-			errno = EINVAL;
-			return -1;
-		}
-
-		for (i = 0; i < length * 2; i++)
-			if (!strncasecmp(argv[0], "0x", 2))
-				array[i + 6] = strtol(argv[i] + 2, NULL, 16);
-			else
-				array[i + 6] = atoi(argv[i]);
-		break;
-	}
-
-	err = transport_write(transport, CSR_VARID_PS, array, (length + 3) * 2);
-	if (err < 0)
-		return err;
-
-	if (reset)
-		transport_write(transport, CSR_VARID_WARM_RESET, NULL, 0);
-
-	return err;
-}
-
-static int cmd_psclr(int transport, int argc, char *argv[])
-{
-	uint8_t array[8];
-	uint16_t pskey, stores = CSR_STORES_PSRAM;
-	int i, err, reset = 0;
-
-	OPT_PSKEY(1, 1, &stores, &reset, NULL);
-
-	if (strncasecmp(argv[0], "0x", 2)) {
-		pskey = atoi(argv[0]);
-
-		for (i = 0; storage[i].pskey; i++) {
-			if (strcasecmp(storage[i].str, argv[0]))
-				continue;
-
-			pskey = storage[i].pskey;
-			break;
-		}
-	} else
-		pskey = strtol(argv[0] + 2, NULL, 16);
-
-	memset(array, 0, sizeof(array));
-	array[0] = pskey & 0xff;
-	array[1] = pskey >> 8;
-	array[2] = stores & 0xff;
-	array[3] = stores >> 8;
-
-	err = transport_write(transport, CSR_VARID_PS_CLR_STORES, array, 8);
-	if (err < 0)
-		return err;
-
-	if (reset)
-		transport_write(transport, CSR_VARID_WARM_RESET, NULL, 0);
-
-	return err;
-}
-
-static int cmd_pslist(int transport, int argc, char *argv[])
-{
-	uint8_t array[8];
-	uint16_t pskey = 0x0000, length, stores = CSR_STORES_DEFAULT;
-	int err, reset = 0;
-
-	OPT_PSKEY(0, 0, &stores, &reset, NULL);
-
-	while (1) {
-		memset(array, 0, sizeof(array));
-		array[0] = pskey & 0xff;
-		array[1] = pskey >> 8;
-		array[2] = stores & 0xff;
-		array[3] = stores >> 8;
-
-		err = transport_read(transport, CSR_VARID_PS_NEXT, array, 8);
-		if (err < 0)
-			break;
-
-		pskey = array[4] + (array[5] << 8);
-		if (pskey == 0x0000)
-			break;
-
-		memset(array, 0, sizeof(array));
-		array[0] = pskey & 0xff;
-		array[1] = pskey >> 8;
-		array[2] = stores & 0xff;
-		array[3] = stores >> 8;
-
-		err = transport_read(transport, CSR_VARID_PS_SIZE, array, 8);
-		if (err < 0)
-			continue;
-
-		length = array[2] + (array[3] << 8);
-
-		printf("0x%04x - %s (%d bytes)\n", pskey,
-					csr_pskeytostr(pskey), length * 2);
-	}
-
-	if (reset)
-		transport_write(transport, CSR_VARID_WARM_RESET, NULL, 0);
-
-	return 0;
-}
-
-static int cmd_psread(int transport, int argc, char *argv[])
-{
-	uint8_t array[256];
-	uint16_t pskey = 0x0000, length, stores = CSR_STORES_DEFAULT;
-	char *str, val[7];
-	int i, err, reset = 0;
-
-	OPT_PSKEY(0, 0, &stores, &reset, NULL);
-
-	while (1) {
-		memset(array, 0, sizeof(array));
-		array[0] = pskey & 0xff;
-		array[1] = pskey >> 8;
-		array[2] = stores & 0xff;
-		array[3] = stores >> 8;
-
-		err = transport_read(transport, CSR_VARID_PS_NEXT, array, 8);
-		if (err < 0)
-			break;
-
-		pskey = array[4] + (array[5] << 8);
-		if (pskey == 0x0000)
-			break;
-
-		memset(array, 0, sizeof(array));
-		array[0] = pskey & 0xff;
-		array[1] = pskey >> 8;
-		array[2] = stores & 0xff;
-		array[3] = stores >> 8;
-
-		err = transport_read(transport, CSR_VARID_PS_SIZE, array, 8);
-		if (err < 0)
-			continue;
-
-		length = array[2] + (array[3] << 8);
-		if (length + 6 > (int) sizeof(array) / 2)
-			continue;
-
-		memset(array, 0, sizeof(array));
-		array[0] = pskey & 0xff;
-		array[1] = pskey >> 8;
-		array[2] = length & 0xff;
-		array[3] = length >> 8;
-		array[4] = stores & 0xff;
-		array[5] = stores >> 8;
-
-		err = transport_read(transport, CSR_VARID_PS, array, (length + 3) * 2);
-		if (err < 0)
-			continue;
-
-		str = csr_pskeytoval(pskey);
-		if (!strcasecmp(str, "UNKNOWN")) {
-			sprintf(val, "0x%04x", pskey);
-			str = NULL;
-		}
-
-		printf("// %s%s\n&%04x =", str ? "PSKEY_" : "",
-						str ? str : val, pskey);
-		for (i = 0; i < length; i++)
-			printf(" %02x%02x", array[(i * 2) + 7], array[(i * 2) + 6]);
-		printf("\n");
-	}
-
-	if (reset)
-		transport_write(transport, CSR_VARID_WARM_RESET, NULL, 0);
-
-	return 0;
-}
-
-static int cmd_psload(int transport, int argc, char *argv[])
-{
-	uint8_t array[256];
-	uint16_t pskey, length, size, stores = CSR_STORES_PSRAM;
-	char *str, val[7];
-	int err, reset = 0;
-
-	OPT_PSKEY(1, 1, &stores, &reset, NULL);
-
-	psr_read(argv[0]);
-
-	memset(array, 0, sizeof(array));
-	size = sizeof(array) - 6;
-
-	while (psr_get(&pskey, array + 6, &size) == 0) {
-		str = csr_pskeytoval(pskey);
-		if (!strcasecmp(str, "UNKNOWN")) {
-			sprintf(val, "0x%04x", pskey);
-			str = NULL;
-		}
-
-		printf("Loading %s%s ... ", str ? "PSKEY_" : "",
-							str ? str : val);
-		fflush(stdout);
-
-		length = size / 2;
-
-		array[0] = pskey & 0xff;
-		array[1] = pskey >> 8;
-		array[2] = length & 0xff;
-		array[3] = length >> 8;
-		array[4] = stores & 0xff;
-		array[5] = stores >> 8;
-
-		err = transport_write(transport, CSR_VARID_PS, array, size + 6);
-
-		printf("%s\n", err < 0 ? "failed" : "done");
-
-		memset(array, 0, sizeof(array));
-		size = sizeof(array) - 6;
-	}
-
-	if (reset)
-		transport_write(transport, CSR_VARID_WARM_RESET, NULL, 0);
-
-	return 0;
-}
-
-static int cmd_pscheck(int transport, int argc, char *argv[])
-{
-	uint8_t array[256];
-	uint16_t pskey, size;
-	int i;
-
-	OPT_HELP(1, NULL);
-
-	psr_read(argv[0]);
-
-	while (psr_get(&pskey, array, &size) == 0) {
-		printf("0x%04x =", pskey);
-		for (i = 0; i < size; i++)
-			printf(" 0x%02x", array[i]);
-		printf("\n");
-	}
-
-	return 0;
-}
-
-static int cmd_adc(int transport, int argc, char *argv[])
-{
-	uint8_t array[8];
-	uint16_t mux, value;
-	int err;
-
-	OPT_HELP(1, NULL);
-
-	if (!strncasecmp(argv[0], "0x", 2))
-		mux = strtol(argv[0], NULL, 16);
-	else
-		mux = atoi(argv[0]);
-
-	/* Request an ADC read from a particular mux'ed input */
-	memset(array, 0, sizeof(array));
-	array[0] = mux & 0xff;
-	array[1] = mux >> 8;
-
-	err = transport_write(transport, CSR_VARID_ADC, array, 2);
-	if (err < 0) {
-		errno = -err;
-		return -1;
-	}
-
-	/* have to wait a short while, then read result */
-	usleep(50000);
-	err = transport_read(transport, CSR_VARID_ADC_RES, array, 8);
-	if (err < 0) {
-		errno = -err;
-		return -1;
-	}
-
-	mux = array[0] | (array[1] << 8);
-	value = array[4] | (array[5] << 8);
-
-	printf("ADC value from Mux 0x%02x : 0x%04x (%s)\n", mux, value,
-					array[2] == 1 ? "valid" : "invalid");
-
-	return 0;
-}
-
-static struct {
-	char *str;
-	int (*func)(int transport, int argc, char *argv[]);
-	char *arg;
-	char *doc;
-} commands[] = {
-	{ "builddef",  cmd_builddef,  "",                    "Get build definitions"          },
-	{ "keylen",    cmd_keylen,    "<handle>",            "Get current crypt key length"   },
-	{ "clock",     cmd_clock,     "",                    "Get local Bluetooth clock"      },
-	{ "rand",      cmd_rand,      "",                    "Get random number"              },
-	{ "chiprev",   cmd_chiprev,   "",                    "Get chip revision"              },
-	{ "buildname", cmd_buildname, "",                    "Get the full build name"        },
-	{ "panicarg",  cmd_panicarg,  "",                    "Get panic code argument"        },
-	{ "faultarg",  cmd_faultarg,  "",                    "Get fault code argument"        },
-	{ "coldreset", cmd_coldreset, "",                    "Perform cold reset"             },
-	{ "warmreset", cmd_warmreset, "",                    "Perform warm reset"             },
-	{ "disabletx", cmd_disabletx, "",                    "Disable TX on the device"       },
-	{ "enabletx",  cmd_enabletx,  "",                    "Enable TX on the device"        },
-	{ "singlechan",cmd_singlechan,"<channel>",           "Lock radio on specific channel" },
-	{ "hoppingon", cmd_hoppingon, "",                    "Revert to channel hopping"      },
-	{ "rttxdata1", cmd_rttxdata1, "<freq> <level>",      "TXData1 radio test"             },
-	{ "radiotest", cmd_radiotest, "<freq> <level> <id>", "Run radio tests"                },
-	{ "memtypes",  cmd_memtypes,  NULL,                  "Get memory types"               },
-	{ "psget",     cmd_psget,     "<key>",               "Get value for PS key"           },
-	{ "psset",     cmd_psset,     "<key> <value>",       "Set value for PS key"           },
-	{ "psclr",     cmd_psclr,     "<key>",               "Clear value for PS key"         },
-	{ "pslist",    cmd_pslist,    NULL,                  "List all PS keys"               },
-	{ "psread",    cmd_psread,    NULL,                  "Read all PS keys"               },
-	{ "psload",    cmd_psload,    "<file>",              "Load all PS keys from PSR file" },
-	{ "pscheck",   cmd_pscheck,   "<file>",              "Check PSR file"                 },
-	{ "adc",       cmd_adc,       "<mux>",               "Read ADC value of <mux> input"  },
-	{ NULL }
-};
-
-static void usage(void)
-{
-	int i, pos = 0;
-
-	printf("bccmd - Utility for the CSR BCCMD interface\n\n");
-	printf("Usage:\n"
-		"\tbccmd [options] <command>\n\n");
-
-	printf("Options:\n"
-		"\t-t <transport>     Select the transport\n"
-		"\t-d <device>        Select the device\n"
-		"\t-b <bcsp rate>     Select the bcsp transfer rate\n"
-		"\t-h, --help         Display help\n"
-		"\n");
-
-	printf("Transports:\n"
-		"\tHCI USB BCSP H4 3WIRE\n\n");
-
-	printf("Commands:\n");
-	for (i = 0; commands[i].str; i++)
-		printf("\t%-10s %-20s\t%s\n", commands[i].str,
-		commands[i].arg ? commands[i].arg : " ",
-		commands[i].doc);
-	printf("\n");
-
-	printf("Keys:\n\t");
-	for (i = 0; storage[i].pskey; i++) {
-		printf("%s ", storage[i].str);
-		pos += strlen(storage[i].str) + 1;
-		if (pos > 60) {
-			printf("\n\t");
-			pos = 0;
-		}
-	}
-	printf("\n");
-}
-
-static struct option main_options[] = {
-	{ "transport",	1, 0, 't' },
-	{ "device",	1, 0, 'd' },
-	{ "bcsprate", 1, 0, 'b'},
-	{ "help",	0, 0, 'h' },
-	{ 0, 0, 0, 0 }
-};
-
-int main(int argc, char *argv[])
-{
-	char *device = NULL;
-	int i, err, opt, transport = CSR_TRANSPORT_HCI;
-	speed_t bcsp_rate = B38400;
-
-	while ((opt=getopt_long(argc, argv, "+t:d:i:b:h", main_options, NULL)) != EOF) {
-		switch (opt) {
-		case 't':
-			if (!strcasecmp(optarg, "hci"))
-				transport = CSR_TRANSPORT_HCI;
-			else if (!strcasecmp(optarg, "usb"))
-				transport = CSR_TRANSPORT_USB;
-			else if (!strcasecmp(optarg, "bcsp"))
-				transport = CSR_TRANSPORT_BCSP;
-			else if (!strcasecmp(optarg, "h4"))
-				transport = CSR_TRANSPORT_H4;
-			else if (!strcasecmp(optarg, "h5"))
-				transport = CSR_TRANSPORT_3WIRE;
-			else if (!strcasecmp(optarg, "3wire"))
-				transport = CSR_TRANSPORT_3WIRE;
-			else if (!strcasecmp(optarg, "twutl"))
-				transport = CSR_TRANSPORT_3WIRE;
-			else
-				transport = CSR_TRANSPORT_UNKNOWN;
-			break;
-
-		case 'd':
-		case 'i':
-			device = strdup(optarg);
-			break;
-		case 'b':
-			bcsp_rate = tty_get_speed(atoi(optarg));
-			if (!bcsp_rate) {
-				printf("Unknown BCSP baud rate specified, defaulting to 38400bps\n");
-				bcsp_rate = B38400;
-			}
-			break;
-		case 'h':
-		default:
-			usage();
-			exit(0);
-		}
-	}
-
-	argc -= optind;
-	argv += optind;
-	optind = 0;
-
-	if (argc < 1) {
-		usage();
-		exit(1);
-	}
-
-	if (transport_open(transport, device, bcsp_rate) < 0)
-		exit(1);
-
-	free(device);
-
-	for (i = 0; commands[i].str; i++) {
-		if (strcasecmp(commands[i].str, argv[0]))
-			continue;
-
-		err = commands[i].func(transport, argc, argv);
-
-		transport_close(transport);
-
-		if (err < 0) {
-			fprintf(stderr, "Can't execute command: %s (%d)\n",
-							strerror(errno), errno);
-			exit(1);
-		}
-
-		exit(0);
-	}
-
-	fprintf(stderr, "Unsupported command\n");
-
-	transport_close(transport);
-
-	exit(1);
-}
diff --git a/tools/csr.c b/tools/csr.c
deleted file mode 100644
index 61bdaa0cf..000000000
--- a/tools/csr.c
+++ /dev/null
@@ -1,2856 +0,0 @@
-/*
- *
- *  BlueZ - Bluetooth protocol stack for Linux
- *
- *  Copyright (C) 2003-2010  Marcel Holtmann <marcel@holtmann.org>
- *
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#define _GNU_SOURCE
-#include <stdio.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <sys/mman.h>
-#include <sys/socket.h>
-
-#include "lib/bluetooth.h"
-#include "lib/hci.h"
-#include "lib/hci_lib.h"
-
-#include "csr.h"
-
-struct psr_data {
-	uint16_t pskey;
-	uint8_t *value;
-	uint8_t size;
-	struct psr_data *next;
-};
-
-static struct psr_data *head = NULL, *tail = NULL;
-
-static struct {
-	uint16_t id;
-	char *str;
-} csr_map[] = {
-	{   66, "HCI 9.8"	},
-	{   97, "HCI 10.3"	},
-	{  101, "HCI 10.5"	},
-	{  111,	"HCI 11.0"	},
-	{  112,	"HCI 11.1"	},
-	{  114,	"HCI 11.2"	},
-	{  115,	"HCI 11.3"	},
-	{  117,	"HCI 12.0"	},
-	{  119,	"HCI 12.1"	},
-	{  133,	"HCI 12.2"	},
-	{  134,	"HCI 12.3"	},
-	{  162,	"HCI 12.4"	},
-	{  165,	"HCI 12.5"	},
-	{  169,	"HCI 12.6"	},
-	{  188,	"HCI 12.7"	},
-	{  218,	"HCI 12.8"	},
-	{  283,	"HCI 12.9"	},
-	{  203,	"HCI 13.2"	},
-	{  204,	"HCI 13.2"	},
-	{  210,	"HCI 13.3"	},
-	{  211,	"HCI 13.3"	},
-	{  213,	"HCI 13.4"	},
-	{  214,	"HCI 13.4"	},
-	{  225,	"HCI 13.5"	},
-	{  226,	"HCI 13.5"	},
-	{  237,	"HCI 13.6"	},
-	{  238,	"HCI 13.6"	},
-	{  242,	"HCI 14.0"	},
-	{  243,	"HCI 14.0"	},
-	{  244,	"HCI 14.0"	},
-	{  245,	"HCI 14.0"	},
-	{  254,	"HCI 13.7"	},
-	{  255,	"HCI 13.7"	},
-	{  264,	"HCI 14.1"	},
-	{  265,	"HCI 14.1"	},
-	{  267,	"HCI 14.2"	},
-	{  268,	"HCI 14.2"	},
-	{  272,	"HCI 14.3"	},
-	{  273,	"HCI 14.3"	},
-	{  274,	"HCI 13.8"	},
-	{  275,	"HCI 13.8"	},
-	{  286,	"HCI 13.9"	},
-	{  287,	"HCI 13.9"	},
-	{  309,	"HCI 13.10"	},
-	{  310,	"HCI 13.10"	},
-	{  313,	"HCI 14.4"	},
-	{  314,	"HCI 14.4"	},
-	{  323,	"HCI 14.5"	},
-	{  324,	"HCI 14.5"	},
-	{  336,	"HCI 14.6"	},
-	{  337,	"HCI 14.6"	},
-	{  351,	"HCI 13.11"	},
-	{  352,	"HCI 13.11"	},
-	{  362,	"HCI 15.0"	},
-	{  363,	"HCI 15.0"	},
-	{  364,	"HCI 15.0"	},
-	{  365,	"HCI 15.0"	},
-	{  373,	"HCI 14.7"	},
-	{  374,	"HCI 14.7"	},
-	{  379,	"HCI 15.1"	},
-	{  380,	"HCI 15.1"	},
-	{  381,	"HCI 15.1"	},
-	{  382,	"HCI 15.1"	},
-	{  392,	"HCI 15.2"	},
-	{  393,	"HCI 15.2"	},
-	{  394,	"HCI 15.2"	},
-	{  395,	"HCI 15.2"	},
-	{  436,	"HCI 16.0"	},
-	{  437,	"HCI 16.0"	},
-	{  438,	"HCI 16.0"	},
-	{  439,	"HCI 16.0"	},
-	{  443,	"HCI 15.3"	},
-	{  444,	"HCI 15.3"	},
-	{  465,	"HCI 16.1"	},
-	{  466,	"HCI 16.1"	},
-	{  467,	"HCI 16.1"	},
-	{  468,	"HCI 16.1"	},
-	{  487,	"HCI 14.8"	},
-	{  488,	"HCI 14.8"	},
-	{  492,	"HCI 16.2"	},
-	{  493,	"HCI 16.2"	},
-	{  495,	"HCI 16.2"	},
-	{  496,	"HCI 16.2"	},
-	{  502,	"HCI 16.1.1"	},
-	{  503,	"HCI 16.1.1"	},
-	{  504,	"HCI 16.1.1"	},
-	{  505,	"HCI 16.1.1"	},
-	{  506,	"HCI 16.1.2"	},
-	{  507,	"HCI 16.1.2"	},
-	{  508,	"HCI 16.1.2"	},
-	{  509,	"HCI 16.1.2"	},
-	{  516,	"HCI 16.3"	},
-	{  517,	"HCI 16.3"	},
-	{  518,	"HCI 16.3"	},
-	{  519,	"HCI 16.3"	},
-	{  523,	"HCI 16.4"	},
-	{  524,	"HCI 16.4"	},
-	{  525,	"HCI 16.4"	},
-	{  526,	"HCI 16.4"	},
-	{  553,	"HCI 15.3"	},
-	{  554,	"HCI 15.3"	},
-	{  562,	"HCI 16.5"	},
-	{  563,	"HCI 16.5"	},
-	{  564,	"HCI 16.5"	},
-	{  565,	"HCI 16.5"	},
-	{  593,	"HCI 17.0"	},
-	{  594,	"HCI 17.0"	},
-	{  595,	"HCI 17.0"	},
-	{  599,	"HCI 17.0"	},
-	{  600,	"HCI 17.0"	},
-	{  608,	"HCI 13.10.1"	},
-	{  609,	"HCI 13.10.1"	},
-	{  613,	"HCI 17.1"	},
-	{  614,	"HCI 17.1"	},
-	{  615,	"HCI 17.1"	},
-	{  616,	"HCI 17.1"	},
-	{  618,	"HCI 17.1"	},
-	{  624,	"HCI 17.2"	},
-	{  625,	"HCI 17.2"	},
-	{  626,	"HCI 17.2"	},
-	{  627,	"HCI 17.2"	},
-	{  637,	"HCI 16.6"	},
-	{  638,	"HCI 16.6"	},
-	{  639,	"HCI 16.6"	},
-	{  640,	"HCI 16.6"	},
-	{  642,	"HCI 13.10.2"	},
-	{  643,	"HCI 13.10.2"	},
-	{  644,	"HCI 13.10.3"	},
-	{  645,	"HCI 13.10.3"	},
-	{  668,	"HCI 13.10.4"	},
-	{  669,	"HCI 13.10.4"	},
-	{  681,	"HCI 16.7"	},
-	{  682,	"HCI 16.7"	},
-	{  683,	"HCI 16.7"	},
-	{  684,	"HCI 16.7"	},
-	{  704,	"HCI 16.8"	},
-	{  718,	"HCI 16.4.1"	},
-	{  719,	"HCI 16.4.1"	},
-	{  720,	"HCI 16.4.1"	},
-	{  721,	"HCI 16.4.1"	},
-	{  722,	"HCI 16.7.1"	},
-	{  723,	"HCI 16.7.1"	},
-	{  724,	"HCI 16.7.1"	},
-	{  725,	"HCI 16.7.1"	},
-	{  731,	"HCI 16.7.2"	},
-	{  732,	"HCI 16.7.2"	},
-	{  733,	"HCI 16.7.2"	},
-	{  734,	"HCI 16.7.2"	},
-	{  735,	"HCI 16.4.2"	},
-	{  736,	"HCI 16.4.2"	},
-	{  737,	"HCI 16.4.2"	},
-	{  738,	"HCI 16.4.2"	},
-	{  750,	"HCI 16.7.3"	},
-	{  751,	"HCI 16.7.3"	},
-	{  752,	"HCI 16.7.3"	},
-	{  753,	"HCI 16.7.3"	},
-	{  760,	"HCI 16.7.4"	},
-	{  761,	"HCI 16.7.4"	},
-	{  762,	"HCI 16.7.4"	},
-	{  763,	"HCI 16.7.4"	},
-	{  770,	"HCI 16.9"	},
-	{  771,	"HCI 16.9"	},
-	{  772,	"HCI 16.9"	},
-	{  773,	"HCI 16.9"	},
-	{  774,	"HCI 17.3"	},
-	{  775,	"HCI 17.3"	},
-	{  776,	"HCI 17.3"	},
-	{  777,	"HCI 17.3"	},
-	{  781,	"HCI 16.7.5"	},
-	{  786,	"HCI 16.10"	},
-	{  787,	"HCI 16.10"	},
-	{  788,	"HCI 16.10"	},
-	{  789,	"HCI 16.10"	},
-	{  791,	"HCI 16.4.3"	},
-	{  792,	"HCI 16.4.3"	},
-	{  793,	"HCI 16.4.3"	},
-	{  794,	"HCI 16.4.3"	},
-	{  798,	"HCI 16.11"	},
-	{  799,	"HCI 16.11"	},
-	{  800,	"HCI 16.11"	},
-	{  801,	"HCI 16.11"	},
-	{  806,	"HCI 16.7.5"	},
-	{  807,	"HCI 16.12"	},
-	{  808,	"HCI 16.12"	},
-	{  809,	"HCI 16.12"	},
-	{  810,	"HCI 16.12"	},
-	{  817,	"HCI 16.13"	},
-	{  818,	"HCI 16.13"	},
-	{  819,	"HCI 16.13"	},
-	{  820,	"HCI 16.13"	},
-	{  823,	"HCI 13.10.5"	},
-	{  824,	"HCI 13.10.5"	},
-	{  826,	"HCI 16.14"	},
-	{  827,	"HCI 16.14"	},
-	{  828,	"HCI 16.14"	},
-	{  829,	"HCI 16.14"	},
-	{  843,	"HCI 17.3.1"	},
-	{  856,	"HCI 17.3.2"	},
-	{  857,	"HCI 17.3.2"	},
-	{  858,	"HCI 17.3.2"	},
-	{ 1120, "HCI 17.11"	},
-	{ 1168, "HCI 18.1"	},
-	{ 1169, "HCI 18.1"	},
-	{ 1241, "HCI 18.x"	},
-	{ 1298, "HCI 18.2"	},
-	{ 1354, "HCI 18.2"	},
-	{ 1392, "HCI 18.2"	},
-	{ 1393, "HCI 18.2"	},
-	{ 1501, "HCI 18.2"	},
-	{ 1503, "HCI 18.2"	},
-	{ 1504, "HCI 18.2"	},
-	{ 1505, "HCI 18.2"	},
-	{ 1506, "HCI 18.2"	},
-	{ 1520, "HCI 18.2"	},
-	{ 1586, "HCI 18.2"	},
-	{ 1591, "HCI 18.2"	},
-	{ 1592, "HCI 18.2"	},
-	{ 1593, "HCI 18.2.1"	},
-	{ 1733, "HCI 18.3"	},
-	{ 1734, "HCI 18.3"	},
-	{ 1735, "HCI 18.3"	},
-	{ 1737, "HCI 18.3"	},
-	{ 1915, "HCI 19.2"	},
-	{ 1916, "HCI 19.2"	},
-	{ 1958, "HCI 19.2"	},
-	{ 1981, "Unified 20a"	},
-	{ 1982, "Unified 20a"	},
-	{ 1989, "HCI 18.4"	},
-	{ 2062, "Unified 20a1"	},
-	{ 2063, "Unified 20a1"	},
-	{ 2067, "Unified 18f"	},
-	{ 2068, "Unified 18f"	},
-	{ 2243, "Unified 18e"	},
-	{ 2244, "Unified 18e"	},
-	{ 2258, "Unified 20d"	},
-	{ 2259, "Unified 20d"	},
-	{ 2361, "Unified 20e"	},
-	{ 2362, "Unified 20e"	},
-	{ 2386, "Unified 21a"	},
-	{ 2387, "Unified 21a"	},
-	{ 2423, "Unified 21a"	},
-	{ 2424, "Unified 21a"	},
-	{ 2623, "Unified 21c"	},
-	{ 2624, "Unified 21c"	},
-	{ 2625, "Unified 21c"	},
-	{ 2626, "Unified 21c"	},
-	{ 2627, "Unified 21c"	},
-	{ 2628, "Unified 21c"	},
-	{ 2629, "Unified 21c"	},
-	{ 2630, "Unified 21c"	},
-	{ 2631, "Unified 21c"	},
-	{ 2632, "Unified 21c"	},
-	{ 2633, "Unified 21c"	},
-	{ 2634, "Unified 21c"	},
-	{ 2635, "Unified 21c"	},
-	{ 2636, "Unified 21c"	},
-	{ 2649, "Unified 21c"	},
-	{ 2650, "Unified 21c"	},
-	{ 2651, "Unified 21c"	},
-	{ 2652, "Unified 21c"	},
-	{ 2653, "Unified 21c"	},
-	{ 2654, "Unified 21c"	},
-	{ 2655, "Unified 21c"	},
-	{ 2656, "Unified 21c"	},
-	{ 2658, "Unified 21c"	},
-	{ 3057, "Unified 21d"	},
-	{ 3058, "Unified 21d"	},
-	{ 3059, "Unified 21d"	},
-	{ 3060, "Unified 21d"	},
-	{ 3062, "Unified 21d"	},
-	{ 3063, "Unified 21d"	},
-	{ 3064, "Unified 21d"	},
-	{ 3164, "Unified 21e"	},
-	{ 3413, "Unified 21f"	},
-	{ 3414, "Unified 21f"	},
-	{ 3415, "Unified 21f"	},
-	{ 3424, "Unified 21f"	},
-	{ 3454, "Unified 21f"	},
-	{ 3684, "Unified 21f"	},
-	{ 3764, "Unified 21f"	},
-	{ 4276, "Unified 22b"	},
-	{ 4277, "Unified 22b"	},
-	{ 4279, "Unified 22b"	},
-	{ 4281, "Unified 22b"	},
-	{ 4282, "Unified 22b"	},
-	{ 4283, "Unified 22b"	},
-	{ 4284, "Unified 22b"	},
-	{ 4285, "Unified 22b"	},
-	{ 4289, "Unified 22b"	},
-	{ 4290, "Unified 22b"	},
-	{ 4291, "Unified 22b"	},
-	{ 4292, "Unified 22b"	},
-	{ 4293, "Unified 22b"	},
-	{ 4294, "Unified 22b"	},
-	{ 4295, "Unified 22b"	},
-	{ 4363, "Unified 22c"	},
-	{ 4373, "Unified 22c"	},
-	{ 4374, "Unified 22c"	},
-	{ 4532, "Unified 22d"	},
-	{ 4533, "Unified 22d"	},
-	{ 4698, "Unified 23c"	},
-	{ 4839, "Unified 23c"	},
-	{ 4841, "Unified 23c"	},
-	{ 4866, "Unified 23c"	},
-	{ 4867, "Unified 23c"	},
-	{ 4868, "Unified 23c"	},
-	{ 4869, "Unified 23c"	},
-	{ 4870, "Unified 23c"	},
-	{ 4871, "Unified 23c"	},
-	{ 4872, "Unified 23c"	},
-	{ 4874, "Unified 23c"	},
-	{ 4875, "Unified 23c"	},
-	{ 4876, "Unified 23c"	},
-	{ 4877, "Unified 23c"	},
-	{ 2526, "Marcel 1 (2005-09-26)"	},
-	{ 2543, "Marcel 2 (2005-09-28)"	},
-	{ 2622, "Marcel 3 (2005-10-27)"	},
-	{ 3326, "Marcel 4 (2006-06-16)"	},
-	{ 3612, "Marcel 5 (2006-10-24)"	},
-	{ 4509, "Marcel 6 (2007-06-11)"	},
-	{ 5417, "Marcel 7 (2008-08-26)" },
-	{  195, "Sniff 1 (2001-11-27)"	},
-	{  220, "Sniff 2 (2002-01-03)"	},
-	{  269, "Sniff 3 (2002-02-22)"	},
-	{  270, "Sniff 4 (2002-02-26)"	},
-	{  284, "Sniff 5 (2002-03-12)"	},
-	{  292, "Sniff 6 (2002-03-20)"	},
-	{  305, "Sniff 7 (2002-04-12)"	},
-	{  306, "Sniff 8 (2002-04-12)"	},
-	{  343, "Sniff 9 (2002-05-02)"	},
-	{  346, "Sniff 10 (2002-05-03)"	},
-	{  355, "Sniff 11 (2002-05-16)"	},
-	{  256, "Sniff 11 (2002-05-16)"	},
-	{  390, "Sniff 12 (2002-06-26)"	},
-	{  450, "Sniff 13 (2002-08-16)"	},
-	{  451, "Sniff 13 (2002-08-16)"	},
-	{  533, "Sniff 14 (2002-10-11)"	},
-	{  580, "Sniff 15 (2002-11-14)"	},
-	{  623, "Sniff 16 (2002-12-12)"	},
-	{  678, "Sniff 17 (2003-01-29)"	},
-	{  847, "Sniff 18 (2003-04-17)"	},
-	{  876, "Sniff 19 (2003-06-10)"	},
-	{  997, "Sniff 22 (2003-09-05)"	},
-	{ 1027, "Sniff 23 (2003-10-03)"	},
-	{ 1029, "Sniff 24 (2003-10-03)"	},
-	{ 1112, "Sniff 25 (2003-12-03)"	},
-	{ 1113, "Sniff 25 (2003-12-03)"	},
-	{ 1133, "Sniff 26 (2003-12-18)"	},
-	{ 1134, "Sniff 26 (2003-12-18)"	},
-	{ 1223, "Sniff 27 (2004-03-08)"	},
-	{ 1224, "Sniff 27 (2004-03-08)"	},
-	{ 1319, "Sniff 31 (2004-04-22)"	},
-	{ 1320, "Sniff 31 (2004-04-22)"	},
-	{ 1427, "Sniff 34 (2004-06-16)"	},
-	{ 1508, "Sniff 35 (2004-07-19)"	},
-	{ 1509, "Sniff 35 (2004-07-19)"	},
-	{ 1587, "Sniff 36 (2004-08-18)"	},
-	{ 1588, "Sniff 36 (2004-08-18)"	},
-	{ 1641, "Sniff 37 (2004-09-16)"	},
-	{ 1642, "Sniff 37 (2004-09-16)"	},
-	{ 1699, "Sniff 38 (2004-10-07)"	},
-	{ 1700, "Sniff 38 (2004-10-07)"	},
-	{ 1752, "Sniff 39 (2004-11-02)"	},
-	{ 1753, "Sniff 39 (2004-11-02)"	},
-	{ 1759, "Sniff 40 (2004-11-03)"	},
-	{ 1760, "Sniff 40 (2004-11-03)"	},
-	{ 1761, "Sniff 40 (2004-11-03)"	},
-	{ 2009, "Sniff 41 (2005-04-06)"	},
-	{ 2010, "Sniff 41 (2005-04-06)"	},
-	{ 2011, "Sniff 41 (2005-04-06)"	},
-	{ 2016, "Sniff 42 (2005-04-11)"	},
-	{ 2017, "Sniff 42 (2005-04-11)"	},
-	{ 2018, "Sniff 42 (2005-04-11)"	},
-	{ 2023, "Sniff 43 (2005-04-14)"	},
-	{ 2024, "Sniff 43 (2005-04-14)"	},
-	{ 2025, "Sniff 43 (2005-04-14)"	},
-	{ 2032, "Sniff 44 (2005-04-18)"	},
-	{ 2033, "Sniff 44 (2005-04-18)"	},
-	{ 2034, "Sniff 44 (2005-04-18)"	},
-	{ 2288, "Sniff 45 (2005-07-08)"	},
-	{ 2289, "Sniff 45 (2005-07-08)"	},
-	{ 2290, "Sniff 45 (2005-07-08)"	},
-	{ 2388, "Sniff 46 (2005-08-17)"	},
-	{ 2389, "Sniff 46 (2005-08-17)"	},
-	{ 2390, "Sniff 46 (2005-08-17)"	},
-	{ 2869, "Sniff 47 (2006-02-15)"	},
-	{ 2870, "Sniff 47 (2006-02-15)"	},
-	{ 2871, "Sniff 47 (2006-02-15)"	},
-	{ 3214, "Sniff 48 (2006-05-16)"	},
-	{ 3215, "Sniff 48 (2006-05-16)"	},
-	{ 3216, "Sniff 48 (2006-05-16)"	},
-	{ 3356, "Sniff 49 (2006-07-17)"	},
-	{ 3529, "Sniff 50 (2006-09-21)"	},
-	{ 3546, "Sniff 51 (2006-09-29)"	},
-	{ 3683, "Sniff 52 (2006-11-03)"	},
-	{    0, }
-};
-
-char *csr_builddeftostr(uint16_t def)
-{
-	switch (def) {
-	case 0x0000:
-		return "NONE";
-	case 0x0001:
-		return "CHIP_BASE_BC01";
-	case 0x0002:
-		return "CHIP_BASE_BC02";
-	case 0x0003:
-		return "CHIP_BC01B";
-	case 0x0004:
-		return "CHIP_BC02_EXTERNAL";
-	case 0x0005:
-		return "BUILD_HCI";
-	case 0x0006:
-		return "BUILD_RFCOMM";
-	case 0x0007:
-		return "BT_VER_1_1";
-	case 0x0008:
-		return "TRANSPORT_ALL";
-	case 0x0009:
-		return "TRANSPORT_BCSP";
-	case 0x000a:
-		return "TRANSPORT_H4";
-	case 0x000b:
-		return "TRANSPORT_USB";
-	case 0x000c:
-		return "MAX_CRYPT_KEY_LEN_56";
-	case 0x000d:
-		return "MAX_CRYPT_KEY_LEN_128";
-	case 0x000e:
-		return "TRANSPORT_USER";
-	case 0x000f:
-		return "CHIP_BC02_KATO";
-	case 0x0010:
-		return "TRANSPORT_NONE";
-	case 0x0012:
-		return "REQUIRE_8MBIT";
-	case 0x0013:
-		return "RADIOTEST";
-	case 0x0014:
-		return "RADIOTEST_LITE";
-	case 0x0015:
-		return "INSTALL_FLASH";
-	case 0x0016:
-		return "INSTALL_EEPROM";
-	case 0x0017:
-		return "INSTALL_COMBO_DOT11";
-	case 0x0018:
-		return "LOWPOWER_TX";
-	case 0x0019:
-		return "TRANSPORT_TWUTL";
-	case 0x001a:
-		return "COMPILER_GCC";
-	case 0x001b:
-		return "CHIP_BC02_CLOUSEAU";
-	case 0x001c:
-		return "CHIP_BC02_TOULOUSE";
-	case 0x001d:
-		return "CHIP_BASE_BC3";
-	case 0x001e:
-		return "CHIP_BC3_NICKNACK";
-	case 0x001f:
-		return "CHIP_BC3_KALIMBA";
-	case 0x0020:
-		return "INSTALL_HCI_MODULE";
-	case 0x0021:
-		return "INSTALL_L2CAP_MODULE";
-	case 0x0022:
-		return "INSTALL_DM_MODULE";
-	case 0x0023:
-		return "INSTALL_SDP_MODULE";
-	case 0x0024:
-		return "INSTALL_RFCOMM_MODULE";
-	case 0x0025:
-		return "INSTALL_HIDIO_MODULE";
-	case 0x0026:
-		return "INSTALL_PAN_MODULE";
-	case 0x0027:
-		return "INSTALL_IPV4_MODULE";
-	case 0x0028:
-		return "INSTALL_IPV6_MODULE";
-	case 0x0029:
-		return "INSTALL_TCP_MODULE";
-	case 0x002a:
-		return "BT_VER_1_2";
-	case 0x002b:
-		return "INSTALL_UDP_MODULE";
-	case 0x002c:
-		return "REQUIRE_0_WAIT_STATES";
-	case 0x002d:
-		return "CHIP_BC3_PADDYWACK";
-	case 0x002e:
-		return "CHIP_BC4_COYOTE";
-	case 0x002f:
-		return "CHIP_BC4_ODDJOB";
-	case 0x0030:
-		return "TRANSPORT_H4DS";
-	case 0x0031:
-		return "CHIP_BASE_BC4";
-	default:
-		return "UNKNOWN";
-	}
-}
-
-char *csr_buildidtostr(uint16_t id)
-{
-	static char str[12];
-	int i;
-
-	for (i = 0; csr_map[i].id; i++)
-		if (csr_map[i].id == id)
-			return csr_map[i].str;
-
-	snprintf(str, sizeof(str), "Build %d", id);
-	return str;
-}
-
-char *csr_chipvertostr(uint16_t ver, uint16_t rev)
-{
-	switch (ver) {
-	case 0x00:
-		return "BlueCore01a";
-	case 0x01:
-		switch (rev) {
-		case 0x64:
-			return "BlueCore01b (ES)";
-		case 0x65:
-		default:
-			return "BlueCore01b";
-		}
-	case 0x02:
-		switch (rev) {
-		case 0x89:
-			return "BlueCore02-External (ES2)";
-		case 0x8a:
-			return "BlueCore02-External";
-		case 0x28:
-			return "BlueCore02-ROM/Audio/Flash";
-		default:
-			return "BlueCore02";
-		}
-	case 0x03:
-		switch (rev) {
-		case 0x43:
-			return "BlueCore3-MM";
-		case 0x15:
-			return "BlueCore3-ROM";
-		case 0xe2:
-			return "BlueCore3-Flash";
-		case 0x26:
-			return "BlueCore4-External";
-		case 0x30:
-			return "BlueCore4-ROM";
-		default:
-			return "BlueCore3 or BlueCore4";
-		}
-	default:
-		return "Unknown";
-	}
-}
-
-char *csr_pskeytostr(uint16_t pskey)
-{
-	switch (pskey) {
-	case CSR_PSKEY_BDADDR:
-		return "Bluetooth address";
-	case CSR_PSKEY_COUNTRYCODE:
-		return "Country code";
-	case CSR_PSKEY_CLASSOFDEVICE:
-		return "Class of device";
-	case CSR_PSKEY_DEVICE_DRIFT:
-		return "Device drift";
-	case CSR_PSKEY_DEVICE_JITTER:
-		return "Device jitter";
-	case CSR_PSKEY_MAX_ACLS:
-		return "Maximum ACL links";
-	case CSR_PSKEY_MAX_SCOS:
-		return "Maximum SCO links";
-	case CSR_PSKEY_MAX_REMOTE_MASTERS:
-		return "Maximum remote masters";
-	case CSR_PSKEY_ENABLE_MASTERY_WITH_SLAVERY:
-		return "Support master and slave roles simultaneously";
-	case CSR_PSKEY_H_HC_FC_MAX_ACL_PKT_LEN:
-		return "Maximum HCI ACL packet length";
-	case CSR_PSKEY_H_HC_FC_MAX_SCO_PKT_LEN:
-		return "Maximum HCI SCO packet length";
-	case CSR_PSKEY_H_HC_FC_MAX_ACL_PKTS:
-		return "Maximum number of HCI ACL packets";
-	case CSR_PSKEY_H_HC_FC_MAX_SCO_PKTS:
-		return "Maximum number of HCI SCO packets";
-	case CSR_PSKEY_LC_FC_BUFFER_LOW_WATER_MARK:
-		return "Flow control low water mark";
-	case CSR_PSKEY_LC_MAX_TX_POWER:
-		return "Maximum transmit power";
-	case CSR_PSKEY_TX_GAIN_RAMP:
-		return "Transmit gain ramp rate";
-	case CSR_PSKEY_LC_POWER_TABLE:
-		return "Radio power table";
-	case CSR_PSKEY_LC_PEER_POWER_PERIOD:
-		return "Peer transmit power control interval";
-	case CSR_PSKEY_LC_FC_POOLS_LOW_WATER_MARK:
-		return "Flow control pool low water mark";
-	case CSR_PSKEY_LC_DEFAULT_TX_POWER:
-		return "Default transmit power";
-	case CSR_PSKEY_LC_RSSI_GOLDEN_RANGE:
-		return "RSSI at bottom of golden receive range";
-	case CSR_PSKEY_LC_COMBO_DISABLE_PIO_MASK:
-		return "Combo: PIO lines and logic to disable transmit";
-	case CSR_PSKEY_LC_COMBO_PRIORITY_PIO_MASK:
-		return "Combo: priority activity PIO lines and logic";
-	case CSR_PSKEY_LC_COMBO_DOT11_CHANNEL_PIO_BASE:
-		return "Combo: 802.11b channel number base PIO line";
-	case CSR_PSKEY_LC_COMBO_DOT11_BLOCK_CHANNELS:
-		return "Combo: channels to block either side of 802.11b";
-	case CSR_PSKEY_LC_MAX_TX_POWER_NO_RSSI:
-		return "Maximum transmit power when peer has no RSSI";
-	case CSR_PSKEY_LC_CONNECTION_RX_WINDOW:
-		return "Receive window size during connections";
-	case CSR_PSKEY_LC_COMBO_DOT11_TX_PROTECTION_MODE:
-		return "Combo: which TX packets shall we protect";
-	case CSR_PSKEY_LC_ENHANCED_POWER_TABLE:
-		return "Radio power table";
-	case CSR_PSKEY_LC_WIDEBAND_RSSI_CONFIG:
-		return "RSSI configuration for use with wideband RSSI";
-	case CSR_PSKEY_LC_COMBO_DOT11_PRIORITY_LEAD:
-		return "Combo: How much notice will we give the Combo Card";
-	case CSR_PSKEY_BT_CLOCK_INIT:
-		return "Initial value of Bluetooth clock";
-	case CSR_PSKEY_TX_MR_MOD_DELAY:
-		return "TX Mod delay";
-	case CSR_PSKEY_RX_MR_SYNC_TIMING:
-		return "RX MR Sync Timing";
-	case CSR_PSKEY_RX_MR_SYNC_CONFIG:
-		return "RX MR Sync Configuration";
-	case CSR_PSKEY_LC_LOST_SYNC_SLOTS:
-		return "Time in ms for lost sync in low power modes";
-	case CSR_PSKEY_RX_MR_SAMP_CONFIG:
-		return "RX MR Sync Configuration";
-	case CSR_PSKEY_AGC_HYST_LEVELS:
-		return "AGC hysteresis levels";
-	case CSR_PSKEY_RX_LEVEL_LOW_SIGNAL:
-		return "ANA_RX_LVL at low signal strengths";
-	case CSR_PSKEY_AGC_IQ_LVL_VALUES:
-		return "ANA_IQ_LVL values for AGC algorithmn";
-	case CSR_PSKEY_MR_FTRIM_OFFSET_12DB:
-		return "ANA_RX_FTRIM offset when using 12 dB IF atten ";
-	case CSR_PSKEY_MR_FTRIM_OFFSET_6DB:
-		return "ANA_RX_FTRIM offset when using 6 dB IF atten ";
-	case CSR_PSKEY_NO_CAL_ON_BOOT:
-		return "Do not calibrate radio on boot";
-	case CSR_PSKEY_RSSI_HI_TARGET:
-		return "RSSI high target";
-	case CSR_PSKEY_PREFERRED_MIN_ATTENUATION:
-		return "Preferred minimum attenuator setting";
-	case CSR_PSKEY_LC_COMBO_DOT11_PRIORITY_OVERRIDE:
-		return "Combo: Treat all packets as high priority";
-	case CSR_PSKEY_LC_MULTISLOT_HOLDOFF:
-		return "Time till single slot packets are used for resync";
-	case CSR_PSKEY_FREE_KEY_PIGEON_HOLE:
-		return "Link key store bitfield";
-	case CSR_PSKEY_LINK_KEY_BD_ADDR0:
-		return "Bluetooth address + link key 0";
-	case CSR_PSKEY_LINK_KEY_BD_ADDR1:
-		return "Bluetooth address + link key 1";
-	case CSR_PSKEY_LINK_KEY_BD_ADDR2:
-		return "Bluetooth address + link key 2";
-	case CSR_PSKEY_LINK_KEY_BD_ADDR3:
-		return "Bluetooth address + link key 3";
-	case CSR_PSKEY_LINK_KEY_BD_ADDR4:
-		return "Bluetooth address + link key 4";
-	case CSR_PSKEY_LINK_KEY_BD_ADDR5:
-		return "Bluetooth address + link key 5";
-	case CSR_PSKEY_LINK_KEY_BD_ADDR6:
-		return "Bluetooth address + link key 6";
-	case CSR_PSKEY_LINK_KEY_BD_ADDR7:
-		return "Bluetooth address + link key 7";
-	case CSR_PSKEY_LINK_KEY_BD_ADDR8:
-		return "Bluetooth address + link key 8";
-	case CSR_PSKEY_LINK_KEY_BD_ADDR9:
-		return "Bluetooth address + link key 9";
-	case CSR_PSKEY_LINK_KEY_BD_ADDR10:
-		return "Bluetooth address + link key 10";
-	case CSR_PSKEY_LINK_KEY_BD_ADDR11:
-		return "Bluetooth address + link key 11";
-	case CSR_PSKEY_LINK_KEY_BD_ADDR12:
-		return "Bluetooth address + link key 12";
-	case CSR_PSKEY_LINK_KEY_BD_ADDR13:
-		return "Bluetooth address + link key 13";
-	case CSR_PSKEY_LINK_KEY_BD_ADDR14:
-		return "Bluetooth address + link key 14";
-	case CSR_PSKEY_LINK_KEY_BD_ADDR15:
-		return "Bluetooth address + link key 15";
-	case CSR_PSKEY_ENC_KEY_LMIN:
-		return "Minimum encryption key length";
-	case CSR_PSKEY_ENC_KEY_LMAX:
-		return "Maximum encryption key length";
-	case CSR_PSKEY_LOCAL_SUPPORTED_FEATURES:
-		return "Local supported features block";
-	case CSR_PSKEY_LM_USE_UNIT_KEY:
-		return "Allow use of unit key for authentication?";
-	case CSR_PSKEY_HCI_NOP_DISABLE:
-		return "Disable the HCI Command_Status event on boot";
-	case CSR_PSKEY_LM_MAX_EVENT_FILTERS:
-		return "Maximum number of event filters";
-	case CSR_PSKEY_LM_USE_ENC_MODE_BROADCAST:
-		return "Allow LM to use enc_mode=2";
-	case CSR_PSKEY_LM_TEST_SEND_ACCEPTED_TWICE:
-		return "LM sends two LMP_accepted messages in test mode";
-	case CSR_PSKEY_LM_MAX_PAGE_HOLD_TIME:
-		return "Maximum time we hold a device around page";
-	case CSR_PSKEY_AFH_ADAPTATION_RESPONSE_TIME:
-		return "LM period for AFH adaption";
-	case CSR_PSKEY_AFH_OPTIONS:
-		return "Options to configure AFH";
-	case CSR_PSKEY_AFH_RSSI_RUN_PERIOD:
-		return "AFH RSSI reading period";
-	case CSR_PSKEY_AFH_REENABLE_CHANNEL_TIME:
-		return "AFH good channel adding time";
-	case CSR_PSKEY_NO_DROP_ON_ACR_MS_FAIL:
-		return "Complete link if acr barge-in role switch refused";
-	case CSR_PSKEY_MAX_PRIVATE_KEYS:
-		return "Max private link keys stored";
-	case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR0:
-		return "Bluetooth address + link key 0";
-	case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR1:
-		return "Bluetooth address + link key 1";
-	case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR2:
-		return "Bluetooth address + link key 2";
-	case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR3:
-		return "Bluetooth address + link key 3";
-	case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR4:
-		return "Bluetooth address + link key 4";
-	case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR5:
-		return "Bluetooth address + link key 5";
-	case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR6:
-		return "Bluetooth address + link key 6";
-	case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR7:
-		return "Bluetooth address + link key 7";
-	case CSR_PSKEY_LOCAL_SUPPORTED_COMMANDS:
-		return "Local supported commands";
-	case CSR_PSKEY_LM_MAX_ABSENCE_INDEX:
-		return "Maximum absence index allowed";
-	case CSR_PSKEY_DEVICE_NAME:
-		return "Local device's \"user friendly\" name";
-	case CSR_PSKEY_AFH_RSSI_THRESHOLD:
-		return "AFH RSSI threshold";
-	case CSR_PSKEY_LM_CASUAL_SCAN_INTERVAL:
-		return "Scan interval in slots for casual scanning";
-	case CSR_PSKEY_AFH_MIN_MAP_CHANGE:
-		return "The minimum amount to change an AFH map by";
-	case CSR_PSKEY_AFH_RSSI_LP_RUN_PERIOD:
-		return "AFH RSSI reading period when in low power mode";
-	case CSR_PSKEY_HCI_LMP_LOCAL_VERSION:
-		return "The HCI and LMP version reported locally";
-	case CSR_PSKEY_LMP_REMOTE_VERSION:
-		return "The LMP version reported remotely";
-	case CSR_PSKEY_HOLD_ERROR_MESSAGE_NUMBER:
-		return "Maximum number of queued HCI Hardware Error Events";
-	case CSR_PSKEY_DFU_ATTRIBUTES:
-		return "DFU attributes";
-	case CSR_PSKEY_DFU_DETACH_TO:
-		return "DFU detach timeout";
-	case CSR_PSKEY_DFU_TRANSFER_SIZE:
-		return "DFU transfer size";
-	case CSR_PSKEY_DFU_ENABLE:
-		return "DFU enable";
-	case CSR_PSKEY_DFU_LIN_REG_ENABLE:
-		return "Linear Regulator enabled at boot in DFU mode";
-	case CSR_PSKEY_DFUENC_VMAPP_PK_MODULUS_MSB:
-		return "DFU encryption VM application public key MSB";
-	case CSR_PSKEY_DFUENC_VMAPP_PK_MODULUS_LSB:
-		return "DFU encryption VM application public key LSB";
-	case CSR_PSKEY_DFUENC_VMAPP_PK_M_DASH:
-		return "DFU encryption VM application M dash";
-	case CSR_PSKEY_DFUENC_VMAPP_PK_R2N_MSB:
-		return "DFU encryption VM application public key R2N MSB";
-	case CSR_PSKEY_DFUENC_VMAPP_PK_R2N_LSB:
-		return "DFU encryption VM application public key R2N LSB";
-	case CSR_PSKEY_BCSP_LM_PS_BLOCK:
-		return "BCSP link establishment block";
-	case CSR_PSKEY_HOSTIO_FC_PS_BLOCK:
-		return "HCI flow control block";
-	case CSR_PSKEY_HOSTIO_PROTOCOL_INFO0:
-		return "Host transport channel 0 settings (BCSP ACK)";
-	case CSR_PSKEY_HOSTIO_PROTOCOL_INFO1:
-		return "Host transport channel 1 settings (BCSP-LE)";
-	case CSR_PSKEY_HOSTIO_PROTOCOL_INFO2:
-		return "Host transport channel 2 settings (BCCMD)";
-	case CSR_PSKEY_HOSTIO_PROTOCOL_INFO3:
-		return "Host transport channel 3 settings (HQ)";
-	case CSR_PSKEY_HOSTIO_PROTOCOL_INFO4:
-		return "Host transport channel 4 settings (DM)";
-	case CSR_PSKEY_HOSTIO_PROTOCOL_INFO5:
-		return "Host transport channel 5 settings (HCI CMD/EVT)";
-	case CSR_PSKEY_HOSTIO_PROTOCOL_INFO6:
-		return "Host transport channel 6 settings (HCI ACL)";
-	case CSR_PSKEY_HOSTIO_PROTOCOL_INFO7:
-		return "Host transport channel 7 settings (HCI SCO)";
-	case CSR_PSKEY_HOSTIO_PROTOCOL_INFO8:
-		return "Host transport channel 8 settings (L2CAP)";
-	case CSR_PSKEY_HOSTIO_PROTOCOL_INFO9:
-		return "Host transport channel 9 settings (RFCOMM)";
-	case CSR_PSKEY_HOSTIO_PROTOCOL_INFO10:
-		return "Host transport channel 10 settings (SDP)";
-	case CSR_PSKEY_HOSTIO_PROTOCOL_INFO11:
-		return "Host transport channel 11 settings (TEST)";
-	case CSR_PSKEY_HOSTIO_PROTOCOL_INFO12:
-		return "Host transport channel 12 settings (DFU)";
-	case CSR_PSKEY_HOSTIO_PROTOCOL_INFO13:
-		return "Host transport channel 13 settings (VM)";
-	case CSR_PSKEY_HOSTIO_PROTOCOL_INFO14:
-		return "Host transport channel 14 settings";
-	case CSR_PSKEY_HOSTIO_PROTOCOL_INFO15:
-		return "Host transport channel 15 settings";
-	case CSR_PSKEY_HOSTIO_UART_RESET_TIMEOUT:
-		return "UART reset counter timeout";
-	case CSR_PSKEY_HOSTIO_USE_HCI_EXTN:
-		return "Use hci_extn to route non-hci channels";
-	case CSR_PSKEY_HOSTIO_USE_HCI_EXTN_CCFC:
-		return "Use command-complete flow control for hci_extn";
-	case CSR_PSKEY_HOSTIO_HCI_EXTN_PAYLOAD_SIZE:
-		return "Maximum hci_extn payload size";
-	case CSR_PSKEY_BCSP_LM_CNF_CNT_LIMIT:
-		return "BCSP link establishment conf message count";
-	case CSR_PSKEY_HOSTIO_MAP_SCO_PCM:
-		return "Map SCO over PCM";
-	case CSR_PSKEY_HOSTIO_AWKWARD_PCM_SYNC:
-		return "PCM interface synchronisation is difficult";
-	case CSR_PSKEY_HOSTIO_BREAK_POLL_PERIOD:
-		return "Break poll period (microseconds)";
-	case CSR_PSKEY_HOSTIO_MIN_UART_HCI_SCO_SIZE:
-		return "Minimum SCO packet size sent to host over UART HCI";
-	case CSR_PSKEY_HOSTIO_MAP_SCO_CODEC:
-		return "Map SCO over the built-in codec";
-	case CSR_PSKEY_PCM_CVSD_TX_HI_FREQ_BOOST:
-		return "High frequency boost for PCM when transmitting CVSD";
-	case CSR_PSKEY_PCM_CVSD_RX_HI_FREQ_BOOST:
-		return "High frequency boost for PCM when receiving CVSD";
-	case CSR_PSKEY_PCM_CONFIG32:
-		return "PCM interface settings bitfields";
-	case CSR_PSKEY_USE_OLD_BCSP_LE:
-		return "Use the old version of BCSP link establishment";
-	case CSR_PSKEY_PCM_CVSD_USE_NEW_FILTER:
-		return "CVSD uses the new filter if available";
-	case CSR_PSKEY_PCM_FORMAT:
-		return "PCM data format";
-	case CSR_PSKEY_CODEC_OUT_GAIN:
-		return "Audio output gain when using built-in codec";
-	case CSR_PSKEY_CODEC_IN_GAIN:
-		return "Audio input gain when using built-in codec";
-	case CSR_PSKEY_CODEC_PIO:
-		return "PIO to enable when built-in codec is enabled";
-	case CSR_PSKEY_PCM_LOW_JITTER_CONFIG:
-		return "PCM interface settings for low jitter master mode";
-	case CSR_PSKEY_HOSTIO_SCO_PCM_THRESHOLDS:
-		return "Thresholds for SCO PCM buffers";
-	case CSR_PSKEY_HOSTIO_SCO_HCI_THRESHOLDS:
-		return "Thresholds for SCO HCI buffers";
-	case CSR_PSKEY_HOSTIO_MAP_SCO_PCM_SLOT:
-		return "Route SCO data to specified slot in pcm frame";
-	case CSR_PSKEY_UART_BAUDRATE:
-		return "UART Baud rate";
-	case CSR_PSKEY_UART_CONFIG_BCSP:
-		return "UART configuration when using BCSP";
-	case CSR_PSKEY_UART_CONFIG_H4:
-		return "UART configuration when using H4";
-	case CSR_PSKEY_UART_CONFIG_H5:
-		return "UART configuration when using H5";
-	case CSR_PSKEY_UART_CONFIG_USR:
-		return "UART configuration when under VM control";
-	case CSR_PSKEY_UART_TX_CRCS:
-		return "Use CRCs for BCSP or H5";
-	case CSR_PSKEY_UART_ACK_TIMEOUT:
-		return "Acknowledgement timeout for BCSP and H5";
-	case CSR_PSKEY_UART_TX_MAX_ATTEMPTS:
-		return "Max times to send reliable BCSP or H5 message";
-	case CSR_PSKEY_UART_TX_WINDOW_SIZE:
-		return "Transmit window size for BCSP and H5";
-	case CSR_PSKEY_UART_HOST_WAKE:
-		return "UART host wakeup";
-	case CSR_PSKEY_HOSTIO_THROTTLE_TIMEOUT:
-		return "Host interface performance control.";
-	case CSR_PSKEY_PCM_ALWAYS_ENABLE:
-		return "PCM port is always enable when chip is running";
-	case CSR_PSKEY_UART_HOST_WAKE_SIGNAL:
-		return "Signal to use for uart host wakeup protocol";
-	case CSR_PSKEY_UART_CONFIG_H4DS:
-		return "UART configuration when using H4DS";
-	case CSR_PSKEY_H4DS_WAKE_DURATION:
-		return "How long to spend waking the host when using H4DS";
-	case CSR_PSKEY_H4DS_MAXWU:
-		return "Maximum number of H4DS Wake-Up messages to send";
-	case CSR_PSKEY_H4DS_LE_TIMER_PERIOD:
-		return "H4DS Link Establishment Tsync and Tconf period";
-	case CSR_PSKEY_H4DS_TWU_TIMER_PERIOD:
-		return "H4DS Twu timer period";
-	case CSR_PSKEY_H4DS_UART_IDLE_TIMER_PERIOD:
-		return "H4DS Tuart_idle timer period";
-	case CSR_PSKEY_ANA_FTRIM:
-		return "Crystal frequency trim";
-	case CSR_PSKEY_WD_TIMEOUT:
-		return "Watchdog timeout (microseconds)";
-	case CSR_PSKEY_WD_PERIOD:
-		return "Watchdog period (microseconds)";
-	case CSR_PSKEY_HOST_INTERFACE:
-		return "Host interface";
-	case CSR_PSKEY_HQ_HOST_TIMEOUT:
-		return "HQ host command timeout";
-	case CSR_PSKEY_HQ_ACTIVE:
-		return "Enable host query task?";
-	case CSR_PSKEY_BCCMD_SECURITY_ACTIVE:
-		return "Enable configuration security";
-	case CSR_PSKEY_ANA_FREQ:
-		return "Crystal frequency";
-	case CSR_PSKEY_PIO_PROTECT_MASK:
-		return "Access to PIO pins";
-	case CSR_PSKEY_PMALLOC_SIZES:
-		return "pmalloc sizes array";
-	case CSR_PSKEY_UART_BAUD_RATE:
-		return "UART Baud rate (pre 18)";
-	case CSR_PSKEY_UART_CONFIG:
-		return "UART configuration bitfield";
-	case CSR_PSKEY_STUB:
-		return "Stub";
-	case CSR_PSKEY_TXRX_PIO_CONTROL:
-		return "TX and RX PIO control";
-	case CSR_PSKEY_ANA_RX_LEVEL:
-		return "ANA_RX_LVL register initial value";
-	case CSR_PSKEY_ANA_RX_FTRIM:
-		return "ANA_RX_FTRIM register initial value";
-	case CSR_PSKEY_PSBC_DATA_VERSION:
-		return "Persistent store version";
-	case CSR_PSKEY_PCM0_ATTENUATION:
-		return "Volume control on PCM channel 0";
-	case CSR_PSKEY_LO_LVL_MAX:
-		return "Maximum value of LO level control register";
-	case CSR_PSKEY_LO_ADC_AMPL_MIN:
-		return "Minimum value of the LO amplitude measured on the ADC";
-	case CSR_PSKEY_LO_ADC_AMPL_MAX:
-		return "Maximum value of the LO amplitude measured on the ADC";
-	case CSR_PSKEY_IQ_TRIM_CHANNEL:
-		return "IQ calibration channel";
-	case CSR_PSKEY_IQ_TRIM_GAIN:
-		return "IQ calibration gain";
-	case CSR_PSKEY_IQ_TRIM_ENABLE:
-		return "IQ calibration enable";
-	case CSR_PSKEY_TX_OFFSET_HALF_MHZ:
-		return "Transmit offset";
-	case CSR_PSKEY_GBL_MISC_ENABLES:
-		return "Global miscellaneous hardware enables";
-	case CSR_PSKEY_UART_SLEEP_TIMEOUT:
-		return "Time in ms to deep sleep if nothing received";
-	case CSR_PSKEY_DEEP_SLEEP_STATE:
-		return "Deep sleep state usage";
-	case CSR_PSKEY_IQ_ENABLE_PHASE_TRIM:
-		return "IQ phase enable";
-	case CSR_PSKEY_HCI_HANDLE_FREEZE_PERIOD:
-		return "Time for which HCI handle is frozen after link removal";
-	case CSR_PSKEY_MAX_FROZEN_HCI_HANDLES:
-		return "Maximum number of frozen HCI handles";
-	case CSR_PSKEY_PAGETABLE_DESTRUCTION_DELAY:
-		return "Delay from freezing buf handle to deleting page table";
-	case CSR_PSKEY_IQ_TRIM_PIO_SETTINGS:
-		return "IQ PIO settings";
-	case CSR_PSKEY_USE_EXTERNAL_CLOCK:
-		return "Device uses an external clock";
-	case CSR_PSKEY_DEEP_SLEEP_WAKE_CTS:
-		return "Exit deep sleep on CTS line activity";
-	case CSR_PSKEY_FC_HC2H_FLUSH_DELAY:
-		return "Delay from disconnect to flushing HC->H FC tokens";
-	case CSR_PSKEY_RX_HIGHSIDE:
-		return "Disable the HIGHSIDE bit in ANA_CONFIG";
-	case CSR_PSKEY_TX_PRE_LVL:
-		return "TX pre-amplifier level";
-	case CSR_PSKEY_RX_SINGLE_ENDED:
-		return "RX single ended";
-	case CSR_PSKEY_TX_FILTER_CONFIG:
-		return "TX filter configuration";
-	case CSR_PSKEY_CLOCK_REQUEST_ENABLE:
-		return "External clock request enable";
-	case CSR_PSKEY_RX_MIN_ATTEN:
-		return "Minimum attenuation allowed for receiver";
-	case CSR_PSKEY_XTAL_TARGET_AMPLITUDE:
-		return "Crystal target amplitude";
-	case CSR_PSKEY_PCM_MIN_CPU_CLOCK:
-		return "Minimum CPU clock speed with PCM port running";
-	case CSR_PSKEY_HOST_INTERFACE_PIO_USB:
-		return "USB host interface selection PIO line";
-	case CSR_PSKEY_CPU_IDLE_MODE:
-		return "CPU idle mode when radio is active";
-	case CSR_PSKEY_DEEP_SLEEP_CLEAR_RTS:
-		return "Deep sleep clears the UART RTS line";
-	case CSR_PSKEY_RF_RESONANCE_TRIM:
-		return "Frequency trim for IQ and LNA resonant circuits";
-	case CSR_PSKEY_DEEP_SLEEP_PIO_WAKE:
-		return "PIO line to wake the chip from deep sleep";
-	case CSR_PSKEY_DRAIN_BORE_TIMERS:
-		return "Energy consumption measurement settings";
-	case CSR_PSKEY_DRAIN_TX_POWER_BASE:
-		return "Energy consumption measurement settings";
-	case CSR_PSKEY_MODULE_ID:
-		return "Module serial number";
-	case CSR_PSKEY_MODULE_DESIGN:
-		return "Module design ID";
-	case CSR_PSKEY_MODULE_SECURITY_CODE:
-		return "Module security code";
-	case CSR_PSKEY_VM_DISABLE:
-		return "VM disable";
-	case CSR_PSKEY_MOD_MANUF0:
-		return "Module manufactuer data 0";
-	case CSR_PSKEY_MOD_MANUF1:
-		return "Module manufactuer data 1";
-	case CSR_PSKEY_MOD_MANUF2:
-		return "Module manufactuer data 2";
-	case CSR_PSKEY_MOD_MANUF3:
-		return "Module manufactuer data 3";
-	case CSR_PSKEY_MOD_MANUF4:
-		return "Module manufactuer data 4";
-	case CSR_PSKEY_MOD_MANUF5:
-		return "Module manufactuer data 5";
-	case CSR_PSKEY_MOD_MANUF6:
-		return "Module manufactuer data 6";
-	case CSR_PSKEY_MOD_MANUF7:
-		return "Module manufactuer data 7";
-	case CSR_PSKEY_MOD_MANUF8:
-		return "Module manufactuer data 8";
-	case CSR_PSKEY_MOD_MANUF9:
-		return "Module manufactuer data 9";
-	case CSR_PSKEY_DUT_VM_DISABLE:
-		return "VM disable when entering radiotest modes";
-	case CSR_PSKEY_USR0:
-		return "User configuration data 0";
-	case CSR_PSKEY_USR1:
-		return "User configuration data 1";
-	case CSR_PSKEY_USR2:
-		return "User configuration data 2";
-	case CSR_PSKEY_USR3:
-		return "User configuration data 3";
-	case CSR_PSKEY_USR4:
-		return "User configuration data 4";
-	case CSR_PSKEY_USR5:
-		return "User configuration data 5";
-	case CSR_PSKEY_USR6:
-		return "User configuration data 6";
-	case CSR_PSKEY_USR7:
-		return "User configuration data 7";
-	case CSR_PSKEY_USR8:
-		return "User configuration data 8";
-	case CSR_PSKEY_USR9:
-		return "User configuration data 9";
-	case CSR_PSKEY_USR10:
-		return "User configuration data 10";
-	case CSR_PSKEY_USR11:
-		return "User configuration data 11";
-	case CSR_PSKEY_USR12:
-		return "User configuration data 12";
-	case CSR_PSKEY_USR13:
-		return "User configuration data 13";
-	case CSR_PSKEY_USR14:
-		return "User configuration data 14";
-	case CSR_PSKEY_USR15:
-		return "User configuration data 15";
-	case CSR_PSKEY_USR16:
-		return "User configuration data 16";
-	case CSR_PSKEY_USR17:
-		return "User configuration data 17";
-	case CSR_PSKEY_USR18:
-		return "User configuration data 18";
-	case CSR_PSKEY_USR19:
-		return "User configuration data 19";
-	case CSR_PSKEY_USR20:
-		return "User configuration data 20";
-	case CSR_PSKEY_USR21:
-		return "User configuration data 21";
-	case CSR_PSKEY_USR22:
-		return "User configuration data 22";
-	case CSR_PSKEY_USR23:
-		return "User configuration data 23";
-	case CSR_PSKEY_USR24:
-		return "User configuration data 24";
-	case CSR_PSKEY_USR25:
-		return "User configuration data 25";
-	case CSR_PSKEY_USR26:
-		return "User configuration data 26";
-	case CSR_PSKEY_USR27:
-		return "User configuration data 27";
-	case CSR_PSKEY_USR28:
-		return "User configuration data 28";
-	case CSR_PSKEY_USR29:
-		return "User configuration data 29";
-	case CSR_PSKEY_USR30:
-		return "User configuration data 30";
-	case CSR_PSKEY_USR31:
-		return "User configuration data 31";
-	case CSR_PSKEY_USR32:
-		return "User configuration data 32";
-	case CSR_PSKEY_USR33:
-		return "User configuration data 33";
-	case CSR_PSKEY_USR34:
-		return "User configuration data 34";
-	case CSR_PSKEY_USR35:
-		return "User configuration data 35";
-	case CSR_PSKEY_USR36:
-		return "User configuration data 36";
-	case CSR_PSKEY_USR37:
-		return "User configuration data 37";
-	case CSR_PSKEY_USR38:
-		return "User configuration data 38";
-	case CSR_PSKEY_USR39:
-		return "User configuration data 39";
-	case CSR_PSKEY_USR40:
-		return "User configuration data 40";
-	case CSR_PSKEY_USR41:
-		return "User configuration data 41";
-	case CSR_PSKEY_USR42:
-		return "User configuration data 42";
-	case CSR_PSKEY_USR43:
-		return "User configuration data 43";
-	case CSR_PSKEY_USR44:
-		return "User configuration data 44";
-	case CSR_PSKEY_USR45:
-		return "User configuration data 45";
-	case CSR_PSKEY_USR46:
-		return "User configuration data 46";
-	case CSR_PSKEY_USR47:
-		return "User configuration data 47";
-	case CSR_PSKEY_USR48:
-		return "User configuration data 48";
-	case CSR_PSKEY_USR49:
-		return "User configuration data 49";
-	case CSR_PSKEY_USB_VERSION:
-		return "USB specification version number";
-	case CSR_PSKEY_USB_DEVICE_CLASS_CODES:
-		return "USB device class codes";
-	case CSR_PSKEY_USB_VENDOR_ID:
-		return "USB vendor identifier";
-	case CSR_PSKEY_USB_PRODUCT_ID:
-		return "USB product identifier";
-	case CSR_PSKEY_USB_MANUF_STRING:
-		return "USB manufacturer string";
-	case CSR_PSKEY_USB_PRODUCT_STRING:
-		return "USB product string";
-	case CSR_PSKEY_USB_SERIAL_NUMBER_STRING:
-		return "USB serial number string";
-	case CSR_PSKEY_USB_CONFIG_STRING:
-		return "USB configuration string";
-	case CSR_PSKEY_USB_ATTRIBUTES:
-		return "USB attributes bitmap";
-	case CSR_PSKEY_USB_MAX_POWER:
-		return "USB device maximum power consumption";
-	case CSR_PSKEY_USB_BT_IF_CLASS_CODES:
-		return "USB Bluetooth interface class codes";
-	case CSR_PSKEY_USB_LANGID:
-		return "USB language strings supported";
-	case CSR_PSKEY_USB_DFU_CLASS_CODES:
-		return "USB DFU class codes block";
-	case CSR_PSKEY_USB_DFU_PRODUCT_ID:
-		return "USB DFU product ID";
-	case CSR_PSKEY_USB_PIO_DETACH:
-		return "USB detach/attach PIO line";
-	case CSR_PSKEY_USB_PIO_WAKEUP:
-		return "USB wakeup PIO line";
-	case CSR_PSKEY_USB_PIO_PULLUP:
-		return "USB D+ pullup PIO line";
-	case CSR_PSKEY_USB_PIO_VBUS:
-		return "USB VBus detection PIO Line";
-	case CSR_PSKEY_USB_PIO_WAKE_TIMEOUT:
-		return "Timeout for assertion of USB PIO wake signal";
-	case CSR_PSKEY_USB_PIO_RESUME:
-		return "PIO signal used in place of bus resume";
-	case CSR_PSKEY_USB_BT_SCO_IF_CLASS_CODES:
-		return "USB Bluetooth SCO interface class codes";
-	case CSR_PSKEY_USB_SUSPEND_PIO_LEVEL:
-		return "USB PIO levels to set when suspended";
-	case CSR_PSKEY_USB_SUSPEND_PIO_DIR:
-		return "USB PIO I/O directions to set when suspended";
-	case CSR_PSKEY_USB_SUSPEND_PIO_MASK:
-		return "USB PIO lines to be set forcibly in suspend";
-	case CSR_PSKEY_USB_ENDPOINT_0_MAX_PACKET_SIZE:
-		return "The maxmimum packet size for USB endpoint 0";
-	case CSR_PSKEY_USB_CONFIG:
-		return "USB config params for new chips (>bc2)";
-	case CSR_PSKEY_RADIOTEST_ATTEN_INIT:
-		return "Radio test initial attenuator";
-	case CSR_PSKEY_RADIOTEST_FIRST_TRIM_TIME:
-		return "IQ first calibration period in test";
-	case CSR_PSKEY_RADIOTEST_SUBSEQUENT_TRIM_TIME:
-		return "IQ subsequent calibration period in test";
-	case CSR_PSKEY_RADIOTEST_LO_LVL_TRIM_ENABLE:
-		return "LO_LVL calibration enable";
-	case CSR_PSKEY_RADIOTEST_DISABLE_MODULATION:
-		return "Disable modulation during radiotest transmissions";
-	case CSR_PSKEY_RFCOMM_FCON_THRESHOLD:
-		return "RFCOMM aggregate flow control on threshold";
-	case CSR_PSKEY_RFCOMM_FCOFF_THRESHOLD:
-		return "RFCOMM aggregate flow control off threshold";
-	case CSR_PSKEY_IPV6_STATIC_ADDR:
-		return "Static IPv6 address";
-	case CSR_PSKEY_IPV4_STATIC_ADDR:
-		return "Static IPv4 address";
-	case CSR_PSKEY_IPV6_STATIC_PREFIX_LEN:
-		return "Static IPv6 prefix length";
-	case CSR_PSKEY_IPV6_STATIC_ROUTER_ADDR:
-		return "Static IPv6 router address";
-	case CSR_PSKEY_IPV4_STATIC_SUBNET_MASK:
-		return "Static IPv4 subnet mask";
-	case CSR_PSKEY_IPV4_STATIC_ROUTER_ADDR:
-		return "Static IPv4 router address";
-	case CSR_PSKEY_MDNS_NAME:
-		return "Multicast DNS name";
-	case CSR_PSKEY_FIXED_PIN:
-		return "Fixed PIN";
-	case CSR_PSKEY_MDNS_PORT:
-		return "Multicast DNS port";
-	case CSR_PSKEY_MDNS_TTL:
-		return "Multicast DNS TTL";
-	case CSR_PSKEY_MDNS_IPV4_ADDR:
-		return "Multicast DNS IPv4 address";
-	case CSR_PSKEY_ARP_CACHE_TIMEOUT:
-		return "ARP cache timeout";
-	case CSR_PSKEY_HFP_POWER_TABLE:
-		return "HFP power table";
-	case CSR_PSKEY_DRAIN_BORE_TIMER_COUNTERS:
-		return "Energy consumption estimation timer counters";
-	case CSR_PSKEY_DRAIN_BORE_COUNTERS:
-		return "Energy consumption estimation counters";
-	case CSR_PSKEY_LOOP_FILTER_TRIM:
-		return "Trim value to optimise loop filter";
-	case CSR_PSKEY_DRAIN_BORE_CURRENT_PEAK:
-		return "Energy consumption estimation current peak";
-	case CSR_PSKEY_VM_E2_CACHE_LIMIT:
-		return "Maximum RAM for caching EEPROM VM application";
-	case CSR_PSKEY_FORCE_16MHZ_REF_PIO:
-		return "PIO line to force 16 MHz reference to be assumed";
-	case CSR_PSKEY_CDMA_LO_REF_LIMITS:
-		return "Local oscillator frequency reference limits for CDMA";
-	case CSR_PSKEY_CDMA_LO_ERROR_LIMITS:
-		return "Local oscillator frequency error limits for CDMA";
-	case CSR_PSKEY_CLOCK_STARTUP_DELAY:
-		return "Clock startup delay in milliseconds";
-	case CSR_PSKEY_DEEP_SLEEP_CORRECTION_FACTOR:
-		return "Deep sleep clock correction factor";
-	case CSR_PSKEY_TEMPERATURE_CALIBRATION:
-		return "Temperature in deg C for a given internal setting";
-	case CSR_PSKEY_TEMPERATURE_VS_DELTA_INTERNAL_PA:
-		return "Temperature for given internal PA adjustment";
-	case CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_PRE_LVL:
-		return "Temperature for a given TX_PRE_LVL adjustment";
-	case CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_BB:
-		return "Temperature for a given TX_BB adjustment";
-	case CSR_PSKEY_TEMPERATURE_VS_DELTA_ANA_FTRIM:
-		return "Temperature for given crystal trim adjustment";
-	case CSR_PSKEY_TEST_DELTA_OFFSET:
-		return "Frequency offset applied to synthesiser in test mode";
-	case CSR_PSKEY_RX_DYNAMIC_LVL_OFFSET:
-		return "Receiver dynamic level offset depending on channel";
-	case CSR_PSKEY_TEST_FORCE_OFFSET:
-		return "Force use of exact value in PSKEY_TEST_DELTA_OFFSET";
-	case CSR_PSKEY_RF_TRAP_BAD_DIVISION_RATIOS:
-		return "Trap bad division ratios in radio frequency tables";
-	case CSR_PSKEY_RADIOTEST_CDMA_LO_REF_LIMITS:
-		return "LO frequency reference limits for CDMA in radiotest";
-	case CSR_PSKEY_INITIAL_BOOTMODE:
-		return "Initial device bootmode";
-	case CSR_PSKEY_ONCHIP_HCI_CLIENT:
-		return "HCI traffic routed internally";
-	case CSR_PSKEY_RX_ATTEN_BACKOFF:
-		return "Receiver attenuation back-off";
-	case CSR_PSKEY_RX_ATTEN_UPDATE_RATE:
-		return "Receiver attenuation update rate";
-	case CSR_PSKEY_SYNTH_TXRX_THRESHOLDS:
-		return "Local oscillator tuning voltage limits for tx and rx";
-	case CSR_PSKEY_MIN_WAIT_STATES:
-		return "Flash wait state indicator";
-	case CSR_PSKEY_RSSI_CORRECTION:
-		return "RSSI correction factor.";
-	case CSR_PSKEY_SCHED_THROTTLE_TIMEOUT:
-		return "Scheduler performance control.";
-	case CSR_PSKEY_DEEP_SLEEP_USE_EXTERNAL_CLOCK:
-		return "Deep sleep uses external 32 kHz clock source";
-	case CSR_PSKEY_TRIM_RADIO_FILTERS:
-		return "Trim rx and tx radio filters if true.";
-	case CSR_PSKEY_TRANSMIT_OFFSET:
-		return "Transmit offset in units of 62.5 kHz";
-	case CSR_PSKEY_USB_VM_CONTROL:
-		return "VM application will supply USB descriptors";
-	case CSR_PSKEY_MR_ANA_RX_FTRIM:
-		return "Medium rate value for the ANA_RX_FTRIM register";
-	case CSR_PSKEY_I2C_CONFIG:
-		return "I2C configuration";
-	case CSR_PSKEY_IQ_LVL_RX:
-		return "IQ demand level for reception";
-	case CSR_PSKEY_MR_TX_FILTER_CONFIG:
-		return "TX filter configuration used for enhanced data rate";
-	case CSR_PSKEY_MR_TX_CONFIG2:
-		return "TX filter configuration used for enhanced data rate";
-	case CSR_PSKEY_USB_DONT_RESET_BOOTMODE_ON_HOST_RESET:
-		return "Don't reset bootmode if USB host resets";
-	case CSR_PSKEY_LC_USE_THROTTLING:
-		return "Adjust packet selection on packet error rate";
-	case CSR_PSKEY_CHARGER_TRIM:
-		return "Trim value for the current charger";
-	case CSR_PSKEY_CLOCK_REQUEST_FEATURES:
-		return "Clock request is tristated if enabled";
-	case CSR_PSKEY_TRANSMIT_OFFSET_CLASS1:
-		return "Transmit offset / 62.5 kHz for class 1 radios";
-	case CSR_PSKEY_TX_AVOID_PA_CLASS1_PIO:
-		return "PIO line asserted in class1 operation to avoid PA";
-	case CSR_PSKEY_MR_PIO_CONFIG:
-		return "PIO line asserted in class1 operation to avoid PA";
-	case CSR_PSKEY_UART_CONFIG2:
-		return "The UART Sampling point";
-	case CSR_PSKEY_CLASS1_IQ_LVL:
-		return "IQ demand level for class 1 power level";
-	case CSR_PSKEY_CLASS1_TX_CONFIG2:
-		return "TX filter configuration used for class 1 tx power";
-	case CSR_PSKEY_TEMPERATURE_VS_DELTA_INTERNAL_PA_CLASS1:
-		return "Temperature for given internal PA adjustment";
-	case CSR_PSKEY_TEMPERATURE_VS_DELTA_EXTERNAL_PA_CLASS1:
-		return "Temperature for given internal PA adjustment";
-	case CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_PRE_LVL_MR:
-		return "Temperature adjustment for TX_PRE_LVL in EDR";
-	case CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_BB_MR_HEADER:
-		return "Temperature for a given TX_BB in EDR header";
-	case CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_BB_MR_PAYLOAD:
-		return "Temperature for a given TX_BB in EDR payload";
-	case CSR_PSKEY_RX_MR_EQ_TAPS:
-		return "Adjust receiver configuration for EDR";
-	case CSR_PSKEY_TX_PRE_LVL_CLASS1:
-		return "TX pre-amplifier level in class 1 operation";
-	case CSR_PSKEY_ANALOGUE_ATTENUATOR:
-		return "TX analogue attenuator setting";
-	case CSR_PSKEY_MR_RX_FILTER_TRIM:
-		return "Trim for receiver used in EDR.";
-	case CSR_PSKEY_MR_RX_FILTER_RESPONSE:
-		return "Filter response for receiver used in EDR.";
-	case CSR_PSKEY_PIO_WAKEUP_STATE:
-		return "PIO deep sleep wake up state ";
-	case CSR_PSKEY_MR_TX_IF_ATTEN_OFF_TEMP:
-		return "TX IF atten off temperature when using EDR.";
-	case CSR_PSKEY_LO_DIV_LATCH_BYPASS:
-		return "Bypass latch for LO dividers";
-	case CSR_PSKEY_LO_VCO_STANDBY:
-		return "Use standby mode for the LO VCO";
-	case CSR_PSKEY_SLOW_CLOCK_FILTER_SHIFT:
-		return "Slow clock sampling filter constant";
-	case CSR_PSKEY_SLOW_CLOCK_FILTER_DIVIDER:
-		return "Slow clock filter fractional threshold";
-	case CSR_PSKEY_USB_ATTRIBUTES_POWER:
-		return "USB self powered";
-	case CSR_PSKEY_USB_ATTRIBUTES_WAKEUP:
-		return "USB responds to wake-up";
-	case CSR_PSKEY_DFU_ATTRIBUTES_MANIFESTATION_TOLERANT:
-		return "DFU manifestation tolerant";
-	case CSR_PSKEY_DFU_ATTRIBUTES_CAN_UPLOAD:
-		return "DFU can upload";
-	case CSR_PSKEY_DFU_ATTRIBUTES_CAN_DOWNLOAD:
-		return "DFU can download";
-	case CSR_PSKEY_UART_CONFIG_STOP_BITS:
-		return "UART: stop bits";
-	case CSR_PSKEY_UART_CONFIG_PARITY_BIT:
-		return "UART: parity bit";
-	case CSR_PSKEY_UART_CONFIG_FLOW_CTRL_EN:
-		return "UART: hardware flow control";
-	case CSR_PSKEY_UART_CONFIG_RTS_AUTO_EN:
-		return "UART: RTS auto-enabled";
-	case CSR_PSKEY_UART_CONFIG_RTS:
-		return "UART: RTS asserted";
-	case CSR_PSKEY_UART_CONFIG_TX_ZERO_EN:
-		return "UART: TX zero enable";
-	case CSR_PSKEY_UART_CONFIG_NON_BCSP_EN:
-		return "UART: enable BCSP-specific hardware";
-	case CSR_PSKEY_UART_CONFIG_RX_RATE_DELAY:
-		return "UART: RX rate delay";
-	case CSR_PSKEY_UART_SEQ_TIMEOUT:
-		return "UART: BCSP ack timeout";
-	case CSR_PSKEY_UART_SEQ_RETRIES:
-		return "UART: retry limit in sequencing layer";
-	case CSR_PSKEY_UART_SEQ_WINSIZE:
-		return "UART: BCSP transmit window size";
-	case CSR_PSKEY_UART_USE_CRC_ON_TX:
-		return "UART: use BCSP CRCs";
-	case CSR_PSKEY_UART_HOST_INITIAL_STATE:
-		return "UART: initial host state";
-	case CSR_PSKEY_UART_HOST_ATTENTION_SPAN:
-		return "UART: host attention span";
-	case CSR_PSKEY_UART_HOST_WAKEUP_TIME:
-		return "UART: host wakeup time";
-	case CSR_PSKEY_UART_HOST_WAKEUP_WAIT:
-		return "UART: host wakeup wait";
-	case CSR_PSKEY_BCSP_LM_MODE:
-		return "BCSP link establishment mode";
-	case CSR_PSKEY_BCSP_LM_SYNC_RETRIES:
-		return "BCSP link establishment sync retries";
-	case CSR_PSKEY_BCSP_LM_TSHY:
-		return "BCSP link establishment Tshy";
-	case CSR_PSKEY_UART_DFU_CONFIG_STOP_BITS:
-		return "DFU mode UART: stop bits";
-	case CSR_PSKEY_UART_DFU_CONFIG_PARITY_BIT:
-		return "DFU mode UART: parity bit";
-	case CSR_PSKEY_UART_DFU_CONFIG_FLOW_CTRL_EN:
-		return "DFU mode UART: hardware flow control";
-	case CSR_PSKEY_UART_DFU_CONFIG_RTS_AUTO_EN:
-		return "DFU mode UART: RTS auto-enabled";
-	case CSR_PSKEY_UART_DFU_CONFIG_RTS:
-		return "DFU mode UART: RTS asserted";
-	case CSR_PSKEY_UART_DFU_CONFIG_TX_ZERO_EN:
-		return "DFU mode UART: TX zero enable";
-	case CSR_PSKEY_UART_DFU_CONFIG_NON_BCSP_EN:
-		return "DFU mode UART: enable BCSP-specific hardware";
-	case CSR_PSKEY_UART_DFU_CONFIG_RX_RATE_DELAY:
-		return "DFU mode UART: RX rate delay";
-	case CSR_PSKEY_AMUX_AIO0:
-		return "Multiplexer for AIO 0";
-	case CSR_PSKEY_AMUX_AIO1:
-		return "Multiplexer for AIO 1";
-	case CSR_PSKEY_AMUX_AIO2:
-		return "Multiplexer for AIO 2";
-	case CSR_PSKEY_AMUX_AIO3:
-		return "Multiplexer for AIO 3";
-	case CSR_PSKEY_LOCAL_NAME_SIMPLIFIED:
-		return "Local Name (simplified)";
-	case CSR_PSKEY_EXTENDED_STUB:
-		return "Extended stub";
-	default:
-		return "Unknown";
-	}
-}
-
-char *csr_pskeytoval(uint16_t pskey)
-{
-	switch (pskey) {
-	case CSR_PSKEY_BDADDR:
-		return "BDADDR";
-	case CSR_PSKEY_COUNTRYCODE:
-		return "COUNTRYCODE";
-	case CSR_PSKEY_CLASSOFDEVICE:
-		return "CLASSOFDEVICE";
-	case CSR_PSKEY_DEVICE_DRIFT:
-		return "DEVICE_DRIFT";
-	case CSR_PSKEY_DEVICE_JITTER:
-		return "DEVICE_JITTER";
-	case CSR_PSKEY_MAX_ACLS:
-		return "MAX_ACLS";
-	case CSR_PSKEY_MAX_SCOS:
-		return "MAX_SCOS";
-	case CSR_PSKEY_MAX_REMOTE_MASTERS:
-		return "MAX_REMOTE_MASTERS";
-	case CSR_PSKEY_ENABLE_MASTERY_WITH_SLAVERY:
-		return "ENABLE_MASTERY_WITH_SLAVERY";
-	case CSR_PSKEY_H_HC_FC_MAX_ACL_PKT_LEN:
-		return "H_HC_FC_MAX_ACL_PKT_LEN";
-	case CSR_PSKEY_H_HC_FC_MAX_SCO_PKT_LEN:
-		return "H_HC_FC_MAX_SCO_PKT_LEN";
-	case CSR_PSKEY_H_HC_FC_MAX_ACL_PKTS:
-		return "H_HC_FC_MAX_ACL_PKTS";
-	case CSR_PSKEY_H_HC_FC_MAX_SCO_PKTS:
-		return "H_HC_FC_MAX_SCO_PKTS";
-	case CSR_PSKEY_LC_FC_BUFFER_LOW_WATER_MARK:
-		return "LC_FC_BUFFER_LOW_WATER_MARK";
-	case CSR_PSKEY_LC_MAX_TX_POWER:
-		return "LC_MAX_TX_POWER";
-	case CSR_PSKEY_TX_GAIN_RAMP:
-		return "TX_GAIN_RAMP";
-	case CSR_PSKEY_LC_POWER_TABLE:
-		return "LC_POWER_TABLE";
-	case CSR_PSKEY_LC_PEER_POWER_PERIOD:
-		return "LC_PEER_POWER_PERIOD";
-	case CSR_PSKEY_LC_FC_POOLS_LOW_WATER_MARK:
-		return "LC_FC_POOLS_LOW_WATER_MARK";
-	case CSR_PSKEY_LC_DEFAULT_TX_POWER:
-		return "LC_DEFAULT_TX_POWER";
-	case CSR_PSKEY_LC_RSSI_GOLDEN_RANGE:
-		return "LC_RSSI_GOLDEN_RANGE";
-	case CSR_PSKEY_LC_COMBO_DISABLE_PIO_MASK:
-		return "LC_COMBO_DISABLE_PIO_MASK";
-	case CSR_PSKEY_LC_COMBO_PRIORITY_PIO_MASK:
-		return "LC_COMBO_PRIORITY_PIO_MASK";
-	case CSR_PSKEY_LC_COMBO_DOT11_CHANNEL_PIO_BASE:
-		return "LC_COMBO_DOT11_CHANNEL_PIO_BASE";
-	case CSR_PSKEY_LC_COMBO_DOT11_BLOCK_CHANNELS:
-		return "LC_COMBO_DOT11_BLOCK_CHANNELS";
-	case CSR_PSKEY_LC_MAX_TX_POWER_NO_RSSI:
-		return "LC_MAX_TX_POWER_NO_RSSI";
-	case CSR_PSKEY_LC_CONNECTION_RX_WINDOW:
-		return "LC_CONNECTION_RX_WINDOW";
-	case CSR_PSKEY_LC_COMBO_DOT11_TX_PROTECTION_MODE:
-		return "LC_COMBO_DOT11_TX_PROTECTION_MODE";
-	case CSR_PSKEY_LC_ENHANCED_POWER_TABLE:
-		return "LC_ENHANCED_POWER_TABLE";
-	case CSR_PSKEY_LC_WIDEBAND_RSSI_CONFIG:
-		return "LC_WIDEBAND_RSSI_CONFIG";
-	case CSR_PSKEY_LC_COMBO_DOT11_PRIORITY_LEAD:
-		return "LC_COMBO_DOT11_PRIORITY_LEAD";
-	case CSR_PSKEY_BT_CLOCK_INIT:
-		return "BT_CLOCK_INIT";
-	case CSR_PSKEY_TX_MR_MOD_DELAY:
-		return "TX_MR_MOD_DELAY";
-	case CSR_PSKEY_RX_MR_SYNC_TIMING:
-		return "RX_MR_SYNC_TIMING";
-	case CSR_PSKEY_RX_MR_SYNC_CONFIG:
-		return "RX_MR_SYNC_CONFIG";
-	case CSR_PSKEY_LC_LOST_SYNC_SLOTS:
-		return "LC_LOST_SYNC_SLOTS";
-	case CSR_PSKEY_RX_MR_SAMP_CONFIG:
-		return "RX_MR_SAMP_CONFIG";
-	case CSR_PSKEY_AGC_HYST_LEVELS:
-		return "AGC_HYST_LEVELS";
-	case CSR_PSKEY_RX_LEVEL_LOW_SIGNAL:
-		return "RX_LEVEL_LOW_SIGNAL";
-	case CSR_PSKEY_AGC_IQ_LVL_VALUES:
-		return "AGC_IQ_LVL_VALUES";
-	case CSR_PSKEY_MR_FTRIM_OFFSET_12DB:
-		return "MR_FTRIM_OFFSET_12DB";
-	case CSR_PSKEY_MR_FTRIM_OFFSET_6DB:
-		return "MR_FTRIM_OFFSET_6DB";
-	case CSR_PSKEY_NO_CAL_ON_BOOT:
-		return "NO_CAL_ON_BOOT";
-	case CSR_PSKEY_RSSI_HI_TARGET:
-		return "RSSI_HI_TARGET";
-	case CSR_PSKEY_PREFERRED_MIN_ATTENUATION:
-		return "PREFERRED_MIN_ATTENUATION";
-	case CSR_PSKEY_LC_COMBO_DOT11_PRIORITY_OVERRIDE:
-		return "LC_COMBO_DOT11_PRIORITY_OVERRIDE";
-	case CSR_PSKEY_LC_MULTISLOT_HOLDOFF:
-		return "LC_MULTISLOT_HOLDOFF";
-	case CSR_PSKEY_FREE_KEY_PIGEON_HOLE:
-		return "FREE_KEY_PIGEON_HOLE";
-	case CSR_PSKEY_LINK_KEY_BD_ADDR0:
-		return "LINK_KEY_BD_ADDR0";
-	case CSR_PSKEY_LINK_KEY_BD_ADDR1:
-		return "LINK_KEY_BD_ADDR1";
-	case CSR_PSKEY_LINK_KEY_BD_ADDR2:
-		return "LINK_KEY_BD_ADDR2";
-	case CSR_PSKEY_LINK_KEY_BD_ADDR3:
-		return "LINK_KEY_BD_ADDR3";
-	case CSR_PSKEY_LINK_KEY_BD_ADDR4:
-		return "LINK_KEY_BD_ADDR4";
-	case CSR_PSKEY_LINK_KEY_BD_ADDR5:
-		return "LINK_KEY_BD_ADDR5";
-	case CSR_PSKEY_LINK_KEY_BD_ADDR6:
-		return "LINK_KEY_BD_ADDR6";
-	case CSR_PSKEY_LINK_KEY_BD_ADDR7:
-		return "LINK_KEY_BD_ADDR7";
-	case CSR_PSKEY_LINK_KEY_BD_ADDR8:
-		return "LINK_KEY_BD_ADDR8";
-	case CSR_PSKEY_LINK_KEY_BD_ADDR9:
-		return "LINK_KEY_BD_ADDR9";
-	case CSR_PSKEY_LINK_KEY_BD_ADDR10:
-		return "LINK_KEY_BD_ADDR10";
-	case CSR_PSKEY_LINK_KEY_BD_ADDR11:
-		return "LINK_KEY_BD_ADDR11";
-	case CSR_PSKEY_LINK_KEY_BD_ADDR12:
-		return "LINK_KEY_BD_ADDR12";
-	case CSR_PSKEY_LINK_KEY_BD_ADDR13:
-		return "LINK_KEY_BD_ADDR13";
-	case CSR_PSKEY_LINK_KEY_BD_ADDR14:
-		return "LINK_KEY_BD_ADDR14";
-	case CSR_PSKEY_LINK_KEY_BD_ADDR15:
-		return "LINK_KEY_BD_ADDR15";
-	case CSR_PSKEY_ENC_KEY_LMIN:
-		return "ENC_KEY_LMIN";
-	case CSR_PSKEY_ENC_KEY_LMAX:
-		return "ENC_KEY_LMAX";
-	case CSR_PSKEY_LOCAL_SUPPORTED_FEATURES:
-		return "LOCAL_SUPPORTED_FEATURES";
-	case CSR_PSKEY_LM_USE_UNIT_KEY:
-		return "LM_USE_UNIT_KEY";
-	case CSR_PSKEY_HCI_NOP_DISABLE:
-		return "HCI_NOP_DISABLE";
-	case CSR_PSKEY_LM_MAX_EVENT_FILTERS:
-		return "LM_MAX_EVENT_FILTERS";
-	case CSR_PSKEY_LM_USE_ENC_MODE_BROADCAST:
-		return "LM_USE_ENC_MODE_BROADCAST";
-	case CSR_PSKEY_LM_TEST_SEND_ACCEPTED_TWICE:
-		return "LM_TEST_SEND_ACCEPTED_TWICE";
-	case CSR_PSKEY_LM_MAX_PAGE_HOLD_TIME:
-		return "LM_MAX_PAGE_HOLD_TIME";
-	case CSR_PSKEY_AFH_ADAPTATION_RESPONSE_TIME:
-		return "AFH_ADAPTATION_RESPONSE_TIME";
-	case CSR_PSKEY_AFH_OPTIONS:
-		return "AFH_OPTIONS";
-	case CSR_PSKEY_AFH_RSSI_RUN_PERIOD:
-		return "AFH_RSSI_RUN_PERIOD";
-	case CSR_PSKEY_AFH_REENABLE_CHANNEL_TIME:
-		return "AFH_REENABLE_CHANNEL_TIME";
-	case CSR_PSKEY_NO_DROP_ON_ACR_MS_FAIL:
-		return "NO_DROP_ON_ACR_MS_FAIL";
-	case CSR_PSKEY_MAX_PRIVATE_KEYS:
-		return "MAX_PRIVATE_KEYS";
-	case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR0:
-		return "PRIVATE_LINK_KEY_BD_ADDR0";
-	case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR1:
-		return "PRIVATE_LINK_KEY_BD_ADDR1";
-	case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR2:
-		return "PRIVATE_LINK_KEY_BD_ADDR2";
-	case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR3:
-		return "PRIVATE_LINK_KEY_BD_ADDR3";
-	case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR4:
-		return "PRIVATE_LINK_KEY_BD_ADDR4";
-	case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR5:
-		return "PRIVATE_LINK_KEY_BD_ADDR5";
-	case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR6:
-		return "PRIVATE_LINK_KEY_BD_ADDR6";
-	case CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR7:
-		return "PRIVATE_LINK_KEY_BD_ADDR7";
-	case CSR_PSKEY_LOCAL_SUPPORTED_COMMANDS:
-		return "LOCAL_SUPPORTED_COMMANDS";
-	case CSR_PSKEY_LM_MAX_ABSENCE_INDEX:
-		return "LM_MAX_ABSENCE_INDEX";
-	case CSR_PSKEY_DEVICE_NAME:
-		return "DEVICE_NAME";
-	case CSR_PSKEY_AFH_RSSI_THRESHOLD:
-		return "AFH_RSSI_THRESHOLD";
-	case CSR_PSKEY_LM_CASUAL_SCAN_INTERVAL:
-		return "LM_CASUAL_SCAN_INTERVAL";
-	case CSR_PSKEY_AFH_MIN_MAP_CHANGE:
-		return "AFH_MIN_MAP_CHANGE";
-	case CSR_PSKEY_AFH_RSSI_LP_RUN_PERIOD:
-		return "AFH_RSSI_LP_RUN_PERIOD";
-	case CSR_PSKEY_HCI_LMP_LOCAL_VERSION:
-		return "HCI_LMP_LOCAL_VERSION";
-	case CSR_PSKEY_LMP_REMOTE_VERSION:
-		return "LMP_REMOTE_VERSION";
-	case CSR_PSKEY_HOLD_ERROR_MESSAGE_NUMBER:
-		return "HOLD_ERROR_MESSAGE_NUMBER";
-	case CSR_PSKEY_DFU_ATTRIBUTES:
-		return "DFU_ATTRIBUTES";
-	case CSR_PSKEY_DFU_DETACH_TO:
-		return "DFU_DETACH_TO";
-	case CSR_PSKEY_DFU_TRANSFER_SIZE:
-		return "DFU_TRANSFER_SIZE";
-	case CSR_PSKEY_DFU_ENABLE:
-		return "DFU_ENABLE";
-	case CSR_PSKEY_DFU_LIN_REG_ENABLE:
-		return "DFU_LIN_REG_ENABLE";
-	case CSR_PSKEY_DFUENC_VMAPP_PK_MODULUS_MSB:
-		return "DFUENC_VMAPP_PK_MODULUS_MSB";
-	case CSR_PSKEY_DFUENC_VMAPP_PK_MODULUS_LSB:
-		return "DFUENC_VMAPP_PK_MODULUS_LSB";
-	case CSR_PSKEY_DFUENC_VMAPP_PK_M_DASH:
-		return "DFUENC_VMAPP_PK_M_DASH";
-	case CSR_PSKEY_DFUENC_VMAPP_PK_R2N_MSB:
-		return "DFUENC_VMAPP_PK_R2N_MSB";
-	case CSR_PSKEY_DFUENC_VMAPP_PK_R2N_LSB:
-		return "DFUENC_VMAPP_PK_R2N_LSB";
-	case CSR_PSKEY_BCSP_LM_PS_BLOCK:
-		return "BCSP_LM_PS_BLOCK";
-	case CSR_PSKEY_HOSTIO_FC_PS_BLOCK:
-		return "HOSTIO_FC_PS_BLOCK";
-	case CSR_PSKEY_HOSTIO_PROTOCOL_INFO0:
-		return "HOSTIO_PROTOCOL_INFO0";
-	case CSR_PSKEY_HOSTIO_PROTOCOL_INFO1:
-		return "HOSTIO_PROTOCOL_INFO1";
-	case CSR_PSKEY_HOSTIO_PROTOCOL_INFO2:
-		return "HOSTIO_PROTOCOL_INFO2";
-	case CSR_PSKEY_HOSTIO_PROTOCOL_INFO3:
-		return "HOSTIO_PROTOCOL_INFO3";
-	case CSR_PSKEY_HOSTIO_PROTOCOL_INFO4:
-		return "HOSTIO_PROTOCOL_INFO4";
-	case CSR_PSKEY_HOSTIO_PROTOCOL_INFO5:
-		return "HOSTIO_PROTOCOL_INFO5";
-	case CSR_PSKEY_HOSTIO_PROTOCOL_INFO6:
-		return "HOSTIO_PROTOCOL_INFO6";
-	case CSR_PSKEY_HOSTIO_PROTOCOL_INFO7:
-		return "HOSTIO_PROTOCOL_INFO7";
-	case CSR_PSKEY_HOSTIO_PROTOCOL_INFO8:
-		return "HOSTIO_PROTOCOL_INFO8";
-	case CSR_PSKEY_HOSTIO_PROTOCOL_INFO9:
-		return "HOSTIO_PROTOCOL_INFO9";
-	case CSR_PSKEY_HOSTIO_PROTOCOL_INFO10:
-		return "HOSTIO_PROTOCOL_INFO10";
-	case CSR_PSKEY_HOSTIO_PROTOCOL_INFO11:
-		return "HOSTIO_PROTOCOL_INFO11";
-	case CSR_PSKEY_HOSTIO_PROTOCOL_INFO12:
-		return "HOSTIO_PROTOCOL_INFO12";
-	case CSR_PSKEY_HOSTIO_PROTOCOL_INFO13:
-		return "HOSTIO_PROTOCOL_INFO13";
-	case CSR_PSKEY_HOSTIO_PROTOCOL_INFO14:
-		return "HOSTIO_PROTOCOL_INFO14";
-	case CSR_PSKEY_HOSTIO_PROTOCOL_INFO15:
-		return "HOSTIO_PROTOCOL_INFO15";
-	case CSR_PSKEY_HOSTIO_UART_RESET_TIMEOUT:
-		return "HOSTIO_UART_RESET_TIMEOUT";
-	case CSR_PSKEY_HOSTIO_USE_HCI_EXTN:
-		return "HOSTIO_USE_HCI_EXTN";
-	case CSR_PSKEY_HOSTIO_USE_HCI_EXTN_CCFC:
-		return "HOSTIO_USE_HCI_EXTN_CCFC";
-	case CSR_PSKEY_HOSTIO_HCI_EXTN_PAYLOAD_SIZE:
-		return "HOSTIO_HCI_EXTN_PAYLOAD_SIZE";
-	case CSR_PSKEY_BCSP_LM_CNF_CNT_LIMIT:
-		return "BCSP_LM_CNF_CNT_LIMIT";
-	case CSR_PSKEY_HOSTIO_MAP_SCO_PCM:
-		return "HOSTIO_MAP_SCO_PCM";
-	case CSR_PSKEY_HOSTIO_AWKWARD_PCM_SYNC:
-		return "HOSTIO_AWKWARD_PCM_SYNC";
-	case CSR_PSKEY_HOSTIO_BREAK_POLL_PERIOD:
-		return "HOSTIO_BREAK_POLL_PERIOD";
-	case CSR_PSKEY_HOSTIO_MIN_UART_HCI_SCO_SIZE:
-		return "HOSTIO_MIN_UART_HCI_SCO_SIZE";
-	case CSR_PSKEY_HOSTIO_MAP_SCO_CODEC:
-		return "HOSTIO_MAP_SCO_CODEC";
-	case CSR_PSKEY_PCM_CVSD_TX_HI_FREQ_BOOST:
-		return "PCM_CVSD_TX_HI_FREQ_BOOST";
-	case CSR_PSKEY_PCM_CVSD_RX_HI_FREQ_BOOST:
-		return "PCM_CVSD_RX_HI_FREQ_BOOST";
-	case CSR_PSKEY_PCM_CONFIG32:
-		return "PCM_CONFIG32";
-	case CSR_PSKEY_USE_OLD_BCSP_LE:
-		return "USE_OLD_BCSP_LE";
-	case CSR_PSKEY_PCM_CVSD_USE_NEW_FILTER:
-		return "PCM_CVSD_USE_NEW_FILTER";
-	case CSR_PSKEY_PCM_FORMAT:
-		return "PCM_FORMAT";
-	case CSR_PSKEY_CODEC_OUT_GAIN:
-		return "CODEC_OUT_GAIN";
-	case CSR_PSKEY_CODEC_IN_GAIN:
-		return "CODEC_IN_GAIN";
-	case CSR_PSKEY_CODEC_PIO:
-		return "CODEC_PIO";
-	case CSR_PSKEY_PCM_LOW_JITTER_CONFIG:
-		return "PCM_LOW_JITTER_CONFIG";
-	case CSR_PSKEY_HOSTIO_SCO_PCM_THRESHOLDS:
-		return "HOSTIO_SCO_PCM_THRESHOLDS";
-	case CSR_PSKEY_HOSTIO_SCO_HCI_THRESHOLDS:
-		return "HOSTIO_SCO_HCI_THRESHOLDS";
-	case CSR_PSKEY_HOSTIO_MAP_SCO_PCM_SLOT:
-		return "HOSTIO_MAP_SCO_PCM_SLOT";
-	case CSR_PSKEY_UART_BAUDRATE:
-		return "UART_BAUDRATE";
-	case CSR_PSKEY_UART_CONFIG_BCSP:
-		return "UART_CONFIG_BCSP";
-	case CSR_PSKEY_UART_CONFIG_H4:
-		return "UART_CONFIG_H4";
-	case CSR_PSKEY_UART_CONFIG_H5:
-		return "UART_CONFIG_H5";
-	case CSR_PSKEY_UART_CONFIG_USR:
-		return "UART_CONFIG_USR";
-	case CSR_PSKEY_UART_TX_CRCS:
-		return "UART_TX_CRCS";
-	case CSR_PSKEY_UART_ACK_TIMEOUT:
-		return "UART_ACK_TIMEOUT";
-	case CSR_PSKEY_UART_TX_MAX_ATTEMPTS:
-		return "UART_TX_MAX_ATTEMPTS";
-	case CSR_PSKEY_UART_TX_WINDOW_SIZE:
-		return "UART_TX_WINDOW_SIZE";
-	case CSR_PSKEY_UART_HOST_WAKE:
-		return "UART_HOST_WAKE";
-	case CSR_PSKEY_HOSTIO_THROTTLE_TIMEOUT:
-		return "HOSTIO_THROTTLE_TIMEOUT";
-	case CSR_PSKEY_PCM_ALWAYS_ENABLE:
-		return "PCM_ALWAYS_ENABLE";
-	case CSR_PSKEY_UART_HOST_WAKE_SIGNAL:
-		return "UART_HOST_WAKE_SIGNAL";
-	case CSR_PSKEY_UART_CONFIG_H4DS:
-		return "UART_CONFIG_H4DS";
-	case CSR_PSKEY_H4DS_WAKE_DURATION:
-		return "H4DS_WAKE_DURATION";
-	case CSR_PSKEY_H4DS_MAXWU:
-		return "H4DS_MAXWU";
-	case CSR_PSKEY_H4DS_LE_TIMER_PERIOD:
-		return "H4DS_LE_TIMER_PERIOD";
-	case CSR_PSKEY_H4DS_TWU_TIMER_PERIOD:
-		return "H4DS_TWU_TIMER_PERIOD";
-	case CSR_PSKEY_H4DS_UART_IDLE_TIMER_PERIOD:
-		return "H4DS_UART_IDLE_TIMER_PERIOD";
-	case CSR_PSKEY_ANA_FTRIM:
-		return "ANA_FTRIM";
-	case CSR_PSKEY_WD_TIMEOUT:
-		return "WD_TIMEOUT";
-	case CSR_PSKEY_WD_PERIOD:
-		return "WD_PERIOD";
-	case CSR_PSKEY_HOST_INTERFACE:
-		return "HOST_INTERFACE";
-	case CSR_PSKEY_HQ_HOST_TIMEOUT:
-		return "HQ_HOST_TIMEOUT";
-	case CSR_PSKEY_HQ_ACTIVE:
-		return "HQ_ACTIVE";
-	case CSR_PSKEY_BCCMD_SECURITY_ACTIVE:
-		return "BCCMD_SECURITY_ACTIVE";
-	case CSR_PSKEY_ANA_FREQ:
-		return "ANA_FREQ";
-	case CSR_PSKEY_PIO_PROTECT_MASK:
-		return "PIO_PROTECT_MASK";
-	case CSR_PSKEY_PMALLOC_SIZES:
-		return "PMALLOC_SIZES";
-	case CSR_PSKEY_UART_BAUD_RATE:
-		return "UART_BAUD_RATE";
-	case CSR_PSKEY_UART_CONFIG:
-		return "UART_CONFIG";
-	case CSR_PSKEY_STUB:
-		return "STUB";
-	case CSR_PSKEY_TXRX_PIO_CONTROL:
-		return "TXRX_PIO_CONTROL";
-	case CSR_PSKEY_ANA_RX_LEVEL:
-		return "ANA_RX_LEVEL";
-	case CSR_PSKEY_ANA_RX_FTRIM:
-		return "ANA_RX_FTRIM";
-	case CSR_PSKEY_PSBC_DATA_VERSION:
-		return "PSBC_DATA_VERSION";
-	case CSR_PSKEY_PCM0_ATTENUATION:
-		return "PCM0_ATTENUATION";
-	case CSR_PSKEY_LO_LVL_MAX:
-		return "LO_LVL_MAX";
-	case CSR_PSKEY_LO_ADC_AMPL_MIN:
-		return "LO_ADC_AMPL_MIN";
-	case CSR_PSKEY_LO_ADC_AMPL_MAX:
-		return "LO_ADC_AMPL_MAX";
-	case CSR_PSKEY_IQ_TRIM_CHANNEL:
-		return "IQ_TRIM_CHANNEL";
-	case CSR_PSKEY_IQ_TRIM_GAIN:
-		return "IQ_TRIM_GAIN";
-	case CSR_PSKEY_IQ_TRIM_ENABLE:
-		return "IQ_TRIM_ENABLE";
-	case CSR_PSKEY_TX_OFFSET_HALF_MHZ:
-		return "TX_OFFSET_HALF_MHZ";
-	case CSR_PSKEY_GBL_MISC_ENABLES:
-		return "GBL_MISC_ENABLES";
-	case CSR_PSKEY_UART_SLEEP_TIMEOUT:
-		return "UART_SLEEP_TIMEOUT";
-	case CSR_PSKEY_DEEP_SLEEP_STATE:
-		return "DEEP_SLEEP_STATE";
-	case CSR_PSKEY_IQ_ENABLE_PHASE_TRIM:
-		return "IQ_ENABLE_PHASE_TRIM";
-	case CSR_PSKEY_HCI_HANDLE_FREEZE_PERIOD:
-		return "HCI_HANDLE_FREEZE_PERIOD";
-	case CSR_PSKEY_MAX_FROZEN_HCI_HANDLES:
-		return "MAX_FROZEN_HCI_HANDLES";
-	case CSR_PSKEY_PAGETABLE_DESTRUCTION_DELAY:
-		return "PAGETABLE_DESTRUCTION_DELAY";
-	case CSR_PSKEY_IQ_TRIM_PIO_SETTINGS:
-		return "IQ_TRIM_PIO_SETTINGS";
-	case CSR_PSKEY_USE_EXTERNAL_CLOCK:
-		return "USE_EXTERNAL_CLOCK";
-	case CSR_PSKEY_DEEP_SLEEP_WAKE_CTS:
-		return "DEEP_SLEEP_WAKE_CTS";
-	case CSR_PSKEY_FC_HC2H_FLUSH_DELAY:
-		return "FC_HC2H_FLUSH_DELAY";
-	case CSR_PSKEY_RX_HIGHSIDE:
-		return "RX_HIGHSIDE";
-	case CSR_PSKEY_TX_PRE_LVL:
-		return "TX_PRE_LVL";
-	case CSR_PSKEY_RX_SINGLE_ENDED:
-		return "RX_SINGLE_ENDED";
-	case CSR_PSKEY_TX_FILTER_CONFIG:
-		return "TX_FILTER_CONFIG";
-	case CSR_PSKEY_CLOCK_REQUEST_ENABLE:
-		return "CLOCK_REQUEST_ENABLE";
-	case CSR_PSKEY_RX_MIN_ATTEN:
-		return "RX_MIN_ATTEN";
-	case CSR_PSKEY_XTAL_TARGET_AMPLITUDE:
-		return "XTAL_TARGET_AMPLITUDE";
-	case CSR_PSKEY_PCM_MIN_CPU_CLOCK:
-		return "PCM_MIN_CPU_CLOCK";
-	case CSR_PSKEY_HOST_INTERFACE_PIO_USB:
-		return "HOST_INTERFACE_PIO_USB";
-	case CSR_PSKEY_CPU_IDLE_MODE:
-		return "CPU_IDLE_MODE";
-	case CSR_PSKEY_DEEP_SLEEP_CLEAR_RTS:
-		return "DEEP_SLEEP_CLEAR_RTS";
-	case CSR_PSKEY_RF_RESONANCE_TRIM:
-		return "RF_RESONANCE_TRIM";
-	case CSR_PSKEY_DEEP_SLEEP_PIO_WAKE:
-		return "DEEP_SLEEP_PIO_WAKE";
-	case CSR_PSKEY_DRAIN_BORE_TIMERS:
-		return "DRAIN_BORE_TIMERS";
-	case CSR_PSKEY_DRAIN_TX_POWER_BASE:
-		return "DRAIN_TX_POWER_BASE";
-	case CSR_PSKEY_MODULE_ID:
-		return "MODULE_ID";
-	case CSR_PSKEY_MODULE_DESIGN:
-		return "MODULE_DESIGN";
-	case CSR_PSKEY_MODULE_SECURITY_CODE:
-		return "MODULE_SECURITY_CODE";
-	case CSR_PSKEY_VM_DISABLE:
-		return "VM_DISABLE";
-	case CSR_PSKEY_MOD_MANUF0:
-		return "MOD_MANUF0";
-	case CSR_PSKEY_MOD_MANUF1:
-		return "MOD_MANUF1";
-	case CSR_PSKEY_MOD_MANUF2:
-		return "MOD_MANUF2";
-	case CSR_PSKEY_MOD_MANUF3:
-		return "MOD_MANUF3";
-	case CSR_PSKEY_MOD_MANUF4:
-		return "MOD_MANUF4";
-	case CSR_PSKEY_MOD_MANUF5:
-		return "MOD_MANUF5";
-	case CSR_PSKEY_MOD_MANUF6:
-		return "MOD_MANUF6";
-	case CSR_PSKEY_MOD_MANUF7:
-		return "MOD_MANUF7";
-	case CSR_PSKEY_MOD_MANUF8:
-		return "MOD_MANUF8";
-	case CSR_PSKEY_MOD_MANUF9:
-		return "MOD_MANUF9";
-	case CSR_PSKEY_DUT_VM_DISABLE:
-		return "DUT_VM_DISABLE";
-	case CSR_PSKEY_USR0:
-		return "USR0";
-	case CSR_PSKEY_USR1:
-		return "USR1";
-	case CSR_PSKEY_USR2:
-		return "USR2";
-	case CSR_PSKEY_USR3:
-		return "USR3";
-	case CSR_PSKEY_USR4:
-		return "USR4";
-	case CSR_PSKEY_USR5:
-		return "USR5";
-	case CSR_PSKEY_USR6:
-		return "USR6";
-	case CSR_PSKEY_USR7:
-		return "USR7";
-	case CSR_PSKEY_USR8:
-		return "USR8";
-	case CSR_PSKEY_USR9:
-		return "USR9";
-	case CSR_PSKEY_USR10:
-		return "USR10";
-	case CSR_PSKEY_USR11:
-		return "USR11";
-	case CSR_PSKEY_USR12:
-		return "USR12";
-	case CSR_PSKEY_USR13:
-		return "USR13";
-	case CSR_PSKEY_USR14:
-		return "USR14";
-	case CSR_PSKEY_USR15:
-		return "USR15";
-	case CSR_PSKEY_USR16:
-		return "USR16";
-	case CSR_PSKEY_USR17:
-		return "USR17";
-	case CSR_PSKEY_USR18:
-		return "USR18";
-	case CSR_PSKEY_USR19:
-		return "USR19";
-	case CSR_PSKEY_USR20:
-		return "USR20";
-	case CSR_PSKEY_USR21:
-		return "USR21";
-	case CSR_PSKEY_USR22:
-		return "USR22";
-	case CSR_PSKEY_USR23:
-		return "USR23";
-	case CSR_PSKEY_USR24:
-		return "USR24";
-	case CSR_PSKEY_USR25:
-		return "USR25";
-	case CSR_PSKEY_USR26:
-		return "USR26";
-	case CSR_PSKEY_USR27:
-		return "USR27";
-	case CSR_PSKEY_USR28:
-		return "USR28";
-	case CSR_PSKEY_USR29:
-		return "USR29";
-	case CSR_PSKEY_USR30:
-		return "USR30";
-	case CSR_PSKEY_USR31:
-		return "USR31";
-	case CSR_PSKEY_USR32:
-		return "USR32";
-	case CSR_PSKEY_USR33:
-		return "USR33";
-	case CSR_PSKEY_USR34:
-		return "USR34";
-	case CSR_PSKEY_USR35:
-		return "USR35";
-	case CSR_PSKEY_USR36:
-		return "USR36";
-	case CSR_PSKEY_USR37:
-		return "USR37";
-	case CSR_PSKEY_USR38:
-		return "USR38";
-	case CSR_PSKEY_USR39:
-		return "USR39";
-	case CSR_PSKEY_USR40:
-		return "USR40";
-	case CSR_PSKEY_USR41:
-		return "USR41";
-	case CSR_PSKEY_USR42:
-		return "USR42";
-	case CSR_PSKEY_USR43:
-		return "USR43";
-	case CSR_PSKEY_USR44:
-		return "USR44";
-	case CSR_PSKEY_USR45:
-		return "USR45";
-	case CSR_PSKEY_USR46:
-		return "USR46";
-	case CSR_PSKEY_USR47:
-		return "USR47";
-	case CSR_PSKEY_USR48:
-		return "USR48";
-	case CSR_PSKEY_USR49:
-		return "USR49";
-	case CSR_PSKEY_USB_VERSION:
-		return "USB_VERSION";
-	case CSR_PSKEY_USB_DEVICE_CLASS_CODES:
-		return "USB_DEVICE_CLASS_CODES";
-	case CSR_PSKEY_USB_VENDOR_ID:
-		return "USB_VENDOR_ID";
-	case CSR_PSKEY_USB_PRODUCT_ID:
-		return "USB_PRODUCT_ID";
-	case CSR_PSKEY_USB_MANUF_STRING:
-		return "USB_MANUF_STRING";
-	case CSR_PSKEY_USB_PRODUCT_STRING:
-		return "USB_PRODUCT_STRING";
-	case CSR_PSKEY_USB_SERIAL_NUMBER_STRING:
-		return "USB_SERIAL_NUMBER_STRING";
-	case CSR_PSKEY_USB_CONFIG_STRING:
-		return "USB_CONFIG_STRING";
-	case CSR_PSKEY_USB_ATTRIBUTES:
-		return "USB_ATTRIBUTES";
-	case CSR_PSKEY_USB_MAX_POWER:
-		return "USB_MAX_POWER";
-	case CSR_PSKEY_USB_BT_IF_CLASS_CODES:
-		return "USB_BT_IF_CLASS_CODES";
-	case CSR_PSKEY_USB_LANGID:
-		return "USB_LANGID";
-	case CSR_PSKEY_USB_DFU_CLASS_CODES:
-		return "USB_DFU_CLASS_CODES";
-	case CSR_PSKEY_USB_DFU_PRODUCT_ID:
-		return "USB_DFU_PRODUCT_ID";
-	case CSR_PSKEY_USB_PIO_DETACH:
-		return "USB_PIO_DETACH";
-	case CSR_PSKEY_USB_PIO_WAKEUP:
-		return "USB_PIO_WAKEUP";
-	case CSR_PSKEY_USB_PIO_PULLUP:
-		return "USB_PIO_PULLUP";
-	case CSR_PSKEY_USB_PIO_VBUS:
-		return "USB_PIO_VBUS";
-	case CSR_PSKEY_USB_PIO_WAKE_TIMEOUT:
-		return "USB_PIO_WAKE_TIMEOUT";
-	case CSR_PSKEY_USB_PIO_RESUME:
-		return "USB_PIO_RESUME";
-	case CSR_PSKEY_USB_BT_SCO_IF_CLASS_CODES:
-		return "USB_BT_SCO_IF_CLASS_CODES";
-	case CSR_PSKEY_USB_SUSPEND_PIO_LEVEL:
-		return "USB_SUSPEND_PIO_LEVEL";
-	case CSR_PSKEY_USB_SUSPEND_PIO_DIR:
-		return "USB_SUSPEND_PIO_DIR";
-	case CSR_PSKEY_USB_SUSPEND_PIO_MASK:
-		return "USB_SUSPEND_PIO_MASK";
-	case CSR_PSKEY_USB_ENDPOINT_0_MAX_PACKET_SIZE:
-		return "USB_ENDPOINT_0_MAX_PACKET_SIZE";
-	case CSR_PSKEY_USB_CONFIG:
-		return "USB_CONFIG";
-	case CSR_PSKEY_RADIOTEST_ATTEN_INIT:
-		return "RADIOTEST_ATTEN_INIT";
-	case CSR_PSKEY_RADIOTEST_FIRST_TRIM_TIME:
-		return "RADIOTEST_FIRST_TRIM_TIME";
-	case CSR_PSKEY_RADIOTEST_SUBSEQUENT_TRIM_TIME:
-		return "RADIOTEST_SUBSEQUENT_TRIM_TIME";
-	case CSR_PSKEY_RADIOTEST_LO_LVL_TRIM_ENABLE:
-		return "RADIOTEST_LO_LVL_TRIM_ENABLE";
-	case CSR_PSKEY_RADIOTEST_DISABLE_MODULATION:
-		return "RADIOTEST_DISABLE_MODULATION";
-	case CSR_PSKEY_RFCOMM_FCON_THRESHOLD:
-		return "RFCOMM_FCON_THRESHOLD";
-	case CSR_PSKEY_RFCOMM_FCOFF_THRESHOLD:
-		return "RFCOMM_FCOFF_THRESHOLD";
-	case CSR_PSKEY_IPV6_STATIC_ADDR:
-		return "IPV6_STATIC_ADDR";
-	case CSR_PSKEY_IPV4_STATIC_ADDR:
-		return "IPV4_STATIC_ADDR";
-	case CSR_PSKEY_IPV6_STATIC_PREFIX_LEN:
-		return "IPV6_STATIC_PREFIX_LEN";
-	case CSR_PSKEY_IPV6_STATIC_ROUTER_ADDR:
-		return "IPV6_STATIC_ROUTER_ADDR";
-	case CSR_PSKEY_IPV4_STATIC_SUBNET_MASK:
-		return "IPV4_STATIC_SUBNET_MASK";
-	case CSR_PSKEY_IPV4_STATIC_ROUTER_ADDR:
-		return "IPV4_STATIC_ROUTER_ADDR";
-	case CSR_PSKEY_MDNS_NAME:
-		return "MDNS_NAME";
-	case CSR_PSKEY_FIXED_PIN:
-		return "FIXED_PIN";
-	case CSR_PSKEY_MDNS_PORT:
-		return "MDNS_PORT";
-	case CSR_PSKEY_MDNS_TTL:
-		return "MDNS_TTL";
-	case CSR_PSKEY_MDNS_IPV4_ADDR:
-		return "MDNS_IPV4_ADDR";
-	case CSR_PSKEY_ARP_CACHE_TIMEOUT:
-		return "ARP_CACHE_TIMEOUT";
-	case CSR_PSKEY_HFP_POWER_TABLE:
-		return "HFP_POWER_TABLE";
-	case CSR_PSKEY_DRAIN_BORE_TIMER_COUNTERS:
-		return "DRAIN_BORE_TIMER_COUNTERS";
-	case CSR_PSKEY_DRAIN_BORE_COUNTERS:
-		return "DRAIN_BORE_COUNTERS";
-	case CSR_PSKEY_LOOP_FILTER_TRIM:
-		return "LOOP_FILTER_TRIM";
-	case CSR_PSKEY_DRAIN_BORE_CURRENT_PEAK:
-		return "DRAIN_BORE_CURRENT_PEAK";
-	case CSR_PSKEY_VM_E2_CACHE_LIMIT:
-		return "VM_E2_CACHE_LIMIT";
-	case CSR_PSKEY_FORCE_16MHZ_REF_PIO:
-		return "FORCE_16MHZ_REF_PIO";
-	case CSR_PSKEY_CDMA_LO_REF_LIMITS:
-		return "CDMA_LO_REF_LIMITS";
-	case CSR_PSKEY_CDMA_LO_ERROR_LIMITS:
-		return "CDMA_LO_ERROR_LIMITS";
-	case CSR_PSKEY_CLOCK_STARTUP_DELAY:
-		return "CLOCK_STARTUP_DELAY";
-	case CSR_PSKEY_DEEP_SLEEP_CORRECTION_FACTOR:
-		return "DEEP_SLEEP_CORRECTION_FACTOR";
-	case CSR_PSKEY_TEMPERATURE_CALIBRATION:
-		return "TEMPERATURE_CALIBRATION";
-	case CSR_PSKEY_TEMPERATURE_VS_DELTA_INTERNAL_PA:
-		return "TEMPERATURE_VS_DELTA_INTERNAL_PA";
-	case CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_PRE_LVL:
-		return "TEMPERATURE_VS_DELTA_TX_PRE_LVL";
-	case CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_BB:
-		return "TEMPERATURE_VS_DELTA_TX_BB";
-	case CSR_PSKEY_TEMPERATURE_VS_DELTA_ANA_FTRIM:
-		return "TEMPERATURE_VS_DELTA_ANA_FTRIM";
-	case CSR_PSKEY_TEST_DELTA_OFFSET:
-		return "TEST_DELTA_OFFSET";
-	case CSR_PSKEY_RX_DYNAMIC_LVL_OFFSET:
-		return "RX_DYNAMIC_LVL_OFFSET";
-	case CSR_PSKEY_TEST_FORCE_OFFSET:
-		return "TEST_FORCE_OFFSET";
-	case CSR_PSKEY_RF_TRAP_BAD_DIVISION_RATIOS:
-		return "RF_TRAP_BAD_DIVISION_RATIOS";
-	case CSR_PSKEY_RADIOTEST_CDMA_LO_REF_LIMITS:
-		return "RADIOTEST_CDMA_LO_REF_LIMITS";
-	case CSR_PSKEY_INITIAL_BOOTMODE:
-		return "INITIAL_BOOTMODE";
-	case CSR_PSKEY_ONCHIP_HCI_CLIENT:
-		return "ONCHIP_HCI_CLIENT";
-	case CSR_PSKEY_RX_ATTEN_BACKOFF:
-		return "RX_ATTEN_BACKOFF";
-	case CSR_PSKEY_RX_ATTEN_UPDATE_RATE:
-		return "RX_ATTEN_UPDATE_RATE";
-	case CSR_PSKEY_SYNTH_TXRX_THRESHOLDS:
-		return "SYNTH_TXRX_THRESHOLDS";
-	case CSR_PSKEY_MIN_WAIT_STATES:
-		return "MIN_WAIT_STATES";
-	case CSR_PSKEY_RSSI_CORRECTION:
-		return "RSSI_CORRECTION";
-	case CSR_PSKEY_SCHED_THROTTLE_TIMEOUT:
-		return "SCHED_THROTTLE_TIMEOUT";
-	case CSR_PSKEY_DEEP_SLEEP_USE_EXTERNAL_CLOCK:
-		return "DEEP_SLEEP_USE_EXTERNAL_CLOCK";
-	case CSR_PSKEY_TRIM_RADIO_FILTERS:
-		return "TRIM_RADIO_FILTERS";
-	case CSR_PSKEY_TRANSMIT_OFFSET:
-		return "TRANSMIT_OFFSET";
-	case CSR_PSKEY_USB_VM_CONTROL:
-		return "USB_VM_CONTROL";
-	case CSR_PSKEY_MR_ANA_RX_FTRIM:
-		return "MR_ANA_RX_FTRIM";
-	case CSR_PSKEY_I2C_CONFIG:
-		return "I2C_CONFIG";
-	case CSR_PSKEY_IQ_LVL_RX:
-		return "IQ_LVL_RX";
-	case CSR_PSKEY_MR_TX_FILTER_CONFIG:
-		return "MR_TX_FILTER_CONFIG";
-	case CSR_PSKEY_MR_TX_CONFIG2:
-		return "MR_TX_CONFIG2";
-	case CSR_PSKEY_USB_DONT_RESET_BOOTMODE_ON_HOST_RESET:
-		return "USB_DONT_RESET_BOOTMODE_ON_HOST_RESET";
-	case CSR_PSKEY_LC_USE_THROTTLING:
-		return "LC_USE_THROTTLING";
-	case CSR_PSKEY_CHARGER_TRIM:
-		return "CHARGER_TRIM";
-	case CSR_PSKEY_CLOCK_REQUEST_FEATURES:
-		return "CLOCK_REQUEST_FEATURES";
-	case CSR_PSKEY_TRANSMIT_OFFSET_CLASS1:
-		return "TRANSMIT_OFFSET_CLASS1";
-	case CSR_PSKEY_TX_AVOID_PA_CLASS1_PIO:
-		return "TX_AVOID_PA_CLASS1_PIO";
-	case CSR_PSKEY_MR_PIO_CONFIG:
-		return "MR_PIO_CONFIG";
-	case CSR_PSKEY_UART_CONFIG2:
-		return "UART_CONFIG2";
-	case CSR_PSKEY_CLASS1_IQ_LVL:
-		return "CLASS1_IQ_LVL";
-	case CSR_PSKEY_CLASS1_TX_CONFIG2:
-		return "CLASS1_TX_CONFIG2";
-	case CSR_PSKEY_TEMPERATURE_VS_DELTA_INTERNAL_PA_CLASS1:
-		return "TEMPERATURE_VS_DELTA_INTERNAL_PA_CLASS1";
-	case CSR_PSKEY_TEMPERATURE_VS_DELTA_EXTERNAL_PA_CLASS1:
-		return "TEMPERATURE_VS_DELTA_EXTERNAL_PA_CLASS1";
-	case CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_PRE_LVL_MR:
-		return "TEMPERATURE_VS_DELTA_TX_PRE_LVL_MR";
-	case CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_BB_MR_HEADER:
-		return "TEMPERATURE_VS_DELTA_TX_BB_MR_HEADER";
-	case CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_BB_MR_PAYLOAD:
-		return "TEMPERATURE_VS_DELTA_TX_BB_MR_PAYLOAD";
-	case CSR_PSKEY_RX_MR_EQ_TAPS:
-		return "RX_MR_EQ_TAPS";
-	case CSR_PSKEY_TX_PRE_LVL_CLASS1:
-		return "TX_PRE_LVL_CLASS1";
-	case CSR_PSKEY_ANALOGUE_ATTENUATOR:
-		return "ANALOGUE_ATTENUATOR";
-	case CSR_PSKEY_MR_RX_FILTER_TRIM:
-		return "MR_RX_FILTER_TRIM";
-	case CSR_PSKEY_MR_RX_FILTER_RESPONSE:
-		return "MR_RX_FILTER_RESPONSE";
-	case CSR_PSKEY_PIO_WAKEUP_STATE:
-		return "PIO_WAKEUP_STATE";
-	case CSR_PSKEY_MR_TX_IF_ATTEN_OFF_TEMP:
-		return "MR_TX_IF_ATTEN_OFF_TEMP";
-	case CSR_PSKEY_LO_DIV_LATCH_BYPASS:
-		return "LO_DIV_LATCH_BYPASS";
-	case CSR_PSKEY_LO_VCO_STANDBY:
-		return "LO_VCO_STANDBY";
-	case CSR_PSKEY_SLOW_CLOCK_FILTER_SHIFT:
-		return "SLOW_CLOCK_FILTER_SHIFT";
-	case CSR_PSKEY_SLOW_CLOCK_FILTER_DIVIDER:
-		return "SLOW_CLOCK_FILTER_DIVIDER";
-	case CSR_PSKEY_USB_ATTRIBUTES_POWER:
-		return "USB_ATTRIBUTES_POWER";
-	case CSR_PSKEY_USB_ATTRIBUTES_WAKEUP:
-		return "USB_ATTRIBUTES_WAKEUP";
-	case CSR_PSKEY_DFU_ATTRIBUTES_MANIFESTATION_TOLERANT:
-		return "DFU_ATTRIBUTES_MANIFESTATION_TOLERANT";
-	case CSR_PSKEY_DFU_ATTRIBUTES_CAN_UPLOAD:
-		return "DFU_ATTRIBUTES_CAN_UPLOAD";
-	case CSR_PSKEY_DFU_ATTRIBUTES_CAN_DOWNLOAD:
-		return "DFU_ATTRIBUTES_CAN_DOWNLOAD";
-	case CSR_PSKEY_UART_CONFIG_STOP_BITS:
-		return "UART_CONFIG_STOP_BITS";
-	case CSR_PSKEY_UART_CONFIG_PARITY_BIT:
-		return "UART_CONFIG_PARITY_BIT";
-	case CSR_PSKEY_UART_CONFIG_FLOW_CTRL_EN:
-		return "UART_CONFIG_FLOW_CTRL_EN";
-	case CSR_PSKEY_UART_CONFIG_RTS_AUTO_EN:
-		return "UART_CONFIG_RTS_AUTO_EN";
-	case CSR_PSKEY_UART_CONFIG_RTS:
-		return "UART_CONFIG_RTS";
-	case CSR_PSKEY_UART_CONFIG_TX_ZERO_EN:
-		return "UART_CONFIG_TX_ZERO_EN";
-	case CSR_PSKEY_UART_CONFIG_NON_BCSP_EN:
-		return "UART_CONFIG_NON_BCSP_EN";
-	case CSR_PSKEY_UART_CONFIG_RX_RATE_DELAY:
-		return "UART_CONFIG_RX_RATE_DELAY";
-	case CSR_PSKEY_UART_SEQ_TIMEOUT:
-		return "UART_SEQ_TIMEOUT";
-	case CSR_PSKEY_UART_SEQ_RETRIES:
-		return "UART_SEQ_RETRIES";
-	case CSR_PSKEY_UART_SEQ_WINSIZE:
-		return "UART_SEQ_WINSIZE";
-	case CSR_PSKEY_UART_USE_CRC_ON_TX:
-		return "UART_USE_CRC_ON_TX";
-	case CSR_PSKEY_UART_HOST_INITIAL_STATE:
-		return "UART_HOST_INITIAL_STATE";
-	case CSR_PSKEY_UART_HOST_ATTENTION_SPAN:
-		return "UART_HOST_ATTENTION_SPAN";
-	case CSR_PSKEY_UART_HOST_WAKEUP_TIME:
-		return "UART_HOST_WAKEUP_TIME";
-	case CSR_PSKEY_UART_HOST_WAKEUP_WAIT:
-		return "UART_HOST_WAKEUP_WAIT";
-	case CSR_PSKEY_BCSP_LM_MODE:
-		return "BCSP_LM_MODE";
-	case CSR_PSKEY_BCSP_LM_SYNC_RETRIES:
-		return "BCSP_LM_SYNC_RETRIES";
-	case CSR_PSKEY_BCSP_LM_TSHY:
-		return "BCSP_LM_TSHY";
-	case CSR_PSKEY_UART_DFU_CONFIG_STOP_BITS:
-		return "UART_DFU_CONFIG_STOP_BITS";
-	case CSR_PSKEY_UART_DFU_CONFIG_PARITY_BIT:
-		return "UART_DFU_CONFIG_PARITY_BIT";
-	case CSR_PSKEY_UART_DFU_CONFIG_FLOW_CTRL_EN:
-		return "UART_DFU_CONFIG_FLOW_CTRL_EN";
-	case CSR_PSKEY_UART_DFU_CONFIG_RTS_AUTO_EN:
-		return "UART_DFU_CONFIG_RTS_AUTO_EN";
-	case CSR_PSKEY_UART_DFU_CONFIG_RTS:
-		return "UART_DFU_CONFIG_RTS";
-	case CSR_PSKEY_UART_DFU_CONFIG_TX_ZERO_EN:
-		return "UART_DFU_CONFIG_TX_ZERO_EN";
-	case CSR_PSKEY_UART_DFU_CONFIG_NON_BCSP_EN:
-		return "UART_DFU_CONFIG_NON_BCSP_EN";
-	case CSR_PSKEY_UART_DFU_CONFIG_RX_RATE_DELAY:
-		return "UART_DFU_CONFIG_RX_RATE_DELAY";
-	case CSR_PSKEY_AMUX_AIO0:
-		return "AMUX_AIO0";
-	case CSR_PSKEY_AMUX_AIO1:
-		return "AMUX_AIO1";
-	case CSR_PSKEY_AMUX_AIO2:
-		return "AMUX_AIO2";
-	case CSR_PSKEY_AMUX_AIO3:
-		return "AMUX_AIO3";
-	case CSR_PSKEY_LOCAL_NAME_SIMPLIFIED:
-		return "LOCAL_NAME_SIMPLIFIED";
-	case CSR_PSKEY_EXTENDED_STUB:
-		return "EXTENDED_STUB";
-	default:
-		return "UNKNOWN";
-	}
-}
-
-int csr_write_varid_valueless(int dd, uint16_t seqnum, uint16_t varid)
-{
-	unsigned char cmd[] = { 0x02, 0x00, 0x09, 0x00,
-				seqnum & 0xff, seqnum >> 8, varid & 0xff, varid >> 8, 0x00, 0x00,
-				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
-
-	unsigned char cp[254], rp[254];
-	struct hci_request rq;
-
-	memset(&cp, 0, sizeof(cp));
-	cp[0] = 0xc2;
-	memcpy(cp + 1, cmd, sizeof(cmd));
-
-	switch (varid) {
-	case CSR_VARID_COLD_RESET:
-	case CSR_VARID_WARM_RESET:
-	case CSR_VARID_COLD_HALT:
-	case CSR_VARID_WARM_HALT:
-		return hci_send_cmd(dd, OGF_VENDOR_CMD, 0x00, sizeof(cmd) + 1, cp);
-	}
-
-	memset(&rq, 0, sizeof(rq));
-	rq.ogf    = OGF_VENDOR_CMD;
-	rq.ocf    = 0x00;
-	rq.event  = EVT_VENDOR;
-	rq.cparam = cp;
-	rq.clen   = sizeof(cmd) + 1;
-	rq.rparam = rp;
-	rq.rlen   = sizeof(rp);
-
-	if (hci_send_req(dd, &rq, 2000) < 0)
-		return -1;
-
-	if (rp[0] != 0xc2) {
-		errno = EIO;
-		return -1;
-	}
-
-	if ((rp[9] + (rp[10] << 8)) != 0) {
-		errno = ENXIO;
-		return -1;
-	}
-
-	return 0;
-}
-
-int csr_write_varid_complex(int dd, uint16_t seqnum, uint16_t varid, uint8_t *value, uint16_t length)
-{
-	unsigned char cmd[] = { 0x02, 0x00, ((length / 2) + 5) & 0xff, ((length / 2) + 5) >> 8,
-				seqnum & 0xff, seqnum >> 8, varid & 0xff, varid >> 8, 0x00, 0x00,
-				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
-
-	unsigned char cp[254], rp[254];
-	struct hci_request rq;
-
-	memset(&cp, 0, sizeof(cp));
-	cp[0] = 0xc2;
-	memcpy(cp + 1, cmd, sizeof(cmd));
-	memcpy(cp + 11, value, length);
-
-	memset(&rq, 0, sizeof(rq));
-	rq.ogf    = OGF_VENDOR_CMD;
-	rq.ocf    = 0x00;
-	rq.event  = EVT_VENDOR;
-	rq.cparam = cp;
-	rq.clen   = sizeof(cmd) + length + 1;
-	rq.rparam = rp;
-	rq.rlen   = sizeof(rp);
-
-	if (hci_send_req(dd, &rq, 2000) < 0)
-		return -1;
-
-	if (rp[0] != 0xc2) {
-		errno = EIO;
-		return -1;
-	}
-
-	if ((rp[9] + (rp[10] << 8)) != 0) {
-		errno = ENXIO;
-		return -1;
-	}
-
-	return 0;
-}
-
-int csr_read_varid_complex(int dd, uint16_t seqnum, uint16_t varid, uint8_t *value, uint16_t length)
-{
-	unsigned char cmd[] = { 0x00, 0x00, ((length / 2) + 5) & 0xff, ((length / 2) + 5) >> 8,
-				seqnum & 0xff, seqnum >> 8, varid & 0xff, varid >> 8, 0x00, 0x00,
-				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
-
-	unsigned char cp[254], rp[254];
-	struct hci_request rq;
-
-	memset(&cp, 0, sizeof(cp));
-	cp[0] = 0xc2;
-	memcpy(cp + 1, cmd, sizeof(cmd));
-	memcpy(cp + 11, value, length);
-
-	memset(&rq, 0, sizeof(rq));
-	rq.ogf    = OGF_VENDOR_CMD;
-	rq.ocf    = 0x00;
-	rq.event  = EVT_VENDOR;
-	rq.cparam = cp;
-	rq.clen   = sizeof(cmd) + length + 1;
-	rq.rparam = rp;
-	rq.rlen   = sizeof(rp);
-
-	if (hci_send_req(dd, &rq, 2000) < 0)
-		return -1;
-
-	if (rp[0] != 0xc2) {
-		errno = EIO;
-		return -1;
-	}
-
-	if ((rp[9] + (rp[10] << 8)) != 0) {
-		errno = ENXIO;
-		return -1;
-	}
-
-	memcpy(value, rp + 11, length);
-
-	return 0;
-}
-
-int csr_read_varid_uint16(int dd, uint16_t seqnum, uint16_t varid, uint16_t *value)
-{
-	unsigned char cmd[] = { 0x00, 0x00, 0x09, 0x00,
-				seqnum & 0xff, seqnum >> 8, varid & 0xff, varid >> 8, 0x00, 0x00,
-				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
-
-	unsigned char cp[254], rp[254];
-	struct hci_request rq;
-
-	memset(&cp, 0, sizeof(cp));
-	cp[0] = 0xc2;
-	memcpy(cp + 1, cmd, sizeof(cmd));
-
-	memset(&rq, 0, sizeof(rq));
-	rq.ogf    = OGF_VENDOR_CMD;
-	rq.ocf    = 0x00;
-	rq.event  = EVT_VENDOR;
-	rq.cparam = cp;
-	rq.clen   = sizeof(cmd) + 1;
-	rq.rparam = rp;
-	rq.rlen   = sizeof(rp);
-
-	if (hci_send_req(dd, &rq, 2000) < 0)
-		return -1;
-
-	if (rp[0] != 0xc2) {
-		errno = EIO;
-		return -1;
-	}
-
-	if ((rp[9] + (rp[10] << 8)) != 0) {
-		errno = ENXIO;
-		return -1;
-	}
-
-	*value = rp[11] + (rp[12] << 8);
-
-	return 0;
-}
-
-int csr_read_varid_uint32(int dd, uint16_t seqnum, uint16_t varid, uint32_t *value)
-{
-	unsigned char cmd[] = { 0x00, 0x00, 0x09, 0x00,
-				seqnum & 0xff, seqnum >> 8, varid & 0xff, varid >> 8, 0x00, 0x00,
-				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
-
-	unsigned char cp[254], rp[254];
-	struct hci_request rq;
-
-	memset(&cp, 0, sizeof(cp));
-	cp[0] = 0xc2;
-	memcpy(cp + 1, cmd, sizeof(cmd));
-
-	memset(&rq, 0, sizeof(rq));
-	rq.ogf    = OGF_VENDOR_CMD;
-	rq.ocf    = 0x00;
-	rq.event  = EVT_VENDOR;
-	rq.cparam = cp;
-	rq.clen   = sizeof(cmd) + 1;
-	rq.rparam = rp;
-	rq.rlen   = sizeof(rp);
-
-	if (hci_send_req(dd, &rq, 2000) < 0)
-		return -1;
-
-	if (rp[0] != 0xc2) {
-		errno = EIO;
-		return -1;
-	}
-
-	if ((rp[9] + (rp[10] << 8)) != 0) {
-		errno = ENXIO;
-		return -1;
-	}
-
-	*value = ((rp[11] + (rp[12] << 8)) << 16) + (rp[13] + (rp[14] << 8));
-
-	return 0;
-}
-
-int csr_read_pskey_complex(int dd, uint16_t seqnum, uint16_t pskey, uint16_t stores, uint8_t *value, uint16_t length)
-{
-	unsigned char cmd[] = { 0x00, 0x00, ((length / 2) + 8) & 0xff, ((length / 2) + 8) >> 8,
-				seqnum & 0xff, seqnum >> 8, 0x03, 0x70, 0x00, 0x00,
-				pskey & 0xff, pskey >> 8,
-				(length / 2) & 0xff, (length / 2) >> 8,
-				stores & 0xff, stores >> 8, 0x00, 0x00 };
-
-	unsigned char cp[254], rp[254];
-	struct hci_request rq;
-
-	memset(&cp, 0, sizeof(cp));
-	cp[0] = 0xc2;
-	memcpy(cp + 1, cmd, sizeof(cmd));
-
-	memset(&rq, 0, sizeof(rq));
-	rq.ogf    = OGF_VENDOR_CMD;
-	rq.ocf    = 0x00;
-	rq.event  = EVT_VENDOR;
-	rq.cparam = cp;
-	rq.clen   = sizeof(cmd) + length - 1;
-	rq.rparam = rp;
-	rq.rlen   = sizeof(rp);
-
-	if (hci_send_req(dd, &rq, 2000) < 0)
-		return -1;
-
-	if (rp[0] != 0xc2) {
-		errno = EIO;
-		return -1;
-	}
-
-	if ((rp[9] + (rp[10] << 8)) != 0) {
-		errno = ENXIO;
-		return -1;
-	}
-
-	memcpy(value, rp + 17, length);
-
-	return 0;
-}
-
-int csr_write_pskey_complex(int dd, uint16_t seqnum, uint16_t pskey, uint16_t stores, uint8_t *value, uint16_t length)
-{
-	unsigned char cmd[] = { 0x02, 0x00, ((length / 2) + 8) & 0xff, ((length / 2) + 8) >> 8,
-				seqnum & 0xff, seqnum >> 8, 0x03, 0x70, 0x00, 0x00,
-				pskey & 0xff, pskey >> 8,
-				(length / 2) & 0xff, (length / 2) >> 8,
-				stores & 0xff, stores >> 8, 0x00, 0x00 };
-
-	unsigned char cp[254], rp[254];
-	struct hci_request rq;
-
-	memset(&cp, 0, sizeof(cp));
-	cp[0] = 0xc2;
-	memcpy(cp + 1, cmd, sizeof(cmd));
-
-	memcpy(cp + 17, value, length);
-
-	memset(&rq, 0, sizeof(rq));
-	rq.ogf    = OGF_VENDOR_CMD;
-	rq.ocf    = 0x00;
-	rq.event  = EVT_VENDOR;
-	rq.cparam = cp;
-	rq.clen   = sizeof(cmd) + length - 1;
-	rq.rparam = rp;
-	rq.rlen   = sizeof(rp);
-
-	if (hci_send_req(dd, &rq, 2000) < 0)
-		return -1;
-
-	if (rp[0] != 0xc2) {
-		errno = EIO;
-		return -1;
-	}
-
-	if ((rp[9] + (rp[10] << 8)) != 0) {
-		errno = ENXIO;
-		return -1;
-	}
-
-	return 0;
-}
-
-int csr_read_pskey_uint16(int dd, uint16_t seqnum, uint16_t pskey, uint16_t stores, uint16_t *value)
-{
-	uint8_t array[2] = { 0x00, 0x00 };
-	int err;
-
-	err = csr_read_pskey_complex(dd, seqnum, pskey, stores, array, 2);
-
-	*value = array[0] + (array[1] << 8);
-
-	return err;
-}
-
-int csr_write_pskey_uint16(int dd, uint16_t seqnum, uint16_t pskey, uint16_t stores, uint16_t value)
-{
-	uint8_t array[2] = { value & 0xff, value >> 8 };
-
-	return csr_write_pskey_complex(dd, seqnum, pskey, stores, array, 2);
-}
-
-int csr_read_pskey_uint32(int dd, uint16_t seqnum, uint16_t pskey, uint16_t stores, uint32_t *value)
-{
-	uint8_t array[4] = { 0x00, 0x00, 0x00, 0x00 };
-	int err;
-
-	err = csr_read_pskey_complex(dd, seqnum, pskey, stores, array, 4);
-
-	*value = ((array[0] + (array[1] << 8)) << 16) +
-						(array[2] + (array[3] << 8));
-
-	return err;
-}
-
-int csr_write_pskey_uint32(int dd, uint16_t seqnum, uint16_t pskey, uint16_t stores, uint32_t value)
-{
-	uint8_t array[4] = { (value & 0xff0000) >> 16, value >> 24,
-					value & 0xff, (value & 0xff00) >> 8 };
-
-	return csr_write_pskey_complex(dd, seqnum, pskey, stores, array, 4);
-}
-
-int psr_put(uint16_t pskey, uint8_t *value, uint16_t size)
-{
-	struct psr_data *item;
-
-	item = malloc(sizeof(*item));
-	if (!item)
-		return -ENOMEM;
-
-	item->pskey = pskey;
-
-	if (size > 0) {
-		item->value = malloc(size);
-		if (!item->value) {
-			free(item);
-			return -ENOMEM;
-		}
-
-		memcpy(item->value, value, size);
-		item->size = size;
-	} else {
-		item->value = NULL;
-		item->size = 0;
-	}
-
-	item->next = NULL;
-
-	if (!head)
-		head = item;
-	else
-		tail->next = item;
-
-	tail = item;
-
-	return 0;
-}
-
-int psr_get(uint16_t *pskey, uint8_t *value, uint16_t *size)
-{
-	struct psr_data *item = head;
-
-	if (!head)
-		return -ENOENT;
-
-	*pskey = item->pskey;
-
-	if (item->value) {
-		if (value && item->size > 0)
-			memcpy(value, item->value, item->size);
-		free(item->value);
-		*size = item->size;
-	} else
-		*size = 0;
-
-	if (head == tail)
-		tail = NULL;
-
-	head = head->next;
-	free(item);
-
-	return 0;
-}
-
-static int parse_line(char *str)
-{
-	uint8_t array[256];
-	uint16_t value, pskey, length = 0;
-	char *off, *end;
-
-	pskey = strtol(str + 1, NULL, 16);
-	off = strstr(str, "=");
-	if (!off)
-		return -EIO;
-
-	off++;
-
-	while (length <= sizeof(array) - 2) {
-		value = strtol(off, &end, 16);
-		if (value == 0 && off == end)
-			break;
-
-		array[length++] = value & 0xff;
-		array[length++] = value >> 8;
-
-		if (*end == '\0')
-			break;
-
-		off = end + 1;
-	}
-
-	return psr_put(pskey, array, length);
-}
-
-int psr_read(const char *filename)
-{
-	struct stat st;
-	char *str, *map, *off, *end;
-	int fd, err = 0;
-
-	fd = open(filename, O_RDONLY);
-	if (fd < 0)
-		return fd;
-
-	if (fstat(fd, &st) < 0) {
-		err = -errno;
-		goto close;
-	}
-
-	map = mmap(0, st.st_size, PROT_READ, MAP_SHARED, fd, 0);
-	if (!map || map == MAP_FAILED) {
-		err = -errno;
-		goto close;
-	}
-
-	off = map;
-
-	while (1) {
-		if (*off == '\r' || *off == '\n') {
-			off++;
-			continue;
-		}
-
-		end = strpbrk(off, "\r\n");
-		if (!end)
-			break;
-
-		str = malloc(end - off + 1);
-		if (!str)
-			break;
-
-		memset(str, 0, end - off + 1);
-		strncpy(str, off, end - off);
-		if (*str == '&')
-			parse_line(str);
-
-		free(str);
-		off = end + 1;
-	}
-
-	munmap(map, st.st_size);
-
-close:
-	close(fd);
-
-	return err;
-}
-
-int psr_print(void)
-{
-	uint8_t array[256];
-	uint16_t pskey, length;
-	char *str, val[7];
-	int i;
-
-	while (1) {
-		if (psr_get(&pskey, array, &length) < 0)
-			break;
-
-		str = csr_pskeytoval(pskey);
-		if (!strcasecmp(str, "UNKNOWN")) {
-			sprintf(val, "0x%04x", pskey);
-			str = NULL;
-		}
-
-		printf("// %s%s\n&%04x =", str ? "PSKEY_" : "",
-						str ? str : val, pskey);
-		for (i = 0; i < length / 2; i++)
-			printf(" %02x%02x", array[i * 2 + 1], array[i * 2]);
-		printf("\n");
-	}
-
-	return 0;
-}
diff --git a/tools/csr.h b/tools/csr.h
deleted file mode 100644
index cc245a550..000000000
--- a/tools/csr.h
+++ /dev/null
@@ -1,555 +0,0 @@
-/*
- *
- *  BlueZ - Bluetooth protocol stack for Linux
- *
- *  Copyright (C) 2003-2010  Marcel Holtmann <marcel@holtmann.org>
- *
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- */
-
-#include <stdint.h>
-#include <termios.h>
-
-#define CSR_VARID_PS_CLR_ALL			0x000b	/* valueless */
-#define CSR_VARID_PS_FACTORY_SET		0x000c	/* valueless */
-#define CSR_VARID_PS_CLR_ALL_STORES		0x082d	/* uint16 */
-#define CSR_VARID_BC01_STATUS			0x2801	/* uint16 */
-#define CSR_VARID_BUILDID			0x2819	/* uint16 */
-#define CSR_VARID_CHIPVER			0x281a	/* uint16 */
-#define CSR_VARID_CHIPREV			0x281b	/* uint16 */
-#define CSR_VARID_INTERFACE_VERSION		0x2825	/* uint16 */
-#define CSR_VARID_RAND				0x282a	/* uint16 */
-#define CSR_VARID_MAX_CRYPT_KEY_LENGTH		0x282c	/* uint16 */
-#define CSR_VARID_CHIPANAREV			0x2836	/* uint16 */
-#define CSR_VARID_BUILDID_LOADER		0x2838	/* uint16 */
-#define CSR_VARID_BT_CLOCK			0x2c00	/* uint32 */
-#define CSR_VARID_PS_NEXT			0x3005	/* complex */
-#define CSR_VARID_PS_SIZE			0x3006	/* complex */
-#define CSR_VARID_ADC_RES			0x3007	/* complex */
-#define CSR_VARID_CRYPT_KEY_LENGTH		0x3008	/* complex */
-#define CSR_VARID_PICONET_INSTANCE		0x3009	/* complex */
-#define CSR_VARID_GET_CLR_EVT			0x300a	/* complex */
-#define CSR_VARID_GET_NEXT_BUILDDEF		0x300b	/* complex */
-#define CSR_VARID_PS_MEMORY_TYPE		0x3012	/* complex */
-#define CSR_VARID_READ_BUILD_NAME		0x301c	/* complex */
-#define CSR_VARID_COLD_RESET			0x4001	/* valueless */
-#define CSR_VARID_WARM_RESET			0x4002	/* valueless */
-#define CSR_VARID_COLD_HALT			0x4003	/* valueless */
-#define CSR_VARID_WARM_HALT			0x4004	/* valueless */
-#define CSR_VARID_INIT_BT_STACK			0x4005	/* valueless */
-#define CSR_VARID_ACTIVATE_BT_STACK		0x4006	/* valueless */
-#define CSR_VARID_ENABLE_TX			0x4007	/* valueless */
-#define CSR_VARID_DISABLE_TX			0x4008	/* valueless */
-#define CSR_VARID_RECAL				0x4009	/* valueless */
-#define CSR_VARID_PS_FACTORY_RESTORE		0x400d	/* valueless */
-#define CSR_VARID_PS_FACTORY_RESTORE_ALL	0x400e	/* valueless */
-#define CSR_VARID_PS_DEFRAG_RESET		0x400f	/* valueless */
-#define CSR_VARID_KILL_VM_APPLICATION		0x4010	/* valueless */
-#define CSR_VARID_HOPPING_ON			0x4011	/* valueless */
-#define CSR_VARID_CANCEL_PAGE			0x4012	/* valueless */
-#define CSR_VARID_PS_CLR			0x4818	/* uint16 */
-#define CSR_VARID_MAP_SCO_PCM			0x481c	/* uint16 */
-#define CSR_VARID_ADC				0x4829	/* uint16 */
-#define CSR_VARID_SINGLE_CHAN			0x482e	/* uint16 */
-#define CSR_VARID_RADIOTEST			0x5004	/* complex */
-#define CSR_VARID_PS_CLR_STORES			0x500c	/* complex */
-#define CSR_VARID_NO_VARIABLE			0x6000	/* valueless */
-#define CSR_VARID_CONFIG_UART			0x6802	/* uint16 */
-#define CSR_VARID_PANIC_ARG			0x6805	/* uint16 */
-#define CSR_VARID_FAULT_ARG			0x6806	/* uint16 */
-#define CSR_VARID_MAX_TX_POWER			0x6827	/* int8 */
-#define CSR_VARID_DEFAULT_TX_POWER		0x682b	/* int8 */
-#define CSR_VARID_PS				0x7003	/* complex */
-
-#define CSR_PSKEY_BDADDR					0x0001	/* bdaddr / uint16[] = { 0x00A5A5, 0x5b, 0x0002 } */
-#define CSR_PSKEY_COUNTRYCODE					0x0002	/* uint16 */
-#define CSR_PSKEY_CLASSOFDEVICE					0x0003	/* bdcod */
-#define CSR_PSKEY_DEVICE_DRIFT					0x0004	/* uint16 */
-#define CSR_PSKEY_DEVICE_JITTER					0x0005	/* uint16 */
-#define CSR_PSKEY_MAX_ACLS					0x000d	/* uint16 */
-#define CSR_PSKEY_MAX_SCOS					0x000e	/* uint16 */
-#define CSR_PSKEY_MAX_REMOTE_MASTERS				0x000f	/* uint16 */
-#define CSR_PSKEY_ENABLE_MASTERY_WITH_SLAVERY			0x0010	/* bool */
-#define CSR_PSKEY_H_HC_FC_MAX_ACL_PKT_LEN			0x0011	/* uint16 */
-#define CSR_PSKEY_H_HC_FC_MAX_SCO_PKT_LEN			0x0012	/* uint8 */
-#define CSR_PSKEY_H_HC_FC_MAX_ACL_PKTS				0x0013	/* uint16 */
-#define CSR_PSKEY_H_HC_FC_MAX_SCO_PKTS				0x0014	/* uint16 */
-#define CSR_PSKEY_LC_FC_BUFFER_LOW_WATER_MARK			0x0015	/* lc_fc_lwm */
-#define CSR_PSKEY_LC_MAX_TX_POWER				0x0017	/* int16 */
-#define CSR_PSKEY_TX_GAIN_RAMP					0x001d	/* uint16 */
-#define CSR_PSKEY_LC_POWER_TABLE				0x001e	/* power_setting[] */
-#define CSR_PSKEY_LC_PEER_POWER_PERIOD				0x001f	/* TIME */
-#define CSR_PSKEY_LC_FC_POOLS_LOW_WATER_MARK			0x0020	/* lc_fc_lwm */
-#define CSR_PSKEY_LC_DEFAULT_TX_POWER				0x0021	/* int16 */
-#define CSR_PSKEY_LC_RSSI_GOLDEN_RANGE				0x0022	/* uint8 */
-#define CSR_PSKEY_LC_COMBO_DISABLE_PIO_MASK			0x0028	/* uint16[] */
-#define CSR_PSKEY_LC_COMBO_PRIORITY_PIO_MASK			0x0029	/* uint16[] */
-#define CSR_PSKEY_LC_COMBO_DOT11_CHANNEL_PIO_BASE		0x002a	/* uint16 */
-#define CSR_PSKEY_LC_COMBO_DOT11_BLOCK_CHANNELS			0x002b	/* uint16 */
-#define CSR_PSKEY_LC_MAX_TX_POWER_NO_RSSI			0x002d	/* int8 */
-#define CSR_PSKEY_LC_CONNECTION_RX_WINDOW			0x002e	/* uint16 */
-#define CSR_PSKEY_LC_COMBO_DOT11_TX_PROTECTION_MODE		0x0030	/* uint16 */
-#define CSR_PSKEY_LC_ENHANCED_POWER_TABLE			0x0031	/* enhanced_power_setting[] */
-#define CSR_PSKEY_LC_WIDEBAND_RSSI_CONFIG			0x0032	/* wideband_rssi_config */
-#define CSR_PSKEY_LC_COMBO_DOT11_PRIORITY_LEAD			0x0033	/* uint16 */
-#define CSR_PSKEY_BT_CLOCK_INIT					0x0034	/* uint32 */
-#define CSR_PSKEY_TX_MR_MOD_DELAY				0x0038	/* uint8 */
-#define CSR_PSKEY_RX_MR_SYNC_TIMING				0x0039	/* uint16 */
-#define CSR_PSKEY_RX_MR_SYNC_CONFIG				0x003a	/* uint16 */
-#define CSR_PSKEY_LC_LOST_SYNC_SLOTS				0x003b	/* uint16 */
-#define CSR_PSKEY_RX_MR_SAMP_CONFIG				0x003c	/* uint16 */
-#define CSR_PSKEY_AGC_HYST_LEVELS				0x003d	/* agc_hyst_config */
-#define CSR_PSKEY_RX_LEVEL_LOW_SIGNAL				0x003e	/* uint16 */
-#define CSR_PSKEY_AGC_IQ_LVL_VALUES				0x003f	/* IQ_LVL_VAL[] */
-#define CSR_PSKEY_MR_FTRIM_OFFSET_12DB				0x0040	/* uint16 */
-#define CSR_PSKEY_MR_FTRIM_OFFSET_6DB				0x0041	/* uint16 */
-#define CSR_PSKEY_NO_CAL_ON_BOOT				0x0042	/* bool */
-#define CSR_PSKEY_RSSI_HI_TARGET				0x0043	/* uint8 */
-#define CSR_PSKEY_PREFERRED_MIN_ATTENUATION			0x0044	/* uint8 */
-#define CSR_PSKEY_LC_COMBO_DOT11_PRIORITY_OVERRIDE		0x0045	/* bool */
-#define CSR_PSKEY_LC_MULTISLOT_HOLDOFF				0x0047	/* TIME */
-#define CSR_PSKEY_FREE_KEY_PIGEON_HOLE				0x00c9	/* uint16 */
-#define CSR_PSKEY_LINK_KEY_BD_ADDR0				0x00ca	/* LM_LINK_KEY_BD_ADDR_T */
-#define CSR_PSKEY_LINK_KEY_BD_ADDR1				0x00cb	/* LM_LINK_KEY_BD_ADDR_T */
-#define CSR_PSKEY_LINK_KEY_BD_ADDR2				0x00cc	/* LM_LINK_KEY_BD_ADDR_T */
-#define CSR_PSKEY_LINK_KEY_BD_ADDR3				0x00cd	/* LM_LINK_KEY_BD_ADDR_T */
-#define CSR_PSKEY_LINK_KEY_BD_ADDR4				0x00ce	/* LM_LINK_KEY_BD_ADDR_T */
-#define CSR_PSKEY_LINK_KEY_BD_ADDR5				0x00cf	/* LM_LINK_KEY_BD_ADDR_T */
-#define CSR_PSKEY_LINK_KEY_BD_ADDR6				0x00d0	/* LM_LINK_KEY_BD_ADDR_T */
-#define CSR_PSKEY_LINK_KEY_BD_ADDR7				0x00d1	/* LM_LINK_KEY_BD_ADDR_T */
-#define CSR_PSKEY_LINK_KEY_BD_ADDR8				0x00d2	/* LM_LINK_KEY_BD_ADDR_T */
-#define CSR_PSKEY_LINK_KEY_BD_ADDR9				0x00d3	/* LM_LINK_KEY_BD_ADDR_T */
-#define CSR_PSKEY_LINK_KEY_BD_ADDR10				0x00d4	/* LM_LINK_KEY_BD_ADDR_T */
-#define CSR_PSKEY_LINK_KEY_BD_ADDR11				0x00d5	/* LM_LINK_KEY_BD_ADDR_T */
-#define CSR_PSKEY_LINK_KEY_BD_ADDR12				0x00d6	/* LM_LINK_KEY_BD_ADDR_T */
-#define CSR_PSKEY_LINK_KEY_BD_ADDR13				0x00d7	/* LM_LINK_KEY_BD_ADDR_T */
-#define CSR_PSKEY_LINK_KEY_BD_ADDR14				0x00d8	/* LM_LINK_KEY_BD_ADDR_T */
-#define CSR_PSKEY_LINK_KEY_BD_ADDR15				0x00d9	/* LM_LINK_KEY_BD_ADDR_T */
-#define CSR_PSKEY_ENC_KEY_LMIN					0x00da	/* uint16 */
-#define CSR_PSKEY_ENC_KEY_LMAX					0x00db	/* uint16 */
-#define CSR_PSKEY_LOCAL_SUPPORTED_FEATURES			0x00ef	/* uint16[] = { 0xffff, 0xfe8f, 0xf99b, 0x8000 }*/
-#define CSR_PSKEY_LM_USE_UNIT_KEY				0x00f0	/* bool */
-#define CSR_PSKEY_HCI_NOP_DISABLE				0x00f2	/* bool */
-#define CSR_PSKEY_LM_MAX_EVENT_FILTERS				0x00f4	/* uint8 */
-#define CSR_PSKEY_LM_USE_ENC_MODE_BROADCAST			0x00f5	/* bool */
-#define CSR_PSKEY_LM_TEST_SEND_ACCEPTED_TWICE			0x00f6	/* bool */
-#define CSR_PSKEY_LM_MAX_PAGE_HOLD_TIME				0x00f7	/* uint16 */
-#define CSR_PSKEY_AFH_ADAPTATION_RESPONSE_TIME			0x00f8	/* uint16 */
-#define CSR_PSKEY_AFH_OPTIONS					0x00f9	/* uint16 */
-#define CSR_PSKEY_AFH_RSSI_RUN_PERIOD				0x00fa	/* uint16 */
-#define CSR_PSKEY_AFH_REENABLE_CHANNEL_TIME			0x00fb	/* uint16 */
-#define CSR_PSKEY_NO_DROP_ON_ACR_MS_FAIL			0x00fc	/* bool */
-#define CSR_PSKEY_MAX_PRIVATE_KEYS				0x00fd	/* uint8 */
-#define CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR0			0x00fe	/* LM_LINK_KEY_BD_ADDR_T */
-#define CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR1			0x00ff	/* LM_LINK_KEY_BD_ADDR_T */
-#define CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR2			0x0100	/* LM_LINK_KEY_BD_ADDR_T */
-#define CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR3			0x0101	/* LM_LINK_KEY_BD_ADDR_T */
-#define CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR4			0x0102	/* LM_LINK_KEY_BD_ADDR_T */
-#define CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR5			0x0103	/* LM_LINK_KEY_BD_ADDR_T */
-#define CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR6			0x0104	/* LM_LINK_KEY_BD_ADDR_T */
-#define CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR7			0x0105	/* LM_LINK_KEY_BD_ADDR_T */
-#define CSR_PSKEY_LOCAL_SUPPORTED_COMMANDS			0x0106	/* uint16[] = { 0xffff, 0x03ff, 0xfffe, 0xffff, 0xffff, 0xffff, 0x0ff3, 0xfff8, 0x003f } */
-#define CSR_PSKEY_LM_MAX_ABSENCE_INDEX				0x0107	/* uint8 */
-#define CSR_PSKEY_DEVICE_NAME					0x0108	/* uint16[] */
-#define CSR_PSKEY_AFH_RSSI_THRESHOLD				0x0109	/* uint16 */
-#define CSR_PSKEY_LM_CASUAL_SCAN_INTERVAL			0x010a	/* uint16 */
-#define CSR_PSKEY_AFH_MIN_MAP_CHANGE				0x010b	/* uint16[] */
-#define CSR_PSKEY_AFH_RSSI_LP_RUN_PERIOD			0x010c	/* uint16 */
-#define CSR_PSKEY_HCI_LMP_LOCAL_VERSION				0x010d	/* uint16 */
-#define CSR_PSKEY_LMP_REMOTE_VERSION				0x010e	/* uint8 */
-#define CSR_PSKEY_HOLD_ERROR_MESSAGE_NUMBER			0x0113	/* uint16 */
-#define CSR_PSKEY_DFU_ATTRIBUTES				0x0136	/* uint8 */
-#define CSR_PSKEY_DFU_DETACH_TO					0x0137	/* uint16 */
-#define CSR_PSKEY_DFU_TRANSFER_SIZE				0x0138	/* uint16 */
-#define CSR_PSKEY_DFU_ENABLE					0x0139	/* bool */
-#define CSR_PSKEY_DFU_LIN_REG_ENABLE				0x013a	/* bool */
-#define CSR_PSKEY_DFUENC_VMAPP_PK_MODULUS_MSB			0x015e	/* uint16[] */
-#define CSR_PSKEY_DFUENC_VMAPP_PK_MODULUS_LSB			0x015f	/* uint16[] */
-#define CSR_PSKEY_DFUENC_VMAPP_PK_M_DASH			0x0160	/* uint16 */
-#define CSR_PSKEY_DFUENC_VMAPP_PK_R2N_MSB			0x0161	/* uint16[] */
-#define CSR_PSKEY_DFUENC_VMAPP_PK_R2N_LSB			0x0162	/* uint16[] */
-#define CSR_PSKEY_BCSP_LM_PS_BLOCK				0x0192	/* BCSP_LM_PS_BLOCK */
-#define CSR_PSKEY_HOSTIO_FC_PS_BLOCK				0x0193	/* HOSTIO_FC_PS_BLOCK */
-#define CSR_PSKEY_HOSTIO_PROTOCOL_INFO0				0x0194	/* PROTOCOL_INFO */
-#define CSR_PSKEY_HOSTIO_PROTOCOL_INFO1				0x0195	/* PROTOCOL_INFO */
-#define CSR_PSKEY_HOSTIO_PROTOCOL_INFO2				0x0196	/* PROTOCOL_INFO */
-#define CSR_PSKEY_HOSTIO_PROTOCOL_INFO3				0x0197	/* PROTOCOL_INFO */
-#define CSR_PSKEY_HOSTIO_PROTOCOL_INFO4				0x0198	/* PROTOCOL_INFO */
-#define CSR_PSKEY_HOSTIO_PROTOCOL_INFO5				0x0199	/* PROTOCOL_INFO */
-#define CSR_PSKEY_HOSTIO_PROTOCOL_INFO6				0x019a	/* PROTOCOL_INFO */
-#define CSR_PSKEY_HOSTIO_PROTOCOL_INFO7				0x019b	/* PROTOCOL_INFO */
-#define CSR_PSKEY_HOSTIO_PROTOCOL_INFO8				0x019c	/* PROTOCOL_INFO */
-#define CSR_PSKEY_HOSTIO_PROTOCOL_INFO9				0x019d	/* PROTOCOL_INFO */
-#define CSR_PSKEY_HOSTIO_PROTOCOL_INFO10			0x019e	/* PROTOCOL_INFO */
-#define CSR_PSKEY_HOSTIO_PROTOCOL_INFO11			0x019f	/* PROTOCOL_INFO */
-#define CSR_PSKEY_HOSTIO_PROTOCOL_INFO12			0x01a0	/* PROTOCOL_INFO */
-#define CSR_PSKEY_HOSTIO_PROTOCOL_INFO13			0x01a1	/* PROTOCOL_INFO */
-#define CSR_PSKEY_HOSTIO_PROTOCOL_INFO14			0x01a2	/* PROTOCOL_INFO */
-#define CSR_PSKEY_HOSTIO_PROTOCOL_INFO15			0x01a3	/* PROTOCOL_INFO */
-#define CSR_PSKEY_HOSTIO_UART_RESET_TIMEOUT			0x01a4	/* TIME */
-#define CSR_PSKEY_HOSTIO_USE_HCI_EXTN				0x01a5	/* bool */
-#define CSR_PSKEY_HOSTIO_USE_HCI_EXTN_CCFC			0x01a6	/* bool */
-#define CSR_PSKEY_HOSTIO_HCI_EXTN_PAYLOAD_SIZE			0x01a7	/* uint16 */
-#define CSR_PSKEY_BCSP_LM_CNF_CNT_LIMIT				0x01aa	/* uint16 */
-#define CSR_PSKEY_HOSTIO_MAP_SCO_PCM				0x01ab	/* bool */
-#define CSR_PSKEY_HOSTIO_AWKWARD_PCM_SYNC			0x01ac	/* bool */
-#define CSR_PSKEY_HOSTIO_BREAK_POLL_PERIOD			0x01ad	/* TIME */
-#define CSR_PSKEY_HOSTIO_MIN_UART_HCI_SCO_SIZE			0x01ae	/* uint16 */
-#define CSR_PSKEY_HOSTIO_MAP_SCO_CODEC				0x01b0	/* bool */
-#define CSR_PSKEY_PCM_CVSD_TX_HI_FREQ_BOOST			0x01b1	/* uint16 */
-#define CSR_PSKEY_PCM_CVSD_RX_HI_FREQ_BOOST			0x01b2	/* uint16 */
-#define CSR_PSKEY_PCM_CONFIG32					0x01b3	/* uint32 */
-#define CSR_PSKEY_USE_OLD_BCSP_LE				0x01b4	/* uint16 */
-#define CSR_PSKEY_PCM_CVSD_USE_NEW_FILTER			0x01b5	/* bool */
-#define CSR_PSKEY_PCM_FORMAT					0x01b6	/* uint16 */
-#define CSR_PSKEY_CODEC_OUT_GAIN				0x01b7	/* uint16 */
-#define CSR_PSKEY_CODEC_IN_GAIN					0x01b8	/* uint16 */
-#define CSR_PSKEY_CODEC_PIO					0x01b9	/* uint16 */
-#define CSR_PSKEY_PCM_LOW_JITTER_CONFIG				0x01ba	/* uint32 */
-#define CSR_PSKEY_HOSTIO_SCO_PCM_THRESHOLDS			0x01bb	/* uint16[] */
-#define CSR_PSKEY_HOSTIO_SCO_HCI_THRESHOLDS			0x01bc	/* uint16[] */
-#define CSR_PSKEY_HOSTIO_MAP_SCO_PCM_SLOT			0x01bd	/* uint16 */
-#define CSR_PSKEY_UART_BAUDRATE					0x01be	/* uint16 */
-#define CSR_PSKEY_UART_CONFIG_BCSP				0x01bf	/* uint16 */
-#define CSR_PSKEY_UART_CONFIG_H4				0x01c0	/* uint16 */
-#define CSR_PSKEY_UART_CONFIG_H5				0x01c1	/* uint16 */
-#define CSR_PSKEY_UART_CONFIG_USR				0x01c2	/* uint16 */
-#define CSR_PSKEY_UART_TX_CRCS					0x01c3	/* bool */
-#define CSR_PSKEY_UART_ACK_TIMEOUT				0x01c4	/* uint16 */
-#define CSR_PSKEY_UART_TX_MAX_ATTEMPTS				0x01c5	/* uint16 */
-#define CSR_PSKEY_UART_TX_WINDOW_SIZE				0x01c6	/* uint16 */
-#define CSR_PSKEY_UART_HOST_WAKE				0x01c7	/* uint16[] */
-#define CSR_PSKEY_HOSTIO_THROTTLE_TIMEOUT			0x01c8	/* TIME */
-#define CSR_PSKEY_PCM_ALWAYS_ENABLE				0x01c9	/* bool */
-#define CSR_PSKEY_UART_HOST_WAKE_SIGNAL				0x01ca	/* uint16 */
-#define CSR_PSKEY_UART_CONFIG_H4DS				0x01cb	/* uint16 */
-#define CSR_PSKEY_H4DS_WAKE_DURATION				0x01cc	/* uint16 */
-#define CSR_PSKEY_H4DS_MAXWU					0x01cd	/* uint16 */
-#define CSR_PSKEY_H4DS_LE_TIMER_PERIOD				0x01cf	/* uint16 */
-#define CSR_PSKEY_H4DS_TWU_TIMER_PERIOD				0x01d0	/* uint16 */
-#define CSR_PSKEY_H4DS_UART_IDLE_TIMER_PERIOD			0x01d1	/* uint16 */
-#define CSR_PSKEY_ANA_FTRIM					0x01f6	/* uint16 */
-#define CSR_PSKEY_WD_TIMEOUT					0x01f7	/* TIME */
-#define CSR_PSKEY_WD_PERIOD					0x01f8	/* TIME */
-#define CSR_PSKEY_HOST_INTERFACE				0x01f9	/* phys_bus */
-#define CSR_PSKEY_HQ_HOST_TIMEOUT				0x01fb	/* TIME */
-#define CSR_PSKEY_HQ_ACTIVE					0x01fc	/* bool */
-#define CSR_PSKEY_BCCMD_SECURITY_ACTIVE				0x01fd	/* bool */
-#define CSR_PSKEY_ANA_FREQ					0x01fe	/* uint16 */
-#define CSR_PSKEY_PIO_PROTECT_MASK				0x0202	/* uint16 */
-#define CSR_PSKEY_PMALLOC_SIZES					0x0203	/* uint16[] */
-#define CSR_PSKEY_UART_BAUD_RATE				0x0204	/* uint16 */
-#define CSR_PSKEY_UART_CONFIG					0x0205	/* uint16 */
-#define CSR_PSKEY_STUB						0x0207	/* uint16 */
-#define CSR_PSKEY_TXRX_PIO_CONTROL				0x0209	/* uint16 */
-#define CSR_PSKEY_ANA_RX_LEVEL					0x020b	/* uint16 */
-#define CSR_PSKEY_ANA_RX_FTRIM					0x020c	/* uint16 */
-#define CSR_PSKEY_PSBC_DATA_VERSION				0x020d	/* uint16 */
-#define CSR_PSKEY_PCM0_ATTENUATION				0x020f	/* uint16 */
-#define CSR_PSKEY_LO_LVL_MAX					0x0211	/* uint16 */
-#define CSR_PSKEY_LO_ADC_AMPL_MIN				0x0212	/* uint16 */
-#define CSR_PSKEY_LO_ADC_AMPL_MAX				0x0213	/* uint16 */
-#define CSR_PSKEY_IQ_TRIM_CHANNEL				0x0214	/* uint16 */
-#define CSR_PSKEY_IQ_TRIM_GAIN					0x0215	/* uint16 */
-#define CSR_PSKEY_IQ_TRIM_ENABLE				0x0216	/* iq_trim_enable_flag */
-#define CSR_PSKEY_TX_OFFSET_HALF_MHZ				0x0217	/* int16 */
-#define CSR_PSKEY_GBL_MISC_ENABLES				0x0221	/* uint16 */
-#define CSR_PSKEY_UART_SLEEP_TIMEOUT				0x0222	/* uint16 */
-#define CSR_PSKEY_DEEP_SLEEP_STATE				0x0229	/* deep_sleep_state */
-#define CSR_PSKEY_IQ_ENABLE_PHASE_TRIM				0x022d	/* bool */
-#define CSR_PSKEY_HCI_HANDLE_FREEZE_PERIOD			0x0237	/* TIME */
-#define CSR_PSKEY_MAX_FROZEN_HCI_HANDLES			0x0238	/* uint16 */
-#define CSR_PSKEY_PAGETABLE_DESTRUCTION_DELAY			0x0239	/* TIME */
-#define CSR_PSKEY_IQ_TRIM_PIO_SETTINGS				0x023a	/* uint8 */
-#define CSR_PSKEY_USE_EXTERNAL_CLOCK				0x023b	/* bool */
-#define CSR_PSKEY_DEEP_SLEEP_WAKE_CTS				0x023c	/* uint16 */
-#define CSR_PSKEY_FC_HC2H_FLUSH_DELAY				0x023d	/* TIME */
-#define CSR_PSKEY_RX_HIGHSIDE					0x023e	/* bool */
-#define CSR_PSKEY_TX_PRE_LVL					0x0240	/* uint8 */
-#define CSR_PSKEY_RX_SINGLE_ENDED				0x0242	/* bool */
-#define CSR_PSKEY_TX_FILTER_CONFIG				0x0243	/* uint32 */
-#define CSR_PSKEY_CLOCK_REQUEST_ENABLE				0x0246	/* uint16 */
-#define CSR_PSKEY_RX_MIN_ATTEN					0x0249	/* uint16 */
-#define CSR_PSKEY_XTAL_TARGET_AMPLITUDE				0x024b	/* uint8 */
-#define CSR_PSKEY_PCM_MIN_CPU_CLOCK				0x024d	/* uint16 */
-#define CSR_PSKEY_HOST_INTERFACE_PIO_USB			0x0250	/* uint16 */
-#define CSR_PSKEY_CPU_IDLE_MODE					0x0251	/* cpu_idle_mode */
-#define CSR_PSKEY_DEEP_SLEEP_CLEAR_RTS				0x0252	/* bool */
-#define CSR_PSKEY_RF_RESONANCE_TRIM				0x0254	/* uint16 */
-#define CSR_PSKEY_DEEP_SLEEP_PIO_WAKE				0x0255	/* uint16 */
-#define CSR_PSKEY_DRAIN_BORE_TIMERS				0x0256	/* uint32[] */
-#define CSR_PSKEY_DRAIN_TX_POWER_BASE				0x0257	/* uint16 */
-#define CSR_PSKEY_MODULE_ID					0x0259	/* uint32 */
-#define CSR_PSKEY_MODULE_DESIGN					0x025a	/* uint16 */
-#define CSR_PSKEY_MODULE_SECURITY_CODE				0x025c	/* uint16[] */
-#define CSR_PSKEY_VM_DISABLE					0x025d	/* bool */
-#define CSR_PSKEY_MOD_MANUF0					0x025e	/* uint16[] */
-#define CSR_PSKEY_MOD_MANUF1					0x025f	/* uint16[] */
-#define CSR_PSKEY_MOD_MANUF2					0x0260	/* uint16[] */
-#define CSR_PSKEY_MOD_MANUF3					0x0261	/* uint16[] */
-#define CSR_PSKEY_MOD_MANUF4					0x0262	/* uint16[] */
-#define CSR_PSKEY_MOD_MANUF5					0x0263	/* uint16[] */
-#define CSR_PSKEY_MOD_MANUF6					0x0264	/* uint16[] */
-#define CSR_PSKEY_MOD_MANUF7					0x0265	/* uint16[] */
-#define CSR_PSKEY_MOD_MANUF8					0x0266	/* uint16[] */
-#define CSR_PSKEY_MOD_MANUF9					0x0267	/* uint16[] */
-#define CSR_PSKEY_DUT_VM_DISABLE				0x0268	/* bool */
-#define CSR_PSKEY_USR0						0x028a	/* uint16[] */
-#define CSR_PSKEY_USR1						0x028b	/* uint16[] */
-#define CSR_PSKEY_USR2						0x028c	/* uint16[] */
-#define CSR_PSKEY_USR3						0x028d	/* uint16[] */
-#define CSR_PSKEY_USR4						0x028e	/* uint16[] */
-#define CSR_PSKEY_USR5						0x028f	/* uint16[] */
-#define CSR_PSKEY_USR6						0x0290	/* uint16[] */
-#define CSR_PSKEY_USR7						0x0291	/* uint16[] */
-#define CSR_PSKEY_USR8						0x0292	/* uint16[] */
-#define CSR_PSKEY_USR9						0x0293	/* uint16[] */
-#define CSR_PSKEY_USR10						0x0294	/* uint16[] */
-#define CSR_PSKEY_USR11						0x0295	/* uint16[] */
-#define CSR_PSKEY_USR12						0x0296	/* uint16[] */
-#define CSR_PSKEY_USR13						0x0297	/* uint16[] */
-#define CSR_PSKEY_USR14						0x0298	/* uint16[] */
-#define CSR_PSKEY_USR15						0x0299	/* uint16[] */
-#define CSR_PSKEY_USR16						0x029a	/* uint16[] */
-#define CSR_PSKEY_USR17						0x029b	/* uint16[] */
-#define CSR_PSKEY_USR18						0x029c	/* uint16[] */
-#define CSR_PSKEY_USR19						0x029d	/* uint16[] */
-#define CSR_PSKEY_USR20						0x029e	/* uint16[] */
-#define CSR_PSKEY_USR21						0x029f	/* uint16[] */
-#define CSR_PSKEY_USR22						0x02a0	/* uint16[] */
-#define CSR_PSKEY_USR23						0x02a1	/* uint16[] */
-#define CSR_PSKEY_USR24						0x02a2	/* uint16[] */
-#define CSR_PSKEY_USR25						0x02a3	/* uint16[] */
-#define CSR_PSKEY_USR26						0x02a4	/* uint16[] */
-#define CSR_PSKEY_USR27						0x02a5	/* uint16[] */
-#define CSR_PSKEY_USR28						0x02a6	/* uint16[] */
-#define CSR_PSKEY_USR29						0x02a7	/* uint16[] */
-#define CSR_PSKEY_USR30						0x02a8	/* uint16[] */
-#define CSR_PSKEY_USR31						0x02a9	/* uint16[] */
-#define CSR_PSKEY_USR32						0x02aa	/* uint16[] */
-#define CSR_PSKEY_USR33						0x02ab	/* uint16[] */
-#define CSR_PSKEY_USR34						0x02ac	/* uint16[] */
-#define CSR_PSKEY_USR35						0x02ad	/* uint16[] */
-#define CSR_PSKEY_USR36						0x02ae	/* uint16[] */
-#define CSR_PSKEY_USR37						0x02af	/* uint16[] */
-#define CSR_PSKEY_USR38						0x02b0	/* uint16[] */
-#define CSR_PSKEY_USR39						0x02b1	/* uint16[] */
-#define CSR_PSKEY_USR40						0x02b2	/* uint16[] */
-#define CSR_PSKEY_USR41						0x02b3	/* uint16[] */
-#define CSR_PSKEY_USR42						0x02b4	/* uint16[] */
-#define CSR_PSKEY_USR43						0x02b5	/* uint16[] */
-#define CSR_PSKEY_USR44						0x02b6	/* uint16[] */
-#define CSR_PSKEY_USR45						0x02b7	/* uint16[] */
-#define CSR_PSKEY_USR46						0x02b8	/* uint16[] */
-#define CSR_PSKEY_USR47						0x02b9	/* uint16[] */
-#define CSR_PSKEY_USR48						0x02ba	/* uint16[] */
-#define CSR_PSKEY_USR49						0x02bb	/* uint16[] */
-#define CSR_PSKEY_USB_VERSION					0x02bc	/* uint16 */
-#define CSR_PSKEY_USB_DEVICE_CLASS_CODES			0x02bd	/* usbclass */
-#define CSR_PSKEY_USB_VENDOR_ID					0x02be	/* uint16 */
-#define CSR_PSKEY_USB_PRODUCT_ID				0x02bf	/* uint16 */
-#define CSR_PSKEY_USB_MANUF_STRING				0x02c1	/* unicodestring */
-#define CSR_PSKEY_USB_PRODUCT_STRING				0x02c2	/* unicodestring */
-#define CSR_PSKEY_USB_SERIAL_NUMBER_STRING			0x02c3	/* unicodestring */
-#define CSR_PSKEY_USB_CONFIG_STRING				0x02c4	/* unicodestring */
-#define CSR_PSKEY_USB_ATTRIBUTES				0x02c5	/* uint8 */
-#define CSR_PSKEY_USB_MAX_POWER					0x02c6	/* uint16 */
-#define CSR_PSKEY_USB_BT_IF_CLASS_CODES				0x02c7	/* usbclass */
-#define CSR_PSKEY_USB_LANGID					0x02c9	/* uint16 */
-#define CSR_PSKEY_USB_DFU_CLASS_CODES				0x02ca	/* usbclass */
-#define CSR_PSKEY_USB_DFU_PRODUCT_ID				0x02cb	/* uint16 */
-#define CSR_PSKEY_USB_PIO_DETACH				0x02ce	/* uint16 */
-#define CSR_PSKEY_USB_PIO_WAKEUP				0x02cf	/* uint16 */
-#define CSR_PSKEY_USB_PIO_PULLUP				0x02d0	/* uint16 */
-#define CSR_PSKEY_USB_PIO_VBUS					0x02d1	/* uint16 */
-#define CSR_PSKEY_USB_PIO_WAKE_TIMEOUT				0x02d2	/* uint16 */
-#define CSR_PSKEY_USB_PIO_RESUME				0x02d3	/* uint16 */
-#define CSR_PSKEY_USB_BT_SCO_IF_CLASS_CODES			0x02d4	/* usbclass */
-#define CSR_PSKEY_USB_SUSPEND_PIO_LEVEL				0x02d5	/* uint16 */
-#define CSR_PSKEY_USB_SUSPEND_PIO_DIR				0x02d6	/* uint16 */
-#define CSR_PSKEY_USB_SUSPEND_PIO_MASK				0x02d7	/* uint16 */
-#define CSR_PSKEY_USB_ENDPOINT_0_MAX_PACKET_SIZE		0x02d8	/* uint8 */
-#define CSR_PSKEY_USB_CONFIG					0x02d9	/* uint16 */
-#define CSR_PSKEY_RADIOTEST_ATTEN_INIT				0x0320	/* uint16 */
-#define CSR_PSKEY_RADIOTEST_FIRST_TRIM_TIME			0x0326	/* TIME */
-#define CSR_PSKEY_RADIOTEST_SUBSEQUENT_TRIM_TIME		0x0327	/* TIME */
-#define CSR_PSKEY_RADIOTEST_LO_LVL_TRIM_ENABLE			0x0328	/* bool */
-#define CSR_PSKEY_RADIOTEST_DISABLE_MODULATION			0x032c	/* bool */
-#define CSR_PSKEY_RFCOMM_FCON_THRESHOLD				0x0352	/* uint16 */
-#define CSR_PSKEY_RFCOMM_FCOFF_THRESHOLD			0x0353	/* uint16 */
-#define CSR_PSKEY_IPV6_STATIC_ADDR				0x0354	/* uint16[] */
-#define CSR_PSKEY_IPV4_STATIC_ADDR				0x0355	/* uint32 */
-#define CSR_PSKEY_IPV6_STATIC_PREFIX_LEN			0x0356	/* uint8 */
-#define CSR_PSKEY_IPV6_STATIC_ROUTER_ADDR			0x0357	/* uint16[] */
-#define CSR_PSKEY_IPV4_STATIC_SUBNET_MASK			0x0358	/* uint32 */
-#define CSR_PSKEY_IPV4_STATIC_ROUTER_ADDR			0x0359	/* uint32 */
-#define CSR_PSKEY_MDNS_NAME					0x035a	/* char[] */
-#define CSR_PSKEY_FIXED_PIN					0x035b	/* uint8[] */
-#define CSR_PSKEY_MDNS_PORT					0x035c	/* uint16 */
-#define CSR_PSKEY_MDNS_TTL					0x035d	/* uint8 */
-#define CSR_PSKEY_MDNS_IPV4_ADDR				0x035e	/* uint32 */
-#define CSR_PSKEY_ARP_CACHE_TIMEOUT				0x035f	/* uint16 */
-#define CSR_PSKEY_HFP_POWER_TABLE				0x0360	/* uint16[] */
-#define CSR_PSKEY_DRAIN_BORE_TIMER_COUNTERS			0x03e7	/* uint32[] */
-#define CSR_PSKEY_DRAIN_BORE_COUNTERS				0x03e6	/* uint32[] */
-#define CSR_PSKEY_LOOP_FILTER_TRIM				0x03e4	/* uint16 */
-#define CSR_PSKEY_DRAIN_BORE_CURRENT_PEAK			0x03e3	/* uint32[] */
-#define CSR_PSKEY_VM_E2_CACHE_LIMIT				0x03e2	/* uint16 */
-#define CSR_PSKEY_FORCE_16MHZ_REF_PIO				0x03e1	/* uint16 */
-#define CSR_PSKEY_CDMA_LO_REF_LIMITS				0x03df	/* uint16 */
-#define CSR_PSKEY_CDMA_LO_ERROR_LIMITS				0x03de	/* uint16 */
-#define CSR_PSKEY_CLOCK_STARTUP_DELAY				0x03dd	/* uint16 */
-#define CSR_PSKEY_DEEP_SLEEP_CORRECTION_FACTOR			0x03dc	/* int16 */
-#define CSR_PSKEY_TEMPERATURE_CALIBRATION			0x03db	/* temperature_calibration */
-#define CSR_PSKEY_TEMPERATURE_VS_DELTA_INTERNAL_PA		0x03da	/* temperature_calibration[] */
-#define CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_PRE_LVL		0x03d9	/* temperature_calibration[] */
-#define CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_BB			0x03d8	/* temperature_calibration[] */
-#define CSR_PSKEY_TEMPERATURE_VS_DELTA_ANA_FTRIM		0x03d7	/* temperature_calibration[] */
-#define CSR_PSKEY_TEST_DELTA_OFFSET				0x03d6	/* uint16 */
-#define CSR_PSKEY_RX_DYNAMIC_LVL_OFFSET				0x03d4	/* uint16 */
-#define CSR_PSKEY_TEST_FORCE_OFFSET				0x03d3	/* bool */
-#define CSR_PSKEY_RF_TRAP_BAD_DIVISION_RATIOS			0x03cf	/* uint16 */
-#define CSR_PSKEY_RADIOTEST_CDMA_LO_REF_LIMITS			0x03ce	/* uint16 */
-#define CSR_PSKEY_INITIAL_BOOTMODE				0x03cd	/* int16 */
-#define CSR_PSKEY_ONCHIP_HCI_CLIENT				0x03cc	/* bool */
-#define CSR_PSKEY_RX_ATTEN_BACKOFF				0x03ca	/* uint16 */
-#define CSR_PSKEY_RX_ATTEN_UPDATE_RATE				0x03c9	/* uint16 */
-#define CSR_PSKEY_SYNTH_TXRX_THRESHOLDS				0x03c7	/* uint16 */
-#define CSR_PSKEY_MIN_WAIT_STATES				0x03c6	/* uint16 */
-#define CSR_PSKEY_RSSI_CORRECTION				0x03c5	/* int8 */
-#define CSR_PSKEY_SCHED_THROTTLE_TIMEOUT			0x03c4	/* TIME */
-#define CSR_PSKEY_DEEP_SLEEP_USE_EXTERNAL_CLOCK			0x03c3	/* bool */
-#define CSR_PSKEY_TRIM_RADIO_FILTERS				0x03c2	/* uint16 */
-#define CSR_PSKEY_TRANSMIT_OFFSET				0x03c1	/* int16 */
-#define CSR_PSKEY_USB_VM_CONTROL				0x03c0	/* bool */
-#define CSR_PSKEY_MR_ANA_RX_FTRIM				0x03bf	/* uint16 */
-#define CSR_PSKEY_I2C_CONFIG					0x03be	/* uint16 */
-#define CSR_PSKEY_IQ_LVL_RX					0x03bd	/* uint16 */
-#define CSR_PSKEY_MR_TX_FILTER_CONFIG				0x03bb	/* uint32 */
-#define CSR_PSKEY_MR_TX_CONFIG2					0x03ba	/* uint16 */
-#define CSR_PSKEY_USB_DONT_RESET_BOOTMODE_ON_HOST_RESET		0x03b9	/* bool */
-#define CSR_PSKEY_LC_USE_THROTTLING				0x03b8	/* bool */
-#define CSR_PSKEY_CHARGER_TRIM					0x03b7	/* uint16 */
-#define CSR_PSKEY_CLOCK_REQUEST_FEATURES			0x03b6	/* uint16 */
-#define CSR_PSKEY_TRANSMIT_OFFSET_CLASS1			0x03b4	/* int16 */
-#define CSR_PSKEY_TX_AVOID_PA_CLASS1_PIO			0x03b3	/* uint16 */
-#define CSR_PSKEY_MR_PIO_CONFIG					0x03b2	/* uint16 */
-#define CSR_PSKEY_UART_CONFIG2					0x03b1	/* uint8 */
-#define CSR_PSKEY_CLASS1_IQ_LVL					0x03b0	/* uint16 */
-#define CSR_PSKEY_CLASS1_TX_CONFIG2				0x03af	/* uint16 */
-#define CSR_PSKEY_TEMPERATURE_VS_DELTA_INTERNAL_PA_CLASS1	0x03ae	/* temperature_calibration[] */
-#define CSR_PSKEY_TEMPERATURE_VS_DELTA_EXTERNAL_PA_CLASS1	0x03ad	/* temperature_calibration[] */
-#define CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_PRE_LVL_MR		0x03ac	/* temperature_calibration[] */
-#define CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_BB_MR_HEADER		0x03ab	/* temperature_calibration[] */
-#define CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_BB_MR_PAYLOAD		0x03aa	/* temperature_calibration[] */
-#define CSR_PSKEY_RX_MR_EQ_TAPS					0x03a9	/* uint16[] */
-#define CSR_PSKEY_TX_PRE_LVL_CLASS1				0x03a8	/* uint8 */
-#define CSR_PSKEY_ANALOGUE_ATTENUATOR				0x03a7	/* bool */
-#define CSR_PSKEY_MR_RX_FILTER_TRIM				0x03a6	/* uint16 */
-#define CSR_PSKEY_MR_RX_FILTER_RESPONSE				0x03a5	/* int16[] */
-#define CSR_PSKEY_PIO_WAKEUP_STATE				0x039f	/* uint16 */
-#define CSR_PSKEY_MR_TX_IF_ATTEN_OFF_TEMP			0x0394	/* int16 */
-#define CSR_PSKEY_LO_DIV_LATCH_BYPASS				0x0393	/* bool */
-#define CSR_PSKEY_LO_VCO_STANDBY				0x0392	/* bool */
-#define CSR_PSKEY_SLOW_CLOCK_FILTER_SHIFT			0x0391	/* uint16 */
-#define CSR_PSKEY_SLOW_CLOCK_FILTER_DIVIDER			0x0390	/* uint16 */
-#define CSR_PSKEY_USB_ATTRIBUTES_POWER				0x03f2	/* bool */
-#define CSR_PSKEY_USB_ATTRIBUTES_WAKEUP				0x03f3	/* bool */
-#define CSR_PSKEY_DFU_ATTRIBUTES_MANIFESTATION_TOLERANT		0x03f4	/* bool */
-#define CSR_PSKEY_DFU_ATTRIBUTES_CAN_UPLOAD			0x03f5	/* bool */
-#define CSR_PSKEY_DFU_ATTRIBUTES_CAN_DOWNLOAD			0x03f6	/* bool */
-#define CSR_PSKEY_UART_CONFIG_STOP_BITS				0x03fc	/* bool */
-#define CSR_PSKEY_UART_CONFIG_PARITY_BIT			0x03fd	/* uint16 */
-#define CSR_PSKEY_UART_CONFIG_FLOW_CTRL_EN			0x03fe	/* bool */
-#define CSR_PSKEY_UART_CONFIG_RTS_AUTO_EN			0x03ff	/* bool */
-#define CSR_PSKEY_UART_CONFIG_RTS				0x0400	/* bool */
-#define CSR_PSKEY_UART_CONFIG_TX_ZERO_EN			0x0401	/* bool */
-#define CSR_PSKEY_UART_CONFIG_NON_BCSP_EN			0x0402	/* bool */
-#define CSR_PSKEY_UART_CONFIG_RX_RATE_DELAY			0x0403	/* uint16 */
-#define CSR_PSKEY_UART_SEQ_TIMEOUT				0x0405	/* uint16 */
-#define CSR_PSKEY_UART_SEQ_RETRIES				0x0406	/* uint16 */
-#define CSR_PSKEY_UART_SEQ_WINSIZE				0x0407	/* uint16 */
-#define CSR_PSKEY_UART_USE_CRC_ON_TX				0x0408	/* bool */
-#define CSR_PSKEY_UART_HOST_INITIAL_STATE			0x0409	/* hwakeup_state */
-#define CSR_PSKEY_UART_HOST_ATTENTION_SPAN			0x040a	/* uint16 */
-#define CSR_PSKEY_UART_HOST_WAKEUP_TIME				0x040b	/* uint16 */
-#define CSR_PSKEY_UART_HOST_WAKEUP_WAIT				0x040c	/* uint16 */
-#define CSR_PSKEY_BCSP_LM_MODE					0x0410	/* uint16 */
-#define CSR_PSKEY_BCSP_LM_SYNC_RETRIES				0x0411	/* uint16 */
-#define CSR_PSKEY_BCSP_LM_TSHY					0x0412	/* uint16 */
-#define CSR_PSKEY_UART_DFU_CONFIG_STOP_BITS			0x0417	/* bool */
-#define CSR_PSKEY_UART_DFU_CONFIG_PARITY_BIT			0x0418	/* uint16 */
-#define CSR_PSKEY_UART_DFU_CONFIG_FLOW_CTRL_EN			0x0419	/* bool */
-#define CSR_PSKEY_UART_DFU_CONFIG_RTS_AUTO_EN			0x041a	/* bool */
-#define CSR_PSKEY_UART_DFU_CONFIG_RTS				0x041b	/* bool */
-#define CSR_PSKEY_UART_DFU_CONFIG_TX_ZERO_EN			0x041c	/* bool */
-#define CSR_PSKEY_UART_DFU_CONFIG_NON_BCSP_EN			0x041d	/* bool */
-#define CSR_PSKEY_UART_DFU_CONFIG_RX_RATE_DELAY			0x041e	/* uint16 */
-#define CSR_PSKEY_AMUX_AIO0					0x041f	/* ana_amux_sel */
-#define CSR_PSKEY_AMUX_AIO1					0x0420	/* ana_amux_sel */
-#define CSR_PSKEY_AMUX_AIO2					0x0421	/* ana_amux_sel */
-#define CSR_PSKEY_AMUX_AIO3					0x0422	/* ana_amux_sel */
-#define CSR_PSKEY_LOCAL_NAME_SIMPLIFIED				0x0423	/* local_name_complete */
-#define CSR_PSKEY_EXTENDED_STUB					0x2001	/* uint16 */
-
-char *csr_builddeftostr(uint16_t def);
-char *csr_buildidtostr(uint16_t id);
-char *csr_chipvertostr(uint16_t ver, uint16_t rev);
-char *csr_pskeytostr(uint16_t pskey);
-char *csr_pskeytoval(uint16_t pskey);
-
-int csr_open_hci(char *device);
-int csr_read_hci(uint16_t varid, uint8_t *value, uint16_t length);
-int csr_write_hci(uint16_t varid, uint8_t *value, uint16_t length);
-void csr_close_hci(void);
-
-int csr_open_usb(char *device);
-int csr_read_usb(uint16_t varid, uint8_t *value, uint16_t length);
-int csr_write_usb(uint16_t varid, uint8_t *value, uint16_t length);
-void csr_close_usb(void);
-
-int csr_open_bcsp(char *device, speed_t bcsp_rate);
-int csr_read_bcsp(uint16_t varid, uint8_t *value, uint16_t length);
-int csr_write_bcsp(uint16_t varid, uint8_t *value, uint16_t length);
-void csr_close_bcsp(void);
-
-int csr_open_h4(char *device);
-int csr_read_h4(uint16_t varid, uint8_t *value, uint16_t length);
-int csr_write_h4(uint16_t varid, uint8_t *value, uint16_t length);
-void csr_close_h4(void);
-
-int csr_open_3wire(char *device);
-int csr_read_3wire(uint16_t varid, uint8_t *value, uint16_t length);
-int csr_write_3wire(uint16_t varid, uint8_t *value, uint16_t length);
-void csr_close_3wire(void);
-
-int csr_write_varid_valueless(int dd, uint16_t seqnum, uint16_t varid);
-int csr_write_varid_complex(int dd, uint16_t seqnum, uint16_t varid, uint8_t *value, uint16_t length);
-int csr_read_varid_complex(int dd, uint16_t seqnum, uint16_t varid, uint8_t *value, uint16_t length);
-int csr_read_varid_uint16(int dd, uint16_t seqnum, uint16_t varid, uint16_t *value);
-int csr_read_varid_uint32(int dd, uint16_t seqnum, uint16_t varid, uint32_t *value);
-int csr_read_pskey_complex(int dd, uint16_t seqnum, uint16_t pskey, uint16_t stores, uint8_t *value, uint16_t length);
-int csr_write_pskey_complex(int dd, uint16_t seqnum, uint16_t pskey, uint16_t stores, uint8_t *value, uint16_t length);
-int csr_read_pskey_uint16(int dd, uint16_t seqnum, uint16_t pskey, uint16_t stores, uint16_t *value);
-int csr_write_pskey_uint16(int dd, uint16_t seqnum, uint16_t pskey, uint16_t stores, uint16_t value);
-int csr_read_pskey_uint32(int dd, uint16_t seqnum, uint16_t pskey, uint16_t stores, uint32_t *value);
-int csr_write_pskey_uint32(int dd, uint16_t seqnum, uint16_t pskey, uint16_t stores, uint32_t value);
-
-int psr_put(uint16_t pskey, uint8_t *value, uint16_t size);
-int psr_get(uint16_t *pskey, uint8_t *value, uint16_t *size);
-int psr_read(const char *filename);
-int psr_print(void);
diff --git a/tools/csr_3wire.c b/tools/csr_3wire.c
deleted file mode 100644
index 33fcf389a..000000000
--- a/tools/csr_3wire.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- *
- *  BlueZ - Bluetooth protocol stack for Linux
- *
- *  Copyright (C) 2004-2010  Marcel Holtmann <marcel@holtmann.org>
- *
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <errno.h>
-#include <stdint.h>
-
-#include "csr.h"
-
-static uint16_t seqnum = 0x0000;
-
-int csr_open_3wire(char *device)
-{
-	fprintf(stderr, "Transport not implemented\n");
-
-	return -1;
-}
-
-static int do_command(uint16_t command, uint16_t seqnum, uint16_t varid, uint8_t *value, uint16_t length)
-{
-	errno = EIO;
-
-	return -1;
-}
-
-int csr_read_3wire(uint16_t varid, uint8_t *value, uint16_t length)
-{
-	return do_command(0x0000, seqnum++, varid, value, length);
-}
-
-int csr_write_3wire(uint16_t varid, uint8_t *value, uint16_t length)
-{
-	return do_command(0x0002, seqnum++, varid, value, length);
-}
-
-void csr_close_3wire(void)
-{
-}
diff --git a/tools/csr_bcsp.c b/tools/csr_bcsp.c
deleted file mode 100644
index e3eea34df..000000000
--- a/tools/csr_bcsp.c
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- *
- *  BlueZ - Bluetooth protocol stack for Linux
- *
- *  Copyright (C) 2004-2010  Marcel Holtmann <marcel@holtmann.org>
- *
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#define _GNU_SOURCE
-#include <stdio.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <string.h>
-#include <stdint.h>
-#include <termios.h>
-
-#include "csr.h"
-#include "ubcsp.h"
-
-static uint16_t seqnum = 0x0000;
-
-static int fd = -1;
-
-static struct ubcsp_packet send_packet;
-static uint8_t send_buffer[512];
-
-static struct ubcsp_packet receive_packet;
-static uint8_t receive_buffer[512];
-
-int csr_open_bcsp(char *device, speed_t bcsp_rate)
-{
-	struct termios ti;
-	uint8_t delay, activity = 0x00;
-	int timeout = 0;
-
-	if (!device)
-		device = "/dev/ttyS0";
-
-	fd = open(device, O_RDWR | O_NOCTTY);
-	if (fd < 0) {
-		fprintf(stderr, "Can't open serial port: %s (%d)\n",
-						strerror(errno), errno);
-		return -1;
-	}
-
-	tcflush(fd, TCIOFLUSH);
-
-	if (tcgetattr(fd, &ti) < 0) {
-		fprintf(stderr, "Can't get port settings: %s (%d)\n",
-						strerror(errno), errno);
-		close(fd);
-		return -1;
-	}
-
-	cfmakeraw(&ti);
-
-	ti.c_cflag |=  CLOCAL;
-	ti.c_cflag &= ~CRTSCTS;
-	ti.c_cflag |=  PARENB;
-	ti.c_cflag &= ~PARODD;
-	ti.c_cflag &= ~CSIZE;
-	ti.c_cflag |=  CS8;
-	ti.c_cflag &= ~CSTOPB;
-
-	ti.c_cc[VMIN] = 1;
-	ti.c_cc[VTIME] = 0;
-
-	cfsetospeed(&ti, bcsp_rate);
-
-	if (tcsetattr(fd, TCSANOW, &ti) < 0) {
-		fprintf(stderr, "Can't change port settings: %s (%d)\n",
-						strerror(errno), errno);
-		close(fd);
-		return -1;
-	}
-
-	tcflush(fd, TCIOFLUSH);
-
-	if (fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) | O_NONBLOCK) < 0) {
-		fprintf(stderr, "Can't set non blocking mode: %s (%d)\n",
-						strerror(errno), errno);
-		close(fd);
-		return -1;
-	}
-
-	memset(&send_packet, 0, sizeof(send_packet));
-	memset(&receive_packet, 0, sizeof(receive_packet));
-
-	ubcsp_initialize();
-
-	send_packet.length = 512;
-	send_packet.payload = send_buffer;
-
-	receive_packet.length = 512;
-	receive_packet.payload = receive_buffer;
-
-	ubcsp_receive_packet(&receive_packet);
-
-	while (1) {
-		delay = ubcsp_poll(&activity);
-
-		if (activity & UBCSP_PACKET_SENT)
-			break;
-
-		if (delay) {
-			usleep(delay * 100);
-
-			if (timeout++ > 5000) {
-				fprintf(stderr, "Initialization timed out\n");
-				return -1;
-			}
-		}
-	}
-
-	return 0;
-}
-
-void put_uart(uint8_t ch)
-{
-	if (write(fd, &ch, 1) < 0)
-		fprintf(stderr, "UART write error\n");
-}
-
-uint8_t get_uart(uint8_t *ch)
-{
-	int res = read(fd, ch, 1);
-	return res > 0 ? res : 0;
-}
-
-static int do_command(uint16_t command, uint16_t seqnum, uint16_t varid, uint8_t *value, uint16_t length)
-{
-	unsigned char cp[254], rp[254];
-	uint8_t cmd[10];
-	uint16_t size;
-	uint8_t delay, activity = 0x00;
-	int timeout = 0, sent = 0;
-
-	size = (length < 8) ? 9 : ((length + 1) / 2) + 5;
-
-	cmd[0] = command & 0xff;
-	cmd[1] = command >> 8;
-	cmd[2] = size & 0xff;
-	cmd[3] = size >> 8;
-	cmd[4] = seqnum & 0xff;
-	cmd[5] = seqnum >> 8;
-	cmd[6] = varid & 0xff;
-	cmd[7] = varid >> 8;
-	cmd[8] = 0x00;
-	cmd[9] = 0x00;
-
-	memset(cp, 0, sizeof(cp));
-	cp[0] = 0x00;
-	cp[1] = 0xfc;
-	cp[2] = (size * 2) + 1;
-	cp[3] = 0xc2;
-	memcpy(cp + 4, cmd, sizeof(cmd));
-	memcpy(cp + 14, value, length);
-
-	receive_packet.length = 512;
-	ubcsp_receive_packet(&receive_packet);
-
-	send_packet.channel  = 5;
-	send_packet.reliable = 1;
-	send_packet.length   = (size * 2) + 4;
-	memcpy(send_packet.payload, cp, (size * 2) + 4);
-
-	ubcsp_send_packet(&send_packet);
-
-	while (1) {
-		delay = ubcsp_poll(&activity);
-
-		if (activity & UBCSP_PACKET_SENT) {
-			switch (varid) {
-			case CSR_VARID_COLD_RESET:
-			case CSR_VARID_WARM_RESET:
-			case CSR_VARID_COLD_HALT:
-			case CSR_VARID_WARM_HALT:
-				return 0;
-			}
-
-			sent = 1;
-			timeout = 0;
-		}
-
-		if (activity & UBCSP_PACKET_RECEIVED) {
-			if (sent && receive_packet.channel == 5 &&
-					receive_packet.payload[0] == 0xff) {
-				memcpy(rp, receive_packet.payload,
-							receive_packet.length);
-				break;
-			}
-
-			receive_packet.length = 512;
-			ubcsp_receive_packet(&receive_packet);
-			timeout = 0;
-		}
-
-		if (delay) {
-			usleep(delay * 100);
-
-			if (timeout++ > 5000) {
-				fprintf(stderr, "Operation timed out\n");
-				errno = ETIMEDOUT;
-				return -1;
-			}
-		}
-	}
-
-	if (rp[0] != 0xff || rp[2] != 0xc2) {
-		errno = EIO;
-		return -1;
-	}
-
-	if ((rp[11] + (rp[12] << 8)) != 0) {
-		errno = ENXIO;
-		return -1;
-	}
-
-	memcpy(value, rp + 13, length);
-
-	return 0;
-}
-
-int csr_read_bcsp(uint16_t varid, uint8_t *value, uint16_t length)
-{
-	return do_command(0x0000, seqnum++, varid, value, length);
-}
-
-int csr_write_bcsp(uint16_t varid, uint8_t *value, uint16_t length)
-{
-	return do_command(0x0002, seqnum++, varid, value, length);
-}
-
-void csr_close_bcsp(void)
-{
-	close(fd);
-}
diff --git a/tools/csr_h4.c b/tools/csr_h4.c
deleted file mode 100644
index 2dcaec1e5..000000000
--- a/tools/csr_h4.c
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- *
- *  BlueZ - Bluetooth protocol stack for Linux
- *
- *  Copyright (C) 2004-2010  Marcel Holtmann <marcel@holtmann.org>
- *
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#define _GNU_SOURCE
-#include <stdio.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <string.h>
-#include <stdint.h>
-#include <termios.h>
-
-#include "csr.h"
-
-static uint16_t seqnum = 0x0000;
-
-static int fd = -1;
-
-int csr_open_h4(char *device)
-{
-	struct termios ti;
-
-	if (!device)
-		device = "/dev/ttyS0";
-
-	fd = open(device, O_RDWR | O_NOCTTY);
-	if (fd < 0) {
-		fprintf(stderr, "Can't open serial port: %s (%d)\n",
-						strerror(errno), errno);
-		return -1;
-	}
-
-	tcflush(fd, TCIOFLUSH);
-
-	if (tcgetattr(fd, &ti) < 0) {
-		fprintf(stderr, "Can't get port settings: %s (%d)\n",
-						strerror(errno), errno);
-		close(fd);
-		return -1;
-	}
-
-	cfmakeraw(&ti);
-
-	ti.c_cflag |= CLOCAL;
-	ti.c_cflag |= CRTSCTS;
-
-	cfsetospeed(&ti, B38400);
-
-	if (tcsetattr(fd, TCSANOW, &ti) < 0) {
-		fprintf(stderr, "Can't change port settings: %s (%d)\n",
-						strerror(errno), errno);
-		close(fd);
-		return -1;
-	}
-
-	tcflush(fd, TCIOFLUSH);
-
-	return 0;
-}
-
-static int do_command(uint16_t command, uint16_t seqnum, uint16_t varid, uint8_t *value, uint16_t length)
-{
-	unsigned char cp[254], rp[254];
-	uint8_t cmd[10];
-	uint16_t size;
-	int len, offset = 3;
-
-	size = (length < 8) ? 9 : ((length + 1) / 2) + 5;
-
-	cmd[0] = command & 0xff;
-	cmd[1] = command >> 8;
-	cmd[2] = size & 0xff;
-	cmd[3] = size >> 8;
-	cmd[4] = seqnum & 0xff;
-	cmd[5] = seqnum >> 8;
-	cmd[6] = varid & 0xff;
-	cmd[7] = varid >> 8;
-	cmd[8] = 0x00;
-	cmd[9] = 0x00;
-
-	memset(cp, 0, sizeof(cp));
-	cp[0] = 0x01;
-	cp[1] = 0x00;
-	cp[2] = 0xfc;
-	cp[3] = (size * 2) + 1;
-	cp[4] = 0xc2;
-	memcpy(cp + 5, cmd, sizeof(cmd));
-	memcpy(cp + 15, value, length);
-
-	if (write(fd, cp, (size * 2) + 5) < 0)
-		return -1;
-
-	switch (varid) {
-	case CSR_VARID_COLD_RESET:
-	case CSR_VARID_WARM_RESET:
-	case CSR_VARID_COLD_HALT:
-	case CSR_VARID_WARM_HALT:
-		return 0;
-	}
-
-	do {
-		if (read(fd, rp, 1) < 1)
-			return -1;
-	} while (rp[0] != 0x04);
-
-	if (read(fd, rp + 1, 2) < 2)
-		return -1;
-
-	do {
-		len = read(fd, rp + offset, sizeof(rp) - offset);
-		offset += len;
-	} while (offset < rp[2] + 3);
-
-	if (rp[0] != 0x04 || rp[1] != 0xff || rp[3] != 0xc2) {
-		errno = EIO;
-		return -1;
-	}
-
-	if ((rp[12] + (rp[13] << 8)) != 0) {
-		errno = ENXIO;
-		return -1;
-	}
-
-	memcpy(value, rp + 14, length);
-
-	return 0;
-}
-
-int csr_read_h4(uint16_t varid, uint8_t *value, uint16_t length)
-{
-	return do_command(0x0000, seqnum++, varid, value, length);
-}
-
-int csr_write_h4(uint16_t varid, uint8_t *value, uint16_t length)
-{
-	return do_command(0x0002, seqnum++, varid, value, length);
-}
-
-void csr_close_h4(void)
-{
-	close(fd);
-}
diff --git a/tools/csr_hci.c b/tools/csr_hci.c
deleted file mode 100644
index d2e4ab9c6..000000000
--- a/tools/csr_hci.c
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- *
- *  BlueZ - Bluetooth protocol stack for Linux
- *
- *  Copyright (C) 2004-2010  Marcel Holtmann <marcel@holtmann.org>
- *
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <errno.h>
-#include <string.h>
-#include <sys/socket.h>
-
-#include "lib/bluetooth.h"
-#include "lib/hci.h"
-#include "lib/hci_lib.h"
-
-#include "csr.h"
-
-static uint16_t seqnum = 0x0000;
-
-static int dd = -1;
-
-int csr_open_hci(char *device)
-{
-	struct hci_dev_info di;
-	struct hci_version ver;
-	int dev = 0;
-
-	if (device) {
-		dev = hci_devid(device);
-		if (dev < 0) {
-			fprintf(stderr, "Device not available\n");
-			return -1;
-		}
-	}
-
-	dd = hci_open_dev(dev);
-	if (dd < 0) {
-		fprintf(stderr, "Can't open device hci%d: %s (%d)\n",
-						dev, strerror(errno), errno);
-		return -1;
-	}
-
-	if (hci_devinfo(dev, &di) < 0) {
-		fprintf(stderr, "Can't get device info for hci%d: %s (%d)\n",
-						dev, strerror(errno), errno);
-		hci_close_dev(dd);
-		return -1;
-	}
-
-	if (hci_read_local_version(dd, &ver, 1000) < 0) {
-		fprintf(stderr, "Can't read version info for hci%d: %s (%d)\n",
-						dev, strerror(errno), errno);
-		hci_close_dev(dd);
-		return -1;
-	}
-
-	if (ver.manufacturer != 10) {
-		fprintf(stderr, "Unsupported manufacturer\n");
-		hci_close_dev(dd);
-		return -1;
-	}
-
-	return 0;
-}
-
-static int do_command(uint16_t command, uint16_t seqnum, uint16_t varid, uint8_t *value, uint16_t length)
-{
-	unsigned char cp[254], rp[254];
-	struct hci_request rq;
-	uint8_t cmd[10];
-	uint16_t size;
-
-	size = (length < 8) ? 9 : ((length + 1) / 2) + 5;
-
-	cmd[0] = command & 0xff;
-	cmd[1] = command >> 8;
-	cmd[2] = size & 0xff;
-	cmd[3] = size >> 8;
-	cmd[4] = seqnum & 0xff;
-	cmd[5] = seqnum >> 8;
-	cmd[6] = varid & 0xff;
-	cmd[7] = varid >> 8;
-	cmd[8] = 0x00;
-	cmd[9] = 0x00;
-
-	memset(cp, 0, sizeof(cp));
-	cp[0] = 0xc2;
-	memcpy(cp + 1, cmd, sizeof(cmd));
-	memcpy(cp + 11, value, length);
-
-	switch (varid) {
-	case CSR_VARID_COLD_RESET:
-	case CSR_VARID_WARM_RESET:
-	case CSR_VARID_COLD_HALT:
-	case CSR_VARID_WARM_HALT:
-		return hci_send_cmd(dd, OGF_VENDOR_CMD, 0x00, (size * 2) + 1, cp);
-	}
-
-	memset(&rq, 0, sizeof(rq));
-	rq.ogf    = OGF_VENDOR_CMD;
-	rq.ocf    = 0x00;
-	rq.event  = EVT_VENDOR;
-	rq.cparam = cp;
-	rq.clen   = (size * 2) + 1;
-	rq.rparam = rp;
-	rq.rlen   = sizeof(rp);
-
-	if (hci_send_req(dd, &rq, 2000) < 0)
-		return -1;
-
-	if (rp[0] != 0xc2) {
-		errno = EIO;
-		return -1;
-	}
-
-	if ((rp[9] + (rp[10] << 8)) != 0) {
-		errno = ENXIO;
-		return -1;
-	}
-
-	memcpy(value, rp + 11, length);
-
-	return 0;
-}
-
-int csr_read_hci(uint16_t varid, uint8_t *value, uint16_t length)
-{
-	return do_command(0x0000, seqnum++, varid, value, length);
-}
-
-int csr_write_hci(uint16_t varid, uint8_t *value, uint16_t length)
-{
-	return do_command(0x0002, seqnum++, varid, value, length);
-}
-
-void csr_close_hci(void)
-{
-	hci_close_dev(dd);
-}
diff --git a/tools/csr_usb.c b/tools/csr_usb.c
deleted file mode 100644
index 32fdf1f14..000000000
--- a/tools/csr_usb.c
+++ /dev/null
@@ -1,308 +0,0 @@
-/*
- *
- *  BlueZ - Bluetooth protocol stack for Linux
- *
- *  Copyright (C) 2004-2010  Marcel Holtmann <marcel@holtmann.org>
- *
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#define _GNU_SOURCE
-#include <stdio.h>
-#include <errno.h>
-#include <ctype.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <stdbool.h>
-#include <string.h>
-#include <dirent.h>
-#include <limits.h>
-#include <sys/ioctl.h>
-
-#include "csr.h"
-
-#define USB_TYPE_CLASS			(0x01 << 5)
-
-#define USB_RECIP_DEVICE		0x00
-
-#define USB_ENDPOINT_IN			0x80
-#define USB_ENDPOINT_OUT		0x00
-
-struct usbfs_ctrltransfer {
-	uint8_t  bmRequestType;
-	uint8_t  bRequest;
-	uint16_t wValue;
-	uint16_t wIndex;
-	uint16_t wLength;
-	uint32_t timeout;	/* in milliseconds */
-	void *data;		/* pointer to data */
-};
-
-struct usbfs_bulktransfer {
-	unsigned int ep;
-	unsigned int len;
-	unsigned int timeout;   /* in milliseconds */
-	void *data;		/* pointer to data */
-};
-
-#define USBFS_IOCTL_CONTROL	_IOWR('U', 0, struct usbfs_ctrltransfer)
-#define USBFS_IOCTL_BULK	_IOWR('U', 2, struct usbfs_bulktransfer)
-#define USBFS_IOCTL_CLAIMINTF	_IOR('U', 15, unsigned int)
-#define USBFS_IOCTL_RELEASEINTF	_IOR('U', 16, unsigned int)
-
-static int read_value(const char *name, const char *attr, bool hex_number)
-{
-	char path[PATH_MAX];
-	FILE *file;
-	int n, value;
-
-	snprintf(path, sizeof(path), "/sys/bus/usb/devices/%s/%s", name, attr);
-
-	file = fopen(path, "r");
-	if (!file)
-		return -1;
-
-	n = fscanf(file, hex_number ? "%d" : "%04x", &value);
-	if (n != 1) {
-		fclose(file);
-		return -1;
-	}
-
-	fclose(file);
-	return value;
-}
-
-#define read_hex_value(name, file) read_value((name), (file), true)
-#define read_num_value(name, file) read_value((name), (file), false)
-
-static char *check_device(const char *name)
-{
-	char path[PATH_MAX];
-	int busnum, devnum, vendor, product;
-
-	busnum = read_num_value(name, "busnum");
-	if (busnum < 0)
-		return NULL;
-
-	devnum = read_num_value(name, "devnum");
-	if (devnum < 0)
-		return NULL;
-
-	snprintf(path, sizeof(path), "/dev/bus/usb/%03u/%03u", busnum, devnum);
-
-	vendor = read_hex_value(name, "idVendor");
-	if (vendor < 0)
-		return NULL;
-
-	product = read_hex_value(name, "idProduct");
-	if (product < 0)
-		return NULL;
-
-	if (vendor != 0x0a12 || product != 0x0001)
-		return NULL;
-
-	return strdup(path);
-}
-
-static char *find_device(void)
-{
-	char *path = NULL;
-	DIR *dir;
-
-	dir = opendir("/sys/bus/usb/devices");
-	if (!dir)
-		return NULL;
-
-	while (1) {
-		struct dirent *d;
-
-		d = readdir(dir);
-		if (!d)
-			break;
-
-		if ((!isdigit(d->d_name[0]) && strncmp(d->d_name, "usb", 3))
-						|| strchr(d->d_name, ':'))
-			continue;
-
-		path = check_device(d->d_name);
-		if (path)
-			break;
-	}
-
-	closedir(dir);
-
-	return path;
-}
-
-static uint16_t seqnum = 0x0000;
-static int handle = -1;
-
-int csr_open_usb(char *device)
-{
-	int interface = 0;
-	char *path;
-
-	path = find_device();
-	if (!path) {
-		fprintf(stderr, "Device not available\n");
-		return -1;
-	}
-
-	handle = open(path, O_RDWR, O_CLOEXEC | O_NONBLOCK);
-
-	free(path);
-
-	if (handle < 0) {
-		fprintf(stderr, "Can't open device: %s (%d)\n",
-						strerror(errno), errno);
-		return -1;
-	}
-
-	if (ioctl(handle, USBFS_IOCTL_CLAIMINTF, &interface) < 0) {
-		fprintf(stderr, "Can't claim interface: %s (%d)\n",
-						strerror(errno), errno);
-		close(handle);
-		handle = -1;
-		return -1;
-	}
-
-	return 0;
-}
-
-static int control_write(int fd, void *data, unsigned short size)
-{
-	struct usbfs_ctrltransfer transfer;
-
-	transfer.bmRequestType = USB_TYPE_CLASS | USB_ENDPOINT_OUT |
-							USB_RECIP_DEVICE;
-	transfer.bRequest = 0;
-	transfer.wValue = 0;
-	transfer.wIndex = 0;
-	transfer.wLength = size,
-	transfer.timeout = 2000;
-	transfer.data = data;
-
-	if (ioctl(fd, USBFS_IOCTL_CONTROL, &transfer) < 0) {
-		fprintf(stderr, "Control transfer failed: %s (%d)\n",
-						strerror(errno), errno);
-		return -1;
-	}
-
-	return 0;
-}
-
-static int interrupt_read(int fd, unsigned char endpoint,
-					void *data, unsigned short size)
-{
-	struct usbfs_bulktransfer transfer;
-
-	transfer.ep = endpoint;
-	transfer.len = size,
-	transfer.timeout = 20;
-	transfer.data = data;
-
-	return ioctl(fd, USBFS_IOCTL_BULK, &transfer);
-}
-
-static int do_command(uint16_t command, uint16_t seqnum, uint16_t varid,
-					uint8_t *value, uint16_t length)
-{
-	unsigned char cp[254], rp[254];
-	uint8_t cmd[10];
-	uint16_t size;
-	int len, offset = 0;
-
-	size = (length < 8) ? 9 : ((length + 1) / 2) + 5;
-
-	cmd[0] = command & 0xff;
-	cmd[1] = command >> 8;
-	cmd[2] = size & 0xff;
-	cmd[3] = size >> 8;
-	cmd[4] = seqnum & 0xff;
-	cmd[5] = seqnum >> 8;
-	cmd[6] = varid & 0xff;
-	cmd[7] = varid >> 8;
-	cmd[8] = 0x00;
-	cmd[9] = 0x00;
-
-	memset(cp, 0, sizeof(cp));
-	cp[0] = 0x00;
-	cp[1] = 0xfc;
-	cp[2] = (size * 2) + 1;
-	cp[3] = 0xc2;
-	memcpy(cp + 4, cmd, sizeof(cmd));
-	memcpy(cp + 14, value, length);
-
-	interrupt_read(handle, USB_ENDPOINT_IN | 0x01, rp, sizeof(rp));
-
-	control_write(handle, cp, (size * 2) + 4);
-
-	switch (varid) {
-	case CSR_VARID_COLD_RESET:
-	case CSR_VARID_WARM_RESET:
-	case CSR_VARID_COLD_HALT:
-	case CSR_VARID_WARM_HALT:
-		return 0;
-	}
-
-	do {
-		len = interrupt_read(handle, USB_ENDPOINT_IN | 0x01,
-					rp + offset, sizeof(rp) - offset);
-		if (len < 0)
-			break;
-		offset += len;
-	} while (len > 0);
-
-	if (rp[0] != 0xff || rp[2] != 0xc2) {
-		errno = EIO;
-		return -1;
-	}
-
-	if ((rp[11] + (rp[12] << 8)) != 0) {
-		errno = ENXIO;
-		return -1;
-	}
-
-	memcpy(value, rp + 13, length);
-
-	return 0;
-}
-
-int csr_read_usb(uint16_t varid, uint8_t *value, uint16_t length)
-{
-	return do_command(0x0000, seqnum++, varid, value, length);
-}
-
-int csr_write_usb(uint16_t varid, uint8_t *value, uint16_t length)
-{
-	return do_command(0x0002, seqnum++, varid, value, length);
-}
-
-void csr_close_usb(void)
-{
-	int interface = 0;
-
-	ioctl(handle, USBFS_IOCTL_RELEASEINTF, &interface);
-
-	close(handle);
-	handle = -1;
-}
diff --git a/tools/hciconfig.c b/tools/hciconfig.c
index ddc17c4b5..a7b0b0a86 100644
--- a/tools/hciconfig.c
+++ b/tools/hciconfig.c
@@ -46,7 +46,6 @@
 
 #include "src/textfile.h"
 #include "src/shared/util.h"
-#include "tools/csr.h"
 
 static struct hci_dev_info di;
 static int all;
@@ -1703,30 +1702,6 @@ static void print_rev_ericsson(int dd)
 	printf("\t%s\n", buf + 1);
 }
 
-static void print_rev_csr(int dd, uint16_t rev)
-{
-	uint16_t buildid, chipver, chiprev, maxkeylen, mapsco;
-
-	if (csr_read_varid_uint16(dd, 0, CSR_VARID_BUILDID, &buildid) < 0) {
-		printf("\t%s\n", csr_buildidtostr(rev));
-		return;
-	}
-
-	printf("\t%s\n", csr_buildidtostr(buildid));
-
-	if (!csr_read_varid_uint16(dd, 1, CSR_VARID_CHIPVER, &chipver)) {
-		if (csr_read_varid_uint16(dd, 2, CSR_VARID_CHIPREV, &chiprev) < 0)
-			chiprev = 0;
-		printf("\tChip version: %s\n", csr_chipvertostr(chipver, chiprev));
-	}
-
-	if (!csr_read_varid_uint16(dd, 3, CSR_VARID_MAX_CRYPT_KEY_LENGTH, &maxkeylen))
-		printf("\tMax key size: %d bit\n", maxkeylen * 8);
-
-	if (!csr_read_pskey_uint16(dd, 4, CSR_PSKEY_HOSTIO_MAP_SCO_PCM, 0x0000, &mapsco))
-		printf("\tSCO mapping:  %s\n", mapsco ? "PCM" : "HCI");
-}
-
 static void print_rev_digianswer(int dd)
 {
 	struct hci_request rq;
@@ -1789,9 +1764,6 @@ static void cmd_revision(int ctl, int hdev, char *opt)
 	case 48:
 		print_rev_ericsson(dd);
 		break;
-	case 10:
-		print_rev_csr(dd, ver.hci_rev);
-		break;
 	case 12:
 		print_rev_digianswer(dd);
 		break;
diff --git a/tools/ubcsp.c b/tools/ubcsp.c
deleted file mode 100644
index b3f883a03..000000000
--- a/tools/ubcsp.c
+++ /dev/null
@@ -1,1180 +0,0 @@
-/*
- *
- *  BlueZ - Bluetooth protocol stack for Linux
- *
- *  Copyright (C) 2000-2005  CSR Ltd.
- *
- *
- *  Permission is hereby granted, free of charge, to any person obtaining
- *  a copy of this software and associated documentation files (the
- *  "Software"), to deal in the Software without restriction, including
- *  without limitation the rights to use, copy, modify, merge, publish,
- *  distribute, sublicense, and/or sell copies of the Software, and to
- *  permit persons to whom the Software is furnished to do so, subject to
- *  the following conditions:
- *
- *  The above copyright notice and this permission notice shall be included
- *  in all copies or substantial portions of the Software.
- *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- *  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- *  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- *  TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- *  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-/*****************************************************************************/
-/*****************************************************************************/
-/*****************************************************************************/
-/**                                                                         **/
-/** ubcsp,c                                                                 **/
-/**                                                                         **/
-/** MicroBCSP - a very low cost implementation of the BCSP protocol         **/
-/**                                                                         **/
-/*****************************************************************************/
-
-#include "ubcsp.h"
-
-#if SHOW_PACKET_ERRORS || SHOW_LE_STATES
-#include <stdio.h>
-#include <windows.h>
-#endif
-
-static uint16 ubcsp_calc_crc (uint8 ch, uint16 crc);
-static uint16 ubcsp_crc_reverse (uint16);
-
-/*****************************************************************************/
-/**                                                                         **/
-/** Constant Data - ROM                                                     **/
-/**                                                                         **/
-/*****************************************************************************/
-
-/* This is the storage for the link establishment messages */
-
-static const uint8 ubcsp_le_buffer[4][4] =
-	{
-		{ 0xDA, 0xDC, 0xED, 0xED },
-		{ 0xAC, 0xAF, 0xEF, 0xEE },
-		{ 0xAD, 0xEF, 0xAC, 0xED },
-		{ 0xDE, 0xAD, 0xD0, 0xD0 },
-	};
-
-/* These are the link establishment headers */
-/* The two version are for the CRC and non-CRC varients */
-
-#if UBCSP_CRC
-static const uint8 ubcsp_send_le_header[4] = 
-	{
-		0x40, 0x41, 0x00, 0x7E
-	};
-#else
-static const uint8 ubcsp_send_le_header[4] = 
-	{
-		0x00, 0x41, 0x00, 0xBE
-	};
-#endif
-
-/*****************************************************************************/
-/**                                                                         **/
-/** Static Data - RAM                                                       **/
-/**                                                                         **/
-/*****************************************************************************/
-
-/* This is the storage for all state data for ubcsp */
-
-static struct ubcsp_configuration ubcsp_config;
-
-/* This is the ACK packet header - this will be overwritten when
-   we create an ack packet */
-
-static uint8 ubcsp_send_ack_header[4] = 
-	{
-		0x00, 0x00, 0x00, 0x00
-	};
-
-/* This is the deslip lookup table */
-
-static const uint8 ubcsp_deslip[2] =
-	{
-		SLIP_FRAME, SLIP_ESCAPE,
-	};
-
-/* This is a state machine table for link establishment */
-
-static uint8 next_le_packet[16] =
-	{
-		ubcsp_le_sync,			// uninit
-		ubcsp_le_conf,			// init
-		ubcsp_le_none,			// active
-		ubcsp_le_none,
-		ubcsp_le_sync_resp,		// sync_resp
-		ubcsp_le_sync_resp,
-		ubcsp_le_none,
-		ubcsp_le_none,
-		ubcsp_le_none,			// conf_resp
-		ubcsp_le_conf_resp,
-		ubcsp_le_conf_resp,
-		ubcsp_le_none,
-	};
-
-/* This is the storage required for building send and crc data */
-
-static uint8 ubcsp_send_header[4];
-static uint8 ubcsp_send_crc[2];
-
-/* This is where the receive header is stored before the payload arrives */
-
-static uint8 ubcsp_receive_header[4];
-
-/*****************************************************************************/
-/**                                                                         **/
-/** Code - ROM or RAM                                                       **/
-/**                                                                         **/
-/*****************************************************************************/
-
-/*****************************************************************************/
-/**                                                                         **/
-/** ubcsp_initialize                                                        **/
-/**                                                                         **/
-/** This initializes the state of the ubcsp engine to a known values        **/
-/**                                                                         **/
-/*****************************************************************************/
-
-void ubcsp_initialize (void)
-{
-	ubcsp_config.ack_number = 0;
-	ubcsp_config.sequence_number = 0;
-	ubcsp_config.send_ptr = 0;
-	ubcsp_config.send_size = 0;
-	ubcsp_config.receive_index = -4;
-
-	ubcsp_config.delay = 0;
-
-#if SHOW_LE_STATES
-	printf ("Hello Link Uninitialized\n");
-#endif
-
-	ubcsp_config.link_establishment_state = ubcsp_le_uninitialized;
-	ubcsp_config.link_establishment_packet = ubcsp_le_sync;
-}
-
-/*****************************************************************************/
-/**                                                                         **/
-/** ubcsp_send_packet                                                       **/
-/**                                                                         **/
-/** This sends a packet structure for sending to the ubcsp engine           **/
-/** This can only be called when the activity indication from ubcsp_poll    **/
-/** indicates that a packet can be sent with UBCSP_PACKET_SENT              **/
-/**                                                                         **/
-/*****************************************************************************/
-
-void ubcsp_send_packet (struct ubcsp_packet *send_packet)
-{
-	/* Initialize the send data to the packet we want to send */
-
-	ubcsp_config.send_packet = send_packet;
-
-	/* we cannot send the packet at the moment
-	   when we can at the moment, just set things to 0 */
-
-	ubcsp_config.send_size = 0;
-	ubcsp_config.send_ptr = 0;
-}
-
-/*****************************************************************************/
-/**                                                                         **/
-/** ubcsp_receive_packet                                                    **/
-/**                                                                         **/
-/** This sends a packet structure for receiving to the ubcsp engine         **/
-/** This can only be called when the activity indication from ubcsp_poll    **/
-/** indicates that a packet can be sent with UBCSP_PACKET_RECEIVED          **/
-/**                                                                         **/
-/*****************************************************************************/
-
-void ubcsp_receive_packet (struct ubcsp_packet *receive_packet)
-{
-	/* Initialize the receive data to the packet we want to receive */
-
-	ubcsp_config.receive_packet = receive_packet;
-
-	/* setup to receive the header first */
-
-	ubcsp_config.receive_index = -4;
-}
-
-/*****************************************************************************/
-/**                                                                         **/
-/** ubcsp_calc_crc                                                          **/
-/**                                                                         **/
-/** Takes the next 8 bit value ch, and updates the crc with this value      **/
-/**                                                                         **/
-/*****************************************************************************/
-
-
-#ifdef UBCSP_CRC
-
-static uint16 ubcsp_calc_crc (uint8 ch, uint16 crc)
-{
-	/* Calculate the CRC using the above 16 entry lookup table */
-
-	static const uint16 crc_table[] =
-		{
-			0x0000, 0x1081, 0x2102, 0x3183,
-			0x4204, 0x5285, 0x6306, 0x7387,
-			0x8408, 0x9489, 0xa50a, 0xb58b,
-			0xc60c, 0xd68d, 0xe70e, 0xf78f
-		};
-
-	/* Do this four bits at a time - more code, less space */
-
-    crc = (crc >> 4) ^ crc_table[(crc ^ ch) & 0x000f];
-    crc = (crc >> 4) ^ crc_table[(crc ^ (ch >> 4)) & 0x000f];
-
-	return crc;
-}
-
-/*****************************************************************************/
-/**                                                                         **/
-/** ubcsp_crc_reverse                                                       **/
-/**                                                                         **/
-/** Reserves the bits in crc and returns the new value                      **/
-/**                                                                         **/
-/*****************************************************************************/
-
-static uint16 ubcsp_crc_reverse (uint16 crc)
-{
-	int32
-		b,
-		rev;
-
-	/* Reserse the bits to compute the actual CRC value */
-
-	for (b = 0, rev=0; b < 16; b++)
-	{
-		rev = rev << 1;
-		rev |= (crc & 1);
-		crc = crc >> 1;
-	}
-
-	return rev;
-}
-
-#endif
-
-/*****************************************************************************/
-/**                                                                         **/
-/** ubcsp_put_slip_uart                                                     **/
-/**                                                                         **/
-/** Outputs a single octet to the uart                                      **/
-/** If the octet needs to be escaped, then output the escape value          **/
-/** and then store the second octet to be output later                      **/
-/**                                                                         **/
-/*****************************************************************************/
-
-static void ubcsp_put_slip_uart (uint8 ch)
-{
-	/* output a single UART octet */
-
-	/* If it needs to be escaped, then output the escape octet
-	   and set the send_slip_escape so that the next time we
-	   output the second octet for the escape correctly.
-	   This is done right at the top of ubcsp_poll */
-
-	if (ch == SLIP_FRAME)
-	{
-		put_uart (SLIP_ESCAPE);
-		ubcsp_config.send_slip_escape = SLIP_ESCAPE_FRAME;
-	}
-	else if (ch == SLIP_ESCAPE)
-	{
-		put_uart (SLIP_ESCAPE);
-		ubcsp_config.send_slip_escape = SLIP_ESCAPE_ESCAPE;
-	}
-	else
-	{
-		/* Not escaped, so just output octet */
-
-		put_uart (ch);
-	}
-}
-
-/*****************************************************************************/
-/**                                                                         **/
-/** ubcsp_which_le_payload                                                  **/
-/**                                                                         **/
-/** Check the payload of this packet, and determine which of the four       **/
-/** link establishment packets this was.                                    **/
-/** Can return 5 if it is not a valid link establishment packet             **/
-/**                                                                         **/
-/*****************************************************************************/
-
-static uint32 ubcsp_which_le_payload (const uint8 *payload)
-{
-	static int32
-		octet,
-		loop;
-
-	/* Search through the various link establishment payloads to find
-	   which one we have received */
-
-	for (loop = 0; loop < 4; loop ++)
-	{
-		for (octet = 0; octet < 4; octet ++)
-		{
-			if (payload[octet] != ubcsp_le_buffer[loop][octet])
-			{
-				/* Bad match, just to loop again */
-				goto bad_match_loop;
-			}
-		}
-
-		/* All the octets matched, return the value */
-
-		return loop;
-
-		/* Jumps out of octet loop if we got a bad match */
-bad_match_loop:
-		{}
-	}
-
-	/* Non of the link establishment payloads matched - return invalid value */
-
-	return 5;
-}
-
-/*****************************************************************************/
-/**                                                                         **/
-/** ubcsp_recevied_packet                                                   **/
-/**                                                                         **/
-/** This function is called when we have a SLIP END octet and a full        **/
-/** packet header and possibly data in the receive packet                   **/
-/**                                                                         **/
-/*****************************************************************************/
-
-static uint8 ubcsp_recevied_packet (void)
-{
-	static uint8
-		receive_crc,
-		receive_seq,
-		receive_ack,
-		activity;
-
-#if UBCSP_CRC
-	static int32
-		loop;
-
-	static uint16
-		crc;
-#endif
-
-	static uint16
-		length;
-
-	/* Keep track of what activity this received packet will cause */
-
-	activity = 0;
-
-	/*** Do all error checks that we can ***/
-
-	/* First check the header checksum */
-
-	if (((ubcsp_receive_header[0] + ubcsp_receive_header[1] + ubcsp_receive_header[2] + ubcsp_receive_header[3]) & 0xff) != 0xff)
-	{
-		/* Header Checksum Error */
-
-#if SHOW_PACKET_ERRORS
-		printf ("\n######################## Header Checksum Error %02X %02X %02X %02X\n",
-			ubcsp_receive_header[0],
-			ubcsp_receive_header[1],
-			ubcsp_receive_header[2],
-			ubcsp_receive_header[3]);
-#endif
-
-		/* If we have a header checksum error, send an ack in return
-		   this gets a packet to be resent as quickly as possible */
-
-		ubcsp_config.send_ack = 1;
-
-		return activity;
-	}
-
-	/* Decode the received packets header */
-
-	ubcsp_config.receive_packet->reliable = (ubcsp_receive_header[0] & 0x80) >> 7;
-
-	receive_crc = (ubcsp_receive_header[0] & 0x40) >> 6;
-	receive_ack = (ubcsp_receive_header[0] & 0x38) >> 3;
-	receive_seq = (ubcsp_receive_header[0] & 0x07);
-
-	ubcsp_config.receive_packet->channel = (ubcsp_receive_header[1] & 0x0f);
-
-	length =
-		((ubcsp_receive_header[1] & 0xf0) >> 4) |
-		(ubcsp_receive_header[2] << 4);
-
-#if SHOW_PACKET_ERRORS
-	if (ubcsp_config.receive_packet->reliable)
-	{
-		printf (" : %10d         Recv SEQ: %d ACK %d\n",
-			GetTickCount () % 100000,
-			receive_seq,
-			receive_ack);
-	}
-	else if (ubcsp_config.receive_packet->channel != 1)
-	{
-		printf (" : %10d          Recv        ACK %d\n",
-			GetTickCount () % 100000,
-			receive_ack);
-	}
-#endif
-
-	/* Check for length errors */
-
-#if UBCSP_CRC
-	if (receive_crc)
-	{
-		/* If this packet had a CRC, then the length of the payload 
-		   should be 2 less than the received size of the payload */
-
-		if (length + 2 != ubcsp_config.receive_index)
-		{
-			/* Slip Length Error */
-
-#if SHOW_PACKET_ERRORS
-			printf ("\n######################## Slip Length Error (With CRC) %d,%d\n", length, ubcsp_config.receive_index - 2);
-#endif
-
-			/* If we have a payload length error, send an ack in return
-			   this gets a packet to be resent as quickly as possible */
-
-			ubcsp_config.send_ack = 1;
-			return activity;
-		}
-
-		/* We have a CRC at the end of this packet */
-
-		ubcsp_config.receive_index -= 2;
-
-		/* Calculate the packet CRC */
-
-		crc = 0xffff;
-
-		/* CRC the packet header */
-
-		for (loop = 0; loop < 4; loop ++)
-		{
-			crc = ubcsp_calc_crc (ubcsp_receive_header[loop], crc);
-		}
-
-		/* CRC the packet payload - without the CRC bytes */
-
-		for (loop = 0; loop < ubcsp_config.receive_index; loop ++)
-		{
-			crc = ubcsp_calc_crc (ubcsp_config.receive_packet->payload[loop], crc);
-		}
-
-		/* Reverse the CRC */
-
-		crc = ubcsp_crc_reverse (crc);
-
-		/* Check the CRC is correct */
-
-		if
-		(
-			(((crc & 0xff00) >> 8) != ubcsp_config.receive_packet->payload[ubcsp_config.receive_index]) ||
-			((crc & 0xff) != ubcsp_config.receive_packet->payload[ubcsp_config.receive_index + 1])
-		)
-		{
-#if SHOW_PACKET_ERRORS
-			printf ("\n######################## CRC Error\n");
-#endif
-
-			/* If we have a packet crc error, send an ack in return
-			   this gets a packet to be resent as quickly as possible */
-
-			ubcsp_config.send_ack = 1;
-			return activity;
-		}
-	}
-	else
-	{
-#endif
-		/* No CRC present, so just check the length of payload with that received */
-
-		if (length != ubcsp_config.receive_index)
-		{
-			/* Slip Length Error */
-
-#if SHOW_PACKET_ERRORS
-			printf ("\n######################## Slip Length Error (No CRC) %d,%d\n", length, ubcsp_config.receive_index);
-#endif
-
-			/* If we have a payload length error, send an ack in return
-			   this gets a packet to be resent as quickly as possible */
-
-			ubcsp_config.send_ack = 1;
-			return activity;
-		}
-#if UBCSP_CRC
-	}
-#endif
-
-	/*** We have a fully formed packet having passed all data integrity checks ***/
-
-	/* Check if we have an ACK for the last packet we sent */
-
-	if (receive_ack != ubcsp_config.sequence_number)
-	{
-		/* Since we only have a window size of 1, if the ACK is not equal to SEQ
-		   then the packet was sent */
-
-		if
-		(
-			(ubcsp_config.send_packet) &&
-			(ubcsp_config.send_packet->reliable)
-		)
-		{
-			/* We had sent a reliable packet, so clear this packet
-			   Then increament the sequence number for the next packet */
-
-			ubcsp_config.send_packet = 0;
-			ubcsp_config.sequence_number ++;
-			ubcsp_config.delay = 0;
-
-			/* Notify the caller that we have SENT a packet */
-
-			activity |= UBCSP_PACKET_SENT;
-		}
-	}
-
-	/*** Now we can concentrate of the packet we have received ***/
-
-	/* Check for Link Establishment packets */
-
-	if (ubcsp_config.receive_packet->channel == 1)
-	{
-		/* Link Establishment */
-
-		ubcsp_config.delay = 0;
-
-		/* Find which link establishment packet this payload means
-		   This could return 5, meaning none */
-
-		switch (ubcsp_which_le_payload (ubcsp_config.receive_packet->payload))
-		{
-			case 0:
-			{
-				/* SYNC Recv'd */
-
-#if SHOW_LE_STATES
-				printf ("Recv SYNC\n");
-#endif
-
-				/* If we receive a SYNC, then we respond to it with a SYNC RESP
-				   but only if we are not active.
-				   If we are active, then we have a PEER RESET */
-
-				if (ubcsp_config.link_establishment_state < ubcsp_le_active)
-				{
-					ubcsp_config.link_establishment_resp = 1;
-				}
-				else
-				{
-					/* Peer reset !!!! */
-
-#if SHOW_LE_STATES
-					printf ("\n\n\n\n\nPEER RESET\n\n");
-#endif
-
-					/* Reinitialize the link */
-
-					ubcsp_initialize ();
-
-					/* Tell the host what has happened */
-
-					return UBCSP_PEER_RESET;
-				}
-				break;
-			}
-
-			case 1:
-			{
-				/* SYNC RESP Recv'd */
-
-#if SHOW_LE_STATES
-				printf ("Recv SYNC RESP\n");
-#endif
-
-				/* If we receive a SYNC RESP, push us into the initialized state */
-
-				if (ubcsp_config.link_establishment_state < ubcsp_le_initialized)
-				{
-#if SHOW_LE_STATES
-					printf ("Link Initialized\n");
-#endif
-					ubcsp_config.link_establishment_state = ubcsp_le_initialized;
-				}
-
-				break;
-			}
-
-			case 2:
-			{
-				/* CONF Recv'd */
-
-#if SHOW_LE_STATES
-				printf ("Recv CONF\n");
-#endif
-
-				/* If we receive a CONF, and we are initialized or active
-				   then respond with a CONF RESP */
-
-				if (ubcsp_config.link_establishment_state >= ubcsp_le_initialized)
-				{
-					ubcsp_config.link_establishment_resp = 2;
-				}
-
-				break;
-			}
-
-			case 3:
-			{
-				/* CONF RESP Recv'd */
-
-#if SHOW_LE_STATES
-				printf ("Recv CONF RESP\n");
-#endif
-
-				/* If we received a CONF RESP, then push us into the active state */
-
-				if (ubcsp_config.link_establishment_state < ubcsp_le_active)
-				{
-#if SHOW_LE_STATES
-					printf ("Link Active\n");
-#endif
-
-					ubcsp_config.link_establishment_state = ubcsp_le_active;
-					ubcsp_config.send_size = 0;
-
-					return activity | UBCSP_PACKET_SENT;
-				}
-
-				break;
-			}
-		}
-
-		/* We have finished processing Link Establishment packets */
-	}
-	else if (ubcsp_config.receive_index)
-	{
-		/* We have some payload data we need to process
-		   but only if we are active - otherwise, we just ignore it */
-
-		if (ubcsp_config.link_establishment_state == ubcsp_le_active)
-		{
-			if (ubcsp_config.receive_packet->reliable)
-			{
-				/* If the packet we've just received was reliable
-				   then send an ACK */
-
-				ubcsp_config.send_ack = 1;
-
-				/* We the sequence number we received is the same as 
-				   the last ACK we sent, then we have received a packet in sequence */
-
-				if (receive_seq == ubcsp_config.ack_number)
-				{
-					/* Increase the ACK number - which will be sent in the next ACK 
-					   or normal packet we send */
-
-					ubcsp_config.ack_number ++;
-
-					/* Set the values in the receive_packet structure, so the caller
-					   knows how much data we have */
-
-					ubcsp_config.receive_packet->length = length;
-					ubcsp_config.receive_packet = 0;
-
-					/* Tell the caller that we have received a packet, and that it
-					   will be ACK'ed */
-
-					activity |= UBCSP_PACKET_RECEIVED | UBCSP_PACKET_ACK;
-				}
-			}
-			else 
-			{
-				/* Set the values in the receive_packet structure, so the caller
-				   knows how much data we have */
-
-				ubcsp_config.receive_packet->length = length;
-				ubcsp_config.receive_packet = 0;
-
-				/* Tell the caller that we have received a packet */
-
-				activity |= UBCSP_PACKET_RECEIVED;
-			}
-		}
-	}
-
-	/* Just return any activity that occurred */
-
-	return activity;
-}
-
-/*****************************************************************************/
-/**                                                                         **/
-/** ubcsp_setup_packet                                                      **/
-/**                                                                         **/
-/** This function is called to setup a packet to be sent                    **/
-/** This allows just a header, or a header and payload to be sent           **/
-/** It also allows the header checksum to be precalcuated                   **/
-/** or calculated here                                                      **/
-/** part1 is always 4 bytes                                                 **/
-/**                                                                         **/
-/*****************************************************************************/
-
-static void ubcsp_setup_packet (uint8 *part1, uint8 calc, uint8 *part2, uint16 len2)
-{
-	/* If we need to calculate the checksum, do that now */
-
-	if (calc)
-	{
-		part1[3] =
-			~(part1[0] + part1[1] + part1[2]);
-	}
-
-	/* Setup the header send pointer and size so we can clock this out */
-
-	ubcsp_config.send_ptr = part1;
-	ubcsp_config.send_size = 4;
-
-	/* Setup the payload send pointer and size */
-
-	ubcsp_config.next_send_ptr = part2;
-	ubcsp_config.next_send_size = len2;
-
-#if UBCSP_CRC
-	/* Initialize the crc as required */
-
-	ubcsp_config.send_crc = -1;
-
-	ubcsp_config.need_send_crc = 1;
-#endif
-}
-
-/*****************************************************************************/
-/**                                                                         **/
-/** ubcsp_sent_packet                                                       **/
-/**                                                                         **/
-/** Called when we have finished sending a packet                           **/
-/** If this packet was unreliable, then notify caller, and clear the data   **/
-/**                                                                         **/
-/*****************************************************************************/
-
-static uint8 ubcsp_sent_packet (void)
-{
-	if (ubcsp_config.send_packet)
-	{
-		if (!ubcsp_config.send_packet->reliable)
-		{
-			/* We had a packet sent that was unreliable */
-
-			/* Forget about this packet */
-
-			ubcsp_config.send_packet = 0;
-
-			/* Notify caller that they can send another one */
-
-			return UBCSP_PACKET_SENT;
-		}
-	}
-
-	/* We didn't have a packet, or it was reliable
-	   Must wait for ACK before allowing another packet to be sent */
-
-	return 0;
-}
-
-/*****************************************************************************/
-/**                                                                         **/
-/** ubcsp_poll                                                              **/
-/**                                                                         **/
-/** This is the main function for ubcsp                                     **/
-/** It performs a number of tasks                                           **/
-/**                                                                         **/
-/** 1) Send another octet to the UART - escaping as required                **/
-/** 2) Setup the payload to be sent after the header has been sent          **/
-/** 3) Send the CRC for the packet if required                              **/
-/**                                                                         **/
-/** 4) Calculate the next Link Establishment State                          **/
-/** 5) Send a Link Establishment packet                                     **/
-/** 6) Send a normal packet if available                                    **/
-/** 7) Send an ACK packet if required                                       **/
-/**                                                                         **/
-/** 8) Receive octets from UART and deslip them as required                 **/
-/** 9) Place received octets into receive header or receive payload buffer  **/
-/** 10) Process received packet when SLIP_END is received                   **/
-/**                                                                         **/
-/** 11) Keep track of ability of caller to delay recalling                  **/
-/**                                                                         **/
-/*****************************************************************************/
-
-uint8 ubcsp_poll (uint8 *activity)
-{
-	uint8
-		delay = UBCSP_POLL_TIME_IMMEDIATE;
-
-	uint8
-		value;
-
-	/* Assume no activity to start with */
-
-	*activity = 0;
-
-	/* If we don't have to delay, then send something if we can */
-
-	if (!ubcsp_config.delay)
-	{
-		/* Do we have something we are sending to send */
-
-		if (ubcsp_config.send_size)
-		{
-			/* We have something to send so send it */
-
-			if (ubcsp_config.send_slip_escape)
-			{
-				/* Last time we send a SLIP_ESCAPE octet
-				   this time send the second escape code */
-
-				put_uart (ubcsp_config.send_slip_escape);
-
-				ubcsp_config.send_slip_escape = 0;
-			}
-			else
-			{
-#if UBCSP_CRC
-				/* get the value to send, and calculate CRC as we go */
-
-				value = *ubcsp_config.send_ptr ++;
-
-				ubcsp_config.send_crc = ubcsp_calc_crc (value, ubcsp_config.send_crc);
-
-				/* Output the octet */
-
-				ubcsp_put_slip_uart (value);
-#else
-				/* Just output the octet*/
-
-				ubcsp_put_slip_uart (*ubcsp_config.send_ptr ++);
-#endif
-			}
-
-			/* If we did output a SLIP_ESCAPE, then don't process the end of a block */
-
-			if ((!ubcsp_config.send_slip_escape) && ((ubcsp_config.send_size = ubcsp_config.send_size - 1) == 0))
-			{
-				/*** We are at the end of a block - either header or payload ***/
-
-				/* setup the next block */
-
-				ubcsp_config.send_ptr = ubcsp_config.next_send_ptr;
-				ubcsp_config.send_size = ubcsp_config.next_send_size;
-				ubcsp_config.next_send_ptr = 0;
-				ubcsp_config.next_send_size = 0;
-
-#if UBCSP_CRC
-				/* If we have no successor block
-				   then we might need to send the CRC */
-
-				if (!ubcsp_config.send_ptr)
-				{
-					if (ubcsp_config.need_send_crc)
-					{
-						/* reverse the CRC from what we computed along the way */
-
-						ubcsp_config.need_send_crc = 0;
-
-						ubcsp_config.send_crc = ubcsp_crc_reverse (ubcsp_config.send_crc);
-
-						/* Save in the send_crc buffer */
-
-						ubcsp_send_crc[0] = (uint8) (ubcsp_config.send_crc >> 8);
-						ubcsp_send_crc[1] = (uint8) ubcsp_config.send_crc;
-
-						/* Setup to send this buffer */
-
-						ubcsp_config.send_ptr = ubcsp_send_crc;
-						ubcsp_config.send_size = 2;
-					}
-					else
-					{
-						/* We don't need to send the crc
-						   either we just have, or this packet doesn't include it */
-
-						/* Output the end of FRAME marker */
-
-						put_uart (SLIP_FRAME);
-
-						/* Check if this is an unreliable packet */
-
-						*activity |= ubcsp_sent_packet ();
-
-						/* We've sent the packet, so don't need to have be called quickly soon */
-
-						delay = UBCSP_POLL_TIME_DELAY;
-					}
-				}
-#else
-				/* If we have no successor block
-				   then we might need to send the CRC */
-
-				if (!ubcsp_config.send_ptr)
-				{
-					/* Output the end of FRAME marker */
-
-					put_uart (SLIP_FRAME);
-
-					/* Check if this is an unreliable packet */
-
-					*activity |= ubcsp_sent_packet ();
-
-					/* We've sent the packet, so don't need to have be called quickly soon */
-
-					delay = UBCSP_POLL_TIME_DELAY;
-				}
-#endif
-			}
-		}
-		else if (ubcsp_config.link_establishment_packet == ubcsp_le_none)
-		{
-			/* We didn't have something to send
-			   AND we have no Link Establishment packet to send */
-
-			if (ubcsp_config.link_establishment_resp & 2)
-			{
-				/* Send the start of FRAME packet */
-
-				put_uart (SLIP_FRAME);
-
-				/* We did require a RESP packet - so setup the send */
-
-				ubcsp_setup_packet ((uint8*) ubcsp_send_le_header, 0, (uint8*) ubcsp_le_buffer[ubcsp_le_conf_resp], 4);
-
-				/* We have now "sent" this packet */
-
-				ubcsp_config.link_establishment_resp = 0;
-			}
-			else if (ubcsp_config.send_packet)
-			{
-				/* There is a packet ready to be sent */
-
-				/* Send the start of FRAME packet */
-
-				put_uart (SLIP_FRAME);
-
-				/* Encode up the packet header using ACK and SEQ numbers */
-
-				ubcsp_send_header[0] =
-					(ubcsp_config.send_packet->reliable << 7) |
-#if UBCSP_CRC
-					0x40 |	/* Always use CRC's */
-#endif
-					(ubcsp_config.ack_number << 3) | 
-					(ubcsp_config.sequence_number);
-
-				/* Encode up the packet header's channel and length */
-				ubcsp_send_header[1] =
-					(ubcsp_config.send_packet->channel & 0x0f) |
-					((ubcsp_config.send_packet->length << 4) & 0xf0);
-
-				ubcsp_send_header[2] =
-					(ubcsp_config.send_packet->length >> 4) & 0xff;
-
-				/* Let the ubcsp_setup_packet function calculate the header checksum */
-
-				ubcsp_setup_packet ((uint8*) ubcsp_send_header, 1, ubcsp_config.send_packet->payload, ubcsp_config.send_packet->length);
-
-				/* Don't need to send an ACK - we just place on in this packet */
-
-				ubcsp_config.send_ack = 0;
-				
-#if SHOW_PACKET_ERRORS
-				printf (" : %10d Send %d Ack %d\n",
-					GetTickCount () % 100000,
-					ubcsp_config.sequence_number,
-					ubcsp_config.ack_number);
-#endif
-			}
-			else if (ubcsp_config.send_ack)
-			{
-				/* Send the start of FRAME packet */
-
-				put_uart (SLIP_FRAME);
-
-#if SHOW_PACKET_ERRORS
-				printf (" : %10d Send ACK %d\n",
-					GetTickCount () % 100000,
-					ubcsp_config.ack_number);
-#endif
-
-				/* The ack packet is already computed apart from the first octet */
-
-				ubcsp_send_ack_header[0] =
-#if UBCSP_CRC
-					0x40 | 
-#endif
-					(ubcsp_config.ack_number << 3);
-
-				/* Let the ubcsp_setup_packet function calculate the header checksum */
-
-				ubcsp_setup_packet (ubcsp_send_ack_header, 1, 0, 0);
-
-				/* We've now sent the ack */
-
-				ubcsp_config.send_ack = 0;
-			}
-			else
-			{
-				/* We didn't have a Link Establishment response packet,
-				   a normal packet or an ACK packet to send */
-
-				delay = UBCSP_POLL_TIME_DELAY;
-			}
-		}
-		else
-		{
-#if SHOW_PACKET_ERRORS
-//			printf (" : %10d Send LE %d\n",
-//				GetTickCount () % 100000,
-//				ubcsp_config.link_establishment_packet);
-#endif
-
-			/* Send A Link Establishment Message */
-
-			put_uart (SLIP_FRAME);
-
-			/* Send the Link Establishment header followed by the 
-			   Link Establishment packet */
-
-			ubcsp_setup_packet ((uint8*) ubcsp_send_le_header, 0, (uint8*) ubcsp_le_buffer[ubcsp_config.link_establishment_packet], 4);
-
-			/* start sending immediately */
-
-			ubcsp_config.delay = 0;
-
-			/* workout what the next link establishment packet should be */
-
-			ubcsp_config.link_establishment_packet = next_le_packet[ubcsp_config.link_establishment_state + ubcsp_config.link_establishment_resp * 4];
-
-			/* We have now delt with any response packet that we needed */
-
-			ubcsp_config.link_establishment_resp = 0;
-
-			return 0;
-		}
-	}
-
-	/* We now need to receive any octets from the UART */
-
-	while ((ubcsp_config.receive_packet) && (get_uart (&value)))
-	{
-		/* If the last octet was SLIP_ESCAPE, then special processing is required */
-
-		if (ubcsp_config.receive_slip_escape)
-		{
-			/* WARNING - out of range values are not detected !!!
-			   This will probably be caught with the checksum or CRC check */
-
-			value = ubcsp_deslip[value - SLIP_ESCAPE_FRAME];
-
-			ubcsp_config.receive_slip_escape = 0;
-		}
-		else
-		{
-			/* Check for the SLIP_FRAME octet - must be start or end of packet */
-			if (value == SLIP_FRAME)
-			{
-				/* If we had a full header then we have a packet */
-
-				if (ubcsp_config.receive_index >= 0)
-				{
-					/* process the received packet */
-
-					*activity |= ubcsp_recevied_packet ();
-
-					if (*activity & UBCSP_PACKET_ACK)
-					{
-						/* We need to ACK this packet, then don't delay its sending */
-						ubcsp_config.delay = 0;
-					}
-				}
-
-				/* Setup to receive the next packet */
-
-				ubcsp_config.receive_index = -4;
-
-				/* Ok, next octet */
-
-				goto finished_receive;
-			}
-			else if (value == SLIP_ESCAPE)
-			{
-				/* If we receive a SLIP_ESCAPE,
-				   then remember to process the next special octet */
-
-				ubcsp_config.receive_slip_escape = 1;
-
-				goto finished_receive;
-			}
-		}
-
-		if (ubcsp_config.receive_index < 0)
-		{
-			/* We are still receiving the header */
-
-			ubcsp_receive_header[ubcsp_config.receive_index + 4] = value;
-
-			ubcsp_config.receive_index ++;
-		}
-		else if (ubcsp_config.receive_index < ubcsp_config.receive_packet->length)
-		{
-			/* We are receiving the payload */
-			/* We might stop coming here if we are receiving a
-			   packet which is longer than the receive_packet->length
-			   given by the host */
-
-			ubcsp_config.receive_packet->payload[ubcsp_config.receive_index] = value;
-
-			ubcsp_config.receive_index ++;
-		}
-
-finished_receive:
-		{
-		}
-	}
-
-	if (ubcsp_config.delay > 0)
-	{
-		/* We were delayed so delay some more
-		   this could be cancelled if we received something */
-
-		ubcsp_config.delay --;
-	}
-	else
-	{
-		/* We had no delay, so use the delay we just decided to us */
-
-		ubcsp_config.delay = delay;
-	}
-
-	/* Report the current delay to the user */
-
-	return ubcsp_config.delay;
-}
diff --git a/tools/ubcsp.h b/tools/ubcsp.h
deleted file mode 100644
index 6a74e9a16..000000000
--- a/tools/ubcsp.h
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- *
- *  BlueZ - Bluetooth protocol stack for Linux
- *
- *  Copyright (C) 2000-2005  CSR Ltd.
- *
- *
- *  Permission is hereby granted, free of charge, to any person obtaining
- *  a copy of this software and associated documentation files (the
- *  "Software"), to deal in the Software without restriction, including
- *  without limitation the rights to use, copy, modify, merge, publish,
- *  distribute, sublicense, and/or sell copies of the Software, and to
- *  permit persons to whom the Software is furnished to do so, subject to
- *  the following conditions:
- *
- *  The above copyright notice and this permission notice shall be included
- *  in all copies or substantial portions of the Software.
- *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- *  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- *  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- *  TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- *  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- */
-
-#ifndef UBCSP_INCLUDE_H
-#define UBCSP_INCLUDE_H
-
-/*****************************************************************************/
-/*****************************************************************************/
-/*****************************************************************************/
-/**                                                                         **/
-/** ubcsp.h                                                                 **/
-/**                                                                         **/
-/** MicroBCSP - a very low cost implementation of the BCSP protocol         **/
-/**                                                                         **/
-/*****************************************************************************/
-
-/* If we wish to use CRC's, then change 0 to 1 in the next line */
-#define UBCSP_CRC 1
-
-/* Define some basic types - change these for your architecture */
-typedef unsigned char uint8;
-typedef unsigned short uint16;
-typedef unsigned int uint32;
-typedef signed char int8;
-typedef signed short int16;
-typedef signed int int32;
-
-/* The defines below require a printf function to be available */
-
-/* Do we want to show packet errors in debug output */
-#define SHOW_PACKET_ERRORS	0
-
-/* Do we want to show Link Establishment State transitions in debug output */
-#define SHOW_LE_STATES		0
-
-/*****************************************************************************/
-/**                                                                         **/
-/** ubcsp_packet                                                            **/
-/**                                                                         **/
-/** This is description of a bcsp packet for the upper layer                **/
-/**                                                                         **/
-/*****************************************************************************/
-
-struct ubcsp_packet
-{
-	uint8 channel;		/* Which Channel this packet is to/from */
-	uint8 reliable;		/* Is this packet reliable */
-	uint8 use_crc;		/* Does this packet use CRC data protection */
-	uint16 length;		/* What is the length of the payload data */
-	uint8 *payload;		/* The payload data itself - size of length */
-};
-
-/*****************************************************************************/
-/**                                                                         **/
-/** ubcsp_configuration                                                     **/
-/**                                                                         **/
-/** This is the main configuration of the ubcsp engine                      **/
-/** All state variables are stored in this structure                        **/
-/**                                                                         **/
-/*****************************************************************************/
-
-enum ubcsp_link_establishment_state
-{
-	ubcsp_le_uninitialized,
-	ubcsp_le_initialized,
-	ubcsp_le_active
-};
-
-enum ubcsp_link_establishment_packet
-{
-	ubcsp_le_sync,
-	ubcsp_le_sync_resp,
-	ubcsp_le_conf,
-	ubcsp_le_conf_resp,
-	ubcsp_le_none
-};
-
-struct ubcsp_configuration
-{
-	uint8 link_establishment_state;
-	uint8 link_establishment_resp;
-	uint8 link_establishment_packet;
-
-	uint8 sequence_number:3;
-	uint8 ack_number:3;
-	uint8 send_ack;
-	struct ubcsp_packet *send_packet;
-	struct ubcsp_packet *receive_packet;
-
-	uint8 receive_header_checksum;
-	uint8 receive_slip_escape;
-	int32 receive_index;
-
-	uint8 send_header_checksum;
-#ifdef UBCSP_CRC
-	uint8 need_send_crc;
-	uint16 send_crc;
-#endif
-	uint8 send_slip_escape;
-
-	uint8 *send_ptr;
-	int32 send_size;
-	uint8 *next_send_ptr;
-	int32 next_send_size;
-
-	int8 delay;
-};
-
-/*****************************************************************************/
-/**                                                                         **/
-/** ubcsp_poll sets activity from an OR of these flags                      **/
-/**                                                                         **/
-/*****************************************************************************/
-
-#define UBCSP_PACKET_SENT 0x01
-#define UBCSP_PACKET_RECEIVED 0x02
-#define UBCSP_PEER_RESET 0x04
-#define UBCSP_PACKET_ACK 0x08
-
-/*****************************************************************************/
-/**                                                                         **/
-/** This is the functional interface for ucbsp                              **/
-/**                                                                         **/
-/*****************************************************************************/
-
-void ubcsp_initialize (void);
-void ubcsp_send_packet (struct ubcsp_packet *send_packet);
-void ubcsp_receive_packet (struct ubcsp_packet *receive_packet);
-uint8 ubcsp_poll (uint8 *activity);
-
-/*****************************************************************************/
-/**                                                                         **/
-/** Slip Escape Values                                                      **/
-/**                                                                         **/
-/*****************************************************************************/
-
-#define SLIP_FRAME 0xC0
-#define SLIP_ESCAPE 0xDB
-#define SLIP_ESCAPE_FRAME 0xDC
-#define SLIP_ESCAPE_ESCAPE 0xDD
-
-/*****************************************************************************/
-/*****************************************************************************/
-/*****************************************************************************/
-
-/*****************************************************************************/
-/**                                                                         **/
-/** These functions need to be linked into your system                      **/
-/**                                                                         **/
-/*****************************************************************************/
-
-/*****************************************************************************/
-/**                                                                         **/
-/** put_uart outputs a single octet over the UART Tx line                   **/
-/**                                                                         **/
-/*****************************************************************************/
-
-extern void put_uart (uint8);
-
-/*****************************************************************************/
-/**                                                                         **/
-/** get_uart receives a single octet over the UART Rx line                  **/
-/** if no octet is available, then this returns 0                           **/
-/** if an octet was read, then this is returned in the argument and         **/
-/**   the function returns 1                                                **/
-/**                                                                         **/
-/*****************************************************************************/
-
-extern uint8 get_uart (uint8 *);
-
-/*****************************************************************************/
-/**                                                                         **/
-/** These defines should be changed to your systems concept of 100ms        **/
-/**                                                                         **/
-/*****************************************************************************/
-
-#define UBCSP_POLL_TIME_IMMEDIATE   0
-#define UBCSP_POLL_TIME_DELAY       25
-
-/*****************************************************************************/
-/*****************************************************************************/
-/*****************************************************************************/
-#endif
