aboutsummaryrefslogtreecommitdiffstats
path: root/net/bluetooth/hci_event.c
diff options
context:
space:
mode:
authorAndrei Emeltchenko <andrei.emeltchenko@intel.com>2012-09-27 10:26:22 -0400
committerGustavo Padovan <gustavo.padovan@collabora.co.uk>2012-09-27 16:34:06 -0400
commit9495b2ee757f7747d7c28f9ba8d7edc53005ec2d (patch)
tree196d6c79f2c5836fc55c5515d9ece5e3d6aab254 /net/bluetooth/hci_event.c
parent2766be48a7181d7f2a84831ca7e7be248fb6fdb5 (diff)
Bluetooth: AMP: Process Chan Selected event
Channel Selected event indicates that link information data is available. Read it with Read Local AMP Assoc command. The data shall be sent in the A2MP Create Physical Link Request. Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com> Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
Diffstat (limited to 'net/bluetooth/hci_event.c')
-rw-r--r--net/bluetooth/hci_event.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index 0b7ba1e39d45..d702ba1c171c 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -901,6 +901,7 @@ static void hci_cc_read_local_amp_assoc(struct hci_dev *hdev,
901a2mp_rsp: 901a2mp_rsp:
902 /* Send A2MP Rsp when all fragments are received */ 902 /* Send A2MP Rsp when all fragments are received */
903 a2mp_send_getampassoc_rsp(hdev, rp->status); 903 a2mp_send_getampassoc_rsp(hdev, rp->status);
904 a2mp_send_create_phy_link_req(hdev, rp->status);
904} 905}
905 906
906static void hci_cc_delete_stored_link_key(struct hci_dev *hdev, 907static void hci_cc_delete_stored_link_key(struct hci_dev *hdev,
@@ -3641,6 +3642,22 @@ static void hci_le_meta_evt(struct hci_dev *hdev, struct sk_buff *skb)
3641 } 3642 }
3642} 3643}
3643 3644
3645static void hci_chan_selected_evt(struct hci_dev *hdev, struct sk_buff *skb)
3646{
3647 struct hci_ev_channel_selected *ev = (void *) skb->data;
3648 struct hci_conn *hcon;
3649
3650 BT_DBG("%s handle 0x%2.2x", hdev->name, ev->phy_handle);
3651
3652 skb_pull(skb, sizeof(*ev));
3653
3654 hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
3655 if (!hcon)
3656 return;
3657
3658 amp_read_loc_assoc_final_data(hdev, hcon);
3659}
3660
3644void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb) 3661void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb)
3645{ 3662{
3646 struct hci_event_hdr *hdr = (void *) skb->data; 3663 struct hci_event_hdr *hdr = (void *) skb->data;
@@ -3805,6 +3822,10 @@ void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb)
3805 hci_le_meta_evt(hdev, skb); 3822 hci_le_meta_evt(hdev, skb);
3806 break; 3823 break;
3807 3824
3825 case HCI_EV_CHANNEL_SELECTED:
3826 hci_chan_selected_evt(hdev, skb);
3827 break;
3828
3808 case HCI_EV_REMOTE_OOB_DATA_REQUEST: 3829 case HCI_EV_REMOTE_OOB_DATA_REQUEST:
3809 hci_remote_oob_data_request_evt(hdev, skb); 3830 hci_remote_oob_data_request_evt(hdev, skb);
3810 break; 3831 break;