diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/bluetooth/hci_core.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c index ea542e07b2e9..3d9f02b2f010 100644 --- a/net/bluetooth/hci_core.c +++ b/net/bluetooth/hci_core.c | |||
@@ -607,6 +607,34 @@ static void hci_set_le_support(struct hci_request *req) | |||
607 | &cp); | 607 | &cp); |
608 | } | 608 | } |
609 | 609 | ||
610 | static void hci_set_event_mask_page_2(struct hci_request *req) | ||
611 | { | ||
612 | struct hci_dev *hdev = req->hdev; | ||
613 | u8 events[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; | ||
614 | |||
615 | /* If Connectionless Slave Broadcast master role is supported | ||
616 | * enable all necessary events for it. | ||
617 | */ | ||
618 | if (hdev->features[2][0] & 0x01) { | ||
619 | events[1] |= 0x40; /* Triggered Clock Capture */ | ||
620 | events[1] |= 0x80; /* Synchronization Train Complete */ | ||
621 | events[2] |= 0x10; /* Slave Page Response Timeout */ | ||
622 | events[2] |= 0x20; /* CSB Channel Map Change */ | ||
623 | } | ||
624 | |||
625 | /* If Connectionless Slave Broadcast slave role is supported | ||
626 | * enable all necessary events for it. | ||
627 | */ | ||
628 | if (hdev->features[2][0] & 0x02) { | ||
629 | events[2] |= 0x01; /* Synchronization Train Received */ | ||
630 | events[2] |= 0x02; /* CSB Receive */ | ||
631 | events[2] |= 0x04; /* CSB Timeout */ | ||
632 | events[2] |= 0x08; /* Truncated Page Complete */ | ||
633 | } | ||
634 | |||
635 | hci_req_add(req, HCI_OP_SET_EVENT_MASK_PAGE_2, sizeof(events), events); | ||
636 | } | ||
637 | |||
610 | static void hci_init3_req(struct hci_request *req, unsigned long opt) | 638 | static void hci_init3_req(struct hci_request *req, unsigned long opt) |
611 | { | 639 | { |
612 | struct hci_dev *hdev = req->hdev; | 640 | struct hci_dev *hdev = req->hdev; |
@@ -652,6 +680,10 @@ static void hci_init4_req(struct hci_request *req, unsigned long opt) | |||
652 | { | 680 | { |
653 | struct hci_dev *hdev = req->hdev; | 681 | struct hci_dev *hdev = req->hdev; |
654 | 682 | ||
683 | /* Set event mask page 2 if the HCI command for it is supported */ | ||
684 | if (hdev->commands[22] & 0x04) | ||
685 | hci_set_event_mask_page_2(req); | ||
686 | |||
655 | /* Check for Synchronization Train support */ | 687 | /* Check for Synchronization Train support */ |
656 | if (hdev->features[2][0] & 0x04) | 688 | if (hdev->features[2][0] & 0x04) |
657 | hci_req_add(req, HCI_OP_READ_SYNC_TRAIN_PARAMS, 0, NULL); | 689 | hci_req_add(req, HCI_OP_READ_SYNC_TRAIN_PARAMS, 0, NULL); |