Commit 574ea3c7 authored by Marcel Holtmann's avatar Marcel Holtmann Committed by Johan Hedberg

Bluetooth: Fix dependency for BR/EDR Secure Connections mode on SSP

The BR/EDR Secure Connections feature should only be enabled when the
Secure Simple Pairing mode has been enabled first. However since secure
connections is feature that is valid for BR/EDR and LE, this needs
special handling.

When enabling secure connections on a LE only configured controller,
thent the BR/EDR side should not be enabled in the controller. This
patches makes the BR/EDR Secure Connections feature depending on
enabling Secure Simple Pairing mode first.
Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
Signed-off-by: default avatarJohan Hedberg <johan.hedberg@intel.com>
parent 91200e9f
...@@ -609,6 +609,7 @@ static void hci_init2_req(struct hci_request *req, unsigned long opt) ...@@ -609,6 +609,7 @@ static void hci_init2_req(struct hci_request *req, unsigned long opt)
if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags)) { if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags)) {
u8 mode = 0x01; u8 mode = 0x01;
hci_req_add(req, HCI_OP_WRITE_SSP_MODE, hci_req_add(req, HCI_OP_WRITE_SSP_MODE,
sizeof(mode), &mode); sizeof(mode), &mode);
} else { } else {
...@@ -870,8 +871,10 @@ static void hci_init4_req(struct hci_request *req, unsigned long opt) ...@@ -870,8 +871,10 @@ static void hci_init4_req(struct hci_request *req, unsigned long opt)
hci_req_add(req, HCI_OP_READ_SYNC_TRAIN_PARAMS, 0, NULL); hci_req_add(req, HCI_OP_READ_SYNC_TRAIN_PARAMS, 0, NULL);
/* Enable Secure Connections if supported and configured */ /* Enable Secure Connections if supported and configured */
if (bredr_sc_enabled(hdev)) { if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags) &&
bredr_sc_enabled(hdev)) {
u8 support = 0x01; u8 support = 0x01;
hci_req_add(req, HCI_OP_WRITE_SC_SUPPORT, hci_req_add(req, HCI_OP_WRITE_SC_SUPPORT,
sizeof(support), &support); sizeof(support), &support);
} }
......
...@@ -6262,14 +6262,16 @@ static int powered_update_hci(struct hci_dev *hdev) ...@@ -6262,14 +6262,16 @@ static int powered_update_hci(struct hci_dev *hdev)
if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags) && if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags) &&
!lmp_host_ssp_capable(hdev)) { !lmp_host_ssp_capable(hdev)) {
u8 ssp = 1; u8 mode = 0x01;
hci_req_add(&req, HCI_OP_WRITE_SSP_MODE, 1, &ssp); hci_req_add(&req, HCI_OP_WRITE_SSP_MODE, sizeof(mode), &mode);
}
if (bredr_sc_enabled(hdev) && !lmp_host_sc_capable(hdev)) {
u8 support = 0x01;
if (bredr_sc_enabled(hdev) && !lmp_host_sc_capable(hdev)) { hci_req_add(&req, HCI_OP_WRITE_SC_SUPPORT,
u8 sc = 0x01; sizeof(support), &support);
hci_req_add(&req, HCI_OP_WRITE_SC_SUPPORT, sizeof(sc), &sc); }
} }
if (test_bit(HCI_LE_ENABLED, &hdev->dev_flags) && if (test_bit(HCI_LE_ENABLED, &hdev->dev_flags) &&
......
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