freebsd-dev/sys/dev/asr/dptsig.h
Mike Smith ef137fd32f Add the 'asr' driver, supplied by Mark Salyzyn of Adaptec (nee DPT).
This provides support for the Adaptec SCSI RAID controller family,
as well as the DPT SmartRAID V and VI families.

The driver will be maintained by Mark and Adaptec, and any changes
should be referred to the MAINTAINER.
2000-09-01 07:51:25 +00:00

413 lines
19 KiB
C

/* $FreeBSD$ */
/* BSDI dptsig.h,v 1.7 1998/06/03 19:15:00 karels Exp */
/*
* Copyright (c) 1996-2000 Distributed Processing Technology Corporation
* Copyright (c) 2000 Adaptec 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;
#if (defined(_MULTI_DATAMODEL) && defined(sun) && !defined(_ILP32))
typedef uint32_t sigLONG;
#else
typedef unsigned long sigLONG;
#endif
/*
* 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 */
#if 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_MIPS PROC_MIPS4000 /* MIPS RISC */
#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 80960RP/RD */
#define PROC_960HX 0x02 /* Intel 80960HA/HD/HT */
#define PROC_960RN 0x03 /* Intel 80960RN/RM */
#define PROC_960RS 0x04 /* Intel 80960RS */
/* 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_MIPS */
#define PROC_R4000 0x01 /* MIPS R4000 */
#define PROC_RM7000 0x02 /* MIPS RM7000 */
/* 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 */
#define OEM_ADAPTEC 8 /* Adaptec */
/* 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_WINDOWS_98 0x20000000 /* Microsoft Windows '98 */
#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 */
/* ------------------------------------------------------------------ */
/* Requirements - sigWORD dsFirmware; FLAG BITS */
/* ------------------------------------------------------------------ */
#define dsFirmware dsApplication
#define FW_DNLDSIZE0 0x0000 /* 0..2 DownLoader Size - NONE */
#define FW_DNLDSIZE16 0x0001 /* 0..2 DownLoader Size 16K */
#define FW_DNLDSIZE32 0x0002 /* 0..2 DownLoader Size 32K */
#define FW_DNLDSIZE64 0x0004 /* 0..2 DownLoader Size 64K */
#define FW_LOAD_BTM 0x2000 /* 13 Load Offset (1=Btm, 0=Top) */
#define FW_LOAD_TOP 0x0000 /* 13 Load Offset (1=Btm, 0=Top) */
#define FW_SIG_VERSION1 0x0000 /* 15..14 Version Bits 0=Ver1 */
/*
0..2 Downloader Size (Value * 16K)
3
4
5
6
7
8
9
10
11
12
13 Load Offset (1=BTM 0=TOP)
14..15 F/W Sig Version (0=Ver1)
*/
/* ------------------------------------------------------------------ */
/* ------------------------------------------------------------------ */
/* ------------------------------------------------------------------ */
/*
* 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 */
sigLONG 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. */
#if defined __bsdi__
#ifndef PACK
#define PACK __attribute__ ((packed))
#endif
typedef struct dpt_sig_Packed {
char dsSignature[6] PACK; /* ALWAYS "dPtSiG" */
sigBYTE dsSigVersion PACK; /* signature version (currently 1) */
sigBYTE dsProcessorFamily PACK; /* what type of processor */
sigBYTE dsProcessor PACK; /* precise processor */
sigBYTE dsFiletype PACK; /* type of file */
sigBYTE dsFiletypeFlags PACK; /* flags to specify load type, etc. */
sigBYTE dsOEM PACK; /* OEM file was created for */
sigLONG dsOS PACK; /* which Operating systems */
sigWORD dsCapabilities PACK; /* RAID levels, etc. */
sigWORD dsDeviceSupp PACK; /* Types of SCSI devices supported */
sigWORD dsAdapterSupp PACK; /* DPT adapter families supported */
sigWORD dsApplication PACK; /* applications file is for */
sigBYTE dsRequirements PACK; /* Other driver dependencies */
sigBYTE dsVersion PACK; /* 1 */
sigBYTE dsRevision PACK; /* 'J' */
sigBYTE dsSubRevision PACK; /* '9' ' ' if N/A */
sigBYTE dsMonth PACK; /* creation month */
sigBYTE dsDay PACK; /* creation day */
sigBYTE dsYear PACK; /* creation year since 1980 (1993=13) */
/* description (NULL terminated) */
char dsDescription[dsDescription_size] PACK;
} dpt_sig_S_Packed;
#define PACKED_SIG_SIZE sizeof(dpt_sig_S_Packed)
#endif
/* 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 */
#if STRUCTALIGNMENTSUPPORTED
#pragma options align=reset
#endif
#endif