xref: /linux/include/net/bluetooth/l2cap.h (revision b43ab901d671e3e3cad425ea5e9a3c74e266dcdd)
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 delayed_work	chan_timer;
486 	struct delayed_work	retrans_timer;
487 	struct delayed_work	monitor_timer;
488 	struct delayed_work	ack_timer;
489 
490 	struct sk_buff		*tx_send_head;
491 	struct sk_buff_head	tx_q;
492 	struct sk_buff_head	srej_q;
493 	struct list_head	srej_l;
494 
495 	struct list_head list;
496 	struct list_head global_l;
497 
498 	void		*data;
499 	struct l2cap_ops *ops;
500 };
501 
502 struct l2cap_ops {
503 	char		*name;
504 
505 	struct l2cap_chan	*(*new_connection) (void *data);
506 	int			(*recv) (void *data, struct sk_buff *skb);
507 	void			(*close) (void *data);
508 	void			(*state_change) (void *data, int state);
509 };
510 
511 struct l2cap_conn {
512 	struct hci_conn	*hcon;
513 	struct hci_chan	*hchan;
514 
515 	bdaddr_t	*dst;
516 	bdaddr_t	*src;
517 
518 	unsigned int	mtu;
519 
520 	__u32		feat_mask;
521 
522 	__u8		info_state;
523 	__u8		info_ident;
524 
525 	struct delayed_work info_timer;
526 
527 	spinlock_t	lock;
528 
529 	struct sk_buff *rx_skb;
530 	__u32		rx_len;
531 	__u8		tx_ident;
532 
533 	__u8		disc_reason;
534 
535 	struct delayed_work  security_timer;
536 	struct smp_chan *smp_chan;
537 
538 	struct list_head chan_l;
539 	struct mutex	chan_lock;
540 };
541 
542 #define L2CAP_INFO_CL_MTU_REQ_SENT	0x01
543 #define L2CAP_INFO_FEAT_MASK_REQ_SENT	0x04
544 #define L2CAP_INFO_FEAT_MASK_REQ_DONE	0x08
545 
546 #define L2CAP_CHAN_RAW			1
547 #define L2CAP_CHAN_CONN_LESS		2
548 #define L2CAP_CHAN_CONN_ORIENTED	3
549 
550 /* ----- L2CAP socket info ----- */
551 #define l2cap_pi(sk) ((struct l2cap_pinfo *) sk)
552 
553 struct l2cap_pinfo {
554 	struct bt_sock	bt;
555 	struct l2cap_chan	*chan;
556 	struct sk_buff	*rx_busy_skb;
557 };
558 
559 enum {
560 	CONF_REQ_SENT,
561 	CONF_INPUT_DONE,
562 	CONF_OUTPUT_DONE,
563 	CONF_MTU_DONE,
564 	CONF_MODE_DONE,
565 	CONF_CONNECT_PEND,
566 	CONF_NO_FCS_RECV,
567 	CONF_STATE2_DEVICE,
568 	CONF_EWS_RECV,
569 	CONF_LOC_CONF_PEND,
570 	CONF_REM_CONF_PEND,
571 };
572 
573 #define L2CAP_CONF_MAX_CONF_REQ 2
574 #define L2CAP_CONF_MAX_CONF_RSP 2
575 
576 enum {
577 	CONN_SREJ_SENT,
578 	CONN_WAIT_F,
579 	CONN_SREJ_ACT,
580 	CONN_SEND_PBIT,
581 	CONN_REMOTE_BUSY,
582 	CONN_LOCAL_BUSY,
583 	CONN_REJ_ACT,
584 	CONN_SEND_FBIT,
585 	CONN_RNR_SENT,
586 };
587 
588 /* Definitions for flags in l2cap_chan */
589 enum {
590 	FLAG_ROLE_SWITCH,
591 	FLAG_FORCE_ACTIVE,
592 	FLAG_FORCE_RELIABLE,
593 	FLAG_FLUSHABLE,
594 	FLAG_EXT_CTRL,
595 	FLAG_EFS_ENABLE,
596 };
597 
598 static inline void l2cap_chan_hold(struct l2cap_chan *c)
599 {
600 	atomic_inc(&c->refcnt);
601 }
602 
603 static inline void l2cap_chan_put(struct l2cap_chan *c)
604 {
605 	if (atomic_dec_and_test(&c->refcnt))
606 		kfree(c);
607 }
608 
609 static inline void l2cap_set_timer(struct l2cap_chan *chan,
610 					struct delayed_work *work, long timeout)
611 {
612 	BT_DBG("chan %p state %d timeout %ld", chan, chan->state, timeout);
613 
614 	if (!__cancel_delayed_work(work))
615 		l2cap_chan_hold(chan);
616 	schedule_delayed_work(work, timeout);
617 }
618 
619 static inline void l2cap_clear_timer(struct l2cap_chan *chan,
620 					struct delayed_work *work)
621 {
622 	if (__cancel_delayed_work(work))
623 		l2cap_chan_put(chan);
624 }
625 
626 #define __set_chan_timer(c, t) l2cap_set_timer(c, &c->chan_timer, (t))
627 #define __clear_chan_timer(c) l2cap_clear_timer(c, &c->chan_timer)
628 #define __set_retrans_timer(c) l2cap_set_timer(c, &c->retrans_timer, \
629 		L2CAP_DEFAULT_RETRANS_TO);
630 #define __clear_retrans_timer(c) l2cap_clear_timer(c, &c->retrans_timer)
631 #define __set_monitor_timer(c) l2cap_set_timer(c, &c->monitor_timer, \
632 		L2CAP_DEFAULT_MONITOR_TO);
633 #define __clear_monitor_timer(c) l2cap_clear_timer(c, &c->monitor_timer)
634 #define __set_ack_timer(c) l2cap_set_timer(c, &chan->ack_timer, \
635 		L2CAP_DEFAULT_ACK_TO);
636 #define __clear_ack_timer(c) l2cap_clear_timer(c, &c->ack_timer)
637 
638 static inline int __seq_offset(struct l2cap_chan *chan, __u16 seq1, __u16 seq2)
639 {
640 	int offset;
641 
642 	offset = (seq1 - seq2) % (chan->tx_win_max + 1);
643 	if (offset < 0)
644 		offset += (chan->tx_win_max + 1);
645 
646 	return offset;
647 }
648 
649 static inline __u16 __next_seq(struct l2cap_chan *chan, __u16 seq)
650 {
651 	return (seq + 1) % (chan->tx_win_max + 1);
652 }
653 
654 static inline int l2cap_tx_window_full(struct l2cap_chan *ch)
655 {
656 	int sub;
657 
658 	sub = (ch->next_tx_seq - ch->expected_ack_seq) % 64;
659 
660 	if (sub < 0)
661 		sub += 64;
662 
663 	return sub == ch->remote_tx_win;
664 }
665 
666 static inline __u16 __get_reqseq(struct l2cap_chan *chan, __u32 ctrl)
667 {
668 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
669 		return (ctrl & L2CAP_EXT_CTRL_REQSEQ) >>
670 						L2CAP_EXT_CTRL_REQSEQ_SHIFT;
671 	else
672 		return (ctrl & L2CAP_CTRL_REQSEQ) >> L2CAP_CTRL_REQSEQ_SHIFT;
673 }
674 
675 static inline __u32 __set_reqseq(struct l2cap_chan *chan, __u32 reqseq)
676 {
677 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
678 		return (reqseq << L2CAP_EXT_CTRL_REQSEQ_SHIFT) &
679 							L2CAP_EXT_CTRL_REQSEQ;
680 	else
681 		return (reqseq << L2CAP_CTRL_REQSEQ_SHIFT) & L2CAP_CTRL_REQSEQ;
682 }
683 
684 static inline __u16 __get_txseq(struct l2cap_chan *chan, __u32 ctrl)
685 {
686 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
687 		return (ctrl & L2CAP_EXT_CTRL_TXSEQ) >>
688 						L2CAP_EXT_CTRL_TXSEQ_SHIFT;
689 	else
690 		return (ctrl & L2CAP_CTRL_TXSEQ) >> L2CAP_CTRL_TXSEQ_SHIFT;
691 }
692 
693 static inline __u32 __set_txseq(struct l2cap_chan *chan, __u32 txseq)
694 {
695 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
696 		return (txseq << L2CAP_EXT_CTRL_TXSEQ_SHIFT) &
697 							L2CAP_EXT_CTRL_TXSEQ;
698 	else
699 		return (txseq << L2CAP_CTRL_TXSEQ_SHIFT) & L2CAP_CTRL_TXSEQ;
700 }
701 
702 static inline bool __is_sframe(struct l2cap_chan *chan, __u32 ctrl)
703 {
704 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
705 		return ctrl & L2CAP_EXT_CTRL_FRAME_TYPE;
706 	else
707 		return ctrl & L2CAP_CTRL_FRAME_TYPE;
708 }
709 
710 static inline __u32 __set_sframe(struct l2cap_chan *chan)
711 {
712 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
713 		return L2CAP_EXT_CTRL_FRAME_TYPE;
714 	else
715 		return L2CAP_CTRL_FRAME_TYPE;
716 }
717 
718 static inline __u8 __get_ctrl_sar(struct l2cap_chan *chan, __u32 ctrl)
719 {
720 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
721 		return (ctrl & L2CAP_EXT_CTRL_SAR) >> L2CAP_EXT_CTRL_SAR_SHIFT;
722 	else
723 		return (ctrl & L2CAP_CTRL_SAR) >> L2CAP_CTRL_SAR_SHIFT;
724 }
725 
726 static inline __u32 __set_ctrl_sar(struct l2cap_chan *chan, __u32 sar)
727 {
728 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
729 		return (sar << L2CAP_EXT_CTRL_SAR_SHIFT) & L2CAP_EXT_CTRL_SAR;
730 	else
731 		return (sar << L2CAP_CTRL_SAR_SHIFT) & L2CAP_CTRL_SAR;
732 }
733 
734 static inline bool __is_sar_start(struct l2cap_chan *chan, __u32 ctrl)
735 {
736 	return __get_ctrl_sar(chan, ctrl) == L2CAP_SAR_START;
737 }
738 
739 static inline __u32 __get_sar_mask(struct l2cap_chan *chan)
740 {
741 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
742 		return L2CAP_EXT_CTRL_SAR;
743 	else
744 		return L2CAP_CTRL_SAR;
745 }
746 
747 static inline __u8 __get_ctrl_super(struct l2cap_chan *chan, __u32 ctrl)
748 {
749 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
750 		return (ctrl & L2CAP_EXT_CTRL_SUPERVISE) >>
751 						L2CAP_EXT_CTRL_SUPER_SHIFT;
752 	else
753 		return (ctrl & L2CAP_CTRL_SUPERVISE) >> L2CAP_CTRL_SUPER_SHIFT;
754 }
755 
756 static inline __u32 __set_ctrl_super(struct l2cap_chan *chan, __u32 super)
757 {
758 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
759 		return (super << L2CAP_EXT_CTRL_SUPER_SHIFT) &
760 						L2CAP_EXT_CTRL_SUPERVISE;
761 	else
762 		return (super << L2CAP_CTRL_SUPER_SHIFT) &
763 							L2CAP_CTRL_SUPERVISE;
764 }
765 
766 static inline __u32 __set_ctrl_final(struct l2cap_chan *chan)
767 {
768 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
769 		return L2CAP_EXT_CTRL_FINAL;
770 	else
771 		return L2CAP_CTRL_FINAL;
772 }
773 
774 static inline bool __is_ctrl_final(struct l2cap_chan *chan, __u32 ctrl)
775 {
776 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
777 		return ctrl & L2CAP_EXT_CTRL_FINAL;
778 	else
779 		return ctrl & L2CAP_CTRL_FINAL;
780 }
781 
782 static inline __u32 __set_ctrl_poll(struct l2cap_chan *chan)
783 {
784 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
785 		return L2CAP_EXT_CTRL_POLL;
786 	else
787 		return L2CAP_CTRL_POLL;
788 }
789 
790 static inline bool __is_ctrl_poll(struct l2cap_chan *chan, __u32 ctrl)
791 {
792 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
793 		return ctrl & L2CAP_EXT_CTRL_POLL;
794 	else
795 		return ctrl & L2CAP_CTRL_POLL;
796 }
797 
798 static inline __u32 __get_control(struct l2cap_chan *chan, void *p)
799 {
800 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
801 		return get_unaligned_le32(p);
802 	else
803 		return get_unaligned_le16(p);
804 }
805 
806 static inline void __put_control(struct l2cap_chan *chan, __u32 control,
807 								void *p)
808 {
809 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
810 		return put_unaligned_le32(control, p);
811 	else
812 		return put_unaligned_le16(control, p);
813 }
814 
815 static inline __u8 __ctrl_size(struct l2cap_chan *chan)
816 {
817 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
818 		return L2CAP_EXT_HDR_SIZE - L2CAP_HDR_SIZE;
819 	else
820 		return L2CAP_ENH_HDR_SIZE - L2CAP_HDR_SIZE;
821 }
822 
823 extern bool disable_ertm;
824 
825 int l2cap_init_sockets(void);
826 void l2cap_cleanup_sockets(void);
827 
828 void __l2cap_connect_rsp_defer(struct l2cap_chan *chan);
829 int __l2cap_wait_ack(struct sock *sk);
830 
831 int l2cap_add_psm(struct l2cap_chan *chan, bdaddr_t *src, __le16 psm);
832 int l2cap_add_scid(struct l2cap_chan *chan,  __u16 scid);
833 
834 struct l2cap_chan *l2cap_chan_create(struct sock *sk);
835 void l2cap_chan_close(struct l2cap_chan *chan, int reason);
836 void l2cap_chan_destroy(struct l2cap_chan *chan);
837 inline int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid,
838 								bdaddr_t *dst);
839 int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len,
840 								u32 priority);
841 void l2cap_chan_busy(struct l2cap_chan *chan, int busy);
842 int l2cap_chan_check_security(struct l2cap_chan *chan);
843 
844 #endif /* __L2CAP_H */
845