11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 4475be4d85a274d0961593db41cf85689db1d583cJoe Perches Copyright (c) Eicon Networks, 2002. 51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 6475be4d85a274d0961593db41cf85689db1d583cJoe Perches This source file is supplied for the use with 7475be4d85a274d0961593db41cf85689db1d583cJoe Perches Eicon Networks range of DIVA Server Adapters. 81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 9475be4d85a274d0961593db41cf85689db1d583cJoe Perches Eicon File Revision : 2.1 101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 11475be4d85a274d0961593db41cf85689db1d583cJoe Perches This program is free software; you can redistribute it and/or modify 12475be4d85a274d0961593db41cf85689db1d583cJoe Perches it under the terms of the GNU General Public License as published by 13475be4d85a274d0961593db41cf85689db1d583cJoe Perches the Free Software Foundation; either version 2, or (at your option) 14475be4d85a274d0961593db41cf85689db1d583cJoe Perches any later version. 151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 16475be4d85a274d0961593db41cf85689db1d583cJoe Perches This program is distributed in the hope that it will be useful, 17475be4d85a274d0961593db41cf85689db1d583cJoe Perches but WITHOUT ANY WARRANTY OF ANY KIND WHATSOEVER INCLUDING ANY 18475be4d85a274d0961593db41cf85689db1d583cJoe Perches implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 19475be4d85a274d0961593db41cf85689db1d583cJoe Perches See the GNU General Public License for more details. 201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 21475be4d85a274d0961593db41cf85689db1d583cJoe Perches You should have received a copy of the GNU General Public License 22475be4d85a274d0961593db41cf85689db1d583cJoe Perches along with this program; if not, write to the Free Software 23475be4d85a274d0961593db41cf85689db1d583cJoe Perches Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include "debuglib.h" 281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef DIVA_NO_DEBUGLIB 301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic DIVA_DI_PRINTF dprintf; 311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else /* DIVA_NO_DEBUGLIB */ 32475be4d85a274d0961593db41cf85689db1d583cJoe Perches 331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds_DbgHandle_ myDriverDebugHandle = { 0 /*!Registered*/, DBG_HANDLE_VERSION }; 341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDIVA_DI_PRINTF dprintf = no_printf; 351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*****************************************************************************/ 36475be4d85a274d0961593db41cf85689db1d583cJoe Perches#define DBG_FUNC(name) \ 37475be4d85a274d0961593db41cf85689db1d583cJoe Perches void \ 38475be4d85a274d0961593db41cf85689db1d583cJoe Perches myDbgPrint_##name(char *format, ...) \ 39475be4d85a274d0961593db41cf85689db1d583cJoe Perches { va_list ap; \ 40475be4d85a274d0961593db41cf85689db1d583cJoe Perches if (myDriverDebugHandle.dbg_prt) \ 41475be4d85a274d0961593db41cf85689db1d583cJoe Perches { va_start(ap, format); \ 42475be4d85a274d0961593db41cf85689db1d583cJoe Perches (myDriverDebugHandle.dbg_prt) \ 43475be4d85a274d0961593db41cf85689db1d583cJoe Perches (myDriverDebugHandle.id, DLI_##name, format, ap); \ 44475be4d85a274d0961593db41cf85689db1d583cJoe Perches va_end(ap); \ 45475be4d85a274d0961593db41cf85689db1d583cJoe Perches } } 461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(LOG) 471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(FTL) 481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(ERR) 491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(TRC) 501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(MXLOG) 511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(FTL_MXLOG) 52475be4d85a274d0961593db41cf85689db1d583cJoe Perchesvoid 53475be4d85a274d0961593db41cf85689db1d583cJoe PerchesmyDbgPrint_EVL(long msgID, ...) 54475be4d85a274d0961593db41cf85689db1d583cJoe Perches{ va_list ap; 55475be4d85a274d0961593db41cf85689db1d583cJoe Perches if (myDriverDebugHandle.dbg_ev) 56475be4d85a274d0961593db41cf85689db1d583cJoe Perches { va_start(ap, msgID); 57475be4d85a274d0961593db41cf85689db1d583cJoe Perches (myDriverDebugHandle.dbg_ev) 58475be4d85a274d0961593db41cf85689db1d583cJoe Perches (myDriverDebugHandle.id, (unsigned long)msgID, ap); 59475be4d85a274d0961593db41cf85689db1d583cJoe Perches va_end(ap); 60475be4d85a274d0961593db41cf85689db1d583cJoe Perches } } 611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(REG) 621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(MEM) 631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(SPL) 641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(IRP) 651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(TIM) 661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(BLK) 671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(TAPI) 681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(NDIS) 691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(CONN) 701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(STAT) 711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(SEND) 721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(RECV) 731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(PRV0) 741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(PRV1) 751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(PRV2) 761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsDBG_FUNC(PRV3) 771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*****************************************************************************/ 781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsint 79475be4d85a274d0961593db41cf85689db1d583cJoe PerchesDbgRegister(char *drvName, char *drvTag, unsigned long dbgMask) 801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 81475be4d85a274d0961593db41cf85689db1d583cJoe Perches int len; 821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * deregister (if already registered) and zero out myDriverDebugHandle 841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 85475be4d85a274d0961593db41cf85689db1d583cJoe Perches DbgDeregister(); 861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * initialize the debug handle 881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 89475be4d85a274d0961593db41cf85689db1d583cJoe Perches myDriverDebugHandle.Version = DBG_HANDLE_VERSION; 90475be4d85a274d0961593db41cf85689db1d583cJoe Perches myDriverDebugHandle.id = -1; 91475be4d85a274d0961593db41cf85689db1d583cJoe Perches myDriverDebugHandle.dbgMask = dbgMask | (DL_EVL | DL_FTL | DL_LOG); 92475be4d85a274d0961593db41cf85689db1d583cJoe Perches len = strlen(drvName); 93475be4d85a274d0961593db41cf85689db1d583cJoe Perches memcpy(myDriverDebugHandle.drvName, drvName, 94475be4d85a274d0961593db41cf85689db1d583cJoe Perches (len < sizeof(myDriverDebugHandle.drvName)) ? 95475be4d85a274d0961593db41cf85689db1d583cJoe Perches len : sizeof(myDriverDebugHandle.drvName) - 1); 96475be4d85a274d0961593db41cf85689db1d583cJoe Perches len = strlen(drvTag); 97475be4d85a274d0961593db41cf85689db1d583cJoe Perches memcpy(myDriverDebugHandle.drvTag, drvTag, 98475be4d85a274d0961593db41cf85689db1d583cJoe Perches (len < sizeof(myDriverDebugHandle.drvTag)) ? 99475be4d85a274d0961593db41cf85689db1d583cJoe Perches len : sizeof(myDriverDebugHandle.drvTag) - 1); 1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Try to register debugging via old (and only) interface 1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 103475be4d85a274d0961593db41cf85689db1d583cJoe Perches dprintf("\000\377", &myDriverDebugHandle); 104475be4d85a274d0961593db41cf85689db1d583cJoe Perches if (myDriverDebugHandle.dbg_prt) 105475be4d85a274d0961593db41cf85689db1d583cJoe Perches { 106475be4d85a274d0961593db41cf85689db1d583cJoe Perches return (1); 107475be4d85a274d0961593db41cf85689db1d583cJoe Perches } 1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 109e1b8513d21845fbeb93d6d2c4973db874385059fRobert P. J. Day * Check if we registered with an old maint driver (see debuglib.h) 1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 111475be4d85a274d0961593db41cf85689db1d583cJoe Perches if (myDriverDebugHandle.dbg_end != NULL 112475be4d85a274d0961593db41cf85689db1d583cJoe Perches /* location of 'dbg_prt' in _OldDbgHandle_ struct */ 113475be4d85a274d0961593db41cf85689db1d583cJoe Perches && (myDriverDebugHandle.regTime.LowPart || 114475be4d85a274d0961593db41cf85689db1d583cJoe Perches myDriverDebugHandle.regTime.HighPart)) 115475be4d85a274d0961593db41cf85689db1d583cJoe Perches /* same location as in _OldDbgHandle_ struct */ 116475be4d85a274d0961593db41cf85689db1d583cJoe Perches { 117475be4d85a274d0961593db41cf85689db1d583cJoe Perches dprintf("%s: Cannot log to old maint driver !", drvName); 118475be4d85a274d0961593db41cf85689db1d583cJoe Perches myDriverDebugHandle.dbg_end = 119475be4d85a274d0961593db41cf85689db1d583cJoe Perches ((_OldDbgHandle_ *)&myDriverDebugHandle)->dbg_end; 120475be4d85a274d0961593db41cf85689db1d583cJoe Perches DbgDeregister(); 121475be4d85a274d0961593db41cf85689db1d583cJoe Perches } 122475be4d85a274d0961593db41cf85689db1d583cJoe Perches return (0); 1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*****************************************************************************/ 1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid 126475be4d85a274d0961593db41cf85689db1d583cJoe PerchesDbgSetLevel(unsigned long dbgMask) 1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 128475be4d85a274d0961593db41cf85689db1d583cJoe Perches myDriverDebugHandle.dbgMask = dbgMask | (DL_EVL | DL_FTL | DL_LOG); 1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*****************************************************************************/ 1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid 132475be4d85a274d0961593db41cf85689db1d583cJoe PerchesDbgDeregister(void) 1331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 134475be4d85a274d0961593db41cf85689db1d583cJoe Perches if (myDriverDebugHandle.dbg_end) 135475be4d85a274d0961593db41cf85689db1d583cJoe Perches { 136475be4d85a274d0961593db41cf85689db1d583cJoe Perches (myDriverDebugHandle.dbg_end)(&myDriverDebugHandle); 137475be4d85a274d0961593db41cf85689db1d583cJoe Perches } 138475be4d85a274d0961593db41cf85689db1d583cJoe Perches memset(&myDriverDebugHandle, 0, sizeof(myDriverDebugHandle)); 1391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 140475be4d85a274d0961593db41cf85689db1d583cJoe Perchesvoid xdi_dbg_xlog(char *x, ...) { 141475be4d85a274d0961593db41cf85689db1d583cJoe Perches va_list ap; 142475be4d85a274d0961593db41cf85689db1d583cJoe Perches va_start(ap, x); 143475be4d85a274d0961593db41cf85689db1d583cJoe Perches if (myDriverDebugHandle.dbg_end && 144475be4d85a274d0961593db41cf85689db1d583cJoe Perches (myDriverDebugHandle.dbg_irq || myDriverDebugHandle.dbg_old) && 145475be4d85a274d0961593db41cf85689db1d583cJoe Perches (myDriverDebugHandle.dbgMask & DL_STAT)) { 146475be4d85a274d0961593db41cf85689db1d583cJoe Perches if (myDriverDebugHandle.dbg_irq) { 147475be4d85a274d0961593db41cf85689db1d583cJoe Perches (*(myDriverDebugHandle.dbg_irq))(myDriverDebugHandle.id, 148475be4d85a274d0961593db41cf85689db1d583cJoe Perches (x[0] != 0) ? DLI_TRC : DLI_XLOG, x, ap); 149475be4d85a274d0961593db41cf85689db1d583cJoe Perches } else { 150475be4d85a274d0961593db41cf85689db1d583cJoe Perches (*(myDriverDebugHandle.dbg_old))(myDriverDebugHandle.id, x, ap); 151475be4d85a274d0961593db41cf85689db1d583cJoe Perches } 152475be4d85a274d0961593db41cf85689db1d583cJoe Perches } 153475be4d85a274d0961593db41cf85689db1d583cJoe Perches va_end(ap); 1541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 1551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*****************************************************************************/ 1561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* DIVA_NO_DEBUGLIB */ 157