Merge branch 'overlayfs-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mszer...
[linux-2.6-block.git] / drivers / isdn / hardware / eicon / debuglib.c
CommitLineData
1da177e4
LT
1
2/*
3 *
475be4d8 4 Copyright (c) Eicon Networks, 2002.
1da177e4 5 *
475be4d8
JP
6 This source file is supplied for the use with
7 Eicon Networks range of DIVA Server Adapters.
1da177e4 8 *
475be4d8 9 Eicon File Revision : 2.1
1da177e4 10 *
475be4d8
JP
11 This program is free software; you can redistribute it and/or modify
12 it under the terms of the GNU General Public License as published by
13 the Free Software Foundation; either version 2, or (at your option)
14 any later version.
1da177e4 15 *
475be4d8
JP
16 This program is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY OF ANY KIND WHATSOEVER INCLUDING ANY
18 implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
19 See the GNU General Public License for more details.
1da177e4 20 *
475be4d8
JP
21 You should have received a copy of the GNU General Public License
22 along with this program; if not, write to the Free Software
23 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
1da177e4
LT
24 *
25 */
26
27#include "debuglib.h"
28
29#ifdef DIVA_NO_DEBUGLIB
30static DIVA_DI_PRINTF dprintf;
31#else /* DIVA_NO_DEBUGLIB */
475be4d8 32
1da177e4
LT
33_DbgHandle_ myDriverDebugHandle = { 0 /*!Registered*/, DBG_HANDLE_VERSION };
34DIVA_DI_PRINTF dprintf = no_printf;
35/*****************************************************************************/
475be4d8
JP
36#define DBG_FUNC(name) \
37 void \
38 myDbgPrint_##name(char *format, ...) \
39 { va_list ap; \
40 if (myDriverDebugHandle.dbg_prt) \
41 { va_start(ap, format); \
42 (myDriverDebugHandle.dbg_prt) \
43 (myDriverDebugHandle.id, DLI_##name, format, ap); \
44 va_end(ap); \
45 } }
1da177e4
LT
46DBG_FUNC(LOG)
47DBG_FUNC(FTL)
48DBG_FUNC(ERR)
49DBG_FUNC(TRC)
50DBG_FUNC(MXLOG)
51DBG_FUNC(FTL_MXLOG)
475be4d8
JP
52void
53myDbgPrint_EVL(long msgID, ...)
54{ va_list ap;
55 if (myDriverDebugHandle.dbg_ev)
56 { va_start(ap, msgID);
57 (myDriverDebugHandle.dbg_ev)
58 (myDriverDebugHandle.id, (unsigned long)msgID, ap);
59 va_end(ap);
60 } }
1da177e4
LT
61DBG_FUNC(REG)
62DBG_FUNC(MEM)
63DBG_FUNC(SPL)
64DBG_FUNC(IRP)
65DBG_FUNC(TIM)
66DBG_FUNC(BLK)
67DBG_FUNC(TAPI)
68DBG_FUNC(NDIS)
69DBG_FUNC(CONN)
70DBG_FUNC(STAT)
71DBG_FUNC(SEND)
72DBG_FUNC(RECV)
73DBG_FUNC(PRV0)
74DBG_FUNC(PRV1)
75DBG_FUNC(PRV2)
76DBG_FUNC(PRV3)
77/*****************************************************************************/
78int
475be4d8 79DbgRegister(char *drvName, char *drvTag, unsigned long dbgMask)
1da177e4 80{
475be4d8 81 int len;
1da177e4
LT
82/*
83 * deregister (if already registered) and zero out myDriverDebugHandle
84 */
475be4d8 85 DbgDeregister();
1da177e4
LT
86/*
87 * initialize the debug handle
88 */
475be4d8
JP
89 myDriverDebugHandle.Version = DBG_HANDLE_VERSION;
90 myDriverDebugHandle.id = -1;
91 myDriverDebugHandle.dbgMask = dbgMask | (DL_EVL | DL_FTL | DL_LOG);
92 len = strlen(drvName);
93 memcpy(myDriverDebugHandle.drvName, drvName,
94 (len < sizeof(myDriverDebugHandle.drvName)) ?
95 len : sizeof(myDriverDebugHandle.drvName) - 1);
96 len = strlen(drvTag);
97 memcpy(myDriverDebugHandle.drvTag, drvTag,
98 (len < sizeof(myDriverDebugHandle.drvTag)) ?
99 len : sizeof(myDriverDebugHandle.drvTag) - 1);
1da177e4
LT
100/*
101 * Try to register debugging via old (and only) interface
102 */
475be4d8
JP
103 dprintf("\000\377", &myDriverDebugHandle);
104 if (myDriverDebugHandle.dbg_prt)
105 {
106 return (1);
107 }
1da177e4 108/*
e1b8513d 109 * Check if we registered with an old maint driver (see debuglib.h)
1da177e4 110 */
475be4d8
JP
111 if (myDriverDebugHandle.dbg_end != NULL
112 /* location of 'dbg_prt' in _OldDbgHandle_ struct */
113 && (myDriverDebugHandle.regTime.LowPart ||
114 myDriverDebugHandle.regTime.HighPart))
115 /* same location as in _OldDbgHandle_ struct */
116 {
117 dprintf("%s: Cannot log to old maint driver !", drvName);
118 myDriverDebugHandle.dbg_end =
119 ((_OldDbgHandle_ *)&myDriverDebugHandle)->dbg_end;
120 DbgDeregister();
121 }
122 return (0);
1da177e4
LT
123}
124/*****************************************************************************/
125void
475be4d8 126DbgSetLevel(unsigned long dbgMask)
1da177e4 127{
475be4d8 128 myDriverDebugHandle.dbgMask = dbgMask | (DL_EVL | DL_FTL | DL_LOG);
1da177e4
LT
129}
130/*****************************************************************************/
131void
475be4d8 132DbgDeregister(void)
1da177e4 133{
475be4d8
JP
134 if (myDriverDebugHandle.dbg_end)
135 {
136 (myDriverDebugHandle.dbg_end)(&myDriverDebugHandle);
137 }
138 memset(&myDriverDebugHandle, 0, sizeof(myDriverDebugHandle));
1da177e4 139}
475be4d8
JP
140void xdi_dbg_xlog(char *x, ...) {
141 va_list ap;
142 va_start(ap, x);
143 if (myDriverDebugHandle.dbg_end &&
144 (myDriverDebugHandle.dbg_irq || myDriverDebugHandle.dbg_old) &&
145 (myDriverDebugHandle.dbgMask & DL_STAT)) {
146 if (myDriverDebugHandle.dbg_irq) {
147 (*(myDriverDebugHandle.dbg_irq))(myDriverDebugHandle.id,
148 (x[0] != 0) ? DLI_TRC : DLI_XLOG, x, ap);
149 } else {
150 (*(myDriverDebugHandle.dbg_old))(myDriverDebugHandle.id, x, ap);
151 }
152 }
153 va_end(ap);
1da177e4
LT
154}
155/*****************************************************************************/
156#endif /* DIVA_NO_DEBUGLIB */