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