xref: /freebsd/sys/netgraph/bluetooth/include/ng_btsocket_sco.h (revision 0fac350c54d0a72f5341e15021efcde63eb58a4b)
148698a83SMaksim Yevmenkin /*
248698a83SMaksim Yevmenkin  * ng_btsocket_sco.h
348698a83SMaksim Yevmenkin  */
448698a83SMaksim Yevmenkin 
548698a83SMaksim Yevmenkin /*-
64d846d26SWarner Losh  * SPDX-License-Identifier: BSD-2-Clause
7fe267a55SPedro F. Giffuni  *
848698a83SMaksim Yevmenkin  * Copyright (c) 2001-2002 Maksim Yevmenkin <m_evmenkin@yahoo.com>
948698a83SMaksim Yevmenkin  * All rights reserved.
1048698a83SMaksim Yevmenkin  *
1148698a83SMaksim Yevmenkin  * Redistribution and use in source and binary forms, with or without
1248698a83SMaksim Yevmenkin  * modification, are permitted provided that the following conditions
1348698a83SMaksim Yevmenkin  * are met:
1448698a83SMaksim Yevmenkin  * 1. Redistributions of source code must retain the above copyright
1548698a83SMaksim Yevmenkin  *    notice, this list of conditions and the following disclaimer.
1648698a83SMaksim Yevmenkin  * 2. Redistributions in binary form must reproduce the above copyright
1748698a83SMaksim Yevmenkin  *    notice, this list of conditions and the following disclaimer in the
1848698a83SMaksim Yevmenkin  *    documentation and/or other materials provided with the distribution.
1948698a83SMaksim Yevmenkin  *
2048698a83SMaksim Yevmenkin  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
2148698a83SMaksim Yevmenkin  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2248698a83SMaksim Yevmenkin  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2348698a83SMaksim Yevmenkin  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
2448698a83SMaksim Yevmenkin  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2548698a83SMaksim Yevmenkin  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2648698a83SMaksim Yevmenkin  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2748698a83SMaksim Yevmenkin  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2848698a83SMaksim Yevmenkin  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2948698a83SMaksim Yevmenkin  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
3048698a83SMaksim Yevmenkin  * SUCH DAMAGE.
3148698a83SMaksim Yevmenkin  *
3248698a83SMaksim Yevmenkin  * $Id: ng_btsocket_sco.h,v 1.3 2005/10/31 18:08:52 max Exp $
3348698a83SMaksim Yevmenkin  */
3448698a83SMaksim Yevmenkin 
3548698a83SMaksim Yevmenkin #ifndef _NETGRAPH_BTSOCKET_SCO_H_
3648698a83SMaksim Yevmenkin #define _NETGRAPH_BTSOCKET_SCO_H_
3748698a83SMaksim Yevmenkin 
3848698a83SMaksim Yevmenkin /*
3948698a83SMaksim Yevmenkin  * SCO routing entry
4048698a83SMaksim Yevmenkin  */
4148698a83SMaksim Yevmenkin 
4248698a83SMaksim Yevmenkin struct ng_hook;
4348698a83SMaksim Yevmenkin struct ng_message;
4448698a83SMaksim Yevmenkin 
4548698a83SMaksim Yevmenkin struct ng_btsocket_sco_rtentry {
4648698a83SMaksim Yevmenkin 	bdaddr_t				 src;  /* source BD_ADDR */
4748698a83SMaksim Yevmenkin 	u_int16_t				 pkt_size; /* mtu */
4848698a83SMaksim Yevmenkin 	u_int16_t				 num_pkts; /* buffer size */
4948698a83SMaksim Yevmenkin 	int32_t					 pending; /* pending packets */
5048698a83SMaksim Yevmenkin 	struct ng_hook				*hook; /* downstream hook */
5148698a83SMaksim Yevmenkin 	LIST_ENTRY(ng_btsocket_sco_rtentry)	 next; /* link to next */
5248698a83SMaksim Yevmenkin };
5348698a83SMaksim Yevmenkin typedef struct ng_btsocket_sco_rtentry		ng_btsocket_sco_rtentry_t;
5448698a83SMaksim Yevmenkin typedef struct ng_btsocket_sco_rtentry *	ng_btsocket_sco_rtentry_p;
5548698a83SMaksim Yevmenkin 
5648698a83SMaksim Yevmenkin /*****************************************************************************
5748698a83SMaksim Yevmenkin  *****************************************************************************
5848698a83SMaksim Yevmenkin  **                      SOCK_SEQPACKET SCO sockets                         **
5948698a83SMaksim Yevmenkin  *****************************************************************************
6048698a83SMaksim Yevmenkin  *****************************************************************************/
6148698a83SMaksim Yevmenkin 
6248698a83SMaksim Yevmenkin #define NG_BTSOCKET_SCO_SENDSPACE	1024
6348698a83SMaksim Yevmenkin #define NG_BTSOCKET_SCO_RECVSPACE	(64 * 1024)
6448698a83SMaksim Yevmenkin 
6548698a83SMaksim Yevmenkin /*
6648698a83SMaksim Yevmenkin  * Bluetooth SCO socket PCB
6748698a83SMaksim Yevmenkin  */
6848698a83SMaksim Yevmenkin 
6948698a83SMaksim Yevmenkin struct ng_btsocket_sco_pcb {
7048698a83SMaksim Yevmenkin 	struct socket			*so;	     /* Pointer to socket */
7148698a83SMaksim Yevmenkin 
7248698a83SMaksim Yevmenkin 	bdaddr_t			 src;	     /* Source address */
7348698a83SMaksim Yevmenkin 	bdaddr_t			 dst;	     /* Destination address */
7448698a83SMaksim Yevmenkin 
7548698a83SMaksim Yevmenkin 	u_int16_t			 con_handle; /* connection handle */
7648698a83SMaksim Yevmenkin 
7748698a83SMaksim Yevmenkin 	u_int16_t			 flags;      /* socket flags */
7848698a83SMaksim Yevmenkin #define NG_BTSOCKET_SCO_CLIENT		(1 << 0)     /* socket is client */
7948698a83SMaksim Yevmenkin #define NG_BTSOCKET_SCO_TIMO		(1 << 1)     /* timeout pending */
8048698a83SMaksim Yevmenkin 
8148698a83SMaksim Yevmenkin 	u_int8_t			 state;      /* socket state */
8248698a83SMaksim Yevmenkin #define NG_BTSOCKET_SCO_CLOSED		0            /* socket closed */
8348698a83SMaksim Yevmenkin #define NG_BTSOCKET_SCO_CONNECTING	1            /* wait for connect */
8448698a83SMaksim Yevmenkin #define NG_BTSOCKET_SCO_OPEN		2            /* socket open */
8548698a83SMaksim Yevmenkin #define NG_BTSOCKET_SCO_DISCONNECTING	3            /* wait for disconnect */
8648698a83SMaksim Yevmenkin 
8748698a83SMaksim Yevmenkin 	struct callout			 timo;       /* timeout */
8848698a83SMaksim Yevmenkin 
8948698a83SMaksim Yevmenkin 	ng_btsocket_sco_rtentry_p	 rt;         /* routing info */
9048698a83SMaksim Yevmenkin 
9148698a83SMaksim Yevmenkin 	struct mtx			 pcb_mtx;    /* pcb mutex */
9248698a83SMaksim Yevmenkin 
9348698a83SMaksim Yevmenkin 	LIST_ENTRY(ng_btsocket_sco_pcb)	 next;       /* link to next PCB */
9448698a83SMaksim Yevmenkin };
9548698a83SMaksim Yevmenkin typedef struct ng_btsocket_sco_pcb	ng_btsocket_sco_pcb_t;
9648698a83SMaksim Yevmenkin typedef struct ng_btsocket_sco_pcb *	ng_btsocket_sco_pcb_p;
9748698a83SMaksim Yevmenkin 
9848698a83SMaksim Yevmenkin #define	so2sco_pcb(so) \
9948698a83SMaksim Yevmenkin 	((struct ng_btsocket_sco_pcb *)((so)->so_pcb))
10048698a83SMaksim Yevmenkin 
10148698a83SMaksim Yevmenkin /*
10248698a83SMaksim Yevmenkin  * Bluetooth SCO socket methods
10348698a83SMaksim Yevmenkin  */
10448698a83SMaksim Yevmenkin 
10548698a83SMaksim Yevmenkin #ifdef _KERNEL
10648698a83SMaksim Yevmenkin 
10748698a83SMaksim Yevmenkin void ng_btsocket_sco_abort      (struct socket *);
10848698a83SMaksim Yevmenkin void ng_btsocket_sco_close      (struct socket *);
109cfb1e929SGleb Smirnoff int  ng_btsocket_sco_accept     (struct socket *, struct sockaddr *);
11048698a83SMaksim Yevmenkin int  ng_btsocket_sco_attach     (struct socket *, int, struct thread *);
11148698a83SMaksim Yevmenkin int  ng_btsocket_sco_bind       (struct socket *, struct sockaddr *,
11248698a83SMaksim Yevmenkin                                    struct thread *);
11348698a83SMaksim Yevmenkin int  ng_btsocket_sco_connect    (struct socket *, struct sockaddr *,
11448698a83SMaksim Yevmenkin                                    struct thread *);
115f277746eSGleb Smirnoff int  ng_btsocket_sco_control    (struct socket *, u_long, void *,
11648698a83SMaksim Yevmenkin                                    struct ifnet *, struct thread *);
11748698a83SMaksim Yevmenkin int  ng_btsocket_sco_ctloutput  (struct socket *, struct sockopt *);
11848698a83SMaksim Yevmenkin void ng_btsocket_sco_detach     (struct socket *);
11948698a83SMaksim Yevmenkin int  ng_btsocket_sco_disconnect (struct socket *);
12048698a83SMaksim Yevmenkin int  ng_btsocket_sco_listen     (struct socket *, int, struct thread *);
121*0fac350cSGleb Smirnoff int  ng_btsocket_sco_peeraddr   (struct socket *, struct sockaddr *);
12248698a83SMaksim Yevmenkin int  ng_btsocket_sco_send       (struct socket *, int, struct mbuf *,
12348698a83SMaksim Yevmenkin                                    struct sockaddr *, struct mbuf *,
12448698a83SMaksim Yevmenkin                                    struct thread *);
125*0fac350cSGleb Smirnoff int  ng_btsocket_sco_sockaddr   (struct socket *, struct sockaddr *);
12648698a83SMaksim Yevmenkin 
12748698a83SMaksim Yevmenkin #endif /* _KERNEL */
12848698a83SMaksim Yevmenkin 
12948698a83SMaksim Yevmenkin #endif /* _NETGRAPH_BTSOCKET_SCO_H_ */
130