#ifndef _TRACE_H
#define _TRACE_H
/*
 * VPC-XT Revision 2.0
 *
 * Title	: Trace module definitions
 *
 * Description	: Definitions for users of the trace module
 *
 * Author	: Henry Nash
 *
 * Notes	: None
 */

/* SccsID[]="@(#)trace.h	1.10 01/29/93 Copyright Insignia Solutions Ltd."; */

/*
 * ============================================================================
 * Structure/Data definitions
 * ============================================================================
 */

/*
 * Trace codes 
 */

#define DUMP_NONE	0x00		/* Dump no data		*/
#define DUMP_REG	0x01		/* Dump the registers	*/
#define DUMP_CODE	0x02		/* Dump the last 16 words of code */
#define DUMP_SCREEN	0x04		/* Dump the screen buffer */
#define DUMP_FLAGS 	0x08		/* Dump the flags */
#define DUMP_INST  	0x10   	        /* Dump the next instruction */
#define DUMP_CSIP	0x20		/* Dump CS:IP to backtrace file */
#define DUMP_NPX        0x40            /* Dump NPX Registers */
#define LAST_DEST       0x80            /* dump out last destination addr DELTA */
#define DUMP_ALL	0xFF		/* Dump the lot		*/

/*
 * Verbose bit masks - set the following bits in the io_verbose
 * variable to produce the following trace outputs:
 */

#define GENERAL_VERBOSE 	0x01L	/* General I/O		*/
#define TIMER_VERBOSE 		0x02L	/* Print I/O for timers */
#define ICA_VERBOSE 		0x04L	/* Print I/O for Int Controller Adapt */
#define CGA_VERBOSE		0x08L	/* Print I/O for Colour graphics Adap */
#define FLA_VERBOSE		0x10L	/* Print I/O for Floppy disk Adaptor  */
#define HDA_VERBOSE		0x20L	/* Print I/O for Hard disk Adaptor    */
#define RS232_VERBOSE		0x40L	/* Print I/O for RS232 Adaptor        */
#define PRINTER_VERBOSE		0x80L	/* Print I/O for Printer Adaptor      */
#define PPI_VERBOSE		0x100L	/* Print I/O for PPI Adaptor          */
#define DMA_VERBOSE		0x200L	/* Print I/O for PPI Adaptor          */
#define GFI_VERBOSE		0x400L	/* Print I/O for GFI modules	      */
#define MOUSE_VERBOSE		0x800L	/* Print I/O for Mouse modules	      */
#define MDA_VERBOSE		0x1000L	/* Print I/O for Mono Display Adapter */
#define ICA_VERBOSE_LOCK	0x2000L	/* message for ica lock flag set */
#define DISKBIOS_VERBOSE 	0x4000L	/* Print disk bios messages 	*/
#define EGA_PORTS_VERBOSE	0x8000L	/* Print out EGA port accesses	*/
#define EGA_WRITE_VERBOSE	0x10000L /* Print out EGA write state	*/
#define EGA_READ_VERBOSE	0x20000L /* Print out EGA read state	*/
#define EGA_DISPLAY_VERBOSE	0x40000L /* Print out EGA display state	*/
#define EGA_ROUTINE_ENTRY	0x80000L /* Print out EGA routine trace	*/
#define EGA_VERY_VERBOSE	0xf8000L /* Print out all EGA stuff	*/
#define FLOPBIOS_VERBOSE	0x100000L /* Print floppy bios messages 	*/
#define AT_KBD_VERBOSE		0x200000L /* Print AT keyboard messages	*/
#define BIOS_KB_VERBOSE		0x400000L /* Print BIOS keyboard messages  */
#define CMOS_VERBOSE		0x800000L /* Cmos and real-time clock */
#define HUNTER_VERBOSE		0x1000000L /* Hunter verbosity */
#define PTY_VERBOSE		0x2000000L /* Print Pesudo-terminal messages */
#define GEN_DRVR_VERBOSE	0x4000000L /* Generic driver messages */
#ifdef HERC
#define HERC_VERBOSE		0x8000000L /* Hercules graphics board */
#endif
#define IPC_VERBOSE		0x10000000L /* Interproc communication debug */
#define LIM_VERBOSE		0x20000000L /* LIM messages */
#define HFX_VERBOSE		0x40000000L /* severity of HFX messages */
#define NET_VERBOSE		0x80000000L /* Print out LAN driver messages */

/* sub message types */

#define MAP_VERBOSE		0x1L	/* map messages */
#define CURSOR_VERBOSE		0x2L	/* cursor manipulation messages */
#define NHFX_VERBOSE		0x4L	/* subsid HFX messages */
#define CDROM_VERBOSE		0x8L	/* cdrom **VERY** verbose */
#define CGA_HOST_VERBOSE	0x10L	/* Get host CGA messages */
#define EGA_HOST_VERBOSE	0x20L	/* Get host EGA messages */
#define Q_EVENT_VERBOSE		0x40L   /* quick event manager messages */
#define WORM_VERBOSE		0x80L   /* Worm Drive messages */
#define WORM_VERY_VERBOSE	0x100L  /* Worm Verbose Drive messages */
#define HERC_HOST_VERBOSE	0x200L	/* Get host HERC messages */
#define GORE_VERBOSE		0x400L	/* Get GORE messages */
#define GORE_ERR_VERBOSE	0x800L	/* Get GORE error messages */
#define GLUE_VERBOSE		0x1000L	/* Get glue messages */
#define SAS_VERBOSE		0x2000L	/* Get sas messages */
#define IOS_VERBOSE		0x4000L	/* Get ios messages */
#define SCSI_VERBOSE		0x8000L	/* SCSI messages */

/*
 * To get adapter independent tracings
 */

#define ALL_ADAPT_VERBOSE	HERC_HOST_VERBOSE | CGA_HOST_VERBOSE | EGA_HOST_VERBOSE

/*
 * Error strings
 */

#define ENOT_SUPPORTED	"BIOS function not supported in Rev 1.0"
#define EBAD_VIDEO_MODE "Video mode not supported in Rev 1.0"
#define EUNEXPECTED_INT "Unexpected interrupt occurred"

/*
 * ============================================================================
 * External declarations and macros
 * ============================================================================
 */

#ifdef ANSI
extern void trace(char *, int);
extern void trace_init(void);

#ifdef DELTA
extern void file_back_trace(char *);
extern void print_back_trace(void);
#endif /* DELTA */

#else
extern void trace();
extern void trace_init();

#ifdef DELTA
extern void file_back_trace();
extern void print_back_trace();
#endif /* DELTA */

#endif /* ANSI */
extern FILE *trace_file;

IMPORT IU32 sub_io_verbose;

#endif /* _TRACE_H */
