You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
156 lines
4.4 KiB
156 lines
4.4 KiB
|
|
/* |
|
* |
|
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 */
|
|
|