1 /*
2  * Copyright (c) 1997, 2000 Hellmuth Michaelis. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23  * SUCH DAMAGE.
24  *
25  *---------------------------------------------------------------------------
26  *
27  *	i4b_debug.h - i4b debug header file
28  *	-----------------------------------
29  *
30  *	$Id: i4b_debug.h,v 1.10 2015/09/06 06:01:01 dholland Exp $
31  *
32  * $FreeBSD$
33  *
34  *      last edit-date: [Wed May 31 09:51:34 2000]
35  *
36  *---------------------------------------------------------------------------*/
37 
38 #ifndef _NETISDN_I4B_DEBUG_H_
39 #define _NETISDN_I4B_DEBUG_H_
40 
41 #include <sys/ioccom.h>
42 
43 #if !defined DO_I4B_DEBUG
44 # define DO_I4B_DEBUG 1		/* default = include debugging code */
45 #elif DO_I4B_DEBUG != 0
46 # undef DO_I4B_DEBUG
47 # define DO_I4B_DEBUG 1
48 #endif
49 
50 #undef DO_I4B_MAXDEBUG		/* default = disable ALL debug messages */
51 
52 #if DO_I4B_DEBUG
53 
54 extern unsigned int i4b_l1_debug;
55 extern unsigned int i4b_l2_debug;
56 extern unsigned int i4b_l3_debug;
57 extern unsigned int i4b_l4_debug;
58 
59 #define NDBGL1(bits, fmt, args...)				 	\
60 	if(bits & i4b_l1_debug)						\
61 	{ printf("%s (L1): %s: " fmt "\n", device_xname(sc->sc_dev), __func__ , ##args ); }
62 
63 #define NDBGL2(bits, fmt, args...)				 	\
64 	if(bits & i4b_l2_debug)						\
65 	{ printf("i4b-L2 %s: " fmt "\n", __func__ , ##args ); }
66 
67 #define NDBGL3(bits, fmt, args...)				 	\
68 	if(bits & i4b_l3_debug)						\
69 	{ printf("i4b-L3 %s: " fmt "\n", __func__ , ##args ); }
70 
71 #define NDBGL4(bits, fmt, args...)				 	\
72 	if(bits & i4b_l4_debug)						\
73 	{ printf("i4b-L4 %s: " fmt "\n", __func__ , ##args ); }
74 
75 #else /* !DO_I4B_DEBUG */
76 
77 #define NDBGL1(bits, fmt, args...);
78 #define NDBGL2(bits, fmt, args...);
79 #define NDBGL3(bits, fmt, args...);
80 #define NDBGL4(bits, fmt, args...);
81 
82 #endif /* DO_I4B_DEBUG */
83 
84 /* Layer 1 */
85 
86 #define L1_ERROR	0x0001		/* general error message*/
87 #define L1_PRIM		0x0002		/* interlayer primitives*/
88 #define L1_BCHAN	0x0004		/* B channel action	*/
89 #define L1_H_ERR	0x0008		/* HSCX errors		*/
90 #define L1_H_IRQ	0x0010		/* HSCX IRQ messages	*/
91 #define L1_I_ERR	0x0020		/* ISAC errors		*/
92 #define L1_I_MSG	0x0040		/* ISAC messages	*/
93 #define L1_I_SETUP	0x0080		/* ISAC setup messages	*/
94 #define L1_F_MSG	0x0100		/* FSM messages		*/
95 #define L1_F_ERR	0x0200		/* FSM error messages	*/
96 #define L1_T_MSG	0x0400		/* Timer messages	*/
97 #define L1_T_ERR	0x0800		/* Timer error messages	*/
98 #define L1_H_XFRERR	0x1000		/* HSCX data xfer error */
99 #define L1_I_CICO	0x2000		/* ISAC command in/out	*/
100 #define L1_S_MSG	0x4000		/* silent messages (soft-HDLC)	*/
101 #define L1_S_ERR	0x8000		/* error messages (soft-HDLC)	*/
102 
103 #define L1_DEBUG_MAX	0xffef		/* all messages on except IRQ!	*/
104 #define L1_DEBUG_ERR (L1_S_ERR | L1_H_ERR | L1_I_ERR | L1_F_ERR | L1_T_ERR | L1_ERROR)
105 
106 #ifndef L1_DEBUG_DEFAULT
107 #ifdef DO_I4B_MAXDEBUG
108 #define L1_DEBUG_DEFAULT L1_DEBUG_MAX
109 #else
110 #define L1_DEBUG_DEFAULT L1_DEBUG_ERR
111 #endif
112 #endif
113 
114 /* Layer 2 */
115 
116 #define L2_ERROR	0x0001		/* general error message	*/
117 #define L2_PRIM		0x0002		/* interlayer primitives	*/
118 #define L2_U_MSG	0x0004		/* U frame messages		*/
119 #define L2_U_ERR	0x0008		/* U frame error messages	*/
120 #define L2_S_MSG	0x0010		/* S frame messages		*/
121 #define L2_S_ERR	0x0020		/* S frame error messages	*/
122 #define L2_I_MSG	0x0040		/* I frame messages		*/
123 #define L2_I_ERR	0x0080		/* I frame error messages	*/
124 #define L2_F_MSG	0x0100		/* FSM messages			*/
125 #define L2_F_ERR	0x0200		/* FSM error messages		*/
126 #define L2_T_MSG	0x0400		/* timer messages		*/
127 #define L2_T_ERR	0x0800		/* timer error messages		*/
128 #define L2_TEI_MSG	0x1000		/* TEI messages			*/
129 #define L2_TEI_ERR	0x2000		/* TEI error messages		*/
130 
131 #define L2_DEBUG_MAX	0x3fff		/* all messages on		*/
132 #define L2_DEBUG_ERR (L2_ERROR | L2_I_ERR | L2_F_ERR | L2_T_ERR | L2_S_ERR | L2_TEI_ERR | L2_U_ERR )
133 
134 #ifndef L2_DEBUG_DEFAULT
135 #ifdef DO_I4B_MAXDEBUG
136 #define L2_DEBUG_DEFAULT L2_DEBUG_MAX
137 #else
138 #define L2_DEBUG_DEFAULT L2_DEBUG_ERR
139 #endif
140 #endif
141 
142 /* Layer 3 */
143 
144 #define L3_ERR		0x0001		/* general error message	*/
145 #define L3_MSG		0x0002		/* general message		*/
146 #define L3_F_MSG	0x0004		/* FSM messages			*/
147 #define L3_F_ERR	0x0008		/* FSM error messages		*/
148 #define L3_T_MSG	0x0010		/* timer messages		*/
149 #define L3_T_ERR	0x0020		/* timer error messages		*/
150 #define L3_P_MSG	0x0040		/* protocol messages		*/
151 #define L3_P_ERR	0x0080		/* protocol error messages	*/
152 #define L3_A_MSG	0x0100		/* AOC messages			*/
153 #define L3_A_ERR	0x0200		/* AOC error messages		*/
154 #define L3_PRIM		0x0400		/* messages exchanged		*/
155 
156 #define L3_DEBUG_MAX	0x07ff		/* all messages on	*/
157 #define L3_DEBUG_ERR	(L3_ERR | L3_F_ERR | L3_T_ERR | L3_P_ERR | L3_A_ERR)
158 
159 #ifndef L3_DEBUG_DEFAULT
160 #ifdef DO_I4B_MAXDEBUG
161 #define L3_DEBUG_DEFAULT L3_DEBUG_MAX
162 #else
163 #define L3_DEBUG_DEFAULT L3_DEBUG_ERR
164 #endif
165 #endif
166 
167 /* Layer 4 */
168 
169 #define L4_ERR		0x0001		/* general error message	*/
170 #define L4_MSG		0x0002		/* general message		*/
171 #define L4_TIMO		0x0004		/* b channel idle timeout msgs	*/
172 #define L4_DIALST	0x0008		/* network driver dial states	*/
173 #define L4_IPRDBG	0x0010		/* ipr driver debug messages	*/
174 #define L4_RBCHDBG	0x0020		/* rbch driver debug messages	*/
175 #define L4_ISPDBG	0x0040		/* isp driver debug messages	*/
176 #define L4_TELDBG	0x0080		/* tel driver debug messages	*/
177 #define L4_TINADBG	0x0100		/* tina driver debug messages	*/
178 #define L4_TINAMSG	0x0200		/* tina driver messages		*/
179 #define L4_TINAERR	0x0400		/* tina driver error messages	*/
180 #define L4_INGDBG	0x0800		/* ing driver debug messages	*/
181 #define L4_IAVCDBG	0x1000		/* iavc driver debug messages	*/
182 
183 #define L4_DEBUG_MAX	0x0fff		/* all messages on	*/
184 #define L4_DEBUG_ERR	(L4_ERR | L4_TINADBG |  L4_TINAMSG | L4_TINAERR)
185 
186 #ifndef L4_DEBUG_DEFAULT
187 #ifdef DO_I4B_MAXDEBUG
188 #define L4_DEBUG_DEFAULT L4_DEBUG_MAX
189 #else
190 #define L4_DEBUG_DEFAULT L4_DEBUG_ERR
191 #endif
192 #endif
193 
194 /*---------------------------------------------------------------------------*
195  * 	ioctl via /dev/i4bctl:
196  *	get/set current debug bits settings
197  *---------------------------------------------------------------------------*/
198 
199 typedef struct {
200 	unsigned int	l1;
201 	unsigned int	l2;
202 	unsigned int	l3;
203 	unsigned int	l4;
204 } ctl_debug_t;
205 
206 #define	I4B_CTL_GET_DEBUG	_IOR('C', 0, ctl_debug_t)
207 
208 #define	I4B_CTL_SET_DEBUG	_IOW('C', 1, ctl_debug_t)
209 
210 /*---------------------------------------------------------------------------*
211  *	generic get chipset statistics
212  *---------------------------------------------------------------------------*/
213 
214 /* for the ihfc-driver: structure for HFC-1/S/SP statistics */
215 
216 typedef struct {
217 	int txframes;
218 	int rxframes;
219 	int xdu;
220 	int rdo;
221 	int crc;
222 	int rab;
223 } hfcstat_t;
224 
225 
226 /* for the isic-driver: structure for HSCX statistics */
227 
228 typedef struct {
229 	int unit;	/* controller number */
230 	int chan;	/* channel number */
231 	int vfr;
232 	int rdo;
233 	int crc;
234 	int rab;
235 	int xdu;
236 	int rfo;
237 } hscxstat_t;
238 
239 /* generic statistics structure */
240 
241 struct chipstat {
242 	int driver_type;		/* type, L1DRVR_XXXX		*/
243 	int driver_unit;		/* the unit number		*/
244 	int driver_bchannel;		/* the B-channel		*/
245 	union stats {			/* union for all drivers	*/
246 		hfcstat_t  hfcstat;	/* for ihfc driver, L1DRVR_IHFC	*/
247 		hscxstat_t hscxstat;	/* for isic driver, L1DRVR_ISIC	*/
248 	} stats;
249 };
250 
251 /* get statistics */
252 
253 #define	I4B_CTL_GET_CHIPSTAT	_IOWR('C', 2, struct chipstat)
254 
255 /* clear statistics */
256 
257 #define	I4B_CTL_CLR_CHIPSTAT	_IOW('C', 3, struct chipstat)
258 
259 /*---------------------------------------------------------------------------*
260  *	get LAPD/Q.921 statistics
261  *---------------------------------------------------------------------------*/
262 typedef struct {
263 
264 	/* transmit */
265 
266 	u_long	tx_i;		/* I 	*/
267 	u_long	tx_rr;		/* RR	*/
268 	u_long	tx_rnr;		/* RNR 	*/
269 	u_long	tx_rej;		/* REJ	*/
270 	u_long	tx_sabme;	/* SABME*/
271 	u_long	tx_dm;		/* DM	*/
272 	u_long	tx_disc;	/* DISC */
273 	u_long	tx_ua;		/* UA	*/
274 	u_long	tx_frmr;	/* FRMR	*/
275 	u_long	tx_tei;		/* TEI	*/
276 
277 	/* receive */
278 
279 	u_long	rx_i;		/* I    */
280 	u_long	rx_rr;		/* RR   */
281 	u_long	rx_rnr;		/* RNR  */
282 	u_long	rx_rej;		/* REJ  */
283 	u_long	rx_sabme;	/* SABME*/
284 	u_long	rx_tei;		/* TEI	*/
285 	u_long	rx_ui;		/* UI	*/
286 	u_long	rx_disc;	/* DISC */
287 	u_long	rx_xid;		/* XID	*/
288 	u_long	rx_dm;		/* DM	*/
289 	u_long	rx_ua;		/* UA	*/
290 	u_long	rx_frmr;	/* FRMR	*/
291 
292 	/* errors */
293 
294 	u_long	err_rx_len;	/* incorrect length */
295 	u_long	err_rx_badf;	/* bad frame type */
296 	u_long	err_rx_bads;	/* bad s frame */
297 	u_long	err_rx_badu;	/* bad u frame */
298 	u_long	err_rx_badui;	/* bad ui frame */
299 } lapdstat_t;
300 
301 typedef struct {
302 	int unit;
303 	lapdstat_t lapdstat;
304 } l2stat_t;
305 
306 #define	I4B_CTL_GET_LAPDSTAT	_IOWR('C', 4, l2stat_t)
307 
308 #define	I4B_CTL_CLR_LAPDSTAT	_IOW('C', 5, int)
309 
310 #endif /* !_NETISDN_I4B_DEUBG_H_ */
311 /* EOF */
312