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