xref: /openbmc/linux/include/net/bluetooth/l2cap.h (revision 793c2f1c)
1 /*
2    BlueZ - Bluetooth protocol stack for Linux
3    Copyright (C) 2000-2001 Qualcomm Incorporated
4    Copyright (C) 2009-2010 Gustavo F. Padovan <gustavo@padovan.org>
5    Copyright (C) 2010 Google Inc.
6 
7    Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
8 
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License version 2 as
11    published by the Free Software Foundation;
12 
13    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
14    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
16    IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
17    CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
18    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
19    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
20    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
21 
22    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
23    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
24    SOFTWARE IS DISCLAIMED.
25 */
26 
27 #ifndef __L2CAP_H
28 #define __L2CAP_H
29 
30 /* L2CAP defaults */
31 #define L2CAP_DEFAULT_MTU		672
32 #define L2CAP_DEFAULT_MIN_MTU		48
33 #define L2CAP_DEFAULT_FLUSH_TO		0xffff
34 #define L2CAP_DEFAULT_TX_WINDOW		63
35 #define L2CAP_DEFAULT_EXT_WINDOW	0x3FFF
36 #define L2CAP_DEFAULT_MAX_TX		3
37 #define L2CAP_DEFAULT_RETRANS_TO	2000    /* 2 seconds */
38 #define L2CAP_DEFAULT_MONITOR_TO	12000   /* 12 seconds */
39 #define L2CAP_DEFAULT_MAX_PDU_SIZE	1009    /* Sized for 3-DH5 packet */
40 #define L2CAP_DEFAULT_ACK_TO		200
41 #define L2CAP_LE_DEFAULT_MTU		23
42 
43 #define L2CAP_CONN_TIMEOUT	(40000) /* 40 seconds */
44 #define L2CAP_INFO_TIMEOUT	(4000)  /*  4 seconds */
45 
46 /* L2CAP socket address */
47 struct sockaddr_l2 {
48 	sa_family_t	l2_family;
49 	__le16		l2_psm;
50 	bdaddr_t	l2_bdaddr;
51 	__le16		l2_cid;
52 };
53 
54 /* L2CAP socket options */
55 #define L2CAP_OPTIONS	0x01
56 struct l2cap_options {
57 	__u16 omtu;
58 	__u16 imtu;
59 	__u16 flush_to;
60 	__u8  mode;
61 	__u8  fcs;
62 	__u8  max_tx;
63 	__u16 txwin_size;
64 };
65 
66 #define L2CAP_CONNINFO	0x02
67 struct l2cap_conninfo {
68 	__u16 hci_handle;
69 	__u8  dev_class[3];
70 };
71 
72 #define L2CAP_LM	0x03
73 #define L2CAP_LM_MASTER		0x0001
74 #define L2CAP_LM_AUTH		0x0002
75 #define L2CAP_LM_ENCRYPT	0x0004
76 #define L2CAP_LM_TRUSTED	0x0008
77 #define L2CAP_LM_RELIABLE	0x0010
78 #define L2CAP_LM_SECURE		0x0020
79 
80 /* L2CAP command codes */
81 #define L2CAP_COMMAND_REJ	0x01
82 #define L2CAP_CONN_REQ		0x02
83 #define L2CAP_CONN_RSP		0x03
84 #define L2CAP_CONF_REQ		0x04
85 #define L2CAP_CONF_RSP		0x05
86 #define L2CAP_DISCONN_REQ	0x06
87 #define L2CAP_DISCONN_RSP	0x07
88 #define L2CAP_ECHO_REQ		0x08
89 #define L2CAP_ECHO_RSP		0x09
90 #define L2CAP_INFO_REQ		0x0a
91 #define L2CAP_INFO_RSP		0x0b
92 #define L2CAP_CONN_PARAM_UPDATE_REQ	0x12
93 #define L2CAP_CONN_PARAM_UPDATE_RSP	0x13
94 
95 /* L2CAP extended feature mask */
96 #define L2CAP_FEAT_FLOWCTL	0x00000001
97 #define L2CAP_FEAT_RETRANS	0x00000002
98 #define L2CAP_FEAT_BIDIR_QOS	0x00000004
99 #define L2CAP_FEAT_ERTM		0x00000008
100 #define L2CAP_FEAT_STREAMING	0x00000010
101 #define L2CAP_FEAT_FCS		0x00000020
102 #define L2CAP_FEAT_EXT_FLOW	0x00000040
103 #define L2CAP_FEAT_FIXED_CHAN	0x00000080
104 #define L2CAP_FEAT_EXT_WINDOW	0x00000100
105 #define L2CAP_FEAT_UCD		0x00000200
106 
107 /* L2CAP checksum option */
108 #define L2CAP_FCS_NONE		0x00
109 #define L2CAP_FCS_CRC16		0x01
110 
111 /* L2CAP Control Field bit masks */
112 #define L2CAP_CTRL_SAR			0xC000
113 #define L2CAP_CTRL_REQSEQ		0x3F00
114 #define L2CAP_CTRL_TXSEQ		0x007E
115 #define L2CAP_CTRL_SUPERVISE		0x000C
116 
117 #define L2CAP_CTRL_RETRANS		0x0080
118 #define L2CAP_CTRL_FINAL		0x0080
119 #define L2CAP_CTRL_POLL			0x0010
120 #define L2CAP_CTRL_FRAME_TYPE		0x0001 /* I- or S-Frame */
121 
122 #define L2CAP_CTRL_TXSEQ_SHIFT		1
123 #define L2CAP_CTRL_SUPER_SHIFT		2
124 #define L2CAP_CTRL_REQSEQ_SHIFT		8
125 #define L2CAP_CTRL_SAR_SHIFT		14
126 
127 /* L2CAP Extended Control Field bit mask */
128 #define L2CAP_EXT_CTRL_TXSEQ		0xFFFC0000
129 #define L2CAP_EXT_CTRL_SAR		0x00030000
130 #define L2CAP_EXT_CTRL_SUPERVISE	0x00030000
131 #define L2CAP_EXT_CTRL_REQSEQ		0x0000FFFC
132 
133 #define L2CAP_EXT_CTRL_POLL		0x00040000
134 #define L2CAP_EXT_CTRL_FINAL		0x00000002
135 #define L2CAP_EXT_CTRL_FRAME_TYPE	0x00000001 /* I- or S-Frame */
136 
137 #define L2CAP_EXT_CTRL_REQSEQ_SHIFT	2
138 #define L2CAP_EXT_CTRL_SAR_SHIFT	16
139 #define L2CAP_EXT_CTRL_SUPER_SHIFT	16
140 #define L2CAP_EXT_CTRL_TXSEQ_SHIFT	18
141 
142 /* L2CAP Supervisory Function */
143 #define L2CAP_SUPER_RR		0x00
144 #define L2CAP_SUPER_REJ		0x01
145 #define L2CAP_SUPER_RNR		0x02
146 #define L2CAP_SUPER_SREJ	0x03
147 
148 /* L2CAP Segmentation and Reassembly */
149 #define L2CAP_SAR_UNSEGMENTED	0x00
150 #define L2CAP_SAR_START		0x01
151 #define L2CAP_SAR_END		0x02
152 #define L2CAP_SAR_CONTINUE	0x03
153 
154 /* L2CAP Command rej. reasons */
155 #define L2CAP_REJ_NOT_UNDERSTOOD	0x0000
156 #define L2CAP_REJ_MTU_EXCEEDED		0x0001
157 #define L2CAP_REJ_INVALID_CID		0x0002
158 
159 /* L2CAP structures */
160 struct l2cap_hdr {
161 	__le16     len;
162 	__le16     cid;
163 } __packed;
164 #define L2CAP_HDR_SIZE		4
165 
166 struct l2cap_cmd_hdr {
167 	__u8       code;
168 	__u8       ident;
169 	__le16     len;
170 } __packed;
171 #define L2CAP_CMD_HDR_SIZE	4
172 
173 struct l2cap_cmd_rej_unk {
174 	__le16     reason;
175 } __packed;
176 
177 struct l2cap_cmd_rej_mtu {
178 	__le16     reason;
179 	__le16     max_mtu;
180 } __packed;
181 
182 struct l2cap_cmd_rej_cid {
183 	__le16     reason;
184 	__le16     scid;
185 	__le16     dcid;
186 } __packed;
187 
188 struct l2cap_conn_req {
189 	__le16     psm;
190 	__le16     scid;
191 } __packed;
192 
193 struct l2cap_conn_rsp {
194 	__le16     dcid;
195 	__le16     scid;
196 	__le16     result;
197 	__le16     status;
198 } __packed;
199 
200 /* channel indentifier */
201 #define L2CAP_CID_SIGNALING	0x0001
202 #define L2CAP_CID_CONN_LESS	0x0002
203 #define L2CAP_CID_LE_DATA	0x0004
204 #define L2CAP_CID_LE_SIGNALING	0x0005
205 #define L2CAP_CID_SMP		0x0006
206 #define L2CAP_CID_DYN_START	0x0040
207 #define L2CAP_CID_DYN_END	0xffff
208 
209 /* connect result */
210 #define L2CAP_CR_SUCCESS	0x0000
211 #define L2CAP_CR_PEND		0x0001
212 #define L2CAP_CR_BAD_PSM	0x0002
213 #define L2CAP_CR_SEC_BLOCK	0x0003
214 #define L2CAP_CR_NO_MEM		0x0004
215 
216 /* connect status */
217 #define L2CAP_CS_NO_INFO	0x0000
218 #define L2CAP_CS_AUTHEN_PEND	0x0001
219 #define L2CAP_CS_AUTHOR_PEND	0x0002
220 
221 struct l2cap_conf_req {
222 	__le16     dcid;
223 	__le16     flags;
224 	__u8       data[0];
225 } __packed;
226 
227 struct l2cap_conf_rsp {
228 	__le16     scid;
229 	__le16     flags;
230 	__le16     result;
231 	__u8       data[0];
232 } __packed;
233 
234 #define L2CAP_CONF_SUCCESS	0x0000
235 #define L2CAP_CONF_UNACCEPT	0x0001
236 #define L2CAP_CONF_REJECT	0x0002
237 #define L2CAP_CONF_UNKNOWN	0x0003
238 
239 struct l2cap_conf_opt {
240 	__u8       type;
241 	__u8       len;
242 	__u8       val[0];
243 } __packed;
244 #define L2CAP_CONF_OPT_SIZE	2
245 
246 #define L2CAP_CONF_HINT		0x80
247 #define L2CAP_CONF_MASK		0x7f
248 
249 #define L2CAP_CONF_MTU		0x01
250 #define L2CAP_CONF_FLUSH_TO	0x02
251 #define L2CAP_CONF_QOS		0x03
252 #define L2CAP_CONF_RFC		0x04
253 #define L2CAP_CONF_FCS		0x05
254 #define L2CAP_CONF_EWS		0x07
255 
256 #define L2CAP_CONF_MAX_SIZE	22
257 
258 struct l2cap_conf_rfc {
259 	__u8       mode;
260 	__u8       txwin_size;
261 	__u8       max_transmit;
262 	__le16     retrans_timeout;
263 	__le16     monitor_timeout;
264 	__le16     max_pdu_size;
265 } __packed;
266 
267 #define L2CAP_MODE_BASIC	0x00
268 #define L2CAP_MODE_RETRANS	0x01
269 #define L2CAP_MODE_FLOWCTL	0x02
270 #define L2CAP_MODE_ERTM		0x03
271 #define L2CAP_MODE_STREAMING	0x04
272 
273 struct l2cap_disconn_req {
274 	__le16     dcid;
275 	__le16     scid;
276 } __packed;
277 
278 struct l2cap_disconn_rsp {
279 	__le16     dcid;
280 	__le16     scid;
281 } __packed;
282 
283 struct l2cap_info_req {
284 	__le16      type;
285 } __packed;
286 
287 struct l2cap_info_rsp {
288 	__le16      type;
289 	__le16      result;
290 	__u8        data[0];
291 } __packed;
292 
293 /* info type */
294 #define L2CAP_IT_CL_MTU		0x0001
295 #define L2CAP_IT_FEAT_MASK	0x0002
296 #define L2CAP_IT_FIXED_CHAN	0x0003
297 
298 /* info result */
299 #define L2CAP_IR_SUCCESS	0x0000
300 #define L2CAP_IR_NOTSUPP	0x0001
301 
302 struct l2cap_conn_param_update_req {
303 	__le16      min;
304 	__le16      max;
305 	__le16      latency;
306 	__le16      to_multiplier;
307 } __packed;
308 
309 struct l2cap_conn_param_update_rsp {
310 	__le16      result;
311 } __packed;
312 
313 /* Connection Parameters result */
314 #define L2CAP_CONN_PARAM_ACCEPTED	0x0000
315 #define L2CAP_CONN_PARAM_REJECTED	0x0001
316 
317 /* ----- L2CAP channels and connections ----- */
318 struct srej_list {
319 	__u16	tx_seq;
320 	struct list_head list;
321 };
322 
323 struct l2cap_chan {
324 	struct sock *sk;
325 
326 	struct l2cap_conn	*conn;
327 
328 	__u8		state;
329 
330 	atomic_t	refcnt;
331 
332 	__le16		psm;
333 	__u16		dcid;
334 	__u16		scid;
335 
336 	__u16		imtu;
337 	__u16		omtu;
338 	__u16		flush_to;
339 	__u8		mode;
340 	__u8		chan_type;
341 
342 	__le16		sport;
343 
344 	__u8		sec_level;
345 
346 	__u8		ident;
347 
348 	__u8		conf_req[64];
349 	__u8		conf_len;
350 	__u8		num_conf_req;
351 	__u8		num_conf_rsp;
352 
353 	__u8		fcs;
354 
355 	__u16		tx_win;
356 	__u8		max_tx;
357 	__u16		retrans_timeout;
358 	__u16		monitor_timeout;
359 	__u16		mps;
360 
361 	unsigned long	conf_state;
362 	unsigned long	conn_state;
363 	unsigned long	flags;
364 
365 	__u16		next_tx_seq;
366 	__u16		expected_ack_seq;
367 	__u16		expected_tx_seq;
368 	__u16		buffer_seq;
369 	__u16		buffer_seq_srej;
370 	__u16		srej_save_reqseq;
371 	__u16		frames_sent;
372 	__u16		unacked_frames;
373 	__u8		retry_count;
374 	__u8		num_acked;
375 	__u16		sdu_len;
376 	struct sk_buff	*sdu;
377 	struct sk_buff	*sdu_last_frag;
378 
379 	__u16		remote_tx_win;
380 	__u8		remote_max_tx;
381 	__u16		remote_mps;
382 
383 	struct timer_list	chan_timer;
384 	struct timer_list	retrans_timer;
385 	struct timer_list	monitor_timer;
386 	struct timer_list	ack_timer;
387 	struct sk_buff		*tx_send_head;
388 	struct sk_buff_head	tx_q;
389 	struct sk_buff_head	srej_q;
390 	struct list_head	srej_l;
391 
392 	struct list_head list;
393 	struct list_head global_l;
394 
395 	void		*data;
396 	struct l2cap_ops *ops;
397 };
398 
399 struct l2cap_ops {
400 	char		*name;
401 
402 	struct l2cap_chan	*(*new_connection) (void *data);
403 	int			(*recv) (void *data, struct sk_buff *skb);
404 	void			(*close) (void *data);
405 	void			(*state_change) (void *data, int state);
406 };
407 
408 struct l2cap_conn {
409 	struct hci_conn	*hcon;
410 
411 	bdaddr_t	*dst;
412 	bdaddr_t	*src;
413 
414 	unsigned int	mtu;
415 
416 	__u32		feat_mask;
417 
418 	__u8		info_state;
419 	__u8		info_ident;
420 
421 	struct timer_list info_timer;
422 
423 	spinlock_t	lock;
424 
425 	struct sk_buff *rx_skb;
426 	__u32		rx_len;
427 	__u8		tx_ident;
428 
429 	__u8		disc_reason;
430 
431 	struct timer_list security_timer;
432 	struct smp_chan *smp_chan;
433 
434 	struct list_head chan_l;
435 	rwlock_t	chan_lock;
436 };
437 
438 #define L2CAP_INFO_CL_MTU_REQ_SENT	0x01
439 #define L2CAP_INFO_FEAT_MASK_REQ_SENT	0x04
440 #define L2CAP_INFO_FEAT_MASK_REQ_DONE	0x08
441 
442 #define L2CAP_CHAN_RAW			1
443 #define L2CAP_CHAN_CONN_LESS		2
444 #define L2CAP_CHAN_CONN_ORIENTED	3
445 
446 /* ----- L2CAP socket info ----- */
447 #define l2cap_pi(sk) ((struct l2cap_pinfo *) sk)
448 
449 struct l2cap_pinfo {
450 	struct bt_sock	bt;
451 	struct l2cap_chan	*chan;
452 	struct sk_buff	*rx_busy_skb;
453 };
454 
455 enum {
456 	CONF_REQ_SENT,
457 	CONF_INPUT_DONE,
458 	CONF_OUTPUT_DONE,
459 	CONF_MTU_DONE,
460 	CONF_MODE_DONE,
461 	CONF_CONNECT_PEND,
462 	CONF_NO_FCS_RECV,
463 	CONF_STATE2_DEVICE,
464 	CONF_EWS_RECV,
465 };
466 
467 #define L2CAP_CONF_MAX_CONF_REQ 2
468 #define L2CAP_CONF_MAX_CONF_RSP 2
469 
470 enum {
471 	CONN_SREJ_SENT,
472 	CONN_WAIT_F,
473 	CONN_SREJ_ACT,
474 	CONN_SEND_PBIT,
475 	CONN_REMOTE_BUSY,
476 	CONN_LOCAL_BUSY,
477 	CONN_REJ_ACT,
478 	CONN_SEND_FBIT,
479 	CONN_RNR_SENT,
480 };
481 
482 /* Definitions for flags in l2cap_chan */
483 enum {
484 	FLAG_ROLE_SWITCH,
485 	FLAG_FORCE_ACTIVE,
486 	FLAG_FORCE_RELIABLE,
487 	FLAG_FLUSHABLE,
488 	FLAG_EXT_CTRL,
489 };
490 
491 #define __set_chan_timer(c, t) l2cap_set_timer(c, &c->chan_timer, (t))
492 #define __clear_chan_timer(c) l2cap_clear_timer(c, &c->chan_timer)
493 #define __set_retrans_timer(c) l2cap_set_timer(c, &c->retrans_timer, \
494 		L2CAP_DEFAULT_RETRANS_TO);
495 #define __clear_retrans_timer(c) l2cap_clear_timer(c, &c->retrans_timer)
496 #define __set_monitor_timer(c) l2cap_set_timer(c, &c->monitor_timer, \
497 		L2CAP_DEFAULT_MONITOR_TO);
498 #define __clear_monitor_timer(c) l2cap_clear_timer(c, &c->monitor_timer)
499 #define __set_ack_timer(c) l2cap_set_timer(c, &chan->ack_timer, \
500 		L2CAP_DEFAULT_ACK_TO);
501 #define __clear_ack_timer(c) l2cap_clear_timer(c, &c->ack_timer)
502 
503 static inline int l2cap_tx_window_full(struct l2cap_chan *ch)
504 {
505 	int sub;
506 
507 	sub = (ch->next_tx_seq - ch->expected_ack_seq) % 64;
508 
509 	if (sub < 0)
510 		sub += 64;
511 
512 	return sub == ch->remote_tx_win;
513 }
514 
515 static inline __u16 __get_reqseq(struct l2cap_chan *chan, __u32 ctrl)
516 {
517 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
518 		return (ctrl & L2CAP_EXT_CTRL_REQSEQ) >>
519 						L2CAP_EXT_CTRL_REQSEQ_SHIFT;
520 	else
521 		return (ctrl & L2CAP_CTRL_REQSEQ) >> L2CAP_CTRL_REQSEQ_SHIFT;
522 }
523 
524 static inline __u32 __set_reqseq(struct l2cap_chan *chan, __u32 reqseq)
525 {
526 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
527 		return (reqseq << L2CAP_EXT_CTRL_REQSEQ_SHIFT) &
528 							L2CAP_EXT_CTRL_REQSEQ;
529 	else
530 		return (reqseq << L2CAP_CTRL_REQSEQ_SHIFT) & L2CAP_CTRL_REQSEQ;
531 }
532 
533 static inline __u16 __get_txseq(struct l2cap_chan *chan, __u32 ctrl)
534 {
535 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
536 		return (ctrl & L2CAP_EXT_CTRL_TXSEQ) >>
537 						L2CAP_EXT_CTRL_TXSEQ_SHIFT;
538 	else
539 		return (ctrl & L2CAP_CTRL_TXSEQ) >> L2CAP_CTRL_TXSEQ_SHIFT;
540 }
541 
542 static inline __u32 __set_txseq(struct l2cap_chan *chan, __u32 txseq)
543 {
544 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
545 		return (txseq << L2CAP_EXT_CTRL_TXSEQ_SHIFT) &
546 							L2CAP_EXT_CTRL_TXSEQ;
547 	else
548 		return (txseq << L2CAP_CTRL_TXSEQ_SHIFT) & L2CAP_CTRL_TXSEQ;
549 }
550 
551 static inline bool __is_sframe(struct l2cap_chan *chan, __u32 ctrl)
552 {
553 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
554 		return ctrl & L2CAP_EXT_CTRL_FRAME_TYPE;
555 	else
556 		return ctrl & L2CAP_CTRL_FRAME_TYPE;
557 }
558 
559 static inline __u32 __set_sframe(struct l2cap_chan *chan)
560 {
561 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
562 		return L2CAP_EXT_CTRL_FRAME_TYPE;
563 	else
564 		return L2CAP_CTRL_FRAME_TYPE;
565 }
566 
567 static inline __u8 __get_ctrl_sar(struct l2cap_chan *chan, __u32 ctrl)
568 {
569 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
570 		return (ctrl & L2CAP_EXT_CTRL_SAR) >> L2CAP_EXT_CTRL_SAR_SHIFT;
571 	else
572 		return (ctrl & L2CAP_CTRL_SAR) >> L2CAP_CTRL_SAR_SHIFT;
573 }
574 
575 static inline __u32 __set_ctrl_sar(struct l2cap_chan *chan, __u32 sar)
576 {
577 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
578 		return (sar << L2CAP_EXT_CTRL_SAR_SHIFT) & L2CAP_EXT_CTRL_SAR;
579 	else
580 		return (sar << L2CAP_CTRL_SAR_SHIFT) & L2CAP_CTRL_SAR;
581 }
582 
583 static inline bool __is_sar_start(struct l2cap_chan *chan, __u32 ctrl)
584 {
585 	return __get_ctrl_sar(chan, ctrl) == L2CAP_SAR_START;
586 }
587 
588 static inline __u32 __get_sar_mask(struct l2cap_chan *chan)
589 {
590 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
591 		return L2CAP_EXT_CTRL_SAR;
592 	else
593 		return L2CAP_CTRL_SAR;
594 }
595 
596 static inline __u8 __get_ctrl_super(struct l2cap_chan *chan, __u32 ctrl)
597 {
598 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
599 		return (ctrl & L2CAP_EXT_CTRL_SUPERVISE) >>
600 						L2CAP_EXT_CTRL_SUPER_SHIFT;
601 	else
602 		return (ctrl & L2CAP_CTRL_SUPERVISE) >> L2CAP_CTRL_SUPER_SHIFT;
603 }
604 
605 static inline __u32 __set_ctrl_super(struct l2cap_chan *chan, __u32 super)
606 {
607 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
608 		return (super << L2CAP_EXT_CTRL_SUPER_SHIFT) &
609 						L2CAP_EXT_CTRL_SUPERVISE;
610 	else
611 		return (super << L2CAP_CTRL_SUPER_SHIFT) &
612 							L2CAP_CTRL_SUPERVISE;
613 }
614 
615 extern int disable_ertm;
616 
617 int l2cap_init_sockets(void);
618 void l2cap_cleanup_sockets(void);
619 
620 void __l2cap_connect_rsp_defer(struct l2cap_chan *chan);
621 int __l2cap_wait_ack(struct sock *sk);
622 
623 int l2cap_add_psm(struct l2cap_chan *chan, bdaddr_t *src, __le16 psm);
624 int l2cap_add_scid(struct l2cap_chan *chan,  __u16 scid);
625 
626 struct l2cap_chan *l2cap_chan_create(struct sock *sk);
627 void l2cap_chan_close(struct l2cap_chan *chan, int reason);
628 void l2cap_chan_destroy(struct l2cap_chan *chan);
629 int l2cap_chan_connect(struct l2cap_chan *chan);
630 int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len);
631 void l2cap_chan_busy(struct l2cap_chan *chan, int busy);
632 
633 #endif /* __L2CAP_H */
634