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