Bluetooth: AMP: Process Disc Logical Link
Add processing for HCI Disconnection Logical Link Complete Event. Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com> Acked-by: Marcel Holtmann <marcel@holtmann.org> Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
This commit is contained in:
parent
5ce66b59d7
commit
606e2a10a6
@ -47,5 +47,6 @@ void amp_accept_phylink(struct hci_dev *hdev, struct amp_mgr *mgr,
|
|||||||
void amp_write_remote_assoc(struct hci_dev *hdev, u8 handle);
|
void amp_write_remote_assoc(struct hci_dev *hdev, u8 handle);
|
||||||
void amp_write_rem_assoc_continue(struct hci_dev *hdev, u8 handle);
|
void amp_write_rem_assoc_continue(struct hci_dev *hdev, u8 handle);
|
||||||
void amp_create_logical_link(struct l2cap_chan *chan);
|
void amp_create_logical_link(struct l2cap_chan *chan);
|
||||||
|
void amp_destroy_logical_link(struct hci_chan *hchan, u8 reason);
|
||||||
|
|
||||||
#endif /* __AMP_H */
|
#endif /* __AMP_H */
|
||||||
|
@ -421,3 +421,10 @@ void amp_create_logical_link(struct l2cap_chan *chan)
|
|||||||
done:
|
done:
|
||||||
hci_dev_put(hdev);
|
hci_dev_put(hdev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void amp_destroy_logical_link(struct hci_chan *hchan, u8 reason)
|
||||||
|
{
|
||||||
|
BT_DBG("hchan %p", hchan);
|
||||||
|
|
||||||
|
hci_chan_del(hchan);
|
||||||
|
}
|
||||||
|
@ -3741,6 +3741,30 @@ static void hci_loglink_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void hci_disconn_loglink_complete_evt(struct hci_dev *hdev,
|
||||||
|
struct sk_buff *skb)
|
||||||
|
{
|
||||||
|
struct hci_ev_disconn_logical_link_complete *ev = (void *) skb->data;
|
||||||
|
struct hci_chan *hchan;
|
||||||
|
|
||||||
|
BT_DBG("%s log handle 0x%4.4x status 0x%2.2x", hdev->name,
|
||||||
|
le16_to_cpu(ev->handle), ev->status);
|
||||||
|
|
||||||
|
if (ev->status)
|
||||||
|
return;
|
||||||
|
|
||||||
|
hci_dev_lock(hdev);
|
||||||
|
|
||||||
|
hchan = hci_chan_lookup_handle(hdev, le16_to_cpu(ev->handle));
|
||||||
|
if (!hchan)
|
||||||
|
goto unlock;
|
||||||
|
|
||||||
|
amp_destroy_logical_link(hchan, ev->reason);
|
||||||
|
|
||||||
|
unlock:
|
||||||
|
hci_dev_unlock(hdev);
|
||||||
|
}
|
||||||
|
|
||||||
static void hci_le_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
|
static void hci_le_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
struct hci_ev_le_conn_complete *ev = (void *) skb->data;
|
struct hci_ev_le_conn_complete *ev = (void *) skb->data;
|
||||||
@ -4076,6 +4100,10 @@ void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb)
|
|||||||
hci_loglink_complete_evt(hdev, skb);
|
hci_loglink_complete_evt(hdev, skb);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case HCI_EV_DISCONN_LOGICAL_LINK_COMPLETE:
|
||||||
|
hci_disconn_loglink_complete_evt(hdev, skb);
|
||||||
|
break;
|
||||||
|
|
||||||
case HCI_EV_NUM_COMP_BLOCKS:
|
case HCI_EV_NUM_COMP_BLOCKS:
|
||||||
hci_num_comp_blocks_evt(hdev, skb);
|
hci_num_comp_blocks_evt(hdev, skb);
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user