xref: /openbmc/linux/net/bluetooth/cmtp/cmtp.h (revision 762f99f4f3cb41a775b5157dd761217beba65873)
11da177e4SLinus Torvalds /*
21da177e4SLinus Torvalds    CMTP implementation for Linux Bluetooth stack (BlueZ).
31da177e4SLinus Torvalds    Copyright (C) 2002-2003 Marcel Holtmann <marcel@holtmann.org>
41da177e4SLinus Torvalds 
51da177e4SLinus Torvalds    This program is free software; you can redistribute it and/or modify
61da177e4SLinus Torvalds    it under the terms of the GNU General Public License version 2 as
71da177e4SLinus Torvalds    published by the Free Software Foundation;
81da177e4SLinus Torvalds 
91da177e4SLinus Torvalds    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
101da177e4SLinus Torvalds    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
111da177e4SLinus Torvalds    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
121da177e4SLinus Torvalds    IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
131da177e4SLinus Torvalds    CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
141da177e4SLinus Torvalds    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
151da177e4SLinus Torvalds    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
161da177e4SLinus Torvalds    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
171da177e4SLinus Torvalds 
181da177e4SLinus Torvalds    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
191da177e4SLinus Torvalds    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
201da177e4SLinus Torvalds    SOFTWARE IS DISCLAIMED.
211da177e4SLinus Torvalds */
221da177e4SLinus Torvalds 
231da177e4SLinus Torvalds #ifndef __CMTP_H
241da177e4SLinus Torvalds #define __CMTP_H
251da177e4SLinus Torvalds 
261da177e4SLinus Torvalds #include <linux/types.h>
271da177e4SLinus Torvalds #include <net/bluetooth/bluetooth.h>
281da177e4SLinus Torvalds 
29*713baf3dSColin Ian King #define BTNAMSIZ 21
301da177e4SLinus Torvalds 
311da177e4SLinus Torvalds /* CMTP ioctl defines */
321da177e4SLinus Torvalds #define CMTPCONNADD	_IOW('C', 200, int)
331da177e4SLinus Torvalds #define CMTPCONNDEL	_IOW('C', 201, int)
341da177e4SLinus Torvalds #define CMTPGETCONNLIST	_IOR('C', 210, int)
351da177e4SLinus Torvalds #define CMTPGETCONNINFO	_IOR('C', 211, int)
361da177e4SLinus Torvalds 
371da177e4SLinus Torvalds #define CMTP_LOOPBACK	0
381da177e4SLinus Torvalds 
391da177e4SLinus Torvalds struct cmtp_connadd_req {
40e0e185efSSzymon Janc 	int   sock;	/* Connected socket */
411da177e4SLinus Torvalds 	__u32 flags;
421da177e4SLinus Torvalds };
431da177e4SLinus Torvalds 
441da177e4SLinus Torvalds struct cmtp_conndel_req {
451da177e4SLinus Torvalds 	bdaddr_t bdaddr;
461da177e4SLinus Torvalds 	__u32    flags;
471da177e4SLinus Torvalds };
481da177e4SLinus Torvalds 
491da177e4SLinus Torvalds struct cmtp_conninfo {
501da177e4SLinus Torvalds 	bdaddr_t bdaddr;
511da177e4SLinus Torvalds 	__u32    flags;
521da177e4SLinus Torvalds 	__u16    state;
531da177e4SLinus Torvalds 	int      num;
541da177e4SLinus Torvalds };
551da177e4SLinus Torvalds 
561da177e4SLinus Torvalds struct cmtp_connlist_req {
571da177e4SLinus Torvalds 	__u32  cnum;
581da177e4SLinus Torvalds 	struct cmtp_conninfo __user *ci;
591da177e4SLinus Torvalds };
601da177e4SLinus Torvalds 
611da177e4SLinus Torvalds int cmtp_add_connection(struct cmtp_connadd_req *req, struct socket *sock);
621da177e4SLinus Torvalds int cmtp_del_connection(struct cmtp_conndel_req *req);
631da177e4SLinus Torvalds int cmtp_get_connlist(struct cmtp_connlist_req *req);
641da177e4SLinus Torvalds int cmtp_get_conninfo(struct cmtp_conninfo *ci);
651da177e4SLinus Torvalds 
661da177e4SLinus Torvalds /* CMTP session defines */
671da177e4SLinus Torvalds #define CMTP_INTEROP_TIMEOUT	(HZ * 5)
681da177e4SLinus Torvalds #define CMTP_INITIAL_MSGNUM	0xff00
691da177e4SLinus Torvalds 
701da177e4SLinus Torvalds struct cmtp_session {
711da177e4SLinus Torvalds 	struct list_head list;
721da177e4SLinus Torvalds 
731da177e4SLinus Torvalds 	struct socket *sock;
741da177e4SLinus Torvalds 
751da177e4SLinus Torvalds 	bdaddr_t bdaddr;
761da177e4SLinus Torvalds 
771da177e4SLinus Torvalds 	unsigned long state;
781da177e4SLinus Torvalds 	unsigned long flags;
791da177e4SLinus Torvalds 
801da177e4SLinus Torvalds 	uint mtu;
811da177e4SLinus Torvalds 
821da177e4SLinus Torvalds 	char name[BTNAMSIZ];
831da177e4SLinus Torvalds 
847176522cSPeter Hurley 	atomic_t terminate;
85fada4ac3SSzymon Janc 	struct task_struct *task;
861da177e4SLinus Torvalds 
871da177e4SLinus Torvalds 	wait_queue_head_t wait;
881da177e4SLinus Torvalds 
891da177e4SLinus Torvalds 	int ncontroller;
901da177e4SLinus Torvalds 	int num;
911da177e4SLinus Torvalds 	struct capi_ctr ctrl;
921da177e4SLinus Torvalds 
931da177e4SLinus Torvalds 	struct list_head applications;
941da177e4SLinus Torvalds 
951da177e4SLinus Torvalds 	unsigned long blockids;
961da177e4SLinus Torvalds 	int msgnum;
971da177e4SLinus Torvalds 
981da177e4SLinus Torvalds 	struct sk_buff_head transmit;
991da177e4SLinus Torvalds 
1001da177e4SLinus Torvalds 	struct sk_buff *reassembly[16];
1011da177e4SLinus Torvalds };
1021da177e4SLinus Torvalds 
1031da177e4SLinus Torvalds struct cmtp_application {
1041da177e4SLinus Torvalds 	struct list_head list;
1051da177e4SLinus Torvalds 
1061da177e4SLinus Torvalds 	unsigned long state;
1071da177e4SLinus Torvalds 	int err;
1081da177e4SLinus Torvalds 
1091da177e4SLinus Torvalds 	__u16 appl;
1101da177e4SLinus Torvalds 	__u16 mapping;
1111da177e4SLinus Torvalds 
1121da177e4SLinus Torvalds 	__u16 msgnum;
1131da177e4SLinus Torvalds };
1141da177e4SLinus Torvalds 
1151da177e4SLinus Torvalds struct cmtp_scb {
1161da177e4SLinus Torvalds 	int id;
1171da177e4SLinus Torvalds 	int data;
1181da177e4SLinus Torvalds };
1191da177e4SLinus Torvalds 
1201da177e4SLinus Torvalds int  cmtp_attach_device(struct cmtp_session *session);
1211da177e4SLinus Torvalds void cmtp_detach_device(struct cmtp_session *session);
1221da177e4SLinus Torvalds 
1231da177e4SLinus Torvalds void cmtp_recv_capimsg(struct cmtp_session *session, struct sk_buff *skb);
1241da177e4SLinus Torvalds 
1251da177e4SLinus Torvalds /* CMTP init defines */
1261da177e4SLinus Torvalds int cmtp_init_sockets(void);
1271da177e4SLinus Torvalds void cmtp_cleanup_sockets(void);
1281da177e4SLinus Torvalds 
1291da177e4SLinus Torvalds #endif /* __CMTP_H */
130