diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-10-17 09:50:12 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-10-17 09:50:12 -0700 |
commit | 26e9a397774a0e94efbb8a0bf4a952c28d808cab (patch) | |
tree | fee2211b32a30c71bd22543acb791feeebd91b35 /drivers/staging/sxg/sxgdbg.h | |
parent | bdbf0ac7e187b2b757216e653e64f8b808b9077e (diff) | |
parent | 99e06e372378c5833a0c60274b645dfb2e4a4b08 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging-2.6: (25 commits)
staging: at76_usb wireless driver
Staging: workaround build system bug
Staging: Lindent sxg.c
Staging: SLICOSS: Call pci_release_regions at driver exit
Staging: SLICOSS: Fix remaining type names
Staging: SLICOSS: Fix warnings due to static usage
Staging: SLICOSS: lots of checkpatch fixes
Staging: go7007 v4l fixes
Staging: Fix gcc warnings in sxg
Staging: add echo cancelation module
Staging: add wlan-ng prism2 usb driver
Staging: add w35und wifi driver
Staging: USB/IP: add host driver
Staging: USB/IP: add client driver
Staging: USB/IP: add common functions needed
Staging: add the go7007 video driver
Staging: add me4000 pci data collection driver
Staging: add me4000 firmware files
Staging: add sxg network driver
Staging: add Alacritech slicoss network driver
...
Fixed up conflicts due to taint flags changes and MAINTAINERS cleanup in
MAINTAINERS, include/linux/kernel.h and kernel/panic.c.
Diffstat (limited to 'drivers/staging/sxg/sxgdbg.h')
-rw-r--r-- | drivers/staging/sxg/sxgdbg.h | 190 |
1 files changed, 190 insertions, 0 deletions
diff --git a/drivers/staging/sxg/sxgdbg.h b/drivers/staging/sxg/sxgdbg.h new file mode 100644 index 00000000000..cfb6c7c77a9 --- /dev/null +++ b/drivers/staging/sxg/sxgdbg.h @@ -0,0 +1,190 @@ +/************************************************************************** + * + * Copyright © 2000-2008 Alacritech, Inc. All rights reserved. + * + * $Id: sxgdbg.h,v 1.1 2008/06/27 12:49:28 mook Exp $ + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY ALACRITECH, INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ALACRITECH, INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation + * are those of the authors and should not be interpreted as representing + * official policies, either expressed or implied, of Alacritech, Inc. + * + **************************************************************************/ + +/* + * FILENAME: sxgdbg.h + * + * All debug and assertion-based definitions and macros are included + * in this file for the SXGOSS driver. + */ +#ifndef _SXG_DEBUG_H_ +#define _SXG_DEBUG_H_ + +#define ATKDBG 1 +#define ATK_TRACE_ENABLED 1 + +#define DBG_ERROR(n, args...) printk(KERN_EMERG n, ##args) + +#ifdef ASSERT +#undef ASSERT +#endif + +#ifdef SXG_ASSERT_ENABLED +#ifndef ASSERT +#define ASSERT(a) \ + { \ + if (!(a)) { \ + DBG_ERROR("ASSERT() Failure: file %s, function %s line %d\n",\ + __FILE__, __FUNCTION__, __LINE__); \ + } \ + } +#endif +#else +#ifndef ASSERT +#define ASSERT(a) +#endif +#endif /* SXG_ASSERT_ENABLED */ + + +#ifdef ATKDBG +/* + * Global for timer granularity; every driver must have an instance + * of this initialized to 0 + */ + +extern ulong ATKTimerDiv; + +/* + * trace_entry_t - + * + * This structure defines an entry in the trace buffer. The + * first few fields mean the same from entry to entry, while + * the meaning of last several fields change to suit the + * needs of the trace entry. Typically they are function call + * parameters. + */ +typedef struct _trace_entry_s { + char name[8]; /* 8 character name - like 's'i'm'b'a'r'c'v' */ + u32 time; /* Current clock tic */ + unsigned char cpu; /* Current CPU */ + unsigned char irql; /* Current IRQL */ + unsigned char driver; /* The driver which added the trace call */ + unsigned char pad2; /* pad to 4 byte boundary - will probably get used */ + u32 arg1; /* Caller arg1 */ + u32 arg2; /* Caller arg2 */ + u32 arg3; /* Caller arg3 */ + u32 arg4; /* Caller arg4 */ +} trace_entry_t, *ptrace_entry_t; + +/* + * Driver types for driver field in trace_entry_t + */ +#define TRACE_SXG 1 +#define TRACE_VPCI 2 +#define TRACE_SLIC 3 + +#define TRACE_ENTRIES 1024 + +typedef struct _sxg_trace_buffer_t +{ + unsigned int size; /* aid for windbg extension */ + unsigned int in; /* Where to add */ + unsigned int level; /* Current Trace level */ + spinlock_t lock; /* For MP tracing */ + trace_entry_t entries[TRACE_ENTRIES];/* The circular buffer */ +} sxg_trace_buffer_t; + +/* + * The trace levels + * + * XXX At the moment I am only defining critical, important, and noisy. + * I am leaving room for more if anyone wants them. + */ +#define TRACE_NONE 0 /* For trace level - if no tracing wanted */ +#define TRACE_CRITICAL 1 /* minimal tracing - only critical stuff */ +#define TRACE_IMPORTANT 5 /* more tracing - anything important */ +#define TRACE_NOISY 10 /* Everything in the world */ + + +/********************************************************************** + * + * The macros themselves - + * + *********************************************************************/ +#if ATK_TRACE_ENABLED +#define SXG_TRACE_INIT(buffer, tlevel) \ +{ \ + memset((buffer), 0, sizeof(sxg_trace_buffer_t)); \ + (buffer)->level = (tlevel); \ + (buffer)->size = TRACE_ENTRIES; \ + spin_lock_init(&(buffer)->lock); \ +} +#else +#define SXG_TRACE_INIT(buffer, tlevel) +#endif + +/* + * The trace macro. This is active only if ATK_TRACE_ENABLED is set. + */ +#if ATK_TRACE_ENABLED +#define SXG_TRACE(tdriver, buffer, tlevel, tname, a1, a2, a3, a4) { \ + if ((buffer) && ((buffer)->level >= (tlevel))) { \ + unsigned int trace_irql = 0; /* ?????? FIX THIS */ \ + unsigned int trace_len; \ + ptrace_entry_t trace_entry; \ + struct timeval timev; \ + \ + spin_lock(&(buffer)->lock); \ + trace_entry = &(buffer)->entries[(buffer)->in]; \ + do_gettimeofday(&timev); \ + \ + memset(trace_entry->name, 0, 8); \ + trace_len = strlen(tname); \ + trace_len = trace_len > 8 ? 8 : trace_len; \ + memcpy(trace_entry->name, (tname), trace_len); \ + trace_entry->time = timev.tv_usec; \ + trace_entry->cpu = (unsigned char)(smp_processor_id() & 0xFF); \ + trace_entry->driver = (tdriver); \ + trace_entry->irql = trace_irql; \ + trace_entry->arg1 = (ulong)(a1); \ + trace_entry->arg2 = (ulong)(a2); \ + trace_entry->arg3 = (ulong)(a3); \ + trace_entry->arg4 = (ulong)(a4); \ + \ + (buffer)->in++; \ + if ((buffer)->in == TRACE_ENTRIES) \ + (buffer)->in = 0; \ + \ + spin_unlock(&(buffer)->lock); \ + } \ +} +#else +#define SXG_TRACE(tdriver, buffer, tlevel, tname, a1, a2, a3, a4) +#endif + +#endif + +#endif /* _SXG_DEBUG_H_ */ |