xref: /openbmc/linux/include/net/bluetooth/hci_core.h (revision 81d67439)
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/interrupt.h>
29 #include <net/bluetooth/hci.h>
30 
31 /* HCI upper protocols */
32 #define HCI_PROTO_L2CAP	0
33 #define HCI_PROTO_SCO	1
34 
35 /* HCI Core structures */
36 struct inquiry_data {
37 	bdaddr_t	bdaddr;
38 	__u8		pscan_rep_mode;
39 	__u8		pscan_period_mode;
40 	__u8		pscan_mode;
41 	__u8		dev_class[3];
42 	__le16		clock_offset;
43 	__s8		rssi;
44 	__u8		ssp_mode;
45 };
46 
47 struct inquiry_entry {
48 	struct inquiry_entry	*next;
49 	__u32			timestamp;
50 	struct inquiry_data	data;
51 };
52 
53 struct inquiry_cache {
54 	spinlock_t		lock;
55 	__u32			timestamp;
56 	struct inquiry_entry	*list;
57 };
58 
59 struct hci_conn_hash {
60 	struct list_head list;
61 	spinlock_t       lock;
62 	unsigned int     acl_num;
63 	unsigned int     sco_num;
64 	unsigned int     le_num;
65 };
66 
67 struct bdaddr_list {
68 	struct list_head list;
69 	bdaddr_t bdaddr;
70 };
71 
72 struct bt_uuid {
73 	struct list_head list;
74 	u8 uuid[16];
75 	u8 svc_hint;
76 };
77 
78 struct key_master_id {
79 	__le16 ediv;
80 	u8 rand[8];
81 } __packed;
82 
83 struct link_key_data {
84 	bdaddr_t bdaddr;
85 	u8 type;
86 	u8 val[16];
87 	u8 pin_len;
88 	u8 dlen;
89 	u8 data[0];
90 } __packed;
91 
92 struct link_key {
93 	struct list_head list;
94 	bdaddr_t bdaddr;
95 	u8 type;
96 	u8 val[16];
97 	u8 pin_len;
98 	u8 dlen;
99 	u8 data[0];
100 };
101 
102 struct oob_data {
103 	struct list_head list;
104 	bdaddr_t bdaddr;
105 	u8 hash[16];
106 	u8 randomizer[16];
107 };
108 
109 struct adv_entry {
110 	struct list_head list;
111 	bdaddr_t bdaddr;
112 	u8 bdaddr_type;
113 };
114 
115 #define NUM_REASSEMBLY 4
116 struct hci_dev {
117 	struct list_head list;
118 	spinlock_t	lock;
119 	atomic_t	refcnt;
120 
121 	char		name[8];
122 	unsigned long	flags;
123 	__u16		id;
124 	__u8		bus;
125 	__u8		dev_type;
126 	bdaddr_t	bdaddr;
127 	__u8		dev_name[HCI_MAX_NAME_LENGTH];
128 	__u8		eir[HCI_MAX_EIR_LENGTH];
129 	__u8		dev_class[3];
130 	__u8		major_class;
131 	__u8		minor_class;
132 	__u8		features[8];
133 	__u8		extfeatures[8];
134 	__u8		commands[64];
135 	__u8		ssp_mode;
136 	__u8		hci_ver;
137 	__u16		hci_rev;
138 	__u8		lmp_ver;
139 	__u16		manufacturer;
140 	__le16		lmp_subver;
141 	__u16		voice_setting;
142 	__u8		io_capability;
143 
144 	__u16		pkt_type;
145 	__u16		esco_type;
146 	__u16		link_policy;
147 	__u16		link_mode;
148 
149 	__u32		idle_timeout;
150 	__u16		sniff_min_interval;
151 	__u16		sniff_max_interval;
152 
153 	unsigned int	auto_accept_delay;
154 
155 	unsigned long	quirks;
156 
157 	atomic_t	cmd_cnt;
158 	unsigned int	acl_cnt;
159 	unsigned int	sco_cnt;
160 	unsigned int	le_cnt;
161 
162 	unsigned int	acl_mtu;
163 	unsigned int	sco_mtu;
164 	unsigned int	le_mtu;
165 	unsigned int	acl_pkts;
166 	unsigned int	sco_pkts;
167 	unsigned int	le_pkts;
168 
169 	unsigned long	acl_last_tx;
170 	unsigned long	sco_last_tx;
171 	unsigned long	le_last_tx;
172 
173 	struct workqueue_struct	*workqueue;
174 
175 	struct work_struct	power_on;
176 	struct work_struct	power_off;
177 	struct timer_list	off_timer;
178 
179 	struct timer_list	cmd_timer;
180 	struct tasklet_struct	cmd_task;
181 	struct tasklet_struct	rx_task;
182 	struct tasklet_struct	tx_task;
183 
184 	struct sk_buff_head	rx_q;
185 	struct sk_buff_head	raw_q;
186 	struct sk_buff_head	cmd_q;
187 
188 	struct sk_buff		*sent_cmd;
189 	struct sk_buff		*reassembly[NUM_REASSEMBLY];
190 
191 	struct mutex		req_lock;
192 	wait_queue_head_t	req_wait_q;
193 	__u32			req_status;
194 	__u32			req_result;
195 
196 	__u16			init_last_cmd;
197 
198 	struct crypto_blkcipher	*tfm;
199 
200 	struct inquiry_cache	inq_cache;
201 	struct hci_conn_hash	conn_hash;
202 	struct list_head	blacklist;
203 
204 	struct list_head	uuids;
205 
206 	struct list_head	link_keys;
207 
208 	struct list_head	remote_oob_data;
209 
210 	struct list_head	adv_entries;
211 	struct timer_list	adv_timer;
212 
213 	struct hci_dev_stats	stat;
214 
215 	struct sk_buff_head	driver_init;
216 
217 	void			*driver_data;
218 	void			*core_data;
219 
220 	atomic_t		promisc;
221 
222 	struct dentry		*debugfs;
223 
224 	struct device		*parent;
225 	struct device		dev;
226 
227 	struct rfkill		*rfkill;
228 
229 	struct module		*owner;
230 
231 	int (*open)(struct hci_dev *hdev);
232 	int (*close)(struct hci_dev *hdev);
233 	int (*flush)(struct hci_dev *hdev);
234 	int (*send)(struct sk_buff *skb);
235 	void (*destruct)(struct hci_dev *hdev);
236 	void (*notify)(struct hci_dev *hdev, unsigned int evt);
237 	int (*ioctl)(struct hci_dev *hdev, unsigned int cmd, unsigned long arg);
238 };
239 
240 struct hci_conn {
241 	struct list_head list;
242 
243 	atomic_t	refcnt;
244 
245 	bdaddr_t	dst;
246 	__u8		dst_type;
247 	__u16		handle;
248 	__u16		state;
249 	__u8		mode;
250 	__u8		type;
251 	__u8		out;
252 	__u8		attempt;
253 	__u8		dev_class[3];
254 	__u8		features[8];
255 	__u8		ssp_mode;
256 	__u16		interval;
257 	__u16		pkt_type;
258 	__u16		link_policy;
259 	__u32		link_mode;
260 	__u8		key_type;
261 	__u8		auth_type;
262 	__u8		sec_level;
263 	__u8		pending_sec_level;
264 	__u8		pin_length;
265 	__u8		enc_key_size;
266 	__u8		io_capability;
267 	__u8		power_save;
268 	__u16		disc_timeout;
269 	unsigned long	pend;
270 
271 	__u8		remote_cap;
272 	__u8		remote_oob;
273 	__u8		remote_auth;
274 
275 	unsigned int	sent;
276 
277 	struct sk_buff_head data_q;
278 
279 	struct timer_list disc_timer;
280 	struct timer_list idle_timer;
281 	struct timer_list auto_accept_timer;
282 
283 	struct work_struct work_add;
284 	struct work_struct work_del;
285 
286 	struct device	dev;
287 	atomic_t	devref;
288 
289 	struct hci_dev	*hdev;
290 	void		*l2cap_data;
291 	void		*sco_data;
292 
293 	struct hci_conn	*link;
294 
295 	void (*connect_cfm_cb)	(struct hci_conn *conn, u8 status);
296 	void (*security_cfm_cb)	(struct hci_conn *conn, u8 status);
297 	void (*disconn_cfm_cb)	(struct hci_conn *conn, u8 reason);
298 };
299 
300 extern struct hci_proto *hci_proto[];
301 extern struct list_head hci_dev_list;
302 extern struct list_head hci_cb_list;
303 extern rwlock_t hci_dev_list_lock;
304 extern rwlock_t hci_cb_list_lock;
305 
306 /* ----- Inquiry cache ----- */
307 #define INQUIRY_CACHE_AGE_MAX   (HZ*30)   /* 30 seconds */
308 #define INQUIRY_ENTRY_AGE_MAX   (HZ*60)   /* 60 seconds */
309 
310 #define inquiry_cache_lock(c)		spin_lock(&c->lock)
311 #define inquiry_cache_unlock(c)		spin_unlock(&c->lock)
312 #define inquiry_cache_lock_bh(c)	spin_lock_bh(&c->lock)
313 #define inquiry_cache_unlock_bh(c)	spin_unlock_bh(&c->lock)
314 
315 static inline void inquiry_cache_init(struct hci_dev *hdev)
316 {
317 	struct inquiry_cache *c = &hdev->inq_cache;
318 	spin_lock_init(&c->lock);
319 	c->list = NULL;
320 }
321 
322 static inline int inquiry_cache_empty(struct hci_dev *hdev)
323 {
324 	struct inquiry_cache *c = &hdev->inq_cache;
325 	return c->list == NULL;
326 }
327 
328 static inline long inquiry_cache_age(struct hci_dev *hdev)
329 {
330 	struct inquiry_cache *c = &hdev->inq_cache;
331 	return jiffies - c->timestamp;
332 }
333 
334 static inline long inquiry_entry_age(struct inquiry_entry *e)
335 {
336 	return jiffies - e->timestamp;
337 }
338 
339 struct inquiry_entry *hci_inquiry_cache_lookup(struct hci_dev *hdev,
340 							bdaddr_t *bdaddr);
341 void hci_inquiry_cache_update(struct hci_dev *hdev, struct inquiry_data *data);
342 
343 /* ----- HCI Connections ----- */
344 enum {
345 	HCI_CONN_AUTH_PEND,
346 	HCI_CONN_REAUTH_PEND,
347 	HCI_CONN_ENCRYPT_PEND,
348 	HCI_CONN_RSWITCH_PEND,
349 	HCI_CONN_MODE_CHANGE_PEND,
350 	HCI_CONN_SCO_SETUP_PEND,
351 };
352 
353 static inline void hci_conn_hash_init(struct hci_dev *hdev)
354 {
355 	struct hci_conn_hash *h = &hdev->conn_hash;
356 	INIT_LIST_HEAD(&h->list);
357 	spin_lock_init(&h->lock);
358 	h->acl_num = 0;
359 	h->sco_num = 0;
360 }
361 
362 static inline void hci_conn_hash_add(struct hci_dev *hdev, struct hci_conn *c)
363 {
364 	struct hci_conn_hash *h = &hdev->conn_hash;
365 	list_add(&c->list, &h->list);
366 	switch (c->type) {
367 	case ACL_LINK:
368 		h->acl_num++;
369 		break;
370 	case LE_LINK:
371 		h->le_num++;
372 		break;
373 	case SCO_LINK:
374 	case ESCO_LINK:
375 		h->sco_num++;
376 		break;
377 	}
378 }
379 
380 static inline void hci_conn_hash_del(struct hci_dev *hdev, struct hci_conn *c)
381 {
382 	struct hci_conn_hash *h = &hdev->conn_hash;
383 	list_del(&c->list);
384 	switch (c->type) {
385 	case ACL_LINK:
386 		h->acl_num--;
387 		break;
388 	case LE_LINK:
389 		h->le_num--;
390 		break;
391 	case SCO_LINK:
392 	case ESCO_LINK:
393 		h->sco_num--;
394 		break;
395 	}
396 }
397 
398 static inline struct hci_conn *hci_conn_hash_lookup_handle(struct hci_dev *hdev,
399 								__u16 handle)
400 {
401 	struct hci_conn_hash *h = &hdev->conn_hash;
402 	struct list_head *p;
403 	struct hci_conn  *c;
404 
405 	list_for_each(p, &h->list) {
406 		c = list_entry(p, struct hci_conn, list);
407 		if (c->handle == handle)
408 			return c;
409 	}
410 	return NULL;
411 }
412 
413 static inline struct hci_conn *hci_conn_hash_lookup_ba(struct hci_dev *hdev,
414 							__u8 type, bdaddr_t *ba)
415 {
416 	struct hci_conn_hash *h = &hdev->conn_hash;
417 	struct list_head *p;
418 	struct hci_conn  *c;
419 
420 	list_for_each(p, &h->list) {
421 		c = list_entry(p, struct hci_conn, list);
422 		if (c->type == type && !bacmp(&c->dst, ba))
423 			return c;
424 	}
425 	return NULL;
426 }
427 
428 static inline struct hci_conn *hci_conn_hash_lookup_state(struct hci_dev *hdev,
429 							__u8 type, __u16 state)
430 {
431 	struct hci_conn_hash *h = &hdev->conn_hash;
432 	struct list_head *p;
433 	struct hci_conn  *c;
434 
435 	list_for_each(p, &h->list) {
436 		c = list_entry(p, struct hci_conn, list);
437 		if (c->type == type && c->state == state)
438 			return c;
439 	}
440 	return NULL;
441 }
442 
443 void hci_acl_connect(struct hci_conn *conn);
444 void hci_acl_disconn(struct hci_conn *conn, __u8 reason);
445 void hci_add_sco(struct hci_conn *conn, __u16 handle);
446 void hci_setup_sync(struct hci_conn *conn, __u16 handle);
447 void hci_sco_setup(struct hci_conn *conn, __u8 status);
448 
449 struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst);
450 int hci_conn_del(struct hci_conn *conn);
451 void hci_conn_hash_flush(struct hci_dev *hdev);
452 void hci_conn_check_pending(struct hci_dev *hdev);
453 
454 struct hci_conn *hci_connect(struct hci_dev *hdev, int type, bdaddr_t *dst,
455 						__u8 sec_level, __u8 auth_type);
456 int hci_conn_check_link_mode(struct hci_conn *conn);
457 int hci_conn_check_secure(struct hci_conn *conn, __u8 sec_level);
458 int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type);
459 int hci_conn_change_link_key(struct hci_conn *conn);
460 int hci_conn_switch_role(struct hci_conn *conn, __u8 role);
461 
462 void hci_conn_enter_active_mode(struct hci_conn *conn, __u8 force_active);
463 void hci_conn_enter_sniff_mode(struct hci_conn *conn);
464 
465 void hci_conn_hold_device(struct hci_conn *conn);
466 void hci_conn_put_device(struct hci_conn *conn);
467 
468 static inline void hci_conn_hold(struct hci_conn *conn)
469 {
470 	atomic_inc(&conn->refcnt);
471 	del_timer(&conn->disc_timer);
472 }
473 
474 static inline void hci_conn_put(struct hci_conn *conn)
475 {
476 	if (atomic_dec_and_test(&conn->refcnt)) {
477 		unsigned long timeo;
478 		if (conn->type == ACL_LINK) {
479 			del_timer(&conn->idle_timer);
480 			if (conn->state == BT_CONNECTED) {
481 				timeo = msecs_to_jiffies(conn->disc_timeout);
482 				if (!conn->out)
483 					timeo *= 2;
484 			} else {
485 				timeo = msecs_to_jiffies(10);
486 			}
487 		} else {
488 			timeo = msecs_to_jiffies(10);
489 		}
490 		mod_timer(&conn->disc_timer, jiffies + timeo);
491 	}
492 }
493 
494 /* ----- HCI Devices ----- */
495 static inline void __hci_dev_put(struct hci_dev *d)
496 {
497 	if (atomic_dec_and_test(&d->refcnt))
498 		d->destruct(d);
499 }
500 
501 static inline void hci_dev_put(struct hci_dev *d)
502 {
503 	__hci_dev_put(d);
504 	module_put(d->owner);
505 }
506 
507 static inline struct hci_dev *__hci_dev_hold(struct hci_dev *d)
508 {
509 	atomic_inc(&d->refcnt);
510 	return d;
511 }
512 
513 static inline struct hci_dev *hci_dev_hold(struct hci_dev *d)
514 {
515 	if (try_module_get(d->owner))
516 		return __hci_dev_hold(d);
517 	return NULL;
518 }
519 
520 #define hci_dev_lock(d)		spin_lock(&d->lock)
521 #define hci_dev_unlock(d)	spin_unlock(&d->lock)
522 #define hci_dev_lock_bh(d)	spin_lock_bh(&d->lock)
523 #define hci_dev_unlock_bh(d)	spin_unlock_bh(&d->lock)
524 
525 struct hci_dev *hci_dev_get(int index);
526 struct hci_dev *hci_get_route(bdaddr_t *src, bdaddr_t *dst);
527 
528 struct hci_dev *hci_alloc_dev(void);
529 void hci_free_dev(struct hci_dev *hdev);
530 int hci_register_dev(struct hci_dev *hdev);
531 int hci_unregister_dev(struct hci_dev *hdev);
532 int hci_suspend_dev(struct hci_dev *hdev);
533 int hci_resume_dev(struct hci_dev *hdev);
534 int hci_dev_open(__u16 dev);
535 int hci_dev_close(__u16 dev);
536 int hci_dev_reset(__u16 dev);
537 int hci_dev_reset_stat(__u16 dev);
538 int hci_dev_cmd(unsigned int cmd, void __user *arg);
539 int hci_get_dev_list(void __user *arg);
540 int hci_get_dev_info(void __user *arg);
541 int hci_get_conn_list(void __user *arg);
542 int hci_get_conn_info(struct hci_dev *hdev, void __user *arg);
543 int hci_get_auth_info(struct hci_dev *hdev, void __user *arg);
544 int hci_inquiry(void __user *arg);
545 
546 struct bdaddr_list *hci_blacklist_lookup(struct hci_dev *hdev, bdaddr_t *bdaddr);
547 int hci_blacklist_clear(struct hci_dev *hdev);
548 int hci_blacklist_add(struct hci_dev *hdev, bdaddr_t *bdaddr);
549 int hci_blacklist_del(struct hci_dev *hdev, bdaddr_t *bdaddr);
550 
551 int hci_uuids_clear(struct hci_dev *hdev);
552 
553 int hci_link_keys_clear(struct hci_dev *hdev);
554 struct link_key *hci_find_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr);
555 int hci_add_link_key(struct hci_dev *hdev, struct hci_conn *conn, int new_key,
556 			bdaddr_t *bdaddr, u8 *val, u8 type, u8 pin_len);
557 struct link_key *hci_find_ltk(struct hci_dev *hdev, __le16 ediv, u8 rand[8]);
558 struct link_key *hci_find_link_key_type(struct hci_dev *hdev,
559 					bdaddr_t *bdaddr, u8 type);
560 int hci_add_ltk(struct hci_dev *hdev, int new_key, bdaddr_t *bdaddr,
561 			u8 key_size, __le16 ediv, u8 rand[8], u8 ltk[16]);
562 int hci_remove_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr);
563 
564 int hci_remote_oob_data_clear(struct hci_dev *hdev);
565 struct oob_data *hci_find_remote_oob_data(struct hci_dev *hdev,
566 							bdaddr_t *bdaddr);
567 int hci_add_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 *hash,
568 								u8 *randomizer);
569 int hci_remove_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr);
570 
571 #define ADV_CLEAR_TIMEOUT (3*60*HZ) /* Three minutes */
572 int hci_adv_entries_clear(struct hci_dev *hdev);
573 struct adv_entry *hci_find_adv_entry(struct hci_dev *hdev, bdaddr_t *bdaddr);
574 int hci_add_adv_entry(struct hci_dev *hdev,
575 					struct hci_ev_le_advertising_info *ev);
576 
577 void hci_del_off_timer(struct hci_dev *hdev);
578 
579 void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb);
580 
581 int hci_recv_frame(struct sk_buff *skb);
582 int hci_recv_fragment(struct hci_dev *hdev, int type, void *data, int count);
583 int hci_recv_stream_fragment(struct hci_dev *hdev, void *data, int count);
584 
585 int hci_register_sysfs(struct hci_dev *hdev);
586 void hci_unregister_sysfs(struct hci_dev *hdev);
587 void hci_conn_init_sysfs(struct hci_conn *conn);
588 void hci_conn_add_sysfs(struct hci_conn *conn);
589 void hci_conn_del_sysfs(struct hci_conn *conn);
590 
591 #define SET_HCIDEV_DEV(hdev, pdev) ((hdev)->parent = (pdev))
592 
593 /* ----- LMP capabilities ----- */
594 #define lmp_rswitch_capable(dev)   ((dev)->features[0] & LMP_RSWITCH)
595 #define lmp_encrypt_capable(dev)   ((dev)->features[0] & LMP_ENCRYPT)
596 #define lmp_sniff_capable(dev)     ((dev)->features[0] & LMP_SNIFF)
597 #define lmp_sniffsubr_capable(dev) ((dev)->features[5] & LMP_SNIFF_SUBR)
598 #define lmp_esco_capable(dev)      ((dev)->features[3] & LMP_ESCO)
599 #define lmp_ssp_capable(dev)       ((dev)->features[6] & LMP_SIMPLE_PAIR)
600 #define lmp_no_flush_capable(dev)  ((dev)->features[6] & LMP_NO_FLUSH)
601 #define lmp_le_capable(dev)        ((dev)->features[4] & LMP_LE)
602 
603 /* ----- Extended LMP capabilities ----- */
604 #define lmp_host_le_capable(dev)   ((dev)->extfeatures[0] & LMP_HOST_LE)
605 
606 /* ----- HCI protocols ----- */
607 struct hci_proto {
608 	char		*name;
609 	unsigned int	id;
610 	unsigned long	flags;
611 
612 	void		*priv;
613 
614 	int (*connect_ind)	(struct hci_dev *hdev, bdaddr_t *bdaddr,
615 								__u8 type);
616 	int (*connect_cfm)	(struct hci_conn *conn, __u8 status);
617 	int (*disconn_ind)	(struct hci_conn *conn);
618 	int (*disconn_cfm)	(struct hci_conn *conn, __u8 reason);
619 	int (*recv_acldata)	(struct hci_conn *conn, struct sk_buff *skb,
620 								__u16 flags);
621 	int (*recv_scodata)	(struct hci_conn *conn, struct sk_buff *skb);
622 	int (*security_cfm)	(struct hci_conn *conn, __u8 status,
623 								__u8 encrypt);
624 };
625 
626 static inline int hci_proto_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr,
627 								__u8 type)
628 {
629 	register struct hci_proto *hp;
630 	int mask = 0;
631 
632 	hp = hci_proto[HCI_PROTO_L2CAP];
633 	if (hp && hp->connect_ind)
634 		mask |= hp->connect_ind(hdev, bdaddr, type);
635 
636 	hp = hci_proto[HCI_PROTO_SCO];
637 	if (hp && hp->connect_ind)
638 		mask |= hp->connect_ind(hdev, bdaddr, type);
639 
640 	return mask;
641 }
642 
643 static inline void hci_proto_connect_cfm(struct hci_conn *conn, __u8 status)
644 {
645 	register struct hci_proto *hp;
646 
647 	hp = hci_proto[HCI_PROTO_L2CAP];
648 	if (hp && hp->connect_cfm)
649 		hp->connect_cfm(conn, status);
650 
651 	hp = hci_proto[HCI_PROTO_SCO];
652 	if (hp && hp->connect_cfm)
653 		hp->connect_cfm(conn, status);
654 
655 	if (conn->connect_cfm_cb)
656 		conn->connect_cfm_cb(conn, status);
657 }
658 
659 static inline int hci_proto_disconn_ind(struct hci_conn *conn)
660 {
661 	register struct hci_proto *hp;
662 	int reason = 0x13;
663 
664 	hp = hci_proto[HCI_PROTO_L2CAP];
665 	if (hp && hp->disconn_ind)
666 		reason = hp->disconn_ind(conn);
667 
668 	hp = hci_proto[HCI_PROTO_SCO];
669 	if (hp && hp->disconn_ind)
670 		reason = hp->disconn_ind(conn);
671 
672 	return reason;
673 }
674 
675 static inline void hci_proto_disconn_cfm(struct hci_conn *conn, __u8 reason)
676 {
677 	register struct hci_proto *hp;
678 
679 	hp = hci_proto[HCI_PROTO_L2CAP];
680 	if (hp && hp->disconn_cfm)
681 		hp->disconn_cfm(conn, reason);
682 
683 	hp = hci_proto[HCI_PROTO_SCO];
684 	if (hp && hp->disconn_cfm)
685 		hp->disconn_cfm(conn, reason);
686 
687 	if (conn->disconn_cfm_cb)
688 		conn->disconn_cfm_cb(conn, reason);
689 }
690 
691 static inline void hci_proto_auth_cfm(struct hci_conn *conn, __u8 status)
692 {
693 	register struct hci_proto *hp;
694 	__u8 encrypt;
695 
696 	if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend))
697 		return;
698 
699 	encrypt = (conn->link_mode & HCI_LM_ENCRYPT) ? 0x01 : 0x00;
700 
701 	hp = hci_proto[HCI_PROTO_L2CAP];
702 	if (hp && hp->security_cfm)
703 		hp->security_cfm(conn, status, encrypt);
704 
705 	hp = hci_proto[HCI_PROTO_SCO];
706 	if (hp && hp->security_cfm)
707 		hp->security_cfm(conn, status, encrypt);
708 
709 	if (conn->security_cfm_cb)
710 		conn->security_cfm_cb(conn, status);
711 }
712 
713 static inline void hci_proto_encrypt_cfm(struct hci_conn *conn, __u8 status,
714 								__u8 encrypt)
715 {
716 	register struct hci_proto *hp;
717 
718 	hp = hci_proto[HCI_PROTO_L2CAP];
719 	if (hp && hp->security_cfm)
720 		hp->security_cfm(conn, status, encrypt);
721 
722 	hp = hci_proto[HCI_PROTO_SCO];
723 	if (hp && hp->security_cfm)
724 		hp->security_cfm(conn, status, encrypt);
725 
726 	if (conn->security_cfm_cb)
727 		conn->security_cfm_cb(conn, status);
728 }
729 
730 int hci_register_proto(struct hci_proto *hproto);
731 int hci_unregister_proto(struct hci_proto *hproto);
732 
733 /* ----- HCI callbacks ----- */
734 struct hci_cb {
735 	struct list_head list;
736 
737 	char *name;
738 
739 	void (*security_cfm)	(struct hci_conn *conn, __u8 status,
740 								__u8 encrypt);
741 	void (*key_change_cfm)	(struct hci_conn *conn, __u8 status);
742 	void (*role_switch_cfm)	(struct hci_conn *conn, __u8 status, __u8 role);
743 };
744 
745 static inline void hci_auth_cfm(struct hci_conn *conn, __u8 status)
746 {
747 	struct list_head *p;
748 	__u8 encrypt;
749 
750 	hci_proto_auth_cfm(conn, status);
751 
752 	if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend))
753 		return;
754 
755 	encrypt = (conn->link_mode & HCI_LM_ENCRYPT) ? 0x01 : 0x00;
756 
757 	read_lock_bh(&hci_cb_list_lock);
758 	list_for_each(p, &hci_cb_list) {
759 		struct hci_cb *cb = list_entry(p, struct hci_cb, list);
760 		if (cb->security_cfm)
761 			cb->security_cfm(conn, status, encrypt);
762 	}
763 	read_unlock_bh(&hci_cb_list_lock);
764 }
765 
766 static inline void hci_encrypt_cfm(struct hci_conn *conn, __u8 status,
767 								__u8 encrypt)
768 {
769 	struct list_head *p;
770 
771 	if (conn->sec_level == BT_SECURITY_SDP)
772 		conn->sec_level = BT_SECURITY_LOW;
773 
774 	if (conn->pending_sec_level > conn->sec_level)
775 		conn->sec_level = conn->pending_sec_level;
776 
777 	hci_proto_encrypt_cfm(conn, status, encrypt);
778 
779 	read_lock_bh(&hci_cb_list_lock);
780 	list_for_each(p, &hci_cb_list) {
781 		struct hci_cb *cb = list_entry(p, struct hci_cb, list);
782 		if (cb->security_cfm)
783 			cb->security_cfm(conn, status, encrypt);
784 	}
785 	read_unlock_bh(&hci_cb_list_lock);
786 }
787 
788 static inline void hci_key_change_cfm(struct hci_conn *conn, __u8 status)
789 {
790 	struct list_head *p;
791 
792 	read_lock_bh(&hci_cb_list_lock);
793 	list_for_each(p, &hci_cb_list) {
794 		struct hci_cb *cb = list_entry(p, struct hci_cb, list);
795 		if (cb->key_change_cfm)
796 			cb->key_change_cfm(conn, status);
797 	}
798 	read_unlock_bh(&hci_cb_list_lock);
799 }
800 
801 static inline void hci_role_switch_cfm(struct hci_conn *conn, __u8 status,
802 								__u8 role)
803 {
804 	struct list_head *p;
805 
806 	read_lock_bh(&hci_cb_list_lock);
807 	list_for_each(p, &hci_cb_list) {
808 		struct hci_cb *cb = list_entry(p, struct hci_cb, list);
809 		if (cb->role_switch_cfm)
810 			cb->role_switch_cfm(conn, status, role);
811 	}
812 	read_unlock_bh(&hci_cb_list_lock);
813 }
814 
815 int hci_register_cb(struct hci_cb *hcb);
816 int hci_unregister_cb(struct hci_cb *hcb);
817 
818 int hci_register_notifier(struct notifier_block *nb);
819 int hci_unregister_notifier(struct notifier_block *nb);
820 
821 int hci_send_cmd(struct hci_dev *hdev, __u16 opcode, __u32 plen, void *param);
822 void hci_send_acl(struct hci_conn *conn, struct sk_buff *skb, __u16 flags);
823 void hci_send_sco(struct hci_conn *conn, struct sk_buff *skb);
824 
825 void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 opcode);
826 
827 void hci_si_event(struct hci_dev *hdev, int type, int dlen, void *data);
828 
829 /* ----- HCI Sockets ----- */
830 void hci_send_to_sock(struct hci_dev *hdev, struct sk_buff *skb,
831 							struct sock *skip_sk);
832 
833 /* Management interface */
834 int mgmt_control(struct sock *sk, struct msghdr *msg, size_t len);
835 int mgmt_index_added(u16 index);
836 int mgmt_index_removed(u16 index);
837 int mgmt_powered(u16 index, u8 powered);
838 int mgmt_discoverable(u16 index, u8 discoverable);
839 int mgmt_connectable(u16 index, u8 connectable);
840 int mgmt_new_key(u16 index, struct link_key *key, u8 persistent);
841 int mgmt_connected(u16 index, bdaddr_t *bdaddr);
842 int mgmt_disconnected(u16 index, bdaddr_t *bdaddr);
843 int mgmt_disconnect_failed(u16 index);
844 int mgmt_connect_failed(u16 index, bdaddr_t *bdaddr, u8 status);
845 int mgmt_pin_code_request(u16 index, bdaddr_t *bdaddr, u8 secure);
846 int mgmt_pin_code_reply_complete(u16 index, bdaddr_t *bdaddr, u8 status);
847 int mgmt_pin_code_neg_reply_complete(u16 index, bdaddr_t *bdaddr, u8 status);
848 int mgmt_user_confirm_request(u16 index, bdaddr_t *bdaddr, __le32 value,
849 							u8 confirm_hint);
850 int mgmt_user_confirm_reply_complete(u16 index, bdaddr_t *bdaddr, u8 status);
851 int mgmt_user_confirm_neg_reply_complete(u16 index, bdaddr_t *bdaddr,
852 								u8 status);
853 int mgmt_auth_failed(u16 index, bdaddr_t *bdaddr, u8 status);
854 int mgmt_set_local_name_complete(u16 index, u8 *name, u8 status);
855 int mgmt_read_local_oob_data_reply_complete(u16 index, u8 *hash, u8 *randomizer,
856 								u8 status);
857 int mgmt_device_found(u16 index, bdaddr_t *bdaddr, u8 *dev_class, s8 rssi,
858 								u8 *eir);
859 int mgmt_remote_name(u16 index, bdaddr_t *bdaddr, u8 *name);
860 int mgmt_discovering(u16 index, u8 discovering);
861 
862 /* HCI info for socket */
863 #define hci_pi(sk) ((struct hci_pinfo *) sk)
864 
865 struct hci_pinfo {
866 	struct bt_sock    bt;
867 	struct hci_dev    *hdev;
868 	struct hci_filter filter;
869 	__u32             cmsg_mask;
870 	unsigned short   channel;
871 };
872 
873 /* HCI security filter */
874 #define HCI_SFLT_MAX_OGF  5
875 
876 struct hci_sec_filter {
877 	__u32 type_mask;
878 	__u32 event_mask[2];
879 	__u32 ocf_mask[HCI_SFLT_MAX_OGF + 1][4];
880 };
881 
882 /* ----- HCI requests ----- */
883 #define HCI_REQ_DONE	  0
884 #define HCI_REQ_PEND	  1
885 #define HCI_REQ_CANCELED  2
886 
887 #define hci_req_lock(d)		mutex_lock(&d->req_lock)
888 #define hci_req_unlock(d)	mutex_unlock(&d->req_lock)
889 
890 void hci_req_complete(struct hci_dev *hdev, __u16 cmd, int result);
891 
892 void hci_le_conn_update(struct hci_conn *conn, u16 min, u16 max,
893 					u16 latency, u16 to_multiplier);
894 void hci_le_start_enc(struct hci_conn *conn, __le16 ediv, __u8 rand[8],
895 							__u8 ltk[16]);
896 void hci_le_ltk_reply(struct hci_conn *conn, u8 ltk[16]);
897 void hci_le_ltk_neg_reply(struct hci_conn *conn);
898 
899 #endif /* __HCI_CORE_H */
900