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