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