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:

Reply via email to