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_assoc_frag(struct hci_dev *hdev, u8 phy_handle); | ||||
| 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 */ | ||||
|  | ||||
| @ -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); | ||||
| 
 | ||||
| 	amp_create_phylink(hdev, mgr, hcon); | ||||
| 
 | ||||
| done: | ||||
| 	hci_dev_put(hdev); | ||||
| 	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; | ||||
| 	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); | ||||
| } | ||||
| 
 | ||||
| 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) | ||||
| { | ||||
| 	__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); | ||||
| 		break; | ||||
| 
 | ||||
| 	case HCI_OP_CREATE_PHY_LINK: | ||||
| 		hci_cs_create_phylink(hdev, ev->status); | ||||
| 		break; | ||||
| 
 | ||||
| 	default: | ||||
| 		BT_DBG("%s opcode 0x%4.4x", hdev->name, opcode); | ||||
| 		break; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user