Bluetooth: Use macros for connectionless slave broadcast features
authorMarcel Holtmann <marcel@holtmann.org>
Sun, 8 Dec 2013 19:55:33 +0000 (11:55 -0800)
committerJohan Hedberg <johan.hedberg@intel.com>
Sun, 8 Dec 2013 20:02:41 +0000 (00:02 +0400)
Add the LMP feature constants for connectionless slave broadcast
and use them for capability testing.

Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
include/net/bluetooth/hci.h
include/net/bluetooth/hci_core.h
net/bluetooth/hci_core.c

index 1784c48..cc2da73 100644 (file)
@@ -275,6 +275,12 @@ enum {
 #define LMP_EXTFEATURES        0x80
 
 /* Extended LMP features */
+#define LMP_CSB_MASTER 0x01
+#define LMP_CSB_SLAVE  0x02
+#define LMP_SYNC_TRAIN 0x04
+#define LMP_SYNC_SCAN  0x08
+
+/* Host features */
 #define LMP_HOST_SSP           0x01
 #define LMP_HOST_LE            0x02
 #define LMP_HOST_LE_BREDR      0x04
index f8555ad..b796161 100644 (file)
@@ -798,6 +798,12 @@ void hci_conn_del_sysfs(struct hci_conn *conn);
 #define lmp_transp_capable(dev)    ((dev)->features[0][2] & LMP_TRANSPARENT)
 
 /* ----- Extended LMP capabilities ----- */
+#define lmp_csb_master_capable(dev) ((dev)->features[2][0] & LMP_CSB_MASTER)
+#define lmp_csb_slave_capable(dev)  ((dev)->features[2][0] & LMP_CSB_SLAVE)
+#define lmp_sync_train_capable(dev) ((dev)->features[2][0] & LMP_SYNC_TRAIN)
+#define lmp_sync_scan_capable(dev)  ((dev)->features[2][0] & LMP_SYNC_SCAN)
+
+/* ----- Host capabilities ----- */
 #define lmp_host_ssp_capable(dev)  ((dev)->features[1][0] & LMP_HOST_SSP)
 #define lmp_host_le_capable(dev)   (!!((dev)->features[1][0] & LMP_HOST_LE))
 #define lmp_host_le_br_capable(dev) (!!((dev)->features[1][0] & LMP_HOST_LE_BREDR))
index 03e8355..8b8b5f8 100644 (file)
@@ -1228,7 +1228,7 @@ static void hci_set_event_mask_page_2(struct hci_request *req)
        /* If Connectionless Slave Broadcast master role is supported
         * enable all necessary events for it.
         */
-       if (hdev->features[2][0] & 0x01) {
+       if (lmp_csb_master_capable(hdev)) {
                events[1] |= 0x40;      /* Triggered Clock Capture */
                events[1] |= 0x80;      /* Synchronization Train Complete */
                events[2] |= 0x10;      /* Slave Page Response Timeout */
@@ -1238,7 +1238,7 @@ static void hci_set_event_mask_page_2(struct hci_request *req)
        /* If Connectionless Slave Broadcast slave role is supported
         * enable all necessary events for it.
         */
-       if (hdev->features[2][0] & 0x02) {
+       if (lmp_csb_slave_capable(hdev)) {
                events[2] |= 0x01;      /* Synchronization Train Received */
                events[2] |= 0x02;      /* CSB Receive */
                events[2] |= 0x04;      /* CSB Timeout */
@@ -1309,7 +1309,7 @@ static void hci_init4_req(struct hci_request *req, unsigned long opt)
                hci_set_event_mask_page_2(req);
 
        /* Check for Synchronization Train support */
-       if (hdev->features[2][0] & 0x04)
+       if (lmp_sync_train_capable(hdev))
                hci_req_add(req, HCI_OP_READ_SYNC_TRAIN_PARAMS, 0, NULL);
 }