| /* |
| CMTP implementation for Linux Bluetooth stack (BlueZ). |
| Copyright (C) 2002-2003 Marcel Holtmann <marcel@holtmann.org> |
| |
| This program is free software; you can redistribute it and/or modify |
| it under the terms of the GNU General Public License version 2 as |
| published by the Free Software Foundation; |
| |
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
| OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. |
| IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY |
| CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES |
| WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
| ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
| OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
| |
| ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, |
| COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS |
| SOFTWARE IS DISCLAIMED. |
| */ |
| |
| #ifndef __CMTP_H |
| #define __CMTP_H |
| |
| #include <linux/types.h> |
| #include <net/bluetooth/bluetooth.h> |
| |
| #define BTNAMSIZ 18 |
| |
| /* CMTP ioctl defines */ |
| #define CMTPCONNADD _IOW('C', 200, int) |
| #define CMTPCONNDEL _IOW('C', 201, int) |
| #define CMTPGETCONNLIST _IOR('C', 210, int) |
| #define CMTPGETCONNINFO _IOR('C', 211, int) |
| |
| #define CMTP_LOOPBACK 0 |
| |
| struct cmtp_connadd_req { |
| int sock; // Connected socket |
| __u32 flags; |
| }; |
| |
| struct cmtp_conndel_req { |
| bdaddr_t bdaddr; |
| __u32 flags; |
| }; |
| |
| struct cmtp_conninfo { |
| bdaddr_t bdaddr; |
| __u32 flags; |
| __u16 state; |
| int num; |
| }; |
| |
| struct cmtp_connlist_req { |
| __u32 cnum; |
| struct cmtp_conninfo __user *ci; |
| }; |
| |
| int cmtp_add_connection(struct cmtp_connadd_req *req, struct socket *sock); |
| int cmtp_del_connection(struct cmtp_conndel_req *req); |
| int cmtp_get_connlist(struct cmtp_connlist_req *req); |
| int cmtp_get_conninfo(struct cmtp_conninfo *ci); |
| |
| /* CMTP session defines */ |
| #define CMTP_INTEROP_TIMEOUT (HZ * 5) |
| #define CMTP_INITIAL_MSGNUM 0xff00 |
| |
| struct cmtp_session { |
| struct list_head list; |
| |
| struct socket *sock; |
| |
| bdaddr_t bdaddr; |
| |
| unsigned long state; |
| unsigned long flags; |
| |
| uint mtu; |
| |
| char name[BTNAMSIZ]; |
| |
| atomic_t terminate; |
| |
| wait_queue_head_t wait; |
| |
| int ncontroller; |
| int num; |
| struct capi_ctr ctrl; |
| |
| struct list_head applications; |
| |
| unsigned long blockids; |
| int msgnum; |
| |
| struct sk_buff_head transmit; |
| |
| struct sk_buff *reassembly[16]; |
| }; |
| |
| struct cmtp_application { |
| struct list_head list; |
| |
| unsigned long state; |
| int err; |
| |
| __u16 appl; |
| __u16 mapping; |
| |
| __u16 msgnum; |
| }; |
| |
| struct cmtp_scb { |
| int id; |
| int data; |
| }; |
| |
| int cmtp_attach_device(struct cmtp_session *session); |
| void cmtp_detach_device(struct cmtp_session *session); |
| |
| void cmtp_recv_capimsg(struct cmtp_session *session, struct sk_buff *skb); |
| |
| static inline void cmtp_schedule(struct cmtp_session *session) |
| { |
| struct sock *sk = session->sock->sk; |
| |
| wake_up_interruptible(sk->sk_sleep); |
| } |
| |
| /* CMTP init defines */ |
| int cmtp_init_sockets(void); |
| void cmtp_cleanup_sockets(void); |
| |
| #endif /* __CMTP_H */ |