162306a36Sopenharmony_ci/*
262306a36Sopenharmony_ci   CMTP implementation for Linux Bluetooth stack (BlueZ).
362306a36Sopenharmony_ci   Copyright (C) 2002-2003 Marcel Holtmann <marcel@holtmann.org>
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci   This program is free software; you can redistribute it and/or modify
662306a36Sopenharmony_ci   it under the terms of the GNU General Public License version 2 as
762306a36Sopenharmony_ci   published by the Free Software Foundation;
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
1062306a36Sopenharmony_ci   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1162306a36Sopenharmony_ci   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
1262306a36Sopenharmony_ci   IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
1362306a36Sopenharmony_ci   CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
1462306a36Sopenharmony_ci   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
1562306a36Sopenharmony_ci   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
1662306a36Sopenharmony_ci   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ci   ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
1962306a36Sopenharmony_ci   COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
2062306a36Sopenharmony_ci   SOFTWARE IS DISCLAIMED.
2162306a36Sopenharmony_ci*/
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ci#ifndef __CMTP_H
2462306a36Sopenharmony_ci#define __CMTP_H
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci#include <linux/types.h>
2762306a36Sopenharmony_ci#include <net/bluetooth/bluetooth.h>
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ci#define BTNAMSIZ 21
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ci/* CMTP ioctl defines */
3262306a36Sopenharmony_ci#define CMTPCONNADD	_IOW('C', 200, int)
3362306a36Sopenharmony_ci#define CMTPCONNDEL	_IOW('C', 201, int)
3462306a36Sopenharmony_ci#define CMTPGETCONNLIST	_IOR('C', 210, int)
3562306a36Sopenharmony_ci#define CMTPGETCONNINFO	_IOR('C', 211, int)
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci#define CMTP_LOOPBACK	0
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_cistruct cmtp_connadd_req {
4062306a36Sopenharmony_ci	int   sock;	/* Connected socket */
4162306a36Sopenharmony_ci	__u32 flags;
4262306a36Sopenharmony_ci};
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_cistruct cmtp_conndel_req {
4562306a36Sopenharmony_ci	bdaddr_t bdaddr;
4662306a36Sopenharmony_ci	__u32    flags;
4762306a36Sopenharmony_ci};
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_cistruct cmtp_conninfo {
5062306a36Sopenharmony_ci	bdaddr_t bdaddr;
5162306a36Sopenharmony_ci	__u32    flags;
5262306a36Sopenharmony_ci	__u16    state;
5362306a36Sopenharmony_ci	int      num;
5462306a36Sopenharmony_ci};
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_cistruct cmtp_connlist_req {
5762306a36Sopenharmony_ci	__u32  cnum;
5862306a36Sopenharmony_ci	struct cmtp_conninfo __user *ci;
5962306a36Sopenharmony_ci};
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_ciint cmtp_add_connection(struct cmtp_connadd_req *req, struct socket *sock);
6262306a36Sopenharmony_ciint cmtp_del_connection(struct cmtp_conndel_req *req);
6362306a36Sopenharmony_ciint cmtp_get_connlist(struct cmtp_connlist_req *req);
6462306a36Sopenharmony_ciint cmtp_get_conninfo(struct cmtp_conninfo *ci);
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_ci/* CMTP session defines */
6762306a36Sopenharmony_ci#define CMTP_INTEROP_TIMEOUT	(HZ * 5)
6862306a36Sopenharmony_ci#define CMTP_INITIAL_MSGNUM	0xff00
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_cistruct cmtp_session {
7162306a36Sopenharmony_ci	struct list_head list;
7262306a36Sopenharmony_ci
7362306a36Sopenharmony_ci	struct socket *sock;
7462306a36Sopenharmony_ci
7562306a36Sopenharmony_ci	bdaddr_t bdaddr;
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ci	unsigned long state;
7862306a36Sopenharmony_ci	unsigned long flags;
7962306a36Sopenharmony_ci
8062306a36Sopenharmony_ci	uint mtu;
8162306a36Sopenharmony_ci
8262306a36Sopenharmony_ci	char name[BTNAMSIZ];
8362306a36Sopenharmony_ci
8462306a36Sopenharmony_ci	atomic_t terminate;
8562306a36Sopenharmony_ci	struct task_struct *task;
8662306a36Sopenharmony_ci
8762306a36Sopenharmony_ci	wait_queue_head_t wait;
8862306a36Sopenharmony_ci
8962306a36Sopenharmony_ci	int ncontroller;
9062306a36Sopenharmony_ci	int num;
9162306a36Sopenharmony_ci	struct capi_ctr ctrl;
9262306a36Sopenharmony_ci
9362306a36Sopenharmony_ci	struct list_head applications;
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_ci	unsigned long blockids;
9662306a36Sopenharmony_ci	int msgnum;
9762306a36Sopenharmony_ci
9862306a36Sopenharmony_ci	struct sk_buff_head transmit;
9962306a36Sopenharmony_ci
10062306a36Sopenharmony_ci	struct sk_buff *reassembly[16];
10162306a36Sopenharmony_ci};
10262306a36Sopenharmony_ci
10362306a36Sopenharmony_cistruct cmtp_application {
10462306a36Sopenharmony_ci	struct list_head list;
10562306a36Sopenharmony_ci
10662306a36Sopenharmony_ci	unsigned long state;
10762306a36Sopenharmony_ci	int err;
10862306a36Sopenharmony_ci
10962306a36Sopenharmony_ci	__u16 appl;
11062306a36Sopenharmony_ci	__u16 mapping;
11162306a36Sopenharmony_ci
11262306a36Sopenharmony_ci	__u16 msgnum;
11362306a36Sopenharmony_ci};
11462306a36Sopenharmony_ci
11562306a36Sopenharmony_cistruct cmtp_scb {
11662306a36Sopenharmony_ci	int id;
11762306a36Sopenharmony_ci	int data;
11862306a36Sopenharmony_ci};
11962306a36Sopenharmony_ci
12062306a36Sopenharmony_ciint  cmtp_attach_device(struct cmtp_session *session);
12162306a36Sopenharmony_civoid cmtp_detach_device(struct cmtp_session *session);
12262306a36Sopenharmony_ci
12362306a36Sopenharmony_civoid cmtp_recv_capimsg(struct cmtp_session *session, struct sk_buff *skb);
12462306a36Sopenharmony_ci
12562306a36Sopenharmony_ci/* CMTP init defines */
12662306a36Sopenharmony_ciint cmtp_init_sockets(void);
12762306a36Sopenharmony_civoid cmtp_cleanup_sockets(void);
12862306a36Sopenharmony_ci
12962306a36Sopenharmony_ci#endif /* __CMTP_H */
130