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