xref: /openbmc/linux/include/net/bluetooth/hci_core.h (revision dc6a81c3)
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 <linux/leds.h>
29 #include <linux/rculist.h>
30 
31 #include <net/bluetooth/hci.h>
32 #include <net/bluetooth/hci_sock.h>
33 
34 /* HCI priority */
35 #define HCI_PRIO_MAX	7
36 
37 /* HCI Core structures */
38 struct inquiry_data {
39 	bdaddr_t	bdaddr;
40 	__u8		pscan_rep_mode;
41 	__u8		pscan_period_mode;
42 	__u8		pscan_mode;
43 	__u8		dev_class[3];
44 	__le16		clock_offset;
45 	__s8		rssi;
46 	__u8		ssp_mode;
47 };
48 
49 struct inquiry_entry {
50 	struct list_head	all;		/* inq_cache.all */
51 	struct list_head	list;		/* unknown or resolve */
52 	enum {
53 		NAME_NOT_KNOWN,
54 		NAME_NEEDED,
55 		NAME_PENDING,
56 		NAME_KNOWN,
57 	} name_state;
58 	__u32			timestamp;
59 	struct inquiry_data	data;
60 };
61 
62 struct discovery_state {
63 	int			type;
64 	enum {
65 		DISCOVERY_STOPPED,
66 		DISCOVERY_STARTING,
67 		DISCOVERY_FINDING,
68 		DISCOVERY_RESOLVING,
69 		DISCOVERY_STOPPING,
70 	} state;
71 	struct list_head	all;	/* All devices found during inquiry */
72 	struct list_head	unknown;	/* Name state not known */
73 	struct list_head	resolve;	/* Name needs to be resolved */
74 	__u32			timestamp;
75 	bdaddr_t		last_adv_addr;
76 	u8			last_adv_addr_type;
77 	s8			last_adv_rssi;
78 	u32			last_adv_flags;
79 	u8			last_adv_data[HCI_MAX_AD_LENGTH];
80 	u8			last_adv_data_len;
81 	bool			report_invalid_rssi;
82 	bool			result_filtering;
83 	bool			limited;
84 	s8			rssi;
85 	u16			uuid_count;
86 	u8			(*uuids)[16];
87 	unsigned long		scan_start;
88 	unsigned long		scan_duration;
89 };
90 
91 struct hci_conn_hash {
92 	struct list_head list;
93 	unsigned int     acl_num;
94 	unsigned int     amp_num;
95 	unsigned int     sco_num;
96 	unsigned int     le_num;
97 	unsigned int     le_num_slave;
98 };
99 
100 struct bdaddr_list {
101 	struct list_head list;
102 	bdaddr_t bdaddr;
103 	u8 bdaddr_type;
104 };
105 
106 struct bdaddr_list_with_irk {
107 	struct list_head list;
108 	bdaddr_t bdaddr;
109 	u8 bdaddr_type;
110 	u8 peer_irk[16];
111 	u8 local_irk[16];
112 };
113 
114 struct bt_uuid {
115 	struct list_head list;
116 	u8 uuid[16];
117 	u8 size;
118 	u8 svc_hint;
119 };
120 
121 struct blocked_key {
122 	struct list_head list;
123 	struct rcu_head rcu;
124 	u8 type;
125 	u8 val[16];
126 };
127 
128 struct smp_csrk {
129 	bdaddr_t bdaddr;
130 	u8 bdaddr_type;
131 	u8 type;
132 	u8 val[16];
133 };
134 
135 struct smp_ltk {
136 	struct list_head list;
137 	struct rcu_head rcu;
138 	bdaddr_t bdaddr;
139 	u8 bdaddr_type;
140 	u8 authenticated;
141 	u8 type;
142 	u8 enc_size;
143 	__le16 ediv;
144 	__le64 rand;
145 	u8 val[16];
146 };
147 
148 struct smp_irk {
149 	struct list_head list;
150 	struct rcu_head rcu;
151 	bdaddr_t rpa;
152 	bdaddr_t bdaddr;
153 	u8 addr_type;
154 	u8 val[16];
155 };
156 
157 struct link_key {
158 	struct list_head list;
159 	struct rcu_head rcu;
160 	bdaddr_t bdaddr;
161 	u8 type;
162 	u8 val[HCI_LINK_KEY_SIZE];
163 	u8 pin_len;
164 };
165 
166 struct oob_data {
167 	struct list_head list;
168 	bdaddr_t bdaddr;
169 	u8 bdaddr_type;
170 	u8 present;
171 	u8 hash192[16];
172 	u8 rand192[16];
173 	u8 hash256[16];
174 	u8 rand256[16];
175 };
176 
177 struct adv_info {
178 	struct list_head list;
179 	bool pending;
180 	__u8	instance;
181 	__u32	flags;
182 	__u16	timeout;
183 	__u16	remaining_time;
184 	__u16	duration;
185 	__u16	adv_data_len;
186 	__u8	adv_data[HCI_MAX_AD_LENGTH];
187 	__u16	scan_rsp_len;
188 	__u8	scan_rsp_data[HCI_MAX_AD_LENGTH];
189 	__s8	tx_power;
190 	bdaddr_t	random_addr;
191 	bool 		rpa_expired;
192 	struct delayed_work	rpa_expired_cb;
193 };
194 
195 #define HCI_MAX_ADV_INSTANCES		5
196 #define HCI_DEFAULT_ADV_DURATION	2
197 
198 #define HCI_MAX_SHORT_NAME_LENGTH	10
199 
200 /* Min encryption key size to match with SMP */
201 #define HCI_MIN_ENC_KEY_SIZE		7
202 
203 /* Default LE RPA expiry time, 15 minutes */
204 #define HCI_DEFAULT_RPA_TIMEOUT		(15 * 60)
205 
206 /* Default min/max age of connection information (1s/3s) */
207 #define DEFAULT_CONN_INFO_MIN_AGE	1000
208 #define DEFAULT_CONN_INFO_MAX_AGE	3000
209 /* Default authenticated payload timeout 30s */
210 #define DEFAULT_AUTH_PAYLOAD_TIMEOUT   0x0bb8
211 
212 struct amp_assoc {
213 	__u16	len;
214 	__u16	offset;
215 	__u16	rem_len;
216 	__u16	len_so_far;
217 	__u8	data[HCI_MAX_AMP_ASSOC_SIZE];
218 };
219 
220 #define HCI_MAX_PAGES	3
221 
222 struct hci_dev {
223 	struct list_head list;
224 	struct mutex	lock;
225 
226 	char		name[8];
227 	unsigned long	flags;
228 	__u16		id;
229 	__u8		bus;
230 	__u8		dev_type;
231 	bdaddr_t	bdaddr;
232 	bdaddr_t	setup_addr;
233 	bdaddr_t	public_addr;
234 	bdaddr_t	random_addr;
235 	bdaddr_t	static_addr;
236 	__u8		adv_addr_type;
237 	__u8		dev_name[HCI_MAX_NAME_LENGTH];
238 	__u8		short_name[HCI_MAX_SHORT_NAME_LENGTH];
239 	__u8		eir[HCI_MAX_EIR_LENGTH];
240 	__u16		appearance;
241 	__u8		dev_class[3];
242 	__u8		major_class;
243 	__u8		minor_class;
244 	__u8		max_page;
245 	__u8		features[HCI_MAX_PAGES][8];
246 	__u8		le_features[8];
247 	__u8		le_white_list_size;
248 	__u8		le_resolv_list_size;
249 	__u8		le_num_of_adv_sets;
250 	__u8		le_states[8];
251 	__u8		commands[64];
252 	__u8		hci_ver;
253 	__u16		hci_rev;
254 	__u8		lmp_ver;
255 	__u16		manufacturer;
256 	__u16		lmp_subver;
257 	__u16		voice_setting;
258 	__u8		num_iac;
259 	__u8		stored_max_keys;
260 	__u8		stored_num_keys;
261 	__u8		io_capability;
262 	__s8		inq_tx_power;
263 	__u16		page_scan_interval;
264 	__u16		page_scan_window;
265 	__u8		page_scan_type;
266 	__u8		le_adv_channel_map;
267 	__u16		le_adv_min_interval;
268 	__u16		le_adv_max_interval;
269 	__u8		le_scan_type;
270 	__u16		le_scan_interval;
271 	__u16		le_scan_window;
272 	__u16		le_conn_min_interval;
273 	__u16		le_conn_max_interval;
274 	__u16		le_conn_latency;
275 	__u16		le_supv_timeout;
276 	__u16		le_def_tx_len;
277 	__u16		le_def_tx_time;
278 	__u16		le_max_tx_len;
279 	__u16		le_max_tx_time;
280 	__u16		le_max_rx_len;
281 	__u16		le_max_rx_time;
282 	__u8		le_max_key_size;
283 	__u8		le_min_key_size;
284 	__u16		discov_interleaved_timeout;
285 	__u16		conn_info_min_age;
286 	__u16		conn_info_max_age;
287 	__u16		auth_payload_timeout;
288 	__u8		min_enc_key_size;
289 	__u8		ssp_debug_mode;
290 	__u8		hw_error_code;
291 	__u32		clock;
292 
293 	__u16		devid_source;
294 	__u16		devid_vendor;
295 	__u16		devid_product;
296 	__u16		devid_version;
297 
298 	__u16		pkt_type;
299 	__u16		esco_type;
300 	__u16		link_policy;
301 	__u16		link_mode;
302 
303 	__u32		idle_timeout;
304 	__u16		sniff_min_interval;
305 	__u16		sniff_max_interval;
306 
307 	__u8		amp_status;
308 	__u32		amp_total_bw;
309 	__u32		amp_max_bw;
310 	__u32		amp_min_latency;
311 	__u32		amp_max_pdu;
312 	__u8		amp_type;
313 	__u16		amp_pal_cap;
314 	__u16		amp_assoc_size;
315 	__u32		amp_max_flush_to;
316 	__u32		amp_be_flush_to;
317 
318 	struct amp_assoc	loc_assoc;
319 
320 	__u8		flow_ctl_mode;
321 
322 	unsigned int	auto_accept_delay;
323 
324 	unsigned long	quirks;
325 
326 	atomic_t	cmd_cnt;
327 	unsigned int	acl_cnt;
328 	unsigned int	sco_cnt;
329 	unsigned int	le_cnt;
330 
331 	unsigned int	acl_mtu;
332 	unsigned int	sco_mtu;
333 	unsigned int	le_mtu;
334 	unsigned int	acl_pkts;
335 	unsigned int	sco_pkts;
336 	unsigned int	le_pkts;
337 
338 	__u16		block_len;
339 	__u16		block_mtu;
340 	__u16		num_blocks;
341 	__u16		block_cnt;
342 
343 	unsigned long	acl_last_tx;
344 	unsigned long	sco_last_tx;
345 	unsigned long	le_last_tx;
346 
347 	__u8		le_tx_def_phys;
348 	__u8		le_rx_def_phys;
349 
350 	struct workqueue_struct	*workqueue;
351 	struct workqueue_struct	*req_workqueue;
352 
353 	struct work_struct	power_on;
354 	struct delayed_work	power_off;
355 	struct work_struct	error_reset;
356 
357 	__u16			discov_timeout;
358 	struct delayed_work	discov_off;
359 
360 	struct delayed_work	service_cache;
361 
362 	struct delayed_work	cmd_timer;
363 
364 	struct work_struct	rx_work;
365 	struct work_struct	cmd_work;
366 	struct work_struct	tx_work;
367 
368 	struct work_struct	discov_update;
369 	struct work_struct	bg_scan_update;
370 	struct work_struct	scan_update;
371 	struct work_struct	connectable_update;
372 	struct work_struct	discoverable_update;
373 	struct delayed_work	le_scan_disable;
374 	struct delayed_work	le_scan_restart;
375 
376 	struct sk_buff_head	rx_q;
377 	struct sk_buff_head	raw_q;
378 	struct sk_buff_head	cmd_q;
379 
380 	struct sk_buff		*sent_cmd;
381 
382 	struct mutex		req_lock;
383 	wait_queue_head_t	req_wait_q;
384 	__u32			req_status;
385 	__u32			req_result;
386 	struct sk_buff		*req_skb;
387 
388 	void			*smp_data;
389 	void			*smp_bredr_data;
390 
391 	struct discovery_state	discovery;
392 	struct hci_conn_hash	conn_hash;
393 
394 	struct list_head	mgmt_pending;
395 	struct list_head	blacklist;
396 	struct list_head	whitelist;
397 	struct list_head	uuids;
398 	struct list_head	link_keys;
399 	struct list_head	long_term_keys;
400 	struct list_head	identity_resolving_keys;
401 	struct list_head	remote_oob_data;
402 	struct list_head	le_white_list;
403 	struct list_head	le_resolv_list;
404 	struct list_head	le_conn_params;
405 	struct list_head	pend_le_conns;
406 	struct list_head	pend_le_reports;
407 	struct list_head	blocked_keys;
408 
409 	struct hci_dev_stats	stat;
410 
411 	atomic_t		promisc;
412 
413 	const char		*hw_info;
414 	const char		*fw_info;
415 	struct dentry		*debugfs;
416 
417 	struct device		dev;
418 
419 	struct rfkill		*rfkill;
420 
421 	DECLARE_BITMAP(dev_flags, __HCI_NUM_FLAGS);
422 
423 	__s8			adv_tx_power;
424 	__u8			adv_data[HCI_MAX_AD_LENGTH];
425 	__u8			adv_data_len;
426 	__u8			scan_rsp_data[HCI_MAX_AD_LENGTH];
427 	__u8			scan_rsp_data_len;
428 
429 	struct list_head	adv_instances;
430 	unsigned int		adv_instance_cnt;
431 	__u8			cur_adv_instance;
432 	__u16			adv_instance_timeout;
433 	struct delayed_work	adv_instance_expire;
434 
435 	__u8			irk[16];
436 	__u32			rpa_timeout;
437 	struct delayed_work	rpa_expired;
438 	bdaddr_t		rpa;
439 
440 #if IS_ENABLED(CONFIG_BT_LEDS)
441 	struct led_trigger	*power_led;
442 #endif
443 
444 	int (*open)(struct hci_dev *hdev);
445 	int (*close)(struct hci_dev *hdev);
446 	int (*flush)(struct hci_dev *hdev);
447 	int (*setup)(struct hci_dev *hdev);
448 	int (*shutdown)(struct hci_dev *hdev);
449 	int (*send)(struct hci_dev *hdev, struct sk_buff *skb);
450 	void (*notify)(struct hci_dev *hdev, unsigned int evt);
451 	void (*hw_error)(struct hci_dev *hdev, u8 code);
452 	int (*post_init)(struct hci_dev *hdev);
453 	int (*set_diag)(struct hci_dev *hdev, bool enable);
454 	int (*set_bdaddr)(struct hci_dev *hdev, const bdaddr_t *bdaddr);
455 	void (*cmd_timeout)(struct hci_dev *hdev);
456 };
457 
458 #define HCI_PHY_HANDLE(handle)	(handle & 0xff)
459 
460 struct hci_conn {
461 	struct list_head list;
462 
463 	atomic_t	refcnt;
464 
465 	bdaddr_t	dst;
466 	__u8		dst_type;
467 	bdaddr_t	src;
468 	__u8		src_type;
469 	bdaddr_t	init_addr;
470 	__u8		init_addr_type;
471 	bdaddr_t	resp_addr;
472 	__u8		resp_addr_type;
473 	__u16		handle;
474 	__u16		state;
475 	__u8		mode;
476 	__u8		type;
477 	__u8		role;
478 	bool		out;
479 	__u8		attempt;
480 	__u8		dev_class[3];
481 	__u8		features[HCI_MAX_PAGES][8];
482 	__u16		pkt_type;
483 	__u16		link_policy;
484 	__u8		key_type;
485 	__u8		auth_type;
486 	__u8		sec_level;
487 	__u8		pending_sec_level;
488 	__u8		pin_length;
489 	__u8		enc_key_size;
490 	__u8		io_capability;
491 	__u32		passkey_notify;
492 	__u8		passkey_entered;
493 	__u16		disc_timeout;
494 	__u16		conn_timeout;
495 	__u16		setting;
496 	__u16		auth_payload_timeout;
497 	__u16		le_conn_min_interval;
498 	__u16		le_conn_max_interval;
499 	__u16		le_conn_interval;
500 	__u16		le_conn_latency;
501 	__u16		le_supv_timeout;
502 	__u8		le_adv_data[HCI_MAX_AD_LENGTH];
503 	__u8		le_adv_data_len;
504 	__u8		le_tx_phy;
505 	__u8		le_rx_phy;
506 	__s8		rssi;
507 	__s8		tx_power;
508 	__s8		max_tx_power;
509 	unsigned long	flags;
510 
511 	__u32		clock;
512 	__u16		clock_accuracy;
513 
514 	unsigned long	conn_info_timestamp;
515 
516 	__u8		remote_cap;
517 	__u8		remote_auth;
518 	__u8		remote_id;
519 
520 	unsigned int	sent;
521 
522 	struct sk_buff_head data_q;
523 	struct list_head chan_list;
524 
525 	struct delayed_work disc_work;
526 	struct delayed_work auto_accept_work;
527 	struct delayed_work idle_work;
528 	struct delayed_work le_conn_timeout;
529 	struct work_struct  le_scan_cleanup;
530 
531 	struct device	dev;
532 	struct dentry	*debugfs;
533 
534 	struct hci_dev	*hdev;
535 	void		*l2cap_data;
536 	void		*sco_data;
537 	struct amp_mgr	*amp_mgr;
538 
539 	struct hci_conn	*link;
540 
541 	void (*connect_cfm_cb)	(struct hci_conn *conn, u8 status);
542 	void (*security_cfm_cb)	(struct hci_conn *conn, u8 status);
543 	void (*disconn_cfm_cb)	(struct hci_conn *conn, u8 reason);
544 };
545 
546 struct hci_chan {
547 	struct list_head list;
548 	__u16 handle;
549 	struct hci_conn *conn;
550 	struct sk_buff_head data_q;
551 	unsigned int	sent;
552 	__u8		state;
553 };
554 
555 struct hci_conn_params {
556 	struct list_head list;
557 	struct list_head action;
558 
559 	bdaddr_t addr;
560 	u8 addr_type;
561 
562 	u16 conn_min_interval;
563 	u16 conn_max_interval;
564 	u16 conn_latency;
565 	u16 supervision_timeout;
566 
567 	enum {
568 		HCI_AUTO_CONN_DISABLED,
569 		HCI_AUTO_CONN_REPORT,
570 		HCI_AUTO_CONN_DIRECT,
571 		HCI_AUTO_CONN_ALWAYS,
572 		HCI_AUTO_CONN_LINK_LOSS,
573 		HCI_AUTO_CONN_EXPLICIT,
574 	} auto_connect;
575 
576 	struct hci_conn *conn;
577 	bool explicit_connect;
578 };
579 
580 extern struct list_head hci_dev_list;
581 extern struct list_head hci_cb_list;
582 extern rwlock_t hci_dev_list_lock;
583 extern struct mutex hci_cb_list_lock;
584 
585 #define hci_dev_set_flag(hdev, nr)             set_bit((nr), (hdev)->dev_flags)
586 #define hci_dev_clear_flag(hdev, nr)           clear_bit((nr), (hdev)->dev_flags)
587 #define hci_dev_change_flag(hdev, nr)          change_bit((nr), (hdev)->dev_flags)
588 #define hci_dev_test_flag(hdev, nr)            test_bit((nr), (hdev)->dev_flags)
589 #define hci_dev_test_and_set_flag(hdev, nr)    test_and_set_bit((nr), (hdev)->dev_flags)
590 #define hci_dev_test_and_clear_flag(hdev, nr)  test_and_clear_bit((nr), (hdev)->dev_flags)
591 #define hci_dev_test_and_change_flag(hdev, nr) test_and_change_bit((nr), (hdev)->dev_flags)
592 
593 #define hci_dev_clear_volatile_flags(hdev)			\
594 	do {							\
595 		hci_dev_clear_flag(hdev, HCI_LE_SCAN);		\
596 		hci_dev_clear_flag(hdev, HCI_LE_ADV);		\
597 		hci_dev_clear_flag(hdev, HCI_PERIODIC_INQ);	\
598 	} while (0)
599 
600 /* ----- HCI interface to upper protocols ----- */
601 int l2cap_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr);
602 int l2cap_disconn_ind(struct hci_conn *hcon);
603 void l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags);
604 
605 #if IS_ENABLED(CONFIG_BT_BREDR)
606 int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 *flags);
607 void sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb);
608 #else
609 static inline int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr,
610 				  __u8 *flags)
611 {
612 	return 0;
613 }
614 
615 static inline void sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb)
616 {
617 }
618 #endif
619 
620 /* ----- Inquiry cache ----- */
621 #define INQUIRY_CACHE_AGE_MAX   (HZ*30)   /* 30 seconds */
622 #define INQUIRY_ENTRY_AGE_MAX   (HZ*60)   /* 60 seconds */
623 
624 static inline void discovery_init(struct hci_dev *hdev)
625 {
626 	hdev->discovery.state = DISCOVERY_STOPPED;
627 	INIT_LIST_HEAD(&hdev->discovery.all);
628 	INIT_LIST_HEAD(&hdev->discovery.unknown);
629 	INIT_LIST_HEAD(&hdev->discovery.resolve);
630 	hdev->discovery.report_invalid_rssi = true;
631 	hdev->discovery.rssi = HCI_RSSI_INVALID;
632 }
633 
634 static inline void hci_discovery_filter_clear(struct hci_dev *hdev)
635 {
636 	hdev->discovery.result_filtering = false;
637 	hdev->discovery.report_invalid_rssi = true;
638 	hdev->discovery.rssi = HCI_RSSI_INVALID;
639 	hdev->discovery.uuid_count = 0;
640 	kfree(hdev->discovery.uuids);
641 	hdev->discovery.uuids = NULL;
642 	hdev->discovery.scan_start = 0;
643 	hdev->discovery.scan_duration = 0;
644 }
645 
646 bool hci_discovery_active(struct hci_dev *hdev);
647 
648 void hci_discovery_set_state(struct hci_dev *hdev, int state);
649 
650 static inline int inquiry_cache_empty(struct hci_dev *hdev)
651 {
652 	return list_empty(&hdev->discovery.all);
653 }
654 
655 static inline long inquiry_cache_age(struct hci_dev *hdev)
656 {
657 	struct discovery_state *c = &hdev->discovery;
658 	return jiffies - c->timestamp;
659 }
660 
661 static inline long inquiry_entry_age(struct inquiry_entry *e)
662 {
663 	return jiffies - e->timestamp;
664 }
665 
666 struct inquiry_entry *hci_inquiry_cache_lookup(struct hci_dev *hdev,
667 					       bdaddr_t *bdaddr);
668 struct inquiry_entry *hci_inquiry_cache_lookup_unknown(struct hci_dev *hdev,
669 						       bdaddr_t *bdaddr);
670 struct inquiry_entry *hci_inquiry_cache_lookup_resolve(struct hci_dev *hdev,
671 						       bdaddr_t *bdaddr,
672 						       int state);
673 void hci_inquiry_cache_update_resolve(struct hci_dev *hdev,
674 				      struct inquiry_entry *ie);
675 u32 hci_inquiry_cache_update(struct hci_dev *hdev, struct inquiry_data *data,
676 			     bool name_known);
677 void hci_inquiry_cache_flush(struct hci_dev *hdev);
678 
679 /* ----- HCI Connections ----- */
680 enum {
681 	HCI_CONN_AUTH_PEND,
682 	HCI_CONN_REAUTH_PEND,
683 	HCI_CONN_ENCRYPT_PEND,
684 	HCI_CONN_RSWITCH_PEND,
685 	HCI_CONN_MODE_CHANGE_PEND,
686 	HCI_CONN_SCO_SETUP_PEND,
687 	HCI_CONN_MGMT_CONNECTED,
688 	HCI_CONN_SSP_ENABLED,
689 	HCI_CONN_SC_ENABLED,
690 	HCI_CONN_AES_CCM,
691 	HCI_CONN_POWER_SAVE,
692 	HCI_CONN_FLUSH_KEY,
693 	HCI_CONN_ENCRYPT,
694 	HCI_CONN_AUTH,
695 	HCI_CONN_SECURE,
696 	HCI_CONN_FIPS,
697 	HCI_CONN_STK_ENCRYPT,
698 	HCI_CONN_AUTH_INITIATOR,
699 	HCI_CONN_DROP,
700 	HCI_CONN_PARAM_REMOVAL_PEND,
701 	HCI_CONN_NEW_LINK_KEY,
702 	HCI_CONN_SCANNING,
703 	HCI_CONN_AUTH_FAILURE,
704 };
705 
706 static inline bool hci_conn_ssp_enabled(struct hci_conn *conn)
707 {
708 	struct hci_dev *hdev = conn->hdev;
709 	return hci_dev_test_flag(hdev, HCI_SSP_ENABLED) &&
710 	       test_bit(HCI_CONN_SSP_ENABLED, &conn->flags);
711 }
712 
713 static inline bool hci_conn_sc_enabled(struct hci_conn *conn)
714 {
715 	struct hci_dev *hdev = conn->hdev;
716 	return hci_dev_test_flag(hdev, HCI_SC_ENABLED) &&
717 	       test_bit(HCI_CONN_SC_ENABLED, &conn->flags);
718 }
719 
720 static inline void hci_conn_hash_add(struct hci_dev *hdev, struct hci_conn *c)
721 {
722 	struct hci_conn_hash *h = &hdev->conn_hash;
723 	list_add_rcu(&c->list, &h->list);
724 	switch (c->type) {
725 	case ACL_LINK:
726 		h->acl_num++;
727 		break;
728 	case AMP_LINK:
729 		h->amp_num++;
730 		break;
731 	case LE_LINK:
732 		h->le_num++;
733 		if (c->role == HCI_ROLE_SLAVE)
734 			h->le_num_slave++;
735 		break;
736 	case SCO_LINK:
737 	case ESCO_LINK:
738 		h->sco_num++;
739 		break;
740 	}
741 }
742 
743 static inline void hci_conn_hash_del(struct hci_dev *hdev, struct hci_conn *c)
744 {
745 	struct hci_conn_hash *h = &hdev->conn_hash;
746 
747 	list_del_rcu(&c->list);
748 	synchronize_rcu();
749 
750 	switch (c->type) {
751 	case ACL_LINK:
752 		h->acl_num--;
753 		break;
754 	case AMP_LINK:
755 		h->amp_num--;
756 		break;
757 	case LE_LINK:
758 		h->le_num--;
759 		if (c->role == HCI_ROLE_SLAVE)
760 			h->le_num_slave--;
761 		break;
762 	case SCO_LINK:
763 	case ESCO_LINK:
764 		h->sco_num--;
765 		break;
766 	}
767 }
768 
769 static inline unsigned int hci_conn_num(struct hci_dev *hdev, __u8 type)
770 {
771 	struct hci_conn_hash *h = &hdev->conn_hash;
772 	switch (type) {
773 	case ACL_LINK:
774 		return h->acl_num;
775 	case AMP_LINK:
776 		return h->amp_num;
777 	case LE_LINK:
778 		return h->le_num;
779 	case SCO_LINK:
780 	case ESCO_LINK:
781 		return h->sco_num;
782 	default:
783 		return 0;
784 	}
785 }
786 
787 static inline unsigned int hci_conn_count(struct hci_dev *hdev)
788 {
789 	struct hci_conn_hash *c = &hdev->conn_hash;
790 
791 	return c->acl_num + c->amp_num + c->sco_num + c->le_num;
792 }
793 
794 static inline __u8 hci_conn_lookup_type(struct hci_dev *hdev, __u16 handle)
795 {
796 	struct hci_conn_hash *h = &hdev->conn_hash;
797 	struct hci_conn *c;
798 	__u8 type = INVALID_LINK;
799 
800 	rcu_read_lock();
801 
802 	list_for_each_entry_rcu(c, &h->list, list) {
803 		if (c->handle == handle) {
804 			type = c->type;
805 			break;
806 		}
807 	}
808 
809 	rcu_read_unlock();
810 
811 	return type;
812 }
813 
814 static inline struct hci_conn *hci_conn_hash_lookup_handle(struct hci_dev *hdev,
815 								__u16 handle)
816 {
817 	struct hci_conn_hash *h = &hdev->conn_hash;
818 	struct hci_conn  *c;
819 
820 	rcu_read_lock();
821 
822 	list_for_each_entry_rcu(c, &h->list, list) {
823 		if (c->handle == handle) {
824 			rcu_read_unlock();
825 			return c;
826 		}
827 	}
828 	rcu_read_unlock();
829 
830 	return NULL;
831 }
832 
833 static inline struct hci_conn *hci_conn_hash_lookup_ba(struct hci_dev *hdev,
834 							__u8 type, bdaddr_t *ba)
835 {
836 	struct hci_conn_hash *h = &hdev->conn_hash;
837 	struct hci_conn  *c;
838 
839 	rcu_read_lock();
840 
841 	list_for_each_entry_rcu(c, &h->list, list) {
842 		if (c->type == type && !bacmp(&c->dst, ba)) {
843 			rcu_read_unlock();
844 			return c;
845 		}
846 	}
847 
848 	rcu_read_unlock();
849 
850 	return NULL;
851 }
852 
853 static inline struct hci_conn *hci_conn_hash_lookup_le(struct hci_dev *hdev,
854 						       bdaddr_t *ba,
855 						       __u8 ba_type)
856 {
857 	struct hci_conn_hash *h = &hdev->conn_hash;
858 	struct hci_conn  *c;
859 
860 	rcu_read_lock();
861 
862 	list_for_each_entry_rcu(c, &h->list, list) {
863 		if (c->type != LE_LINK)
864 		       continue;
865 
866 		if (ba_type == c->dst_type && !bacmp(&c->dst, ba)) {
867 			rcu_read_unlock();
868 			return c;
869 		}
870 	}
871 
872 	rcu_read_unlock();
873 
874 	return NULL;
875 }
876 
877 static inline struct hci_conn *hci_conn_hash_lookup_state(struct hci_dev *hdev,
878 							__u8 type, __u16 state)
879 {
880 	struct hci_conn_hash *h = &hdev->conn_hash;
881 	struct hci_conn  *c;
882 
883 	rcu_read_lock();
884 
885 	list_for_each_entry_rcu(c, &h->list, list) {
886 		if (c->type == type && c->state == state) {
887 			rcu_read_unlock();
888 			return c;
889 		}
890 	}
891 
892 	rcu_read_unlock();
893 
894 	return NULL;
895 }
896 
897 static inline struct hci_conn *hci_lookup_le_connect(struct hci_dev *hdev)
898 {
899 	struct hci_conn_hash *h = &hdev->conn_hash;
900 	struct hci_conn  *c;
901 
902 	rcu_read_lock();
903 
904 	list_for_each_entry_rcu(c, &h->list, list) {
905 		if (c->type == LE_LINK && c->state == BT_CONNECT &&
906 		    !test_bit(HCI_CONN_SCANNING, &c->flags)) {
907 			rcu_read_unlock();
908 			return c;
909 		}
910 	}
911 
912 	rcu_read_unlock();
913 
914 	return NULL;
915 }
916 
917 int hci_disconnect(struct hci_conn *conn, __u8 reason);
918 bool hci_setup_sync(struct hci_conn *conn, __u16 handle);
919 void hci_sco_setup(struct hci_conn *conn, __u8 status);
920 
921 struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst,
922 			      u8 role);
923 int hci_conn_del(struct hci_conn *conn);
924 void hci_conn_hash_flush(struct hci_dev *hdev);
925 void hci_conn_check_pending(struct hci_dev *hdev);
926 
927 struct hci_chan *hci_chan_create(struct hci_conn *conn);
928 void hci_chan_del(struct hci_chan *chan);
929 void hci_chan_list_flush(struct hci_conn *conn);
930 struct hci_chan *hci_chan_lookup_handle(struct hci_dev *hdev, __u16 handle);
931 
932 struct hci_conn *hci_connect_le_scan(struct hci_dev *hdev, bdaddr_t *dst,
933 				     u8 dst_type, u8 sec_level,
934 				     u16 conn_timeout);
935 struct hci_conn *hci_connect_le(struct hci_dev *hdev, bdaddr_t *dst,
936 				u8 dst_type, u8 sec_level, u16 conn_timeout,
937 				u8 role, bdaddr_t *direct_rpa);
938 struct hci_conn *hci_connect_acl(struct hci_dev *hdev, bdaddr_t *dst,
939 				 u8 sec_level, u8 auth_type);
940 struct hci_conn *hci_connect_sco(struct hci_dev *hdev, int type, bdaddr_t *dst,
941 				 __u16 setting);
942 int hci_conn_check_link_mode(struct hci_conn *conn);
943 int hci_conn_check_secure(struct hci_conn *conn, __u8 sec_level);
944 int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type,
945 		      bool initiator);
946 int hci_conn_switch_role(struct hci_conn *conn, __u8 role);
947 
948 void hci_conn_enter_active_mode(struct hci_conn *conn, __u8 force_active);
949 
950 void hci_le_conn_failed(struct hci_conn *conn, u8 status);
951 
952 /*
953  * hci_conn_get() and hci_conn_put() are used to control the life-time of an
954  * "hci_conn" object. They do not guarantee that the hci_conn object is running,
955  * working or anything else. They just guarantee that the object is available
956  * and can be dereferenced. So you can use its locks, local variables and any
957  * other constant data.
958  * Before accessing runtime data, you _must_ lock the object and then check that
959  * it is still running. As soon as you release the locks, the connection might
960  * get dropped, though.
961  *
962  * On the other hand, hci_conn_hold() and hci_conn_drop() are used to control
963  * how long the underlying connection is held. So every channel that runs on the
964  * hci_conn object calls this to prevent the connection from disappearing. As
965  * long as you hold a device, you must also guarantee that you have a valid
966  * reference to the device via hci_conn_get() (or the initial reference from
967  * hci_conn_add()).
968  * The hold()/drop() ref-count is known to drop below 0 sometimes, which doesn't
969  * break because nobody cares for that. But this means, we cannot use
970  * _get()/_drop() in it, but require the caller to have a valid ref (FIXME).
971  */
972 
973 static inline struct hci_conn *hci_conn_get(struct hci_conn *conn)
974 {
975 	get_device(&conn->dev);
976 	return conn;
977 }
978 
979 static inline void hci_conn_put(struct hci_conn *conn)
980 {
981 	put_device(&conn->dev);
982 }
983 
984 static inline void hci_conn_hold(struct hci_conn *conn)
985 {
986 	BT_DBG("hcon %p orig refcnt %d", conn, atomic_read(&conn->refcnt));
987 
988 	atomic_inc(&conn->refcnt);
989 	cancel_delayed_work(&conn->disc_work);
990 }
991 
992 static inline void hci_conn_drop(struct hci_conn *conn)
993 {
994 	BT_DBG("hcon %p orig refcnt %d", conn, atomic_read(&conn->refcnt));
995 
996 	if (atomic_dec_and_test(&conn->refcnt)) {
997 		unsigned long timeo;
998 
999 		switch (conn->type) {
1000 		case ACL_LINK:
1001 		case LE_LINK:
1002 			cancel_delayed_work(&conn->idle_work);
1003 			if (conn->state == BT_CONNECTED) {
1004 				timeo = conn->disc_timeout;
1005 				if (!conn->out)
1006 					timeo *= 2;
1007 			} else {
1008 				timeo = 0;
1009 			}
1010 			break;
1011 
1012 		case AMP_LINK:
1013 			timeo = conn->disc_timeout;
1014 			break;
1015 
1016 		default:
1017 			timeo = 0;
1018 			break;
1019 		}
1020 
1021 		cancel_delayed_work(&conn->disc_work);
1022 		queue_delayed_work(conn->hdev->workqueue,
1023 				   &conn->disc_work, timeo);
1024 	}
1025 }
1026 
1027 /* ----- HCI Devices ----- */
1028 static inline void hci_dev_put(struct hci_dev *d)
1029 {
1030 	BT_DBG("%s orig refcnt %d", d->name,
1031 	       kref_read(&d->dev.kobj.kref));
1032 
1033 	put_device(&d->dev);
1034 }
1035 
1036 static inline struct hci_dev *hci_dev_hold(struct hci_dev *d)
1037 {
1038 	BT_DBG("%s orig refcnt %d", d->name,
1039 	       kref_read(&d->dev.kobj.kref));
1040 
1041 	get_device(&d->dev);
1042 	return d;
1043 }
1044 
1045 #define hci_dev_lock(d)		mutex_lock(&d->lock)
1046 #define hci_dev_unlock(d)	mutex_unlock(&d->lock)
1047 
1048 #define to_hci_dev(d) container_of(d, struct hci_dev, dev)
1049 #define to_hci_conn(c) container_of(c, struct hci_conn, dev)
1050 
1051 static inline void *hci_get_drvdata(struct hci_dev *hdev)
1052 {
1053 	return dev_get_drvdata(&hdev->dev);
1054 }
1055 
1056 static inline void hci_set_drvdata(struct hci_dev *hdev, void *data)
1057 {
1058 	dev_set_drvdata(&hdev->dev, data);
1059 }
1060 
1061 struct hci_dev *hci_dev_get(int index);
1062 struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src, u8 src_type);
1063 
1064 struct hci_dev *hci_alloc_dev(void);
1065 void hci_free_dev(struct hci_dev *hdev);
1066 int hci_register_dev(struct hci_dev *hdev);
1067 void hci_unregister_dev(struct hci_dev *hdev);
1068 int hci_suspend_dev(struct hci_dev *hdev);
1069 int hci_resume_dev(struct hci_dev *hdev);
1070 int hci_reset_dev(struct hci_dev *hdev);
1071 int hci_recv_frame(struct hci_dev *hdev, struct sk_buff *skb);
1072 int hci_recv_diag(struct hci_dev *hdev, struct sk_buff *skb);
1073 __printf(2, 3) void hci_set_hw_info(struct hci_dev *hdev, const char *fmt, ...);
1074 __printf(2, 3) void hci_set_fw_info(struct hci_dev *hdev, const char *fmt, ...);
1075 int hci_dev_open(__u16 dev);
1076 int hci_dev_close(__u16 dev);
1077 int hci_dev_do_close(struct hci_dev *hdev);
1078 int hci_dev_reset(__u16 dev);
1079 int hci_dev_reset_stat(__u16 dev);
1080 int hci_dev_cmd(unsigned int cmd, void __user *arg);
1081 int hci_get_dev_list(void __user *arg);
1082 int hci_get_dev_info(void __user *arg);
1083 int hci_get_conn_list(void __user *arg);
1084 int hci_get_conn_info(struct hci_dev *hdev, void __user *arg);
1085 int hci_get_auth_info(struct hci_dev *hdev, void __user *arg);
1086 int hci_inquiry(void __user *arg);
1087 
1088 struct bdaddr_list *hci_bdaddr_list_lookup(struct list_head *list,
1089 					   bdaddr_t *bdaddr, u8 type);
1090 struct bdaddr_list_with_irk *hci_bdaddr_list_lookup_with_irk(
1091 				    struct list_head *list, bdaddr_t *bdaddr,
1092 				    u8 type);
1093 int hci_bdaddr_list_add(struct list_head *list, bdaddr_t *bdaddr, u8 type);
1094 int hci_bdaddr_list_add_with_irk(struct list_head *list, bdaddr_t *bdaddr,
1095 					u8 type, u8 *peer_irk, u8 *local_irk);
1096 int hci_bdaddr_list_del(struct list_head *list, bdaddr_t *bdaddr, u8 type);
1097 int hci_bdaddr_list_del_with_irk(struct list_head *list, bdaddr_t *bdaddr,
1098 								u8 type);
1099 void hci_bdaddr_list_clear(struct list_head *list);
1100 
1101 struct hci_conn_params *hci_conn_params_lookup(struct hci_dev *hdev,
1102 					       bdaddr_t *addr, u8 addr_type);
1103 struct hci_conn_params *hci_conn_params_add(struct hci_dev *hdev,
1104 					    bdaddr_t *addr, u8 addr_type);
1105 void hci_conn_params_del(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type);
1106 void hci_conn_params_clear_disabled(struct hci_dev *hdev);
1107 
1108 struct hci_conn_params *hci_pend_le_action_lookup(struct list_head *list,
1109 						  bdaddr_t *addr,
1110 						  u8 addr_type);
1111 
1112 void hci_uuids_clear(struct hci_dev *hdev);
1113 
1114 void hci_link_keys_clear(struct hci_dev *hdev);
1115 struct link_key *hci_find_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr);
1116 struct link_key *hci_add_link_key(struct hci_dev *hdev, struct hci_conn *conn,
1117 				  bdaddr_t *bdaddr, u8 *val, u8 type,
1118 				  u8 pin_len, bool *persistent);
1119 struct smp_ltk *hci_add_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr,
1120 			    u8 addr_type, u8 type, u8 authenticated,
1121 			    u8 tk[16], u8 enc_size, __le16 ediv, __le64 rand);
1122 struct smp_ltk *hci_find_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr,
1123 			     u8 addr_type, u8 role);
1124 int hci_remove_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 bdaddr_type);
1125 void hci_smp_ltks_clear(struct hci_dev *hdev);
1126 int hci_remove_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr);
1127 
1128 struct smp_irk *hci_find_irk_by_rpa(struct hci_dev *hdev, bdaddr_t *rpa);
1129 struct smp_irk *hci_find_irk_by_addr(struct hci_dev *hdev, bdaddr_t *bdaddr,
1130 				     u8 addr_type);
1131 struct smp_irk *hci_add_irk(struct hci_dev *hdev, bdaddr_t *bdaddr,
1132 			    u8 addr_type, u8 val[16], bdaddr_t *rpa);
1133 void hci_remove_irk(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 addr_type);
1134 bool hci_is_blocked_key(struct hci_dev *hdev, u8 type, u8 val[16]);
1135 void hci_blocked_keys_clear(struct hci_dev *hdev);
1136 void hci_smp_irks_clear(struct hci_dev *hdev);
1137 
1138 bool hci_bdaddr_is_paired(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type);
1139 
1140 void hci_remote_oob_data_clear(struct hci_dev *hdev);
1141 struct oob_data *hci_find_remote_oob_data(struct hci_dev *hdev,
1142 					  bdaddr_t *bdaddr, u8 bdaddr_type);
1143 int hci_add_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr,
1144 			    u8 bdaddr_type, u8 *hash192, u8 *rand192,
1145 			    u8 *hash256, u8 *rand256);
1146 int hci_remove_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr,
1147 			       u8 bdaddr_type);
1148 
1149 void hci_adv_instances_clear(struct hci_dev *hdev);
1150 struct adv_info *hci_find_adv_instance(struct hci_dev *hdev, u8 instance);
1151 struct adv_info *hci_get_next_instance(struct hci_dev *hdev, u8 instance);
1152 int hci_add_adv_instance(struct hci_dev *hdev, u8 instance, u32 flags,
1153 			 u16 adv_data_len, u8 *adv_data,
1154 			 u16 scan_rsp_len, u8 *scan_rsp_data,
1155 			 u16 timeout, u16 duration);
1156 int hci_remove_adv_instance(struct hci_dev *hdev, u8 instance);
1157 void hci_adv_instances_set_rpa_expired(struct hci_dev *hdev, bool rpa_expired);
1158 
1159 void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb);
1160 
1161 void hci_init_sysfs(struct hci_dev *hdev);
1162 void hci_conn_init_sysfs(struct hci_conn *conn);
1163 void hci_conn_add_sysfs(struct hci_conn *conn);
1164 void hci_conn_del_sysfs(struct hci_conn *conn);
1165 
1166 #define SET_HCIDEV_DEV(hdev, pdev) ((hdev)->dev.parent = (pdev))
1167 
1168 /* ----- LMP capabilities ----- */
1169 #define lmp_encrypt_capable(dev)   ((dev)->features[0][0] & LMP_ENCRYPT)
1170 #define lmp_rswitch_capable(dev)   ((dev)->features[0][0] & LMP_RSWITCH)
1171 #define lmp_hold_capable(dev)      ((dev)->features[0][0] & LMP_HOLD)
1172 #define lmp_sniff_capable(dev)     ((dev)->features[0][0] & LMP_SNIFF)
1173 #define lmp_park_capable(dev)      ((dev)->features[0][1] & LMP_PARK)
1174 #define lmp_inq_rssi_capable(dev)  ((dev)->features[0][3] & LMP_RSSI_INQ)
1175 #define lmp_esco_capable(dev)      ((dev)->features[0][3] & LMP_ESCO)
1176 #define lmp_bredr_capable(dev)     (!((dev)->features[0][4] & LMP_NO_BREDR))
1177 #define lmp_le_capable(dev)        ((dev)->features[0][4] & LMP_LE)
1178 #define lmp_sniffsubr_capable(dev) ((dev)->features[0][5] & LMP_SNIFF_SUBR)
1179 #define lmp_pause_enc_capable(dev) ((dev)->features[0][5] & LMP_PAUSE_ENC)
1180 #define lmp_ext_inq_capable(dev)   ((dev)->features[0][6] & LMP_EXT_INQ)
1181 #define lmp_le_br_capable(dev)     (!!((dev)->features[0][6] & LMP_SIMUL_LE_BR))
1182 #define lmp_ssp_capable(dev)       ((dev)->features[0][6] & LMP_SIMPLE_PAIR)
1183 #define lmp_no_flush_capable(dev)  ((dev)->features[0][6] & LMP_NO_FLUSH)
1184 #define lmp_lsto_capable(dev)      ((dev)->features[0][7] & LMP_LSTO)
1185 #define lmp_inq_tx_pwr_capable(dev) ((dev)->features[0][7] & LMP_INQ_TX_PWR)
1186 #define lmp_ext_feat_capable(dev)  ((dev)->features[0][7] & LMP_EXTFEATURES)
1187 #define lmp_transp_capable(dev)    ((dev)->features[0][2] & LMP_TRANSPARENT)
1188 #define lmp_edr_2m_capable(dev)    ((dev)->features[0][3] & LMP_EDR_2M)
1189 #define lmp_edr_3m_capable(dev)    ((dev)->features[0][3] & LMP_EDR_3M)
1190 #define lmp_edr_3slot_capable(dev) ((dev)->features[0][4] & LMP_EDR_3SLOT)
1191 #define lmp_edr_5slot_capable(dev) ((dev)->features[0][5] & LMP_EDR_5SLOT)
1192 
1193 /* ----- Extended LMP capabilities ----- */
1194 #define lmp_csb_master_capable(dev) ((dev)->features[2][0] & LMP_CSB_MASTER)
1195 #define lmp_csb_slave_capable(dev)  ((dev)->features[2][0] & LMP_CSB_SLAVE)
1196 #define lmp_sync_train_capable(dev) ((dev)->features[2][0] & LMP_SYNC_TRAIN)
1197 #define lmp_sync_scan_capable(dev)  ((dev)->features[2][0] & LMP_SYNC_SCAN)
1198 #define lmp_sc_capable(dev)         ((dev)->features[2][1] & LMP_SC)
1199 #define lmp_ping_capable(dev)       ((dev)->features[2][1] & LMP_PING)
1200 
1201 /* ----- Host capabilities ----- */
1202 #define lmp_host_ssp_capable(dev)  ((dev)->features[1][0] & LMP_HOST_SSP)
1203 #define lmp_host_sc_capable(dev)   ((dev)->features[1][0] & LMP_HOST_SC)
1204 #define lmp_host_le_capable(dev)   (!!((dev)->features[1][0] & LMP_HOST_LE))
1205 #define lmp_host_le_br_capable(dev) (!!((dev)->features[1][0] & LMP_HOST_LE_BREDR))
1206 
1207 #define hdev_is_powered(dev)   (test_bit(HCI_UP, &(dev)->flags) && \
1208 				!hci_dev_test_flag(dev, HCI_AUTO_OFF))
1209 #define bredr_sc_enabled(dev)  (lmp_sc_capable(dev) && \
1210 				hci_dev_test_flag(dev, HCI_SC_ENABLED))
1211 
1212 #define scan_1m(dev) (((dev)->le_tx_def_phys & HCI_LE_SET_PHY_1M) || \
1213 		      ((dev)->le_rx_def_phys & HCI_LE_SET_PHY_1M))
1214 
1215 #define scan_2m(dev) (((dev)->le_tx_def_phys & HCI_LE_SET_PHY_2M) || \
1216 		      ((dev)->le_rx_def_phys & HCI_LE_SET_PHY_2M))
1217 
1218 #define scan_coded(dev) (((dev)->le_tx_def_phys & HCI_LE_SET_PHY_CODED) || \
1219 			 ((dev)->le_rx_def_phys & HCI_LE_SET_PHY_CODED))
1220 
1221 /* Use ext scanning if set ext scan param and ext scan enable is supported */
1222 #define use_ext_scan(dev) (((dev)->commands[37] & 0x20) && \
1223 			   ((dev)->commands[37] & 0x40))
1224 /* Use ext create connection if command is supported */
1225 #define use_ext_conn(dev) ((dev)->commands[37] & 0x80)
1226 
1227 /* Extended advertising support */
1228 #define ext_adv_capable(dev) (((dev)->le_features[1] & HCI_LE_EXT_ADV))
1229 
1230 /* ----- HCI protocols ----- */
1231 #define HCI_PROTO_DEFER             0x01
1232 
1233 static inline int hci_proto_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr,
1234 					__u8 type, __u8 *flags)
1235 {
1236 	switch (type) {
1237 	case ACL_LINK:
1238 		return l2cap_connect_ind(hdev, bdaddr);
1239 
1240 	case SCO_LINK:
1241 	case ESCO_LINK:
1242 		return sco_connect_ind(hdev, bdaddr, flags);
1243 
1244 	default:
1245 		BT_ERR("unknown link type %d", type);
1246 		return -EINVAL;
1247 	}
1248 }
1249 
1250 static inline int hci_proto_disconn_ind(struct hci_conn *conn)
1251 {
1252 	if (conn->type != ACL_LINK && conn->type != LE_LINK)
1253 		return HCI_ERROR_REMOTE_USER_TERM;
1254 
1255 	return l2cap_disconn_ind(conn);
1256 }
1257 
1258 /* ----- HCI callbacks ----- */
1259 struct hci_cb {
1260 	struct list_head list;
1261 
1262 	char *name;
1263 
1264 	void (*connect_cfm)	(struct hci_conn *conn, __u8 status);
1265 	void (*disconn_cfm)	(struct hci_conn *conn, __u8 status);
1266 	void (*security_cfm)	(struct hci_conn *conn, __u8 status,
1267 								__u8 encrypt);
1268 	void (*key_change_cfm)	(struct hci_conn *conn, __u8 status);
1269 	void (*role_switch_cfm)	(struct hci_conn *conn, __u8 status, __u8 role);
1270 };
1271 
1272 static inline void hci_connect_cfm(struct hci_conn *conn, __u8 status)
1273 {
1274 	struct hci_cb *cb;
1275 
1276 	mutex_lock(&hci_cb_list_lock);
1277 	list_for_each_entry(cb, &hci_cb_list, list) {
1278 		if (cb->connect_cfm)
1279 			cb->connect_cfm(conn, status);
1280 	}
1281 	mutex_unlock(&hci_cb_list_lock);
1282 
1283 	if (conn->connect_cfm_cb)
1284 		conn->connect_cfm_cb(conn, status);
1285 }
1286 
1287 static inline void hci_disconn_cfm(struct hci_conn *conn, __u8 reason)
1288 {
1289 	struct hci_cb *cb;
1290 
1291 	mutex_lock(&hci_cb_list_lock);
1292 	list_for_each_entry(cb, &hci_cb_list, list) {
1293 		if (cb->disconn_cfm)
1294 			cb->disconn_cfm(conn, reason);
1295 	}
1296 	mutex_unlock(&hci_cb_list_lock);
1297 
1298 	if (conn->disconn_cfm_cb)
1299 		conn->disconn_cfm_cb(conn, reason);
1300 }
1301 
1302 static inline void hci_auth_cfm(struct hci_conn *conn, __u8 status)
1303 {
1304 	struct hci_cb *cb;
1305 	__u8 encrypt;
1306 
1307 	if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags))
1308 		return;
1309 
1310 	encrypt = test_bit(HCI_CONN_ENCRYPT, &conn->flags) ? 0x01 : 0x00;
1311 
1312 	mutex_lock(&hci_cb_list_lock);
1313 	list_for_each_entry(cb, &hci_cb_list, list) {
1314 		if (cb->security_cfm)
1315 			cb->security_cfm(conn, status, encrypt);
1316 	}
1317 	mutex_unlock(&hci_cb_list_lock);
1318 
1319 	if (conn->security_cfm_cb)
1320 		conn->security_cfm_cb(conn, status);
1321 }
1322 
1323 static inline void hci_encrypt_cfm(struct hci_conn *conn, __u8 status,
1324 								__u8 encrypt)
1325 {
1326 	struct hci_cb *cb;
1327 
1328 	if (conn->sec_level == BT_SECURITY_SDP)
1329 		conn->sec_level = BT_SECURITY_LOW;
1330 
1331 	if (conn->pending_sec_level > conn->sec_level)
1332 		conn->sec_level = conn->pending_sec_level;
1333 
1334 	mutex_lock(&hci_cb_list_lock);
1335 	list_for_each_entry(cb, &hci_cb_list, list) {
1336 		if (cb->security_cfm)
1337 			cb->security_cfm(conn, status, encrypt);
1338 	}
1339 	mutex_unlock(&hci_cb_list_lock);
1340 
1341 	if (conn->security_cfm_cb)
1342 		conn->security_cfm_cb(conn, status);
1343 }
1344 
1345 static inline void hci_key_change_cfm(struct hci_conn *conn, __u8 status)
1346 {
1347 	struct hci_cb *cb;
1348 
1349 	mutex_lock(&hci_cb_list_lock);
1350 	list_for_each_entry(cb, &hci_cb_list, list) {
1351 		if (cb->key_change_cfm)
1352 			cb->key_change_cfm(conn, status);
1353 	}
1354 	mutex_unlock(&hci_cb_list_lock);
1355 }
1356 
1357 static inline void hci_role_switch_cfm(struct hci_conn *conn, __u8 status,
1358 								__u8 role)
1359 {
1360 	struct hci_cb *cb;
1361 
1362 	mutex_lock(&hci_cb_list_lock);
1363 	list_for_each_entry(cb, &hci_cb_list, list) {
1364 		if (cb->role_switch_cfm)
1365 			cb->role_switch_cfm(conn, status, role);
1366 	}
1367 	mutex_unlock(&hci_cb_list_lock);
1368 }
1369 
1370 static inline void *eir_get_data(u8 *eir, size_t eir_len, u8 type,
1371 				 size_t *data_len)
1372 {
1373 	size_t parsed = 0;
1374 
1375 	if (eir_len < 2)
1376 		return NULL;
1377 
1378 	while (parsed < eir_len - 1) {
1379 		u8 field_len = eir[0];
1380 
1381 		if (field_len == 0)
1382 			break;
1383 
1384 		parsed += field_len + 1;
1385 
1386 		if (parsed > eir_len)
1387 			break;
1388 
1389 		if (eir[1] != type) {
1390 			eir += field_len + 1;
1391 			continue;
1392 		}
1393 
1394 		/* Zero length data */
1395 		if (field_len == 1)
1396 			return NULL;
1397 
1398 		if (data_len)
1399 			*data_len = field_len - 1;
1400 
1401 		return &eir[2];
1402 	}
1403 
1404 	return NULL;
1405 }
1406 
1407 static inline bool hci_bdaddr_is_rpa(bdaddr_t *bdaddr, u8 addr_type)
1408 {
1409 	if (addr_type != ADDR_LE_DEV_RANDOM)
1410 		return false;
1411 
1412 	if ((bdaddr->b[5] & 0xc0) == 0x40)
1413 	       return true;
1414 
1415 	return false;
1416 }
1417 
1418 static inline bool hci_is_identity_address(bdaddr_t *addr, u8 addr_type)
1419 {
1420 	if (addr_type == ADDR_LE_DEV_PUBLIC)
1421 		return true;
1422 
1423 	/* Check for Random Static address type */
1424 	if ((addr->b[5] & 0xc0) == 0xc0)
1425 		return true;
1426 
1427 	return false;
1428 }
1429 
1430 static inline struct smp_irk *hci_get_irk(struct hci_dev *hdev,
1431 					  bdaddr_t *bdaddr, u8 addr_type)
1432 {
1433 	if (!hci_bdaddr_is_rpa(bdaddr, addr_type))
1434 		return NULL;
1435 
1436 	return hci_find_irk_by_rpa(hdev, bdaddr);
1437 }
1438 
1439 static inline int hci_check_conn_params(u16 min, u16 max, u16 latency,
1440 					u16 to_multiplier)
1441 {
1442 	u16 max_latency;
1443 
1444 	if (min > max || min < 6 || max > 3200)
1445 		return -EINVAL;
1446 
1447 	if (to_multiplier < 10 || to_multiplier > 3200)
1448 		return -EINVAL;
1449 
1450 	if (max >= to_multiplier * 8)
1451 		return -EINVAL;
1452 
1453 	max_latency = (to_multiplier * 4 / max) - 1;
1454 	if (latency > 499 || latency > max_latency)
1455 		return -EINVAL;
1456 
1457 	return 0;
1458 }
1459 
1460 int hci_register_cb(struct hci_cb *hcb);
1461 int hci_unregister_cb(struct hci_cb *hcb);
1462 
1463 struct sk_buff *__hci_cmd_sync(struct hci_dev *hdev, u16 opcode, u32 plen,
1464 			       const void *param, u32 timeout);
1465 struct sk_buff *__hci_cmd_sync_ev(struct hci_dev *hdev, u16 opcode, u32 plen,
1466 				  const void *param, u8 event, u32 timeout);
1467 int __hci_cmd_send(struct hci_dev *hdev, u16 opcode, u32 plen,
1468 		   const void *param);
1469 
1470 int hci_send_cmd(struct hci_dev *hdev, __u16 opcode, __u32 plen,
1471 		 const void *param);
1472 void hci_send_acl(struct hci_chan *chan, struct sk_buff *skb, __u16 flags);
1473 void hci_send_sco(struct hci_conn *conn, struct sk_buff *skb);
1474 
1475 void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 opcode);
1476 
1477 struct sk_buff *hci_cmd_sync(struct hci_dev *hdev, u16 opcode, u32 plen,
1478 			     const void *param, u32 timeout);
1479 
1480 /* ----- HCI Sockets ----- */
1481 void hci_send_to_sock(struct hci_dev *hdev, struct sk_buff *skb);
1482 void hci_send_to_channel(unsigned short channel, struct sk_buff *skb,
1483 			 int flag, struct sock *skip_sk);
1484 void hci_send_to_monitor(struct hci_dev *hdev, struct sk_buff *skb);
1485 void hci_send_monitor_ctrl_event(struct hci_dev *hdev, u16 event,
1486 				 void *data, u16 data_len, ktime_t tstamp,
1487 				 int flag, struct sock *skip_sk);
1488 
1489 void hci_sock_dev_event(struct hci_dev *hdev, int event);
1490 
1491 #define HCI_MGMT_VAR_LEN	BIT(0)
1492 #define HCI_MGMT_NO_HDEV	BIT(1)
1493 #define HCI_MGMT_UNTRUSTED	BIT(2)
1494 #define HCI_MGMT_UNCONFIGURED	BIT(3)
1495 
1496 struct hci_mgmt_handler {
1497 	int (*func) (struct sock *sk, struct hci_dev *hdev, void *data,
1498 		     u16 data_len);
1499 	size_t data_len;
1500 	unsigned long flags;
1501 };
1502 
1503 struct hci_mgmt_chan {
1504 	struct list_head list;
1505 	unsigned short channel;
1506 	size_t handler_count;
1507 	const struct hci_mgmt_handler *handlers;
1508 	void (*hdev_init) (struct sock *sk, struct hci_dev *hdev);
1509 };
1510 
1511 int hci_mgmt_chan_register(struct hci_mgmt_chan *c);
1512 void hci_mgmt_chan_unregister(struct hci_mgmt_chan *c);
1513 
1514 /* Management interface */
1515 #define DISCOV_TYPE_BREDR		(BIT(BDADDR_BREDR))
1516 #define DISCOV_TYPE_LE			(BIT(BDADDR_LE_PUBLIC) | \
1517 					 BIT(BDADDR_LE_RANDOM))
1518 #define DISCOV_TYPE_INTERLEAVED		(BIT(BDADDR_BREDR) | \
1519 					 BIT(BDADDR_LE_PUBLIC) | \
1520 					 BIT(BDADDR_LE_RANDOM))
1521 
1522 /* These LE scan and inquiry parameters were chosen according to LE General
1523  * Discovery Procedure specification.
1524  */
1525 #define DISCOV_LE_SCAN_WIN		0x12
1526 #define DISCOV_LE_SCAN_INT		0x12
1527 #define DISCOV_LE_TIMEOUT		10240	/* msec */
1528 #define DISCOV_INTERLEAVED_TIMEOUT	5120	/* msec */
1529 #define DISCOV_INTERLEAVED_INQUIRY_LEN	0x04
1530 #define DISCOV_BREDR_INQUIRY_LEN	0x08
1531 #define DISCOV_LE_RESTART_DELAY		msecs_to_jiffies(200)	/* msec */
1532 #define DISCOV_LE_FAST_ADV_INT_MIN     100     /* msec */
1533 #define DISCOV_LE_FAST_ADV_INT_MAX     150     /* msec */
1534 
1535 void mgmt_fill_version_info(void *ver);
1536 int mgmt_new_settings(struct hci_dev *hdev);
1537 void mgmt_index_added(struct hci_dev *hdev);
1538 void mgmt_index_removed(struct hci_dev *hdev);
1539 void mgmt_set_powered_failed(struct hci_dev *hdev, int err);
1540 void mgmt_power_on(struct hci_dev *hdev, int err);
1541 void __mgmt_power_off(struct hci_dev *hdev);
1542 void mgmt_new_link_key(struct hci_dev *hdev, struct link_key *key,
1543 		       bool persistent);
1544 void mgmt_device_connected(struct hci_dev *hdev, struct hci_conn *conn,
1545 			   u32 flags, u8 *name, u8 name_len);
1546 void mgmt_device_disconnected(struct hci_dev *hdev, bdaddr_t *bdaddr,
1547 			      u8 link_type, u8 addr_type, u8 reason,
1548 			      bool mgmt_connected);
1549 void mgmt_disconnect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr,
1550 			    u8 link_type, u8 addr_type, u8 status);
1551 void mgmt_connect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
1552 			 u8 addr_type, u8 status);
1553 void mgmt_pin_code_request(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 secure);
1554 void mgmt_pin_code_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
1555 				  u8 status);
1556 void mgmt_pin_code_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
1557 				      u8 status);
1558 int mgmt_user_confirm_request(struct hci_dev *hdev, bdaddr_t *bdaddr,
1559 			      u8 link_type, u8 addr_type, u32 value,
1560 			      u8 confirm_hint);
1561 int mgmt_user_confirm_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
1562 				     u8 link_type, u8 addr_type, u8 status);
1563 int mgmt_user_confirm_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
1564 					 u8 link_type, u8 addr_type, u8 status);
1565 int mgmt_user_passkey_request(struct hci_dev *hdev, bdaddr_t *bdaddr,
1566 			      u8 link_type, u8 addr_type);
1567 int mgmt_user_passkey_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
1568 				     u8 link_type, u8 addr_type, u8 status);
1569 int mgmt_user_passkey_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
1570 					 u8 link_type, u8 addr_type, u8 status);
1571 int mgmt_user_passkey_notify(struct hci_dev *hdev, bdaddr_t *bdaddr,
1572 			     u8 link_type, u8 addr_type, u32 passkey,
1573 			     u8 entered);
1574 void mgmt_auth_failed(struct hci_conn *conn, u8 status);
1575 void mgmt_auth_enable_complete(struct hci_dev *hdev, u8 status);
1576 void mgmt_ssp_enable_complete(struct hci_dev *hdev, u8 enable, u8 status);
1577 void mgmt_set_class_of_dev_complete(struct hci_dev *hdev, u8 *dev_class,
1578 				    u8 status);
1579 void mgmt_set_local_name_complete(struct hci_dev *hdev, u8 *name, u8 status);
1580 void mgmt_start_discovery_complete(struct hci_dev *hdev, u8 status);
1581 void mgmt_stop_discovery_complete(struct hci_dev *hdev, u8 status);
1582 void mgmt_device_found(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
1583 		       u8 addr_type, u8 *dev_class, s8 rssi, u32 flags,
1584 		       u8 *eir, u16 eir_len, u8 *scan_rsp, u8 scan_rsp_len);
1585 void mgmt_remote_name(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
1586 		      u8 addr_type, s8 rssi, u8 *name, u8 name_len);
1587 void mgmt_discovering(struct hci_dev *hdev, u8 discovering);
1588 bool mgmt_powering_down(struct hci_dev *hdev);
1589 void mgmt_new_ltk(struct hci_dev *hdev, struct smp_ltk *key, bool persistent);
1590 void mgmt_new_irk(struct hci_dev *hdev, struct smp_irk *irk, bool persistent);
1591 void mgmt_new_csrk(struct hci_dev *hdev, struct smp_csrk *csrk,
1592 		   bool persistent);
1593 void mgmt_new_conn_param(struct hci_dev *hdev, bdaddr_t *bdaddr,
1594 			 u8 bdaddr_type, u8 store_hint, u16 min_interval,
1595 			 u16 max_interval, u16 latency, u16 timeout);
1596 void mgmt_smp_complete(struct hci_conn *conn, bool complete);
1597 bool mgmt_get_connectable(struct hci_dev *hdev);
1598 void mgmt_set_connectable_complete(struct hci_dev *hdev, u8 status);
1599 void mgmt_set_discoverable_complete(struct hci_dev *hdev, u8 status);
1600 u8 mgmt_get_adv_discov_flags(struct hci_dev *hdev);
1601 void mgmt_advertising_added(struct sock *sk, struct hci_dev *hdev,
1602 			    u8 instance);
1603 void mgmt_advertising_removed(struct sock *sk, struct hci_dev *hdev,
1604 			      u8 instance);
1605 int mgmt_phy_configuration_changed(struct hci_dev *hdev, struct sock *skip);
1606 
1607 u8 hci_le_conn_update(struct hci_conn *conn, u16 min, u16 max, u16 latency,
1608 		      u16 to_multiplier);
1609 void hci_le_start_enc(struct hci_conn *conn, __le16 ediv, __le64 rand,
1610 		      __u8 ltk[16], __u8 key_size);
1611 
1612 void hci_copy_identity_address(struct hci_dev *hdev, bdaddr_t *bdaddr,
1613 			       u8 *bdaddr_type);
1614 
1615 #define SCO_AIRMODE_MASK       0x0003
1616 #define SCO_AIRMODE_CVSD       0x0000
1617 #define SCO_AIRMODE_TRANSP     0x0003
1618 
1619 #endif /* __HCI_CORE_H */
1620