]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/netgraph/bluetooth/include/ng_bluetooth.h
Initial import from vendor-sys branch of openzfs
[FreeBSD/FreeBSD.git] / sys / netgraph / bluetooth / include / ng_bluetooth.h
1 /*
2  * bluetooth.h
3  */
4
5 /*-
6  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
7  *
8  * Copyright (c) 2001-2002 Maksim Yevmenkin <m_evmenkin@yahoo.com>
9  * All rights reserved.
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  * 1. Redistributions of source code must retain the above copyright
15  *    notice, this list of conditions and the following disclaimer.
16  * 2. Redistributions in binary form must reproduce the above copyright
17  *    notice, this list of conditions and the following disclaimer in the
18  *    documentation and/or other materials provided with the distribution.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
21  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
24  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30  * SUCH DAMAGE.
31  *
32  * $Id: ng_bluetooth.h,v 1.4 2003/04/26 22:32:34 max Exp $
33  * $FreeBSD$
34  */
35
36 #ifndef _NETGRAPH_BLUETOOTH_H_
37 #define _NETGRAPH_BLUETOOTH_H_
38
39 #include <sys/queue.h>
40
41 /*
42  * Version of the stack
43  */
44
45 #define NG_BLUETOOTH_VERSION    1
46
47 /*
48  * Declare the base of the Bluetooth sysctl hierarchy, 
49  * but only if this file cares about sysctl's
50  */
51
52 #ifdef SYSCTL_DECL
53 SYSCTL_DECL(_net_bluetooth);
54 SYSCTL_DECL(_net_bluetooth_hci);
55 SYSCTL_DECL(_net_bluetooth_l2cap);
56 SYSCTL_DECL(_net_bluetooth_rfcomm);
57 SYSCTL_DECL(_net_bluetooth_sco);
58 #endif /* SYSCTL_DECL */
59
60 /*
61  * Mbuf qeueue and useful mbufq macros. We do not use ifqueue because we
62  * do not need mutex and other locking stuff
63  */
64
65 struct mbuf;
66
67 struct ng_bt_mbufq {
68         struct mbuf     *head;   /* first item in the queue */
69         struct mbuf     *tail;   /* last item in the queue */
70         u_int32_t        len;    /* number of items in the queue */
71         u_int32_t        maxlen; /* maximal number of items in the queue */
72         u_int32_t        drops;  /* number if dropped items */
73 };
74 typedef struct ng_bt_mbufq      ng_bt_mbufq_t;
75 typedef struct ng_bt_mbufq *    ng_bt_mbufq_p;
76
77 #define NG_BT_MBUFQ_INIT(q, _maxlen)                    \
78         do {                                            \
79                 (q)->head = NULL;                       \
80                 (q)->tail = NULL;                       \
81                 (q)->len = 0;                           \
82                 (q)->maxlen = (_maxlen);                \
83                 (q)->drops = 0;                         \
84         } while (0)
85
86 #define NG_BT_MBUFQ_DESTROY(q)                          \
87         do {                                            \
88                 NG_BT_MBUFQ_DRAIN((q));                 \
89         } while (0)
90
91 #define NG_BT_MBUFQ_FIRST(q)    (q)->head
92
93 #define NG_BT_MBUFQ_LEN(q)      (q)->len
94
95 #define NG_BT_MBUFQ_FULL(q)     ((q)->len >= (q)->maxlen)
96
97 #define NG_BT_MBUFQ_DROP(q)     (q)->drops ++
98
99 #define NG_BT_MBUFQ_ENQUEUE(q, i)                       \
100         do {                                            \
101                 (i)->m_nextpkt = NULL;                  \
102                                                         \
103                 if ((q)->tail == NULL)                  \
104                         (q)->head = (i);                \
105                 else                                    \
106                         (q)->tail->m_nextpkt = (i);     \
107                                                         \
108                 (q)->tail = (i);                        \
109                 (q)->len ++;                            \
110         } while (0)
111
112 #define NG_BT_MBUFQ_DEQUEUE(q, i)                       \
113         do {                                            \
114                 (i) = (q)->head;                        \
115                 if ((i) != NULL) {                      \
116                         (q)->head = (q)->head->m_nextpkt; \
117                         if ((q)->head == NULL)          \
118                                 (q)->tail = NULL;       \
119                                                         \
120                         (q)->len --;                    \
121                         (i)->m_nextpkt = NULL;          \
122                 }                                       \
123         } while (0)
124
125 #define NG_BT_MBUFQ_PREPEND(q, i)                       \
126         do {                                            \
127                 (i)->m_nextpkt = (q)->head;             \
128                 if ((q)->tail == NULL)                  \
129                         (q)->tail = (i);                \
130                                                         \
131                 (q)->head = (i);                        \
132                 (q)->len ++;                            \
133         } while (0)
134
135 #define NG_BT_MBUFQ_DRAIN(q)                            \
136         do {                                            \
137                 struct mbuf     *m = NULL;              \
138                                                         \
139                 for (;;) {                              \
140                         NG_BT_MBUFQ_DEQUEUE((q), m);    \
141                         if (m == NULL)                  \
142                                 break;                  \
143                                                         \
144                         NG_FREE_M(m);                   \
145                 }                                       \
146         } while (0)
147
148 /* 
149  * Netgraph item queue and useful itemq macros
150  */
151
152 struct ng_item;
153
154 struct ng_bt_itemq {
155         STAILQ_HEAD(, ng_item)  queue;  /* actually items queue */
156         u_int32_t        len;    /* number of items in the queue */
157         u_int32_t        maxlen; /* maximal number of items in the queue */
158         u_int32_t        drops;  /* number if dropped items */
159 };
160 typedef struct ng_bt_itemq      ng_bt_itemq_t;
161 typedef struct ng_bt_itemq *    ng_bt_itemq_p;
162
163 #define NG_BT_ITEMQ_INIT(q, _maxlen)                    \
164         do {                                            \
165                 STAILQ_INIT(&(q)->queue);               \
166                 (q)->len = 0;                           \
167                 (q)->maxlen = (_maxlen);                \
168                 (q)->drops = 0;                         \
169         } while (0)
170
171 #define NG_BT_ITEMQ_DESTROY(q)                          \
172         do {                                            \
173                 NG_BT_ITEMQ_DRAIN((q));                 \
174         } while (0)
175
176 #define NG_BT_ITEMQ_FIRST(q)    STAILQ_FIRST(&(q)->queue)
177
178 #define NG_BT_ITEMQ_LEN(q)      NG_BT_MBUFQ_LEN((q))
179
180 #define NG_BT_ITEMQ_FULL(q)     NG_BT_MBUFQ_FULL((q))
181
182 #define NG_BT_ITEMQ_DROP(q)     NG_BT_MBUFQ_DROP((q))
183
184 #define NG_BT_ITEMQ_ENQUEUE(q, i)                       \
185         do {                                            \
186                 STAILQ_INSERT_TAIL(&(q)->queue, (i), el_next);  \
187                 (q)->len ++;                            \
188         } while (0)
189
190 #define NG_BT_ITEMQ_DEQUEUE(q, i)                       \
191         do {                                            \
192                 (i) = STAILQ_FIRST(&(q)->queue);        \
193                 if ((i) != NULL) {                      \
194                         STAILQ_REMOVE_HEAD(&(q)->queue, el_next);       \
195                         (q)->len --;                    \
196                 }                                       \
197         } while (0)
198
199 #define NG_BT_ITEMQ_PREPEND(q, i)                       \
200         do {                                            \
201                 STAILQ_INSERT_HEAD(&(q)->queue, (i), el_next);  \
202                 (q)->len ++;                            \
203         } while (0)
204
205 #define NG_BT_ITEMQ_DRAIN(q)                            \
206         do {                                            \
207                 struct ng_item  *i = NULL;              \
208                                                         \
209                 for (;;) {                              \
210                         NG_BT_ITEMQ_DEQUEUE((q), i);    \
211                         if (i == NULL)                  \
212                                 break;                  \
213                                                         \
214                         NG_FREE_ITEM(i);                \
215                 }                                       \
216         } while (0)
217
218 /*
219  * Get Bluetooth stack sysctl globals
220  */
221
222 u_int32_t       bluetooth_hci_command_timeout   (void);
223 u_int32_t       bluetooth_hci_connect_timeout   (void);
224 u_int32_t       bluetooth_hci_max_neighbor_age  (void);
225 u_int32_t       bluetooth_l2cap_rtx_timeout     (void);
226 u_int32_t       bluetooth_l2cap_ertx_timeout    (void);
227 u_int32_t      bluetooth_sco_rtx_timeout       (void);
228
229 #define BDADDR_BREDR 0
230 #define BDADDR_LE_PUBLIC 1
231 #define BDADDR_LE_RANDOM 2
232
233 #endif /* _NETGRAPH_BLUETOOTH_H_ */
234