1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun CMTP implementation for Linux Bluetooth stack (BlueZ). 3*4882a593Smuzhiyun Copyright (C) 2002-2003 Marcel Holtmann <marcel@holtmann.org> 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun This program is free software; you can redistribute it and/or modify 6*4882a593Smuzhiyun it under the terms of the GNU General Public License version 2 as 7*4882a593Smuzhiyun published by the Free Software Foundation; 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 10*4882a593Smuzhiyun OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 11*4882a593Smuzhiyun FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. 12*4882a593Smuzhiyun IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY 13*4882a593Smuzhiyun CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES 14*4882a593Smuzhiyun WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15*4882a593Smuzhiyun ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16*4882a593Smuzhiyun OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, 19*4882a593Smuzhiyun COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS 20*4882a593Smuzhiyun SOFTWARE IS DISCLAIMED. 21*4882a593Smuzhiyun */ 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun #ifndef __CMTP_H 24*4882a593Smuzhiyun #define __CMTP_H 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun #include <linux/types.h> 27*4882a593Smuzhiyun #include <net/bluetooth/bluetooth.h> 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun #define BTNAMSIZ 21 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun /* CMTP ioctl defines */ 32*4882a593Smuzhiyun #define CMTPCONNADD _IOW('C', 200, int) 33*4882a593Smuzhiyun #define CMTPCONNDEL _IOW('C', 201, int) 34*4882a593Smuzhiyun #define CMTPGETCONNLIST _IOR('C', 210, int) 35*4882a593Smuzhiyun #define CMTPGETCONNINFO _IOR('C', 211, int) 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun #define CMTP_LOOPBACK 0 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun struct cmtp_connadd_req { 40*4882a593Smuzhiyun int sock; /* Connected socket */ 41*4882a593Smuzhiyun __u32 flags; 42*4882a593Smuzhiyun }; 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun struct cmtp_conndel_req { 45*4882a593Smuzhiyun bdaddr_t bdaddr; 46*4882a593Smuzhiyun __u32 flags; 47*4882a593Smuzhiyun }; 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun struct cmtp_conninfo { 50*4882a593Smuzhiyun bdaddr_t bdaddr; 51*4882a593Smuzhiyun __u32 flags; 52*4882a593Smuzhiyun __u16 state; 53*4882a593Smuzhiyun int num; 54*4882a593Smuzhiyun }; 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun struct cmtp_connlist_req { 57*4882a593Smuzhiyun __u32 cnum; 58*4882a593Smuzhiyun struct cmtp_conninfo __user *ci; 59*4882a593Smuzhiyun }; 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun int cmtp_add_connection(struct cmtp_connadd_req *req, struct socket *sock); 62*4882a593Smuzhiyun int cmtp_del_connection(struct cmtp_conndel_req *req); 63*4882a593Smuzhiyun int cmtp_get_connlist(struct cmtp_connlist_req *req); 64*4882a593Smuzhiyun int cmtp_get_conninfo(struct cmtp_conninfo *ci); 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun /* CMTP session defines */ 67*4882a593Smuzhiyun #define CMTP_INTEROP_TIMEOUT (HZ * 5) 68*4882a593Smuzhiyun #define CMTP_INITIAL_MSGNUM 0xff00 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun struct cmtp_session { 71*4882a593Smuzhiyun struct list_head list; 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun struct socket *sock; 74*4882a593Smuzhiyun 75*4882a593Smuzhiyun bdaddr_t bdaddr; 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun unsigned long state; 78*4882a593Smuzhiyun unsigned long flags; 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun uint mtu; 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun char name[BTNAMSIZ]; 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun atomic_t terminate; 85*4882a593Smuzhiyun struct task_struct *task; 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun wait_queue_head_t wait; 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun int ncontroller; 90*4882a593Smuzhiyun int num; 91*4882a593Smuzhiyun struct capi_ctr ctrl; 92*4882a593Smuzhiyun 93*4882a593Smuzhiyun struct list_head applications; 94*4882a593Smuzhiyun 95*4882a593Smuzhiyun unsigned long blockids; 96*4882a593Smuzhiyun int msgnum; 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun struct sk_buff_head transmit; 99*4882a593Smuzhiyun 100*4882a593Smuzhiyun struct sk_buff *reassembly[16]; 101*4882a593Smuzhiyun }; 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun struct cmtp_application { 104*4882a593Smuzhiyun struct list_head list; 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun unsigned long state; 107*4882a593Smuzhiyun int err; 108*4882a593Smuzhiyun 109*4882a593Smuzhiyun __u16 appl; 110*4882a593Smuzhiyun __u16 mapping; 111*4882a593Smuzhiyun 112*4882a593Smuzhiyun __u16 msgnum; 113*4882a593Smuzhiyun }; 114*4882a593Smuzhiyun 115*4882a593Smuzhiyun struct cmtp_scb { 116*4882a593Smuzhiyun int id; 117*4882a593Smuzhiyun int data; 118*4882a593Smuzhiyun }; 119*4882a593Smuzhiyun 120*4882a593Smuzhiyun int cmtp_attach_device(struct cmtp_session *session); 121*4882a593Smuzhiyun void cmtp_detach_device(struct cmtp_session *session); 122*4882a593Smuzhiyun 123*4882a593Smuzhiyun void cmtp_recv_capimsg(struct cmtp_session *session, struct sk_buff *skb); 124*4882a593Smuzhiyun 125*4882a593Smuzhiyun /* CMTP init defines */ 126*4882a593Smuzhiyun int cmtp_init_sockets(void); 127*4882a593Smuzhiyun void cmtp_cleanup_sockets(void); 128*4882a593Smuzhiyun 129*4882a593Smuzhiyun #endif /* __CMTP_H */ 130