Module Name: src Committed By: plunky Date: Sat Nov 28 09:04:34 UTC 2015
Modified Files: src/sys/netbt: hci.h hci_event.c hci_ioctl.c Log Message: add version and extended feature flags defined in 4.2 specification, add cache for page 2 of extended features and return this in the SIOCGBTFEAT ioctl (no change in size) To generate a diff of this commit: cvs rdiff -u -r1.40 -r1.41 src/sys/netbt/hci.h cvs rdiff -u -r1.23 -r1.24 src/sys/netbt/hci_event.c cvs rdiff -u -r1.12 -r1.13 src/sys/netbt/hci_ioctl.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/netbt/hci.h diff -u src/sys/netbt/hci.h:1.40 src/sys/netbt/hci.h:1.41 --- src/sys/netbt/hci.h:1.40 Sun Sep 6 06:01:01 2015 +++ src/sys/netbt/hci.h Sat Nov 28 09:04:34 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: hci.h,v 1.40 2015/09/06 06:01:01 dholland Exp $ */ +/* $NetBSD: hci.h,v 1.41 2015/11/28 09:04:34 plunky Exp $ */ /*- * Copyright (c) 2005 Iain Hibbert. @@ -54,14 +54,15 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: hci.h,v 1.40 2015/09/06 06:01:01 dholland Exp $ + * $Id: hci.h,v 1.41 2015/11/28 09:04:34 plunky Exp $ * $FreeBSD: src/sys/netgraph/bluetooth/include/ng_hci.h,v 1.6 2005/01/07 01:45:43 imp Exp $ */ /* * This file contains everything that applications need to know from * Host Controller Interface (HCI). Information taken from Bluetooth - * Core Specifications (v1.1, v2.0 and v2.1) + * Core Specifications (v1.1, v2.0, v2.1 + EDR, v3.0 + HS, + * v4.0 and v4.2) * * This file can be included by both kernel and userland applications. * @@ -101,7 +102,10 @@ #define HCI_SPEC_V20 0x03 /* v2.0 + EDR */ #define HCI_SPEC_V21 0x04 /* v2.1 + EDR */ #define HCI_SPEC_V30 0x05 /* v3.0 + HS */ -/* 0x06 - 0xFF - reserved for future use */ +#define HCI_SPEC_V40 0x06 /* v4.0 */ +#define HCI_SPEC_V41 0x07 /* v4.1 */ +#define HCI_SPEC_V42 0x08 /* v4.2 */ +/* 0x09 - 0xFF - reserved for future use */ /* LMP features (and page 0 of extended features) */ /* ------------------- byte 0 --------------------*/ @@ -146,8 +150,8 @@ /* reserved 0x04 */ #define HCI_LMP_AFH_CAPABLE_SLAVE 0x08 #define HCI_LMP_AFH_CLASS_SLAVE 0x10 -/* reserved 0x20 */ -/* reserved 0x40 */ +#define HCI_LMP_BR_EDR_UNSUPPORTED 0x20 +#define HCI_LMP_LE_CONTROLLER 0x40 #define HCI_LMP_3SLOT_EDR_ACL 0x80 /* ------------------- byte 5 --------------------*/ #define HCI_LMP_5SLOT_EDR_ACL 0x01 @@ -160,7 +164,7 @@ #define HCI_LMP_3SLOT_EDR_eSCO 0x80 /* ------------------- byte 6 --------------------*/ #define HCI_LMP_EXTENDED_INQUIRY 0x01 -/* reserved 0x02 */ +#define HCI_LMP_LE_BR_EDR_CONTROLLER 0x02 /* reserved 0x04 */ #define HCI_LMP_SIMPLE_PAIRING 0x08 #define HCI_LMP_ENCAPSULATED_PDU 0x10 @@ -176,6 +180,25 @@ /* page 1 of extended features */ /* ------------------- byte 0 --------------------*/ #define HCI_LMP_SSP 0x01 +#define HCI_LMP_LE_HOST 0x02 +#define HCI_LMP_LE_BR_EDR_HOST 0x04 +#define HCI_LMP_SECURE_CONN_HOST 0x08 + +/* page 2 of extended features */ +/* ------------------- byte 0 --------------------*/ +#define HCI_LMP_CONNLESS_MASTER 0x01 +#define HCI_LMP_CONNLESS_SLAVE 0x02 +#define HCI_LMP_SYNC_TRAIN 0x04 +#define HCI_LMP_SYNC_SCAN 0x08 +#define HCI_LMP_INQ_RSP_NOTIFY 0x10 +#define HCI_LMP_INTERLACE_SCAN 0x20 +#define HCI_LMP_COARSE_CLOCK 0x40 +/* reserved 0x80 */ +/* ------------------- byte 0 --------------------*/ +#define HCI_LMP_SECURE_CONN_CONTROLLER 0x01 +#define HCI_LMP_PING 0x02 +/* reserved 0x04 */ +#define HCI_LMP_TRAIN_NUDGING 0x08 /* Link types */ #define HCI_LINK_SCO 0x00 /* Voice */ @@ -2334,6 +2357,7 @@ struct btreq { struct { uint8_t btrf_page0[HCI_FEATURES_SIZE]; /* basic */ uint8_t btrf_page1[HCI_FEATURES_SIZE]; /* extended */ + uint8_t btrf_page2[HCI_FEATURES_SIZE]; /* extended */ } btrf; struct bt_stats btrs; /* unit stats */ } btru; @@ -2352,6 +2376,7 @@ struct btreq { #define btr_max_sco btru.btri.btri_max_sco #define btr_features0 btru.btrf.btrf_page0 #define btr_features1 btru.btrf.btrf_page1 +#define btr_features2 btru.btrf.btrf_page2 #define btr_stats btru.btrs /* hci_unit & btr_flags */ @@ -2496,7 +2521,8 @@ struct hci_unit { uint16_t hci_lmp_mask; /* link policy capabilities */ uint8_t hci_feat0[HCI_FEATURES_SIZE]; /* features mask */ - uint8_t hci_feat1[HCI_FEATURES_SIZE]; /* extended */ + uint8_t hci_feat1[HCI_FEATURES_SIZE]; /* extended page 1 */ + uint8_t hci_feat2[HCI_FEATURES_SIZE]; /* extended page 2 */ uint8_t hci_cmds[HCI_COMMANDS_SIZE]; /* opcode bitmask */ /* flow control */ Index: src/sys/netbt/hci_event.c diff -u src/sys/netbt/hci_event.c:1.23 src/sys/netbt/hci_event.c:1.24 --- src/sys/netbt/hci_event.c:1.23 Wed Jul 27 10:25:09 2011 +++ src/sys/netbt/hci_event.c Sat Nov 28 09:04:34 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: hci_event.c,v 1.23 2011/07/27 10:25:09 plunky Exp $ */ +/* $NetBSD: hci_event.c,v 1.24 2015/11/28 09:04:34 plunky Exp $ */ /*- * Copyright (c) 2005 Iain Hibbert. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: hci_event.c,v 1.23 2011/07/27 10:25:09 plunky Exp $"); +__KERNEL_RCSID(0, "$NetBSD: hci_event.c,v 1.24 2015/11/28 09:04:34 plunky Exp $"); #include <sys/param.h> #include <sys/kernel.h> @@ -1085,6 +1085,10 @@ hci_cmd_read_local_extended_features(str rp.page, rp.max_page); switch (rp.page) { + case 2: + memcpy(unit->hci_feat2, rp.features, HCI_FEATURES_SIZE); + break; + case 1: memcpy(unit->hci_feat1, rp.features, HCI_FEATURES_SIZE); break; Index: src/sys/netbt/hci_ioctl.c diff -u src/sys/netbt/hci_ioctl.c:1.12 src/sys/netbt/hci_ioctl.c:1.13 --- src/sys/netbt/hci_ioctl.c:1.12 Tue Jul 1 05:49:18 2014 +++ src/sys/netbt/hci_ioctl.c Sat Nov 28 09:04:34 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: hci_ioctl.c,v 1.12 2014/07/01 05:49:18 rtr Exp $ */ +/* $NetBSD: hci_ioctl.c,v 1.13 2015/11/28 09:04:34 plunky Exp $ */ /*- * Copyright (c) 2005 Iain Hibbert. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: hci_ioctl.c,v 1.12 2014/07/01 05:49:18 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: hci_ioctl.c,v 1.13 2015/11/28 09:04:34 plunky Exp $"); #include <sys/param.h> #include <sys/domain.h> @@ -311,6 +311,7 @@ hci_ioctl_pcb(unsigned long cmd, void *d strlcpy(btr->btr_name, device_xname(unit->hci_dev), HCI_DEVNAME_SIZE); memcpy(btr->btr_features0, unit->hci_feat0, HCI_FEATURES_SIZE); memcpy(btr->btr_features1, unit->hci_feat1, HCI_FEATURES_SIZE); + memcpy(btr->btr_features2, unit->hci_feat2, HCI_FEATURES_SIZE); break; default: