patch-2_6_7-vs1_9_1_12
[linux-2.6.git] / include / net / bluetooth / l2cap.h
1 /* 
2    BlueZ - Bluetooth protocol stack for Linux
3    Copyright (C) 2000-2001 Qualcomm Incorporated
4
5    Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License version 2 as
9    published by the Free Software Foundation;
10
11    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
14    IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
15    CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES 
16    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 
17    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 
18    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19
20    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, 
21    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS 
22    SOFTWARE IS DISCLAIMED.
23 */
24
25 #ifndef __L2CAP_H
26 #define __L2CAP_H
27
28 /* L2CAP defaults */
29 #define L2CAP_DEFAULT_MTU       672
30 #define L2CAP_DEFAULT_FLUSH_TO  0xFFFF
31
32 #define L2CAP_CONN_TIMEOUT      (HZ * 40)
33
34 /* L2CAP socket address */
35 struct sockaddr_l2 {
36         sa_family_t     l2_family;
37         unsigned short  l2_psm;
38         bdaddr_t        l2_bdaddr;
39 };
40
41 /* Socket options */
42 #define L2CAP_OPTIONS   0x01
43 struct l2cap_options {
44         __u16 omtu;
45         __u16 imtu;
46         __u16 flush_to;
47 };
48
49 #define L2CAP_CONNINFO  0x02
50 struct l2cap_conninfo {
51         __u16 hci_handle;
52 };
53
54 #define L2CAP_LM        0x03
55 #define L2CAP_LM_MASTER         0x0001
56 #define L2CAP_LM_AUTH           0x0002
57 #define L2CAP_LM_ENCRYPT        0x0004
58 #define L2CAP_LM_TRUSTED        0x0008
59
60 #define L2CAP_QOS       0x04
61 struct l2cap_qos {
62         __u16 service_type;
63         __u32 token_rate;
64         __u32 token_bucket_size;
65         __u32 peak_bandwidth;
66         __u32 latency;
67         __u32 delay_variation;
68 };
69
70 #define L2CAP_SERV_NO_TRAFFIC   0x00
71 #define L2CAP_SERV_BEST_EFFORT  0x01
72 #define L2CAP_SERV_GUARANTEED   0x02
73
74 /* L2CAP command codes */
75 #define L2CAP_COMMAND_REJ 0x01
76 #define L2CAP_CONN_REQ    0x02
77 #define L2CAP_CONN_RSP    0x03
78 #define L2CAP_CONF_REQ    0x04
79 #define L2CAP_CONF_RSP    0x05
80 #define L2CAP_DISCONN_REQ 0x06
81 #define L2CAP_DISCONN_RSP 0x07
82 #define L2CAP_ECHO_REQ    0x08
83 #define L2CAP_ECHO_RSP    0x09
84 #define L2CAP_INFO_REQ    0x0a
85 #define L2CAP_INFO_RSP    0x0b
86
87 /* L2CAP structures */
88 struct l2cap_hdr {
89         __u16      len;
90         __u16      cid;
91 } __attribute__ ((packed));
92 #define L2CAP_HDR_SIZE          4
93
94 struct l2cap_cmd_hdr {
95         __u8       code;
96         __u8       ident;
97         __u16      len;
98 } __attribute__ ((packed));
99 #define L2CAP_CMD_HDR_SIZE      4
100
101 struct l2cap_cmd_rej {
102         __u16      reason;
103 } __attribute__ ((packed));
104
105 struct l2cap_conn_req {
106         __u16      psm;
107         __u16      scid;
108 } __attribute__ ((packed));
109
110 struct l2cap_conn_rsp {
111         __u16      dcid;
112         __u16      scid;
113         __u16      result;
114         __u16      status;
115 } __attribute__ ((packed));
116
117 /* connect result */
118 #define L2CAP_CR_SUCCESS    0x0000
119 #define L2CAP_CR_PEND       0x0001
120 #define L2CAP_CR_BAD_PSM    0x0002
121 #define L2CAP_CR_SEC_BLOCK  0x0003
122 #define L2CAP_CR_NO_MEM     0x0004
123
124 /* connect status */
125 #define L2CAP_CS_NO_INFO      0x0000
126 #define L2CAP_CS_AUTHEN_PEND  0x0001
127 #define L2CAP_CS_AUTHOR_PEND  0x0002
128
129 struct l2cap_conf_req {
130         __u16      dcid;
131         __u16      flags;
132         __u8       data[0];
133 } __attribute__ ((packed));
134
135 struct l2cap_conf_rsp {
136         __u16      scid;
137         __u16      flags;
138         __u16      result;
139         __u8       data[0];
140 } __attribute__ ((packed));
141
142 #define L2CAP_CONF_SUCCESS      0x00
143 #define L2CAP_CONF_UNACCEPT     0x01
144
145 struct l2cap_conf_opt {
146         __u8       type;
147         __u8       len;
148         __u8       val[0];
149 } __attribute__ ((packed));
150 #define L2CAP_CONF_OPT_SIZE     2
151
152 #define L2CAP_CONF_MTU          0x01
153 #define L2CAP_CONF_FLUSH_TO     0x02
154 #define L2CAP_CONF_QOS          0x03
155
156 #define L2CAP_CONF_MAX_SIZE     22
157
158 struct l2cap_disconn_req {
159         __u16      dcid;
160         __u16      scid;
161 } __attribute__ ((packed));
162
163 struct l2cap_disconn_rsp {
164         __u16      dcid;
165         __u16      scid;
166 } __attribute__ ((packed));
167
168 struct l2cap_info_req {
169         __u16       type;
170         __u8        data[0];
171 } __attribute__ ((packed));
172
173 struct l2cap_info_rsp {
174         __u16       type;
175         __u16       result;
176         __u8        data[0];
177 } __attribute__ ((packed));
178
179 /* ----- L2CAP connections ----- */
180 struct l2cap_chan_list {
181         struct sock     *head;
182         rwlock_t        lock;
183         long            num;
184 };
185
186 struct l2cap_conn {
187         struct hci_conn *hcon;
188
189         bdaddr_t        *dst;
190         bdaddr_t        *src;
191         
192         unsigned int    mtu;
193
194         spinlock_t      lock;
195         
196         struct sk_buff *rx_skb;
197         __u32           rx_len;
198         __u8            rx_ident;
199         __u8            tx_ident;
200
201         struct l2cap_chan_list chan_list;
202 };
203
204 /* ----- L2CAP channel and socket info ----- */
205 #define l2cap_pi(sk)   ((struct l2cap_pinfo *)sk->sk_protinfo)
206
207 struct l2cap_pinfo {
208         __u16           psm;
209         __u16           dcid;
210         __u16           scid;
211
212         __u16           imtu;
213         __u16           omtu;
214         __u16           flush_to;
215         
216         __u32           link_mode;
217
218         __u8            conf_state;
219         __u8            conf_retry;
220         __u16           conf_mtu;
221
222         __u8            ident;
223
224         __u16           sport;
225
226         struct l2cap_conn       *conn;
227         struct sock             *next_c;
228         struct sock             *prev_c;
229 };
230
231 #define L2CAP_CONF_REQ_SENT    0x01
232 #define L2CAP_CONF_INPUT_DONE  0x02
233 #define L2CAP_CONF_OUTPUT_DONE 0x04
234 #define L2CAP_CONF_MAX_RETRIES 2
235
236 void l2cap_load(void);
237
238 #endif /* __L2CAP_H */