Bluetooth: Build LE event mask based on supported commands
authorMarcel Holtmann <marcel@holtmann.org>
Sun, 1 Nov 2015 08:39:51 +0000 (09:39 +0100)
committerMarcel Holtmann <marcel@holtmann.org>
Thu, 19 Nov 2015 16:50:26 +0000 (17:50 +0100)
The LE event mask should be created based on the commands that are
actually supported by the controller.

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

index db423657935ad70b40370d3c6983dcc506dda428..ea95075f1826e511e67c5597b025069ff016fd54 100644 (file)
@@ -781,7 +781,6 @@ static void hci_init3_req(struct hci_request *req, unsigned long opt)
                u8 events[8];
 
                memset(events, 0, sizeof(events));
-               events[0] = 0x0f;
 
                if (hdev->le_features[0] & HCI_LE_ENCRYPTION)
                        events[0] |= 0x10;      /* LE Long Term Key Request */
@@ -808,6 +807,34 @@ static void hci_init3_req(struct hci_request *req, unsigned long opt)
                                                 * Report
                                                 */
 
+               /* If the controller supports the LE Set Scan Enable command,
+                * enable the corresponding advertising report event.
+                */
+               if (hdev->commands[26] & 0x08)
+                       events[0] |= 0x02;      /* LE Advertising Report */
+
+               /* If the controller supports the LE Create Connection
+                * command, enable the corresponding event.
+                */
+               if (hdev->commands[26] & 0x10)
+                       events[0] |= 0x01;      /* LE Connection Complete */
+
+               /* If the controller supports the LE Connection Update
+                * command, enable the corresponding event.
+                */
+               if (hdev->commands[27] & 0x04)
+                       events[0] |= 0x04;      /* LE Connection Update
+                                                * Complete
+                                                */
+
+               /* If the controller supports the LE Read Remote Used Features
+                * command, enable the corresponding event.
+                */
+               if (hdev->commands[27] & 0x20)
+                       events[0] |= 0x08;      /* LE Read Remote Used
+                                                * Features Complete
+                                                */
+
                /* If the controller supports the LE Read Local P-256
                 * Public Key command, enable the corresponding event.
                 */