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