summaryrefslogtreecommitdiffstats
path: root/drivers/isdn/hardware/eicon/debuglib.c
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-06 01:02:30 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-06 01:02:30 +0000
commit76cb841cb886eef6b3bee341a2266c76578724ad (patch)
treef5892e5ba6cc11949952a6ce4ecbe6d516d6ce58 /drivers/isdn/hardware/eicon/debuglib.c
parentInitial commit. (diff)
downloadlinux-upstream.tar.xz
linux-upstream.zip
Adding upstream version 4.19.249.upstream/4.19.249upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'drivers/isdn/hardware/eicon/debuglib.c')
-rw-r--r--drivers/isdn/hardware/eicon/debuglib.c156
1 files changed, 156 insertions, 0 deletions
diff --git a/drivers/isdn/hardware/eicon/debuglib.c b/drivers/isdn/hardware/eicon/debuglib.c
new file mode 100644
index 000000000..d5b1092a5
--- /dev/null
+++ b/drivers/isdn/hardware/eicon/debuglib.c
@@ -0,0 +1,156 @@
+
+/*
+ *
+ 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 */