/* * Copyright (c) Eicon Networks, 2002. * This source file is supplied for the use with Eicon Networks range of DIVA Server Adapters. * Eicon File Revision : 2.1 * This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY OF ANY KIND WHATSOEVER INCLUDING ANY implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. * You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */ #include "debuglib.h" #ifdef DIVA_NO_DEBUGLIB static DIVA_DI_PRINTF dprintf; #else /* DIVA_NO_DEBUGLIB */ _DbgHandle_ myDriverDebugHandle = { 0 /*!Registered*/, DBG_HANDLE_VERSION }; DIVA_DI_PRINTF dprintf = no_printf; /*****************************************************************************/ #define DBG_FUNC(name) \ void \ myDbgPrint_##name(char *format, ...) \ { va_list ap; \ if (myDriverDebugHandle.dbg_prt) \ { va_start(ap, format); \ (myDriverDebugHandle.dbg_prt) \ (myDriverDebugHandle.id, DLI_##name, format, ap); \ va_end(ap); \ } } DBG_FUNC(LOG) DBG_FUNC(FTL) DBG_FUNC(ERR) DBG_FUNC(TRC) DBG_FUNC(MXLOG) DBG_FUNC(FTL_MXLOG) void myDbgPrint_EVL(long msgID, ...) { va_list ap; if (myDriverDebugHandle.dbg_ev) { va_start(ap, msgID); (myDriverDebugHandle.dbg_ev) (myDriverDebugHandle.id, (unsigned long)msgID, ap); va_end(ap); } } DBG_FUNC(REG) DBG_FUNC(MEM) DBG_FUNC(SPL) DBG_FUNC(IRP) DBG_FUNC(TIM) DBG_FUNC(BLK) DBG_FUNC(TAPI) DBG_FUNC(NDIS) DBG_FUNC(CONN) DBG_FUNC(STAT) DBG_FUNC(SEND) DBG_FUNC(RECV) DBG_FUNC(PRV0) DBG_FUNC(PRV1) DBG_FUNC(PRV2) DBG_FUNC(PRV3) /*****************************************************************************/ int DbgRegister(char *drvName, char *drvTag, unsigned long dbgMask) { int len; /* * deregister (if already registered) and zero out myDriverDebugHandle */ DbgDeregister(); /* * initialize the debug handle */ myDriverDebugHandle.Version = DBG_HANDLE_VERSION; myDriverDebugHandle.id = -1; myDriverDebugHandle.dbgMask = dbgMask | (DL_EVL | DL_FTL | DL_LOG); len = strlen(drvName); memcpy(myDriverDebugHandle.drvName, drvName, (len < sizeof(myDriverDebugHandle.drvName)) ? len : sizeof(myDriverDebugHandle.drvName) - 1); len = strlen(drvTag); memcpy(myDriverDebugHandle.drvTag, drvTag, (len < sizeof(myDriverDebugHandle.drvTag)) ? len : sizeof(myDriverDebugHandle.drvTag) - 1); /* * Try to register debugging via old (and only) interface */ dprintf("\000\377", &myDriverDebugHandle); if (myDriverDebugHandle.dbg_prt) { return (1); } /* * Check if we registered with an old maint driver (see debuglib.h) */ if (myDriverDebugHandle.dbg_end != NULL /* location of 'dbg_prt' in _OldDbgHandle_ struct */ && (myDriverDebugHandle.regTime.LowPart || myDriverDebugHandle.regTime.HighPart)) /* same location as in _OldDbgHandle_ struct */ { dprintf("%s: Cannot log to old maint driver !", drvName); myDriverDebugHandle.dbg_end = ((_OldDbgHandle_ *)&myDriverDebugHandle)->dbg_end; DbgDeregister(); } return (0); } /*****************************************************************************/ void DbgSetLevel(unsigned long dbgMask) { myDriverDebugHandle.dbgMask = dbgMask | (DL_EVL | DL_FTL | DL_LOG); } /*****************************************************************************/ void DbgDeregister(void) { if (myDriverDebugHandle.dbg_end) { (myDriverDebugHandle.dbg_end)(&myDriverDebugHandle); } memset(&myDriverDebugHandle, 0, sizeof(myDriverDebugHandle)); } void xdi_dbg_xlog(char *x, ...) { va_list ap; va_start(ap, x); if (myDriverDebugHandle.dbg_end && (myDriverDebugHandle.dbg_irq || myDriverDebugHandle.dbg_old) && (myDriverDebugHandle.dbgMask & DL_STAT)) { if (myDriverDebugHandle.dbg_irq) { (*(myDriverDebugHandle.dbg_irq))(myDriverDebugHandle.id, (x[0] != 0) ? DLI_TRC : DLI_XLOG, x, ap); } else { (*(myDriverDebugHandle.dbg_old))(myDriverDebugHandle.id, x, ap); } } va_end(ap); } /*****************************************************************************/ #endif /* DIVA_NO_DEBUGLIB */