/*	BSDI dptsig.h,v 1.7 1998/06/03 19:15:00 karels Exp	*/

/*
 * Copyright (c) 1996-1999 Distributed Processing Technology Corporation
 * All rights reserved.
 *
 * Redistribution and use in source form, with or without modification, are
 * permitted provided that redistributions of source code must retain the
 * above copyright notice, this list of conditions and the following disclaimer.
 *
 * This software is provided `as is' by Distributed Processing Technology 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 Distributed Processing Technology 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
 * interruptions) 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 driver software, even if advised
 * of the possibility of such damage.
 *
 */

#ifndef __DPTSIG_H_
#define __DPTSIG_H_
#ifdef _SINIX_ADDON
#include "dpt.h"
#endif
/* DPT SIGNATURE SPEC AND HEADER FILE                           */
/* Signature Version 1 (sorry no 'A')                           */

/* to make sure we are talking the same size under all OS's     */
typedef unsigned char sigBYTE;
typedef unsigned short sigWORD;
typedef unsigned int sigINT;

/*
 * use sigWORDLittleEndian for:
 *  dsCapabilities
 *  dsDeviceSupp
 *  dsAdapterSupp
 *  dsApplication
 * use sigLONGLittleEndian for:
 *      dsOS
 * so that the sig can be standardised to Little Endian
 */
#if (defined(_DPT_BIG_ENDIAN))
# define sigWORDLittleEndian(x) ((((x)&0xFF)<<8)|(((x)>>8)&0xFF))
# define sigLONGLittleEndian(x) \
        ((((x)&0xFF)<<24) |             \
         (((x)&0xFF00)<<8) |    \
         (((x)&0xFF0000L)>>8) | \
         (((x)&0xFF000000L)>>24))
#else
# define sigWORDLittleEndian(x) (x)
# define sigLONGLittleEndian(x) (x)
#endif

/* must make sure the structure is not word or double-word aligned      */
/* ---------------------------------------------------------------      */
/* Borland will ignore the following pragma:                            */
/* Word alignment is OFF by default.  If in the, IDE make               */
/* sure that Options | Compiler | Code Generation | Word Alignment      */
/* is not checked.  If using BCC, do not use the -a option.             */

#ifndef NO_PACK
#if defined (_DPT_AIX)
#pragma options align=packed
#else
#pragma pack(1)
#endif  /* aix */
#endif
/* For the Macintosh */
#ifdef STRUCTALIGNMENTSUPPORTED
#pragma options align=mac68k
#endif


/* Current Signature Version - sigBYTE dsSigVersion; */
/* ------------------------------------------------------------------ */
#define SIG_VERSION 1

/* Processor Family - sigBYTE dsProcessorFamily;  DISTINCT VALUES */
/* ------------------------------------------------------------------ */
/* What type of processor the file is meant to run on. */
/* This will let us know whether to read sigWORDs as high/low or low/high. */
#define PROC_INTEL      0x00    /* Intel 80x86 */
#define PROC_MOTOROLA   0x01    /* Motorola 68K */
#define PROC_MIPS4000   0x02    /* MIPS RISC 4000 */
#define PROC_ALPHA      0x03    /* DEC Alpha */
#define PROC_POWERPC    0x04    /* IBM Power PC */
#define PROC_i960       0x05    /* Intel i960 */
#define PROC_ULTRASPARC 0x06    /* SPARC processor */

/* Specific Minimim Processor - sigBYTE dsProcessor;    FLAG BITS */
/* ------------------------------------------------------------------ */
/* Different bit definitions dependent on processor_family */

/* PROC_INTEL: */
#define PROC_8086       0x01    /* Intel 8086 */
#define PROC_286        0x02    /* Intel 80286 */
#define PROC_386        0x04    /* Intel 80386 */
#define PROC_486        0x08    /* Intel 80486 */
#define PROC_PENTIUM    0x10    /* Intel 586 aka P5 aka Pentium */
#define PROC_SEXIUM	0x20	/* Intel 686 aka P6 aka Pentium Pro or MMX */

/* PROC_i960: */
#define PROC_960RX      0x01    /* Intel 80960RC/RD */
#define PROC_960HX      0x02    /* Intel 80960HA/HD/HT */

/* PROC_MOTOROLA: */
#define PROC_68000      0x01    /* Motorola 68000 */
#define PROC_68010	0x02	/* Motorola 68010 */
#define PROC_68020      0x04    /* Motorola 68020 */
#define PROC_68030      0x08    /* Motorola 68030 */
#define PROC_68040      0x10    /* Motorola 68040 */

/* PROC_POWERPC */
#define PROC_PPC601		0x01	/* PowerPC 601 */
#define PROC_PPC603		0x02	/* PowerPC 603 */
#define PROC_PPC604		0x04	/* PowerPC 604 */

/* PROC_MIPS4000: */
#define PROC_R4000      0x01    /* MIPS R4000 */

/* Filetype - sigBYTE dsFiletype;       DISTINCT VALUES */
/* ------------------------------------------------------------------ */
#define FT_EXECUTABLE   0       /* Executable Program */
#define FT_SCRIPT       1       /* Script/Batch File??? */
#define FT_HBADRVR      2       /* HBA Driver */
#define FT_OTHERDRVR    3       /* Other Driver */
#define FT_IFS          4       /* Installable Filesystem Driver */
#define FT_ENGINE       5       /* DPT Engine */
#define FT_COMPDRVR     6       /* Compressed Driver Disk */
#define FT_LANGUAGE     7       /* Foreign Language file */
#define FT_FIRMWARE     8       /* Downloadable or actual Firmware */
#define FT_COMMMODL     9       /* Communications Module */
#define FT_INT13        10      /* INT 13 style HBA Driver */
#define FT_HELPFILE     11      /* Help file */
#define FT_LOGGER       12      /* Event Logger */
#define FT_INSTALL      13      /* An Install Program */
#define FT_LIBRARY      14      /* Storage Manager Real-Mode Calls */
#define FT_RESOURCE	15	/* Storage Manager Resource File */
#define FT_MODEM_DB	16	/* Storage Manager Modem Database */

/* Filetype flags - sigBYTE dsFiletypeFlags;    FLAG BITS */
/* ------------------------------------------------------------------ */
#define FTF_DLL         0x01    /* Dynamic Link Library */
#define FTF_NLM         0x02    /* Netware Loadable Module */
#define FTF_OVERLAYS    0x04    /* Uses overlays */
#define FTF_DEBUG       0x08    /* Debug version */
#define FTF_TSR         0x10    /* TSR */
#define FTF_SYS         0x20    /* DOS Loadable driver */
#define FTF_PROTECTED   0x40    /* Runs in protected mode */
#define FTF_APP_SPEC    0x80    /* Application Specific */
#define FTF_ROM		(FTF_SYS|FTF_TSR)	/* Special Case */

/* OEM - sigBYTE dsOEM;         DISTINCT VALUES */
/* ------------------------------------------------------------------ */
#define OEM_DPT         0       /* DPT */
#define OEM_ATT         1       /* ATT */
#define OEM_NEC         2       /* NEC */
#define OEM_ALPHA       3       /* Alphatronix */
#define OEM_AST         4       /* AST */
#define OEM_OLIVETTI    5       /* Olivetti */
#define OEM_SNI         6       /* Siemens/Nixdorf */
#define OEM_SUN         7       /* SUN Microsystems */

/* Operating System  - sigLONG dsOS;    FLAG BITS */
/* ------------------------------------------------------------------ */
#define OS_DOS          0x00000001 /* PC/MS-DOS				*/
#define OS_WINDOWS      0x00000002 /* Microsoft Windows 3.x		*/
#define OS_WINDOWS_NT   0x00000004 /* Microsoft Windows NT		*/
#define OS_OS2M         0x00000008 /* OS/2 1.2.x,MS 1.3.0,IBM 1.3.x - Monolithic */
#define OS_OS2L         0x00000010 /* Microsoft OS/2 1.301 - LADDR	*/
#define OS_OS22x        0x00000020 /* IBM OS/2 2.x			*/
#define OS_NW286        0x00000040 /* Novell NetWare 286		*/
#define OS_NW386        0x00000080 /* Novell NetWare 386		*/
#define OS_GEN_UNIX     0x00000100 /* Generic Unix			*/
#define OS_SCO_UNIX     0x00000200 /* SCO Unix				*/
#define OS_ATT_UNIX     0x00000400 /* ATT Unix				*/
#define OS_UNIXWARE     0x00000800 /* USL Unix				*/
#define OS_INT_UNIX     0x00001000 /* Interactive Unix			*/
#define OS_SOLARIS      0x00002000 /* SunSoft Solaris			*/
#define OS_QNX          0x00004000 /* QNX for Tom Moch			*/
#define OS_NEXTSTEP     0x00008000 /* NeXTSTEP/OPENSTEP/MACH		*/
#define OS_BANYAN       0x00010000 /* Banyan Vines			*/
#define OS_OLIVETTI_UNIX 0x00020000/* Olivetti Unix			*/
#define OS_MAC_OS	0x00040000 /* Mac OS				*/
#define OS_WINDOWS_95	0x00080000 /* Microsoft Windows '95		*/
#define OS_NW4x		0x00100000 /* Novell Netware 4.x		*/
#define OS_BSDI_UNIX	0x00200000 /* BSDi Unix BSD/OS 2.0 and up	*/
#define OS_AIX_UNIX     0x00400000 /* AIX Unix				*/
#define OS_FREE_BSD	0x00800000 /* FreeBSD Unix			*/
#define OS_LINUX	0x01000000 /* Linux				*/
#define OS_DGUX_UNIX	0x02000000 /* Data General Unix			*/
#define OS_SINIX_N      0x04000000 /* SNI SINIX-N			*/
#define OS_PLAN9	0x08000000 /* ATT Plan 9			*/
#define OS_TSX		0x10000000 /* SNH TSX-32			*/

#define OS_OTHER        0x80000000 /* Other				*/

/* Capabilities - sigWORD dsCapabilities;        FLAG BITS */
/* ------------------------------------------------------------------ */
#define CAP_RAID0       0x0001  /* RAID-0 */
#define CAP_RAID1       0x0002  /* RAID-1 */
#define CAP_RAID3       0x0004  /* RAID-3 */
#define CAP_RAID5       0x0008  /* RAID-5 */
#define CAP_SPAN        0x0010  /* Spanning */
#define CAP_PASS        0x0020  /* Provides passthrough */
#define CAP_OVERLAP     0x0040  /* Passthrough supports overlapped commands */
#define CAP_ASPI        0x0080  /* Supports ASPI Command Requests */
#define CAP_ABOVE16MB   0x0100  /* ISA Driver supports greater than 16MB */
#define CAP_EXTEND      0x8000  /* Extended info appears after description */
#ifdef SNI_MIPS
#define CAP_CACHEMODE   0x1000  /* dpt_force_cache is set in driver */
#endif

/* Devices Supported - sigWORD dsDeviceSupp;    FLAG BITS */
/* ------------------------------------------------------------------ */
#define DEV_DASD        0x0001  /* DASD (hard drives) */
#define DEV_TAPE        0x0002  /* Tape drives */
#define DEV_PRINTER     0x0004  /* Printers */
#define DEV_PROC        0x0008  /* Processors */
#define DEV_WORM        0x0010  /* WORM drives */
#define DEV_CDROM       0x0020  /* CD-ROM drives */
#define DEV_SCANNER     0x0040  /* Scanners */
#define DEV_OPTICAL     0x0080  /* Optical Drives */
#define DEV_JUKEBOX     0x0100  /* Jukebox */
#define DEV_COMM        0x0200  /* Communications Devices */
#define DEV_OTHER       0x0400  /* Other Devices */
#define DEV_ALL         0xFFFF  /* All SCSI Devices */

/* Adapters Families Supported - sigWORD dsAdapterSupp; FLAG BITS */
/* ------------------------------------------------------------------ */
#define ADF_2001        0x0001  /* PM2001           */
#define ADF_2012A       0x0002  /* PM2012A          */
#define ADF_PLUS_ISA    0x0004  /* PM2011,PM2021    */
#define ADF_PLUS_EISA   0x0008  /* PM2012B,PM2022   */
#define ADF_SC3_ISA	0x0010  /* PM2021           */
#define ADF_SC3_EISA	0x0020  /* PM2022,PM2122, etc */
#define ADF_SC3_PCI	0x0040  /* SmartCache III PCI */
#define ADF_SC4_ISA	0x0080  /* SmartCache IV ISA */
#define ADF_SC4_EISA	0x0100  /* SmartCache IV EISA */
#define ADF_SC4_PCI	0x0200	/* SmartCache IV PCI */
#define ADF_SC5_PCI	0x0400	/* Fifth Generation I2O products */
/*
 *	Combinations of products
 */
#define ADF_ALL_2000	(ADF_2001|ADF_2012A)
#define ADF_ALL_PLUS	(ADF_PLUS_ISA|ADF_PLUS_EISA)
#define ADF_ALL_SC3	(ADF_SC3_ISA|ADF_SC3_EISA|ADF_SC3_PCI)
#define ADF_ALL_SC4	(ADF_SC4_ISA|ADF_SC4_EISA|ADF_SC4_PCI)
#define ADF_ALL_SC5	(ADF_SC5_PCI)
/* All EATA Cacheing Products */
#define ADF_ALL_CACHE	(ADF_ALL_PLUS|ADF_ALL_SC3|ADF_ALL_SC4)
/* All EATA Bus Mastering Products */
#define ADF_ALL_MASTER	(ADF_2012A|ADF_ALL_CACHE)
/* All EATA Adapter Products */
#define ADF_ALL_EATA	(ADF_2001|ADF_ALL_MASTER)
#define ADF_ALL		ADF_ALL_EATA

/* Application - sigWORD dsApplication;         FLAG BITS */
/* ------------------------------------------------------------------ */
#define APP_DPTMGR      0x0001  /* DPT Storage Manager */
#define APP_ENGINE      0x0002  /* DPT Engine */
#define APP_SYTOS       0x0004  /* Sytron Sytos Plus */
#define APP_CHEYENNE    0x0008  /* Cheyenne ARCServe + ARCSolo */
#define APP_MSCDEX      0x0010  /* Microsoft CD-ROM extensions */
#define APP_NOVABACK    0x0020  /* NovaStor Novaback */
#define APP_AIM         0x0040  /* Archive Information Manager */

/* Requirements - sigBYTE dsRequirements;         FLAG BITS             */
/* ------------------------------------------------------------------   */
#define REQ_SMARTROM    0x01    /* Requires SmartROM to be present      */
#define REQ_DPTDDL      0x02    /* Requires DPTDDL.SYS to be loaded     */
#define REQ_HBA_DRIVER  0x04    /* Requires an HBA driver to be loaded  */
#define REQ_ASPI_TRAN   0x08    /* Requires an ASPI Transport Modules   */
#define REQ_ENGINE      0x10    /* Requires a DPT Engine to be loaded   */
#define REQ_COMM_ENG    0x20    /* Requires a DPT Communications Engine */

/*
 * You may adjust dsDescription_size with an override to a value less than
 * 50 so that the structure allocates less real space.
 */
#if (!defined(dsDescription_size))
# define dsDescription_size 50
#endif

typedef struct dpt_sig {
    char    dsSignature[6];      /* ALWAYS "dPtSiG" */
    sigBYTE dsSigVersion;        /* signature version (currently 1) */
    sigBYTE dsProcessorFamily;   /* what type of processor */
    sigBYTE dsProcessor;         /* precise processor */
    sigBYTE dsFiletype;          /* type of file */
    sigBYTE dsFiletypeFlags;     /* flags to specify load type, etc. */
    sigBYTE dsOEM;               /* OEM file was created for */
    sigINT  dsOS;                /* which Operating systems */
    sigWORD dsCapabilities;      /* RAID levels, etc. */
    sigWORD dsDeviceSupp;        /* Types of SCSI devices supported */
    sigWORD dsAdapterSupp;       /* DPT adapter families supported */
    sigWORD dsApplication;       /* applications file is for */
    sigBYTE dsRequirements;      /* Other driver dependencies */
    sigBYTE dsVersion;           /* 1 */
    sigBYTE dsRevision;          /* 'J' */
    sigBYTE dsSubRevision;       /* '9'   ' ' if N/A */
    sigBYTE dsMonth;             /* creation month */
    sigBYTE dsDay;               /* creation day */
    sigBYTE dsYear;              /* creation year since 1980 (1993=13) */
    /* description (NULL terminated) */
    char  dsDescription[dsDescription_size];
} dpt_sig_S;
/* 32 bytes minimum - with no description.  Put NULL at description[0] */
/* 81 bytes maximum - with 49 character description plus NULL. */

/* This line added at Roycroft's request */
/* Microsoft's NT compiler gets confused if you do a pack and don't */
/* restore it. */

#ifndef NO_UNPACK
#if defined (_DPT_AIX)
#pragma options align=reset
#elif defined (UNPACK_FOUR)
#pragma pack(4)
#else
#pragma pack()
#endif  /* aix */
#endif
/* For the Macintosh */
#ifdef STRUCTALIGNMENTSUPPORTED
#pragma options align=reset
#endif

#endif
