Bluetooth: Use custom macro for testing BR/EDR SC enabled
Since the HCI_SC_ENABLED flag will also be used for controllers without BR/EDR Secure Connections support whenever we need to check specifically for SC for BR/EDR we also need to check that the controller actually supports it. This patch adds a convenience macro for check all the necessary conditions and converts the places in the code that need it to use it. Signed-off-by: Johan Hedberg <johan.hedberg@intel.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
This commit is contained in:
Родитель
8f5eeca321
Коммит
710f11c08e
|
@ -999,6 +999,9 @@ void hci_conn_del_sysfs(struct hci_conn *conn);
|
||||||
|
|
||||||
#define hdev_is_powered(hdev) (test_bit(HCI_UP, &hdev->flags) && \
|
#define hdev_is_powered(hdev) (test_bit(HCI_UP, &hdev->flags) && \
|
||||||
!test_bit(HCI_AUTO_OFF, &hdev->dev_flags))
|
!test_bit(HCI_AUTO_OFF, &hdev->dev_flags))
|
||||||
|
#define bredr_sc_enabled(dev) ((lmp_sc_capable(dev) || \
|
||||||
|
test_bit(HCI_FORCE_SC, &(dev)->dbg_flags)) && \
|
||||||
|
test_bit(HCI_SC_ENABLED, &(dev)->dev_flags))
|
||||||
|
|
||||||
/* ----- HCI protocols ----- */
|
/* ----- HCI protocols ----- */
|
||||||
#define HCI_PROTO_DEFER 0x01
|
#define HCI_PROTO_DEFER 0x01
|
||||||
|
|
|
@ -1734,9 +1734,7 @@ 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 ((lmp_sc_capable(hdev) ||
|
if (bredr_sc_enabled(hdev)) {
|
||||||
test_bit(HCI_FORCE_SC, &hdev->dbg_flags)) &&
|
|
||||||
test_bit(HCI_SC_ENABLED, &hdev->dev_flags)) {
|
|
||||||
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);
|
||||||
|
|
|
@ -4027,7 +4027,7 @@ static void hci_remote_oob_data_request_evt(struct hci_dev *hdev,
|
||||||
|
|
||||||
data = hci_find_remote_oob_data(hdev, &ev->bdaddr);
|
data = hci_find_remote_oob_data(hdev, &ev->bdaddr);
|
||||||
if (data) {
|
if (data) {
|
||||||
if (test_bit(HCI_SC_ENABLED, &hdev->dev_flags)) {
|
if (bredr_sc_enabled(hdev)) {
|
||||||
struct hci_cp_remote_oob_ext_data_reply cp;
|
struct hci_cp_remote_oob_ext_data_reply cp;
|
||||||
|
|
||||||
bacpy(&cp.bdaddr, &ev->bdaddr);
|
bacpy(&cp.bdaddr, &ev->bdaddr);
|
||||||
|
|
|
@ -3562,7 +3562,7 @@ static int read_local_oob_data(struct sock *sk, struct hci_dev *hdev,
|
||||||
goto unlock;
|
goto unlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (test_bit(HCI_SC_ENABLED, &hdev->dev_flags))
|
if (bredr_sc_enabled(hdev))
|
||||||
err = hci_send_cmd(hdev, HCI_OP_READ_LOCAL_OOB_EXT_DATA,
|
err = hci_send_cmd(hdev, HCI_OP_READ_LOCAL_OOB_EXT_DATA,
|
||||||
0, NULL);
|
0, NULL);
|
||||||
else
|
else
|
||||||
|
@ -6803,8 +6803,7 @@ void mgmt_read_local_oob_data_complete(struct hci_dev *hdev, u8 *hash192,
|
||||||
cmd_status(cmd->sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA,
|
cmd_status(cmd->sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA,
|
||||||
mgmt_status(status));
|
mgmt_status(status));
|
||||||
} else {
|
} else {
|
||||||
if (test_bit(HCI_SC_ENABLED, &hdev->dev_flags) &&
|
if (bredr_sc_enabled(hdev) && hash256 && rand256) {
|
||||||
hash256 && rand256) {
|
|
||||||
struct mgmt_rp_read_local_oob_ext_data rp;
|
struct mgmt_rp_read_local_oob_ext_data rp;
|
||||||
|
|
||||||
memcpy(rp.hash192, hash192, sizeof(rp.hash192));
|
memcpy(rp.hash192, hash192, sizeof(rp.hash192));
|
||||||
|
|
Загрузка…
Ссылка в новой задаче