|  | 
 | /* | 
 |  * | 
 |   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 whith 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 */ |