157 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			157 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
 | |
| /*
 | |
|  *
 | |
|   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 */
 |