xref: /linux/include/net/bluetooth/l2cap.h (revision 9e8ba5f3ec35cba4fd8a8bebda548c4db2651e40)
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 #include <asm/unaligned.h>
31 
32 /* L2CAP defaults */
33 #define L2CAP_DEFAULT_MTU		672
34 #define L2CAP_DEFAULT_MIN_MTU		48
35 #define L2CAP_DEFAULT_FLUSH_TO		0xffff
36 #define L2CAP_DEFAULT_TX_WINDOW		63
37 #define L2CAP_DEFAULT_EXT_WINDOW	0x3FFF
38 #define L2CAP_DEFAULT_MAX_TX		3
39 #define L2CAP_DEFAULT_RETRANS_TO	2000    /* 2 seconds */
40 #define L2CAP_DEFAULT_MONITOR_TO	12000   /* 12 seconds */
41 #define L2CAP_DEFAULT_MAX_PDU_SIZE	1009    /* Sized for 3-DH5 packet */
42 #define L2CAP_DEFAULT_ACK_TO		200
43 #define L2CAP_LE_DEFAULT_MTU		23
44 #define L2CAP_DEFAULT_MAX_SDU_SIZE	0xFFFF
45 #define L2CAP_DEFAULT_SDU_ITIME		0xFFFFFFFF
46 #define L2CAP_DEFAULT_ACC_LAT		0xFFFFFFFF
47 
48 #define L2CAP_DISC_TIMEOUT             (100)
49 #define L2CAP_DISC_REJ_TIMEOUT         (5000)  /*  5 seconds */
50 #define L2CAP_ENC_TIMEOUT              (5000)  /*  5 seconds */
51 #define L2CAP_CONN_TIMEOUT             (40000) /* 40 seconds */
52 #define L2CAP_INFO_TIMEOUT             (4000)  /*  4 seconds */
53 
54 /* L2CAP socket address */
55 struct sockaddr_l2 {
56 	sa_family_t	l2_family;
57 	__le16		l2_psm;
58 	bdaddr_t	l2_bdaddr;
59 	__le16		l2_cid;
60 };
61 
62 /* L2CAP socket options */
63 #define L2CAP_OPTIONS	0x01
64 struct l2cap_options {
65 	__u16 omtu;
66 	__u16 imtu;
67 	__u16 flush_to;
68 	__u8  mode;
69 	__u8  fcs;
70 	__u8  max_tx;
71 	__u16 txwin_size;
72 };
73 
74 #define L2CAP_CONNINFO	0x02
75 struct l2cap_conninfo {
76 	__u16 hci_handle;
77 	__u8  dev_class[3];
78 };
79 
80 #define L2CAP_LM	0x03
81 #define L2CAP_LM_MASTER		0x0001
82 #define L2CAP_LM_AUTH		0x0002
83 #define L2CAP_LM_ENCRYPT	0x0004
84 #define L2CAP_LM_TRUSTED	0x0008
85 #define L2CAP_LM_RELIABLE	0x0010
86 #define L2CAP_LM_SECURE		0x0020
87 
88 /* L2CAP command codes */
89 #define L2CAP_COMMAND_REJ	0x01
90 #define L2CAP_CONN_REQ		0x02
91 #define L2CAP_CONN_RSP		0x03
92 #define L2CAP_CONF_REQ		0x04
93 #define L2CAP_CONF_RSP		0x05
94 #define L2CAP_DISCONN_REQ	0x06
95 #define L2CAP_DISCONN_RSP	0x07
96 #define L2CAP_ECHO_REQ		0x08
97 #define L2CAP_ECHO_RSP		0x09
98 #define L2CAP_INFO_REQ		0x0a
99 #define L2CAP_INFO_RSP		0x0b
100 #define L2CAP_CREATE_CHAN_REQ	0x0c
101 #define L2CAP_CREATE_CHAN_RSP	0x0d
102 #define L2CAP_MOVE_CHAN_REQ	0x0e
103 #define L2CAP_MOVE_CHAN_RSP	0x0f
104 #define L2CAP_MOVE_CHAN_CFM	0x10
105 #define L2CAP_MOVE_CHAN_CFM_RSP	0x11
106 #define L2CAP_CONN_PARAM_UPDATE_REQ	0x12
107 #define L2CAP_CONN_PARAM_UPDATE_RSP	0x13
108 
109 /* L2CAP extended feature mask */
110 #define L2CAP_FEAT_FLOWCTL	0x00000001
111 #define L2CAP_FEAT_RETRANS	0x00000002
112 #define L2CAP_FEAT_BIDIR_QOS	0x00000004
113 #define L2CAP_FEAT_ERTM		0x00000008
114 #define L2CAP_FEAT_STREAMING	0x00000010
115 #define L2CAP_FEAT_FCS		0x00000020
116 #define L2CAP_FEAT_EXT_FLOW	0x00000040
117 #define L2CAP_FEAT_FIXED_CHAN	0x00000080
118 #define L2CAP_FEAT_EXT_WINDOW	0x00000100
119 #define L2CAP_FEAT_UCD		0x00000200
120 
121 /* L2CAP checksum option */
122 #define L2CAP_FCS_NONE		0x00
123 #define L2CAP_FCS_CRC16		0x01
124 
125 /* L2CAP fixed channels */
126 #define L2CAP_FC_L2CAP		0x02
127 #define L2CAP_FC_A2MP		0x08
128 
129 /* L2CAP Control Field bit masks */
130 #define L2CAP_CTRL_SAR			0xC000
131 #define L2CAP_CTRL_REQSEQ		0x3F00
132 #define L2CAP_CTRL_TXSEQ		0x007E
133 #define L2CAP_CTRL_SUPERVISE		0x000C
134 
135 #define L2CAP_CTRL_RETRANS		0x0080
136 #define L2CAP_CTRL_FINAL		0x0080
137 #define L2CAP_CTRL_POLL			0x0010
138 #define L2CAP_CTRL_FRAME_TYPE		0x0001 /* I- or S-Frame */
139 
140 #define L2CAP_CTRL_TXSEQ_SHIFT		1
141 #define L2CAP_CTRL_SUPER_SHIFT		2
142 #define L2CAP_CTRL_REQSEQ_SHIFT		8
143 #define L2CAP_CTRL_SAR_SHIFT		14
144 
145 /* L2CAP Extended Control Field bit mask */
146 #define L2CAP_EXT_CTRL_TXSEQ		0xFFFC0000
147 #define L2CAP_EXT_CTRL_SAR		0x00030000
148 #define L2CAP_EXT_CTRL_SUPERVISE	0x00030000
149 #define L2CAP_EXT_CTRL_REQSEQ		0x0000FFFC
150 
151 #define L2CAP_EXT_CTRL_POLL		0x00040000
152 #define L2CAP_EXT_CTRL_FINAL		0x00000002
153 #define L2CAP_EXT_CTRL_FRAME_TYPE	0x00000001 /* I- or S-Frame */
154 
155 #define L2CAP_EXT_CTRL_REQSEQ_SHIFT	2
156 #define L2CAP_EXT_CTRL_SAR_SHIFT	16
157 #define L2CAP_EXT_CTRL_SUPER_SHIFT	16
158 #define L2CAP_EXT_CTRL_TXSEQ_SHIFT	18
159 
160 /* L2CAP Supervisory Function */
161 #define L2CAP_SUPER_RR		0x00
162 #define L2CAP_SUPER_REJ		0x01
163 #define L2CAP_SUPER_RNR		0x02
164 #define L2CAP_SUPER_SREJ	0x03
165 
166 /* L2CAP Segmentation and Reassembly */
167 #define L2CAP_SAR_UNSEGMENTED	0x00
168 #define L2CAP_SAR_START		0x01
169 #define L2CAP_SAR_END		0x02
170 #define L2CAP_SAR_CONTINUE	0x03
171 
172 /* L2CAP Command rej. reasons */
173 #define L2CAP_REJ_NOT_UNDERSTOOD	0x0000
174 #define L2CAP_REJ_MTU_EXCEEDED		0x0001
175 #define L2CAP_REJ_INVALID_CID		0x0002
176 
177 /* L2CAP structures */
178 struct l2cap_hdr {
179 	__le16     len;
180 	__le16     cid;
181 } __packed;
182 #define L2CAP_HDR_SIZE		4
183 #define L2CAP_ENH_HDR_SIZE	6
184 #define L2CAP_EXT_HDR_SIZE	8
185 
186 #define L2CAP_FCS_SIZE		2
187 #define L2CAP_SDULEN_SIZE	2
188 #define L2CAP_PSMLEN_SIZE	2
189 
190 struct l2cap_cmd_hdr {
191 	__u8       code;
192 	__u8       ident;
193 	__le16     len;
194 } __packed;
195 #define L2CAP_CMD_HDR_SIZE	4
196 
197 struct l2cap_cmd_rej_unk {
198 	__le16     reason;
199 } __packed;
200 
201 struct l2cap_cmd_rej_mtu {
202 	__le16     reason;
203 	__le16     max_mtu;
204 } __packed;
205 
206 struct l2cap_cmd_rej_cid {
207 	__le16     reason;
208 	__le16     scid;
209 	__le16     dcid;
210 } __packed;
211 
212 struct l2cap_conn_req {
213 	__le16     psm;
214 	__le16     scid;
215 } __packed;
216 
217 struct l2cap_conn_rsp {
218 	__le16     dcid;
219 	__le16     scid;
220 	__le16     result;
221 	__le16     status;
222 } __packed;
223 
224 /* channel indentifier */
225 #define L2CAP_CID_SIGNALING	0x0001
226 #define L2CAP_CID_CONN_LESS	0x0002
227 #define L2CAP_CID_LE_DATA	0x0004
228 #define L2CAP_CID_LE_SIGNALING	0x0005
229 #define L2CAP_CID_SMP		0x0006
230 #define L2CAP_CID_DYN_START	0x0040
231 #define L2CAP_CID_DYN_END	0xffff
232 
233 /* connect/create channel results */
234 #define L2CAP_CR_SUCCESS	0x0000
235 #define L2CAP_CR_PEND		0x0001
236 #define L2CAP_CR_BAD_PSM	0x0002
237 #define L2CAP_CR_SEC_BLOCK	0x0003
238 #define L2CAP_CR_NO_MEM		0x0004
239 #define L2CAP_CR_BAD_AMP	0x0005
240 
241 /* connect/create channel status */
242 #define L2CAP_CS_NO_INFO	0x0000
243 #define L2CAP_CS_AUTHEN_PEND	0x0001
244 #define L2CAP_CS_AUTHOR_PEND	0x0002
245 
246 struct l2cap_conf_req {
247 	__le16     dcid;
248 	__le16     flags;
249 	__u8       data[0];
250 } __packed;
251 
252 struct l2cap_conf_rsp {
253 	__le16     scid;
254 	__le16     flags;
255 	__le16     result;
256 	__u8       data[0];
257 } __packed;
258 
259 #define L2CAP_CONF_SUCCESS	0x0000
260 #define L2CAP_CONF_UNACCEPT	0x0001
261 #define L2CAP_CONF_REJECT	0x0002
262 #define L2CAP_CONF_UNKNOWN	0x0003
263 #define L2CAP_CONF_PENDING	0x0004
264 #define L2CAP_CONF_EFS_REJECT	0x0005
265 
266 struct l2cap_conf_opt {
267 	__u8       type;
268 	__u8       len;
269 	__u8       val[0];
270 } __packed;
271 #define L2CAP_CONF_OPT_SIZE	2
272 
273 #define L2CAP_CONF_HINT		0x80
274 #define L2CAP_CONF_MASK		0x7f
275 
276 #define L2CAP_CONF_MTU		0x01
277 #define L2CAP_CONF_FLUSH_TO	0x02
278 #define L2CAP_CONF_QOS		0x03
279 #define L2CAP_CONF_RFC		0x04
280 #define L2CAP_CONF_FCS		0x05
281 #define L2CAP_CONF_EFS		0x06
282 #define L2CAP_CONF_EWS		0x07
283 
284 #define L2CAP_CONF_MAX_SIZE	22
285 
286 struct l2cap_conf_rfc {
287 	__u8       mode;
288 	__u8       txwin_size;
289 	__u8       max_transmit;
290 	__le16     retrans_timeout;
291 	__le16     monitor_timeout;
292 	__le16     max_pdu_size;
293 } __packed;
294 
295 #define L2CAP_MODE_BASIC	0x00
296 #define L2CAP_MODE_RETRANS	0x01
297 #define L2CAP_MODE_FLOWCTL	0x02
298 #define L2CAP_MODE_ERTM		0x03
299 #define L2CAP_MODE_STREAMING	0x04
300 
301 struct l2cap_conf_efs {
302 	__u8	id;
303 	__u8	stype;
304 	__le16	msdu;
305 	__le32	sdu_itime;
306 	__le32	acc_lat;
307 	__le32	flush_to;
308 } __packed;
309 
310 #define L2CAP_SERV_NOTRAFIC	0x00
311 #define L2CAP_SERV_BESTEFFORT	0x01
312 #define L2CAP_SERV_GUARANTEED	0x02
313 
314 #define L2CAP_BESTEFFORT_ID	0x01
315 
316 struct l2cap_disconn_req {
317 	__le16     dcid;
318 	__le16     scid;
319 } __packed;
320 
321 struct l2cap_disconn_rsp {
322 	__le16     dcid;
323 	__le16     scid;
324 } __packed;
325 
326 struct l2cap_info_req {
327 	__le16      type;
328 } __packed;
329 
330 struct l2cap_info_rsp {
331 	__le16      type;
332 	__le16      result;
333 	__u8        data[0];
334 } __packed;
335 
336 struct l2cap_create_chan_req {
337 	__le16      psm;
338 	__le16      scid;
339 	__u8        amp_id;
340 } __packed;
341 
342 struct l2cap_create_chan_rsp {
343 	__le16      dcid;
344 	__le16      scid;
345 	__le16      result;
346 	__le16      status;
347 } __packed;
348 
349 struct l2cap_move_chan_req {
350 	__le16      icid;
351 	__u8        dest_amp_id;
352 } __packed;
353 
354 struct l2cap_move_chan_rsp {
355 	__le16      icid;
356 	__le16      result;
357 } __packed;
358 
359 #define L2CAP_MR_SUCCESS	0x0000
360 #define L2CAP_MR_PEND		0x0001
361 #define L2CAP_MR_BAD_ID		0x0002
362 #define L2CAP_MR_SAME_ID	0x0003
363 #define L2CAP_MR_NOT_SUPP	0x0004
364 #define L2CAP_MR_COLLISION	0x0005
365 #define L2CAP_MR_NOT_ALLOWED	0x0006
366 
367 struct l2cap_move_chan_cfm {
368 	__le16      icid;
369 	__le16      result;
370 } __packed;
371 
372 #define L2CAP_MC_CONFIRMED	0x0000
373 #define L2CAP_MC_UNCONFIRMED	0x0001
374 
375 struct l2cap_move_chan_cfm_rsp {
376 	__le16      icid;
377 } __packed;
378 
379 /* info type */
380 #define L2CAP_IT_CL_MTU		0x0001
381 #define L2CAP_IT_FEAT_MASK	0x0002
382 #define L2CAP_IT_FIXED_CHAN	0x0003
383 
384 /* info result */
385 #define L2CAP_IR_SUCCESS	0x0000
386 #define L2CAP_IR_NOTSUPP	0x0001
387 
388 struct l2cap_conn_param_update_req {
389 	__le16      min;
390 	__le16      max;
391 	__le16      latency;
392 	__le16      to_multiplier;
393 } __packed;
394 
395 struct l2cap_conn_param_update_rsp {
396 	__le16      result;
397 } __packed;
398 
399 /* Connection Parameters result */
400 #define L2CAP_CONN_PARAM_ACCEPTED	0x0000
401 #define L2CAP_CONN_PARAM_REJECTED	0x0001
402 
403 /* ----- L2CAP channels and connections ----- */
404 struct srej_list {
405 	__u16	tx_seq;
406 	struct list_head list;
407 };
408 
409 struct l2cap_chan {
410 	struct sock *sk;
411 
412 	struct l2cap_conn	*conn;
413 
414 	__u8		state;
415 
416 	atomic_t	refcnt;
417 
418 	__le16		psm;
419 	__u16		dcid;
420 	__u16		scid;
421 
422 	__u16		imtu;
423 	__u16		omtu;
424 	__u16		flush_to;
425 	__u8		mode;
426 	__u8		chan_type;
427 	__u8		chan_policy;
428 
429 	__le16		sport;
430 
431 	__u8		sec_level;
432 
433 	__u8		ident;
434 
435 	__u8		conf_req[64];
436 	__u8		conf_len;
437 	__u8		num_conf_req;
438 	__u8		num_conf_rsp;
439 
440 	__u8		fcs;
441 
442 	__u16		tx_win;
443 	__u16		tx_win_max;
444 	__u8		max_tx;
445 	__u16		retrans_timeout;
446 	__u16		monitor_timeout;
447 	__u16		mps;
448 
449 	unsigned long	conf_state;
450 	unsigned long	conn_state;
451 	unsigned long	flags;
452 
453 	__u16		next_tx_seq;
454 	__u16		expected_ack_seq;
455 	__u16		expected_tx_seq;
456 	__u16		buffer_seq;
457 	__u16		buffer_seq_srej;
458 	__u16		srej_save_reqseq;
459 	__u16		frames_sent;
460 	__u16		unacked_frames;
461 	__u8		retry_count;
462 	__u8		num_acked;
463 	__u16		sdu_len;
464 	struct sk_buff	*sdu;
465 	struct sk_buff	*sdu_last_frag;
466 
467 	__u16		remote_tx_win;
468 	__u8		remote_max_tx;
469 	__u16		remote_mps;
470 
471 	__u8		local_id;
472 	__u8		local_stype;
473 	__u16		local_msdu;
474 	__u32		local_sdu_itime;
475 	__u32		local_acc_lat;
476 	__u32		local_flush_to;
477 
478 	__u8		remote_id;
479 	__u8		remote_stype;
480 	__u16		remote_msdu;
481 	__u32		remote_sdu_itime;
482 	__u32		remote_acc_lat;
483 	__u32		remote_flush_to;
484 
485 	struct timer_list	chan_timer;
486 	struct timer_list	retrans_timer;
487 	struct timer_list	monitor_timer;
488 	struct timer_list	ack_timer;
489 	struct sk_buff		*tx_send_head;
490 	struct sk_buff_head	tx_q;
491 	struct sk_buff_head	srej_q;
492 	struct list_head	srej_l;
493 
494 	struct list_head list;
495 	struct list_head global_l;
496 
497 	void		*data;
498 	struct l2cap_ops *ops;
499 };
500 
501 struct l2cap_ops {
502 	char		*name;
503 
504 	struct l2cap_chan	*(*new_connection) (void *data);
505 	int			(*recv) (void *data, struct sk_buff *skb);
506 	void			(*close) (void *data);
507 	void			(*state_change) (void *data, int state);
508 };
509 
510 struct l2cap_conn {
511 	struct hci_conn	*hcon;
512 	struct hci_chan	*hchan;
513 
514 	bdaddr_t	*dst;
515 	bdaddr_t	*src;
516 
517 	unsigned int	mtu;
518 
519 	__u32		feat_mask;
520 
521 	__u8		info_state;
522 	__u8		info_ident;
523 
524 	struct timer_list info_timer;
525 
526 	spinlock_t	lock;
527 
528 	struct sk_buff *rx_skb;
529 	__u32		rx_len;
530 	__u8		tx_ident;
531 
532 	__u8		disc_reason;
533 
534 	struct timer_list security_timer;
535 	struct smp_chan *smp_chan;
536 
537 	struct list_head chan_l;
538 	rwlock_t	chan_lock;
539 };
540 
541 #define L2CAP_INFO_CL_MTU_REQ_SENT	0x01
542 #define L2CAP_INFO_FEAT_MASK_REQ_SENT	0x04
543 #define L2CAP_INFO_FEAT_MASK_REQ_DONE	0x08
544 
545 #define L2CAP_CHAN_RAW			1
546 #define L2CAP_CHAN_CONN_LESS		2
547 #define L2CAP_CHAN_CONN_ORIENTED	3
548 
549 /* ----- L2CAP socket info ----- */
550 #define l2cap_pi(sk) ((struct l2cap_pinfo *) sk)
551 
552 struct l2cap_pinfo {
553 	struct bt_sock	bt;
554 	struct l2cap_chan	*chan;
555 	struct sk_buff	*rx_busy_skb;
556 };
557 
558 enum {
559 	CONF_REQ_SENT,
560 	CONF_INPUT_DONE,
561 	CONF_OUTPUT_DONE,
562 	CONF_MTU_DONE,
563 	CONF_MODE_DONE,
564 	CONF_CONNECT_PEND,
565 	CONF_NO_FCS_RECV,
566 	CONF_STATE2_DEVICE,
567 	CONF_EWS_RECV,
568 	CONF_LOC_CONF_PEND,
569 	CONF_REM_CONF_PEND,
570 };
571 
572 #define L2CAP_CONF_MAX_CONF_REQ 2
573 #define L2CAP_CONF_MAX_CONF_RSP 2
574 
575 enum {
576 	CONN_SREJ_SENT,
577 	CONN_WAIT_F,
578 	CONN_SREJ_ACT,
579 	CONN_SEND_PBIT,
580 	CONN_REMOTE_BUSY,
581 	CONN_LOCAL_BUSY,
582 	CONN_REJ_ACT,
583 	CONN_SEND_FBIT,
584 	CONN_RNR_SENT,
585 };
586 
587 /* Definitions for flags in l2cap_chan */
588 enum {
589 	FLAG_ROLE_SWITCH,
590 	FLAG_FORCE_ACTIVE,
591 	FLAG_FORCE_RELIABLE,
592 	FLAG_FLUSHABLE,
593 	FLAG_EXT_CTRL,
594 	FLAG_EFS_ENABLE,
595 };
596 
597 #define __set_chan_timer(c, t) l2cap_set_timer(c, &c->chan_timer, (t))
598 #define __clear_chan_timer(c) l2cap_clear_timer(c, &c->chan_timer)
599 #define __set_retrans_timer(c) l2cap_set_timer(c, &c->retrans_timer, \
600 		L2CAP_DEFAULT_RETRANS_TO);
601 #define __clear_retrans_timer(c) l2cap_clear_timer(c, &c->retrans_timer)
602 #define __set_monitor_timer(c) l2cap_set_timer(c, &c->monitor_timer, \
603 		L2CAP_DEFAULT_MONITOR_TO);
604 #define __clear_monitor_timer(c) l2cap_clear_timer(c, &c->monitor_timer)
605 #define __set_ack_timer(c) l2cap_set_timer(c, &chan->ack_timer, \
606 		L2CAP_DEFAULT_ACK_TO);
607 #define __clear_ack_timer(c) l2cap_clear_timer(c, &c->ack_timer)
608 
609 static inline int __seq_offset(struct l2cap_chan *chan, __u16 seq1, __u16 seq2)
610 {
611 	int offset;
612 
613 	offset = (seq1 - seq2) % (chan->tx_win_max + 1);
614 	if (offset < 0)
615 		offset += (chan->tx_win_max + 1);
616 
617 	return offset;
618 }
619 
620 static inline __u16 __next_seq(struct l2cap_chan *chan, __u16 seq)
621 {
622 	return (seq + 1) % (chan->tx_win_max + 1);
623 }
624 
625 static inline int l2cap_tx_window_full(struct l2cap_chan *ch)
626 {
627 	int sub;
628 
629 	sub = (ch->next_tx_seq - ch->expected_ack_seq) % 64;
630 
631 	if (sub < 0)
632 		sub += 64;
633 
634 	return sub == ch->remote_tx_win;
635 }
636 
637 static inline __u16 __get_reqseq(struct l2cap_chan *chan, __u32 ctrl)
638 {
639 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
640 		return (ctrl & L2CAP_EXT_CTRL_REQSEQ) >>
641 						L2CAP_EXT_CTRL_REQSEQ_SHIFT;
642 	else
643 		return (ctrl & L2CAP_CTRL_REQSEQ) >> L2CAP_CTRL_REQSEQ_SHIFT;
644 }
645 
646 static inline __u32 __set_reqseq(struct l2cap_chan *chan, __u32 reqseq)
647 {
648 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
649 		return (reqseq << L2CAP_EXT_CTRL_REQSEQ_SHIFT) &
650 							L2CAP_EXT_CTRL_REQSEQ;
651 	else
652 		return (reqseq << L2CAP_CTRL_REQSEQ_SHIFT) & L2CAP_CTRL_REQSEQ;
653 }
654 
655 static inline __u16 __get_txseq(struct l2cap_chan *chan, __u32 ctrl)
656 {
657 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
658 		return (ctrl & L2CAP_EXT_CTRL_TXSEQ) >>
659 						L2CAP_EXT_CTRL_TXSEQ_SHIFT;
660 	else
661 		return (ctrl & L2CAP_CTRL_TXSEQ) >> L2CAP_CTRL_TXSEQ_SHIFT;
662 }
663 
664 static inline __u32 __set_txseq(struct l2cap_chan *chan, __u32 txseq)
665 {
666 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
667 		return (txseq << L2CAP_EXT_CTRL_TXSEQ_SHIFT) &
668 							L2CAP_EXT_CTRL_TXSEQ;
669 	else
670 		return (txseq << L2CAP_CTRL_TXSEQ_SHIFT) & L2CAP_CTRL_TXSEQ;
671 }
672 
673 static inline bool __is_sframe(struct l2cap_chan *chan, __u32 ctrl)
674 {
675 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
676 		return ctrl & L2CAP_EXT_CTRL_FRAME_TYPE;
677 	else
678 		return ctrl & L2CAP_CTRL_FRAME_TYPE;
679 }
680 
681 static inline __u32 __set_sframe(struct l2cap_chan *chan)
682 {
683 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
684 		return L2CAP_EXT_CTRL_FRAME_TYPE;
685 	else
686 		return L2CAP_CTRL_FRAME_TYPE;
687 }
688 
689 static inline __u8 __get_ctrl_sar(struct l2cap_chan *chan, __u32 ctrl)
690 {
691 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
692 		return (ctrl & L2CAP_EXT_CTRL_SAR) >> L2CAP_EXT_CTRL_SAR_SHIFT;
693 	else
694 		return (ctrl & L2CAP_CTRL_SAR) >> L2CAP_CTRL_SAR_SHIFT;
695 }
696 
697 static inline __u32 __set_ctrl_sar(struct l2cap_chan *chan, __u32 sar)
698 {
699 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
700 		return (sar << L2CAP_EXT_CTRL_SAR_SHIFT) & L2CAP_EXT_CTRL_SAR;
701 	else
702 		return (sar << L2CAP_CTRL_SAR_SHIFT) & L2CAP_CTRL_SAR;
703 }
704 
705 static inline bool __is_sar_start(struct l2cap_chan *chan, __u32 ctrl)
706 {
707 	return __get_ctrl_sar(chan, ctrl) == L2CAP_SAR_START;
708 }
709 
710 static inline __u32 __get_sar_mask(struct l2cap_chan *chan)
711 {
712 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
713 		return L2CAP_EXT_CTRL_SAR;
714 	else
715 		return L2CAP_CTRL_SAR;
716 }
717 
718 static inline __u8 __get_ctrl_super(struct l2cap_chan *chan, __u32 ctrl)
719 {
720 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
721 		return (ctrl & L2CAP_EXT_CTRL_SUPERVISE) >>
722 						L2CAP_EXT_CTRL_SUPER_SHIFT;
723 	else
724 		return (ctrl & L2CAP_CTRL_SUPERVISE) >> L2CAP_CTRL_SUPER_SHIFT;
725 }
726 
727 static inline __u32 __set_ctrl_super(struct l2cap_chan *chan, __u32 super)
728 {
729 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
730 		return (super << L2CAP_EXT_CTRL_SUPER_SHIFT) &
731 						L2CAP_EXT_CTRL_SUPERVISE;
732 	else
733 		return (super << L2CAP_CTRL_SUPER_SHIFT) &
734 							L2CAP_CTRL_SUPERVISE;
735 }
736 
737 static inline __u32 __set_ctrl_final(struct l2cap_chan *chan)
738 {
739 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
740 		return L2CAP_EXT_CTRL_FINAL;
741 	else
742 		return L2CAP_CTRL_FINAL;
743 }
744 
745 static inline bool __is_ctrl_final(struct l2cap_chan *chan, __u32 ctrl)
746 {
747 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
748 		return ctrl & L2CAP_EXT_CTRL_FINAL;
749 	else
750 		return ctrl & L2CAP_CTRL_FINAL;
751 }
752 
753 static inline __u32 __set_ctrl_poll(struct l2cap_chan *chan)
754 {
755 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
756 		return L2CAP_EXT_CTRL_POLL;
757 	else
758 		return L2CAP_CTRL_POLL;
759 }
760 
761 static inline bool __is_ctrl_poll(struct l2cap_chan *chan, __u32 ctrl)
762 {
763 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
764 		return ctrl & L2CAP_EXT_CTRL_POLL;
765 	else
766 		return ctrl & L2CAP_CTRL_POLL;
767 }
768 
769 static inline __u32 __get_control(struct l2cap_chan *chan, void *p)
770 {
771 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
772 		return get_unaligned_le32(p);
773 	else
774 		return get_unaligned_le16(p);
775 }
776 
777 static inline void __put_control(struct l2cap_chan *chan, __u32 control,
778 								void *p)
779 {
780 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
781 		return put_unaligned_le32(control, p);
782 	else
783 		return put_unaligned_le16(control, p);
784 }
785 
786 static inline __u8 __ctrl_size(struct l2cap_chan *chan)
787 {
788 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
789 		return L2CAP_EXT_HDR_SIZE - L2CAP_HDR_SIZE;
790 	else
791 		return L2CAP_ENH_HDR_SIZE - L2CAP_HDR_SIZE;
792 }
793 
794 extern bool disable_ertm;
795 
796 int l2cap_init_sockets(void);
797 void l2cap_cleanup_sockets(void);
798 
799 void __l2cap_connect_rsp_defer(struct l2cap_chan *chan);
800 int __l2cap_wait_ack(struct sock *sk);
801 
802 int l2cap_add_psm(struct l2cap_chan *chan, bdaddr_t *src, __le16 psm);
803 int l2cap_add_scid(struct l2cap_chan *chan,  __u16 scid);
804 
805 struct l2cap_chan *l2cap_chan_create(struct sock *sk);
806 void l2cap_chan_close(struct l2cap_chan *chan, int reason);
807 void l2cap_chan_destroy(struct l2cap_chan *chan);
808 int l2cap_chan_connect(struct l2cap_chan *chan);
809 int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len,
810 								u32 priority);
811 void l2cap_chan_busy(struct l2cap_chan *chan, int busy);
812 int l2cap_chan_check_security(struct l2cap_chan *chan);
813 
814 #endif /* __L2CAP_H */
815