]> rtime.felk.cvut.cz Git - can-eth-gw-linux.git/blob - net/bluetooth/mgmt.c
Merge branch 'akpm' (Andrew's patch-bomb)
[can-eth-gw-linux.git] / net / bluetooth / mgmt.c
1 /*
2    BlueZ - Bluetooth protocol stack for Linux
3
4    Copyright (C) 2010  Nokia Corporation
5    Copyright (C) 2011-2012 Intel Corporation
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License version 2 as
9    published by the Free Software Foundation;
10
11    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
14    IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
15    CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
16    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19
20    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
21    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
22    SOFTWARE IS DISCLAIMED.
23 */
24
25 /* Bluetooth HCI Management interface */
26
27 #include <linux/module.h>
28 #include <asm/unaligned.h>
29
30 #include <net/bluetooth/bluetooth.h>
31 #include <net/bluetooth/hci_core.h>
32 #include <net/bluetooth/mgmt.h>
33 #include <net/bluetooth/smp.h>
34
35 bool enable_hs;
36
37 #define MGMT_VERSION    1
38 #define MGMT_REVISION   2
39
40 static const u16 mgmt_commands[] = {
41         MGMT_OP_READ_INDEX_LIST,
42         MGMT_OP_READ_INFO,
43         MGMT_OP_SET_POWERED,
44         MGMT_OP_SET_DISCOVERABLE,
45         MGMT_OP_SET_CONNECTABLE,
46         MGMT_OP_SET_FAST_CONNECTABLE,
47         MGMT_OP_SET_PAIRABLE,
48         MGMT_OP_SET_LINK_SECURITY,
49         MGMT_OP_SET_SSP,
50         MGMT_OP_SET_HS,
51         MGMT_OP_SET_LE,
52         MGMT_OP_SET_DEV_CLASS,
53         MGMT_OP_SET_LOCAL_NAME,
54         MGMT_OP_ADD_UUID,
55         MGMT_OP_REMOVE_UUID,
56         MGMT_OP_LOAD_LINK_KEYS,
57         MGMT_OP_LOAD_LONG_TERM_KEYS,
58         MGMT_OP_DISCONNECT,
59         MGMT_OP_GET_CONNECTIONS,
60         MGMT_OP_PIN_CODE_REPLY,
61         MGMT_OP_PIN_CODE_NEG_REPLY,
62         MGMT_OP_SET_IO_CAPABILITY,
63         MGMT_OP_PAIR_DEVICE,
64         MGMT_OP_CANCEL_PAIR_DEVICE,
65         MGMT_OP_UNPAIR_DEVICE,
66         MGMT_OP_USER_CONFIRM_REPLY,
67         MGMT_OP_USER_CONFIRM_NEG_REPLY,
68         MGMT_OP_USER_PASSKEY_REPLY,
69         MGMT_OP_USER_PASSKEY_NEG_REPLY,
70         MGMT_OP_READ_LOCAL_OOB_DATA,
71         MGMT_OP_ADD_REMOTE_OOB_DATA,
72         MGMT_OP_REMOVE_REMOTE_OOB_DATA,
73         MGMT_OP_START_DISCOVERY,
74         MGMT_OP_STOP_DISCOVERY,
75         MGMT_OP_CONFIRM_NAME,
76         MGMT_OP_BLOCK_DEVICE,
77         MGMT_OP_UNBLOCK_DEVICE,
78         MGMT_OP_SET_DEVICE_ID,
79 };
80
81 static const u16 mgmt_events[] = {
82         MGMT_EV_CONTROLLER_ERROR,
83         MGMT_EV_INDEX_ADDED,
84         MGMT_EV_INDEX_REMOVED,
85         MGMT_EV_NEW_SETTINGS,
86         MGMT_EV_CLASS_OF_DEV_CHANGED,
87         MGMT_EV_LOCAL_NAME_CHANGED,
88         MGMT_EV_NEW_LINK_KEY,
89         MGMT_EV_NEW_LONG_TERM_KEY,
90         MGMT_EV_DEVICE_CONNECTED,
91         MGMT_EV_DEVICE_DISCONNECTED,
92         MGMT_EV_CONNECT_FAILED,
93         MGMT_EV_PIN_CODE_REQUEST,
94         MGMT_EV_USER_CONFIRM_REQUEST,
95         MGMT_EV_USER_PASSKEY_REQUEST,
96         MGMT_EV_AUTH_FAILED,
97         MGMT_EV_DEVICE_FOUND,
98         MGMT_EV_DISCOVERING,
99         MGMT_EV_DEVICE_BLOCKED,
100         MGMT_EV_DEVICE_UNBLOCKED,
101         MGMT_EV_DEVICE_UNPAIRED,
102         MGMT_EV_PASSKEY_NOTIFY,
103 };
104
105 /*
106  * These LE scan and inquiry parameters were chosen according to LE General
107  * Discovery Procedure specification.
108  */
109 #define LE_SCAN_TYPE                    0x01
110 #define LE_SCAN_WIN                     0x12
111 #define LE_SCAN_INT                     0x12
112 #define LE_SCAN_TIMEOUT_LE_ONLY         10240   /* TGAP(gen_disc_scan_min) */
113 #define LE_SCAN_TIMEOUT_BREDR_LE        5120    /* TGAP(100)/2 */
114
115 #define INQUIRY_LEN_BREDR               0x08    /* TGAP(100) */
116 #define INQUIRY_LEN_BREDR_LE            0x04    /* TGAP(100)/2 */
117
118 #define CACHE_TIMEOUT   msecs_to_jiffies(2 * 1000)
119
120 #define hdev_is_powered(hdev) (test_bit(HCI_UP, &hdev->flags) && \
121                                 !test_bit(HCI_AUTO_OFF, &hdev->dev_flags))
122
123 struct pending_cmd {
124         struct list_head list;
125         u16 opcode;
126         int index;
127         void *param;
128         struct sock *sk;
129         void *user_data;
130 };
131
132 /* HCI to MGMT error code conversion table */
133 static u8 mgmt_status_table[] = {
134         MGMT_STATUS_SUCCESS,
135         MGMT_STATUS_UNKNOWN_COMMAND,    /* Unknown Command */
136         MGMT_STATUS_NOT_CONNECTED,      /* No Connection */
137         MGMT_STATUS_FAILED,             /* Hardware Failure */
138         MGMT_STATUS_CONNECT_FAILED,     /* Page Timeout */
139         MGMT_STATUS_AUTH_FAILED,        /* Authentication Failed */
140         MGMT_STATUS_NOT_PAIRED,         /* PIN or Key Missing */
141         MGMT_STATUS_NO_RESOURCES,       /* Memory Full */
142         MGMT_STATUS_TIMEOUT,            /* Connection Timeout */
143         MGMT_STATUS_NO_RESOURCES,       /* Max Number of Connections */
144         MGMT_STATUS_NO_RESOURCES,       /* Max Number of SCO Connections */
145         MGMT_STATUS_ALREADY_CONNECTED,  /* ACL Connection Exists */
146         MGMT_STATUS_BUSY,               /* Command Disallowed */
147         MGMT_STATUS_NO_RESOURCES,       /* Rejected Limited Resources */
148         MGMT_STATUS_REJECTED,           /* Rejected Security */
149         MGMT_STATUS_REJECTED,           /* Rejected Personal */
150         MGMT_STATUS_TIMEOUT,            /* Host Timeout */
151         MGMT_STATUS_NOT_SUPPORTED,      /* Unsupported Feature */
152         MGMT_STATUS_INVALID_PARAMS,     /* Invalid Parameters */
153         MGMT_STATUS_DISCONNECTED,       /* OE User Ended Connection */
154         MGMT_STATUS_NO_RESOURCES,       /* OE Low Resources */
155         MGMT_STATUS_DISCONNECTED,       /* OE Power Off */
156         MGMT_STATUS_DISCONNECTED,       /* Connection Terminated */
157         MGMT_STATUS_BUSY,               /* Repeated Attempts */
158         MGMT_STATUS_REJECTED,           /* Pairing Not Allowed */
159         MGMT_STATUS_FAILED,             /* Unknown LMP PDU */
160         MGMT_STATUS_NOT_SUPPORTED,      /* Unsupported Remote Feature */
161         MGMT_STATUS_REJECTED,           /* SCO Offset Rejected */
162         MGMT_STATUS_REJECTED,           /* SCO Interval Rejected */
163         MGMT_STATUS_REJECTED,           /* Air Mode Rejected */
164         MGMT_STATUS_INVALID_PARAMS,     /* Invalid LMP Parameters */
165         MGMT_STATUS_FAILED,             /* Unspecified Error */
166         MGMT_STATUS_NOT_SUPPORTED,      /* Unsupported LMP Parameter Value */
167         MGMT_STATUS_FAILED,             /* Role Change Not Allowed */
168         MGMT_STATUS_TIMEOUT,            /* LMP Response Timeout */
169         MGMT_STATUS_FAILED,             /* LMP Error Transaction Collision */
170         MGMT_STATUS_FAILED,             /* LMP PDU Not Allowed */
171         MGMT_STATUS_REJECTED,           /* Encryption Mode Not Accepted */
172         MGMT_STATUS_FAILED,             /* Unit Link Key Used */
173         MGMT_STATUS_NOT_SUPPORTED,      /* QoS Not Supported */
174         MGMT_STATUS_TIMEOUT,            /* Instant Passed */
175         MGMT_STATUS_NOT_SUPPORTED,      /* Pairing Not Supported */
176         MGMT_STATUS_FAILED,             /* Transaction Collision */
177         MGMT_STATUS_INVALID_PARAMS,     /* Unacceptable Parameter */
178         MGMT_STATUS_REJECTED,           /* QoS Rejected */
179         MGMT_STATUS_NOT_SUPPORTED,      /* Classification Not Supported */
180         MGMT_STATUS_REJECTED,           /* Insufficient Security */
181         MGMT_STATUS_INVALID_PARAMS,     /* Parameter Out Of Range */
182         MGMT_STATUS_BUSY,               /* Role Switch Pending */
183         MGMT_STATUS_FAILED,             /* Slot Violation */
184         MGMT_STATUS_FAILED,             /* Role Switch Failed */
185         MGMT_STATUS_INVALID_PARAMS,     /* EIR Too Large */
186         MGMT_STATUS_NOT_SUPPORTED,      /* Simple Pairing Not Supported */
187         MGMT_STATUS_BUSY,               /* Host Busy Pairing */
188         MGMT_STATUS_REJECTED,           /* Rejected, No Suitable Channel */
189         MGMT_STATUS_BUSY,               /* Controller Busy */
190         MGMT_STATUS_INVALID_PARAMS,     /* Unsuitable Connection Interval */
191         MGMT_STATUS_TIMEOUT,            /* Directed Advertising Timeout */
192         MGMT_STATUS_AUTH_FAILED,        /* Terminated Due to MIC Failure */
193         MGMT_STATUS_CONNECT_FAILED,     /* Connection Establishment Failed */
194         MGMT_STATUS_CONNECT_FAILED,     /* MAC Connection Failed */
195 };
196
197 bool mgmt_valid_hdev(struct hci_dev *hdev)
198 {
199         return hdev->dev_type == HCI_BREDR;
200 }
201
202 static u8 mgmt_status(u8 hci_status)
203 {
204         if (hci_status < ARRAY_SIZE(mgmt_status_table))
205                 return mgmt_status_table[hci_status];
206
207         return MGMT_STATUS_FAILED;
208 }
209
210 static int cmd_status(struct sock *sk, u16 index, u16 cmd, u8 status)
211 {
212         struct sk_buff *skb;
213         struct mgmt_hdr *hdr;
214         struct mgmt_ev_cmd_status *ev;
215         int err;
216
217         BT_DBG("sock %p, index %u, cmd %u, status %u", sk, index, cmd, status);
218
219         skb = alloc_skb(sizeof(*hdr) + sizeof(*ev), GFP_KERNEL);
220         if (!skb)
221                 return -ENOMEM;
222
223         hdr = (void *) skb_put(skb, sizeof(*hdr));
224
225         hdr->opcode = __constant_cpu_to_le16(MGMT_EV_CMD_STATUS);
226         hdr->index = cpu_to_le16(index);
227         hdr->len = cpu_to_le16(sizeof(*ev));
228
229         ev = (void *) skb_put(skb, sizeof(*ev));
230         ev->status = status;
231         ev->opcode = cpu_to_le16(cmd);
232
233         err = sock_queue_rcv_skb(sk, skb);
234         if (err < 0)
235                 kfree_skb(skb);
236
237         return err;
238 }
239
240 static int cmd_complete(struct sock *sk, u16 index, u16 cmd, u8 status,
241                         void *rp, size_t rp_len)
242 {
243         struct sk_buff *skb;
244         struct mgmt_hdr *hdr;
245         struct mgmt_ev_cmd_complete *ev;
246         int err;
247
248         BT_DBG("sock %p", sk);
249
250         skb = alloc_skb(sizeof(*hdr) + sizeof(*ev) + rp_len, GFP_KERNEL);
251         if (!skb)
252                 return -ENOMEM;
253
254         hdr = (void *) skb_put(skb, sizeof(*hdr));
255
256         hdr->opcode = __constant_cpu_to_le16(MGMT_EV_CMD_COMPLETE);
257         hdr->index = cpu_to_le16(index);
258         hdr->len = cpu_to_le16(sizeof(*ev) + rp_len);
259
260         ev = (void *) skb_put(skb, sizeof(*ev) + rp_len);
261         ev->opcode = cpu_to_le16(cmd);
262         ev->status = status;
263
264         if (rp)
265                 memcpy(ev->data, rp, rp_len);
266
267         err = sock_queue_rcv_skb(sk, skb);
268         if (err < 0)
269                 kfree_skb(skb);
270
271         return err;
272 }
273
274 static int read_version(struct sock *sk, struct hci_dev *hdev, void *data,
275                         u16 data_len)
276 {
277         struct mgmt_rp_read_version rp;
278
279         BT_DBG("sock %p", sk);
280
281         rp.version = MGMT_VERSION;
282         rp.revision = __constant_cpu_to_le16(MGMT_REVISION);
283
284         return cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_VERSION, 0, &rp,
285                             sizeof(rp));
286 }
287
288 static int read_commands(struct sock *sk, struct hci_dev *hdev, void *data,
289                          u16 data_len)
290 {
291         struct mgmt_rp_read_commands *rp;
292         const u16 num_commands = ARRAY_SIZE(mgmt_commands);
293         const u16 num_events = ARRAY_SIZE(mgmt_events);
294         __le16 *opcode;
295         size_t rp_size;
296         int i, err;
297
298         BT_DBG("sock %p", sk);
299
300         rp_size = sizeof(*rp) + ((num_commands + num_events) * sizeof(u16));
301
302         rp = kmalloc(rp_size, GFP_KERNEL);
303         if (!rp)
304                 return -ENOMEM;
305
306         rp->num_commands = __constant_cpu_to_le16(num_commands);
307         rp->num_events = __constant_cpu_to_le16(num_events);
308
309         for (i = 0, opcode = rp->opcodes; i < num_commands; i++, opcode++)
310                 put_unaligned_le16(mgmt_commands[i], opcode);
311
312         for (i = 0; i < num_events; i++, opcode++)
313                 put_unaligned_le16(mgmt_events[i], opcode);
314
315         err = cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_COMMANDS, 0, rp,
316                            rp_size);
317         kfree(rp);
318
319         return err;
320 }
321
322 static int read_index_list(struct sock *sk, struct hci_dev *hdev, void *data,
323                            u16 data_len)
324 {
325         struct mgmt_rp_read_index_list *rp;
326         struct hci_dev *d;
327         size_t rp_len;
328         u16 count;
329         int err;
330
331         BT_DBG("sock %p", sk);
332
333         read_lock(&hci_dev_list_lock);
334
335         count = 0;
336         list_for_each_entry(d, &hci_dev_list, list) {
337                 if (!mgmt_valid_hdev(d))
338                         continue;
339
340                 count++;
341         }
342
343         rp_len = sizeof(*rp) + (2 * count);
344         rp = kmalloc(rp_len, GFP_ATOMIC);
345         if (!rp) {
346                 read_unlock(&hci_dev_list_lock);
347                 return -ENOMEM;
348         }
349
350         count = 0;
351         list_for_each_entry(d, &hci_dev_list, list) {
352                 if (test_bit(HCI_SETUP, &d->dev_flags))
353                         continue;
354
355                 if (!mgmt_valid_hdev(d))
356                         continue;
357
358                 rp->index[count++] = cpu_to_le16(d->id);
359                 BT_DBG("Added hci%u", d->id);
360         }
361
362         rp->num_controllers = cpu_to_le16(count);
363         rp_len = sizeof(*rp) + (2 * count);
364
365         read_unlock(&hci_dev_list_lock);
366
367         err = cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_INDEX_LIST, 0, rp,
368                            rp_len);
369
370         kfree(rp);
371
372         return err;
373 }
374
375 static u32 get_supported_settings(struct hci_dev *hdev)
376 {
377         u32 settings = 0;
378
379         settings |= MGMT_SETTING_POWERED;
380         settings |= MGMT_SETTING_PAIRABLE;
381
382         if (lmp_ssp_capable(hdev))
383                 settings |= MGMT_SETTING_SSP;
384
385         if (lmp_bredr_capable(hdev)) {
386                 settings |= MGMT_SETTING_CONNECTABLE;
387                 settings |= MGMT_SETTING_FAST_CONNECTABLE;
388                 settings |= MGMT_SETTING_DISCOVERABLE;
389                 settings |= MGMT_SETTING_BREDR;
390                 settings |= MGMT_SETTING_LINK_SECURITY;
391         }
392
393         if (enable_hs)
394                 settings |= MGMT_SETTING_HS;
395
396         if (lmp_le_capable(hdev))
397                 settings |= MGMT_SETTING_LE;
398
399         return settings;
400 }
401
402 static u32 get_current_settings(struct hci_dev *hdev)
403 {
404         u32 settings = 0;
405
406         if (hdev_is_powered(hdev))
407                 settings |= MGMT_SETTING_POWERED;
408
409         if (test_bit(HCI_CONNECTABLE, &hdev->dev_flags))
410                 settings |= MGMT_SETTING_CONNECTABLE;
411
412         if (test_bit(HCI_DISCOVERABLE, &hdev->dev_flags))
413                 settings |= MGMT_SETTING_DISCOVERABLE;
414
415         if (test_bit(HCI_PAIRABLE, &hdev->dev_flags))
416                 settings |= MGMT_SETTING_PAIRABLE;
417
418         if (lmp_bredr_capable(hdev))
419                 settings |= MGMT_SETTING_BREDR;
420
421         if (test_bit(HCI_LE_ENABLED, &hdev->dev_flags))
422                 settings |= MGMT_SETTING_LE;
423
424         if (test_bit(HCI_LINK_SECURITY, &hdev->dev_flags))
425                 settings |= MGMT_SETTING_LINK_SECURITY;
426
427         if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags))
428                 settings |= MGMT_SETTING_SSP;
429
430         if (test_bit(HCI_HS_ENABLED, &hdev->dev_flags))
431                 settings |= MGMT_SETTING_HS;
432
433         return settings;
434 }
435
436 #define PNP_INFO_SVCLASS_ID             0x1200
437
438 static u8 bluetooth_base_uuid[] = {
439                         0xFB, 0x34, 0x9B, 0x5F, 0x80, 0x00, 0x00, 0x80,
440                         0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
441 };
442
443 static u16 get_uuid16(u8 *uuid128)
444 {
445         u32 val;
446         int i;
447
448         for (i = 0; i < 12; i++) {
449                 if (bluetooth_base_uuid[i] != uuid128[i])
450                         return 0;
451         }
452
453         val = get_unaligned_le32(&uuid128[12]);
454         if (val > 0xffff)
455                 return 0;
456
457         return (u16) val;
458 }
459
460 static void create_eir(struct hci_dev *hdev, u8 *data)
461 {
462         u8 *ptr = data;
463         u16 eir_len = 0;
464         u16 uuid16_list[HCI_MAX_EIR_LENGTH / sizeof(u16)];
465         int i, truncated = 0;
466         struct bt_uuid *uuid;
467         size_t name_len;
468
469         name_len = strlen(hdev->dev_name);
470
471         if (name_len > 0) {
472                 /* EIR Data type */
473                 if (name_len > 48) {
474                         name_len = 48;
475                         ptr[1] = EIR_NAME_SHORT;
476                 } else
477                         ptr[1] = EIR_NAME_COMPLETE;
478
479                 /* EIR Data length */
480                 ptr[0] = name_len + 1;
481
482                 memcpy(ptr + 2, hdev->dev_name, name_len);
483
484                 eir_len += (name_len + 2);
485                 ptr += (name_len + 2);
486         }
487
488         if (hdev->inq_tx_power != HCI_TX_POWER_INVALID) {
489                 ptr[0] = 2;
490                 ptr[1] = EIR_TX_POWER;
491                 ptr[2] = (u8) hdev->inq_tx_power;
492
493                 eir_len += 3;
494                 ptr += 3;
495         }
496
497         if (hdev->devid_source > 0) {
498                 ptr[0] = 9;
499                 ptr[1] = EIR_DEVICE_ID;
500
501                 put_unaligned_le16(hdev->devid_source, ptr + 2);
502                 put_unaligned_le16(hdev->devid_vendor, ptr + 4);
503                 put_unaligned_le16(hdev->devid_product, ptr + 6);
504                 put_unaligned_le16(hdev->devid_version, ptr + 8);
505
506                 eir_len += 10;
507                 ptr += 10;
508         }
509
510         memset(uuid16_list, 0, sizeof(uuid16_list));
511
512         /* Group all UUID16 types */
513         list_for_each_entry(uuid, &hdev->uuids, list) {
514                 u16 uuid16;
515
516                 uuid16 = get_uuid16(uuid->uuid);
517                 if (uuid16 == 0)
518                         return;
519
520                 if (uuid16 < 0x1100)
521                         continue;
522
523                 if (uuid16 == PNP_INFO_SVCLASS_ID)
524                         continue;
525
526                 /* Stop if not enough space to put next UUID */
527                 if (eir_len + 2 + sizeof(u16) > HCI_MAX_EIR_LENGTH) {
528                         truncated = 1;
529                         break;
530                 }
531
532                 /* Check for duplicates */
533                 for (i = 0; uuid16_list[i] != 0; i++)
534                         if (uuid16_list[i] == uuid16)
535                                 break;
536
537                 if (uuid16_list[i] == 0) {
538                         uuid16_list[i] = uuid16;
539                         eir_len += sizeof(u16);
540                 }
541         }
542
543         if (uuid16_list[0] != 0) {
544                 u8 *length = ptr;
545
546                 /* EIR Data type */
547                 ptr[1] = truncated ? EIR_UUID16_SOME : EIR_UUID16_ALL;
548
549                 ptr += 2;
550                 eir_len += 2;
551
552                 for (i = 0; uuid16_list[i] != 0; i++) {
553                         *ptr++ = (uuid16_list[i] & 0x00ff);
554                         *ptr++ = (uuid16_list[i] & 0xff00) >> 8;
555                 }
556
557                 /* EIR Data length */
558                 *length = (i * sizeof(u16)) + 1;
559         }
560 }
561
562 static int update_eir(struct hci_dev *hdev)
563 {
564         struct hci_cp_write_eir cp;
565
566         if (!hdev_is_powered(hdev))
567                 return 0;
568
569         if (!lmp_ext_inq_capable(hdev))
570                 return 0;
571
572         if (!test_bit(HCI_SSP_ENABLED, &hdev->dev_flags))
573                 return 0;
574
575         if (test_bit(HCI_SERVICE_CACHE, &hdev->dev_flags))
576                 return 0;
577
578         memset(&cp, 0, sizeof(cp));
579
580         create_eir(hdev, cp.data);
581
582         if (memcmp(cp.data, hdev->eir, sizeof(cp.data)) == 0)
583                 return 0;
584
585         memcpy(hdev->eir, cp.data, sizeof(cp.data));
586
587         return hci_send_cmd(hdev, HCI_OP_WRITE_EIR, sizeof(cp), &cp);
588 }
589
590 static u8 get_service_classes(struct hci_dev *hdev)
591 {
592         struct bt_uuid *uuid;
593         u8 val = 0;
594
595         list_for_each_entry(uuid, &hdev->uuids, list)
596                 val |= uuid->svc_hint;
597
598         return val;
599 }
600
601 static int update_class(struct hci_dev *hdev)
602 {
603         u8 cod[3];
604         int err;
605
606         BT_DBG("%s", hdev->name);
607
608         if (!hdev_is_powered(hdev))
609                 return 0;
610
611         if (test_bit(HCI_SERVICE_CACHE, &hdev->dev_flags))
612                 return 0;
613
614         cod[0] = hdev->minor_class;
615         cod[1] = hdev->major_class;
616         cod[2] = get_service_classes(hdev);
617
618         if (memcmp(cod, hdev->dev_class, 3) == 0)
619                 return 0;
620
621         err = hci_send_cmd(hdev, HCI_OP_WRITE_CLASS_OF_DEV, sizeof(cod), cod);
622         if (err == 0)
623                 set_bit(HCI_PENDING_CLASS, &hdev->dev_flags);
624
625         return err;
626 }
627
628 static void service_cache_off(struct work_struct *work)
629 {
630         struct hci_dev *hdev = container_of(work, struct hci_dev,
631                                             service_cache.work);
632
633         if (!test_and_clear_bit(HCI_SERVICE_CACHE, &hdev->dev_flags))
634                 return;
635
636         hci_dev_lock(hdev);
637
638         update_eir(hdev);
639         update_class(hdev);
640
641         hci_dev_unlock(hdev);
642 }
643
644 static void mgmt_init_hdev(struct sock *sk, struct hci_dev *hdev)
645 {
646         if (test_and_set_bit(HCI_MGMT, &hdev->dev_flags))
647                 return;
648
649         INIT_DELAYED_WORK(&hdev->service_cache, service_cache_off);
650
651         /* Non-mgmt controlled devices get this bit set
652          * implicitly so that pairing works for them, however
653          * for mgmt we require user-space to explicitly enable
654          * it
655          */
656         clear_bit(HCI_PAIRABLE, &hdev->dev_flags);
657 }
658
659 static int read_controller_info(struct sock *sk, struct hci_dev *hdev,
660                                 void *data, u16 data_len)
661 {
662         struct mgmt_rp_read_info rp;
663
664         BT_DBG("sock %p %s", sk, hdev->name);
665
666         hci_dev_lock(hdev);
667
668         memset(&rp, 0, sizeof(rp));
669
670         bacpy(&rp.bdaddr, &hdev->bdaddr);
671
672         rp.version = hdev->hci_ver;
673         rp.manufacturer = cpu_to_le16(hdev->manufacturer);
674
675         rp.supported_settings = cpu_to_le32(get_supported_settings(hdev));
676         rp.current_settings = cpu_to_le32(get_current_settings(hdev));
677
678         memcpy(rp.dev_class, hdev->dev_class, 3);
679
680         memcpy(rp.name, hdev->dev_name, sizeof(hdev->dev_name));
681         memcpy(rp.short_name, hdev->short_name, sizeof(hdev->short_name));
682
683         hci_dev_unlock(hdev);
684
685         return cmd_complete(sk, hdev->id, MGMT_OP_READ_INFO, 0, &rp,
686                             sizeof(rp));
687 }
688
689 static void mgmt_pending_free(struct pending_cmd *cmd)
690 {
691         sock_put(cmd->sk);
692         kfree(cmd->param);
693         kfree(cmd);
694 }
695
696 static struct pending_cmd *mgmt_pending_add(struct sock *sk, u16 opcode,
697                                             struct hci_dev *hdev, void *data,
698                                             u16 len)
699 {
700         struct pending_cmd *cmd;
701
702         cmd = kmalloc(sizeof(*cmd), GFP_KERNEL);
703         if (!cmd)
704                 return NULL;
705
706         cmd->opcode = opcode;
707         cmd->index = hdev->id;
708
709         cmd->param = kmalloc(len, GFP_KERNEL);
710         if (!cmd->param) {
711                 kfree(cmd);
712                 return NULL;
713         }
714
715         if (data)
716                 memcpy(cmd->param, data, len);
717
718         cmd->sk = sk;
719         sock_hold(sk);
720
721         list_add(&cmd->list, &hdev->mgmt_pending);
722
723         return cmd;
724 }
725
726 static void mgmt_pending_foreach(u16 opcode, struct hci_dev *hdev,
727                                  void (*cb)(struct pending_cmd *cmd,
728                                             void *data),
729                                  void *data)
730 {
731         struct list_head *p, *n;
732
733         list_for_each_safe(p, n, &hdev->mgmt_pending) {
734                 struct pending_cmd *cmd;
735
736                 cmd = list_entry(p, struct pending_cmd, list);
737
738                 if (opcode > 0 && cmd->opcode != opcode)
739                         continue;
740
741                 cb(cmd, data);
742         }
743 }
744
745 static struct pending_cmd *mgmt_pending_find(u16 opcode, struct hci_dev *hdev)
746 {
747         struct pending_cmd *cmd;
748
749         list_for_each_entry(cmd, &hdev->mgmt_pending, list) {
750                 if (cmd->opcode == opcode)
751                         return cmd;
752         }
753
754         return NULL;
755 }
756
757 static void mgmt_pending_remove(struct pending_cmd *cmd)
758 {
759         list_del(&cmd->list);
760         mgmt_pending_free(cmd);
761 }
762
763 static int send_settings_rsp(struct sock *sk, u16 opcode, struct hci_dev *hdev)
764 {
765         __le32 settings = cpu_to_le32(get_current_settings(hdev));
766
767         return cmd_complete(sk, hdev->id, opcode, 0, &settings,
768                             sizeof(settings));
769 }
770
771 static int set_powered(struct sock *sk, struct hci_dev *hdev, void *data,
772                        u16 len)
773 {
774         struct mgmt_mode *cp = data;
775         struct pending_cmd *cmd;
776         int err;
777
778         BT_DBG("request for %s", hdev->name);
779
780         hci_dev_lock(hdev);
781
782         if (test_and_clear_bit(HCI_AUTO_OFF, &hdev->dev_flags)) {
783                 cancel_delayed_work(&hdev->power_off);
784
785                 if (cp->val) {
786                         err = send_settings_rsp(sk, MGMT_OP_SET_POWERED, hdev);
787                         mgmt_powered(hdev, 1);
788                         goto failed;
789                 }
790         }
791
792         if (!!cp->val == hdev_is_powered(hdev)) {
793                 err = send_settings_rsp(sk, MGMT_OP_SET_POWERED, hdev);
794                 goto failed;
795         }
796
797         if (mgmt_pending_find(MGMT_OP_SET_POWERED, hdev)) {
798                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_POWERED,
799                                  MGMT_STATUS_BUSY);
800                 goto failed;
801         }
802
803         cmd = mgmt_pending_add(sk, MGMT_OP_SET_POWERED, hdev, data, len);
804         if (!cmd) {
805                 err = -ENOMEM;
806                 goto failed;
807         }
808
809         if (cp->val)
810                 schedule_work(&hdev->power_on);
811         else
812                 schedule_work(&hdev->power_off.work);
813
814         err = 0;
815
816 failed:
817         hci_dev_unlock(hdev);
818         return err;
819 }
820
821 static int mgmt_event(u16 event, struct hci_dev *hdev, void *data, u16 data_len,
822                       struct sock *skip_sk)
823 {
824         struct sk_buff *skb;
825         struct mgmt_hdr *hdr;
826
827         skb = alloc_skb(sizeof(*hdr) + data_len, GFP_KERNEL);
828         if (!skb)
829                 return -ENOMEM;
830
831         hdr = (void *) skb_put(skb, sizeof(*hdr));
832         hdr->opcode = cpu_to_le16(event);
833         if (hdev)
834                 hdr->index = cpu_to_le16(hdev->id);
835         else
836                 hdr->index = __constant_cpu_to_le16(MGMT_INDEX_NONE);
837         hdr->len = cpu_to_le16(data_len);
838
839         if (data)
840                 memcpy(skb_put(skb, data_len), data, data_len);
841
842         /* Time stamp */
843         __net_timestamp(skb);
844
845         hci_send_to_control(skb, skip_sk);
846         kfree_skb(skb);
847
848         return 0;
849 }
850
851 static int new_settings(struct hci_dev *hdev, struct sock *skip)
852 {
853         __le32 ev;
854
855         ev = cpu_to_le32(get_current_settings(hdev));
856
857         return mgmt_event(MGMT_EV_NEW_SETTINGS, hdev, &ev, sizeof(ev), skip);
858 }
859
860 static int set_discoverable(struct sock *sk, struct hci_dev *hdev, void *data,
861                             u16 len)
862 {
863         struct mgmt_cp_set_discoverable *cp = data;
864         struct pending_cmd *cmd;
865         u16 timeout;
866         u8 scan;
867         int err;
868
869         BT_DBG("request for %s", hdev->name);
870
871         if (!lmp_bredr_capable(hdev))
872                 return cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE,
873                                  MGMT_STATUS_NOT_SUPPORTED);
874
875         timeout = __le16_to_cpu(cp->timeout);
876         if (!cp->val && timeout > 0)
877                 return cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE,
878                                   MGMT_STATUS_INVALID_PARAMS);
879
880         hci_dev_lock(hdev);
881
882         if (!hdev_is_powered(hdev) && timeout > 0) {
883                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE,
884                                  MGMT_STATUS_NOT_POWERED);
885                 goto failed;
886         }
887
888         if (mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE, hdev) ||
889             mgmt_pending_find(MGMT_OP_SET_CONNECTABLE, hdev)) {
890                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE,
891                                  MGMT_STATUS_BUSY);
892                 goto failed;
893         }
894
895         if (!test_bit(HCI_CONNECTABLE, &hdev->dev_flags)) {
896                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE,
897                                  MGMT_STATUS_REJECTED);
898                 goto failed;
899         }
900
901         if (!hdev_is_powered(hdev)) {
902                 bool changed = false;
903
904                 if (!!cp->val != test_bit(HCI_DISCOVERABLE, &hdev->dev_flags)) {
905                         change_bit(HCI_DISCOVERABLE, &hdev->dev_flags);
906                         changed = true;
907                 }
908
909                 err = send_settings_rsp(sk, MGMT_OP_SET_DISCOVERABLE, hdev);
910                 if (err < 0)
911                         goto failed;
912
913                 if (changed)
914                         err = new_settings(hdev, sk);
915
916                 goto failed;
917         }
918
919         if (!!cp->val == test_bit(HCI_DISCOVERABLE, &hdev->dev_flags)) {
920                 if (hdev->discov_timeout > 0) {
921                         cancel_delayed_work(&hdev->discov_off);
922                         hdev->discov_timeout = 0;
923                 }
924
925                 if (cp->val && timeout > 0) {
926                         hdev->discov_timeout = timeout;
927                         queue_delayed_work(hdev->workqueue, &hdev->discov_off,
928                                 msecs_to_jiffies(hdev->discov_timeout * 1000));
929                 }
930
931                 err = send_settings_rsp(sk, MGMT_OP_SET_DISCOVERABLE, hdev);
932                 goto failed;
933         }
934
935         cmd = mgmt_pending_add(sk, MGMT_OP_SET_DISCOVERABLE, hdev, data, len);
936         if (!cmd) {
937                 err = -ENOMEM;
938                 goto failed;
939         }
940
941         scan = SCAN_PAGE;
942
943         if (cp->val)
944                 scan |= SCAN_INQUIRY;
945         else
946                 cancel_delayed_work(&hdev->discov_off);
947
948         err = hci_send_cmd(hdev, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan);
949         if (err < 0)
950                 mgmt_pending_remove(cmd);
951
952         if (cp->val)
953                 hdev->discov_timeout = timeout;
954
955 failed:
956         hci_dev_unlock(hdev);
957         return err;
958 }
959
960 static int set_connectable(struct sock *sk, struct hci_dev *hdev, void *data,
961                            u16 len)
962 {
963         struct mgmt_mode *cp = data;
964         struct pending_cmd *cmd;
965         u8 scan;
966         int err;
967
968         BT_DBG("request for %s", hdev->name);
969
970         if (!lmp_bredr_capable(hdev))
971                 return cmd_status(sk, hdev->id, MGMT_OP_SET_CONNECTABLE,
972                                   MGMT_STATUS_NOT_SUPPORTED);
973
974         hci_dev_lock(hdev);
975
976         if (!hdev_is_powered(hdev)) {
977                 bool changed = false;
978
979                 if (!!cp->val != test_bit(HCI_CONNECTABLE, &hdev->dev_flags))
980                         changed = true;
981
982                 if (cp->val) {
983                         set_bit(HCI_CONNECTABLE, &hdev->dev_flags);
984                 } else {
985                         clear_bit(HCI_CONNECTABLE, &hdev->dev_flags);
986                         clear_bit(HCI_DISCOVERABLE, &hdev->dev_flags);
987                 }
988
989                 err = send_settings_rsp(sk, MGMT_OP_SET_CONNECTABLE, hdev);
990                 if (err < 0)
991                         goto failed;
992
993                 if (changed)
994                         err = new_settings(hdev, sk);
995
996                 goto failed;
997         }
998
999         if (mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE, hdev) ||
1000             mgmt_pending_find(MGMT_OP_SET_CONNECTABLE, hdev)) {
1001                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_CONNECTABLE,
1002                                  MGMT_STATUS_BUSY);
1003                 goto failed;
1004         }
1005
1006         if (!!cp->val == test_bit(HCI_PSCAN, &hdev->flags)) {
1007                 err = send_settings_rsp(sk, MGMT_OP_SET_CONNECTABLE, hdev);
1008                 goto failed;
1009         }
1010
1011         cmd = mgmt_pending_add(sk, MGMT_OP_SET_CONNECTABLE, hdev, data, len);
1012         if (!cmd) {
1013                 err = -ENOMEM;
1014                 goto failed;
1015         }
1016
1017         if (cp->val) {
1018                 scan = SCAN_PAGE;
1019         } else {
1020                 scan = 0;
1021
1022                 if (test_bit(HCI_ISCAN, &hdev->flags) &&
1023                     hdev->discov_timeout > 0)
1024                         cancel_delayed_work(&hdev->discov_off);
1025         }
1026
1027         err = hci_send_cmd(hdev, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan);
1028         if (err < 0)
1029                 mgmt_pending_remove(cmd);
1030
1031 failed:
1032         hci_dev_unlock(hdev);
1033         return err;
1034 }
1035
1036 static int set_pairable(struct sock *sk, struct hci_dev *hdev, void *data,
1037                         u16 len)
1038 {
1039         struct mgmt_mode *cp = data;
1040         int err;
1041
1042         BT_DBG("request for %s", hdev->name);
1043
1044         hci_dev_lock(hdev);
1045
1046         if (cp->val)
1047                 set_bit(HCI_PAIRABLE, &hdev->dev_flags);
1048         else
1049                 clear_bit(HCI_PAIRABLE, &hdev->dev_flags);
1050
1051         err = send_settings_rsp(sk, MGMT_OP_SET_PAIRABLE, hdev);
1052         if (err < 0)
1053                 goto failed;
1054
1055         err = new_settings(hdev, sk);
1056
1057 failed:
1058         hci_dev_unlock(hdev);
1059         return err;
1060 }
1061
1062 static int set_link_security(struct sock *sk, struct hci_dev *hdev, void *data,
1063                              u16 len)
1064 {
1065         struct mgmt_mode *cp = data;
1066         struct pending_cmd *cmd;
1067         u8 val;
1068         int err;
1069
1070         BT_DBG("request for %s", hdev->name);
1071
1072         if (!lmp_bredr_capable(hdev))
1073                 return cmd_status(sk, hdev->id, MGMT_OP_SET_LINK_SECURITY,
1074                                   MGMT_STATUS_NOT_SUPPORTED);
1075
1076         hci_dev_lock(hdev);
1077
1078         if (!hdev_is_powered(hdev)) {
1079                 bool changed = false;
1080
1081                 if (!!cp->val != test_bit(HCI_LINK_SECURITY,
1082                                           &hdev->dev_flags)) {
1083                         change_bit(HCI_LINK_SECURITY, &hdev->dev_flags);
1084                         changed = true;
1085                 }
1086
1087                 err = send_settings_rsp(sk, MGMT_OP_SET_LINK_SECURITY, hdev);
1088                 if (err < 0)
1089                         goto failed;
1090
1091                 if (changed)
1092                         err = new_settings(hdev, sk);
1093
1094                 goto failed;
1095         }
1096
1097         if (mgmt_pending_find(MGMT_OP_SET_LINK_SECURITY, hdev)) {
1098                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_LINK_SECURITY,
1099                                  MGMT_STATUS_BUSY);
1100                 goto failed;
1101         }
1102
1103         val = !!cp->val;
1104
1105         if (test_bit(HCI_AUTH, &hdev->flags) == val) {
1106                 err = send_settings_rsp(sk, MGMT_OP_SET_LINK_SECURITY, hdev);
1107                 goto failed;
1108         }
1109
1110         cmd = mgmt_pending_add(sk, MGMT_OP_SET_LINK_SECURITY, hdev, data, len);
1111         if (!cmd) {
1112                 err = -ENOMEM;
1113                 goto failed;
1114         }
1115
1116         err = hci_send_cmd(hdev, HCI_OP_WRITE_AUTH_ENABLE, sizeof(val), &val);
1117         if (err < 0) {
1118                 mgmt_pending_remove(cmd);
1119                 goto failed;
1120         }
1121
1122 failed:
1123         hci_dev_unlock(hdev);
1124         return err;
1125 }
1126
1127 static int set_ssp(struct sock *sk, struct hci_dev *hdev, void *data, u16 len)
1128 {
1129         struct mgmt_mode *cp = data;
1130         struct pending_cmd *cmd;
1131         u8 val;
1132         int err;
1133
1134         BT_DBG("request for %s", hdev->name);
1135
1136         hci_dev_lock(hdev);
1137
1138         if (!lmp_ssp_capable(hdev)) {
1139                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_SSP,
1140                                  MGMT_STATUS_NOT_SUPPORTED);
1141                 goto failed;
1142         }
1143
1144         val = !!cp->val;
1145
1146         if (!hdev_is_powered(hdev)) {
1147                 bool changed = false;
1148
1149                 if (val != test_bit(HCI_SSP_ENABLED, &hdev->dev_flags)) {
1150                         change_bit(HCI_SSP_ENABLED, &hdev->dev_flags);
1151                         changed = true;
1152                 }
1153
1154                 err = send_settings_rsp(sk, MGMT_OP_SET_SSP, hdev);
1155                 if (err < 0)
1156                         goto failed;
1157
1158                 if (changed)
1159                         err = new_settings(hdev, sk);
1160
1161                 goto failed;
1162         }
1163
1164         if (mgmt_pending_find(MGMT_OP_SET_SSP, hdev)) {
1165                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_SSP,
1166                                  MGMT_STATUS_BUSY);
1167                 goto failed;
1168         }
1169
1170         if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags) == val) {
1171                 err = send_settings_rsp(sk, MGMT_OP_SET_SSP, hdev);
1172                 goto failed;
1173         }
1174
1175         cmd = mgmt_pending_add(sk, MGMT_OP_SET_SSP, hdev, data, len);
1176         if (!cmd) {
1177                 err = -ENOMEM;
1178                 goto failed;
1179         }
1180
1181         err = hci_send_cmd(hdev, HCI_OP_WRITE_SSP_MODE, sizeof(val), &val);
1182         if (err < 0) {
1183                 mgmt_pending_remove(cmd);
1184                 goto failed;
1185         }
1186
1187 failed:
1188         hci_dev_unlock(hdev);
1189         return err;
1190 }
1191
1192 static int set_hs(struct sock *sk, struct hci_dev *hdev, void *data, u16 len)
1193 {
1194         struct mgmt_mode *cp = data;
1195
1196         BT_DBG("request for %s", hdev->name);
1197
1198         if (!enable_hs)
1199                 return cmd_status(sk, hdev->id, MGMT_OP_SET_HS,
1200                                   MGMT_STATUS_NOT_SUPPORTED);
1201
1202         if (cp->val)
1203                 set_bit(HCI_HS_ENABLED, &hdev->dev_flags);
1204         else
1205                 clear_bit(HCI_HS_ENABLED, &hdev->dev_flags);
1206
1207         return send_settings_rsp(sk, MGMT_OP_SET_HS, hdev);
1208 }
1209
1210 static int set_le(struct sock *sk, struct hci_dev *hdev, void *data, u16 len)
1211 {
1212         struct mgmt_mode *cp = data;
1213         struct hci_cp_write_le_host_supported hci_cp;
1214         struct pending_cmd *cmd;
1215         int err;
1216         u8 val, enabled;
1217
1218         BT_DBG("request for %s", hdev->name);
1219
1220         hci_dev_lock(hdev);
1221
1222         if (!lmp_le_capable(hdev)) {
1223                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_LE,
1224                                  MGMT_STATUS_NOT_SUPPORTED);
1225                 goto unlock;
1226         }
1227
1228         val = !!cp->val;
1229         enabled = lmp_host_le_capable(hdev);
1230
1231         if (!hdev_is_powered(hdev) || val == enabled) {
1232                 bool changed = false;
1233
1234                 if (val != test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) {
1235                         change_bit(HCI_LE_ENABLED, &hdev->dev_flags);
1236                         changed = true;
1237                 }
1238
1239                 err = send_settings_rsp(sk, MGMT_OP_SET_LE, hdev);
1240                 if (err < 0)
1241                         goto unlock;
1242
1243                 if (changed)
1244                         err = new_settings(hdev, sk);
1245
1246                 goto unlock;
1247         }
1248
1249         if (mgmt_pending_find(MGMT_OP_SET_LE, hdev)) {
1250                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_LE,
1251                                  MGMT_STATUS_BUSY);
1252                 goto unlock;
1253         }
1254
1255         cmd = mgmt_pending_add(sk, MGMT_OP_SET_LE, hdev, data, len);
1256         if (!cmd) {
1257                 err = -ENOMEM;
1258                 goto unlock;
1259         }
1260
1261         memset(&hci_cp, 0, sizeof(hci_cp));
1262
1263         if (val) {
1264                 hci_cp.le = val;
1265                 hci_cp.simul = lmp_le_br_capable(hdev);
1266         }
1267
1268         err = hci_send_cmd(hdev, HCI_OP_WRITE_LE_HOST_SUPPORTED, sizeof(hci_cp),
1269                            &hci_cp);
1270         if (err < 0)
1271                 mgmt_pending_remove(cmd);
1272
1273 unlock:
1274         hci_dev_unlock(hdev);
1275         return err;
1276 }
1277
1278 static int add_uuid(struct sock *sk, struct hci_dev *hdev, void *data, u16 len)
1279 {
1280         struct mgmt_cp_add_uuid *cp = data;
1281         struct pending_cmd *cmd;
1282         struct bt_uuid *uuid;
1283         int err;
1284
1285         BT_DBG("request for %s", hdev->name);
1286
1287         hci_dev_lock(hdev);
1288
1289         if (test_bit(HCI_PENDING_CLASS, &hdev->dev_flags)) {
1290                 err = cmd_status(sk, hdev->id, MGMT_OP_ADD_UUID,
1291                                  MGMT_STATUS_BUSY);
1292                 goto failed;
1293         }
1294
1295         uuid = kmalloc(sizeof(*uuid), GFP_KERNEL);
1296         if (!uuid) {
1297                 err = -ENOMEM;
1298                 goto failed;
1299         }
1300
1301         memcpy(uuid->uuid, cp->uuid, 16);
1302         uuid->svc_hint = cp->svc_hint;
1303
1304         list_add(&uuid->list, &hdev->uuids);
1305
1306         err = update_class(hdev);
1307         if (err < 0)
1308                 goto failed;
1309
1310         err = update_eir(hdev);
1311         if (err < 0)
1312                 goto failed;
1313
1314         if (!test_bit(HCI_PENDING_CLASS, &hdev->dev_flags)) {
1315                 err = cmd_complete(sk, hdev->id, MGMT_OP_ADD_UUID, 0,
1316                                    hdev->dev_class, 3);
1317                 goto failed;
1318         }
1319
1320         cmd = mgmt_pending_add(sk, MGMT_OP_ADD_UUID, hdev, data, len);
1321         if (!cmd)
1322                 err = -ENOMEM;
1323
1324 failed:
1325         hci_dev_unlock(hdev);
1326         return err;
1327 }
1328
1329 static bool enable_service_cache(struct hci_dev *hdev)
1330 {
1331         if (!hdev_is_powered(hdev))
1332                 return false;
1333
1334         if (!test_and_set_bit(HCI_SERVICE_CACHE, &hdev->dev_flags)) {
1335                 schedule_delayed_work(&hdev->service_cache, CACHE_TIMEOUT);
1336                 return true;
1337         }
1338
1339         return false;
1340 }
1341
1342 static int remove_uuid(struct sock *sk, struct hci_dev *hdev, void *data,
1343                        u16 len)
1344 {
1345         struct mgmt_cp_remove_uuid *cp = data;
1346         struct pending_cmd *cmd;
1347         struct list_head *p, *n;
1348         u8 bt_uuid_any[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
1349         int err, found;
1350
1351         BT_DBG("request for %s", hdev->name);
1352
1353         hci_dev_lock(hdev);
1354
1355         if (test_bit(HCI_PENDING_CLASS, &hdev->dev_flags)) {
1356                 err = cmd_status(sk, hdev->id, MGMT_OP_REMOVE_UUID,
1357                                  MGMT_STATUS_BUSY);
1358                 goto unlock;
1359         }
1360
1361         if (memcmp(cp->uuid, bt_uuid_any, 16) == 0) {
1362                 err = hci_uuids_clear(hdev);
1363
1364                 if (enable_service_cache(hdev)) {
1365                         err = cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_UUID,
1366                                            0, hdev->dev_class, 3);
1367                         goto unlock;
1368                 }
1369
1370                 goto update_class;
1371         }
1372
1373         found = 0;
1374
1375         list_for_each_safe(p, n, &hdev->uuids) {
1376                 struct bt_uuid *match = list_entry(p, struct bt_uuid, list);
1377
1378                 if (memcmp(match->uuid, cp->uuid, 16) != 0)
1379                         continue;
1380
1381                 list_del(&match->list);
1382                 kfree(match);
1383                 found++;
1384         }
1385
1386         if (found == 0) {
1387                 err = cmd_status(sk, hdev->id, MGMT_OP_REMOVE_UUID,
1388                                  MGMT_STATUS_INVALID_PARAMS);
1389                 goto unlock;
1390         }
1391
1392 update_class:
1393         err = update_class(hdev);
1394         if (err < 0)
1395                 goto unlock;
1396
1397         err = update_eir(hdev);
1398         if (err < 0)
1399                 goto unlock;
1400
1401         if (!test_bit(HCI_PENDING_CLASS, &hdev->dev_flags)) {
1402                 err = cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_UUID, 0,
1403                                    hdev->dev_class, 3);
1404                 goto unlock;
1405         }
1406
1407         cmd = mgmt_pending_add(sk, MGMT_OP_REMOVE_UUID, hdev, data, len);
1408         if (!cmd)
1409                 err = -ENOMEM;
1410
1411 unlock:
1412         hci_dev_unlock(hdev);
1413         return err;
1414 }
1415
1416 static int set_dev_class(struct sock *sk, struct hci_dev *hdev, void *data,
1417                          u16 len)
1418 {
1419         struct mgmt_cp_set_dev_class *cp = data;
1420         struct pending_cmd *cmd;
1421         int err;
1422
1423         BT_DBG("request for %s", hdev->name);
1424
1425         hci_dev_lock(hdev);
1426
1427         if (test_bit(HCI_PENDING_CLASS, &hdev->dev_flags)) {
1428                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_DEV_CLASS,
1429                                  MGMT_STATUS_BUSY);
1430                 goto unlock;
1431         }
1432
1433         hdev->major_class = cp->major;
1434         hdev->minor_class = cp->minor;
1435
1436         if (!hdev_is_powered(hdev)) {
1437                 err = cmd_complete(sk, hdev->id, MGMT_OP_SET_DEV_CLASS, 0,
1438                                    hdev->dev_class, 3);
1439                 goto unlock;
1440         }
1441
1442         if (test_and_clear_bit(HCI_SERVICE_CACHE, &hdev->dev_flags)) {
1443                 hci_dev_unlock(hdev);
1444                 cancel_delayed_work_sync(&hdev->service_cache);
1445                 hci_dev_lock(hdev);
1446                 update_eir(hdev);
1447         }
1448
1449         err = update_class(hdev);
1450         if (err < 0)
1451                 goto unlock;
1452
1453         if (!test_bit(HCI_PENDING_CLASS, &hdev->dev_flags)) {
1454                 err = cmd_complete(sk, hdev->id, MGMT_OP_SET_DEV_CLASS, 0,
1455                                    hdev->dev_class, 3);
1456                 goto unlock;
1457         }
1458
1459         cmd = mgmt_pending_add(sk, MGMT_OP_SET_DEV_CLASS, hdev, data, len);
1460         if (!cmd)
1461                 err = -ENOMEM;
1462
1463 unlock:
1464         hci_dev_unlock(hdev);
1465         return err;
1466 }
1467
1468 static int load_link_keys(struct sock *sk, struct hci_dev *hdev, void *data,
1469                           u16 len)
1470 {
1471         struct mgmt_cp_load_link_keys *cp = data;
1472         u16 key_count, expected_len;
1473         int i;
1474
1475         key_count = __le16_to_cpu(cp->key_count);
1476
1477         expected_len = sizeof(*cp) + key_count *
1478                                         sizeof(struct mgmt_link_key_info);
1479         if (expected_len != len) {
1480                 BT_ERR("load_link_keys: expected %u bytes, got %u bytes",
1481                        len, expected_len);
1482                 return cmd_status(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS,
1483                                   MGMT_STATUS_INVALID_PARAMS);
1484         }
1485
1486         BT_DBG("%s debug_keys %u key_count %u", hdev->name, cp->debug_keys,
1487                key_count);
1488
1489         hci_dev_lock(hdev);
1490
1491         hci_link_keys_clear(hdev);
1492
1493         set_bit(HCI_LINK_KEYS, &hdev->dev_flags);
1494
1495         if (cp->debug_keys)
1496                 set_bit(HCI_DEBUG_KEYS, &hdev->dev_flags);
1497         else
1498                 clear_bit(HCI_DEBUG_KEYS, &hdev->dev_flags);
1499
1500         for (i = 0; i < key_count; i++) {
1501                 struct mgmt_link_key_info *key = &cp->keys[i];
1502
1503                 hci_add_link_key(hdev, NULL, 0, &key->addr.bdaddr, key->val,
1504                                  key->type, key->pin_len);
1505         }
1506
1507         cmd_complete(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS, 0, NULL, 0);
1508
1509         hci_dev_unlock(hdev);
1510
1511         return 0;
1512 }
1513
1514 static int device_unpaired(struct hci_dev *hdev, bdaddr_t *bdaddr,
1515                            u8 addr_type, struct sock *skip_sk)
1516 {
1517         struct mgmt_ev_device_unpaired ev;
1518
1519         bacpy(&ev.addr.bdaddr, bdaddr);
1520         ev.addr.type = addr_type;
1521
1522         return mgmt_event(MGMT_EV_DEVICE_UNPAIRED, hdev, &ev, sizeof(ev),
1523                           skip_sk);
1524 }
1525
1526 static int unpair_device(struct sock *sk, struct hci_dev *hdev, void *data,
1527                          u16 len)
1528 {
1529         struct mgmt_cp_unpair_device *cp = data;
1530         struct mgmt_rp_unpair_device rp;
1531         struct hci_cp_disconnect dc;
1532         struct pending_cmd *cmd;
1533         struct hci_conn *conn;
1534         int err;
1535
1536         hci_dev_lock(hdev);
1537
1538         memset(&rp, 0, sizeof(rp));
1539         bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr);
1540         rp.addr.type = cp->addr.type;
1541
1542         if (!hdev_is_powered(hdev)) {
1543                 err = cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE,
1544                                    MGMT_STATUS_NOT_POWERED, &rp, sizeof(rp));
1545                 goto unlock;
1546         }
1547
1548         if (cp->addr.type == BDADDR_BREDR)
1549                 err = hci_remove_link_key(hdev, &cp->addr.bdaddr);
1550         else
1551                 err = hci_remove_ltk(hdev, &cp->addr.bdaddr);
1552
1553         if (err < 0) {
1554                 err = cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE,
1555                                    MGMT_STATUS_NOT_PAIRED, &rp, sizeof(rp));
1556                 goto unlock;
1557         }
1558
1559         if (cp->disconnect) {
1560                 if (cp->addr.type == BDADDR_BREDR)
1561                         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK,
1562                                                        &cp->addr.bdaddr);
1563                 else
1564                         conn = hci_conn_hash_lookup_ba(hdev, LE_LINK,
1565                                                        &cp->addr.bdaddr);
1566         } else {
1567                 conn = NULL;
1568         }
1569
1570         if (!conn) {
1571                 err = cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE, 0,
1572                                    &rp, sizeof(rp));
1573                 device_unpaired(hdev, &cp->addr.bdaddr, cp->addr.type, sk);
1574                 goto unlock;
1575         }
1576
1577         cmd = mgmt_pending_add(sk, MGMT_OP_UNPAIR_DEVICE, hdev, cp,
1578                                sizeof(*cp));
1579         if (!cmd) {
1580                 err = -ENOMEM;
1581                 goto unlock;
1582         }
1583
1584         dc.handle = cpu_to_le16(conn->handle);
1585         dc.reason = 0x13; /* Remote User Terminated Connection */
1586         err = hci_send_cmd(hdev, HCI_OP_DISCONNECT, sizeof(dc), &dc);
1587         if (err < 0)
1588                 mgmt_pending_remove(cmd);
1589
1590 unlock:
1591         hci_dev_unlock(hdev);
1592         return err;
1593 }
1594
1595 static int disconnect(struct sock *sk, struct hci_dev *hdev, void *data,
1596                       u16 len)
1597 {
1598         struct mgmt_cp_disconnect *cp = data;
1599         struct hci_cp_disconnect dc;
1600         struct pending_cmd *cmd;
1601         struct hci_conn *conn;
1602         int err;
1603
1604         BT_DBG("");
1605
1606         hci_dev_lock(hdev);
1607
1608         if (!test_bit(HCI_UP, &hdev->flags)) {
1609                 err = cmd_status(sk, hdev->id, MGMT_OP_DISCONNECT,
1610                                  MGMT_STATUS_NOT_POWERED);
1611                 goto failed;
1612         }
1613
1614         if (mgmt_pending_find(MGMT_OP_DISCONNECT, hdev)) {
1615                 err = cmd_status(sk, hdev->id, MGMT_OP_DISCONNECT,
1616                                  MGMT_STATUS_BUSY);
1617                 goto failed;
1618         }
1619
1620         if (cp->addr.type == BDADDR_BREDR)
1621                 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK,
1622                                                &cp->addr.bdaddr);
1623         else
1624                 conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, &cp->addr.bdaddr);
1625
1626         if (!conn || conn->state == BT_OPEN || conn->state == BT_CLOSED) {
1627                 err = cmd_status(sk, hdev->id, MGMT_OP_DISCONNECT,
1628                                  MGMT_STATUS_NOT_CONNECTED);
1629                 goto failed;
1630         }
1631
1632         cmd = mgmt_pending_add(sk, MGMT_OP_DISCONNECT, hdev, data, len);
1633         if (!cmd) {
1634                 err = -ENOMEM;
1635                 goto failed;
1636         }
1637
1638         dc.handle = cpu_to_le16(conn->handle);
1639         dc.reason = HCI_ERROR_REMOTE_USER_TERM;
1640
1641         err = hci_send_cmd(hdev, HCI_OP_DISCONNECT, sizeof(dc), &dc);
1642         if (err < 0)
1643                 mgmt_pending_remove(cmd);
1644
1645 failed:
1646         hci_dev_unlock(hdev);
1647         return err;
1648 }
1649
1650 static u8 link_to_bdaddr(u8 link_type, u8 addr_type)
1651 {
1652         switch (link_type) {
1653         case LE_LINK:
1654                 switch (addr_type) {
1655                 case ADDR_LE_DEV_PUBLIC:
1656                         return BDADDR_LE_PUBLIC;
1657
1658                 default:
1659                         /* Fallback to LE Random address type */
1660                         return BDADDR_LE_RANDOM;
1661                 }
1662
1663         default:
1664                 /* Fallback to BR/EDR type */
1665                 return BDADDR_BREDR;
1666         }
1667 }
1668
1669 static int get_connections(struct sock *sk, struct hci_dev *hdev, void *data,
1670                            u16 data_len)
1671 {
1672         struct mgmt_rp_get_connections *rp;
1673         struct hci_conn *c;
1674         size_t rp_len;
1675         int err;
1676         u16 i;
1677
1678         BT_DBG("");
1679
1680         hci_dev_lock(hdev);
1681
1682         if (!hdev_is_powered(hdev)) {
1683                 err = cmd_status(sk, hdev->id, MGMT_OP_GET_CONNECTIONS,
1684                                  MGMT_STATUS_NOT_POWERED);
1685                 goto unlock;
1686         }
1687
1688         i = 0;
1689         list_for_each_entry(c, &hdev->conn_hash.list, list) {
1690                 if (test_bit(HCI_CONN_MGMT_CONNECTED, &c->flags))
1691                         i++;
1692         }
1693
1694         rp_len = sizeof(*rp) + (i * sizeof(struct mgmt_addr_info));
1695         rp = kmalloc(rp_len, GFP_KERNEL);
1696         if (!rp) {
1697                 err = -ENOMEM;
1698                 goto unlock;
1699         }
1700
1701         i = 0;
1702         list_for_each_entry(c, &hdev->conn_hash.list, list) {
1703                 if (!test_bit(HCI_CONN_MGMT_CONNECTED, &c->flags))
1704                         continue;
1705                 bacpy(&rp->addr[i].bdaddr, &c->dst);
1706                 rp->addr[i].type = link_to_bdaddr(c->type, c->dst_type);
1707                 if (c->type == SCO_LINK || c->type == ESCO_LINK)
1708                         continue;
1709                 i++;
1710         }
1711
1712         rp->conn_count = cpu_to_le16(i);
1713
1714         /* Recalculate length in case of filtered SCO connections, etc */
1715         rp_len = sizeof(*rp) + (i * sizeof(struct mgmt_addr_info));
1716
1717         err = cmd_complete(sk, hdev->id, MGMT_OP_GET_CONNECTIONS, 0, rp,
1718                            rp_len);
1719
1720         kfree(rp);
1721
1722 unlock:
1723         hci_dev_unlock(hdev);
1724         return err;
1725 }
1726
1727 static int send_pin_code_neg_reply(struct sock *sk, struct hci_dev *hdev,
1728                                    struct mgmt_cp_pin_code_neg_reply *cp)
1729 {
1730         struct pending_cmd *cmd;
1731         int err;
1732
1733         cmd = mgmt_pending_add(sk, MGMT_OP_PIN_CODE_NEG_REPLY, hdev, cp,
1734                                sizeof(*cp));
1735         if (!cmd)
1736                 return -ENOMEM;
1737
1738         err = hci_send_cmd(hdev, HCI_OP_PIN_CODE_NEG_REPLY,
1739                            sizeof(cp->addr.bdaddr), &cp->addr.bdaddr);
1740         if (err < 0)
1741                 mgmt_pending_remove(cmd);
1742
1743         return err;
1744 }
1745
1746 static int pin_code_reply(struct sock *sk, struct hci_dev *hdev, void *data,
1747                           u16 len)
1748 {
1749         struct hci_conn *conn;
1750         struct mgmt_cp_pin_code_reply *cp = data;
1751         struct hci_cp_pin_code_reply reply;
1752         struct pending_cmd *cmd;
1753         int err;
1754
1755         BT_DBG("");
1756
1757         hci_dev_lock(hdev);
1758
1759         if (!hdev_is_powered(hdev)) {
1760                 err = cmd_status(sk, hdev->id, MGMT_OP_PIN_CODE_REPLY,
1761                                  MGMT_STATUS_NOT_POWERED);
1762                 goto failed;
1763         }
1764
1765         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->addr.bdaddr);
1766         if (!conn) {
1767                 err = cmd_status(sk, hdev->id, MGMT_OP_PIN_CODE_REPLY,
1768                                  MGMT_STATUS_NOT_CONNECTED);
1769                 goto failed;
1770         }
1771
1772         if (conn->pending_sec_level == BT_SECURITY_HIGH && cp->pin_len != 16) {
1773                 struct mgmt_cp_pin_code_neg_reply ncp;
1774
1775                 memcpy(&ncp.addr, &cp->addr, sizeof(ncp.addr));
1776
1777                 BT_ERR("PIN code is not 16 bytes long");
1778
1779                 err = send_pin_code_neg_reply(sk, hdev, &ncp);
1780                 if (err >= 0)
1781                         err = cmd_status(sk, hdev->id, MGMT_OP_PIN_CODE_REPLY,
1782                                          MGMT_STATUS_INVALID_PARAMS);
1783
1784                 goto failed;
1785         }
1786
1787         cmd = mgmt_pending_add(sk, MGMT_OP_PIN_CODE_REPLY, hdev, data, len);
1788         if (!cmd) {
1789                 err = -ENOMEM;
1790                 goto failed;
1791         }
1792
1793         bacpy(&reply.bdaddr, &cp->addr.bdaddr);
1794         reply.pin_len = cp->pin_len;
1795         memcpy(reply.pin_code, cp->pin_code, sizeof(reply.pin_code));
1796
1797         err = hci_send_cmd(hdev, HCI_OP_PIN_CODE_REPLY, sizeof(reply), &reply);
1798         if (err < 0)
1799                 mgmt_pending_remove(cmd);
1800
1801 failed:
1802         hci_dev_unlock(hdev);
1803         return err;
1804 }
1805
1806 static int set_io_capability(struct sock *sk, struct hci_dev *hdev, void *data,
1807                              u16 len)
1808 {
1809         struct mgmt_cp_set_io_capability *cp = data;
1810
1811         BT_DBG("");
1812
1813         hci_dev_lock(hdev);
1814
1815         hdev->io_capability = cp->io_capability;
1816
1817         BT_DBG("%s IO capability set to 0x%02x", hdev->name,
1818                hdev->io_capability);
1819
1820         hci_dev_unlock(hdev);
1821
1822         return cmd_complete(sk, hdev->id, MGMT_OP_SET_IO_CAPABILITY, 0, NULL,
1823                             0);
1824 }
1825
1826 static struct pending_cmd *find_pairing(struct hci_conn *conn)
1827 {
1828         struct hci_dev *hdev = conn->hdev;
1829         struct pending_cmd *cmd;
1830
1831         list_for_each_entry(cmd, &hdev->mgmt_pending, list) {
1832                 if (cmd->opcode != MGMT_OP_PAIR_DEVICE)
1833                         continue;
1834
1835                 if (cmd->user_data != conn)
1836                         continue;
1837
1838                 return cmd;
1839         }
1840
1841         return NULL;
1842 }
1843
1844 static void pairing_complete(struct pending_cmd *cmd, u8 status)
1845 {
1846         struct mgmt_rp_pair_device rp;
1847         struct hci_conn *conn = cmd->user_data;
1848
1849         bacpy(&rp.addr.bdaddr, &conn->dst);
1850         rp.addr.type = link_to_bdaddr(conn->type, conn->dst_type);
1851
1852         cmd_complete(cmd->sk, cmd->index, MGMT_OP_PAIR_DEVICE, status,
1853                      &rp, sizeof(rp));
1854
1855         /* So we don't get further callbacks for this connection */
1856         conn->connect_cfm_cb = NULL;
1857         conn->security_cfm_cb = NULL;
1858         conn->disconn_cfm_cb = NULL;
1859
1860         hci_conn_put(conn);
1861
1862         mgmt_pending_remove(cmd);
1863 }
1864
1865 static void pairing_complete_cb(struct hci_conn *conn, u8 status)
1866 {
1867         struct pending_cmd *cmd;
1868
1869         BT_DBG("status %u", status);
1870
1871         cmd = find_pairing(conn);
1872         if (!cmd)
1873                 BT_DBG("Unable to find a pending command");
1874         else
1875                 pairing_complete(cmd, mgmt_status(status));
1876 }
1877
1878 static void le_connect_complete_cb(struct hci_conn *conn, u8 status)
1879 {
1880         struct pending_cmd *cmd;
1881
1882         BT_DBG("status %u", status);
1883
1884         if (!status)
1885                 return;
1886
1887         cmd = find_pairing(conn);
1888         if (!cmd)
1889                 BT_DBG("Unable to find a pending command");
1890         else
1891                 pairing_complete(cmd, mgmt_status(status));
1892 }
1893
1894 static int pair_device(struct sock *sk, struct hci_dev *hdev, void *data,
1895                        u16 len)
1896 {
1897         struct mgmt_cp_pair_device *cp = data;
1898         struct mgmt_rp_pair_device rp;
1899         struct pending_cmd *cmd;
1900         u8 sec_level, auth_type;
1901         struct hci_conn *conn;
1902         int err;
1903
1904         BT_DBG("");
1905
1906         hci_dev_lock(hdev);
1907
1908         if (!hdev_is_powered(hdev)) {
1909                 err = cmd_status(sk, hdev->id, MGMT_OP_PAIR_DEVICE,
1910                                  MGMT_STATUS_NOT_POWERED);
1911                 goto unlock;
1912         }
1913
1914         sec_level = BT_SECURITY_MEDIUM;
1915         if (cp->io_cap == 0x03)
1916                 auth_type = HCI_AT_DEDICATED_BONDING;
1917         else
1918                 auth_type = HCI_AT_DEDICATED_BONDING_MITM;
1919
1920         if (cp->addr.type == BDADDR_BREDR)
1921                 conn = hci_connect(hdev, ACL_LINK, &cp->addr.bdaddr,
1922                                    cp->addr.type, sec_level, auth_type);
1923         else
1924                 conn = hci_connect(hdev, LE_LINK, &cp->addr.bdaddr,
1925                                    cp->addr.type, sec_level, auth_type);
1926
1927         memset(&rp, 0, sizeof(rp));
1928         bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr);
1929         rp.addr.type = cp->addr.type;
1930
1931         if (IS_ERR(conn)) {
1932                 int status;
1933
1934                 if (PTR_ERR(conn) == -EBUSY)
1935                         status = MGMT_STATUS_BUSY;
1936                 else
1937                         status = MGMT_STATUS_CONNECT_FAILED;
1938
1939                 err = cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE,
1940                                    status, &rp,
1941                                    sizeof(rp));
1942                 goto unlock;
1943         }
1944
1945         if (conn->connect_cfm_cb) {
1946                 hci_conn_put(conn);
1947                 err = cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE,
1948                                    MGMT_STATUS_BUSY, &rp, sizeof(rp));
1949                 goto unlock;
1950         }
1951
1952         cmd = mgmt_pending_add(sk, MGMT_OP_PAIR_DEVICE, hdev, data, len);
1953         if (!cmd) {
1954                 err = -ENOMEM;
1955                 hci_conn_put(conn);
1956                 goto unlock;
1957         }
1958
1959         /* For LE, just connecting isn't a proof that the pairing finished */
1960         if (cp->addr.type == BDADDR_BREDR)
1961                 conn->connect_cfm_cb = pairing_complete_cb;
1962         else
1963                 conn->connect_cfm_cb = le_connect_complete_cb;
1964
1965         conn->security_cfm_cb = pairing_complete_cb;
1966         conn->disconn_cfm_cb = pairing_complete_cb;
1967         conn->io_capability = cp->io_cap;
1968         cmd->user_data = conn;
1969
1970         if (conn->state == BT_CONNECTED &&
1971             hci_conn_security(conn, sec_level, auth_type))
1972                 pairing_complete(cmd, 0);
1973
1974         err = 0;
1975
1976 unlock:
1977         hci_dev_unlock(hdev);
1978         return err;
1979 }
1980
1981 static int cancel_pair_device(struct sock *sk, struct hci_dev *hdev, void *data,
1982                               u16 len)
1983 {
1984         struct mgmt_addr_info *addr = data;
1985         struct pending_cmd *cmd;
1986         struct hci_conn *conn;
1987         int err;
1988
1989         BT_DBG("");
1990
1991         hci_dev_lock(hdev);
1992
1993         if (!hdev_is_powered(hdev)) {
1994                 err = cmd_status(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE,
1995                                  MGMT_STATUS_NOT_POWERED);
1996                 goto unlock;
1997         }
1998
1999         cmd = mgmt_pending_find(MGMT_OP_PAIR_DEVICE, hdev);
2000         if (!cmd) {
2001                 err = cmd_status(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE,
2002                                  MGMT_STATUS_INVALID_PARAMS);
2003                 goto unlock;
2004         }
2005
2006         conn = cmd->user_data;
2007
2008         if (bacmp(&addr->bdaddr, &conn->dst) != 0) {
2009                 err = cmd_status(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE,
2010                                  MGMT_STATUS_INVALID_PARAMS);
2011                 goto unlock;
2012         }
2013
2014         pairing_complete(cmd, MGMT_STATUS_CANCELLED);
2015
2016         err = cmd_complete(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE, 0,
2017                            addr, sizeof(*addr));
2018 unlock:
2019         hci_dev_unlock(hdev);
2020         return err;
2021 }
2022
2023 static int user_pairing_resp(struct sock *sk, struct hci_dev *hdev,
2024                              bdaddr_t *bdaddr, u8 type, u16 mgmt_op,
2025                              u16 hci_op, __le32 passkey)
2026 {
2027         struct pending_cmd *cmd;
2028         struct hci_conn *conn;
2029         int err;
2030
2031         hci_dev_lock(hdev);
2032
2033         if (!hdev_is_powered(hdev)) {
2034                 err = cmd_status(sk, hdev->id, mgmt_op,
2035                                  MGMT_STATUS_NOT_POWERED);
2036                 goto done;
2037         }
2038
2039         if (type == BDADDR_BREDR)
2040                 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, bdaddr);
2041         else
2042                 conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, bdaddr);
2043
2044         if (!conn) {
2045                 err = cmd_status(sk, hdev->id, mgmt_op,
2046                                  MGMT_STATUS_NOT_CONNECTED);
2047                 goto done;
2048         }
2049
2050         if (type == BDADDR_LE_PUBLIC || type == BDADDR_LE_RANDOM) {
2051                 /* Continue with pairing via SMP */
2052                 err = smp_user_confirm_reply(conn, mgmt_op, passkey);
2053
2054                 if (!err)
2055                         err = cmd_status(sk, hdev->id, mgmt_op,
2056                                          MGMT_STATUS_SUCCESS);
2057                 else
2058                         err = cmd_status(sk, hdev->id, mgmt_op,
2059                                          MGMT_STATUS_FAILED);
2060
2061                 goto done;
2062         }
2063
2064         cmd = mgmt_pending_add(sk, mgmt_op, hdev, bdaddr, sizeof(*bdaddr));
2065         if (!cmd) {
2066                 err = -ENOMEM;
2067                 goto done;
2068         }
2069
2070         /* Continue with pairing via HCI */
2071         if (hci_op == HCI_OP_USER_PASSKEY_REPLY) {
2072                 struct hci_cp_user_passkey_reply cp;
2073
2074                 bacpy(&cp.bdaddr, bdaddr);
2075                 cp.passkey = passkey;
2076                 err = hci_send_cmd(hdev, hci_op, sizeof(cp), &cp);
2077         } else
2078                 err = hci_send_cmd(hdev, hci_op, sizeof(*bdaddr), bdaddr);
2079
2080         if (err < 0)
2081                 mgmt_pending_remove(cmd);
2082
2083 done:
2084         hci_dev_unlock(hdev);
2085         return err;
2086 }
2087
2088 static int pin_code_neg_reply(struct sock *sk, struct hci_dev *hdev,
2089                               void *data, u16 len)
2090 {
2091         struct mgmt_cp_pin_code_neg_reply *cp = data;
2092
2093         BT_DBG("");
2094
2095         return user_pairing_resp(sk, hdev, &cp->addr.bdaddr, cp->addr.type,
2096                                 MGMT_OP_PIN_CODE_NEG_REPLY,
2097                                 HCI_OP_PIN_CODE_NEG_REPLY, 0);
2098 }
2099
2100 static int user_confirm_reply(struct sock *sk, struct hci_dev *hdev, void *data,
2101                               u16 len)
2102 {
2103         struct mgmt_cp_user_confirm_reply *cp = data;
2104
2105         BT_DBG("");
2106
2107         if (len != sizeof(*cp))
2108                 return cmd_status(sk, hdev->id, MGMT_OP_USER_CONFIRM_REPLY,
2109                                   MGMT_STATUS_INVALID_PARAMS);
2110
2111         return user_pairing_resp(sk, hdev, &cp->addr.bdaddr, cp->addr.type,
2112                                  MGMT_OP_USER_CONFIRM_REPLY,
2113                                  HCI_OP_USER_CONFIRM_REPLY, 0);
2114 }
2115
2116 static int user_confirm_neg_reply(struct sock *sk, struct hci_dev *hdev,
2117                                   void *data, u16 len)
2118 {
2119         struct mgmt_cp_user_confirm_neg_reply *cp = data;
2120
2121         BT_DBG("");
2122
2123         return user_pairing_resp(sk, hdev, &cp->addr.bdaddr, cp->addr.type,
2124                                  MGMT_OP_USER_CONFIRM_NEG_REPLY,
2125                                  HCI_OP_USER_CONFIRM_NEG_REPLY, 0);
2126 }
2127
2128 static int user_passkey_reply(struct sock *sk, struct hci_dev *hdev, void *data,
2129                               u16 len)
2130 {
2131         struct mgmt_cp_user_passkey_reply *cp = data;
2132
2133         BT_DBG("");
2134
2135         return user_pairing_resp(sk, hdev, &cp->addr.bdaddr, cp->addr.type,
2136                                  MGMT_OP_USER_PASSKEY_REPLY,
2137                                  HCI_OP_USER_PASSKEY_REPLY, cp->passkey);
2138 }
2139
2140 static int user_passkey_neg_reply(struct sock *sk, struct hci_dev *hdev,
2141                                   void *data, u16 len)
2142 {
2143         struct mgmt_cp_user_passkey_neg_reply *cp = data;
2144
2145         BT_DBG("");
2146
2147         return user_pairing_resp(sk, hdev, &cp->addr.bdaddr, cp->addr.type,
2148                                  MGMT_OP_USER_PASSKEY_NEG_REPLY,
2149                                  HCI_OP_USER_PASSKEY_NEG_REPLY, 0);
2150 }
2151
2152 static int update_name(struct hci_dev *hdev, const char *name)
2153 {
2154         struct hci_cp_write_local_name cp;
2155
2156         memcpy(cp.name, name, sizeof(cp.name));
2157
2158         return hci_send_cmd(hdev, HCI_OP_WRITE_LOCAL_NAME, sizeof(cp), &cp);
2159 }
2160
2161 static int set_local_name(struct sock *sk, struct hci_dev *hdev, void *data,
2162                           u16 len)
2163 {
2164         struct mgmt_cp_set_local_name *cp = data;
2165         struct pending_cmd *cmd;
2166         int err;
2167
2168         BT_DBG("");
2169
2170         hci_dev_lock(hdev);
2171
2172         memcpy(hdev->short_name, cp->short_name, sizeof(hdev->short_name));
2173
2174         if (!hdev_is_powered(hdev)) {
2175                 memcpy(hdev->dev_name, cp->name, sizeof(hdev->dev_name));
2176
2177                 err = cmd_complete(sk, hdev->id, MGMT_OP_SET_LOCAL_NAME, 0,
2178                                    data, len);
2179                 if (err < 0)
2180                         goto failed;
2181
2182                 err = mgmt_event(MGMT_EV_LOCAL_NAME_CHANGED, hdev, data, len,
2183                                  sk);
2184
2185                 goto failed;
2186         }
2187
2188         cmd = mgmt_pending_add(sk, MGMT_OP_SET_LOCAL_NAME, hdev, data, len);
2189         if (!cmd) {
2190                 err = -ENOMEM;
2191                 goto failed;
2192         }
2193
2194         err = update_name(hdev, cp->name);
2195         if (err < 0)
2196                 mgmt_pending_remove(cmd);
2197
2198 failed:
2199         hci_dev_unlock(hdev);
2200         return err;
2201 }
2202
2203 static int read_local_oob_data(struct sock *sk, struct hci_dev *hdev,
2204                                void *data, u16 data_len)
2205 {
2206         struct pending_cmd *cmd;
2207         int err;
2208
2209         BT_DBG("%s", hdev->name);
2210
2211         hci_dev_lock(hdev);
2212
2213         if (!hdev_is_powered(hdev)) {
2214                 err = cmd_status(sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA,
2215                                  MGMT_STATUS_NOT_POWERED);
2216                 goto unlock;
2217         }
2218
2219         if (!lmp_ssp_capable(hdev)) {
2220                 err = cmd_status(sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA,
2221                                  MGMT_STATUS_NOT_SUPPORTED);
2222                 goto unlock;
2223         }
2224
2225         if (mgmt_pending_find(MGMT_OP_READ_LOCAL_OOB_DATA, hdev)) {
2226                 err = cmd_status(sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA,
2227                                  MGMT_STATUS_BUSY);
2228                 goto unlock;
2229         }
2230
2231         cmd = mgmt_pending_add(sk, MGMT_OP_READ_LOCAL_OOB_DATA, hdev, NULL, 0);
2232         if (!cmd) {
2233                 err = -ENOMEM;
2234                 goto unlock;
2235         }
2236
2237         err = hci_send_cmd(hdev, HCI_OP_READ_LOCAL_OOB_DATA, 0, NULL);
2238         if (err < 0)
2239                 mgmt_pending_remove(cmd);
2240
2241 unlock:
2242         hci_dev_unlock(hdev);
2243         return err;
2244 }
2245
2246 static int add_remote_oob_data(struct sock *sk, struct hci_dev *hdev,
2247                                void *data, u16 len)
2248 {
2249         struct mgmt_cp_add_remote_oob_data *cp = data;
2250         u8 status;
2251         int err;
2252
2253         BT_DBG("%s ", hdev->name);
2254
2255         hci_dev_lock(hdev);
2256
2257         if (!hdev_is_powered(hdev)) {
2258                 err = cmd_complete(sk, hdev->id, MGMT_OP_ADD_REMOTE_OOB_DATA,
2259                                    MGMT_STATUS_NOT_POWERED, &cp->addr,
2260                                    sizeof(cp->addr));
2261                 goto unlock;
2262         }
2263
2264         err = hci_add_remote_oob_data(hdev, &cp->addr.bdaddr, cp->hash,
2265                                       cp->randomizer);
2266         if (err < 0)
2267                 status = MGMT_STATUS_FAILED;
2268         else
2269                 status = 0;
2270
2271         err = cmd_complete(sk, hdev->id, MGMT_OP_ADD_REMOTE_OOB_DATA, status,
2272                            &cp->addr, sizeof(cp->addr));
2273
2274 unlock:
2275         hci_dev_unlock(hdev);
2276         return err;
2277 }
2278
2279 static int remove_remote_oob_data(struct sock *sk, struct hci_dev *hdev,
2280                                   void *data, u16 len)
2281 {
2282         struct mgmt_cp_remove_remote_oob_data *cp = data;
2283         u8 status;
2284         int err;
2285
2286         BT_DBG("%s", hdev->name);
2287
2288         hci_dev_lock(hdev);
2289
2290         if (!hdev_is_powered(hdev)) {
2291                 err = cmd_complete(sk, hdev->id,
2292                                    MGMT_OP_REMOVE_REMOTE_OOB_DATA,
2293                                    MGMT_STATUS_NOT_POWERED, &cp->addr,
2294                                    sizeof(cp->addr));
2295                 goto unlock;
2296         }
2297
2298         err = hci_remove_remote_oob_data(hdev, &cp->addr.bdaddr);
2299         if (err < 0)
2300                 status = MGMT_STATUS_INVALID_PARAMS;
2301         else
2302                 status = 0;
2303
2304         err = cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_REMOTE_OOB_DATA,
2305                            status, &cp->addr, sizeof(cp->addr));
2306
2307 unlock:
2308         hci_dev_unlock(hdev);
2309         return err;
2310 }
2311
2312 int mgmt_interleaved_discovery(struct hci_dev *hdev)
2313 {
2314         int err;
2315
2316         BT_DBG("%s", hdev->name);
2317
2318         hci_dev_lock(hdev);
2319
2320         err = hci_do_inquiry(hdev, INQUIRY_LEN_BREDR_LE);
2321         if (err < 0)
2322                 hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
2323
2324         hci_dev_unlock(hdev);
2325
2326         return err;
2327 }
2328
2329 static int start_discovery(struct sock *sk, struct hci_dev *hdev,
2330                            void *data, u16 len)
2331 {
2332         struct mgmt_cp_start_discovery *cp = data;
2333         struct pending_cmd *cmd;
2334         int err;
2335
2336         BT_DBG("%s", hdev->name);
2337
2338         hci_dev_lock(hdev);
2339
2340         if (!hdev_is_powered(hdev)) {
2341                 err = cmd_status(sk, hdev->id, MGMT_OP_START_DISCOVERY,
2342                                  MGMT_STATUS_NOT_POWERED);
2343                 goto failed;
2344         }
2345
2346         if (test_bit(HCI_PERIODIC_INQ, &hdev->dev_flags)) {
2347                 err = cmd_status(sk, hdev->id, MGMT_OP_START_DISCOVERY,
2348                                  MGMT_STATUS_BUSY);
2349                 goto failed;
2350         }
2351
2352         if (hdev->discovery.state != DISCOVERY_STOPPED) {
2353                 err = cmd_status(sk, hdev->id, MGMT_OP_START_DISCOVERY,
2354                                  MGMT_STATUS_BUSY);
2355                 goto failed;
2356         }
2357
2358         cmd = mgmt_pending_add(sk, MGMT_OP_START_DISCOVERY, hdev, NULL, 0);
2359         if (!cmd) {
2360                 err = -ENOMEM;
2361                 goto failed;
2362         }
2363
2364         hdev->discovery.type = cp->type;
2365
2366         switch (hdev->discovery.type) {
2367         case DISCOV_TYPE_BREDR:
2368                 if (lmp_bredr_capable(hdev))
2369                         err = hci_do_inquiry(hdev, INQUIRY_LEN_BREDR);
2370                 else
2371                         err = -ENOTSUPP;
2372                 break;
2373
2374         case DISCOV_TYPE_LE:
2375                 if (lmp_host_le_capable(hdev))
2376                         err = hci_le_scan(hdev, LE_SCAN_TYPE, LE_SCAN_INT,
2377                                           LE_SCAN_WIN, LE_SCAN_TIMEOUT_LE_ONLY);
2378                 else
2379                         err = -ENOTSUPP;
2380                 break;
2381
2382         case DISCOV_TYPE_INTERLEAVED:
2383                 if (lmp_host_le_capable(hdev) && lmp_bredr_capable(hdev))
2384                         err = hci_le_scan(hdev, LE_SCAN_TYPE, LE_SCAN_INT,
2385                                           LE_SCAN_WIN,
2386                                           LE_SCAN_TIMEOUT_BREDR_LE);
2387                 else
2388                         err = -ENOTSUPP;
2389                 break;
2390
2391         default:
2392                 err = -EINVAL;
2393         }
2394
2395         if (err < 0)
2396                 mgmt_pending_remove(cmd);
2397         else
2398                 hci_discovery_set_state(hdev, DISCOVERY_STARTING);
2399
2400 failed:
2401         hci_dev_unlock(hdev);
2402         return err;
2403 }
2404
2405 static int stop_discovery(struct sock *sk, struct hci_dev *hdev, void *data,
2406                           u16 len)
2407 {
2408         struct mgmt_cp_stop_discovery *mgmt_cp = data;
2409         struct pending_cmd *cmd;
2410         struct hci_cp_remote_name_req_cancel cp;
2411         struct inquiry_entry *e;
2412         int err;
2413
2414         BT_DBG("%s", hdev->name);
2415
2416         hci_dev_lock(hdev);
2417
2418         if (!hci_discovery_active(hdev)) {
2419                 err = cmd_complete(sk, hdev->id, MGMT_OP_STOP_DISCOVERY,
2420                                    MGMT_STATUS_REJECTED, &mgmt_cp->type,
2421                                    sizeof(mgmt_cp->type));
2422                 goto unlock;
2423         }
2424
2425         if (hdev->discovery.type != mgmt_cp->type) {
2426                 err = cmd_complete(sk, hdev->id, MGMT_OP_STOP_DISCOVERY,
2427                                    MGMT_STATUS_INVALID_PARAMS, &mgmt_cp->type,
2428                                    sizeof(mgmt_cp->type));
2429                 goto unlock;
2430         }
2431
2432         cmd = mgmt_pending_add(sk, MGMT_OP_STOP_DISCOVERY, hdev, NULL, 0);
2433         if (!cmd) {
2434                 err = -ENOMEM;
2435                 goto unlock;
2436         }
2437
2438         switch (hdev->discovery.state) {
2439         case DISCOVERY_FINDING:
2440                 if (test_bit(HCI_INQUIRY, &hdev->flags))
2441                         err = hci_cancel_inquiry(hdev);
2442                 else
2443                         err = hci_cancel_le_scan(hdev);
2444
2445                 break;
2446
2447         case DISCOVERY_RESOLVING:
2448                 e = hci_inquiry_cache_lookup_resolve(hdev, BDADDR_ANY,
2449                                                      NAME_PENDING);
2450                 if (!e) {
2451                         mgmt_pending_remove(cmd);
2452                         err = cmd_complete(sk, hdev->id,
2453                                            MGMT_OP_STOP_DISCOVERY, 0,
2454                                            &mgmt_cp->type,
2455                                            sizeof(mgmt_cp->type));
2456                         hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
2457                         goto unlock;
2458                 }
2459
2460                 bacpy(&cp.bdaddr, &e->data.bdaddr);
2461                 err = hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ_CANCEL,
2462                                    sizeof(cp), &cp);
2463
2464                 break;
2465
2466         default:
2467                 BT_DBG("unknown discovery state %u", hdev->discovery.state);
2468                 err = -EFAULT;
2469         }
2470
2471         if (err < 0)
2472                 mgmt_pending_remove(cmd);
2473         else
2474                 hci_discovery_set_state(hdev, DISCOVERY_STOPPING);
2475
2476 unlock:
2477         hci_dev_unlock(hdev);
2478         return err;
2479 }
2480
2481 static int confirm_name(struct sock *sk, struct hci_dev *hdev, void *data,
2482                         u16 len)
2483 {
2484         struct mgmt_cp_confirm_name *cp = data;
2485         struct inquiry_entry *e;
2486         int err;
2487
2488         BT_DBG("%s", hdev->name);
2489
2490         hci_dev_lock(hdev);
2491
2492         if (!hci_discovery_active(hdev)) {
2493                 err = cmd_status(sk, hdev->id, MGMT_OP_CONFIRM_NAME,
2494                                  MGMT_STATUS_FAILED);
2495                 goto failed;
2496         }
2497
2498         e = hci_inquiry_cache_lookup_unknown(hdev, &cp->addr.bdaddr);
2499         if (!e) {
2500                 err = cmd_status(sk, hdev->id, MGMT_OP_CONFIRM_NAME,
2501                                  MGMT_STATUS_INVALID_PARAMS);
2502                 goto failed;
2503         }
2504
2505         if (cp->name_known) {
2506                 e->name_state = NAME_KNOWN;
2507                 list_del(&e->list);
2508         } else {
2509                 e->name_state = NAME_NEEDED;
2510                 hci_inquiry_cache_update_resolve(hdev, e);
2511         }
2512
2513         err = 0;
2514
2515 failed:
2516         hci_dev_unlock(hdev);
2517         return err;
2518 }
2519
2520 static int block_device(struct sock *sk, struct hci_dev *hdev, void *data,
2521                         u16 len)
2522 {
2523         struct mgmt_cp_block_device *cp = data;
2524         u8 status;
2525         int err;
2526
2527         BT_DBG("%s", hdev->name);
2528
2529         hci_dev_lock(hdev);
2530
2531         err = hci_blacklist_add(hdev, &cp->addr.bdaddr, cp->addr.type);
2532         if (err < 0)
2533                 status = MGMT_STATUS_FAILED;
2534         else
2535                 status = 0;
2536
2537         err = cmd_complete(sk, hdev->id, MGMT_OP_BLOCK_DEVICE, status,
2538                            &cp->addr, sizeof(cp->addr));
2539
2540         hci_dev_unlock(hdev);
2541
2542         return err;
2543 }
2544
2545 static int unblock_device(struct sock *sk, struct hci_dev *hdev, void *data,
2546                           u16 len)
2547 {
2548         struct mgmt_cp_unblock_device *cp = data;
2549         u8 status;
2550         int err;
2551
2552         BT_DBG("%s", hdev->name);
2553
2554         hci_dev_lock(hdev);
2555
2556         err = hci_blacklist_del(hdev, &cp->addr.bdaddr, cp->addr.type);
2557         if (err < 0)
2558                 status = MGMT_STATUS_INVALID_PARAMS;
2559         else
2560                 status = 0;
2561
2562         err = cmd_complete(sk, hdev->id, MGMT_OP_UNBLOCK_DEVICE, status,
2563                            &cp->addr, sizeof(cp->addr));
2564
2565         hci_dev_unlock(hdev);
2566
2567         return err;
2568 }
2569
2570 static int set_device_id(struct sock *sk, struct hci_dev *hdev, void *data,
2571                          u16 len)
2572 {
2573         struct mgmt_cp_set_device_id *cp = data;
2574         int err;
2575         __u16 source;
2576
2577         BT_DBG("%s", hdev->name);
2578
2579         source = __le16_to_cpu(cp->source);
2580
2581         if (source > 0x0002)
2582                 return cmd_status(sk, hdev->id, MGMT_OP_SET_DEVICE_ID,
2583                                   MGMT_STATUS_INVALID_PARAMS);
2584
2585         hci_dev_lock(hdev);
2586
2587         hdev->devid_source = source;
2588         hdev->devid_vendor = __le16_to_cpu(cp->vendor);
2589         hdev->devid_product = __le16_to_cpu(cp->product);
2590         hdev->devid_version = __le16_to_cpu(cp->version);
2591
2592         err = cmd_complete(sk, hdev->id, MGMT_OP_SET_DEVICE_ID, 0, NULL, 0);
2593
2594         update_eir(hdev);
2595
2596         hci_dev_unlock(hdev);
2597
2598         return err;
2599 }
2600
2601 static int set_fast_connectable(struct sock *sk, struct hci_dev *hdev,
2602                                 void *data, u16 len)
2603 {
2604         struct mgmt_mode *cp = data;
2605         struct hci_cp_write_page_scan_activity acp;
2606         u8 type;
2607         int err;
2608
2609         BT_DBG("%s", hdev->name);
2610
2611         if (!lmp_bredr_capable(hdev))
2612                 return cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
2613                                   MGMT_STATUS_NOT_SUPPORTED);
2614
2615         if (!hdev_is_powered(hdev))
2616                 return cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
2617                                   MGMT_STATUS_NOT_POWERED);
2618
2619         if (!test_bit(HCI_CONNECTABLE, &hdev->dev_flags))
2620                 return cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
2621                                   MGMT_STATUS_REJECTED);
2622
2623         hci_dev_lock(hdev);
2624
2625         if (cp->val) {
2626                 type = PAGE_SCAN_TYPE_INTERLACED;
2627
2628                 /* 160 msec page scan interval */
2629                 acp.interval = __constant_cpu_to_le16(0x0100);
2630         } else {
2631                 type = PAGE_SCAN_TYPE_STANDARD; /* default */
2632
2633                 /* default 1.28 sec page scan */
2634                 acp.interval = __constant_cpu_to_le16(0x0800);
2635         }
2636
2637         /* default 11.25 msec page scan window */
2638         acp.window = __constant_cpu_to_le16(0x0012);
2639
2640         err = hci_send_cmd(hdev, HCI_OP_WRITE_PAGE_SCAN_ACTIVITY, sizeof(acp),
2641                            &acp);
2642         if (err < 0) {
2643                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
2644                                  MGMT_STATUS_FAILED);
2645                 goto done;
2646         }
2647
2648         err = hci_send_cmd(hdev, HCI_OP_WRITE_PAGE_SCAN_TYPE, 1, &type);
2649         if (err < 0) {
2650                 err = cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE,
2651                                  MGMT_STATUS_FAILED);
2652                 goto done;
2653         }
2654
2655         err = cmd_complete(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE, 0,
2656                            NULL, 0);
2657 done:
2658         hci_dev_unlock(hdev);
2659         return err;
2660 }
2661
2662 static int load_long_term_keys(struct sock *sk, struct hci_dev *hdev,
2663                                void *cp_data, u16 len)
2664 {
2665         struct mgmt_cp_load_long_term_keys *cp = cp_data;
2666         u16 key_count, expected_len;
2667         int i;
2668
2669         key_count = __le16_to_cpu(cp->key_count);
2670
2671         expected_len = sizeof(*cp) + key_count *
2672                                         sizeof(struct mgmt_ltk_info);
2673         if (expected_len != len) {
2674                 BT_ERR("load_keys: expected %u bytes, got %u bytes",
2675                        len, expected_len);
2676                 return cmd_status(sk, hdev->id, MGMT_OP_LOAD_LONG_TERM_KEYS,
2677                                   EINVAL);
2678         }
2679
2680         BT_DBG("%s key_count %u", hdev->name, key_count);
2681
2682         hci_dev_lock(hdev);
2683
2684         hci_smp_ltks_clear(hdev);
2685
2686         for (i = 0; i < key_count; i++) {
2687                 struct mgmt_ltk_info *key = &cp->keys[i];
2688                 u8 type;
2689
2690                 if (key->master)
2691                         type = HCI_SMP_LTK;
2692                 else
2693                         type = HCI_SMP_LTK_SLAVE;
2694
2695                 hci_add_ltk(hdev, &key->addr.bdaddr,
2696                             bdaddr_to_le(key->addr.type),
2697                             type, 0, key->authenticated, key->val,
2698                             key->enc_size, key->ediv, key->rand);
2699         }
2700
2701         hci_dev_unlock(hdev);
2702
2703         return 0;
2704 }
2705
2706 static const struct mgmt_handler {
2707         int (*func) (struct sock *sk, struct hci_dev *hdev, void *data,
2708                      u16 data_len);
2709         bool var_len;
2710         size_t data_len;
2711 } mgmt_handlers[] = {
2712         { NULL }, /* 0x0000 (no command) */
2713         { read_version,           false, MGMT_READ_VERSION_SIZE },
2714         { read_commands,          false, MGMT_READ_COMMANDS_SIZE },
2715         { read_index_list,        false, MGMT_READ_INDEX_LIST_SIZE },
2716         { read_controller_info,   false, MGMT_READ_INFO_SIZE },
2717         { set_powered,            false, MGMT_SETTING_SIZE },
2718         { set_discoverable,       false, MGMT_SET_DISCOVERABLE_SIZE },
2719         { set_connectable,        false, MGMT_SETTING_SIZE },
2720         { set_fast_connectable,   false, MGMT_SETTING_SIZE },
2721         { set_pairable,           false, MGMT_SETTING_SIZE },
2722         { set_link_security,      false, MGMT_SETTING_SIZE },
2723         { set_ssp,                false, MGMT_SETTING_SIZE },
2724         { set_hs,                 false, MGMT_SETTING_SIZE },
2725         { set_le,                 false, MGMT_SETTING_SIZE },
2726         { set_dev_class,          false, MGMT_SET_DEV_CLASS_SIZE },
2727         { set_local_name,         false, MGMT_SET_LOCAL_NAME_SIZE },
2728         { add_uuid,               false, MGMT_ADD_UUID_SIZE },
2729         { remove_uuid,            false, MGMT_REMOVE_UUID_SIZE },
2730         { load_link_keys,         true,  MGMT_LOAD_LINK_KEYS_SIZE },
2731         { load_long_term_keys,    true,  MGMT_LOAD_LONG_TERM_KEYS_SIZE },
2732         { disconnect,             false, MGMT_DISCONNECT_SIZE },
2733         { get_connections,        false, MGMT_GET_CONNECTIONS_SIZE },
2734         { pin_code_reply,         false, MGMT_PIN_CODE_REPLY_SIZE },
2735         { pin_code_neg_reply,     false, MGMT_PIN_CODE_NEG_REPLY_SIZE },
2736         { set_io_capability,      false, MGMT_SET_IO_CAPABILITY_SIZE },
2737         { pair_device,            false, MGMT_PAIR_DEVICE_SIZE },
2738         { cancel_pair_device,     false, MGMT_CANCEL_PAIR_DEVICE_SIZE },
2739         { unpair_device,          false, MGMT_UNPAIR_DEVICE_SIZE },
2740         { user_confirm_reply,     false, MGMT_USER_CONFIRM_REPLY_SIZE },
2741         { user_confirm_neg_reply, false, MGMT_USER_CONFIRM_NEG_REPLY_SIZE },
2742         { user_passkey_reply,     false, MGMT_USER_PASSKEY_REPLY_SIZE },
2743         { user_passkey_neg_reply, false, MGMT_USER_PASSKEY_NEG_REPLY_SIZE },
2744         { read_local_oob_data,    false, MGMT_READ_LOCAL_OOB_DATA_SIZE },
2745         { add_remote_oob_data,    false, MGMT_ADD_REMOTE_OOB_DATA_SIZE },
2746         { remove_remote_oob_data, false, MGMT_REMOVE_REMOTE_OOB_DATA_SIZE },
2747         { start_discovery,        false, MGMT_START_DISCOVERY_SIZE },
2748         { stop_discovery,         false, MGMT_STOP_DISCOVERY_SIZE },
2749         { confirm_name,           false, MGMT_CONFIRM_NAME_SIZE },
2750         { block_device,           false, MGMT_BLOCK_DEVICE_SIZE },
2751         { unblock_device,         false, MGMT_UNBLOCK_DEVICE_SIZE },
2752         { set_device_id,          false, MGMT_SET_DEVICE_ID_SIZE },
2753 };
2754
2755
2756 int mgmt_control(struct sock *sk, struct msghdr *msg, size_t msglen)
2757 {
2758         void *buf;
2759         u8 *cp;
2760         struct mgmt_hdr *hdr;
2761         u16 opcode, index, len;
2762         struct hci_dev *hdev = NULL;
2763         const struct mgmt_handler *handler;
2764         int err;
2765
2766         BT_DBG("got %zu bytes", msglen);
2767
2768         if (msglen < sizeof(*hdr))
2769                 return -EINVAL;
2770
2771         buf = kmalloc(msglen, GFP_KERNEL);
2772         if (!buf)
2773                 return -ENOMEM;
2774
2775         if (memcpy_fromiovec(buf, msg->msg_iov, msglen)) {
2776                 err = -EFAULT;
2777                 goto done;
2778         }
2779
2780         hdr = buf;
2781         opcode = __le16_to_cpu(hdr->opcode);
2782         index = __le16_to_cpu(hdr->index);
2783         len = __le16_to_cpu(hdr->len);
2784
2785         if (len != msglen - sizeof(*hdr)) {
2786                 err = -EINVAL;
2787                 goto done;
2788         }
2789
2790         if (index != MGMT_INDEX_NONE) {
2791                 hdev = hci_dev_get(index);
2792                 if (!hdev) {
2793                         err = cmd_status(sk, index, opcode,
2794                                          MGMT_STATUS_INVALID_INDEX);
2795                         goto done;
2796                 }
2797         }
2798
2799         if (opcode >= ARRAY_SIZE(mgmt_handlers) ||
2800             mgmt_handlers[opcode].func == NULL) {
2801                 BT_DBG("Unknown op %u", opcode);
2802                 err = cmd_status(sk, index, opcode,
2803                                  MGMT_STATUS_UNKNOWN_COMMAND);
2804                 goto done;
2805         }
2806
2807         if ((hdev && opcode < MGMT_OP_READ_INFO) ||
2808             (!hdev && opcode >= MGMT_OP_READ_INFO)) {
2809                 err = cmd_status(sk, index, opcode,
2810                                  MGMT_STATUS_INVALID_INDEX);
2811                 goto done;
2812         }
2813
2814         handler = &mgmt_handlers[opcode];
2815
2816         if ((handler->var_len && len < handler->data_len) ||
2817             (!handler->var_len && len != handler->data_len)) {
2818                 err = cmd_status(sk, index, opcode,
2819                                  MGMT_STATUS_INVALID_PARAMS);
2820                 goto done;
2821         }
2822
2823         if (hdev)
2824                 mgmt_init_hdev(sk, hdev);
2825
2826         cp = buf + sizeof(*hdr);
2827
2828         err = handler->func(sk, hdev, cp, len);
2829         if (err < 0)
2830                 goto done;
2831
2832         err = msglen;
2833
2834 done:
2835         if (hdev)
2836                 hci_dev_put(hdev);
2837
2838         kfree(buf);
2839         return err;
2840 }
2841
2842 static void cmd_status_rsp(struct pending_cmd *cmd, void *data)
2843 {
2844         u8 *status = data;
2845
2846         cmd_status(cmd->sk, cmd->index, cmd->opcode, *status);
2847         mgmt_pending_remove(cmd);
2848 }
2849
2850 int mgmt_index_added(struct hci_dev *hdev)
2851 {
2852         if (!mgmt_valid_hdev(hdev))
2853                 return -ENOTSUPP;
2854
2855         return mgmt_event(MGMT_EV_INDEX_ADDED, hdev, NULL, 0, NULL);
2856 }
2857
2858 int mgmt_index_removed(struct hci_dev *hdev)
2859 {
2860         u8 status = MGMT_STATUS_INVALID_INDEX;
2861
2862         if (!mgmt_valid_hdev(hdev))
2863                 return -ENOTSUPP;
2864
2865         mgmt_pending_foreach(0, hdev, cmd_status_rsp, &status);
2866
2867         return mgmt_event(MGMT_EV_INDEX_REMOVED, hdev, NULL, 0, NULL);
2868 }
2869
2870 struct cmd_lookup {
2871         struct sock *sk;
2872         struct hci_dev *hdev;
2873         u8 mgmt_status;
2874 };
2875
2876 static void settings_rsp(struct pending_cmd *cmd, void *data)
2877 {
2878         struct cmd_lookup *match = data;
2879
2880         send_settings_rsp(cmd->sk, cmd->opcode, match->hdev);
2881
2882         list_del(&cmd->list);
2883
2884         if (match->sk == NULL) {
2885                 match->sk = cmd->sk;
2886                 sock_hold(match->sk);
2887         }
2888
2889         mgmt_pending_free(cmd);
2890 }
2891
2892 static int set_bredr_scan(struct hci_dev *hdev)
2893 {
2894         u8 scan = 0;
2895
2896         if (test_bit(HCI_CONNECTABLE, &hdev->dev_flags))
2897                 scan |= SCAN_PAGE;
2898         if (test_bit(HCI_DISCOVERABLE, &hdev->dev_flags))
2899                 scan |= SCAN_INQUIRY;
2900
2901         if (!scan)
2902                 return 0;
2903
2904         return hci_send_cmd(hdev, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan);
2905 }
2906
2907 int mgmt_powered(struct hci_dev *hdev, u8 powered)
2908 {
2909         struct cmd_lookup match = { NULL, hdev };
2910         int err;
2911
2912         if (!test_bit(HCI_MGMT, &hdev->dev_flags))
2913                 return 0;
2914
2915         mgmt_pending_foreach(MGMT_OP_SET_POWERED, hdev, settings_rsp, &match);
2916
2917         if (powered) {
2918                 if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags) &&
2919                     !lmp_host_ssp_capable(hdev)) {
2920                         u8 ssp = 1;
2921
2922                         hci_send_cmd(hdev, HCI_OP_WRITE_SSP_MODE, 1, &ssp);
2923                 }
2924
2925                 if (test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) {
2926                         struct hci_cp_write_le_host_supported cp;
2927
2928                         cp.le = 1;
2929                         cp.simul = lmp_le_br_capable(hdev);
2930
2931                         /* Check first if we already have the right
2932                          * host state (host features set)
2933                          */
2934                         if (cp.le != lmp_host_le_capable(hdev) ||
2935                             cp.simul != lmp_host_le_br_capable(hdev))
2936                                 hci_send_cmd(hdev,
2937                                              HCI_OP_WRITE_LE_HOST_SUPPORTED,
2938                                              sizeof(cp), &cp);
2939                 }
2940
2941                 if (lmp_bredr_capable(hdev)) {
2942                         set_bredr_scan(hdev);
2943                         update_class(hdev);
2944                         update_name(hdev, hdev->dev_name);
2945                         update_eir(hdev);
2946                 }
2947         } else {
2948                 u8 status = MGMT_STATUS_NOT_POWERED;
2949                 mgmt_pending_foreach(0, hdev, cmd_status_rsp, &status);
2950         }
2951
2952         err = new_settings(hdev, match.sk);
2953
2954         if (match.sk)
2955                 sock_put(match.sk);
2956
2957         return err;
2958 }
2959
2960 int mgmt_discoverable(struct hci_dev *hdev, u8 discoverable)
2961 {
2962         struct cmd_lookup match = { NULL, hdev };
2963         bool changed = false;
2964         int err = 0;
2965
2966         if (discoverable) {
2967                 if (!test_and_set_bit(HCI_DISCOVERABLE, &hdev->dev_flags))
2968                         changed = true;
2969         } else {
2970                 if (test_and_clear_bit(HCI_DISCOVERABLE, &hdev->dev_flags))
2971                         changed = true;
2972         }
2973
2974         mgmt_pending_foreach(MGMT_OP_SET_DISCOVERABLE, hdev, settings_rsp,
2975                              &match);
2976
2977         if (changed)
2978                 err = new_settings(hdev, match.sk);
2979
2980         if (match.sk)
2981                 sock_put(match.sk);
2982
2983         return err;
2984 }
2985
2986 int mgmt_connectable(struct hci_dev *hdev, u8 connectable)
2987 {
2988         struct cmd_lookup match = { NULL, hdev };
2989         bool changed = false;
2990         int err = 0;
2991
2992         if (connectable) {
2993                 if (!test_and_set_bit(HCI_CONNECTABLE, &hdev->dev_flags))
2994                         changed = true;
2995         } else {
2996                 if (test_and_clear_bit(HCI_CONNECTABLE, &hdev->dev_flags))
2997                         changed = true;
2998         }
2999
3000         mgmt_pending_foreach(MGMT_OP_SET_CONNECTABLE, hdev, settings_rsp,
3001                              &match);
3002
3003         if (changed)
3004                 err = new_settings(hdev, match.sk);
3005
3006         if (match.sk)
3007                 sock_put(match.sk);
3008
3009         return err;
3010 }
3011
3012 int mgmt_write_scan_failed(struct hci_dev *hdev, u8 scan, u8 status)
3013 {
3014         u8 mgmt_err = mgmt_status(status);
3015
3016         if (scan & SCAN_PAGE)
3017                 mgmt_pending_foreach(MGMT_OP_SET_CONNECTABLE, hdev,
3018                                      cmd_status_rsp, &mgmt_err);
3019
3020         if (scan & SCAN_INQUIRY)
3021                 mgmt_pending_foreach(MGMT_OP_SET_DISCOVERABLE, hdev,
3022                                      cmd_status_rsp, &mgmt_err);
3023
3024         return 0;
3025 }
3026
3027 int mgmt_new_link_key(struct hci_dev *hdev, struct link_key *key,
3028                       bool persistent)
3029 {
3030         struct mgmt_ev_new_link_key ev;
3031
3032         memset(&ev, 0, sizeof(ev));
3033
3034         ev.store_hint = persistent;
3035         bacpy(&ev.key.addr.bdaddr, &key->bdaddr);
3036         ev.key.addr.type = BDADDR_BREDR;
3037         ev.key.type = key->type;
3038         memcpy(ev.key.val, key->val, HCI_LINK_KEY_SIZE);
3039         ev.key.pin_len = key->pin_len;
3040
3041         return mgmt_event(MGMT_EV_NEW_LINK_KEY, hdev, &ev, sizeof(ev), NULL);
3042 }
3043
3044 int mgmt_new_ltk(struct hci_dev *hdev, struct smp_ltk *key, u8 persistent)
3045 {
3046         struct mgmt_ev_new_long_term_key ev;
3047
3048         memset(&ev, 0, sizeof(ev));
3049
3050         ev.store_hint = persistent;
3051         bacpy(&ev.key.addr.bdaddr, &key->bdaddr);
3052         ev.key.addr.type = link_to_bdaddr(LE_LINK, key->bdaddr_type);
3053         ev.key.authenticated = key->authenticated;
3054         ev.key.enc_size = key->enc_size;
3055         ev.key.ediv = key->ediv;
3056
3057         if (key->type == HCI_SMP_LTK)
3058                 ev.key.master = 1;
3059
3060         memcpy(ev.key.rand, key->rand, sizeof(key->rand));
3061         memcpy(ev.key.val, key->val, sizeof(key->val));
3062
3063         return mgmt_event(MGMT_EV_NEW_LONG_TERM_KEY, hdev, &ev, sizeof(ev),
3064                           NULL);
3065 }
3066
3067 int mgmt_device_connected(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
3068                           u8 addr_type, u32 flags, u8 *name, u8 name_len,
3069                           u8 *dev_class)
3070 {
3071         char buf[512];
3072         struct mgmt_ev_device_connected *ev = (void *) buf;
3073         u16 eir_len = 0;
3074
3075         bacpy(&ev->addr.bdaddr, bdaddr);
3076         ev->addr.type = link_to_bdaddr(link_type, addr_type);
3077
3078         ev->flags = __cpu_to_le32(flags);
3079
3080         if (name_len > 0)
3081                 eir_len = eir_append_data(ev->eir, 0, EIR_NAME_COMPLETE,
3082                                           name, name_len);
3083
3084         if (dev_class && memcmp(dev_class, "\0\0\0", 3) != 0)
3085                 eir_len = eir_append_data(ev->eir, eir_len,
3086                                           EIR_CLASS_OF_DEV, dev_class, 3);
3087
3088         ev->eir_len = cpu_to_le16(eir_len);
3089
3090         return mgmt_event(MGMT_EV_DEVICE_CONNECTED, hdev, buf,
3091                           sizeof(*ev) + eir_len, NULL);
3092 }
3093
3094 static void disconnect_rsp(struct pending_cmd *cmd, void *data)
3095 {
3096         struct mgmt_cp_disconnect *cp = cmd->param;
3097         struct sock **sk = data;
3098         struct mgmt_rp_disconnect rp;
3099
3100         bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr);
3101         rp.addr.type = cp->addr.type;
3102
3103         cmd_complete(cmd->sk, cmd->index, MGMT_OP_DISCONNECT, 0, &rp,
3104                      sizeof(rp));
3105
3106         *sk = cmd->sk;
3107         sock_hold(*sk);
3108
3109         mgmt_pending_remove(cmd);
3110 }
3111
3112 static void unpair_device_rsp(struct pending_cmd *cmd, void *data)
3113 {
3114         struct hci_dev *hdev = data;
3115         struct mgmt_cp_unpair_device *cp = cmd->param;
3116         struct mgmt_rp_unpair_device rp;
3117
3118         memset(&rp, 0, sizeof(rp));
3119         bacpy(&rp.addr.bdaddr, &cp->addr.bdaddr);
3120         rp.addr.type = cp->addr.type;
3121
3122         device_unpaired(hdev, &cp->addr.bdaddr, cp->addr.type, cmd->sk);
3123
3124         cmd_complete(cmd->sk, cmd->index, cmd->opcode, 0, &rp, sizeof(rp));
3125
3126         mgmt_pending_remove(cmd);
3127 }
3128
3129 int mgmt_device_disconnected(struct hci_dev *hdev, bdaddr_t *bdaddr,
3130                              u8 link_type, u8 addr_type, u8 reason)
3131 {
3132         struct mgmt_ev_device_disconnected ev;
3133         struct sock *sk = NULL;
3134         int err;
3135
3136         mgmt_pending_foreach(MGMT_OP_DISCONNECT, hdev, disconnect_rsp, &sk);
3137
3138         bacpy(&ev.addr.bdaddr, bdaddr);
3139         ev.addr.type = link_to_bdaddr(link_type, addr_type);
3140         ev.reason = reason;
3141
3142         err = mgmt_event(MGMT_EV_DEVICE_DISCONNECTED, hdev, &ev, sizeof(ev),
3143                          sk);
3144
3145         if (sk)
3146                 sock_put(sk);
3147
3148         mgmt_pending_foreach(MGMT_OP_UNPAIR_DEVICE, hdev, unpair_device_rsp,
3149                              hdev);
3150
3151         return err;
3152 }
3153
3154 int mgmt_disconnect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr,
3155                            u8 link_type, u8 addr_type, u8 status)
3156 {
3157         struct mgmt_rp_disconnect rp;
3158         struct pending_cmd *cmd;
3159         int err;
3160
3161         mgmt_pending_foreach(MGMT_OP_UNPAIR_DEVICE, hdev, unpair_device_rsp,
3162                              hdev);
3163
3164         cmd = mgmt_pending_find(MGMT_OP_DISCONNECT, hdev);
3165         if (!cmd)
3166                 return -ENOENT;
3167
3168         bacpy(&rp.addr.bdaddr, bdaddr);
3169         rp.addr.type = link_to_bdaddr(link_type, addr_type);
3170
3171         err = cmd_complete(cmd->sk, cmd->index, MGMT_OP_DISCONNECT,
3172                            mgmt_status(status), &rp, sizeof(rp));
3173
3174         mgmt_pending_remove(cmd);
3175
3176         return err;
3177 }
3178
3179 int mgmt_connect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
3180                         u8 addr_type, u8 status)
3181 {
3182         struct mgmt_ev_connect_failed ev;
3183
3184         bacpy(&ev.addr.bdaddr, bdaddr);
3185         ev.addr.type = link_to_bdaddr(link_type, addr_type);
3186         ev.status = mgmt_status(status);
3187
3188         return mgmt_event(MGMT_EV_CONNECT_FAILED, hdev, &ev, sizeof(ev), NULL);
3189 }
3190
3191 int mgmt_pin_code_request(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 secure)
3192 {
3193         struct mgmt_ev_pin_code_request ev;
3194
3195         bacpy(&ev.addr.bdaddr, bdaddr);
3196         ev.addr.type = BDADDR_BREDR;
3197         ev.secure = secure;
3198
3199         return mgmt_event(MGMT_EV_PIN_CODE_REQUEST, hdev, &ev, sizeof(ev),
3200                           NULL);
3201 }
3202
3203 int mgmt_pin_code_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
3204                                  u8 status)
3205 {
3206         struct pending_cmd *cmd;
3207         struct mgmt_rp_pin_code_reply rp;
3208         int err;
3209
3210         cmd = mgmt_pending_find(MGMT_OP_PIN_CODE_REPLY, hdev);
3211         if (!cmd)
3212                 return -ENOENT;
3213
3214         bacpy(&rp.addr.bdaddr, bdaddr);
3215         rp.addr.type = BDADDR_BREDR;
3216
3217         err = cmd_complete(cmd->sk, hdev->id, MGMT_OP_PIN_CODE_REPLY,
3218                            mgmt_status(status), &rp, sizeof(rp));
3219
3220         mgmt_pending_remove(cmd);
3221
3222         return err;
3223 }
3224
3225 int mgmt_pin_code_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
3226                                      u8 status)
3227 {
3228         struct pending_cmd *cmd;
3229         struct mgmt_rp_pin_code_reply rp;
3230         int err;
3231
3232         cmd = mgmt_pending_find(MGMT_OP_PIN_CODE_NEG_REPLY, hdev);
3233         if (!cmd)
3234                 return -ENOENT;
3235
3236         bacpy(&rp.addr.bdaddr, bdaddr);
3237         rp.addr.type = BDADDR_BREDR;
3238
3239         err = cmd_complete(cmd->sk, hdev->id, MGMT_OP_PIN_CODE_NEG_REPLY,
3240                            mgmt_status(status), &rp, sizeof(rp));
3241
3242         mgmt_pending_remove(cmd);
3243
3244         return err;
3245 }
3246
3247 int mgmt_user_confirm_request(struct hci_dev *hdev, bdaddr_t *bdaddr,
3248                               u8 link_type, u8 addr_type, __le32 value,
3249                               u8 confirm_hint)
3250 {
3251         struct mgmt_ev_user_confirm_request ev;
3252
3253         BT_DBG("%s", hdev->name);
3254
3255         bacpy(&ev.addr.bdaddr, bdaddr);
3256         ev.addr.type = link_to_bdaddr(link_type, addr_type);
3257         ev.confirm_hint = confirm_hint;
3258         ev.value = value;
3259
3260         return mgmt_event(MGMT_EV_USER_CONFIRM_REQUEST, hdev, &ev, sizeof(ev),
3261                           NULL);
3262 }
3263
3264 int mgmt_user_passkey_request(struct hci_dev *hdev, bdaddr_t *bdaddr,
3265                               u8 link_type, u8 addr_type)
3266 {
3267         struct mgmt_ev_user_passkey_request ev;
3268
3269         BT_DBG("%s", hdev->name);
3270
3271         bacpy(&ev.addr.bdaddr, bdaddr);
3272         ev.addr.type = link_to_bdaddr(link_type, addr_type);
3273
3274         return mgmt_event(MGMT_EV_USER_PASSKEY_REQUEST, hdev, &ev, sizeof(ev),
3275                           NULL);
3276 }
3277
3278 static int user_pairing_resp_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
3279                                       u8 link_type, u8 addr_type, u8 status,
3280                                       u8 opcode)
3281 {
3282         struct pending_cmd *cmd;
3283         struct mgmt_rp_user_confirm_reply rp;
3284         int err;
3285
3286         cmd = mgmt_pending_find(opcode, hdev);
3287         if (!cmd)
3288                 return -ENOENT;
3289
3290         bacpy(&rp.addr.bdaddr, bdaddr);
3291         rp.addr.type = link_to_bdaddr(link_type, addr_type);
3292         err = cmd_complete(cmd->sk, hdev->id, opcode, mgmt_status(status),
3293                            &rp, sizeof(rp));
3294
3295         mgmt_pending_remove(cmd);
3296
3297         return err;
3298 }
3299
3300 int mgmt_user_confirm_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
3301                                      u8 link_type, u8 addr_type, u8 status)
3302 {
3303         return user_pairing_resp_complete(hdev, bdaddr, link_type, addr_type,
3304                                           status, MGMT_OP_USER_CONFIRM_REPLY);
3305 }
3306
3307 int mgmt_user_confirm_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
3308                                          u8 link_type, u8 addr_type, u8 status)
3309 {
3310         return user_pairing_resp_complete(hdev, bdaddr, link_type, addr_type,
3311                                           status,
3312                                           MGMT_OP_USER_CONFIRM_NEG_REPLY);
3313 }
3314
3315 int mgmt_user_passkey_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
3316                                      u8 link_type, u8 addr_type, u8 status)
3317 {
3318         return user_pairing_resp_complete(hdev, bdaddr, link_type, addr_type,
3319                                           status, MGMT_OP_USER_PASSKEY_REPLY);
3320 }
3321
3322 int mgmt_user_passkey_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
3323                                          u8 link_type, u8 addr_type, u8 status)
3324 {
3325         return user_pairing_resp_complete(hdev, bdaddr, link_type, addr_type,
3326                                           status,
3327                                           MGMT_OP_USER_PASSKEY_NEG_REPLY);
3328 }
3329
3330 int mgmt_user_passkey_notify(struct hci_dev *hdev, bdaddr_t *bdaddr,
3331                              u8 link_type, u8 addr_type, u32 passkey,
3332                              u8 entered)
3333 {
3334         struct mgmt_ev_passkey_notify ev;
3335
3336         BT_DBG("%s", hdev->name);
3337
3338         bacpy(&ev.addr.bdaddr, bdaddr);
3339         ev.addr.type = link_to_bdaddr(link_type, addr_type);
3340         ev.passkey = __cpu_to_le32(passkey);
3341         ev.entered = entered;
3342
3343         return mgmt_event(MGMT_EV_PASSKEY_NOTIFY, hdev, &ev, sizeof(ev), NULL);
3344 }
3345
3346 int mgmt_auth_failed(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
3347                      u8 addr_type, u8 status)
3348 {
3349         struct mgmt_ev_auth_failed ev;
3350
3351         bacpy(&ev.addr.bdaddr, bdaddr);
3352         ev.addr.type = link_to_bdaddr(link_type, addr_type);
3353         ev.status = mgmt_status(status);
3354
3355         return mgmt_event(MGMT_EV_AUTH_FAILED, hdev, &ev, sizeof(ev), NULL);
3356 }
3357
3358 int mgmt_auth_enable_complete(struct hci_dev *hdev, u8 status)
3359 {
3360         struct cmd_lookup match = { NULL, hdev };
3361         bool changed = false;
3362         int err = 0;
3363
3364         if (status) {
3365                 u8 mgmt_err = mgmt_status(status);
3366                 mgmt_pending_foreach(MGMT_OP_SET_LINK_SECURITY, hdev,
3367                                      cmd_status_rsp, &mgmt_err);
3368                 return 0;
3369         }
3370
3371         if (test_bit(HCI_AUTH, &hdev->flags)) {
3372                 if (!test_and_set_bit(HCI_LINK_SECURITY, &hdev->dev_flags))
3373                         changed = true;
3374         } else {
3375                 if (test_and_clear_bit(HCI_LINK_SECURITY, &hdev->dev_flags))
3376                         changed = true;
3377         }
3378
3379         mgmt_pending_foreach(MGMT_OP_SET_LINK_SECURITY, hdev, settings_rsp,
3380                              &match);
3381
3382         if (changed)
3383                 err = new_settings(hdev, match.sk);
3384
3385         if (match.sk)
3386                 sock_put(match.sk);
3387
3388         return err;
3389 }
3390
3391 static int clear_eir(struct hci_dev *hdev)
3392 {
3393         struct hci_cp_write_eir cp;
3394
3395         if (!lmp_ext_inq_capable(hdev))
3396                 return 0;
3397
3398         memset(hdev->eir, 0, sizeof(hdev->eir));
3399
3400         memset(&cp, 0, sizeof(cp));
3401
3402         return hci_send_cmd(hdev, HCI_OP_WRITE_EIR, sizeof(cp), &cp);
3403 }
3404
3405 int mgmt_ssp_enable_complete(struct hci_dev *hdev, u8 enable, u8 status)
3406 {
3407         struct cmd_lookup match = { NULL, hdev };
3408         bool changed = false;
3409         int err = 0;
3410
3411         if (status) {
3412                 u8 mgmt_err = mgmt_status(status);
3413
3414                 if (enable && test_and_clear_bit(HCI_SSP_ENABLED,
3415                                                  &hdev->dev_flags))
3416                         err = new_settings(hdev, NULL);
3417
3418                 mgmt_pending_foreach(MGMT_OP_SET_SSP, hdev, cmd_status_rsp,
3419                                      &mgmt_err);
3420
3421                 return err;
3422         }
3423
3424         if (enable) {
3425                 if (!test_and_set_bit(HCI_SSP_ENABLED, &hdev->dev_flags))
3426                         changed = true;
3427         } else {
3428                 if (test_and_clear_bit(HCI_SSP_ENABLED, &hdev->dev_flags))
3429                         changed = true;
3430         }
3431
3432         mgmt_pending_foreach(MGMT_OP_SET_SSP, hdev, settings_rsp, &match);
3433
3434         if (changed)
3435                 err = new_settings(hdev, match.sk);
3436
3437         if (match.sk)
3438                 sock_put(match.sk);
3439
3440         if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags))
3441                 update_eir(hdev);
3442         else
3443                 clear_eir(hdev);
3444
3445         return err;
3446 }
3447
3448 static void class_rsp(struct pending_cmd *cmd, void *data)
3449 {
3450         struct cmd_lookup *match = data;
3451
3452         cmd_complete(cmd->sk, cmd->index, cmd->opcode, match->mgmt_status,
3453                      match->hdev->dev_class, 3);
3454
3455         list_del(&cmd->list);
3456
3457         if (match->sk == NULL) {
3458                 match->sk = cmd->sk;
3459                 sock_hold(match->sk);
3460         }
3461
3462         mgmt_pending_free(cmd);
3463 }
3464
3465 int mgmt_set_class_of_dev_complete(struct hci_dev *hdev, u8 *dev_class,
3466                                    u8 status)
3467 {
3468         struct cmd_lookup match = { NULL, hdev, mgmt_status(status) };
3469         int err = 0;
3470
3471         clear_bit(HCI_PENDING_CLASS, &hdev->dev_flags);
3472
3473         mgmt_pending_foreach(MGMT_OP_SET_DEV_CLASS, hdev, class_rsp, &match);
3474         mgmt_pending_foreach(MGMT_OP_ADD_UUID, hdev, class_rsp, &match);
3475         mgmt_pending_foreach(MGMT_OP_REMOVE_UUID, hdev, class_rsp, &match);
3476
3477         if (!status)
3478                 err = mgmt_event(MGMT_EV_CLASS_OF_DEV_CHANGED, hdev, dev_class,
3479                                  3, NULL);
3480
3481         if (match.sk)
3482                 sock_put(match.sk);
3483
3484         return err;
3485 }
3486
3487 int mgmt_set_local_name_complete(struct hci_dev *hdev, u8 *name, u8 status)
3488 {
3489         struct pending_cmd *cmd;
3490         struct mgmt_cp_set_local_name ev;
3491         bool changed = false;
3492         int err = 0;
3493
3494         if (memcmp(name, hdev->dev_name, sizeof(hdev->dev_name)) != 0) {
3495                 memcpy(hdev->dev_name, name, sizeof(hdev->dev_name));
3496                 changed = true;
3497         }
3498
3499         memset(&ev, 0, sizeof(ev));
3500         memcpy(ev.name, name, HCI_MAX_NAME_LENGTH);
3501         memcpy(ev.short_name, hdev->short_name, HCI_MAX_SHORT_NAME_LENGTH);
3502
3503         cmd = mgmt_pending_find(MGMT_OP_SET_LOCAL_NAME, hdev);
3504         if (!cmd)
3505                 goto send_event;
3506
3507         /* Always assume that either the short or the complete name has
3508          * changed if there was a pending mgmt command */
3509         changed = true;
3510
3511         if (status) {
3512                 err = cmd_status(cmd->sk, hdev->id, MGMT_OP_SET_LOCAL_NAME,
3513                                  mgmt_status(status));
3514                 goto failed;
3515         }
3516
3517         err = cmd_complete(cmd->sk, hdev->id, MGMT_OP_SET_LOCAL_NAME, 0, &ev,
3518                            sizeof(ev));
3519         if (err < 0)
3520                 goto failed;
3521
3522 send_event:
3523         if (changed)
3524                 err = mgmt_event(MGMT_EV_LOCAL_NAME_CHANGED, hdev, &ev,
3525                                  sizeof(ev), cmd ? cmd->sk : NULL);
3526
3527         /* EIR is taken care of separately when powering on the
3528          * adapter so only update them here if this is a name change
3529          * unrelated to power on.
3530          */
3531         if (!test_bit(HCI_INIT, &hdev->flags))
3532                 update_eir(hdev);
3533
3534 failed:
3535         if (cmd)
3536                 mgmt_pending_remove(cmd);
3537         return err;
3538 }
3539
3540 int mgmt_read_local_oob_data_reply_complete(struct hci_dev *hdev, u8 *hash,
3541                                             u8 *randomizer, u8 status)
3542 {
3543         struct pending_cmd *cmd;
3544         int err;
3545
3546         BT_DBG("%s status %u", hdev->name, status);
3547
3548         cmd = mgmt_pending_find(MGMT_OP_READ_LOCAL_OOB_DATA, hdev);
3549         if (!cmd)
3550                 return -ENOENT;
3551
3552         if (status) {
3553                 err = cmd_status(cmd->sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA,
3554                                  mgmt_status(status));
3555         } else {
3556                 struct mgmt_rp_read_local_oob_data rp;
3557
3558                 memcpy(rp.hash, hash, sizeof(rp.hash));
3559                 memcpy(rp.randomizer, randomizer, sizeof(rp.randomizer));
3560
3561                 err = cmd_complete(cmd->sk, hdev->id,
3562                                    MGMT_OP_READ_LOCAL_OOB_DATA, 0, &rp,
3563                                    sizeof(rp));
3564         }
3565
3566         mgmt_pending_remove(cmd);
3567
3568         return err;
3569 }
3570
3571 int mgmt_le_enable_complete(struct hci_dev *hdev, u8 enable, u8 status)
3572 {
3573         struct cmd_lookup match = { NULL, hdev };
3574         bool changed = false;
3575         int err = 0;
3576
3577         if (status) {
3578                 u8 mgmt_err = mgmt_status(status);
3579
3580                 if (enable && test_and_clear_bit(HCI_LE_ENABLED,
3581                                                  &hdev->dev_flags))
3582                         err = new_settings(hdev, NULL);
3583
3584                 mgmt_pending_foreach(MGMT_OP_SET_LE, hdev, cmd_status_rsp,
3585                                      &mgmt_err);
3586
3587                 return err;
3588         }
3589
3590         if (enable) {
3591                 if (!test_and_set_bit(HCI_LE_ENABLED, &hdev->dev_flags))
3592                         changed = true;
3593         } else {
3594                 if (test_and_clear_bit(HCI_LE_ENABLED, &hdev->dev_flags))
3595                         changed = true;
3596         }
3597
3598         mgmt_pending_foreach(MGMT_OP_SET_LE, hdev, settings_rsp, &match);
3599
3600         if (changed)
3601                 err = new_settings(hdev, match.sk);
3602
3603         if (match.sk)
3604                 sock_put(match.sk);
3605
3606         return err;
3607 }
3608
3609 int mgmt_device_found(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
3610                       u8 addr_type, u8 *dev_class, s8 rssi, u8 cfm_name, u8
3611                       ssp, u8 *eir, u16 eir_len)
3612 {
3613         char buf[512];
3614         struct mgmt_ev_device_found *ev = (void *) buf;
3615         size_t ev_size;
3616
3617         /* Leave 5 bytes for a potential CoD field */
3618         if (sizeof(*ev) + eir_len + 5 > sizeof(buf))
3619                 return -EINVAL;
3620
3621         memset(buf, 0, sizeof(buf));
3622
3623         bacpy(&ev->addr.bdaddr, bdaddr);
3624         ev->addr.type = link_to_bdaddr(link_type, addr_type);
3625         ev->rssi = rssi;
3626         if (cfm_name)
3627                 ev->flags |= __constant_cpu_to_le32(MGMT_DEV_FOUND_CONFIRM_NAME);
3628         if (!ssp)
3629                 ev->flags |= __constant_cpu_to_le32(MGMT_DEV_FOUND_LEGACY_PAIRING);
3630
3631         if (eir_len > 0)
3632                 memcpy(ev->eir, eir, eir_len);
3633
3634         if (dev_class && !eir_has_data_type(ev->eir, eir_len, EIR_CLASS_OF_DEV))
3635                 eir_len = eir_append_data(ev->eir, eir_len, EIR_CLASS_OF_DEV,
3636                                           dev_class, 3);
3637
3638         ev->eir_len = cpu_to_le16(eir_len);
3639         ev_size = sizeof(*ev) + eir_len;
3640
3641         return mgmt_event(MGMT_EV_DEVICE_FOUND, hdev, ev, ev_size, NULL);
3642 }
3643
3644 int mgmt_remote_name(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
3645                      u8 addr_type, s8 rssi, u8 *name, u8 name_len)
3646 {
3647         struct mgmt_ev_device_found *ev;
3648         char buf[sizeof(*ev) + HCI_MAX_NAME_LENGTH + 2];
3649         u16 eir_len;
3650
3651         ev = (struct mgmt_ev_device_found *) buf;
3652
3653         memset(buf, 0, sizeof(buf));
3654
3655         bacpy(&ev->addr.bdaddr, bdaddr);
3656         ev->addr.type = link_to_bdaddr(link_type, addr_type);
3657         ev->rssi = rssi;
3658
3659         eir_len = eir_append_data(ev->eir, 0, EIR_NAME_COMPLETE, name,
3660                                   name_len);
3661
3662         ev->eir_len = cpu_to_le16(eir_len);
3663
3664         return mgmt_event(MGMT_EV_DEVICE_FOUND, hdev, ev,
3665                           sizeof(*ev) + eir_len, NULL);
3666 }
3667
3668 int mgmt_start_discovery_failed(struct hci_dev *hdev, u8 status)
3669 {
3670         struct pending_cmd *cmd;
3671         u8 type;
3672         int err;
3673
3674         hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
3675
3676         cmd = mgmt_pending_find(MGMT_OP_START_DISCOVERY, hdev);
3677         if (!cmd)
3678                 return -ENOENT;
3679
3680         type = hdev->discovery.type;
3681
3682         err = cmd_complete(cmd->sk, hdev->id, cmd->opcode, mgmt_status(status),
3683                            &type, sizeof(type));
3684         mgmt_pending_remove(cmd);
3685
3686         return err;
3687 }
3688
3689 int mgmt_stop_discovery_failed(struct hci_dev *hdev, u8 status)
3690 {
3691         struct pending_cmd *cmd;
3692         int err;
3693
3694         cmd = mgmt_pending_find(MGMT_OP_STOP_DISCOVERY, hdev);
3695         if (!cmd)
3696                 return -ENOENT;
3697
3698         err = cmd_complete(cmd->sk, hdev->id, cmd->opcode, mgmt_status(status),
3699                            &hdev->discovery.type, sizeof(hdev->discovery.type));
3700         mgmt_pending_remove(cmd);
3701
3702         return err;
3703 }
3704
3705 int mgmt_discovering(struct hci_dev *hdev, u8 discovering)
3706 {
3707         struct mgmt_ev_discovering ev;
3708         struct pending_cmd *cmd;
3709
3710         BT_DBG("%s discovering %u", hdev->name, discovering);
3711
3712         if (discovering)
3713                 cmd = mgmt_pending_find(MGMT_OP_START_DISCOVERY, hdev);
3714         else
3715                 cmd = mgmt_pending_find(MGMT_OP_STOP_DISCOVERY, hdev);
3716
3717         if (cmd != NULL) {
3718                 u8 type = hdev->discovery.type;
3719
3720                 cmd_complete(cmd->sk, hdev->id, cmd->opcode, 0, &type,
3721                              sizeof(type));
3722                 mgmt_pending_remove(cmd);
3723         }
3724
3725         memset(&ev, 0, sizeof(ev));
3726         ev.type = hdev->discovery.type;
3727         ev.discovering = discovering;
3728
3729         return mgmt_event(MGMT_EV_DISCOVERING, hdev, &ev, sizeof(ev), NULL);
3730 }
3731
3732 int mgmt_device_blocked(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type)
3733 {
3734         struct pending_cmd *cmd;
3735         struct mgmt_ev_device_blocked ev;
3736
3737         cmd = mgmt_pending_find(MGMT_OP_BLOCK_DEVICE, hdev);
3738
3739         bacpy(&ev.addr.bdaddr, bdaddr);
3740         ev.addr.type = type;
3741
3742         return mgmt_event(MGMT_EV_DEVICE_BLOCKED, hdev, &ev, sizeof(ev),
3743                           cmd ? cmd->sk : NULL);
3744 }
3745
3746 int mgmt_device_unblocked(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type)
3747 {
3748         struct pending_cmd *cmd;
3749         struct mgmt_ev_device_unblocked ev;
3750
3751         cmd = mgmt_pending_find(MGMT_OP_UNBLOCK_DEVICE, hdev);
3752
3753         bacpy(&ev.addr.bdaddr, bdaddr);
3754         ev.addr.type = type;
3755
3756         return mgmt_event(MGMT_EV_DEVICE_UNBLOCKED, hdev, &ev, sizeof(ev),
3757                           cmd ? cmd->sk : NULL);
3758 }
3759
3760 module_param(enable_hs, bool, 0644);
3761 MODULE_PARM_DESC(enable_hs, "Enable High Speed support");