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