Commit 0da71f1b authored by Marcel Holtmann's avatar Marcel Holtmann Committed by Johan Hedberg

Bluetooth: Enable LE encryption events only when supported

The support for LE encryption is optional. When encryption is not
supported then also do not enable the encryption related events.

This moves the event mask setting to the third initialization
stage to ensure that the LE features are available.
Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
Signed-off-by: default avatarJohan Hedberg <johan.hedberg@intel.com>
parent 15a49cca
...@@ -329,6 +329,7 @@ enum { ...@@ -329,6 +329,7 @@ enum {
#define LMP_HOST_SC 0x08 #define LMP_HOST_SC 0x08
/* LE features */ /* LE features */
#define HCI_LE_ENCRYPTION 0x01
#define HCI_LE_CONN_PARAM_REQ_PROC 0x02 #define HCI_LE_CONN_PARAM_REQ_PROC 0x02
#define HCI_LE_PING 0x10 #define HCI_LE_PING 0x10
......
...@@ -1422,14 +1422,17 @@ static void hci_setup_event_mask(struct hci_request *req) ...@@ -1422,14 +1422,17 @@ static void hci_setup_event_mask(struct hci_request *req)
/* Use a different default for LE-only devices */ /* Use a different default for LE-only devices */
memset(events, 0, sizeof(events)); memset(events, 0, sizeof(events));
events[0] |= 0x10; /* Disconnection Complete */ events[0] |= 0x10; /* Disconnection Complete */
events[0] |= 0x80; /* Encryption Change */
events[1] |= 0x08; /* Read Remote Version Information Complete */ events[1] |= 0x08; /* Read Remote Version Information Complete */
events[1] |= 0x20; /* Command Complete */ events[1] |= 0x20; /* Command Complete */
events[1] |= 0x40; /* Command Status */ events[1] |= 0x40; /* Command Status */
events[1] |= 0x80; /* Hardware Error */ events[1] |= 0x80; /* Hardware Error */
events[2] |= 0x04; /* Number of Completed Packets */ events[2] |= 0x04; /* Number of Completed Packets */
events[3] |= 0x02; /* Data Buffer Overflow */ events[3] |= 0x02; /* Data Buffer Overflow */
events[5] |= 0x80; /* Encryption Key Refresh Complete */
if (hdev->le_features[0] & HCI_LE_ENCRYPTION) {
events[0] |= 0x80; /* Encryption Change */
events[5] |= 0x80; /* Encryption Key Refresh Complete */
}
} }
if (lmp_inq_rssi_capable(hdev)) if (lmp_inq_rssi_capable(hdev))
...@@ -1482,8 +1485,6 @@ static void hci_init2_req(struct hci_request *req, unsigned long opt) ...@@ -1482,8 +1485,6 @@ static void hci_init2_req(struct hci_request *req, unsigned long opt)
if (lmp_le_capable(hdev)) if (lmp_le_capable(hdev))
le_setup(req); le_setup(req);
hci_setup_event_mask(req);
/* AVM Berlin (31), aka "BlueFRITZ!", doesn't support the read /* AVM Berlin (31), aka "BlueFRITZ!", doesn't support the read
* local supported commands HCI command. * local supported commands HCI command.
*/ */
...@@ -1611,6 +1612,8 @@ static void hci_init3_req(struct hci_request *req, unsigned long opt) ...@@ -1611,6 +1612,8 @@ static void hci_init3_req(struct hci_request *req, unsigned long opt)
struct hci_dev *hdev = req->hdev; struct hci_dev *hdev = req->hdev;
u8 p; u8 p;
hci_setup_event_mask(req);
/* Some Broadcom based Bluetooth controllers do not support the /* Some Broadcom based Bluetooth controllers do not support the
* Delete Stored Link Key command. They are clearly indicating its * Delete Stored Link Key command. They are clearly indicating its
* absence in the bit mask of supported commands. * absence in the bit mask of supported commands.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment