xref: /freebsd/sys/netgraph/bluetooth/l2cap/ng_l2cap_misc.h (revision 2ff63af9b88c7413b7d71715b5532625752a248e)
1878ed226SJulian Elischer /*
2878ed226SJulian Elischer  * ng_l2cap_misc.h
3c398230bSWarner Losh  */
4c398230bSWarner Losh 
5c398230bSWarner Losh /*-
6*4d846d26SWarner Losh  * SPDX-License-Identifier: BSD-2-Clause
7fe267a55SPedro F. Giffuni  *
8878ed226SJulian Elischer  * Copyright (c) Maksim Yevmenkin <m_evmenkin@yahoo.com>
9878ed226SJulian Elischer  * All rights reserved.
10878ed226SJulian Elischer  *
11878ed226SJulian Elischer  * Redistribution and use in source and binary forms, with or without
12878ed226SJulian Elischer  * modification, are permitted provided that the following conditions
13878ed226SJulian Elischer  * are met:
14878ed226SJulian Elischer  * 1. Redistributions of source code must retain the above copyright
15878ed226SJulian Elischer  *    notice, this list of conditions and the following disclaimer.
16878ed226SJulian Elischer  * 2. Redistributions in binary form must reproduce the above copyright
17878ed226SJulian Elischer  *    notice, this list of conditions and the following disclaimer in the
18878ed226SJulian Elischer  *    documentation and/or other materials provided with the distribution.
19878ed226SJulian Elischer  *
20878ed226SJulian Elischer  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
21878ed226SJulian Elischer  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22878ed226SJulian Elischer  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23878ed226SJulian Elischer  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
24878ed226SJulian Elischer  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25878ed226SJulian Elischer  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26878ed226SJulian Elischer  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27878ed226SJulian Elischer  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28878ed226SJulian Elischer  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29878ed226SJulian Elischer  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30878ed226SJulian Elischer  * SUCH DAMAGE.
31878ed226SJulian Elischer  *
320986ab12SMaksim Yevmenkin  * $Id: ng_l2cap_misc.h,v 1.3 2003/09/08 19:11:45 max Exp $
33878ed226SJulian Elischer  */
34878ed226SJulian Elischer 
35878ed226SJulian Elischer #ifndef _NETGRAPH_L2CAP_MISC_H_
36f21fff6cSMaksim Yevmenkin #define _NETGRAPH_L2CAP_MISC_H_
37878ed226SJulian Elischer 
38878ed226SJulian Elischer void           ng_l2cap_send_hook_info (node_p, hook_p, void *, int);
39878ed226SJulian Elischer 
40878ed226SJulian Elischer /*
41878ed226SJulian Elischer  * ACL Connections
42878ed226SJulian Elischer  */
43878ed226SJulian Elischer 
44fbc48c2bSTakanori Watanabe ng_l2cap_con_p ng_l2cap_new_con       (ng_l2cap_p, bdaddr_p, int);
45f2bb1caeSJulian Elischer void           ng_l2cap_con_ref       (ng_l2cap_con_p);
46f2bb1caeSJulian Elischer void           ng_l2cap_con_unref     (ng_l2cap_con_p);
47fbc48c2bSTakanori Watanabe ng_l2cap_con_p ng_l2cap_con_by_addr   (ng_l2cap_p, bdaddr_p, unsigned int);
48878ed226SJulian Elischer ng_l2cap_con_p ng_l2cap_con_by_handle (ng_l2cap_p, u_int16_t);
49878ed226SJulian Elischer void           ng_l2cap_free_con      (ng_l2cap_con_p);
50878ed226SJulian Elischer 
51878ed226SJulian Elischer /*
52878ed226SJulian Elischer  * L2CAP channels
53878ed226SJulian Elischer  */
54878ed226SJulian Elischer 
55fbc48c2bSTakanori Watanabe ng_l2cap_chan_p ng_l2cap_new_chan     (ng_l2cap_p, ng_l2cap_con_p, u_int16_t, int);
56fbc48c2bSTakanori Watanabe ng_l2cap_chan_p ng_l2cap_chan_by_scid (ng_l2cap_p, u_int16_t, int);
57fbc48c2bSTakanori Watanabe ng_l2cap_chan_p ng_l2cap_chan_by_conhandle(ng_l2cap_p , uint16_t , u_int16_t);
58fbc48c2bSTakanori Watanabe 
59878ed226SJulian Elischer void            ng_l2cap_free_chan    (ng_l2cap_chan_p);
60878ed226SJulian Elischer 
61878ed226SJulian Elischer /*
62878ed226SJulian Elischer  * L2CAP command descriptors
63878ed226SJulian Elischer  */
64878ed226SJulian Elischer 
65878ed226SJulian Elischer #define ng_l2cap_link_cmd(con, cmd) \
66878ed226SJulian Elischer do { \
67878ed226SJulian Elischer 	TAILQ_INSERT_TAIL(&(con)->cmd_list, (cmd), next); \
68f2bb1caeSJulian Elischer 	ng_l2cap_con_ref((con)); \
69878ed226SJulian Elischer } while (0)
70878ed226SJulian Elischer 
71878ed226SJulian Elischer #define ng_l2cap_unlink_cmd(cmd) \
72878ed226SJulian Elischer do { \
73878ed226SJulian Elischer 	TAILQ_REMOVE(&((cmd)->con->cmd_list), (cmd), next); \
74f2bb1caeSJulian Elischer 	ng_l2cap_con_unref((cmd)->con); \
75878ed226SJulian Elischer } while (0)
76878ed226SJulian Elischer 
77878ed226SJulian Elischer #define ng_l2cap_free_cmd(cmd) \
78878ed226SJulian Elischer do { \
79e5cd9375SPawel Jakub Dawidek 	KASSERT(!callout_pending(&(cmd)->timo), ("Pending callout!")); \
80878ed226SJulian Elischer 	NG_FREE_M((cmd)->aux); \
81878ed226SJulian Elischer 	bzero((cmd), sizeof(*(cmd))); \
821ede983cSDag-Erling Smørgrav 	free((cmd), M_NETGRAPH_L2CAP); \
83878ed226SJulian Elischer } while (0)
84878ed226SJulian Elischer 
85878ed226SJulian Elischer ng_l2cap_cmd_p ng_l2cap_new_cmd      (ng_l2cap_con_p, ng_l2cap_chan_p,
86878ed226SJulian Elischer 						u_int8_t, u_int8_t, u_int32_t);
87878ed226SJulian Elischer ng_l2cap_cmd_p ng_l2cap_cmd_by_ident (ng_l2cap_con_p, u_int8_t);
88878ed226SJulian Elischer u_int8_t       ng_l2cap_get_ident    (ng_l2cap_con_p);
89878ed226SJulian Elischer 
90878ed226SJulian Elischer /*
91878ed226SJulian Elischer  * Timeout
92878ed226SJulian Elischer  */
93878ed226SJulian Elischer 
940986ab12SMaksim Yevmenkin int ng_l2cap_discon_timeout    (ng_l2cap_con_p);
950986ab12SMaksim Yevmenkin int ng_l2cap_discon_untimeout  (ng_l2cap_con_p);
960986ab12SMaksim Yevmenkin int ng_l2cap_lp_timeout        (ng_l2cap_con_p);
970986ab12SMaksim Yevmenkin int ng_l2cap_lp_untimeout      (ng_l2cap_con_p);
980986ab12SMaksim Yevmenkin int ng_l2cap_command_timeout   (ng_l2cap_cmd_p, int);
990986ab12SMaksim Yevmenkin int ng_l2cap_command_untimeout (ng_l2cap_cmd_p);
100878ed226SJulian Elischer 
101878ed226SJulian Elischer /*
102878ed226SJulian Elischer  * Other stuff
103878ed226SJulian Elischer  */
104878ed226SJulian Elischer 
105878ed226SJulian Elischer struct mbuf *   ng_l2cap_prepend      (struct mbuf *, int);
106878ed226SJulian Elischer ng_l2cap_flow_p ng_l2cap_default_flow (void);
107878ed226SJulian Elischer 
108878ed226SJulian Elischer #endif /* ndef _NETGRAPH_L2CAP_MISC_H_ */
109