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