Bluetooth: AMP: Create Physical Link
When receiving A2MP Get AMP Assoc Response execute HCI Create Physical Link to AMP controller. Define function which will run when receiving HCI Command Status. Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com> Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
This commit is contained in:
parent
5a34918669
commit
a02226d6ff
|
@ -37,5 +37,7 @@ int phylink_gen_key(struct hci_conn *hcon, u8 *data, u8 *len, u8 *type);
|
||||||
void amp_read_loc_info(struct hci_dev *hdev, struct amp_mgr *mgr);
|
void amp_read_loc_info(struct hci_dev *hdev, struct amp_mgr *mgr);
|
||||||
void amp_read_loc_assoc_frag(struct hci_dev *hdev, u8 phy_handle);
|
void amp_read_loc_assoc_frag(struct hci_dev *hdev, u8 phy_handle);
|
||||||
void amp_read_loc_assoc(struct hci_dev *hdev, struct amp_mgr *mgr);
|
void amp_read_loc_assoc(struct hci_dev *hdev, struct amp_mgr *mgr);
|
||||||
|
void amp_create_phylink(struct hci_dev *hdev, struct amp_mgr *mgr,
|
||||||
|
struct hci_conn *hcon);
|
||||||
|
|
||||||
#endif /* __AMP_H */
|
#endif /* __AMP_H */
|
||||||
|
|
|
@ -392,6 +392,8 @@ static int a2mp_getampassoc_rsp(struct amp_mgr *mgr, struct sk_buff *skb,
|
||||||
|
|
||||||
BT_DBG("Created hcon %p: loc:%d -> rem:%d", hcon, hdev->id, rsp->id);
|
BT_DBG("Created hcon %p: loc:%d -> rem:%d", hcon, hdev->id, rsp->id);
|
||||||
|
|
||||||
|
amp_create_phylink(hdev, mgr, hcon);
|
||||||
|
|
||||||
done:
|
done:
|
||||||
hci_dev_put(hdev);
|
hci_dev_put(hdev);
|
||||||
skb_pull(skb, len);
|
skb_pull(skb, len);
|
||||||
|
|
|
@ -232,3 +232,22 @@ void amp_read_loc_assoc(struct hci_dev *hdev, struct amp_mgr *mgr)
|
||||||
mgr->state = READ_LOC_AMP_ASSOC;
|
mgr->state = READ_LOC_AMP_ASSOC;
|
||||||
hci_send_cmd(hdev, HCI_OP_READ_LOCAL_AMP_ASSOC, sizeof(cp), &cp);
|
hci_send_cmd(hdev, HCI_OP_READ_LOCAL_AMP_ASSOC, sizeof(cp), &cp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void amp_create_phylink(struct hci_dev *hdev, struct amp_mgr *mgr,
|
||||||
|
struct hci_conn *hcon)
|
||||||
|
{
|
||||||
|
struct hci_cp_create_phy_link cp;
|
||||||
|
|
||||||
|
cp.phy_handle = hcon->handle;
|
||||||
|
|
||||||
|
BT_DBG("%s hcon %p phy handle 0x%2.2x", hdev->name, hcon,
|
||||||
|
hcon->handle);
|
||||||
|
|
||||||
|
if (phylink_gen_key(mgr->l2cap_conn->hcon, cp.key, &cp.key_len,
|
||||||
|
&cp.key_type)) {
|
||||||
|
BT_DBG("Cannot create link key");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
hci_send_cmd(hdev, HCI_OP_CREATE_PHY_LINK, sizeof(cp), &cp);
|
||||||
|
}
|
||||||
|
|
|
@ -1698,6 +1698,11 @@ static void hci_cs_le_start_enc(struct hci_dev *hdev, u8 status)
|
||||||
BT_DBG("%s status 0x%2.2x", hdev->name, status);
|
BT_DBG("%s status 0x%2.2x", hdev->name, status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void hci_cs_create_phylink(struct hci_dev *hdev, u8 status)
|
||||||
|
{
|
||||||
|
BT_DBG("%s status 0x%2.2x", hdev->name, status);
|
||||||
|
}
|
||||||
|
|
||||||
static void hci_inquiry_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
|
static void hci_inquiry_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
__u8 status = *((__u8 *) skb->data);
|
__u8 status = *((__u8 *) skb->data);
|
||||||
|
@ -2512,6 +2517,10 @@ static void hci_cmd_status_evt(struct hci_dev *hdev, struct sk_buff *skb)
|
||||||
hci_cs_le_start_enc(hdev, ev->status);
|
hci_cs_le_start_enc(hdev, ev->status);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case HCI_OP_CREATE_PHY_LINK:
|
||||||
|
hci_cs_create_phylink(hdev, ev->status);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
BT_DBG("%s opcode 0x%4.4x", hdev->name, opcode);
|
BT_DBG("%s opcode 0x%4.4x", hdev->name, opcode);
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue