Bluetooth: AMP: Use l2cap_physical_cfm in phylink complete evt
When receiving HCI Phylink Complete event run amp_physical_cfm which initialize BR/EDR L2CAP channel associated with High Speed link and run l2cap_physical_cfm which shall send L2CAP Create Chan Request. 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
f351bc7267
commit
cf70ff220a
4 changed files with 28 additions and 13 deletions
|
@ -46,6 +46,7 @@ void amp_accept_phylink(struct hci_dev *hdev, struct amp_mgr *mgr,
|
|||
struct hci_conn *hcon);
|
||||
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_physical_cfm(struct hci_conn *bredr_hcon, struct hci_conn *hs_hcon);
|
||||
void amp_create_logical_link(struct l2cap_chan *chan);
|
||||
void amp_disconnect_logical_link(struct hci_chan *hchan);
|
||||
void amp_destroy_logical_link(struct hci_chan *hchan, u8 reason);
|
||||
|
|
|
@ -812,5 +812,6 @@ void l2cap_send_conn_req(struct l2cap_chan *chan);
|
|||
void l2cap_move_start(struct l2cap_chan *chan);
|
||||
void l2cap_logical_cfm(struct l2cap_chan *chan, struct hci_chan *hchan,
|
||||
u8 status);
|
||||
void l2cap_physical_cfm(struct l2cap_chan *chan, int result);
|
||||
|
||||
#endif /* __L2CAP_H */
|
||||
|
|
|
@ -373,6 +373,30 @@ void amp_accept_phylink(struct hci_dev *hdev, struct amp_mgr *mgr,
|
|||
hci_send_cmd(hdev, HCI_OP_ACCEPT_PHY_LINK, sizeof(cp), &cp);
|
||||
}
|
||||
|
||||
void amp_physical_cfm(struct hci_conn *bredr_hcon, struct hci_conn *hs_hcon)
|
||||
{
|
||||
struct hci_dev *bredr_hdev = hci_dev_hold(bredr_hcon->hdev);
|
||||
struct amp_mgr *mgr = hs_hcon->amp_mgr;
|
||||
struct l2cap_chan *bredr_chan;
|
||||
|
||||
BT_DBG("bredr_hcon %p hs_hcon %p mgr %p", bredr_hcon, hs_hcon, mgr);
|
||||
|
||||
if (!bredr_hdev || !mgr || !mgr->bredr_chan)
|
||||
return;
|
||||
|
||||
bredr_chan = mgr->bredr_chan;
|
||||
|
||||
set_bit(FLAG_EFS_ENABLE, &bredr_chan->flags);
|
||||
bredr_chan->ctrl_id = hs_hcon->remote_id;
|
||||
bredr_chan->hs_hcon = hs_hcon;
|
||||
bredr_chan->conn->mtu = hs_hcon->hdev->block_mtu;
|
||||
bredr_chan->fcs = L2CAP_FCS_NONE;
|
||||
|
||||
l2cap_physical_cfm(bredr_chan, 0);
|
||||
|
||||
hci_dev_put(bredr_hdev);
|
||||
}
|
||||
|
||||
void amp_create_logical_link(struct l2cap_chan *chan)
|
||||
{
|
||||
struct hci_cp_create_accept_logical_link cp;
|
||||
|
|
|
@ -3696,20 +3696,9 @@ static void hci_phy_link_complete_evt(struct hci_dev *hdev,
|
|||
hci_conn_hold_device(hcon);
|
||||
hci_conn_add_sysfs(hcon);
|
||||
|
||||
amp_physical_cfm(bredr_hcon, hcon);
|
||||
|
||||
hci_dev_unlock(hdev);
|
||||
|
||||
if (hcon->out) {
|
||||
struct hci_dev *bredr_hdev = hci_dev_hold(bredr_hcon->hdev);
|
||||
|
||||
if (!bredr_hdev)
|
||||
return;
|
||||
|
||||
/* Placeholder - create chan req
|
||||
l2cap_chan_create_cfm(bredr_hcon, hcon->remote_id);
|
||||
*/
|
||||
|
||||
hci_dev_put(bredr_hdev);
|
||||
}
|
||||
}
|
||||
|
||||
static void hci_loglink_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
|
||||
|
|
Loading…
Reference in a new issue