11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
4475be4d85a274d0961593db41cf85689db1d583cJoe Perches Copyright (c) Eicon Networks, 2002.
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
6475be4d85a274d0961593db41cf85689db1d583cJoe Perches This source file is supplied for the use with
7475be4d85a274d0961593db41cf85689db1d583cJoe Perches Eicon Networks range of DIVA Server Adapters.
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
9475be4d85a274d0961593db41cf85689db1d583cJoe Perches Eicon File Revision :    2.1
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
11475be4d85a274d0961593db41cf85689db1d583cJoe Perches This program is free software; you can redistribute it and/or modify
12475be4d85a274d0961593db41cf85689db1d583cJoe Perches it under the terms of the GNU General Public License as published by
13475be4d85a274d0961593db41cf85689db1d583cJoe Perches the Free Software Foundation; either version 2, or (at your option)
14475be4d85a274d0961593db41cf85689db1d583cJoe Perches any later version.
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
16475be4d85a274d0961593db41cf85689db1d583cJoe Perches This program is distributed in the hope that it will be useful,
17475be4d85a274d0961593db41cf85689db1d583cJoe Perches but WITHOUT ANY WARRANTY OF ANY KIND WHATSOEVER INCLUDING ANY
18475be4d85a274d0961593db41cf85689db1d583cJoe Perches implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
19475be4d85a274d0961593db41cf85689db1d583cJoe Perches See the GNU General Public License for more details.
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
21475be4d85a274d0961593db41cf85689db1d583cJoe Perches You should have received a copy of the GNU General Public License
22475be4d85a274d0961593db41cf85689db1d583cJoe Perches along with this program; if not, write to the Free Software
23475be4d85a274d0961593db41cf85689db1d583cJoe Perches Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include "debuglib.h"
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef DIVA_NO_DEBUGLIB
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic DIVA_DI_PRINTF dprintf;
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else /* DIVA_NO_DEBUGLIB */
32475be4d85a274d0961593db41cf85689db1d583cJoe Perches
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds_DbgHandle_ myDriverDebugHandle = { 0 /*!Registered*/, DBG_HANDLE_VERSION };
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDIVA_DI_PRINTF dprintf = no_printf;
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*****************************************************************************/
36475be4d85a274d0961593db41cf85689db1d583cJoe Perches#define DBG_FUNC(name)							\
37475be4d85a274d0961593db41cf85689db1d583cJoe Perches	void								\
38475be4d85a274d0961593db41cf85689db1d583cJoe Perches	myDbgPrint_##name(char *format, ...)				\
39475be4d85a274d0961593db41cf85689db1d583cJoe Perches	{ va_list ap;							\
40475be4d85a274d0961593db41cf85689db1d583cJoe Perches		if (myDriverDebugHandle.dbg_prt)			\
41475be4d85a274d0961593db41cf85689db1d583cJoe Perches		{ va_start(ap, format);				\
42475be4d85a274d0961593db41cf85689db1d583cJoe Perches			(myDriverDebugHandle.dbg_prt)			\
43475be4d85a274d0961593db41cf85689db1d583cJoe Perches				(myDriverDebugHandle.id, DLI_##name, format, ap); \
44475be4d85a274d0961593db41cf85689db1d583cJoe Perches			va_end(ap);					\
45475be4d85a274d0961593db41cf85689db1d583cJoe Perches		} }
461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(LOG)
471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(FTL)
481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(ERR)
491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(TRC)
501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(MXLOG)
511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(FTL_MXLOG)
52475be4d85a274d0961593db41cf85689db1d583cJoe Perchesvoid
53475be4d85a274d0961593db41cf85689db1d583cJoe PerchesmyDbgPrint_EVL(long msgID, ...)
54475be4d85a274d0961593db41cf85689db1d583cJoe Perches{ va_list ap;
55475be4d85a274d0961593db41cf85689db1d583cJoe Perches	if (myDriverDebugHandle.dbg_ev)
56475be4d85a274d0961593db41cf85689db1d583cJoe Perches	{ va_start(ap, msgID);
57475be4d85a274d0961593db41cf85689db1d583cJoe Perches		(myDriverDebugHandle.dbg_ev)
58475be4d85a274d0961593db41cf85689db1d583cJoe Perches			(myDriverDebugHandle.id, (unsigned long)msgID, ap);
59475be4d85a274d0961593db41cf85689db1d583cJoe Perches		va_end(ap);
60475be4d85a274d0961593db41cf85689db1d583cJoe Perches	} }
611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(REG)
621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(MEM)
631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(SPL)
641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(IRP)
651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(TIM)
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(BLK)
671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(TAPI)
681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(NDIS)
691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(CONN)
701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(STAT)
711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(SEND)
721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(RECV)
731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(PRV0)
741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(PRV1)
751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(PRV2)
761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(PRV3)
771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*****************************************************************************/
781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsint
79475be4d85a274d0961593db41cf85689db1d583cJoe PerchesDbgRegister(char *drvName, char *drvTag, unsigned long dbgMask)
801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
81475be4d85a274d0961593db41cf85689db1d583cJoe Perches	int len;
821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * deregister (if already registered) and zero out myDriverDebugHandle
841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
85475be4d85a274d0961593db41cf85689db1d583cJoe Perches	DbgDeregister();
861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * initialize the debug handle
881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
89475be4d85a274d0961593db41cf85689db1d583cJoe Perches	myDriverDebugHandle.Version = DBG_HANDLE_VERSION;
90475be4d85a274d0961593db41cf85689db1d583cJoe Perches	myDriverDebugHandle.id  = -1;
91475be4d85a274d0961593db41cf85689db1d583cJoe Perches	myDriverDebugHandle.dbgMask = dbgMask | (DL_EVL | DL_FTL | DL_LOG);
92475be4d85a274d0961593db41cf85689db1d583cJoe Perches	len = strlen(drvName);
93475be4d85a274d0961593db41cf85689db1d583cJoe Perches	memcpy(myDriverDebugHandle.drvName, drvName,
94475be4d85a274d0961593db41cf85689db1d583cJoe Perches	       (len < sizeof(myDriverDebugHandle.drvName)) ?
95475be4d85a274d0961593db41cf85689db1d583cJoe Perches	       len : sizeof(myDriverDebugHandle.drvName) - 1);
96475be4d85a274d0961593db41cf85689db1d583cJoe Perches	len = strlen(drvTag);
97475be4d85a274d0961593db41cf85689db1d583cJoe Perches	memcpy(myDriverDebugHandle.drvTag, drvTag,
98475be4d85a274d0961593db41cf85689db1d583cJoe Perches	       (len < sizeof(myDriverDebugHandle.drvTag)) ?
99475be4d85a274d0961593db41cf85689db1d583cJoe Perches	       len : sizeof(myDriverDebugHandle.drvTag) - 1);
1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Try to register debugging via old (and only) interface
1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
103475be4d85a274d0961593db41cf85689db1d583cJoe Perches	dprintf("\000\377", &myDriverDebugHandle);
104475be4d85a274d0961593db41cf85689db1d583cJoe Perches	if (myDriverDebugHandle.dbg_prt)
105475be4d85a274d0961593db41cf85689db1d583cJoe Perches	{
106475be4d85a274d0961593db41cf85689db1d583cJoe Perches		return (1);
107475be4d85a274d0961593db41cf85689db1d583cJoe Perches	}
1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
109e1b8513d21845fbeb93d6d2c4973db874385059fRobert P. J. Day * Check if we registered with an old maint driver (see debuglib.h)
1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
111475be4d85a274d0961593db41cf85689db1d583cJoe Perches	if (myDriverDebugHandle.dbg_end != NULL
112475be4d85a274d0961593db41cf85689db1d583cJoe Perches	     /* location of 'dbg_prt' in _OldDbgHandle_ struct */
113475be4d85a274d0961593db41cf85689db1d583cJoe Perches	     && (myDriverDebugHandle.regTime.LowPart ||
114475be4d85a274d0961593db41cf85689db1d583cJoe Perches		 myDriverDebugHandle.regTime.HighPart))
115475be4d85a274d0961593db41cf85689db1d583cJoe Perches		/* same location as in _OldDbgHandle_ struct */
116475be4d85a274d0961593db41cf85689db1d583cJoe Perches	{
117475be4d85a274d0961593db41cf85689db1d583cJoe Perches		dprintf("%s: Cannot log to old maint driver !", drvName);
118475be4d85a274d0961593db41cf85689db1d583cJoe Perches		myDriverDebugHandle.dbg_end =
119475be4d85a274d0961593db41cf85689db1d583cJoe Perches			((_OldDbgHandle_ *)&myDriverDebugHandle)->dbg_end;
120475be4d85a274d0961593db41cf85689db1d583cJoe Perches		DbgDeregister();
121475be4d85a274d0961593db41cf85689db1d583cJoe Perches	}
122475be4d85a274d0961593db41cf85689db1d583cJoe Perches	return (0);
1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*****************************************************************************/
1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid
126475be4d85a274d0961593db41cf85689db1d583cJoe PerchesDbgSetLevel(unsigned long dbgMask)
1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
128475be4d85a274d0961593db41cf85689db1d583cJoe Perches	myDriverDebugHandle.dbgMask = dbgMask | (DL_EVL | DL_FTL | DL_LOG);
1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*****************************************************************************/
1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid
132475be4d85a274d0961593db41cf85689db1d583cJoe PerchesDbgDeregister(void)
1331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
134475be4d85a274d0961593db41cf85689db1d583cJoe Perches	if (myDriverDebugHandle.dbg_end)
135475be4d85a274d0961593db41cf85689db1d583cJoe Perches	{
136475be4d85a274d0961593db41cf85689db1d583cJoe Perches		(myDriverDebugHandle.dbg_end)(&myDriverDebugHandle);
137475be4d85a274d0961593db41cf85689db1d583cJoe Perches	}
138475be4d85a274d0961593db41cf85689db1d583cJoe Perches	memset(&myDriverDebugHandle, 0, sizeof(myDriverDebugHandle));
1391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
140475be4d85a274d0961593db41cf85689db1d583cJoe Perchesvoid xdi_dbg_xlog(char *x, ...) {
141475be4d85a274d0961593db41cf85689db1d583cJoe Perches	va_list ap;
142475be4d85a274d0961593db41cf85689db1d583cJoe Perches	va_start(ap, x);
143475be4d85a274d0961593db41cf85689db1d583cJoe Perches	if (myDriverDebugHandle.dbg_end &&
144475be4d85a274d0961593db41cf85689db1d583cJoe Perches	    (myDriverDebugHandle.dbg_irq || myDriverDebugHandle.dbg_old) &&
145475be4d85a274d0961593db41cf85689db1d583cJoe Perches	    (myDriverDebugHandle.dbgMask & DL_STAT)) {
146475be4d85a274d0961593db41cf85689db1d583cJoe Perches		if (myDriverDebugHandle.dbg_irq) {
147475be4d85a274d0961593db41cf85689db1d583cJoe Perches			(*(myDriverDebugHandle.dbg_irq))(myDriverDebugHandle.id,
148475be4d85a274d0961593db41cf85689db1d583cJoe Perches							 (x[0] != 0) ? DLI_TRC : DLI_XLOG, x, ap);
149475be4d85a274d0961593db41cf85689db1d583cJoe Perches		} else {
150475be4d85a274d0961593db41cf85689db1d583cJoe Perches			(*(myDriverDebugHandle.dbg_old))(myDriverDebugHandle.id, x, ap);
151475be4d85a274d0961593db41cf85689db1d583cJoe Perches		}
152475be4d85a274d0961593db41cf85689db1d583cJoe Perches	}
153475be4d85a274d0961593db41cf85689db1d583cJoe Perches	va_end(ap);
1541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
1551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*****************************************************************************/
1561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* DIVA_NO_DEBUGLIB */
157