xref: /linux/include/net/bluetooth/hci_core.h (revision 7ad24ea4bf620a32631d7b3069c3e30c078b0c3e)
1 /*
2    BlueZ - Bluetooth protocol stack for Linux
3    Copyright (c) 2000-2001, 2010, Code Aurora Forum. All rights reserved.
4 
5    Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
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 #ifndef __HCI_CORE_H
26 #define __HCI_CORE_H
27 
28 #include <net/bluetooth/hci.h>
29 
30 /* HCI priority */
31 #define HCI_PRIO_MAX	7
32 
33 /* HCI Core structures */
34 struct inquiry_data {
35 	bdaddr_t	bdaddr;
36 	__u8		pscan_rep_mode;
37 	__u8		pscan_period_mode;
38 	__u8		pscan_mode;
39 	__u8		dev_class[3];
40 	__le16		clock_offset;
41 	__s8		rssi;
42 	__u8		ssp_mode;
43 };
44 
45 struct inquiry_entry {
46 	struct list_head	all;		/* inq_cache.all */
47 	struct list_head	list;		/* unknown or resolve */
48 	enum {
49 		NAME_NOT_KNOWN,
50 		NAME_NEEDED,
51 		NAME_PENDING,
52 		NAME_KNOWN,
53 	} name_state;
54 	__u32			timestamp;
55 	struct inquiry_data	data;
56 };
57 
58 struct discovery_state {
59 	int			type;
60 	enum {
61 		DISCOVERY_STOPPED,
62 		DISCOVERY_STARTING,
63 		DISCOVERY_FINDING,
64 		DISCOVERY_RESOLVING,
65 		DISCOVERY_STOPPING,
66 	} state;
67 	struct list_head	all;	/* All devices found during inquiry */
68 	struct list_head	unknown;	/* Name state not known */
69 	struct list_head	resolve;	/* Name needs to be resolved */
70 	__u32			timestamp;
71 	bdaddr_t		last_adv_addr;
72 	u8			last_adv_addr_type;
73 	s8			last_adv_rssi;
74 	u8			last_adv_data[HCI_MAX_AD_LENGTH];
75 	u8			last_adv_data_len;
76 };
77 
78 struct hci_conn_hash {
79 	struct list_head list;
80 	unsigned int     acl_num;
81 	unsigned int     amp_num;
82 	unsigned int     sco_num;
83 	unsigned int     le_num;
84 };
85 
86 struct bdaddr_list {
87 	struct list_head list;
88 	bdaddr_t bdaddr;
89 	u8 bdaddr_type;
90 };
91 
92 struct bt_uuid {
93 	struct list_head list;
94 	u8 uuid[16];
95 	u8 size;
96 	u8 svc_hint;
97 };
98 
99 struct smp_csrk {
100 	bdaddr_t bdaddr;
101 	u8 bdaddr_type;
102 	u8 master;
103 	u8 val[16];
104 };
105 
106 struct smp_ltk {
107 	struct list_head list;
108 	bdaddr_t bdaddr;
109 	u8 bdaddr_type;
110 	u8 authenticated;
111 	u8 type;
112 	u8 enc_size;
113 	__le16 ediv;
114 	__le64 rand;
115 	u8 val[16];
116 };
117 
118 struct smp_irk {
119 	struct list_head list;
120 	bdaddr_t rpa;
121 	bdaddr_t bdaddr;
122 	u8 addr_type;
123 	u8 val[16];
124 };
125 
126 struct link_key {
127 	struct list_head list;
128 	bdaddr_t bdaddr;
129 	u8 type;
130 	u8 val[HCI_LINK_KEY_SIZE];
131 	u8 pin_len;
132 };
133 
134 struct oob_data {
135 	struct list_head list;
136 	bdaddr_t bdaddr;
137 	u8 hash192[16];
138 	u8 randomizer192[16];
139 	u8 hash256[16];
140 	u8 randomizer256[16];
141 };
142 
143 #define HCI_MAX_SHORT_NAME_LENGTH	10
144 
145 /* Default LE RPA expiry time, 15 minutes */
146 #define HCI_DEFAULT_RPA_TIMEOUT		(15 * 60)
147 
148 struct amp_assoc {
149 	__u16	len;
150 	__u16	offset;
151 	__u16	rem_len;
152 	__u16	len_so_far;
153 	__u8	data[HCI_MAX_AMP_ASSOC_SIZE];
154 };
155 
156 #define HCI_MAX_PAGES	3
157 
158 #define NUM_REASSEMBLY 4
159 struct hci_dev {
160 	struct list_head list;
161 	struct mutex	lock;
162 
163 	char		name[8];
164 	unsigned long	flags;
165 	__u16		id;
166 	__u8		bus;
167 	__u8		dev_type;
168 	bdaddr_t	bdaddr;
169 	bdaddr_t	random_addr;
170 	bdaddr_t	static_addr;
171 	__u8		adv_addr_type;
172 	__u8		dev_name[HCI_MAX_NAME_LENGTH];
173 	__u8		short_name[HCI_MAX_SHORT_NAME_LENGTH];
174 	__u8		eir[HCI_MAX_EIR_LENGTH];
175 	__u8		dev_class[3];
176 	__u8		major_class;
177 	__u8		minor_class;
178 	__u8		max_page;
179 	__u8		features[HCI_MAX_PAGES][8];
180 	__u8		le_features[8];
181 	__u8		le_white_list_size;
182 	__u8		le_states[8];
183 	__u8		commands[64];
184 	__u8		hci_ver;
185 	__u16		hci_rev;
186 	__u8		lmp_ver;
187 	__u16		manufacturer;
188 	__u16		lmp_subver;
189 	__u16		voice_setting;
190 	__u8		num_iac;
191 	__u8		io_capability;
192 	__s8		inq_tx_power;
193 	__u16		page_scan_interval;
194 	__u16		page_scan_window;
195 	__u8		page_scan_type;
196 	__u8		le_adv_channel_map;
197 	__u8		le_scan_type;
198 	__u16		le_scan_interval;
199 	__u16		le_scan_window;
200 	__u16		le_conn_min_interval;
201 	__u16		le_conn_max_interval;
202 	__u16		discov_interleaved_timeout;
203 	__u8		ssp_debug_mode;
204 
205 	__u16		devid_source;
206 	__u16		devid_vendor;
207 	__u16		devid_product;
208 	__u16		devid_version;
209 
210 	__u16		pkt_type;
211 	__u16		esco_type;
212 	__u16		link_policy;
213 	__u16		link_mode;
214 
215 	__u32		idle_timeout;
216 	__u16		sniff_min_interval;
217 	__u16		sniff_max_interval;
218 
219 	__u8		amp_status;
220 	__u32		amp_total_bw;
221 	__u32		amp_max_bw;
222 	__u32		amp_min_latency;
223 	__u32		amp_max_pdu;
224 	__u8		amp_type;
225 	__u16		amp_pal_cap;
226 	__u16		amp_assoc_size;
227 	__u32		amp_max_flush_to;
228 	__u32		amp_be_flush_to;
229 
230 	struct amp_assoc	loc_assoc;
231 
232 	__u8		flow_ctl_mode;
233 
234 	unsigned int	auto_accept_delay;
235 
236 	unsigned long	quirks;
237 
238 	atomic_t	cmd_cnt;
239 	unsigned int	acl_cnt;
240 	unsigned int	sco_cnt;
241 	unsigned int	le_cnt;
242 
243 	unsigned int	acl_mtu;
244 	unsigned int	sco_mtu;
245 	unsigned int	le_mtu;
246 	unsigned int	acl_pkts;
247 	unsigned int	sco_pkts;
248 	unsigned int	le_pkts;
249 
250 	__u16		block_len;
251 	__u16		block_mtu;
252 	__u16		num_blocks;
253 	__u16		block_cnt;
254 
255 	unsigned long	acl_last_tx;
256 	unsigned long	sco_last_tx;
257 	unsigned long	le_last_tx;
258 
259 	struct workqueue_struct	*workqueue;
260 	struct workqueue_struct	*req_workqueue;
261 
262 	struct work_struct	power_on;
263 	struct delayed_work	power_off;
264 
265 	__u16			discov_timeout;
266 	struct delayed_work	discov_off;
267 
268 	struct delayed_work	service_cache;
269 
270 	struct timer_list	cmd_timer;
271 
272 	struct work_struct	rx_work;
273 	struct work_struct	cmd_work;
274 	struct work_struct	tx_work;
275 
276 	struct sk_buff_head	rx_q;
277 	struct sk_buff_head	raw_q;
278 	struct sk_buff_head	cmd_q;
279 
280 	struct sk_buff		*recv_evt;
281 	struct sk_buff		*sent_cmd;
282 	struct sk_buff		*reassembly[NUM_REASSEMBLY];
283 
284 	struct mutex		req_lock;
285 	wait_queue_head_t	req_wait_q;
286 	__u32			req_status;
287 	__u32			req_result;
288 
289 	struct crypto_blkcipher	*tfm_aes;
290 
291 	struct discovery_state	discovery;
292 	struct hci_conn_hash	conn_hash;
293 
294 	struct list_head	mgmt_pending;
295 	struct list_head	blacklist;
296 	struct list_head	uuids;
297 	struct list_head	link_keys;
298 	struct list_head	long_term_keys;
299 	struct list_head	identity_resolving_keys;
300 	struct list_head	remote_oob_data;
301 	struct list_head	le_white_list;
302 	struct list_head	le_conn_params;
303 	struct list_head	pend_le_conns;
304 
305 	struct hci_dev_stats	stat;
306 
307 	atomic_t		promisc;
308 
309 	struct dentry		*debugfs;
310 
311 	struct device		dev;
312 
313 	struct rfkill		*rfkill;
314 
315 	unsigned long		dev_flags;
316 
317 	struct delayed_work	le_scan_disable;
318 
319 	__s8			adv_tx_power;
320 	__u8			adv_data[HCI_MAX_AD_LENGTH];
321 	__u8			adv_data_len;
322 	__u8			scan_rsp_data[HCI_MAX_AD_LENGTH];
323 	__u8			scan_rsp_data_len;
324 
325 	__u8			irk[16];
326 	__u32			rpa_timeout;
327 	struct delayed_work	rpa_expired;
328 	bdaddr_t		rpa;
329 
330 	int (*open)(struct hci_dev *hdev);
331 	int (*close)(struct hci_dev *hdev);
332 	int (*flush)(struct hci_dev *hdev);
333 	int (*setup)(struct hci_dev *hdev);
334 	int (*send)(struct hci_dev *hdev, struct sk_buff *skb);
335 	void (*notify)(struct hci_dev *hdev, unsigned int evt);
336 };
337 
338 #define HCI_PHY_HANDLE(handle)	(handle & 0xff)
339 
340 struct hci_conn {
341 	struct list_head list;
342 
343 	atomic_t	refcnt;
344 
345 	bdaddr_t	dst;
346 	__u8		dst_type;
347 	bdaddr_t	src;
348 	__u8		src_type;
349 	bdaddr_t	init_addr;
350 	__u8		init_addr_type;
351 	bdaddr_t	resp_addr;
352 	__u8		resp_addr_type;
353 	__u16		handle;
354 	__u16		state;
355 	__u8		mode;
356 	__u8		type;
357 	bool		out;
358 	__u8		attempt;
359 	__u8		dev_class[3];
360 	__u8		features[HCI_MAX_PAGES][8];
361 	__u16		pkt_type;
362 	__u16		link_policy;
363 	__u32		link_mode;
364 	__u8		key_type;
365 	__u8		auth_type;
366 	__u8		sec_level;
367 	__u8		pending_sec_level;
368 	__u8		pin_length;
369 	__u8		enc_key_size;
370 	__u8		io_capability;
371 	__u32		passkey_notify;
372 	__u8		passkey_entered;
373 	__u16		disc_timeout;
374 	__u16		setting;
375 	__u16		le_conn_min_interval;
376 	__u16		le_conn_max_interval;
377 	unsigned long	flags;
378 
379 	__u8		remote_cap;
380 	__u8		remote_auth;
381 	__u8		remote_id;
382 	bool		flush_key;
383 
384 	unsigned int	sent;
385 
386 	struct sk_buff_head data_q;
387 	struct list_head chan_list;
388 
389 	struct delayed_work disc_work;
390 	struct delayed_work auto_accept_work;
391 	struct delayed_work idle_work;
392 	struct delayed_work le_conn_timeout;
393 
394 	struct device	dev;
395 
396 	struct hci_dev	*hdev;
397 	void		*l2cap_data;
398 	void		*sco_data;
399 	void		*smp_conn;
400 	struct amp_mgr	*amp_mgr;
401 
402 	struct hci_conn	*link;
403 
404 	void (*connect_cfm_cb)	(struct hci_conn *conn, u8 status);
405 	void (*security_cfm_cb)	(struct hci_conn *conn, u8 status);
406 	void (*disconn_cfm_cb)	(struct hci_conn *conn, u8 reason);
407 };
408 
409 struct hci_chan {
410 	struct list_head list;
411 	__u16 handle;
412 	struct hci_conn *conn;
413 	struct sk_buff_head data_q;
414 	unsigned int	sent;
415 	__u8		state;
416 };
417 
418 struct hci_conn_params {
419 	struct list_head list;
420 
421 	bdaddr_t addr;
422 	u8 addr_type;
423 
424 	u16 conn_min_interval;
425 	u16 conn_max_interval;
426 
427 	enum {
428 		HCI_AUTO_CONN_DISABLED,
429 		HCI_AUTO_CONN_ALWAYS,
430 		HCI_AUTO_CONN_LINK_LOSS,
431 	} auto_connect;
432 };
433 
434 extern struct list_head hci_dev_list;
435 extern struct list_head hci_cb_list;
436 extern rwlock_t hci_dev_list_lock;
437 extern rwlock_t hci_cb_list_lock;
438 
439 /* ----- HCI interface to upper protocols ----- */
440 int l2cap_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr);
441 void l2cap_connect_cfm(struct hci_conn *hcon, u8 status);
442 int l2cap_disconn_ind(struct hci_conn *hcon);
443 void l2cap_disconn_cfm(struct hci_conn *hcon, u8 reason);
444 int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt);
445 int l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags);
446 
447 int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 *flags);
448 void sco_connect_cfm(struct hci_conn *hcon, __u8 status);
449 void sco_disconn_cfm(struct hci_conn *hcon, __u8 reason);
450 int sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb);
451 
452 /* ----- Inquiry cache ----- */
453 #define INQUIRY_CACHE_AGE_MAX   (HZ*30)   /* 30 seconds */
454 #define INQUIRY_ENTRY_AGE_MAX   (HZ*60)   /* 60 seconds */
455 
456 static inline void discovery_init(struct hci_dev *hdev)
457 {
458 	hdev->discovery.state = DISCOVERY_STOPPED;
459 	INIT_LIST_HEAD(&hdev->discovery.all);
460 	INIT_LIST_HEAD(&hdev->discovery.unknown);
461 	INIT_LIST_HEAD(&hdev->discovery.resolve);
462 }
463 
464 bool hci_discovery_active(struct hci_dev *hdev);
465 
466 void hci_discovery_set_state(struct hci_dev *hdev, int state);
467 
468 static inline int inquiry_cache_empty(struct hci_dev *hdev)
469 {
470 	return list_empty(&hdev->discovery.all);
471 }
472 
473 static inline long inquiry_cache_age(struct hci_dev *hdev)
474 {
475 	struct discovery_state *c = &hdev->discovery;
476 	return jiffies - c->timestamp;
477 }
478 
479 static inline long inquiry_entry_age(struct inquiry_entry *e)
480 {
481 	return jiffies - e->timestamp;
482 }
483 
484 struct inquiry_entry *hci_inquiry_cache_lookup(struct hci_dev *hdev,
485 					       bdaddr_t *bdaddr);
486 struct inquiry_entry *hci_inquiry_cache_lookup_unknown(struct hci_dev *hdev,
487 						       bdaddr_t *bdaddr);
488 struct inquiry_entry *hci_inquiry_cache_lookup_resolve(struct hci_dev *hdev,
489 						       bdaddr_t *bdaddr,
490 						       int state);
491 void hci_inquiry_cache_update_resolve(struct hci_dev *hdev,
492 				      struct inquiry_entry *ie);
493 bool hci_inquiry_cache_update(struct hci_dev *hdev, struct inquiry_data *data,
494 			      bool name_known, bool *ssp);
495 void hci_inquiry_cache_flush(struct hci_dev *hdev);
496 
497 /* ----- HCI Connections ----- */
498 enum {
499 	HCI_CONN_AUTH_PEND,
500 	HCI_CONN_REAUTH_PEND,
501 	HCI_CONN_ENCRYPT_PEND,
502 	HCI_CONN_RSWITCH_PEND,
503 	HCI_CONN_MODE_CHANGE_PEND,
504 	HCI_CONN_SCO_SETUP_PEND,
505 	HCI_CONN_LE_SMP_PEND,
506 	HCI_CONN_MGMT_CONNECTED,
507 	HCI_CONN_SSP_ENABLED,
508 	HCI_CONN_SC_ENABLED,
509 	HCI_CONN_AES_CCM,
510 	HCI_CONN_POWER_SAVE,
511 	HCI_CONN_REMOTE_OOB,
512 	HCI_CONN_6LOWPAN,
513 };
514 
515 static inline bool hci_conn_ssp_enabled(struct hci_conn *conn)
516 {
517 	struct hci_dev *hdev = conn->hdev;
518 	return test_bit(HCI_SSP_ENABLED, &hdev->dev_flags) &&
519 	       test_bit(HCI_CONN_SSP_ENABLED, &conn->flags);
520 }
521 
522 static inline bool hci_conn_sc_enabled(struct hci_conn *conn)
523 {
524 	struct hci_dev *hdev = conn->hdev;
525 	return test_bit(HCI_SC_ENABLED, &hdev->dev_flags) &&
526 	       test_bit(HCI_CONN_SC_ENABLED, &conn->flags);
527 }
528 
529 static inline void hci_conn_hash_add(struct hci_dev *hdev, struct hci_conn *c)
530 {
531 	struct hci_conn_hash *h = &hdev->conn_hash;
532 	list_add_rcu(&c->list, &h->list);
533 	switch (c->type) {
534 	case ACL_LINK:
535 		h->acl_num++;
536 		break;
537 	case AMP_LINK:
538 		h->amp_num++;
539 		break;
540 	case LE_LINK:
541 		h->le_num++;
542 		break;
543 	case SCO_LINK:
544 	case ESCO_LINK:
545 		h->sco_num++;
546 		break;
547 	}
548 }
549 
550 static inline void hci_conn_hash_del(struct hci_dev *hdev, struct hci_conn *c)
551 {
552 	struct hci_conn_hash *h = &hdev->conn_hash;
553 
554 	list_del_rcu(&c->list);
555 	synchronize_rcu();
556 
557 	switch (c->type) {
558 	case ACL_LINK:
559 		h->acl_num--;
560 		break;
561 	case AMP_LINK:
562 		h->amp_num--;
563 		break;
564 	case LE_LINK:
565 		h->le_num--;
566 		break;
567 	case SCO_LINK:
568 	case ESCO_LINK:
569 		h->sco_num--;
570 		break;
571 	}
572 }
573 
574 static inline unsigned int hci_conn_num(struct hci_dev *hdev, __u8 type)
575 {
576 	struct hci_conn_hash *h = &hdev->conn_hash;
577 	switch (type) {
578 	case ACL_LINK:
579 		return h->acl_num;
580 	case AMP_LINK:
581 		return h->amp_num;
582 	case LE_LINK:
583 		return h->le_num;
584 	case SCO_LINK:
585 	case ESCO_LINK:
586 		return h->sco_num;
587 	default:
588 		return 0;
589 	}
590 }
591 
592 static inline unsigned int hci_conn_count(struct hci_dev *hdev)
593 {
594 	struct hci_conn_hash *c = &hdev->conn_hash;
595 
596 	return c->acl_num + c->amp_num + c->sco_num + c->le_num;
597 }
598 
599 static inline struct hci_conn *hci_conn_hash_lookup_handle(struct hci_dev *hdev,
600 								__u16 handle)
601 {
602 	struct hci_conn_hash *h = &hdev->conn_hash;
603 	struct hci_conn  *c;
604 
605 	rcu_read_lock();
606 
607 	list_for_each_entry_rcu(c, &h->list, list) {
608 		if (c->handle == handle) {
609 			rcu_read_unlock();
610 			return c;
611 		}
612 	}
613 	rcu_read_unlock();
614 
615 	return NULL;
616 }
617 
618 static inline struct hci_conn *hci_conn_hash_lookup_ba(struct hci_dev *hdev,
619 							__u8 type, bdaddr_t *ba)
620 {
621 	struct hci_conn_hash *h = &hdev->conn_hash;
622 	struct hci_conn  *c;
623 
624 	rcu_read_lock();
625 
626 	list_for_each_entry_rcu(c, &h->list, list) {
627 		if (c->type == type && !bacmp(&c->dst, ba)) {
628 			rcu_read_unlock();
629 			return c;
630 		}
631 	}
632 
633 	rcu_read_unlock();
634 
635 	return NULL;
636 }
637 
638 static inline struct hci_conn *hci_conn_hash_lookup_state(struct hci_dev *hdev,
639 							__u8 type, __u16 state)
640 {
641 	struct hci_conn_hash *h = &hdev->conn_hash;
642 	struct hci_conn  *c;
643 
644 	rcu_read_lock();
645 
646 	list_for_each_entry_rcu(c, &h->list, list) {
647 		if (c->type == type && c->state == state) {
648 			rcu_read_unlock();
649 			return c;
650 		}
651 	}
652 
653 	rcu_read_unlock();
654 
655 	return NULL;
656 }
657 
658 void hci_disconnect(struct hci_conn *conn, __u8 reason);
659 bool hci_setup_sync(struct hci_conn *conn, __u16 handle);
660 void hci_sco_setup(struct hci_conn *conn, __u8 status);
661 
662 struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst);
663 int hci_conn_del(struct hci_conn *conn);
664 void hci_conn_hash_flush(struct hci_dev *hdev);
665 void hci_conn_check_pending(struct hci_dev *hdev);
666 
667 struct hci_chan *hci_chan_create(struct hci_conn *conn);
668 void hci_chan_del(struct hci_chan *chan);
669 void hci_chan_list_flush(struct hci_conn *conn);
670 struct hci_chan *hci_chan_lookup_handle(struct hci_dev *hdev, __u16 handle);
671 
672 struct hci_conn *hci_connect_le(struct hci_dev *hdev, bdaddr_t *dst,
673 				u8 dst_type, u8 sec_level, u8 auth_type);
674 struct hci_conn *hci_connect_acl(struct hci_dev *hdev, bdaddr_t *dst,
675 				 u8 sec_level, u8 auth_type);
676 struct hci_conn *hci_connect_sco(struct hci_dev *hdev, int type, bdaddr_t *dst,
677 				 __u16 setting);
678 int hci_conn_check_link_mode(struct hci_conn *conn);
679 int hci_conn_check_secure(struct hci_conn *conn, __u8 sec_level);
680 int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type);
681 int hci_conn_change_link_key(struct hci_conn *conn);
682 int hci_conn_switch_role(struct hci_conn *conn, __u8 role);
683 
684 void hci_conn_enter_active_mode(struct hci_conn *conn, __u8 force_active);
685 
686 void hci_le_conn_failed(struct hci_conn *conn, u8 status);
687 
688 /*
689  * hci_conn_get() and hci_conn_put() are used to control the life-time of an
690  * "hci_conn" object. They do not guarantee that the hci_conn object is running,
691  * working or anything else. They just guarantee that the object is available
692  * and can be dereferenced. So you can use its locks, local variables and any
693  * other constant data.
694  * Before accessing runtime data, you _must_ lock the object and then check that
695  * it is still running. As soon as you release the locks, the connection might
696  * get dropped, though.
697  *
698  * On the other hand, hci_conn_hold() and hci_conn_drop() are used to control
699  * how long the underlying connection is held. So every channel that runs on the
700  * hci_conn object calls this to prevent the connection from disappearing. As
701  * long as you hold a device, you must also guarantee that you have a valid
702  * reference to the device via hci_conn_get() (or the initial reference from
703  * hci_conn_add()).
704  * The hold()/drop() ref-count is known to drop below 0 sometimes, which doesn't
705  * break because nobody cares for that. But this means, we cannot use
706  * _get()/_drop() in it, but require the caller to have a valid ref (FIXME).
707  */
708 
709 static inline void hci_conn_get(struct hci_conn *conn)
710 {
711 	get_device(&conn->dev);
712 }
713 
714 static inline void hci_conn_put(struct hci_conn *conn)
715 {
716 	put_device(&conn->dev);
717 }
718 
719 static inline void hci_conn_hold(struct hci_conn *conn)
720 {
721 	BT_DBG("hcon %p orig refcnt %d", conn, atomic_read(&conn->refcnt));
722 
723 	atomic_inc(&conn->refcnt);
724 	cancel_delayed_work(&conn->disc_work);
725 }
726 
727 static inline void hci_conn_drop(struct hci_conn *conn)
728 {
729 	BT_DBG("hcon %p orig refcnt %d", conn, atomic_read(&conn->refcnt));
730 
731 	if (atomic_dec_and_test(&conn->refcnt)) {
732 		unsigned long timeo;
733 
734 		switch (conn->type) {
735 		case ACL_LINK:
736 		case LE_LINK:
737 			cancel_delayed_work(&conn->idle_work);
738 			if (conn->state == BT_CONNECTED) {
739 				timeo = conn->disc_timeout;
740 				if (!conn->out)
741 					timeo *= 2;
742 			} else {
743 				timeo = msecs_to_jiffies(10);
744 			}
745 			break;
746 
747 		case AMP_LINK:
748 			timeo = conn->disc_timeout;
749 			break;
750 
751 		default:
752 			timeo = msecs_to_jiffies(10);
753 			break;
754 		}
755 
756 		cancel_delayed_work(&conn->disc_work);
757 		queue_delayed_work(conn->hdev->workqueue,
758 				   &conn->disc_work, timeo);
759 	}
760 }
761 
762 /* ----- HCI Devices ----- */
763 static inline void hci_dev_put(struct hci_dev *d)
764 {
765 	BT_DBG("%s orig refcnt %d", d->name,
766 	       atomic_read(&d->dev.kobj.kref.refcount));
767 
768 	put_device(&d->dev);
769 }
770 
771 static inline struct hci_dev *hci_dev_hold(struct hci_dev *d)
772 {
773 	BT_DBG("%s orig refcnt %d", d->name,
774 	       atomic_read(&d->dev.kobj.kref.refcount));
775 
776 	get_device(&d->dev);
777 	return d;
778 }
779 
780 #define hci_dev_lock(d)		mutex_lock(&d->lock)
781 #define hci_dev_unlock(d)	mutex_unlock(&d->lock)
782 
783 #define to_hci_dev(d) container_of(d, struct hci_dev, dev)
784 #define to_hci_conn(c) container_of(c, struct hci_conn, dev)
785 
786 static inline void *hci_get_drvdata(struct hci_dev *hdev)
787 {
788 	return dev_get_drvdata(&hdev->dev);
789 }
790 
791 static inline void hci_set_drvdata(struct hci_dev *hdev, void *data)
792 {
793 	dev_set_drvdata(&hdev->dev, data);
794 }
795 
796 struct hci_dev *hci_dev_get(int index);
797 struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src);
798 
799 struct hci_dev *hci_alloc_dev(void);
800 void hci_free_dev(struct hci_dev *hdev);
801 int hci_register_dev(struct hci_dev *hdev);
802 void hci_unregister_dev(struct hci_dev *hdev);
803 int hci_suspend_dev(struct hci_dev *hdev);
804 int hci_resume_dev(struct hci_dev *hdev);
805 int hci_dev_open(__u16 dev);
806 int hci_dev_close(__u16 dev);
807 int hci_dev_reset(__u16 dev);
808 int hci_dev_reset_stat(__u16 dev);
809 int hci_dev_cmd(unsigned int cmd, void __user *arg);
810 int hci_get_dev_list(void __user *arg);
811 int hci_get_dev_info(void __user *arg);
812 int hci_get_conn_list(void __user *arg);
813 int hci_get_conn_info(struct hci_dev *hdev, void __user *arg);
814 int hci_get_auth_info(struct hci_dev *hdev, void __user *arg);
815 int hci_inquiry(void __user *arg);
816 
817 struct bdaddr_list *hci_blacklist_lookup(struct hci_dev *hdev,
818 					 bdaddr_t *bdaddr, u8 type);
819 int hci_blacklist_add(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type);
820 int hci_blacklist_del(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type);
821 
822 struct bdaddr_list *hci_white_list_lookup(struct hci_dev *hdev,
823 					  bdaddr_t *bdaddr, u8 type);
824 void hci_white_list_clear(struct hci_dev *hdev);
825 int hci_white_list_add(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type);
826 int hci_white_list_del(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type);
827 
828 struct hci_conn_params *hci_conn_params_lookup(struct hci_dev *hdev,
829 					       bdaddr_t *addr, u8 addr_type);
830 int hci_conn_params_add(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type,
831 			u8 auto_connect, u16 conn_min_interval,
832 			u16 conn_max_interval);
833 void hci_conn_params_del(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type);
834 void hci_conn_params_clear(struct hci_dev *hdev);
835 
836 struct bdaddr_list *hci_pend_le_conn_lookup(struct hci_dev *hdev,
837 					    bdaddr_t *addr, u8 addr_type);
838 void hci_pend_le_conn_add(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type);
839 void hci_pend_le_conn_del(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type);
840 void hci_pend_le_conns_clear(struct hci_dev *hdev);
841 
842 void hci_update_background_scan(struct hci_dev *hdev);
843 
844 void hci_uuids_clear(struct hci_dev *hdev);
845 
846 void hci_link_keys_clear(struct hci_dev *hdev);
847 struct link_key *hci_find_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr);
848 int hci_add_link_key(struct hci_dev *hdev, struct hci_conn *conn, int new_key,
849 		     bdaddr_t *bdaddr, u8 *val, u8 type, u8 pin_len);
850 struct smp_ltk *hci_find_ltk(struct hci_dev *hdev, __le16 ediv, __le64 rand,
851 			     bool master);
852 struct smp_ltk *hci_add_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr,
853 			    u8 addr_type, u8 type, u8 authenticated,
854 			    u8 tk[16], u8 enc_size, __le16 ediv, __le64 rand);
855 struct smp_ltk *hci_find_ltk_by_addr(struct hci_dev *hdev, bdaddr_t *bdaddr,
856 				     u8 addr_type, bool master);
857 int hci_remove_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 bdaddr_type);
858 void hci_smp_ltks_clear(struct hci_dev *hdev);
859 int hci_remove_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr);
860 
861 struct smp_irk *hci_find_irk_by_rpa(struct hci_dev *hdev, bdaddr_t *rpa);
862 struct smp_irk *hci_find_irk_by_addr(struct hci_dev *hdev, bdaddr_t *bdaddr,
863 				     u8 addr_type);
864 struct smp_irk *hci_add_irk(struct hci_dev *hdev, bdaddr_t *bdaddr,
865 			    u8 addr_type, u8 val[16], bdaddr_t *rpa);
866 void hci_remove_irk(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 addr_type);
867 void hci_smp_irks_clear(struct hci_dev *hdev);
868 
869 void hci_remote_oob_data_clear(struct hci_dev *hdev);
870 struct oob_data *hci_find_remote_oob_data(struct hci_dev *hdev,
871 					  bdaddr_t *bdaddr);
872 int hci_add_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr,
873 			    u8 *hash, u8 *randomizer);
874 int hci_add_remote_oob_ext_data(struct hci_dev *hdev, bdaddr_t *bdaddr,
875 				u8 *hash192, u8 *randomizer192,
876 				u8 *hash256, u8 *randomizer256);
877 int hci_remove_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr);
878 
879 void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb);
880 
881 int hci_recv_frame(struct hci_dev *hdev, struct sk_buff *skb);
882 int hci_recv_fragment(struct hci_dev *hdev, int type, void *data, int count);
883 int hci_recv_stream_fragment(struct hci_dev *hdev, void *data, int count);
884 
885 void hci_init_sysfs(struct hci_dev *hdev);
886 void hci_conn_init_sysfs(struct hci_conn *conn);
887 void hci_conn_add_sysfs(struct hci_conn *conn);
888 void hci_conn_del_sysfs(struct hci_conn *conn);
889 
890 #define SET_HCIDEV_DEV(hdev, pdev) ((hdev)->dev.parent = (pdev))
891 
892 /* ----- LMP capabilities ----- */
893 #define lmp_encrypt_capable(dev)   ((dev)->features[0][0] & LMP_ENCRYPT)
894 #define lmp_rswitch_capable(dev)   ((dev)->features[0][0] & LMP_RSWITCH)
895 #define lmp_hold_capable(dev)      ((dev)->features[0][0] & LMP_HOLD)
896 #define lmp_sniff_capable(dev)     ((dev)->features[0][0] & LMP_SNIFF)
897 #define lmp_park_capable(dev)      ((dev)->features[0][1] & LMP_PARK)
898 #define lmp_inq_rssi_capable(dev)  ((dev)->features[0][3] & LMP_RSSI_INQ)
899 #define lmp_esco_capable(dev)      ((dev)->features[0][3] & LMP_ESCO)
900 #define lmp_bredr_capable(dev)     (!((dev)->features[0][4] & LMP_NO_BREDR))
901 #define lmp_le_capable(dev)        ((dev)->features[0][4] & LMP_LE)
902 #define lmp_sniffsubr_capable(dev) ((dev)->features[0][5] & LMP_SNIFF_SUBR)
903 #define lmp_pause_enc_capable(dev) ((dev)->features[0][5] & LMP_PAUSE_ENC)
904 #define lmp_ext_inq_capable(dev)   ((dev)->features[0][6] & LMP_EXT_INQ)
905 #define lmp_le_br_capable(dev)     (!!((dev)->features[0][6] & LMP_SIMUL_LE_BR))
906 #define lmp_ssp_capable(dev)       ((dev)->features[0][6] & LMP_SIMPLE_PAIR)
907 #define lmp_no_flush_capable(dev)  ((dev)->features[0][6] & LMP_NO_FLUSH)
908 #define lmp_lsto_capable(dev)      ((dev)->features[0][7] & LMP_LSTO)
909 #define lmp_inq_tx_pwr_capable(dev) ((dev)->features[0][7] & LMP_INQ_TX_PWR)
910 #define lmp_ext_feat_capable(dev)  ((dev)->features[0][7] & LMP_EXTFEATURES)
911 #define lmp_transp_capable(dev)    ((dev)->features[0][2] & LMP_TRANSPARENT)
912 
913 /* ----- Extended LMP capabilities ----- */
914 #define lmp_csb_master_capable(dev) ((dev)->features[2][0] & LMP_CSB_MASTER)
915 #define lmp_csb_slave_capable(dev)  ((dev)->features[2][0] & LMP_CSB_SLAVE)
916 #define lmp_sync_train_capable(dev) ((dev)->features[2][0] & LMP_SYNC_TRAIN)
917 #define lmp_sync_scan_capable(dev)  ((dev)->features[2][0] & LMP_SYNC_SCAN)
918 #define lmp_sc_capable(dev)         ((dev)->features[2][1] & LMP_SC)
919 #define lmp_ping_capable(dev)       ((dev)->features[2][1] & LMP_PING)
920 
921 /* ----- Host capabilities ----- */
922 #define lmp_host_ssp_capable(dev)  ((dev)->features[1][0] & LMP_HOST_SSP)
923 #define lmp_host_sc_capable(dev)   ((dev)->features[1][0] & LMP_HOST_SC)
924 #define lmp_host_le_capable(dev)   (!!((dev)->features[1][0] & LMP_HOST_LE))
925 #define lmp_host_le_br_capable(dev) (!!((dev)->features[1][0] & LMP_HOST_LE_BREDR))
926 
927 /* ----- HCI protocols ----- */
928 #define HCI_PROTO_DEFER             0x01
929 
930 static inline int hci_proto_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr,
931 					__u8 type, __u8 *flags)
932 {
933 	switch (type) {
934 	case ACL_LINK:
935 		return l2cap_connect_ind(hdev, bdaddr);
936 
937 	case SCO_LINK:
938 	case ESCO_LINK:
939 		return sco_connect_ind(hdev, bdaddr, flags);
940 
941 	default:
942 		BT_ERR("unknown link type %d", type);
943 		return -EINVAL;
944 	}
945 }
946 
947 static inline void hci_proto_connect_cfm(struct hci_conn *conn, __u8 status)
948 {
949 	switch (conn->type) {
950 	case ACL_LINK:
951 	case LE_LINK:
952 		l2cap_connect_cfm(conn, status);
953 		break;
954 
955 	case SCO_LINK:
956 	case ESCO_LINK:
957 		sco_connect_cfm(conn, status);
958 		break;
959 
960 	default:
961 		BT_ERR("unknown link type %d", conn->type);
962 		break;
963 	}
964 
965 	if (conn->connect_cfm_cb)
966 		conn->connect_cfm_cb(conn, status);
967 }
968 
969 static inline int hci_proto_disconn_ind(struct hci_conn *conn)
970 {
971 	if (conn->type != ACL_LINK && conn->type != LE_LINK)
972 		return HCI_ERROR_REMOTE_USER_TERM;
973 
974 	return l2cap_disconn_ind(conn);
975 }
976 
977 static inline void hci_proto_disconn_cfm(struct hci_conn *conn, __u8 reason)
978 {
979 	switch (conn->type) {
980 	case ACL_LINK:
981 	case LE_LINK:
982 		l2cap_disconn_cfm(conn, reason);
983 		break;
984 
985 	case SCO_LINK:
986 	case ESCO_LINK:
987 		sco_disconn_cfm(conn, reason);
988 		break;
989 
990 	/* L2CAP would be handled for BREDR chan */
991 	case AMP_LINK:
992 		break;
993 
994 	default:
995 		BT_ERR("unknown link type %d", conn->type);
996 		break;
997 	}
998 
999 	if (conn->disconn_cfm_cb)
1000 		conn->disconn_cfm_cb(conn, reason);
1001 }
1002 
1003 static inline void hci_proto_auth_cfm(struct hci_conn *conn, __u8 status)
1004 {
1005 	__u8 encrypt;
1006 
1007 	if (conn->type != ACL_LINK && conn->type != LE_LINK)
1008 		return;
1009 
1010 	if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags))
1011 		return;
1012 
1013 	encrypt = (conn->link_mode & HCI_LM_ENCRYPT) ? 0x01 : 0x00;
1014 	l2cap_security_cfm(conn, status, encrypt);
1015 
1016 	if (conn->security_cfm_cb)
1017 		conn->security_cfm_cb(conn, status);
1018 }
1019 
1020 static inline void hci_proto_encrypt_cfm(struct hci_conn *conn, __u8 status,
1021 								__u8 encrypt)
1022 {
1023 	if (conn->type != ACL_LINK && conn->type != LE_LINK)
1024 		return;
1025 
1026 	l2cap_security_cfm(conn, status, encrypt);
1027 
1028 	if (conn->security_cfm_cb)
1029 		conn->security_cfm_cb(conn, status);
1030 }
1031 
1032 /* ----- HCI callbacks ----- */
1033 struct hci_cb {
1034 	struct list_head list;
1035 
1036 	char *name;
1037 
1038 	void (*security_cfm)	(struct hci_conn *conn, __u8 status,
1039 								__u8 encrypt);
1040 	void (*key_change_cfm)	(struct hci_conn *conn, __u8 status);
1041 	void (*role_switch_cfm)	(struct hci_conn *conn, __u8 status, __u8 role);
1042 };
1043 
1044 static inline void hci_auth_cfm(struct hci_conn *conn, __u8 status)
1045 {
1046 	struct hci_cb *cb;
1047 	__u8 encrypt;
1048 
1049 	hci_proto_auth_cfm(conn, status);
1050 
1051 	if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags))
1052 		return;
1053 
1054 	encrypt = (conn->link_mode & HCI_LM_ENCRYPT) ? 0x01 : 0x00;
1055 
1056 	read_lock(&hci_cb_list_lock);
1057 	list_for_each_entry(cb, &hci_cb_list, list) {
1058 		if (cb->security_cfm)
1059 			cb->security_cfm(conn, status, encrypt);
1060 	}
1061 	read_unlock(&hci_cb_list_lock);
1062 }
1063 
1064 static inline void hci_encrypt_cfm(struct hci_conn *conn, __u8 status,
1065 								__u8 encrypt)
1066 {
1067 	struct hci_cb *cb;
1068 
1069 	if (conn->sec_level == BT_SECURITY_SDP)
1070 		conn->sec_level = BT_SECURITY_LOW;
1071 
1072 	if (conn->pending_sec_level > conn->sec_level)
1073 		conn->sec_level = conn->pending_sec_level;
1074 
1075 	hci_proto_encrypt_cfm(conn, status, encrypt);
1076 
1077 	read_lock(&hci_cb_list_lock);
1078 	list_for_each_entry(cb, &hci_cb_list, list) {
1079 		if (cb->security_cfm)
1080 			cb->security_cfm(conn, status, encrypt);
1081 	}
1082 	read_unlock(&hci_cb_list_lock);
1083 }
1084 
1085 static inline void hci_key_change_cfm(struct hci_conn *conn, __u8 status)
1086 {
1087 	struct hci_cb *cb;
1088 
1089 	read_lock(&hci_cb_list_lock);
1090 	list_for_each_entry(cb, &hci_cb_list, list) {
1091 		if (cb->key_change_cfm)
1092 			cb->key_change_cfm(conn, status);
1093 	}
1094 	read_unlock(&hci_cb_list_lock);
1095 }
1096 
1097 static inline void hci_role_switch_cfm(struct hci_conn *conn, __u8 status,
1098 								__u8 role)
1099 {
1100 	struct hci_cb *cb;
1101 
1102 	read_lock(&hci_cb_list_lock);
1103 	list_for_each_entry(cb, &hci_cb_list, list) {
1104 		if (cb->role_switch_cfm)
1105 			cb->role_switch_cfm(conn, status, role);
1106 	}
1107 	read_unlock(&hci_cb_list_lock);
1108 }
1109 
1110 static inline bool eir_has_data_type(u8 *data, size_t data_len, u8 type)
1111 {
1112 	size_t parsed = 0;
1113 
1114 	if (data_len < 2)
1115 		return false;
1116 
1117 	while (parsed < data_len - 1) {
1118 		u8 field_len = data[0];
1119 
1120 		if (field_len == 0)
1121 			break;
1122 
1123 		parsed += field_len + 1;
1124 
1125 		if (parsed > data_len)
1126 			break;
1127 
1128 		if (data[1] == type)
1129 			return true;
1130 
1131 		data += field_len + 1;
1132 	}
1133 
1134 	return false;
1135 }
1136 
1137 static inline bool hci_bdaddr_is_rpa(bdaddr_t *bdaddr, u8 addr_type)
1138 {
1139 	if (addr_type != 0x01)
1140 		return false;
1141 
1142 	if ((bdaddr->b[5] & 0xc0) == 0x40)
1143 	       return true;
1144 
1145 	return false;
1146 }
1147 
1148 static inline struct smp_irk *hci_get_irk(struct hci_dev *hdev,
1149 					  bdaddr_t *bdaddr, u8 addr_type)
1150 {
1151 	if (!hci_bdaddr_is_rpa(bdaddr, addr_type))
1152 		return NULL;
1153 
1154 	return hci_find_irk_by_rpa(hdev, bdaddr);
1155 }
1156 
1157 int hci_register_cb(struct hci_cb *hcb);
1158 int hci_unregister_cb(struct hci_cb *hcb);
1159 
1160 struct hci_request {
1161 	struct hci_dev		*hdev;
1162 	struct sk_buff_head	cmd_q;
1163 
1164 	/* If something goes wrong when building the HCI request, the error
1165 	 * value is stored in this field.
1166 	 */
1167 	int			err;
1168 };
1169 
1170 void hci_req_init(struct hci_request *req, struct hci_dev *hdev);
1171 int hci_req_run(struct hci_request *req, hci_req_complete_t complete);
1172 void hci_req_add(struct hci_request *req, u16 opcode, u32 plen,
1173 		 const void *param);
1174 void hci_req_add_ev(struct hci_request *req, u16 opcode, u32 plen,
1175 		    const void *param, u8 event);
1176 void hci_req_cmd_complete(struct hci_dev *hdev, u16 opcode, u8 status);
1177 
1178 void hci_req_add_le_scan_disable(struct hci_request *req);
1179 void hci_req_add_le_passive_scan(struct hci_request *req);
1180 
1181 struct sk_buff *__hci_cmd_sync(struct hci_dev *hdev, u16 opcode, u32 plen,
1182 			       const void *param, u32 timeout);
1183 struct sk_buff *__hci_cmd_sync_ev(struct hci_dev *hdev, u16 opcode, u32 plen,
1184 				  const void *param, u8 event, u32 timeout);
1185 
1186 int hci_send_cmd(struct hci_dev *hdev, __u16 opcode, __u32 plen,
1187 		 const void *param);
1188 void hci_send_acl(struct hci_chan *chan, struct sk_buff *skb, __u16 flags);
1189 void hci_send_sco(struct hci_conn *conn, struct sk_buff *skb);
1190 
1191 void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 opcode);
1192 
1193 /* ----- HCI Sockets ----- */
1194 void hci_send_to_sock(struct hci_dev *hdev, struct sk_buff *skb);
1195 void hci_send_to_control(struct sk_buff *skb, struct sock *skip_sk);
1196 void hci_send_to_monitor(struct hci_dev *hdev, struct sk_buff *skb);
1197 
1198 void hci_sock_dev_event(struct hci_dev *hdev, int event);
1199 
1200 /* Management interface */
1201 #define DISCOV_TYPE_BREDR		(BIT(BDADDR_BREDR))
1202 #define DISCOV_TYPE_LE			(BIT(BDADDR_LE_PUBLIC) | \
1203 					 BIT(BDADDR_LE_RANDOM))
1204 #define DISCOV_TYPE_INTERLEAVED		(BIT(BDADDR_BREDR) | \
1205 					 BIT(BDADDR_LE_PUBLIC) | \
1206 					 BIT(BDADDR_LE_RANDOM))
1207 
1208 /* These LE scan and inquiry parameters were chosen according to LE General
1209  * Discovery Procedure specification.
1210  */
1211 #define DISCOV_LE_SCAN_WIN		0x12
1212 #define DISCOV_LE_SCAN_INT		0x12
1213 #define DISCOV_LE_TIMEOUT		10240	/* msec */
1214 #define DISCOV_INTERLEAVED_TIMEOUT	5120	/* msec */
1215 #define DISCOV_INTERLEAVED_INQUIRY_LEN	0x04
1216 #define DISCOV_BREDR_INQUIRY_LEN	0x08
1217 
1218 int mgmt_control(struct sock *sk, struct msghdr *msg, size_t len);
1219 void mgmt_index_added(struct hci_dev *hdev);
1220 void mgmt_index_removed(struct hci_dev *hdev);
1221 void mgmt_set_powered_failed(struct hci_dev *hdev, int err);
1222 int mgmt_powered(struct hci_dev *hdev, u8 powered);
1223 void mgmt_discoverable_timeout(struct hci_dev *hdev);
1224 void mgmt_discoverable(struct hci_dev *hdev, u8 discoverable);
1225 void mgmt_connectable(struct hci_dev *hdev, u8 connectable);
1226 void mgmt_advertising(struct hci_dev *hdev, u8 advertising);
1227 void mgmt_write_scan_failed(struct hci_dev *hdev, u8 scan, u8 status);
1228 void mgmt_new_link_key(struct hci_dev *hdev, struct link_key *key,
1229 		       bool persistent);
1230 void mgmt_device_connected(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
1231 			   u8 addr_type, u32 flags, u8 *name, u8 name_len,
1232 			   u8 *dev_class);
1233 void mgmt_device_disconnected(struct hci_dev *hdev, bdaddr_t *bdaddr,
1234 			      u8 link_type, u8 addr_type, u8 reason,
1235 			      bool mgmt_connected);
1236 void mgmt_disconnect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr,
1237 			    u8 link_type, u8 addr_type, u8 status);
1238 void mgmt_connect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
1239 			 u8 addr_type, u8 status);
1240 void mgmt_pin_code_request(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 secure);
1241 void mgmt_pin_code_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
1242 				  u8 status);
1243 void mgmt_pin_code_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
1244 				      u8 status);
1245 int mgmt_user_confirm_request(struct hci_dev *hdev, bdaddr_t *bdaddr,
1246 			      u8 link_type, u8 addr_type, u32 value,
1247 			      u8 confirm_hint);
1248 int mgmt_user_confirm_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
1249 				     u8 link_type, u8 addr_type, u8 status);
1250 int mgmt_user_confirm_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
1251 					 u8 link_type, u8 addr_type, u8 status);
1252 int mgmt_user_passkey_request(struct hci_dev *hdev, bdaddr_t *bdaddr,
1253 			      u8 link_type, u8 addr_type);
1254 int mgmt_user_passkey_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
1255 				     u8 link_type, u8 addr_type, u8 status);
1256 int mgmt_user_passkey_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
1257 					 u8 link_type, u8 addr_type, u8 status);
1258 int mgmt_user_passkey_notify(struct hci_dev *hdev, bdaddr_t *bdaddr,
1259 			     u8 link_type, u8 addr_type, u32 passkey,
1260 			     u8 entered);
1261 void mgmt_auth_failed(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
1262 		      u8 addr_type, u8 status);
1263 void mgmt_auth_enable_complete(struct hci_dev *hdev, u8 status);
1264 void mgmt_ssp_enable_complete(struct hci_dev *hdev, u8 enable, u8 status);
1265 void mgmt_sc_enable_complete(struct hci_dev *hdev, u8 enable, u8 status);
1266 void mgmt_set_class_of_dev_complete(struct hci_dev *hdev, u8 *dev_class,
1267 				    u8 status);
1268 void mgmt_set_local_name_complete(struct hci_dev *hdev, u8 *name, u8 status);
1269 void mgmt_read_local_oob_data_complete(struct hci_dev *hdev, u8 *hash192,
1270 				       u8 *randomizer192, u8 *hash256,
1271 				       u8 *randomizer256, u8 status);
1272 void mgmt_device_found(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
1273 		       u8 addr_type, u8 *dev_class, s8 rssi, u8 cfm_name,
1274 		       u8 ssp, u8 *eir, u16 eir_len, u8 *scan_rsp,
1275 		       u8 scan_rsp_len);
1276 void mgmt_remote_name(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
1277 		      u8 addr_type, s8 rssi, u8 *name, u8 name_len);
1278 void mgmt_discovering(struct hci_dev *hdev, u8 discovering);
1279 int mgmt_device_blocked(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type);
1280 int mgmt_device_unblocked(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type);
1281 void mgmt_new_ltk(struct hci_dev *hdev, struct smp_ltk *key, bool persistent);
1282 void mgmt_new_irk(struct hci_dev *hdev, struct smp_irk *irk);
1283 void mgmt_new_csrk(struct hci_dev *hdev, struct smp_csrk *csrk,
1284 		   bool persistent);
1285 void mgmt_reenable_advertising(struct hci_dev *hdev);
1286 void mgmt_smp_complete(struct hci_conn *conn, bool complete);
1287 
1288 /* HCI info for socket */
1289 #define hci_pi(sk) ((struct hci_pinfo *) sk)
1290 
1291 struct hci_pinfo {
1292 	struct bt_sock    bt;
1293 	struct hci_dev    *hdev;
1294 	struct hci_filter filter;
1295 	__u32             cmsg_mask;
1296 	unsigned short   channel;
1297 };
1298 
1299 /* HCI security filter */
1300 #define HCI_SFLT_MAX_OGF  5
1301 
1302 struct hci_sec_filter {
1303 	__u32 type_mask;
1304 	__u32 event_mask[2];
1305 	__u32 ocf_mask[HCI_SFLT_MAX_OGF + 1][4];
1306 };
1307 
1308 /* ----- HCI requests ----- */
1309 #define HCI_REQ_DONE	  0
1310 #define HCI_REQ_PEND	  1
1311 #define HCI_REQ_CANCELED  2
1312 
1313 #define hci_req_lock(d)		mutex_lock(&d->req_lock)
1314 #define hci_req_unlock(d)	mutex_unlock(&d->req_lock)
1315 
1316 void hci_le_conn_update(struct hci_conn *conn, u16 min, u16 max,
1317 					u16 latency, u16 to_multiplier);
1318 void hci_le_start_enc(struct hci_conn *conn, __le16 ediv, __le64 rand,
1319 							__u8 ltk[16]);
1320 
1321 int hci_update_random_address(struct hci_request *req, bool require_privacy,
1322 			      u8 *own_addr_type);
1323 void hci_copy_identity_address(struct hci_dev *hdev, bdaddr_t *bdaddr,
1324 			       u8 *bdaddr_type);
1325 
1326 #define SCO_AIRMODE_MASK       0x0003
1327 #define SCO_AIRMODE_CVSD       0x0000
1328 #define SCO_AIRMODE_TRANSP     0x0003
1329 
1330 #endif /* __HCI_CORE_H */
1331