xref: /linux/net/bluetooth/mgmt.c (revision 95e9fd10f06cb5642028b6b851e32b8c8afb4571)
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");
3673