Merge tag 'for-linus' of git://git.armlinux.org.uk/~rmk/linux-arm
[linux-2.6-microblaze.git] / net / bluetooth / hci_conn.c
1 /*
2    BlueZ - Bluetooth protocol stack for Linux
3    Copyright (c) 2000-2001, 2010, Code Aurora Forum. All rights reserved.
4    Copyright 2023 NXP
5
6    Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
7
8    This program is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License version 2 as
10    published by the Free Software Foundation;
11
12    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
13    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
15    IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
16    CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
17    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
18    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
19    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20
21    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
22    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
23    SOFTWARE IS DISCLAIMED.
24 */
25
26 /* Bluetooth HCI connection handling. */
27
28 #include <linux/export.h>
29 #include <linux/debugfs.h>
30
31 #include <net/bluetooth/bluetooth.h>
32 #include <net/bluetooth/hci_core.h>
33 #include <net/bluetooth/l2cap.h>
34 #include <net/bluetooth/iso.h>
35 #include <net/bluetooth/mgmt.h>
36
37 #include "hci_request.h"
38 #include "smp.h"
39 #include "a2mp.h"
40 #include "eir.h"
41
42 struct sco_param {
43         u16 pkt_type;
44         u16 max_latency;
45         u8  retrans_effort;
46 };
47
48 struct conn_handle_t {
49         struct hci_conn *conn;
50         __u16 handle;
51 };
52
53 static const struct sco_param esco_param_cvsd[] = {
54         { EDR_ESCO_MASK & ~ESCO_2EV3, 0x000a,   0x01 }, /* S3 */
55         { EDR_ESCO_MASK & ~ESCO_2EV3, 0x0007,   0x01 }, /* S2 */
56         { EDR_ESCO_MASK | ESCO_EV3,   0x0007,   0x01 }, /* S1 */
57         { EDR_ESCO_MASK | ESCO_HV3,   0xffff,   0x01 }, /* D1 */
58         { EDR_ESCO_MASK | ESCO_HV1,   0xffff,   0x01 }, /* D0 */
59 };
60
61 static const struct sco_param sco_param_cvsd[] = {
62         { EDR_ESCO_MASK | ESCO_HV3,   0xffff,   0xff }, /* D1 */
63         { EDR_ESCO_MASK | ESCO_HV1,   0xffff,   0xff }, /* D0 */
64 };
65
66 static const struct sco_param esco_param_msbc[] = {
67         { EDR_ESCO_MASK & ~ESCO_2EV3, 0x000d,   0x02 }, /* T2 */
68         { EDR_ESCO_MASK | ESCO_EV3,   0x0008,   0x02 }, /* T1 */
69 };
70
71 /* This function requires the caller holds hdev->lock */
72 static void hci_connect_le_scan_cleanup(struct hci_conn *conn, u8 status)
73 {
74         struct hci_conn_params *params;
75         struct hci_dev *hdev = conn->hdev;
76         struct smp_irk *irk;
77         bdaddr_t *bdaddr;
78         u8 bdaddr_type;
79
80         bdaddr = &conn->dst;
81         bdaddr_type = conn->dst_type;
82
83         /* Check if we need to convert to identity address */
84         irk = hci_get_irk(hdev, bdaddr, bdaddr_type);
85         if (irk) {
86                 bdaddr = &irk->bdaddr;
87                 bdaddr_type = irk->addr_type;
88         }
89
90         params = hci_pend_le_action_lookup(&hdev->pend_le_conns, bdaddr,
91                                            bdaddr_type);
92         if (!params)
93                 return;
94
95         if (params->conn) {
96                 hci_conn_drop(params->conn);
97                 hci_conn_put(params->conn);
98                 params->conn = NULL;
99         }
100
101         if (!params->explicit_connect)
102                 return;
103
104         /* If the status indicates successful cancellation of
105          * the attempt (i.e. Unknown Connection Id) there's no point of
106          * notifying failure since we'll go back to keep trying to
107          * connect. The only exception is explicit connect requests
108          * where a timeout + cancel does indicate an actual failure.
109          */
110         if (status && status != HCI_ERROR_UNKNOWN_CONN_ID)
111                 mgmt_connect_failed(hdev, &conn->dst, conn->type,
112                                     conn->dst_type, status);
113
114         /* The connection attempt was doing scan for new RPA, and is
115          * in scan phase. If params are not associated with any other
116          * autoconnect action, remove them completely. If they are, just unmark
117          * them as waiting for connection, by clearing explicit_connect field.
118          */
119         params->explicit_connect = false;
120
121         list_del_init(&params->action);
122
123         switch (params->auto_connect) {
124         case HCI_AUTO_CONN_EXPLICIT:
125                 hci_conn_params_del(hdev, bdaddr, bdaddr_type);
126                 /* return instead of break to avoid duplicate scan update */
127                 return;
128         case HCI_AUTO_CONN_DIRECT:
129         case HCI_AUTO_CONN_ALWAYS:
130                 list_add(&params->action, &hdev->pend_le_conns);
131                 break;
132         case HCI_AUTO_CONN_REPORT:
133                 list_add(&params->action, &hdev->pend_le_reports);
134                 break;
135         default:
136                 break;
137         }
138
139         hci_update_passive_scan(hdev);
140 }
141
142 static void hci_conn_cleanup(struct hci_conn *conn)
143 {
144         struct hci_dev *hdev = conn->hdev;
145
146         if (test_bit(HCI_CONN_PARAM_REMOVAL_PEND, &conn->flags))
147                 hci_conn_params_del(conn->hdev, &conn->dst, conn->dst_type);
148
149         if (test_and_clear_bit(HCI_CONN_FLUSH_KEY, &conn->flags))
150                 hci_remove_link_key(hdev, &conn->dst);
151
152         hci_chan_list_flush(conn);
153
154         hci_conn_hash_del(hdev, conn);
155
156         if (conn->cleanup)
157                 conn->cleanup(conn);
158
159         if (conn->type == SCO_LINK || conn->type == ESCO_LINK) {
160                 switch (conn->setting & SCO_AIRMODE_MASK) {
161                 case SCO_AIRMODE_CVSD:
162                 case SCO_AIRMODE_TRANSP:
163                         if (hdev->notify)
164                                 hdev->notify(hdev, HCI_NOTIFY_DISABLE_SCO);
165                         break;
166                 }
167         } else {
168                 if (hdev->notify)
169                         hdev->notify(hdev, HCI_NOTIFY_CONN_DEL);
170         }
171
172         hci_conn_del_sysfs(conn);
173
174         debugfs_remove_recursive(conn->debugfs);
175
176         hci_dev_put(hdev);
177
178         hci_conn_put(conn);
179 }
180
181 static void le_scan_cleanup(struct work_struct *work)
182 {
183         struct hci_conn *conn = container_of(work, struct hci_conn,
184                                              le_scan_cleanup);
185         struct hci_dev *hdev = conn->hdev;
186         struct hci_conn *c = NULL;
187
188         BT_DBG("%s hcon %p", hdev->name, conn);
189
190         hci_dev_lock(hdev);
191
192         /* Check that the hci_conn is still around */
193         rcu_read_lock();
194         list_for_each_entry_rcu(c, &hdev->conn_hash.list, list) {
195                 if (c == conn)
196                         break;
197         }
198         rcu_read_unlock();
199
200         if (c == conn) {
201                 hci_connect_le_scan_cleanup(conn, 0x00);
202                 hci_conn_cleanup(conn);
203         }
204
205         hci_dev_unlock(hdev);
206         hci_dev_put(hdev);
207         hci_conn_put(conn);
208 }
209
210 static void hci_connect_le_scan_remove(struct hci_conn *conn)
211 {
212         BT_DBG("%s hcon %p", conn->hdev->name, conn);
213
214         /* We can't call hci_conn_del/hci_conn_cleanup here since that
215          * could deadlock with another hci_conn_del() call that's holding
216          * hci_dev_lock and doing cancel_delayed_work_sync(&conn->disc_work).
217          * Instead, grab temporary extra references to the hci_dev and
218          * hci_conn and perform the necessary cleanup in a separate work
219          * callback.
220          */
221
222         hci_dev_hold(conn->hdev);
223         hci_conn_get(conn);
224
225         /* Even though we hold a reference to the hdev, many other
226          * things might get cleaned up meanwhile, including the hdev's
227          * own workqueue, so we can't use that for scheduling.
228          */
229         schedule_work(&conn->le_scan_cleanup);
230 }
231
232 static void hci_acl_create_connection(struct hci_conn *conn)
233 {
234         struct hci_dev *hdev = conn->hdev;
235         struct inquiry_entry *ie;
236         struct hci_cp_create_conn cp;
237
238         BT_DBG("hcon %p", conn);
239
240         /* Many controllers disallow HCI Create Connection while it is doing
241          * HCI Inquiry. So we cancel the Inquiry first before issuing HCI Create
242          * Connection. This may cause the MGMT discovering state to become false
243          * without user space's request but it is okay since the MGMT Discovery
244          * APIs do not promise that discovery should be done forever. Instead,
245          * the user space monitors the status of MGMT discovering and it may
246          * request for discovery again when this flag becomes false.
247          */
248         if (test_bit(HCI_INQUIRY, &hdev->flags)) {
249                 /* Put this connection to "pending" state so that it will be
250                  * executed after the inquiry cancel command complete event.
251                  */
252                 conn->state = BT_CONNECT2;
253                 hci_send_cmd(hdev, HCI_OP_INQUIRY_CANCEL, 0, NULL);
254                 return;
255         }
256
257         conn->state = BT_CONNECT;
258         conn->out = true;
259         conn->role = HCI_ROLE_MASTER;
260
261         conn->attempt++;
262
263         conn->link_policy = hdev->link_policy;
264
265         memset(&cp, 0, sizeof(cp));
266         bacpy(&cp.bdaddr, &conn->dst);
267         cp.pscan_rep_mode = 0x02;
268
269         ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
270         if (ie) {
271                 if (inquiry_entry_age(ie) <= INQUIRY_ENTRY_AGE_MAX) {
272                         cp.pscan_rep_mode = ie->data.pscan_rep_mode;
273                         cp.pscan_mode     = ie->data.pscan_mode;
274                         cp.clock_offset   = ie->data.clock_offset |
275                                             cpu_to_le16(0x8000);
276                 }
277
278                 memcpy(conn->dev_class, ie->data.dev_class, 3);
279         }
280
281         cp.pkt_type = cpu_to_le16(conn->pkt_type);
282         if (lmp_rswitch_capable(hdev) && !(hdev->link_mode & HCI_LM_MASTER))
283                 cp.role_switch = 0x01;
284         else
285                 cp.role_switch = 0x00;
286
287         hci_send_cmd(hdev, HCI_OP_CREATE_CONN, sizeof(cp), &cp);
288 }
289
290 int hci_disconnect(struct hci_conn *conn, __u8 reason)
291 {
292         BT_DBG("hcon %p", conn);
293
294         /* When we are central of an established connection and it enters
295          * the disconnect timeout, then go ahead and try to read the
296          * current clock offset.  Processing of the result is done
297          * within the event handling and hci_clock_offset_evt function.
298          */
299         if (conn->type == ACL_LINK && conn->role == HCI_ROLE_MASTER &&
300             (conn->state == BT_CONNECTED || conn->state == BT_CONFIG)) {
301                 struct hci_dev *hdev = conn->hdev;
302                 struct hci_cp_read_clock_offset clkoff_cp;
303
304                 clkoff_cp.handle = cpu_to_le16(conn->handle);
305                 hci_send_cmd(hdev, HCI_OP_READ_CLOCK_OFFSET, sizeof(clkoff_cp),
306                              &clkoff_cp);
307         }
308
309         return hci_abort_conn(conn, reason);
310 }
311
312 static void hci_add_sco(struct hci_conn *conn, __u16 handle)
313 {
314         struct hci_dev *hdev = conn->hdev;
315         struct hci_cp_add_sco cp;
316
317         BT_DBG("hcon %p", conn);
318
319         conn->state = BT_CONNECT;
320         conn->out = true;
321
322         conn->attempt++;
323
324         cp.handle   = cpu_to_le16(handle);
325         cp.pkt_type = cpu_to_le16(conn->pkt_type);
326
327         hci_send_cmd(hdev, HCI_OP_ADD_SCO, sizeof(cp), &cp);
328 }
329
330 static bool find_next_esco_param(struct hci_conn *conn,
331                                  const struct sco_param *esco_param, int size)
332 {
333         if (!conn->parent)
334                 return false;
335
336         for (; conn->attempt <= size; conn->attempt++) {
337                 if (lmp_esco_2m_capable(conn->parent) ||
338                     (esco_param[conn->attempt - 1].pkt_type & ESCO_2EV3))
339                         break;
340                 BT_DBG("hcon %p skipped attempt %d, eSCO 2M not supported",
341                        conn, conn->attempt);
342         }
343
344         return conn->attempt <= size;
345 }
346
347 static int configure_datapath_sync(struct hci_dev *hdev, struct bt_codec *codec)
348 {
349         int err;
350         __u8 vnd_len, *vnd_data = NULL;
351         struct hci_op_configure_data_path *cmd = NULL;
352
353         err = hdev->get_codec_config_data(hdev, ESCO_LINK, codec, &vnd_len,
354                                           &vnd_data);
355         if (err < 0)
356                 goto error;
357
358         cmd = kzalloc(sizeof(*cmd) + vnd_len, GFP_KERNEL);
359         if (!cmd) {
360                 err = -ENOMEM;
361                 goto error;
362         }
363
364         err = hdev->get_data_path_id(hdev, &cmd->data_path_id);
365         if (err < 0)
366                 goto error;
367
368         cmd->vnd_len = vnd_len;
369         memcpy(cmd->vnd_data, vnd_data, vnd_len);
370
371         cmd->direction = 0x00;
372         __hci_cmd_sync_status(hdev, HCI_CONFIGURE_DATA_PATH,
373                               sizeof(*cmd) + vnd_len, cmd, HCI_CMD_TIMEOUT);
374
375         cmd->direction = 0x01;
376         err = __hci_cmd_sync_status(hdev, HCI_CONFIGURE_DATA_PATH,
377                                     sizeof(*cmd) + vnd_len, cmd,
378                                     HCI_CMD_TIMEOUT);
379 error:
380
381         kfree(cmd);
382         kfree(vnd_data);
383         return err;
384 }
385
386 static int hci_enhanced_setup_sync(struct hci_dev *hdev, void *data)
387 {
388         struct conn_handle_t *conn_handle = data;
389         struct hci_conn *conn = conn_handle->conn;
390         __u16 handle = conn_handle->handle;
391         struct hci_cp_enhanced_setup_sync_conn cp;
392         const struct sco_param *param;
393
394         kfree(conn_handle);
395
396         bt_dev_dbg(hdev, "hcon %p", conn);
397
398         /* for offload use case, codec needs to configured before opening SCO */
399         if (conn->codec.data_path)
400                 configure_datapath_sync(hdev, &conn->codec);
401
402         conn->state = BT_CONNECT;
403         conn->out = true;
404
405         conn->attempt++;
406
407         memset(&cp, 0x00, sizeof(cp));
408
409         cp.handle   = cpu_to_le16(handle);
410
411         cp.tx_bandwidth   = cpu_to_le32(0x00001f40);
412         cp.rx_bandwidth   = cpu_to_le32(0x00001f40);
413
414         switch (conn->codec.id) {
415         case BT_CODEC_MSBC:
416                 if (!find_next_esco_param(conn, esco_param_msbc,
417                                           ARRAY_SIZE(esco_param_msbc)))
418                         return -EINVAL;
419
420                 param = &esco_param_msbc[conn->attempt - 1];
421                 cp.tx_coding_format.id = 0x05;
422                 cp.rx_coding_format.id = 0x05;
423                 cp.tx_codec_frame_size = __cpu_to_le16(60);
424                 cp.rx_codec_frame_size = __cpu_to_le16(60);
425                 cp.in_bandwidth = __cpu_to_le32(32000);
426                 cp.out_bandwidth = __cpu_to_le32(32000);
427                 cp.in_coding_format.id = 0x04;
428                 cp.out_coding_format.id = 0x04;
429                 cp.in_coded_data_size = __cpu_to_le16(16);
430                 cp.out_coded_data_size = __cpu_to_le16(16);
431                 cp.in_pcm_data_format = 2;
432                 cp.out_pcm_data_format = 2;
433                 cp.in_pcm_sample_payload_msb_pos = 0;
434                 cp.out_pcm_sample_payload_msb_pos = 0;
435                 cp.in_data_path = conn->codec.data_path;
436                 cp.out_data_path = conn->codec.data_path;
437                 cp.in_transport_unit_size = 1;
438                 cp.out_transport_unit_size = 1;
439                 break;
440
441         case BT_CODEC_TRANSPARENT:
442                 if (!find_next_esco_param(conn, esco_param_msbc,
443                                           ARRAY_SIZE(esco_param_msbc)))
444                         return false;
445                 param = &esco_param_msbc[conn->attempt - 1];
446                 cp.tx_coding_format.id = 0x03;
447                 cp.rx_coding_format.id = 0x03;
448                 cp.tx_codec_frame_size = __cpu_to_le16(60);
449                 cp.rx_codec_frame_size = __cpu_to_le16(60);
450                 cp.in_bandwidth = __cpu_to_le32(0x1f40);
451                 cp.out_bandwidth = __cpu_to_le32(0x1f40);
452                 cp.in_coding_format.id = 0x03;
453                 cp.out_coding_format.id = 0x03;
454                 cp.in_coded_data_size = __cpu_to_le16(16);
455                 cp.out_coded_data_size = __cpu_to_le16(16);
456                 cp.in_pcm_data_format = 2;
457                 cp.out_pcm_data_format = 2;
458                 cp.in_pcm_sample_payload_msb_pos = 0;
459                 cp.out_pcm_sample_payload_msb_pos = 0;
460                 cp.in_data_path = conn->codec.data_path;
461                 cp.out_data_path = conn->codec.data_path;
462                 cp.in_transport_unit_size = 1;
463                 cp.out_transport_unit_size = 1;
464                 break;
465
466         case BT_CODEC_CVSD:
467                 if (conn->parent && lmp_esco_capable(conn->parent)) {
468                         if (!find_next_esco_param(conn, esco_param_cvsd,
469                                                   ARRAY_SIZE(esco_param_cvsd)))
470                                 return -EINVAL;
471                         param = &esco_param_cvsd[conn->attempt - 1];
472                 } else {
473                         if (conn->attempt > ARRAY_SIZE(sco_param_cvsd))
474                                 return -EINVAL;
475                         param = &sco_param_cvsd[conn->attempt - 1];
476                 }
477                 cp.tx_coding_format.id = 2;
478                 cp.rx_coding_format.id = 2;
479                 cp.tx_codec_frame_size = __cpu_to_le16(60);
480                 cp.rx_codec_frame_size = __cpu_to_le16(60);
481                 cp.in_bandwidth = __cpu_to_le32(16000);
482                 cp.out_bandwidth = __cpu_to_le32(16000);
483                 cp.in_coding_format.id = 4;
484                 cp.out_coding_format.id = 4;
485                 cp.in_coded_data_size = __cpu_to_le16(16);
486                 cp.out_coded_data_size = __cpu_to_le16(16);
487                 cp.in_pcm_data_format = 2;
488                 cp.out_pcm_data_format = 2;
489                 cp.in_pcm_sample_payload_msb_pos = 0;
490                 cp.out_pcm_sample_payload_msb_pos = 0;
491                 cp.in_data_path = conn->codec.data_path;
492                 cp.out_data_path = conn->codec.data_path;
493                 cp.in_transport_unit_size = 16;
494                 cp.out_transport_unit_size = 16;
495                 break;
496         default:
497                 return -EINVAL;
498         }
499
500         cp.retrans_effort = param->retrans_effort;
501         cp.pkt_type = __cpu_to_le16(param->pkt_type);
502         cp.max_latency = __cpu_to_le16(param->max_latency);
503
504         if (hci_send_cmd(hdev, HCI_OP_ENHANCED_SETUP_SYNC_CONN, sizeof(cp), &cp) < 0)
505                 return -EIO;
506
507         return 0;
508 }
509
510 static bool hci_setup_sync_conn(struct hci_conn *conn, __u16 handle)
511 {
512         struct hci_dev *hdev = conn->hdev;
513         struct hci_cp_setup_sync_conn cp;
514         const struct sco_param *param;
515
516         bt_dev_dbg(hdev, "hcon %p", conn);
517
518         conn->state = BT_CONNECT;
519         conn->out = true;
520
521         conn->attempt++;
522
523         cp.handle   = cpu_to_le16(handle);
524
525         cp.tx_bandwidth   = cpu_to_le32(0x00001f40);
526         cp.rx_bandwidth   = cpu_to_le32(0x00001f40);
527         cp.voice_setting  = cpu_to_le16(conn->setting);
528
529         switch (conn->setting & SCO_AIRMODE_MASK) {
530         case SCO_AIRMODE_TRANSP:
531                 if (!find_next_esco_param(conn, esco_param_msbc,
532                                           ARRAY_SIZE(esco_param_msbc)))
533                         return false;
534                 param = &esco_param_msbc[conn->attempt - 1];
535                 break;
536         case SCO_AIRMODE_CVSD:
537                 if (conn->parent && lmp_esco_capable(conn->parent)) {
538                         if (!find_next_esco_param(conn, esco_param_cvsd,
539                                                   ARRAY_SIZE(esco_param_cvsd)))
540                                 return false;
541                         param = &esco_param_cvsd[conn->attempt - 1];
542                 } else {
543                         if (conn->attempt > ARRAY_SIZE(sco_param_cvsd))
544                                 return false;
545                         param = &sco_param_cvsd[conn->attempt - 1];
546                 }
547                 break;
548         default:
549                 return false;
550         }
551
552         cp.retrans_effort = param->retrans_effort;
553         cp.pkt_type = __cpu_to_le16(param->pkt_type);
554         cp.max_latency = __cpu_to_le16(param->max_latency);
555
556         if (hci_send_cmd(hdev, HCI_OP_SETUP_SYNC_CONN, sizeof(cp), &cp) < 0)
557                 return false;
558
559         return true;
560 }
561
562 bool hci_setup_sync(struct hci_conn *conn, __u16 handle)
563 {
564         int result;
565         struct conn_handle_t *conn_handle;
566
567         if (enhanced_sync_conn_capable(conn->hdev)) {
568                 conn_handle = kzalloc(sizeof(*conn_handle), GFP_KERNEL);
569
570                 if (!conn_handle)
571                         return false;
572
573                 conn_handle->conn = conn;
574                 conn_handle->handle = handle;
575                 result = hci_cmd_sync_queue(conn->hdev, hci_enhanced_setup_sync,
576                                             conn_handle, NULL);
577                 if (result < 0)
578                         kfree(conn_handle);
579
580                 return result == 0;
581         }
582
583         return hci_setup_sync_conn(conn, handle);
584 }
585
586 u8 hci_le_conn_update(struct hci_conn *conn, u16 min, u16 max, u16 latency,
587                       u16 to_multiplier)
588 {
589         struct hci_dev *hdev = conn->hdev;
590         struct hci_conn_params *params;
591         struct hci_cp_le_conn_update cp;
592
593         hci_dev_lock(hdev);
594
595         params = hci_conn_params_lookup(hdev, &conn->dst, conn->dst_type);
596         if (params) {
597                 params->conn_min_interval = min;
598                 params->conn_max_interval = max;
599                 params->conn_latency = latency;
600                 params->supervision_timeout = to_multiplier;
601         }
602
603         hci_dev_unlock(hdev);
604
605         memset(&cp, 0, sizeof(cp));
606         cp.handle               = cpu_to_le16(conn->handle);
607         cp.conn_interval_min    = cpu_to_le16(min);
608         cp.conn_interval_max    = cpu_to_le16(max);
609         cp.conn_latency         = cpu_to_le16(latency);
610         cp.supervision_timeout  = cpu_to_le16(to_multiplier);
611         cp.min_ce_len           = cpu_to_le16(0x0000);
612         cp.max_ce_len           = cpu_to_le16(0x0000);
613
614         hci_send_cmd(hdev, HCI_OP_LE_CONN_UPDATE, sizeof(cp), &cp);
615
616         if (params)
617                 return 0x01;
618
619         return 0x00;
620 }
621
622 void hci_le_start_enc(struct hci_conn *conn, __le16 ediv, __le64 rand,
623                       __u8 ltk[16], __u8 key_size)
624 {
625         struct hci_dev *hdev = conn->hdev;
626         struct hci_cp_le_start_enc cp;
627
628         BT_DBG("hcon %p", conn);
629
630         memset(&cp, 0, sizeof(cp));
631
632         cp.handle = cpu_to_le16(conn->handle);
633         cp.rand = rand;
634         cp.ediv = ediv;
635         memcpy(cp.ltk, ltk, key_size);
636
637         hci_send_cmd(hdev, HCI_OP_LE_START_ENC, sizeof(cp), &cp);
638 }
639
640 /* Device _must_ be locked */
641 void hci_sco_setup(struct hci_conn *conn, __u8 status)
642 {
643         struct hci_link *link;
644
645         link = list_first_entry_or_null(&conn->link_list, struct hci_link, list);
646         if (!link || !link->conn)
647                 return;
648
649         BT_DBG("hcon %p", conn);
650
651         if (!status) {
652                 if (lmp_esco_capable(conn->hdev))
653                         hci_setup_sync(link->conn, conn->handle);
654                 else
655                         hci_add_sco(link->conn, conn->handle);
656         } else {
657                 hci_connect_cfm(link->conn, status);
658                 hci_conn_del(link->conn);
659         }
660 }
661
662 static void hci_conn_timeout(struct work_struct *work)
663 {
664         struct hci_conn *conn = container_of(work, struct hci_conn,
665                                              disc_work.work);
666         int refcnt = atomic_read(&conn->refcnt);
667
668         BT_DBG("hcon %p state %s", conn, state_to_string(conn->state));
669
670         WARN_ON(refcnt < 0);
671
672         /* FIXME: It was observed that in pairing failed scenario, refcnt
673          * drops below 0. Probably this is because l2cap_conn_del calls
674          * l2cap_chan_del for each channel, and inside l2cap_chan_del conn is
675          * dropped. After that loop hci_chan_del is called which also drops
676          * conn. For now make sure that ACL is alive if refcnt is higher then 0,
677          * otherwise drop it.
678          */
679         if (refcnt > 0)
680                 return;
681
682         /* LE connections in scanning state need special handling */
683         if (conn->state == BT_CONNECT && conn->type == LE_LINK &&
684             test_bit(HCI_CONN_SCANNING, &conn->flags)) {
685                 hci_connect_le_scan_remove(conn);
686                 return;
687         }
688
689         hci_abort_conn(conn, hci_proto_disconn_ind(conn));
690 }
691
692 /* Enter sniff mode */
693 static void hci_conn_idle(struct work_struct *work)
694 {
695         struct hci_conn *conn = container_of(work, struct hci_conn,
696                                              idle_work.work);
697         struct hci_dev *hdev = conn->hdev;
698
699         BT_DBG("hcon %p mode %d", conn, conn->mode);
700
701         if (!lmp_sniff_capable(hdev) || !lmp_sniff_capable(conn))
702                 return;
703
704         if (conn->mode != HCI_CM_ACTIVE || !(conn->link_policy & HCI_LP_SNIFF))
705                 return;
706
707         if (lmp_sniffsubr_capable(hdev) && lmp_sniffsubr_capable(conn)) {
708                 struct hci_cp_sniff_subrate cp;
709                 cp.handle             = cpu_to_le16(conn->handle);
710                 cp.max_latency        = cpu_to_le16(0);
711                 cp.min_remote_timeout = cpu_to_le16(0);
712                 cp.min_local_timeout  = cpu_to_le16(0);
713                 hci_send_cmd(hdev, HCI_OP_SNIFF_SUBRATE, sizeof(cp), &cp);
714         }
715
716         if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags)) {
717                 struct hci_cp_sniff_mode cp;
718                 cp.handle       = cpu_to_le16(conn->handle);
719                 cp.max_interval = cpu_to_le16(hdev->sniff_max_interval);
720                 cp.min_interval = cpu_to_le16(hdev->sniff_min_interval);
721                 cp.attempt      = cpu_to_le16(4);
722                 cp.timeout      = cpu_to_le16(1);
723                 hci_send_cmd(hdev, HCI_OP_SNIFF_MODE, sizeof(cp), &cp);
724         }
725 }
726
727 static void hci_conn_auto_accept(struct work_struct *work)
728 {
729         struct hci_conn *conn = container_of(work, struct hci_conn,
730                                              auto_accept_work.work);
731
732         hci_send_cmd(conn->hdev, HCI_OP_USER_CONFIRM_REPLY, sizeof(conn->dst),
733                      &conn->dst);
734 }
735
736 static void le_disable_advertising(struct hci_dev *hdev)
737 {
738         if (ext_adv_capable(hdev)) {
739                 struct hci_cp_le_set_ext_adv_enable cp;
740
741                 cp.enable = 0x00;
742                 cp.num_of_sets = 0x00;
743
744                 hci_send_cmd(hdev, HCI_OP_LE_SET_EXT_ADV_ENABLE, sizeof(cp),
745                              &cp);
746         } else {
747                 u8 enable = 0x00;
748                 hci_send_cmd(hdev, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable),
749                              &enable);
750         }
751 }
752
753 static void le_conn_timeout(struct work_struct *work)
754 {
755         struct hci_conn *conn = container_of(work, struct hci_conn,
756                                              le_conn_timeout.work);
757         struct hci_dev *hdev = conn->hdev;
758
759         BT_DBG("");
760
761         /* We could end up here due to having done directed advertising,
762          * so clean up the state if necessary. This should however only
763          * happen with broken hardware or if low duty cycle was used
764          * (which doesn't have a timeout of its own).
765          */
766         if (conn->role == HCI_ROLE_SLAVE) {
767                 /* Disable LE Advertising */
768                 le_disable_advertising(hdev);
769                 hci_dev_lock(hdev);
770                 hci_conn_failed(conn, HCI_ERROR_ADVERTISING_TIMEOUT);
771                 hci_dev_unlock(hdev);
772                 return;
773         }
774
775         hci_abort_conn(conn, HCI_ERROR_REMOTE_USER_TERM);
776 }
777
778 struct iso_list_data {
779         union {
780                 u8  cig;
781                 u8  big;
782         };
783         union {
784                 u8  cis;
785                 u8  bis;
786                 u16 sync_handle;
787         };
788         int count;
789         struct {
790                 struct hci_cp_le_set_cig_params cp;
791                 struct hci_cis_params cis[0x11];
792         } pdu;
793 };
794
795 static void bis_list(struct hci_conn *conn, void *data)
796 {
797         struct iso_list_data *d = data;
798
799         /* Skip if not broadcast/ANY address */
800         if (bacmp(&conn->dst, BDADDR_ANY))
801                 return;
802
803         if (d->big != conn->iso_qos.bcast.big || d->bis == BT_ISO_QOS_BIS_UNSET ||
804             d->bis != conn->iso_qos.bcast.bis)
805                 return;
806
807         d->count++;
808 }
809
810 static void find_bis(struct hci_conn *conn, void *data)
811 {
812         struct iso_list_data *d = data;
813
814         /* Ignore unicast */
815         if (bacmp(&conn->dst, BDADDR_ANY))
816                 return;
817
818         d->count++;
819 }
820
821 static int terminate_big_sync(struct hci_dev *hdev, void *data)
822 {
823         struct iso_list_data *d = data;
824
825         bt_dev_dbg(hdev, "big 0x%2.2x bis 0x%2.2x", d->big, d->bis);
826
827         hci_remove_ext_adv_instance_sync(hdev, d->bis, NULL);
828
829         /* Check if ISO connection is a BIS and terminate BIG if there are
830          * no other connections using it.
831          */
832         hci_conn_hash_list_state(hdev, find_bis, ISO_LINK, BT_CONNECTED, d);
833         if (d->count)
834                 return 0;
835
836         return hci_le_terminate_big_sync(hdev, d->big,
837                                          HCI_ERROR_LOCAL_HOST_TERM);
838 }
839
840 static void terminate_big_destroy(struct hci_dev *hdev, void *data, int err)
841 {
842         kfree(data);
843 }
844
845 static int hci_le_terminate_big(struct hci_dev *hdev, u8 big, u8 bis)
846 {
847         struct iso_list_data *d;
848         int ret;
849
850         bt_dev_dbg(hdev, "big 0x%2.2x bis 0x%2.2x", big, bis);
851
852         d = kzalloc(sizeof(*d), GFP_KERNEL);
853         if (!d)
854                 return -ENOMEM;
855
856         d->big = big;
857         d->bis = bis;
858
859         ret = hci_cmd_sync_queue(hdev, terminate_big_sync, d,
860                                  terminate_big_destroy);
861         if (ret)
862                 kfree(d);
863
864         return ret;
865 }
866
867 static int big_terminate_sync(struct hci_dev *hdev, void *data)
868 {
869         struct iso_list_data *d = data;
870
871         bt_dev_dbg(hdev, "big 0x%2.2x sync_handle 0x%4.4x", d->big,
872                    d->sync_handle);
873
874         /* Check if ISO connection is a BIS and terminate BIG if there are
875          * no other connections using it.
876          */
877         hci_conn_hash_list_state(hdev, find_bis, ISO_LINK, BT_CONNECTED, d);
878         if (d->count)
879                 return 0;
880
881         hci_le_big_terminate_sync(hdev, d->big);
882
883         return hci_le_pa_terminate_sync(hdev, d->sync_handle);
884 }
885
886 static int hci_le_big_terminate(struct hci_dev *hdev, u8 big, u16 sync_handle)
887 {
888         struct iso_list_data *d;
889         int ret;
890
891         bt_dev_dbg(hdev, "big 0x%2.2x sync_handle 0x%4.4x", big, sync_handle);
892
893         d = kzalloc(sizeof(*d), GFP_KERNEL);
894         if (!d)
895                 return -ENOMEM;
896
897         d->big = big;
898         d->sync_handle = sync_handle;
899
900         ret = hci_cmd_sync_queue(hdev, big_terminate_sync, d,
901                                  terminate_big_destroy);
902         if (ret)
903                 kfree(d);
904
905         return ret;
906 }
907
908 /* Cleanup BIS connection
909  *
910  * Detects if there any BIS left connected in a BIG
911  * broadcaster: Remove advertising instance and terminate BIG.
912  * broadcaster receiver: Teminate BIG sync and terminate PA sync.
913  */
914 static void bis_cleanup(struct hci_conn *conn)
915 {
916         struct hci_dev *hdev = conn->hdev;
917
918         bt_dev_dbg(hdev, "conn %p", conn);
919
920         if (conn->role == HCI_ROLE_MASTER) {
921                 if (!test_and_clear_bit(HCI_CONN_PER_ADV, &conn->flags))
922                         return;
923
924                 hci_le_terminate_big(hdev, conn->iso_qos.bcast.big,
925                                      conn->iso_qos.bcast.bis);
926         } else {
927                 hci_le_big_terminate(hdev, conn->iso_qos.bcast.big,
928                                      conn->sync_handle);
929         }
930 }
931
932 static int remove_cig_sync(struct hci_dev *hdev, void *data)
933 {
934         u8 handle = PTR_ERR(data);
935
936         return hci_le_remove_cig_sync(hdev, handle);
937 }
938
939 static int hci_le_remove_cig(struct hci_dev *hdev, u8 handle)
940 {
941         bt_dev_dbg(hdev, "handle 0x%2.2x", handle);
942
943         return hci_cmd_sync_queue(hdev, remove_cig_sync, ERR_PTR(handle), NULL);
944 }
945
946 static void find_cis(struct hci_conn *conn, void *data)
947 {
948         struct iso_list_data *d = data;
949
950         /* Ignore broadcast */
951         if (!bacmp(&conn->dst, BDADDR_ANY))
952                 return;
953
954         d->count++;
955 }
956
957 /* Cleanup CIS connection:
958  *
959  * Detects if there any CIS left connected in a CIG and remove it.
960  */
961 static void cis_cleanup(struct hci_conn *conn)
962 {
963         struct hci_dev *hdev = conn->hdev;
964         struct iso_list_data d;
965
966         memset(&d, 0, sizeof(d));
967         d.cig = conn->iso_qos.ucast.cig;
968
969         /* Check if ISO connection is a CIS and remove CIG if there are
970          * no other connections using it.
971          */
972         hci_conn_hash_list_state(hdev, find_cis, ISO_LINK, BT_CONNECTED, &d);
973         if (d.count)
974                 return;
975
976         hci_le_remove_cig(hdev, conn->iso_qos.ucast.cig);
977 }
978
979 struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst,
980                               u8 role)
981 {
982         struct hci_conn *conn;
983
984         BT_DBG("%s dst %pMR", hdev->name, dst);
985
986         conn = kzalloc(sizeof(*conn), GFP_KERNEL);
987         if (!conn)
988                 return NULL;
989
990         bacpy(&conn->dst, dst);
991         bacpy(&conn->src, &hdev->bdaddr);
992         conn->handle = HCI_CONN_HANDLE_UNSET;
993         conn->hdev  = hdev;
994         conn->type  = type;
995         conn->role  = role;
996         conn->mode  = HCI_CM_ACTIVE;
997         conn->state = BT_OPEN;
998         conn->auth_type = HCI_AT_GENERAL_BONDING;
999         conn->io_capability = hdev->io_capability;
1000         conn->remote_auth = 0xff;
1001         conn->key_type = 0xff;
1002         conn->rssi = HCI_RSSI_INVALID;
1003         conn->tx_power = HCI_TX_POWER_INVALID;
1004         conn->max_tx_power = HCI_TX_POWER_INVALID;
1005
1006         set_bit(HCI_CONN_POWER_SAVE, &conn->flags);
1007         conn->disc_timeout = HCI_DISCONN_TIMEOUT;
1008
1009         /* Set Default Authenticated payload timeout to 30s */
1010         conn->auth_payload_timeout = DEFAULT_AUTH_PAYLOAD_TIMEOUT;
1011
1012         if (conn->role == HCI_ROLE_MASTER)
1013                 conn->out = true;
1014
1015         switch (type) {
1016         case ACL_LINK:
1017                 conn->pkt_type = hdev->pkt_type & ACL_PTYPE_MASK;
1018                 break;
1019         case LE_LINK:
1020                 /* conn->src should reflect the local identity address */
1021                 hci_copy_identity_address(hdev, &conn->src, &conn->src_type);
1022                 break;
1023         case ISO_LINK:
1024                 /* conn->src should reflect the local identity address */
1025                 hci_copy_identity_address(hdev, &conn->src, &conn->src_type);
1026
1027                 /* set proper cleanup function */
1028                 if (!bacmp(dst, BDADDR_ANY))
1029                         conn->cleanup = bis_cleanup;
1030                 else if (conn->role == HCI_ROLE_MASTER)
1031                         conn->cleanup = cis_cleanup;
1032
1033                 break;
1034         case SCO_LINK:
1035                 if (lmp_esco_capable(hdev))
1036                         conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
1037                                         (hdev->esco_type & EDR_ESCO_MASK);
1038                 else
1039                         conn->pkt_type = hdev->pkt_type & SCO_PTYPE_MASK;
1040                 break;
1041         case ESCO_LINK:
1042                 conn->pkt_type = hdev->esco_type & ~EDR_ESCO_MASK;
1043                 break;
1044         }
1045
1046         skb_queue_head_init(&conn->data_q);
1047
1048         INIT_LIST_HEAD(&conn->chan_list);
1049         INIT_LIST_HEAD(&conn->link_list);
1050
1051         INIT_DELAYED_WORK(&conn->disc_work, hci_conn_timeout);
1052         INIT_DELAYED_WORK(&conn->auto_accept_work, hci_conn_auto_accept);
1053         INIT_DELAYED_WORK(&conn->idle_work, hci_conn_idle);
1054         INIT_DELAYED_WORK(&conn->le_conn_timeout, le_conn_timeout);
1055         INIT_WORK(&conn->le_scan_cleanup, le_scan_cleanup);
1056
1057         atomic_set(&conn->refcnt, 0);
1058
1059         hci_dev_hold(hdev);
1060
1061         hci_conn_hash_add(hdev, conn);
1062
1063         /* The SCO and eSCO connections will only be notified when their
1064          * setup has been completed. This is different to ACL links which
1065          * can be notified right away.
1066          */
1067         if (conn->type != SCO_LINK && conn->type != ESCO_LINK) {
1068                 if (hdev->notify)
1069                         hdev->notify(hdev, HCI_NOTIFY_CONN_ADD);
1070         }
1071
1072         hci_conn_init_sysfs(conn);
1073
1074         return conn;
1075 }
1076
1077 static void hci_conn_unlink(struct hci_conn *conn)
1078 {
1079         struct hci_dev *hdev = conn->hdev;
1080
1081         bt_dev_dbg(hdev, "hcon %p", conn);
1082
1083         if (!conn->parent) {
1084                 struct hci_link *link, *t;
1085
1086                 list_for_each_entry_safe(link, t, &conn->link_list, list)
1087                         hci_conn_unlink(link->conn);
1088
1089                 return;
1090         }
1091
1092         if (!conn->link)
1093                 return;
1094
1095         hci_conn_put(conn->parent);
1096         conn->parent = NULL;
1097
1098         list_del_rcu(&conn->link->list);
1099         synchronize_rcu();
1100
1101         kfree(conn->link);
1102         conn->link = NULL;
1103
1104         /* Due to race, SCO connection might be not established
1105          * yet at this point. Delete it now, otherwise it is
1106          * possible for it to be stuck and can't be deleted.
1107          */
1108         if (conn->handle == HCI_CONN_HANDLE_UNSET)
1109                 hci_conn_del(conn);
1110 }
1111
1112 int hci_conn_del(struct hci_conn *conn)
1113 {
1114         struct hci_dev *hdev = conn->hdev;
1115
1116         BT_DBG("%s hcon %p handle %d", hdev->name, conn, conn->handle);
1117
1118         cancel_delayed_work_sync(&conn->disc_work);
1119         cancel_delayed_work_sync(&conn->auto_accept_work);
1120         cancel_delayed_work_sync(&conn->idle_work);
1121
1122         if (conn->type == ACL_LINK) {
1123                 hci_conn_unlink(conn);
1124                 /* Unacked frames */
1125                 hdev->acl_cnt += conn->sent;
1126         } else if (conn->type == LE_LINK) {
1127                 cancel_delayed_work(&conn->le_conn_timeout);
1128
1129                 if (hdev->le_pkts)
1130                         hdev->le_cnt += conn->sent;
1131                 else
1132                         hdev->acl_cnt += conn->sent;
1133         } else {
1134                 struct hci_conn *acl = conn->parent;
1135
1136                 if (acl) {
1137                         hci_conn_unlink(conn);
1138                         hci_conn_drop(acl);
1139                 }
1140
1141                 /* Unacked ISO frames */
1142                 if (conn->type == ISO_LINK) {
1143                         if (hdev->iso_pkts)
1144                                 hdev->iso_cnt += conn->sent;
1145                         else if (hdev->le_pkts)
1146                                 hdev->le_cnt += conn->sent;
1147                         else
1148                                 hdev->acl_cnt += conn->sent;
1149                 }
1150         }
1151
1152         if (conn->amp_mgr)
1153                 amp_mgr_put(conn->amp_mgr);
1154
1155         skb_queue_purge(&conn->data_q);
1156
1157         /* Remove the connection from the list and cleanup its remaining
1158          * state. This is a separate function since for some cases like
1159          * BT_CONNECT_SCAN we *only* want the cleanup part without the
1160          * rest of hci_conn_del.
1161          */
1162         hci_conn_cleanup(conn);
1163
1164         return 0;
1165 }
1166
1167 struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src, uint8_t src_type)
1168 {
1169         int use_src = bacmp(src, BDADDR_ANY);
1170         struct hci_dev *hdev = NULL, *d;
1171
1172         BT_DBG("%pMR -> %pMR", src, dst);
1173
1174         read_lock(&hci_dev_list_lock);
1175
1176         list_for_each_entry(d, &hci_dev_list, list) {
1177                 if (!test_bit(HCI_UP, &d->flags) ||
1178                     hci_dev_test_flag(d, HCI_USER_CHANNEL) ||
1179                     d->dev_type != HCI_PRIMARY)
1180                         continue;
1181
1182                 /* Simple routing:
1183                  *   No source address - find interface with bdaddr != dst
1184                  *   Source address    - find interface with bdaddr == src
1185                  */
1186
1187                 if (use_src) {
1188                         bdaddr_t id_addr;
1189                         u8 id_addr_type;
1190
1191                         if (src_type == BDADDR_BREDR) {
1192                                 if (!lmp_bredr_capable(d))
1193                                         continue;
1194                                 bacpy(&id_addr, &d->bdaddr);
1195                                 id_addr_type = BDADDR_BREDR;
1196                         } else {
1197                                 if (!lmp_le_capable(d))
1198                                         continue;
1199
1200                                 hci_copy_identity_address(d, &id_addr,
1201                                                           &id_addr_type);
1202
1203                                 /* Convert from HCI to three-value type */
1204                                 if (id_addr_type == ADDR_LE_DEV_PUBLIC)
1205                                         id_addr_type = BDADDR_LE_PUBLIC;
1206                                 else
1207                                         id_addr_type = BDADDR_LE_RANDOM;
1208                         }
1209
1210                         if (!bacmp(&id_addr, src) && id_addr_type == src_type) {
1211                                 hdev = d; break;
1212                         }
1213                 } else {
1214                         if (bacmp(&d->bdaddr, dst)) {
1215                                 hdev = d; break;
1216                         }
1217                 }
1218         }
1219
1220         if (hdev)
1221                 hdev = hci_dev_hold(hdev);
1222
1223         read_unlock(&hci_dev_list_lock);
1224         return hdev;
1225 }
1226 EXPORT_SYMBOL(hci_get_route);
1227
1228 /* This function requires the caller holds hdev->lock */
1229 static void hci_le_conn_failed(struct hci_conn *conn, u8 status)
1230 {
1231         struct hci_dev *hdev = conn->hdev;
1232
1233         hci_connect_le_scan_cleanup(conn, status);
1234
1235         /* Enable advertising in case this was a failed connection
1236          * attempt as a peripheral.
1237          */
1238         hci_enable_advertising(hdev);
1239 }
1240
1241 /* This function requires the caller holds hdev->lock */
1242 void hci_conn_failed(struct hci_conn *conn, u8 status)
1243 {
1244         struct hci_dev *hdev = conn->hdev;
1245
1246         bt_dev_dbg(hdev, "status 0x%2.2x", status);
1247
1248         switch (conn->type) {
1249         case LE_LINK:
1250                 hci_le_conn_failed(conn, status);
1251                 break;
1252         case ACL_LINK:
1253                 mgmt_connect_failed(hdev, &conn->dst, conn->type,
1254                                     conn->dst_type, status);
1255                 break;
1256         }
1257
1258         conn->state = BT_CLOSED;
1259         hci_connect_cfm(conn, status);
1260         hci_conn_del(conn);
1261 }
1262
1263 static void create_le_conn_complete(struct hci_dev *hdev, void *data, int err)
1264 {
1265         struct hci_conn *conn = data;
1266
1267         bt_dev_dbg(hdev, "err %d", err);
1268
1269         hci_dev_lock(hdev);
1270
1271         if (!err) {
1272                 hci_connect_le_scan_cleanup(conn, 0x00);
1273                 goto done;
1274         }
1275
1276         /* Check if connection is still pending */
1277         if (conn != hci_lookup_le_connect(hdev))
1278                 goto done;
1279
1280         /* Flush to make sure we send create conn cancel command if needed */
1281         flush_delayed_work(&conn->le_conn_timeout);
1282         hci_conn_failed(conn, bt_status(err));
1283
1284 done:
1285         hci_dev_unlock(hdev);
1286 }
1287
1288 static int hci_connect_le_sync(struct hci_dev *hdev, void *data)
1289 {
1290         struct hci_conn *conn = data;
1291
1292         bt_dev_dbg(hdev, "conn %p", conn);
1293
1294         return hci_le_create_conn_sync(hdev, conn);
1295 }
1296
1297 struct hci_conn *hci_connect_le(struct hci_dev *hdev, bdaddr_t *dst,
1298                                 u8 dst_type, bool dst_resolved, u8 sec_level,
1299                                 u16 conn_timeout, u8 role)
1300 {
1301         struct hci_conn *conn;
1302         struct smp_irk *irk;
1303         int err;
1304
1305         /* Let's make sure that le is enabled.*/
1306         if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED)) {
1307                 if (lmp_le_capable(hdev))
1308                         return ERR_PTR(-ECONNREFUSED);
1309
1310                 return ERR_PTR(-EOPNOTSUPP);
1311         }
1312
1313         /* Since the controller supports only one LE connection attempt at a
1314          * time, we return -EBUSY if there is any connection attempt running.
1315          */
1316         if (hci_lookup_le_connect(hdev))
1317                 return ERR_PTR(-EBUSY);
1318
1319         /* If there's already a connection object but it's not in
1320          * scanning state it means it must already be established, in
1321          * which case we can't do anything else except report a failure
1322          * to connect.
1323          */
1324         conn = hci_conn_hash_lookup_le(hdev, dst, dst_type);
1325         if (conn && !test_bit(HCI_CONN_SCANNING, &conn->flags)) {
1326                 return ERR_PTR(-EBUSY);
1327         }
1328
1329         /* Check if the destination address has been resolved by the controller
1330          * since if it did then the identity address shall be used.
1331          */
1332         if (!dst_resolved) {
1333                 /* When given an identity address with existing identity
1334                  * resolving key, the connection needs to be established
1335                  * to a resolvable random address.
1336                  *
1337                  * Storing the resolvable random address is required here
1338                  * to handle connection failures. The address will later
1339                  * be resolved back into the original identity address
1340                  * from the connect request.
1341                  */
1342                 irk = hci_find_irk_by_addr(hdev, dst, dst_type);
1343                 if (irk && bacmp(&irk->rpa, BDADDR_ANY)) {
1344                         dst = &irk->rpa;
1345                         dst_type = ADDR_LE_DEV_RANDOM;
1346                 }
1347         }
1348
1349         if (conn) {
1350                 bacpy(&conn->dst, dst);
1351         } else {
1352                 conn = hci_conn_add(hdev, LE_LINK, dst, role);
1353                 if (!conn)
1354                         return ERR_PTR(-ENOMEM);
1355                 hci_conn_hold(conn);
1356                 conn->pending_sec_level = sec_level;
1357         }
1358
1359         conn->dst_type = dst_type;
1360         conn->sec_level = BT_SECURITY_LOW;
1361         conn->conn_timeout = conn_timeout;
1362
1363         conn->state = BT_CONNECT;
1364         clear_bit(HCI_CONN_SCANNING, &conn->flags);
1365
1366         err = hci_cmd_sync_queue(hdev, hci_connect_le_sync, conn,
1367                                  create_le_conn_complete);
1368         if (err) {
1369                 hci_conn_del(conn);
1370                 return ERR_PTR(err);
1371         }
1372
1373         return conn;
1374 }
1375
1376 static bool is_connected(struct hci_dev *hdev, bdaddr_t *addr, u8 type)
1377 {
1378         struct hci_conn *conn;
1379
1380         conn = hci_conn_hash_lookup_le(hdev, addr, type);
1381         if (!conn)
1382                 return false;
1383
1384         if (conn->state != BT_CONNECTED)
1385                 return false;
1386
1387         return true;
1388 }
1389
1390 /* This function requires the caller holds hdev->lock */
1391 static int hci_explicit_conn_params_set(struct hci_dev *hdev,
1392                                         bdaddr_t *addr, u8 addr_type)
1393 {
1394         struct hci_conn_params *params;
1395
1396         if (is_connected(hdev, addr, addr_type))
1397                 return -EISCONN;
1398
1399         params = hci_conn_params_lookup(hdev, addr, addr_type);
1400         if (!params) {
1401                 params = hci_conn_params_add(hdev, addr, addr_type);
1402                 if (!params)
1403                         return -ENOMEM;
1404
1405                 /* If we created new params, mark them to be deleted in
1406                  * hci_connect_le_scan_cleanup. It's different case than
1407                  * existing disabled params, those will stay after cleanup.
1408                  */
1409                 params->auto_connect = HCI_AUTO_CONN_EXPLICIT;
1410         }
1411
1412         /* We're trying to connect, so make sure params are at pend_le_conns */
1413         if (params->auto_connect == HCI_AUTO_CONN_DISABLED ||
1414             params->auto_connect == HCI_AUTO_CONN_REPORT ||
1415             params->auto_connect == HCI_AUTO_CONN_EXPLICIT) {
1416                 list_del_init(&params->action);
1417                 list_add(&params->action, &hdev->pend_le_conns);
1418         }
1419
1420         params->explicit_connect = true;
1421
1422         BT_DBG("addr %pMR (type %u) auto_connect %u", addr, addr_type,
1423                params->auto_connect);
1424
1425         return 0;
1426 }
1427
1428 static int qos_set_big(struct hci_dev *hdev, struct bt_iso_qos *qos)
1429 {
1430         struct iso_list_data data;
1431
1432         /* Allocate a BIG if not set */
1433         if (qos->bcast.big == BT_ISO_QOS_BIG_UNSET) {
1434                 for (data.big = 0x00; data.big < 0xef; data.big++) {
1435                         data.count = 0;
1436                         data.bis = 0xff;
1437
1438                         hci_conn_hash_list_state(hdev, bis_list, ISO_LINK,
1439                                                  BT_BOUND, &data);
1440                         if (!data.count)
1441                                 break;
1442                 }
1443
1444                 if (data.big == 0xef)
1445                         return -EADDRNOTAVAIL;
1446
1447                 /* Update BIG */
1448                 qos->bcast.big = data.big;
1449         }
1450
1451         return 0;
1452 }
1453
1454 static int qos_set_bis(struct hci_dev *hdev, struct bt_iso_qos *qos)
1455 {
1456         struct iso_list_data data;
1457
1458         /* Allocate BIS if not set */
1459         if (qos->bcast.bis == BT_ISO_QOS_BIS_UNSET) {
1460                 /* Find an unused adv set to advertise BIS, skip instance 0x00
1461                  * since it is reserved as general purpose set.
1462                  */
1463                 for (data.bis = 0x01; data.bis < hdev->le_num_of_adv_sets;
1464                      data.bis++) {
1465                         data.count = 0;
1466
1467                         hci_conn_hash_list_state(hdev, bis_list, ISO_LINK,
1468                                                  BT_BOUND, &data);
1469                         if (!data.count)
1470                                 break;
1471                 }
1472
1473                 if (data.bis == hdev->le_num_of_adv_sets)
1474                         return -EADDRNOTAVAIL;
1475
1476                 /* Update BIS */
1477                 qos->bcast.bis = data.bis;
1478         }
1479
1480         return 0;
1481 }
1482
1483 /* This function requires the caller holds hdev->lock */
1484 static struct hci_conn *hci_add_bis(struct hci_dev *hdev, bdaddr_t *dst,
1485                                     struct bt_iso_qos *qos)
1486 {
1487         struct hci_conn *conn;
1488         struct iso_list_data data;
1489         int err;
1490
1491         /* Let's make sure that le is enabled.*/
1492         if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED)) {
1493                 if (lmp_le_capable(hdev))
1494                         return ERR_PTR(-ECONNREFUSED);
1495                 return ERR_PTR(-EOPNOTSUPP);
1496         }
1497
1498         err = qos_set_big(hdev, qos);
1499         if (err)
1500                 return ERR_PTR(err);
1501
1502         err = qos_set_bis(hdev, qos);
1503         if (err)
1504                 return ERR_PTR(err);
1505
1506         data.big = qos->bcast.big;
1507         data.bis = qos->bcast.bis;
1508         data.count = 0;
1509
1510         /* Check if there is already a matching BIG/BIS */
1511         hci_conn_hash_list_state(hdev, bis_list, ISO_LINK, BT_BOUND, &data);
1512         if (data.count)
1513                 return ERR_PTR(-EADDRINUSE);
1514
1515         conn = hci_conn_hash_lookup_bis(hdev, dst, qos->bcast.big, qos->bcast.bis);
1516         if (conn)
1517                 return ERR_PTR(-EADDRINUSE);
1518
1519         conn = hci_conn_add(hdev, ISO_LINK, dst, HCI_ROLE_MASTER);
1520         if (!conn)
1521                 return ERR_PTR(-ENOMEM);
1522
1523         set_bit(HCI_CONN_PER_ADV, &conn->flags);
1524         conn->state = BT_CONNECT;
1525
1526         hci_conn_hold(conn);
1527         return conn;
1528 }
1529
1530 /* This function requires the caller holds hdev->lock */
1531 struct hci_conn *hci_connect_le_scan(struct hci_dev *hdev, bdaddr_t *dst,
1532                                      u8 dst_type, u8 sec_level,
1533                                      u16 conn_timeout,
1534                                      enum conn_reasons conn_reason)
1535 {
1536         struct hci_conn *conn;
1537
1538         /* Let's make sure that le is enabled.*/
1539         if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED)) {
1540                 if (lmp_le_capable(hdev))
1541                         return ERR_PTR(-ECONNREFUSED);
1542
1543                 return ERR_PTR(-EOPNOTSUPP);
1544         }
1545
1546         /* Some devices send ATT messages as soon as the physical link is
1547          * established. To be able to handle these ATT messages, the user-
1548          * space first establishes the connection and then starts the pairing
1549          * process.
1550          *
1551          * So if a hci_conn object already exists for the following connection
1552          * attempt, we simply update pending_sec_level and auth_type fields
1553          * and return the object found.
1554          */
1555         conn = hci_conn_hash_lookup_le(hdev, dst, dst_type);
1556         if (conn) {
1557                 if (conn->pending_sec_level < sec_level)
1558                         conn->pending_sec_level = sec_level;
1559                 goto done;
1560         }
1561
1562         BT_DBG("requesting refresh of dst_addr");
1563
1564         conn = hci_conn_add(hdev, LE_LINK, dst, HCI_ROLE_MASTER);
1565         if (!conn)
1566                 return ERR_PTR(-ENOMEM);
1567
1568         if (hci_explicit_conn_params_set(hdev, dst, dst_type) < 0) {
1569                 hci_conn_del(conn);
1570                 return ERR_PTR(-EBUSY);
1571         }
1572
1573         conn->state = BT_CONNECT;
1574         set_bit(HCI_CONN_SCANNING, &conn->flags);
1575         conn->dst_type = dst_type;
1576         conn->sec_level = BT_SECURITY_LOW;
1577         conn->pending_sec_level = sec_level;
1578         conn->conn_timeout = conn_timeout;
1579         conn->conn_reason = conn_reason;
1580
1581         hci_update_passive_scan(hdev);
1582
1583 done:
1584         hci_conn_hold(conn);
1585         return conn;
1586 }
1587
1588 struct hci_conn *hci_connect_acl(struct hci_dev *hdev, bdaddr_t *dst,
1589                                  u8 sec_level, u8 auth_type,
1590                                  enum conn_reasons conn_reason)
1591 {
1592         struct hci_conn *acl;
1593
1594         if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) {
1595                 if (lmp_bredr_capable(hdev))
1596                         return ERR_PTR(-ECONNREFUSED);
1597
1598                 return ERR_PTR(-EOPNOTSUPP);
1599         }
1600
1601         acl = hci_conn_hash_lookup_ba(hdev, ACL_LINK, dst);
1602         if (!acl) {
1603                 acl = hci_conn_add(hdev, ACL_LINK, dst, HCI_ROLE_MASTER);
1604                 if (!acl)
1605                         return ERR_PTR(-ENOMEM);
1606         }
1607
1608         hci_conn_hold(acl);
1609
1610         acl->conn_reason = conn_reason;
1611         if (acl->state == BT_OPEN || acl->state == BT_CLOSED) {
1612                 acl->sec_level = BT_SECURITY_LOW;
1613                 acl->pending_sec_level = sec_level;
1614                 acl->auth_type = auth_type;
1615                 hci_acl_create_connection(acl);
1616         }
1617
1618         return acl;
1619 }
1620
1621 static struct hci_link *hci_conn_link(struct hci_conn *parent,
1622                                       struct hci_conn *conn)
1623 {
1624         struct hci_dev *hdev = parent->hdev;
1625         struct hci_link *link;
1626
1627         bt_dev_dbg(hdev, "parent %p hcon %p", parent, conn);
1628
1629         if (conn->link)
1630                 return conn->link;
1631
1632         if (conn->parent)
1633                 return NULL;
1634
1635         link = kzalloc(sizeof(*link), GFP_KERNEL);
1636         if (!link)
1637                 return NULL;
1638
1639         link->conn = hci_conn_hold(conn);
1640         conn->link = link;
1641         conn->parent = hci_conn_get(parent);
1642
1643         /* Use list_add_tail_rcu append to the list */
1644         list_add_tail_rcu(&link->list, &parent->link_list);
1645
1646         return link;
1647 }
1648
1649 struct hci_conn *hci_connect_sco(struct hci_dev *hdev, int type, bdaddr_t *dst,
1650                                  __u16 setting, struct bt_codec *codec)
1651 {
1652         struct hci_conn *acl;
1653         struct hci_conn *sco;
1654         struct hci_link *link;
1655
1656         acl = hci_connect_acl(hdev, dst, BT_SECURITY_LOW, HCI_AT_NO_BONDING,
1657                               CONN_REASON_SCO_CONNECT);
1658         if (IS_ERR(acl))
1659                 return acl;
1660
1661         sco = hci_conn_hash_lookup_ba(hdev, type, dst);
1662         if (!sco) {
1663                 sco = hci_conn_add(hdev, type, dst, HCI_ROLE_MASTER);
1664                 if (!sco) {
1665                         hci_conn_drop(acl);
1666                         return ERR_PTR(-ENOMEM);
1667                 }
1668         }
1669
1670         link = hci_conn_link(acl, sco);
1671         if (!link) {
1672                 hci_conn_drop(acl);
1673                 hci_conn_drop(sco);
1674                 return NULL;
1675         }
1676
1677         sco->setting = setting;
1678         sco->codec = *codec;
1679
1680         if (acl->state == BT_CONNECTED &&
1681             (sco->state == BT_OPEN || sco->state == BT_CLOSED)) {
1682                 set_bit(HCI_CONN_POWER_SAVE, &acl->flags);
1683                 hci_conn_enter_active_mode(acl, BT_POWER_FORCE_ACTIVE_ON);
1684
1685                 if (test_bit(HCI_CONN_MODE_CHANGE_PEND, &acl->flags)) {
1686                         /* defer SCO setup until mode change completed */
1687                         set_bit(HCI_CONN_SCO_SETUP_PEND, &acl->flags);
1688                         return sco;
1689                 }
1690
1691                 hci_sco_setup(acl, 0x00);
1692         }
1693
1694         return sco;
1695 }
1696
1697 static void cis_add(struct iso_list_data *d, struct bt_iso_qos *qos)
1698 {
1699         struct hci_cis_params *cis = &d->pdu.cis[d->pdu.cp.num_cis];
1700
1701         cis->cis_id = qos->ucast.cis;
1702         cis->c_sdu  = cpu_to_le16(qos->ucast.out.sdu);
1703         cis->p_sdu  = cpu_to_le16(qos->ucast.in.sdu);
1704         cis->c_phy  = qos->ucast.out.phy ? qos->ucast.out.phy : qos->ucast.in.phy;
1705         cis->p_phy  = qos->ucast.in.phy ? qos->ucast.in.phy : qos->ucast.out.phy;
1706         cis->c_rtn  = qos->ucast.out.rtn;
1707         cis->p_rtn  = qos->ucast.in.rtn;
1708
1709         d->pdu.cp.num_cis++;
1710 }
1711
1712 static void cis_list(struct hci_conn *conn, void *data)
1713 {
1714         struct iso_list_data *d = data;
1715
1716         /* Skip if broadcast/ANY address */
1717         if (!bacmp(&conn->dst, BDADDR_ANY))
1718                 return;
1719
1720         if (d->cig != conn->iso_qos.ucast.cig || d->cis == BT_ISO_QOS_CIS_UNSET ||
1721             d->cis != conn->iso_qos.ucast.cis)
1722                 return;
1723
1724         d->count++;
1725
1726         if (d->pdu.cp.cig_id == BT_ISO_QOS_CIG_UNSET ||
1727             d->count >= ARRAY_SIZE(d->pdu.cis))
1728                 return;
1729
1730         cis_add(d, &conn->iso_qos);
1731 }
1732
1733 static int hci_le_create_big(struct hci_conn *conn, struct bt_iso_qos *qos)
1734 {
1735         struct hci_dev *hdev = conn->hdev;
1736         struct hci_cp_le_create_big cp;
1737
1738         memset(&cp, 0, sizeof(cp));
1739
1740         cp.handle = qos->bcast.big;
1741         cp.adv_handle = qos->bcast.bis;
1742         cp.num_bis  = 0x01;
1743         hci_cpu_to_le24(qos->bcast.out.interval, cp.bis.sdu_interval);
1744         cp.bis.sdu = cpu_to_le16(qos->bcast.out.sdu);
1745         cp.bis.latency =  cpu_to_le16(qos->bcast.out.latency);
1746         cp.bis.rtn  = qos->bcast.out.rtn;
1747         cp.bis.phy  = qos->bcast.out.phy;
1748         cp.bis.packing = qos->bcast.packing;
1749         cp.bis.framing = qos->bcast.framing;
1750         cp.bis.encryption = qos->bcast.encryption;
1751         memcpy(cp.bis.bcode, qos->bcast.bcode, sizeof(cp.bis.bcode));
1752
1753         return hci_send_cmd(hdev, HCI_OP_LE_CREATE_BIG, sizeof(cp), &cp);
1754 }
1755
1756 static bool hci_le_set_cig_params(struct hci_conn *conn, struct bt_iso_qos *qos)
1757 {
1758         struct hci_dev *hdev = conn->hdev;
1759         struct iso_list_data data;
1760
1761         memset(&data, 0, sizeof(data));
1762
1763         /* Allocate a CIG if not set */
1764         if (qos->ucast.cig == BT_ISO_QOS_CIG_UNSET) {
1765                 for (data.cig = 0x00; data.cig < 0xff; data.cig++) {
1766                         data.count = 0;
1767                         data.cis = 0xff;
1768
1769                         hci_conn_hash_list_state(hdev, cis_list, ISO_LINK,
1770                                                  BT_BOUND, &data);
1771                         if (data.count)
1772                                 continue;
1773
1774                         hci_conn_hash_list_state(hdev, cis_list, ISO_LINK,
1775                                                  BT_CONNECTED, &data);
1776                         if (!data.count)
1777                                 break;
1778                 }
1779
1780                 if (data.cig == 0xff)
1781                         return false;
1782
1783                 /* Update CIG */
1784                 qos->ucast.cig = data.cig;
1785         }
1786
1787         data.pdu.cp.cig_id = qos->ucast.cig;
1788         hci_cpu_to_le24(qos->ucast.out.interval, data.pdu.cp.c_interval);
1789         hci_cpu_to_le24(qos->ucast.in.interval, data.pdu.cp.p_interval);
1790         data.pdu.cp.sca = qos->ucast.sca;
1791         data.pdu.cp.packing = qos->ucast.packing;
1792         data.pdu.cp.framing = qos->ucast.framing;
1793         data.pdu.cp.c_latency = cpu_to_le16(qos->ucast.out.latency);
1794         data.pdu.cp.p_latency = cpu_to_le16(qos->ucast.in.latency);
1795
1796         if (qos->ucast.cis != BT_ISO_QOS_CIS_UNSET) {
1797                 data.count = 0;
1798                 data.cig = qos->ucast.cig;
1799                 data.cis = qos->ucast.cis;
1800
1801                 hci_conn_hash_list_state(hdev, cis_list, ISO_LINK, BT_BOUND,
1802                                          &data);
1803                 if (data.count)
1804                         return false;
1805
1806                 cis_add(&data, qos);
1807         }
1808
1809         /* Reprogram all CIS(s) with the same CIG */
1810         for (data.cig = qos->ucast.cig, data.cis = 0x00; data.cis < 0x11;
1811              data.cis++) {
1812                 data.count = 0;
1813
1814                 hci_conn_hash_list_state(hdev, cis_list, ISO_LINK, BT_BOUND,
1815                                          &data);
1816                 if (data.count)
1817                         continue;
1818
1819                 /* Allocate a CIS if not set */
1820                 if (qos->ucast.cis == BT_ISO_QOS_CIS_UNSET) {
1821                         /* Update CIS */
1822                         qos->ucast.cis = data.cis;
1823                         cis_add(&data, qos);
1824                 }
1825         }
1826
1827         if (qos->ucast.cis == BT_ISO_QOS_CIS_UNSET || !data.pdu.cp.num_cis)
1828                 return false;
1829
1830         if (hci_send_cmd(hdev, HCI_OP_LE_SET_CIG_PARAMS,
1831                          sizeof(data.pdu.cp) +
1832                          (data.pdu.cp.num_cis * sizeof(*data.pdu.cis)),
1833                          &data.pdu) < 0)
1834                 return false;
1835
1836         return true;
1837 }
1838
1839 struct hci_conn *hci_bind_cis(struct hci_dev *hdev, bdaddr_t *dst,
1840                               __u8 dst_type, struct bt_iso_qos *qos)
1841 {
1842         struct hci_conn *cis;
1843
1844         cis = hci_conn_hash_lookup_cis(hdev, dst, dst_type, qos->ucast.cig,
1845                                        qos->ucast.cis);
1846         if (!cis) {
1847                 cis = hci_conn_add(hdev, ISO_LINK, dst, HCI_ROLE_MASTER);
1848                 if (!cis)
1849                         return ERR_PTR(-ENOMEM);
1850                 cis->cleanup = cis_cleanup;
1851                 cis->dst_type = dst_type;
1852         }
1853
1854         if (cis->state == BT_CONNECTED)
1855                 return cis;
1856
1857         /* Check if CIS has been set and the settings matches */
1858         if (cis->state == BT_BOUND &&
1859             !memcmp(&cis->iso_qos, qos, sizeof(*qos)))
1860                 return cis;
1861
1862         /* Update LINK PHYs according to QoS preference */
1863         cis->le_tx_phy = qos->ucast.out.phy;
1864         cis->le_rx_phy = qos->ucast.in.phy;
1865
1866         /* If output interval is not set use the input interval as it cannot be
1867          * 0x000000.
1868          */
1869         if (!qos->ucast.out.interval)
1870                 qos->ucast.out.interval = qos->ucast.in.interval;
1871
1872         /* If input interval is not set use the output interval as it cannot be
1873          * 0x000000.
1874          */
1875         if (!qos->ucast.in.interval)
1876                 qos->ucast.in.interval = qos->ucast.out.interval;
1877
1878         /* If output latency is not set use the input latency as it cannot be
1879          * 0x0000.
1880          */
1881         if (!qos->ucast.out.latency)
1882                 qos->ucast.out.latency = qos->ucast.in.latency;
1883
1884         /* If input latency is not set use the output latency as it cannot be
1885          * 0x0000.
1886          */
1887         if (!qos->ucast.in.latency)
1888                 qos->ucast.in.latency = qos->ucast.out.latency;
1889
1890         if (!hci_le_set_cig_params(cis, qos)) {
1891                 hci_conn_drop(cis);
1892                 return ERR_PTR(-EINVAL);
1893         }
1894
1895         cis->iso_qos = *qos;
1896         cis->state = BT_BOUND;
1897
1898         return cis;
1899 }
1900
1901 bool hci_iso_setup_path(struct hci_conn *conn)
1902 {
1903         struct hci_dev *hdev = conn->hdev;
1904         struct hci_cp_le_setup_iso_path cmd;
1905
1906         memset(&cmd, 0, sizeof(cmd));
1907
1908         if (conn->iso_qos.ucast.out.sdu) {
1909                 cmd.handle = cpu_to_le16(conn->handle);
1910                 cmd.direction = 0x00; /* Input (Host to Controller) */
1911                 cmd.path = 0x00; /* HCI path if enabled */
1912                 cmd.codec = 0x03; /* Transparent Data */
1913
1914                 if (hci_send_cmd(hdev, HCI_OP_LE_SETUP_ISO_PATH, sizeof(cmd),
1915                                  &cmd) < 0)
1916                         return false;
1917         }
1918
1919         if (conn->iso_qos.ucast.in.sdu) {
1920                 cmd.handle = cpu_to_le16(conn->handle);
1921                 cmd.direction = 0x01; /* Output (Controller to Host) */
1922                 cmd.path = 0x00; /* HCI path if enabled */
1923                 cmd.codec = 0x03; /* Transparent Data */
1924
1925                 if (hci_send_cmd(hdev, HCI_OP_LE_SETUP_ISO_PATH, sizeof(cmd),
1926                                  &cmd) < 0)
1927                         return false;
1928         }
1929
1930         return true;
1931 }
1932
1933 static int hci_create_cis_sync(struct hci_dev *hdev, void *data)
1934 {
1935         return hci_le_create_cis_sync(hdev, data);
1936 }
1937
1938 int hci_le_create_cis(struct hci_conn *conn)
1939 {
1940         struct hci_conn *cis;
1941         struct hci_link *link, *t;
1942         struct hci_dev *hdev = conn->hdev;
1943         int err;
1944
1945         bt_dev_dbg(hdev, "hcon %p", conn);
1946
1947         switch (conn->type) {
1948         case LE_LINK:
1949                 if (conn->state != BT_CONNECTED || list_empty(&conn->link_list))
1950                         return -EINVAL;
1951
1952                 cis = NULL;
1953
1954                 /* hci_conn_link uses list_add_tail_rcu so the list is in
1955                  * the same order as the connections are requested.
1956                  */
1957                 list_for_each_entry_safe(link, t, &conn->link_list, list) {
1958                         if (link->conn->state == BT_BOUND) {
1959                                 err = hci_le_create_cis(link->conn);
1960                                 if (err)
1961                                         return err;
1962
1963                                 cis = link->conn;
1964                         }
1965                 }
1966
1967                 return cis ? 0 : -EINVAL;
1968         case ISO_LINK:
1969                 cis = conn;
1970                 break;
1971         default:
1972                 return -EINVAL;
1973         }
1974
1975         if (cis->state == BT_CONNECT)
1976                 return 0;
1977
1978         /* Queue Create CIS */
1979         err = hci_cmd_sync_queue(hdev, hci_create_cis_sync, cis, NULL);
1980         if (err)
1981                 return err;
1982
1983         cis->state = BT_CONNECT;
1984
1985         return 0;
1986 }
1987
1988 static void hci_iso_qos_setup(struct hci_dev *hdev, struct hci_conn *conn,
1989                               struct bt_iso_io_qos *qos, __u8 phy)
1990 {
1991         /* Only set MTU if PHY is enabled */
1992         if (!qos->sdu && qos->phy) {
1993                 if (hdev->iso_mtu > 0)
1994                         qos->sdu = hdev->iso_mtu;
1995                 else if (hdev->le_mtu > 0)
1996                         qos->sdu = hdev->le_mtu;
1997                 else
1998                         qos->sdu = hdev->acl_mtu;
1999         }
2000
2001         /* Use the same PHY as ACL if set to any */
2002         if (qos->phy == BT_ISO_PHY_ANY)
2003                 qos->phy = phy;
2004
2005         /* Use LE ACL connection interval if not set */
2006         if (!qos->interval)
2007                 /* ACL interval unit in 1.25 ms to us */
2008                 qos->interval = conn->le_conn_interval * 1250;
2009
2010         /* Use LE ACL connection latency if not set */
2011         if (!qos->latency)
2012                 qos->latency = conn->le_conn_latency;
2013 }
2014
2015 static void hci_bind_bis(struct hci_conn *conn,
2016                          struct bt_iso_qos *qos)
2017 {
2018         /* Update LINK PHYs according to QoS preference */
2019         conn->le_tx_phy = qos->bcast.out.phy;
2020         conn->le_tx_phy = qos->bcast.out.phy;
2021         conn->iso_qos = *qos;
2022         conn->state = BT_BOUND;
2023 }
2024
2025 static int create_big_sync(struct hci_dev *hdev, void *data)
2026 {
2027         struct hci_conn *conn = data;
2028         struct bt_iso_qos *qos = &conn->iso_qos;
2029         u16 interval, sync_interval = 0;
2030         u32 flags = 0;
2031         int err;
2032
2033         if (qos->bcast.out.phy == 0x02)
2034                 flags |= MGMT_ADV_FLAG_SEC_2M;
2035
2036         /* Align intervals */
2037         interval = qos->bcast.out.interval / 1250;
2038
2039         if (qos->bcast.bis)
2040                 sync_interval = qos->bcast.sync_interval * 1600;
2041
2042         err = hci_start_per_adv_sync(hdev, qos->bcast.bis, conn->le_per_adv_data_len,
2043                                      conn->le_per_adv_data, flags, interval,
2044                                      interval, sync_interval);
2045         if (err)
2046                 return err;
2047
2048         return hci_le_create_big(conn, &conn->iso_qos);
2049 }
2050
2051 static void create_pa_complete(struct hci_dev *hdev, void *data, int err)
2052 {
2053         struct hci_cp_le_pa_create_sync *cp = data;
2054
2055         bt_dev_dbg(hdev, "");
2056
2057         if (err)
2058                 bt_dev_err(hdev, "Unable to create PA: %d", err);
2059
2060         kfree(cp);
2061 }
2062
2063 static int create_pa_sync(struct hci_dev *hdev, void *data)
2064 {
2065         struct hci_cp_le_pa_create_sync *cp = data;
2066         int err;
2067
2068         err = __hci_cmd_sync_status(hdev, HCI_OP_LE_PA_CREATE_SYNC,
2069                                     sizeof(*cp), cp, HCI_CMD_TIMEOUT);
2070         if (err) {
2071                 hci_dev_clear_flag(hdev, HCI_PA_SYNC);
2072                 return err;
2073         }
2074
2075         return hci_update_passive_scan_sync(hdev);
2076 }
2077
2078 int hci_pa_create_sync(struct hci_dev *hdev, bdaddr_t *dst, __u8 dst_type,
2079                        __u8 sid, struct bt_iso_qos *qos)
2080 {
2081         struct hci_cp_le_pa_create_sync *cp;
2082
2083         if (hci_dev_test_and_set_flag(hdev, HCI_PA_SYNC))
2084                 return -EBUSY;
2085
2086         cp = kzalloc(sizeof(*cp), GFP_KERNEL);
2087         if (!cp) {
2088                 hci_dev_clear_flag(hdev, HCI_PA_SYNC);
2089                 return -ENOMEM;
2090         }
2091
2092         cp->options = qos->bcast.options;
2093         cp->sid = sid;
2094         cp->addr_type = dst_type;
2095         bacpy(&cp->addr, dst);
2096         cp->skip = cpu_to_le16(qos->bcast.skip);
2097         cp->sync_timeout = cpu_to_le16(qos->bcast.sync_timeout);
2098         cp->sync_cte_type = qos->bcast.sync_cte_type;
2099
2100         /* Queue start pa_create_sync and scan */
2101         return hci_cmd_sync_queue(hdev, create_pa_sync, cp, create_pa_complete);
2102 }
2103
2104 int hci_le_big_create_sync(struct hci_dev *hdev, struct bt_iso_qos *qos,
2105                            __u16 sync_handle, __u8 num_bis, __u8 bis[])
2106 {
2107         struct _packed {
2108                 struct hci_cp_le_big_create_sync cp;
2109                 __u8  bis[0x11];
2110         } pdu;
2111         int err;
2112
2113         if (num_bis > sizeof(pdu.bis))
2114                 return -EINVAL;
2115
2116         err = qos_set_big(hdev, qos);
2117         if (err)
2118                 return err;
2119
2120         memset(&pdu, 0, sizeof(pdu));
2121         pdu.cp.handle = qos->bcast.big;
2122         pdu.cp.sync_handle = cpu_to_le16(sync_handle);
2123         pdu.cp.encryption = qos->bcast.encryption;
2124         memcpy(pdu.cp.bcode, qos->bcast.bcode, sizeof(pdu.cp.bcode));
2125         pdu.cp.mse = qos->bcast.mse;
2126         pdu.cp.timeout = cpu_to_le16(qos->bcast.timeout);
2127         pdu.cp.num_bis = num_bis;
2128         memcpy(pdu.bis, bis, num_bis);
2129
2130         return hci_send_cmd(hdev, HCI_OP_LE_BIG_CREATE_SYNC,
2131                             sizeof(pdu.cp) + num_bis, &pdu);
2132 }
2133
2134 static void create_big_complete(struct hci_dev *hdev, void *data, int err)
2135 {
2136         struct hci_conn *conn = data;
2137
2138         bt_dev_dbg(hdev, "conn %p", conn);
2139
2140         if (err) {
2141                 bt_dev_err(hdev, "Unable to create BIG: %d", err);
2142                 hci_connect_cfm(conn, err);
2143                 hci_conn_del(conn);
2144         }
2145 }
2146
2147 struct hci_conn *hci_connect_bis(struct hci_dev *hdev, bdaddr_t *dst,
2148                                  __u8 dst_type, struct bt_iso_qos *qos,
2149                                  __u8 base_len, __u8 *base)
2150 {
2151         struct hci_conn *conn;
2152         int err;
2153
2154         /* We need hci_conn object using the BDADDR_ANY as dst */
2155         conn = hci_add_bis(hdev, dst, qos);
2156         if (IS_ERR(conn))
2157                 return conn;
2158
2159         hci_bind_bis(conn, qos);
2160
2161         /* Add Basic Announcement into Peridic Adv Data if BASE is set */
2162         if (base_len && base) {
2163                 base_len = eir_append_service_data(conn->le_per_adv_data, 0,
2164                                                    0x1851, base, base_len);
2165                 conn->le_per_adv_data_len = base_len;
2166         }
2167
2168         /* Queue start periodic advertising and create BIG */
2169         err = hci_cmd_sync_queue(hdev, create_big_sync, conn,
2170                                  create_big_complete);
2171         if (err < 0) {
2172                 hci_conn_drop(conn);
2173                 return ERR_PTR(err);
2174         }
2175
2176         hci_iso_qos_setup(hdev, conn, &qos->bcast.out,
2177                           conn->le_tx_phy ? conn->le_tx_phy :
2178                           hdev->le_tx_def_phys);
2179
2180         return conn;
2181 }
2182
2183 struct hci_conn *hci_connect_cis(struct hci_dev *hdev, bdaddr_t *dst,
2184                                  __u8 dst_type, struct bt_iso_qos *qos)
2185 {
2186         struct hci_conn *le;
2187         struct hci_conn *cis;
2188         struct hci_link *link;
2189
2190         if (hci_dev_test_flag(hdev, HCI_ADVERTISING))
2191                 le = hci_connect_le(hdev, dst, dst_type, false,
2192                                     BT_SECURITY_LOW,
2193                                     HCI_LE_CONN_TIMEOUT,
2194                                     HCI_ROLE_SLAVE);
2195         else
2196                 le = hci_connect_le_scan(hdev, dst, dst_type,
2197                                          BT_SECURITY_LOW,
2198                                          HCI_LE_CONN_TIMEOUT,
2199                                          CONN_REASON_ISO_CONNECT);
2200         if (IS_ERR(le))
2201                 return le;
2202
2203         hci_iso_qos_setup(hdev, le, &qos->ucast.out,
2204                           le->le_tx_phy ? le->le_tx_phy : hdev->le_tx_def_phys);
2205         hci_iso_qos_setup(hdev, le, &qos->ucast.in,
2206                           le->le_rx_phy ? le->le_rx_phy : hdev->le_rx_def_phys);
2207
2208         cis = hci_bind_cis(hdev, dst, dst_type, qos);
2209         if (IS_ERR(cis)) {
2210                 hci_conn_drop(le);
2211                 return cis;
2212         }
2213
2214         link = hci_conn_link(le, cis);
2215         if (!link) {
2216                 hci_conn_drop(le);
2217                 hci_conn_drop(cis);
2218                 return NULL;
2219         }
2220
2221         /* If LE is already connected and CIS handle is already set proceed to
2222          * Create CIS immediately.
2223          */
2224         if (le->state == BT_CONNECTED && cis->handle != HCI_CONN_HANDLE_UNSET)
2225                 hci_le_create_cis(cis);
2226
2227         return cis;
2228 }
2229
2230 /* Check link security requirement */
2231 int hci_conn_check_link_mode(struct hci_conn *conn)
2232 {
2233         BT_DBG("hcon %p", conn);
2234
2235         /* In Secure Connections Only mode, it is required that Secure
2236          * Connections is used and the link is encrypted with AES-CCM
2237          * using a P-256 authenticated combination key.
2238          */
2239         if (hci_dev_test_flag(conn->hdev, HCI_SC_ONLY)) {
2240                 if (!hci_conn_sc_enabled(conn) ||
2241                     !test_bit(HCI_CONN_AES_CCM, &conn->flags) ||
2242                     conn->key_type != HCI_LK_AUTH_COMBINATION_P256)
2243                         return 0;
2244         }
2245
2246          /* AES encryption is required for Level 4:
2247           *
2248           * BLUETOOTH CORE SPECIFICATION Version 5.2 | Vol 3, Part C
2249           * page 1319:
2250           *
2251           * 128-bit equivalent strength for link and encryption keys
2252           * required using FIPS approved algorithms (E0 not allowed,
2253           * SAFER+ not allowed, and P-192 not allowed; encryption key
2254           * not shortened)
2255           */
2256         if (conn->sec_level == BT_SECURITY_FIPS &&
2257             !test_bit(HCI_CONN_AES_CCM, &conn->flags)) {
2258                 bt_dev_err(conn->hdev,
2259                            "Invalid security: Missing AES-CCM usage");
2260                 return 0;
2261         }
2262
2263         if (hci_conn_ssp_enabled(conn) &&
2264             !test_bit(HCI_CONN_ENCRYPT, &conn->flags))
2265                 return 0;
2266
2267         return 1;
2268 }
2269
2270 /* Authenticate remote device */
2271 static int hci_conn_auth(struct hci_conn *conn, __u8 sec_level, __u8 auth_type)
2272 {
2273         BT_DBG("hcon %p", conn);
2274
2275         if (conn->pending_sec_level > sec_level)
2276                 sec_level = conn->pending_sec_level;
2277
2278         if (sec_level > conn->sec_level)
2279                 conn->pending_sec_level = sec_level;
2280         else if (test_bit(HCI_CONN_AUTH, &conn->flags))
2281                 return 1;
2282
2283         /* Make sure we preserve an existing MITM requirement*/
2284         auth_type |= (conn->auth_type & 0x01);
2285
2286         conn->auth_type = auth_type;
2287
2288         if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
2289                 struct hci_cp_auth_requested cp;
2290
2291                 cp.handle = cpu_to_le16(conn->handle);
2292                 hci_send_cmd(conn->hdev, HCI_OP_AUTH_REQUESTED,
2293                              sizeof(cp), &cp);
2294
2295                 /* If we're already encrypted set the REAUTH_PEND flag,
2296                  * otherwise set the ENCRYPT_PEND.
2297                  */
2298                 if (test_bit(HCI_CONN_ENCRYPT, &conn->flags))
2299                         set_bit(HCI_CONN_REAUTH_PEND, &conn->flags);
2300                 else
2301                         set_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
2302         }
2303
2304         return 0;
2305 }
2306
2307 /* Encrypt the link */
2308 static void hci_conn_encrypt(struct hci_conn *conn)
2309 {
2310         BT_DBG("hcon %p", conn);
2311
2312         if (!test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags)) {
2313                 struct hci_cp_set_conn_encrypt cp;
2314                 cp.handle  = cpu_to_le16(conn->handle);
2315                 cp.encrypt = 0x01;
2316                 hci_send_cmd(conn->hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
2317                              &cp);
2318         }
2319 }
2320
2321 /* Enable security */
2322 int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type,
2323                       bool initiator)
2324 {
2325         BT_DBG("hcon %p", conn);
2326
2327         if (conn->type == LE_LINK)
2328                 return smp_conn_security(conn, sec_level);
2329
2330         /* For sdp we don't need the link key. */
2331         if (sec_level == BT_SECURITY_SDP)
2332                 return 1;
2333
2334         /* For non 2.1 devices and low security level we don't need the link
2335            key. */
2336         if (sec_level == BT_SECURITY_LOW && !hci_conn_ssp_enabled(conn))
2337                 return 1;
2338
2339         /* For other security levels we need the link key. */
2340         if (!test_bit(HCI_CONN_AUTH, &conn->flags))
2341                 goto auth;
2342
2343         /* An authenticated FIPS approved combination key has sufficient
2344          * security for security level 4. */
2345         if (conn->key_type == HCI_LK_AUTH_COMBINATION_P256 &&
2346             sec_level == BT_SECURITY_FIPS)
2347                 goto encrypt;
2348
2349         /* An authenticated combination key has sufficient security for
2350            security level 3. */
2351         if ((conn->key_type == HCI_LK_AUTH_COMBINATION_P192 ||
2352              conn->key_type == HCI_LK_AUTH_COMBINATION_P256) &&
2353             sec_level == BT_SECURITY_HIGH)
2354                 goto encrypt;
2355
2356         /* An unauthenticated combination key has sufficient security for
2357            security level 1 and 2. */
2358         if ((conn->key_type == HCI_LK_UNAUTH_COMBINATION_P192 ||
2359              conn->key_type == HCI_LK_UNAUTH_COMBINATION_P256) &&
2360             (sec_level == BT_SECURITY_MEDIUM || sec_level == BT_SECURITY_LOW))
2361                 goto encrypt;
2362
2363         /* A combination key has always sufficient security for the security
2364            levels 1 or 2. High security level requires the combination key
2365            is generated using maximum PIN code length (16).
2366            For pre 2.1 units. */
2367         if (conn->key_type == HCI_LK_COMBINATION &&
2368             (sec_level == BT_SECURITY_MEDIUM || sec_level == BT_SECURITY_LOW ||
2369              conn->pin_length == 16))
2370                 goto encrypt;
2371
2372 auth:
2373         if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags))
2374                 return 0;
2375
2376         if (initiator)
2377                 set_bit(HCI_CONN_AUTH_INITIATOR, &conn->flags);
2378
2379         if (!hci_conn_auth(conn, sec_level, auth_type))
2380                 return 0;
2381
2382 encrypt:
2383         if (test_bit(HCI_CONN_ENCRYPT, &conn->flags)) {
2384                 /* Ensure that the encryption key size has been read,
2385                  * otherwise stall the upper layer responses.
2386                  */
2387                 if (!conn->enc_key_size)
2388                         return 0;
2389
2390                 /* Nothing else needed, all requirements are met */
2391                 return 1;
2392         }
2393
2394         hci_conn_encrypt(conn);
2395         return 0;
2396 }
2397 EXPORT_SYMBOL(hci_conn_security);
2398
2399 /* Check secure link requirement */
2400 int hci_conn_check_secure(struct hci_conn *conn, __u8 sec_level)
2401 {
2402         BT_DBG("hcon %p", conn);
2403
2404         /* Accept if non-secure or higher security level is required */
2405         if (sec_level != BT_SECURITY_HIGH && sec_level != BT_SECURITY_FIPS)
2406                 return 1;
2407
2408         /* Accept if secure or higher security level is already present */
2409         if (conn->sec_level == BT_SECURITY_HIGH ||
2410             conn->sec_level == BT_SECURITY_FIPS)
2411                 return 1;
2412
2413         /* Reject not secure link */
2414         return 0;
2415 }
2416 EXPORT_SYMBOL(hci_conn_check_secure);
2417
2418 /* Switch role */
2419 int hci_conn_switch_role(struct hci_conn *conn, __u8 role)
2420 {
2421         BT_DBG("hcon %p", conn);
2422
2423         if (role == conn->role)
2424                 return 1;
2425
2426         if (!test_and_set_bit(HCI_CONN_RSWITCH_PEND, &conn->flags)) {
2427                 struct hci_cp_switch_role cp;
2428                 bacpy(&cp.bdaddr, &conn->dst);
2429                 cp.role = role;
2430                 hci_send_cmd(conn->hdev, HCI_OP_SWITCH_ROLE, sizeof(cp), &cp);
2431         }
2432
2433         return 0;
2434 }
2435 EXPORT_SYMBOL(hci_conn_switch_role);
2436
2437 /* Enter active mode */
2438 void hci_conn_enter_active_mode(struct hci_conn *conn, __u8 force_active)
2439 {
2440         struct hci_dev *hdev = conn->hdev;
2441
2442         BT_DBG("hcon %p mode %d", conn, conn->mode);
2443
2444         if (conn->mode != HCI_CM_SNIFF)
2445                 goto timer;
2446
2447         if (!test_bit(HCI_CONN_POWER_SAVE, &conn->flags) && !force_active)
2448                 goto timer;
2449
2450         if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags)) {
2451                 struct hci_cp_exit_sniff_mode cp;
2452                 cp.handle = cpu_to_le16(conn->handle);
2453                 hci_send_cmd(hdev, HCI_OP_EXIT_SNIFF_MODE, sizeof(cp), &cp);
2454         }
2455
2456 timer:
2457         if (hdev->idle_timeout > 0)
2458                 queue_delayed_work(hdev->workqueue, &conn->idle_work,
2459                                    msecs_to_jiffies(hdev->idle_timeout));
2460 }
2461
2462 /* Drop all connection on the device */
2463 void hci_conn_hash_flush(struct hci_dev *hdev)
2464 {
2465         struct hci_conn_hash *h = &hdev->conn_hash;
2466         struct hci_conn *c, *n;
2467
2468         BT_DBG("hdev %s", hdev->name);
2469
2470         list_for_each_entry_safe(c, n, &h->list, list) {
2471                 c->state = BT_CLOSED;
2472
2473                 hci_disconn_cfm(c, HCI_ERROR_LOCAL_HOST_TERM);
2474
2475                 /* Unlink before deleting otherwise it is possible that
2476                  * hci_conn_del removes the link which may cause the list to
2477                  * contain items already freed.
2478                  */
2479                 hci_conn_unlink(c);
2480                 hci_conn_del(c);
2481         }
2482 }
2483
2484 /* Check pending connect attempts */
2485 void hci_conn_check_pending(struct hci_dev *hdev)
2486 {
2487         struct hci_conn *conn;
2488
2489         BT_DBG("hdev %s", hdev->name);
2490
2491         hci_dev_lock(hdev);
2492
2493         conn = hci_conn_hash_lookup_state(hdev, ACL_LINK, BT_CONNECT2);
2494         if (conn)
2495                 hci_acl_create_connection(conn);
2496
2497         hci_dev_unlock(hdev);
2498 }
2499
2500 static u32 get_link_mode(struct hci_conn *conn)
2501 {
2502         u32 link_mode = 0;
2503
2504         if (conn->role == HCI_ROLE_MASTER)
2505                 link_mode |= HCI_LM_MASTER;
2506
2507         if (test_bit(HCI_CONN_ENCRYPT, &conn->flags))
2508                 link_mode |= HCI_LM_ENCRYPT;
2509
2510         if (test_bit(HCI_CONN_AUTH, &conn->flags))
2511                 link_mode |= HCI_LM_AUTH;
2512
2513         if (test_bit(HCI_CONN_SECURE, &conn->flags))
2514                 link_mode |= HCI_LM_SECURE;
2515
2516         if (test_bit(HCI_CONN_FIPS, &conn->flags))
2517                 link_mode |= HCI_LM_FIPS;
2518
2519         return link_mode;
2520 }
2521
2522 int hci_get_conn_list(void __user *arg)
2523 {
2524         struct hci_conn *c;
2525         struct hci_conn_list_req req, *cl;
2526         struct hci_conn_info *ci;
2527         struct hci_dev *hdev;
2528         int n = 0, size, err;
2529
2530         if (copy_from_user(&req, arg, sizeof(req)))
2531                 return -EFAULT;
2532
2533         if (!req.conn_num || req.conn_num > (PAGE_SIZE * 2) / sizeof(*ci))
2534                 return -EINVAL;
2535
2536         size = sizeof(req) + req.conn_num * sizeof(*ci);
2537
2538         cl = kmalloc(size, GFP_KERNEL);
2539         if (!cl)
2540                 return -ENOMEM;
2541
2542         hdev = hci_dev_get(req.dev_id);
2543         if (!hdev) {
2544                 kfree(cl);
2545                 return -ENODEV;
2546         }
2547
2548         ci = cl->conn_info;
2549
2550         hci_dev_lock(hdev);
2551         list_for_each_entry(c, &hdev->conn_hash.list, list) {
2552                 bacpy(&(ci + n)->bdaddr, &c->dst);
2553                 (ci + n)->handle = c->handle;
2554                 (ci + n)->type  = c->type;
2555                 (ci + n)->out   = c->out;
2556                 (ci + n)->state = c->state;
2557                 (ci + n)->link_mode = get_link_mode(c);
2558                 if (++n >= req.conn_num)
2559                         break;
2560         }
2561         hci_dev_unlock(hdev);
2562
2563         cl->dev_id = hdev->id;
2564         cl->conn_num = n;
2565         size = sizeof(req) + n * sizeof(*ci);
2566
2567         hci_dev_put(hdev);
2568
2569         err = copy_to_user(arg, cl, size);
2570         kfree(cl);
2571
2572         return err ? -EFAULT : 0;
2573 }
2574
2575 int hci_get_conn_info(struct hci_dev *hdev, void __user *arg)
2576 {
2577         struct hci_conn_info_req req;
2578         struct hci_conn_info ci;
2579         struct hci_conn *conn;
2580         char __user *ptr = arg + sizeof(req);
2581
2582         if (copy_from_user(&req, arg, sizeof(req)))
2583                 return -EFAULT;
2584
2585         hci_dev_lock(hdev);
2586         conn = hci_conn_hash_lookup_ba(hdev, req.type, &req.bdaddr);
2587         if (conn) {
2588                 bacpy(&ci.bdaddr, &conn->dst);
2589                 ci.handle = conn->handle;
2590                 ci.type  = conn->type;
2591                 ci.out   = conn->out;
2592                 ci.state = conn->state;
2593                 ci.link_mode = get_link_mode(conn);
2594         }
2595         hci_dev_unlock(hdev);
2596
2597         if (!conn)
2598                 return -ENOENT;
2599
2600         return copy_to_user(ptr, &ci, sizeof(ci)) ? -EFAULT : 0;
2601 }
2602
2603 int hci_get_auth_info(struct hci_dev *hdev, void __user *arg)
2604 {
2605         struct hci_auth_info_req req;
2606         struct hci_conn *conn;
2607
2608         if (copy_from_user(&req, arg, sizeof(req)))
2609                 return -EFAULT;
2610
2611         hci_dev_lock(hdev);
2612         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &req.bdaddr);
2613         if (conn)
2614                 req.type = conn->auth_type;
2615         hci_dev_unlock(hdev);
2616
2617         if (!conn)
2618                 return -ENOENT;
2619
2620         return copy_to_user(arg, &req, sizeof(req)) ? -EFAULT : 0;
2621 }
2622
2623 struct hci_chan *hci_chan_create(struct hci_conn *conn)
2624 {
2625         struct hci_dev *hdev = conn->hdev;
2626         struct hci_chan *chan;
2627
2628         BT_DBG("%s hcon %p", hdev->name, conn);
2629
2630         if (test_bit(HCI_CONN_DROP, &conn->flags)) {
2631                 BT_DBG("Refusing to create new hci_chan");
2632                 return NULL;
2633         }
2634
2635         chan = kzalloc(sizeof(*chan), GFP_KERNEL);
2636         if (!chan)
2637                 return NULL;
2638
2639         chan->conn = hci_conn_get(conn);
2640         skb_queue_head_init(&chan->data_q);
2641         chan->state = BT_CONNECTED;
2642
2643         list_add_rcu(&chan->list, &conn->chan_list);
2644
2645         return chan;
2646 }
2647
2648 void hci_chan_del(struct hci_chan *chan)
2649 {
2650         struct hci_conn *conn = chan->conn;
2651         struct hci_dev *hdev = conn->hdev;
2652
2653         BT_DBG("%s hcon %p chan %p", hdev->name, conn, chan);
2654
2655         list_del_rcu(&chan->list);
2656
2657         synchronize_rcu();
2658
2659         /* Prevent new hci_chan's to be created for this hci_conn */
2660         set_bit(HCI_CONN_DROP, &conn->flags);
2661
2662         hci_conn_put(conn);
2663
2664         skb_queue_purge(&chan->data_q);
2665         kfree(chan);
2666 }
2667
2668 void hci_chan_list_flush(struct hci_conn *conn)
2669 {
2670         struct hci_chan *chan, *n;
2671
2672         BT_DBG("hcon %p", conn);
2673
2674         list_for_each_entry_safe(chan, n, &conn->chan_list, list)
2675                 hci_chan_del(chan);
2676 }
2677
2678 static struct hci_chan *__hci_chan_lookup_handle(struct hci_conn *hcon,
2679                                                  __u16 handle)
2680 {
2681         struct hci_chan *hchan;
2682
2683         list_for_each_entry(hchan, &hcon->chan_list, list) {
2684                 if (hchan->handle == handle)
2685                         return hchan;
2686         }
2687
2688         return NULL;
2689 }
2690
2691 struct hci_chan *hci_chan_lookup_handle(struct hci_dev *hdev, __u16 handle)
2692 {
2693         struct hci_conn_hash *h = &hdev->conn_hash;
2694         struct hci_conn *hcon;
2695         struct hci_chan *hchan = NULL;
2696
2697         rcu_read_lock();
2698
2699         list_for_each_entry_rcu(hcon, &h->list, list) {
2700                 hchan = __hci_chan_lookup_handle(hcon, handle);
2701                 if (hchan)
2702                         break;
2703         }
2704
2705         rcu_read_unlock();
2706
2707         return hchan;
2708 }
2709
2710 u32 hci_conn_get_phy(struct hci_conn *conn)
2711 {
2712         u32 phys = 0;
2713
2714         /* BLUETOOTH CORE SPECIFICATION Version 5.2 | Vol 2, Part B page 471:
2715          * Table 6.2: Packets defined for synchronous, asynchronous, and
2716          * CPB logical transport types.
2717          */
2718         switch (conn->type) {
2719         case SCO_LINK:
2720                 /* SCO logical transport (1 Mb/s):
2721                  * HV1, HV2, HV3 and DV.
2722                  */
2723                 phys |= BT_PHY_BR_1M_1SLOT;
2724
2725                 break;
2726
2727         case ACL_LINK:
2728                 /* ACL logical transport (1 Mb/s) ptt=0:
2729                  * DH1, DM3, DH3, DM5 and DH5.
2730                  */
2731                 phys |= BT_PHY_BR_1M_1SLOT;
2732
2733                 if (conn->pkt_type & (HCI_DM3 | HCI_DH3))
2734                         phys |= BT_PHY_BR_1M_3SLOT;
2735
2736                 if (conn->pkt_type & (HCI_DM5 | HCI_DH5))
2737                         phys |= BT_PHY_BR_1M_5SLOT;
2738
2739                 /* ACL logical transport (2 Mb/s) ptt=1:
2740                  * 2-DH1, 2-DH3 and 2-DH5.
2741                  */
2742                 if (!(conn->pkt_type & HCI_2DH1))
2743                         phys |= BT_PHY_EDR_2M_1SLOT;
2744
2745                 if (!(conn->pkt_type & HCI_2DH3))
2746                         phys |= BT_PHY_EDR_2M_3SLOT;
2747
2748                 if (!(conn->pkt_type & HCI_2DH5))
2749                         phys |= BT_PHY_EDR_2M_5SLOT;
2750
2751                 /* ACL logical transport (3 Mb/s) ptt=1:
2752                  * 3-DH1, 3-DH3 and 3-DH5.
2753                  */
2754                 if (!(conn->pkt_type & HCI_3DH1))
2755                         phys |= BT_PHY_EDR_3M_1SLOT;
2756
2757                 if (!(conn->pkt_type & HCI_3DH3))
2758                         phys |= BT_PHY_EDR_3M_3SLOT;
2759
2760                 if (!(conn->pkt_type & HCI_3DH5))
2761                         phys |= BT_PHY_EDR_3M_5SLOT;
2762
2763                 break;
2764
2765         case ESCO_LINK:
2766                 /* eSCO logical transport (1 Mb/s): EV3, EV4 and EV5 */
2767                 phys |= BT_PHY_BR_1M_1SLOT;
2768
2769                 if (!(conn->pkt_type & (ESCO_EV4 | ESCO_EV5)))
2770                         phys |= BT_PHY_BR_1M_3SLOT;
2771
2772                 /* eSCO logical transport (2 Mb/s): 2-EV3, 2-EV5 */
2773                 if (!(conn->pkt_type & ESCO_2EV3))
2774                         phys |= BT_PHY_EDR_2M_1SLOT;
2775
2776                 if (!(conn->pkt_type & ESCO_2EV5))
2777                         phys |= BT_PHY_EDR_2M_3SLOT;
2778
2779                 /* eSCO logical transport (3 Mb/s): 3-EV3, 3-EV5 */
2780                 if (!(conn->pkt_type & ESCO_3EV3))
2781                         phys |= BT_PHY_EDR_3M_1SLOT;
2782
2783                 if (!(conn->pkt_type & ESCO_3EV5))
2784                         phys |= BT_PHY_EDR_3M_3SLOT;
2785
2786                 break;
2787
2788         case LE_LINK:
2789                 if (conn->le_tx_phy & HCI_LE_SET_PHY_1M)
2790                         phys |= BT_PHY_LE_1M_TX;
2791
2792                 if (conn->le_rx_phy & HCI_LE_SET_PHY_1M)
2793                         phys |= BT_PHY_LE_1M_RX;
2794
2795                 if (conn->le_tx_phy & HCI_LE_SET_PHY_2M)
2796                         phys |= BT_PHY_LE_2M_TX;
2797
2798                 if (conn->le_rx_phy & HCI_LE_SET_PHY_2M)
2799                         phys |= BT_PHY_LE_2M_RX;
2800
2801                 if (conn->le_tx_phy & HCI_LE_SET_PHY_CODED)
2802                         phys |= BT_PHY_LE_CODED_TX;
2803
2804                 if (conn->le_rx_phy & HCI_LE_SET_PHY_CODED)
2805                         phys |= BT_PHY_LE_CODED_RX;
2806
2807                 break;
2808         }
2809
2810         return phys;
2811 }
2812
2813 int hci_abort_conn(struct hci_conn *conn, u8 reason)
2814 {
2815         int r = 0;
2816
2817         if (test_and_set_bit(HCI_CONN_CANCEL, &conn->flags))
2818                 return 0;
2819
2820         switch (conn->state) {
2821         case BT_CONNECTED:
2822         case BT_CONFIG:
2823                 if (conn->type == AMP_LINK) {
2824                         struct hci_cp_disconn_phy_link cp;
2825
2826                         cp.phy_handle = HCI_PHY_HANDLE(conn->handle);
2827                         cp.reason = reason;
2828                         r = hci_send_cmd(conn->hdev, HCI_OP_DISCONN_PHY_LINK,
2829                                          sizeof(cp), &cp);
2830                 } else {
2831                         struct hci_cp_disconnect dc;
2832
2833                         dc.handle = cpu_to_le16(conn->handle);
2834                         dc.reason = reason;
2835                         r = hci_send_cmd(conn->hdev, HCI_OP_DISCONNECT,
2836                                          sizeof(dc), &dc);
2837                 }
2838
2839                 conn->state = BT_DISCONN;
2840
2841                 break;
2842         case BT_CONNECT:
2843                 if (conn->type == LE_LINK) {
2844                         if (test_bit(HCI_CONN_SCANNING, &conn->flags))
2845                                 break;
2846                         r = hci_send_cmd(conn->hdev,
2847                                          HCI_OP_LE_CREATE_CONN_CANCEL, 0, NULL);
2848                 } else if (conn->type == ACL_LINK) {
2849                         if (conn->hdev->hci_ver < BLUETOOTH_VER_1_2)
2850                                 break;
2851                         r = hci_send_cmd(conn->hdev,
2852                                          HCI_OP_CREATE_CONN_CANCEL,
2853                                          6, &conn->dst);
2854                 }
2855                 break;
2856         case BT_CONNECT2:
2857                 if (conn->type == ACL_LINK) {
2858                         struct hci_cp_reject_conn_req rej;
2859
2860                         bacpy(&rej.bdaddr, &conn->dst);
2861                         rej.reason = reason;
2862
2863                         r = hci_send_cmd(conn->hdev,
2864                                          HCI_OP_REJECT_CONN_REQ,
2865                                          sizeof(rej), &rej);
2866                 } else if (conn->type == SCO_LINK || conn->type == ESCO_LINK) {
2867                         struct hci_cp_reject_sync_conn_req rej;
2868
2869                         bacpy(&rej.bdaddr, &conn->dst);
2870
2871                         /* SCO rejection has its own limited set of
2872                          * allowed error values (0x0D-0x0F) which isn't
2873                          * compatible with most values passed to this
2874                          * function. To be safe hard-code one of the
2875                          * values that's suitable for SCO.
2876                          */
2877                         rej.reason = HCI_ERROR_REJ_LIMITED_RESOURCES;
2878
2879                         r = hci_send_cmd(conn->hdev,
2880                                          HCI_OP_REJECT_SYNC_CONN_REQ,
2881                                          sizeof(rej), &rej);
2882                 }
2883                 break;
2884         default:
2885                 conn->state = BT_CLOSED;
2886                 break;
2887         }
2888
2889         return r;
2890 }