Coherent4.2.10/include/kernel/trace.h

/* (-lgl
 *	Coherent 386 release 4.2
 *	Copyright (c) 1982, 1993 by Mark Williams Company.
 *	All rights reserved. May not be copied without permission.
 *	For copying permission and licensing info, write licensing@mwc.com
 -lgl) */

#ifndef	__KERNEL_TRACE_H__
#define	__KERNEL_TRACE_H__

#include <kernel/proc_lib.h>
#include <sys/cmn_err.h>
#include <common/ccompat.h>

/*
 * This header contains the MWC tracing macros.
 */

#define CHIRP(ch)		chirp(ch)
#define _CHIRP(ch, locn)	_chirp(ch, locn)

/*
 * Control flags for tracing features.
 *
 * t_piggy bits:
 *	0x0001	pexit()
 *	0x0002	286 system calls
 *	0x0004	386 system calls
 *	0x0008	uioctl()
 *	0x0020	ssread()/sswrite()	in io.386/ss.c
 *	0x0200	uread()			in coh.386/sys3.c
 *	0x0400	ssblock()		in io.386/ss.c
 *	0x1000	XP_DATA_IN/OUT		in state machine in io.386/ss.c
 *	0x10000	open() bad exit values	in coh.386/sys3.c
 *
 * t_hal bits:
 *	0x0001	TCSETA/TCSETAF/TCSETAW ioctl's
 *	0x0002	TIOCSETP/TIOCSETN ioctl's
 *	0x0004	al[01] verbose mode (see alx.c); asy devmsgs
 *	0x0008	obrk()
 *	0x0010	pipe open/read/write
 *	0x0020	1= NO c_grow() calls;  alx overruns
 *	0x0040	monitor number of free clists
 *	0x0080	'+' when asleep waiting for free clist
 *	0x0100	trace c_grow() calls
 *	0x0200	run check_slot() on alloc() and ubrk()
 *	0x0400	async opens, closes, speed changes
 *	0x0800	asy, all interrupts
 *	0x1000	explanation of page faults
 *	0x2000
 *	0x4000	all traps
 *	0x8000	ubrk()
 *
 * t_vlad bits:
 *	0x0001
 *	0x0002	fcntl
 *
 * t_errno bits:
 *	0x0001	trace u.u_error settings
 *	0x0002  trace 386 system calls
 * t_con - trace console events
 *
 * t_msgq bits:
 *	0x0001	memory alloc
 *	0x0002	permissions
 */

#define	TRACE_FILESYS	128
#define	TRACE_INODE	64
#define	TRACE_PIGGY	32
#define	TRACE_CON	16
#define	TRACE_MSGQ	8
#define	TRACE_VLAD	4
#define	TRACE_HAL	2
#define	TRACE_ERRNO	1

#if	TRACER & TRACE_PIGGY

/*
 * T_PIGGY() is for piggy-controlled tracing.
 */

extern unsigned t_piggy;
#define T_PIGGY(flag, expr)	((t_piggy & (flag)) != 0 ? (void) (expr) : \
							   (void) 0)
#else
#define T_PIGGY(f,c)			((void) 0)
#endif


#if	TRACER & TRACE_HAL

/*
 * T_HAL() is for hal-controlled tracing.
 */

extern unsigned t_hal;
#define T_HAL(flag, expr)	((t_hal & (flag)) != 0 ? (void) (expr) : \
							 (void) 0)
#else
#define T_HAL(f,c)			((void) 0)
#endif


#if	TRACER & TRACE_VLAD
/*
 * T_VLAD() is for vlad-controlled tracing.
 */
extern unsigned t_vlad;
#define T_VLAD(flag, expr)	((t_vlad & (flag)) != 0 ? (void) (expr) : \
							  (void) 0)
#else
#define T_VLAD(f,c)			((void) 0)
#endif


#if	TRACER & TRACE_MSGQ
/*
 * T_MSGQ() is for message queue-controlled tracing.
 */
extern unsigned t_msgq;
#define T_MSGQ(flag, expr)	((t_msgq & (flag)) != 0 ? (void) (expr) : \
							  (void) 0)
#else
#define T_MSGQ(f,c)			((void) 0)
#endif


#if	TRACER & TRACE_ERRNO
/*
 * SET_U_ERROR() is for error/system-call tracing.
 */

extern unsigned t_errno;

#define	T_ERRNO(mask, cmd) \
		((t_errno & mask) != 0 ? (void) (cmd) : (void) 0)
#else
#define T_ERRNO(mask, msg)	((void) 0)
#endif

#define SET_U_ERROR(errno, msg)	\
	(set_user_error (errno), \
	 T_ERRNO (1, cmn_err (CE_NOTE, "u_error: %d: %s:\n", (errno), (msg))))

#if	TRACER & TRACE_CON

/*
 * T_CON() is for video & keyboard tracing.
 */
extern unsigned t_con;
#define T_CON(flag, expr)	((t_con & (flag)) != 0 ? (void) (expr) : \
							 (void) 0)

#else
#define T_CON(f,c)			((void) 0)
#endif

#if	TRACER & TRACE_INODE

extern	unsigned short	t_inumber;

#define	T_INODE(ip, cmd) \
		(((ip)->i_flag & IFTRACE) != 0 ? (void) (cmd) : (void) 0)
#else
#define	T_INODE(ip, cmd)	((void) 0)
#endif

#if	TRACER & TRACE_FILESYS

extern	unsigned short	t_filesys;
extern	unsigned short	t_filedev;

#define	T_FILESYS(dev, mask, cmd) \
		((t_filesys & (mask)) != 0 && \
		 (dev == t_filedev || t_filedev == 0) ? \
		 (void) (cmd) : (void) 0)
#else
#define	T_FILESYS(dev, mask, cmd)	((void) 0)
#endif

void		_chirp		__PROTO ((char c, int off));
void		chirp		__PROTO ((char c));
void		mchirp		__PROTO ((char c));
void		strchirp	__PROTO ((char * str));

#endif	/* ! defined (__KERNEL_TRACE_H__) */