diff options
Diffstat (limited to '')
-rw-r--r-- | private/ntos/miniport/mylex/dmc960/dac960nt.h | 371 |
1 files changed, 371 insertions, 0 deletions
diff --git a/private/ntos/miniport/mylex/dmc960/dac960nt.h b/private/ntos/miniport/mylex/dmc960/dac960nt.h new file mode 100644 index 000000000..1fad7c455 --- /dev/null +++ b/private/ntos/miniport/mylex/dmc960/dac960nt.h @@ -0,0 +1,371 @@ +/************************************************************************ +* * +* COPYRIGHT (C) Mylex Corporation 1994 * +* * +* This software is furnished under a license and may be used * +* and copied only in accordance with the terms and conditions * +* of such license and with inclusion of the the above copyright * +* notice. This software or any other copies therof may not be * +* provided or otherwise made available to any other person. No * +* title to and ownership of the software is hereby transfered. * +* * +* The information in this software is subject to change without * +* notices and should not be construed as a committmet by Mylex * +* Corporation. * +* * +************************************************************************/ + +/* +** Mylex DAC960 miniport driver for Windows NT +** +** File: dac960nt.h +** Equates for DAC960 adapter +** +*/ + + +#include "scsi.h" + + + +/* +** Firmware related stuff +*/ + +#define MAX_DRVS 8 +#define DAC_MAX_IOCMDS 0x40 +#define DAC_MAXRQS 0x40 +#define DAC_THUNK 512 + + +#define MAX_WAIT_SECS 360 + +#define ERR 2 +#define ABRT 4 +#define FWCHK 2 +#define HERR 1 +#define INSTL_ABRT 0x54524241 +#define INSTL_FWCK 0x4b434746 +#define INSTL_HERR 0x52524548 +#define INSTL_WEIRD 0x3f3f3f3f + +#define BIOS_PORT 0x0CC1 +#define BIOS_EN 0x40 +#define BASE_MASK 0x07 +#define BIOS_SIZE 16384 + +/* +** EISA specific stuff +*/ +#define EISA_ADDRESS_BASE 0x0C80 +#define EISA_IO_SLOT1 0x1000 +#define EISA_IO_STEP 0x1000 +#define MAXIMUM_EISA_SLOTS 0x10 // Leave out non-bus master slots +#define EISA_ID_START 0x0c80 /* Offset from IO base to ID */ +#define EISA_INTR 0xcc3 +#define EISA_ID_COUNT 4 + +#define DAC_EISA_MASK { 0xff, 0xff, 0xff, 0xf0 } /* 4 bytes EISA ID mask */ +#define DAC_EISA_ID { 0x35, 0x98, 0, 0x70 } /* 4 bytes EISA ID */ + + + +/* +** EISA side of BMIC chip +*/ +#define BMIC_GLBLCFG 0xc88 +#define BMIC_SYSINTCTRL 0xc89 // System interrupt enable/status +#define BMIC_SIC_ENABLE 0x01 // read-write interrupt enable +#define BMIC_SIC_PENDING 0x02 // read-only interrupt(s) pending +#define BMIC_LOCAL_DB_ENABLE 0xc8c // Read-only from EISA side +#define BMIC_LOCAL_DB 0xc8d // EISA to local notification +#define BMIC_EISA_DB_ENABLE 0xc8e // Read-write from EISA side +#define BMIC_EISA_DB 0xc8f // Local to EISA notification + +#define BMIC_MBOX 0xc90 // BMIC mailbox registers + + + +/* +** More defines +*/ + +// +// The DAC Command codes +// +#define DAC_LREAD 0x02 +#define DAC_LWRITE 0x03 +#define DAC_ENQUIRE 0x05 +#define DAC_ENQ2 0x1c +#define DAC_FLUSH 0x0a +#define DAC_DCDB 0x04 +#define DAC_DCMD 0x99 +#define DAC_GETDEVST 0x14 + +#define ILFLAG 8 +#define BIT0 1 + +#define ILFLAG 8 + +#define MAXCHANNEL 5 +#define MAXTARGET 7 +#define DAC_DISCONNECT 0x80 +#define DATA_OFFSET 100 +#define NON_DISK 2 /* Bus ID for NonDisk Devices */ +#define DAC_NONE 0 +#define DAC_IN 1 +#define DAC_OUT 2 +#define DAC_NO_AUTOSENSE 0x40 + +#define MAXIMUM_SGL_DESCRIPTORS 0x11 + +#define RCB_NEEDCOPY 1 +#define RCB_PREFLUSH 2 +#define RCB_POSTFLUSH 4 + + +/* + * Various DAC mailbox formats + */ + +#pragma pack(1) + +typedef struct { // I/O mailbox + UCHAR Byte0; + UCHAR Byte1; + UCHAR Byte2; + UCHAR Byte3; + UCHAR Byte4; + UCHAR Byte5; + UCHAR Byte6; + UCHAR Byte7; + UCHAR Byte8; + UCHAR Byte9; + UCHAR Bytea; + UCHAR Byteb; + UCHAR Bytec; + UCHAR Byted; + UCHAR Bytee; + UCHAR Bytef; + +} DAC_GENERAL; + +typedef struct { // I/O mailbox + UCHAR Command; + UCHAR Id; + USHORT SectorCount; + ULONG Block; + ULONG PhysAddr; + UCHAR Reserved1; + UCHAR RetId; + UCHAR Status; + UCHAR Error; + +} DAC_IOMBOX; + +typedef struct { // Request Drive Parameters + UCHAR Command; + UCHAR Id; + USHORT Reserved2; + ULONG Reserved3; + ULONG PhysAddr; // Address of DAC_DPT + UCHAR RetId; + UCHAR Status; + UCHAR Error; + +} DAC_DPMBOX; + + +// IOCTL STUFFS + +typedef struct _SRB_IO_CONTROL +{ + ULONG HeaderLength; + UCHAR Signature[8]; + ULONG Timeout; + ULONG ControlCode; + ULONG ReturnCode; + ULONG Length; + +} SRB_IO_CONTROL, * PSRB_IO_CONTROL; + +typedef struct{ + SRB_IO_CONTROL srbioctl; + UCHAR DataBuf[512]; + +}PASS_THROUGH_STRUCT, *PPT; + + + +typedef union { + DAC_IOMBOX iombox; + DAC_DPMBOX dpmbox; + DAC_GENERAL generalmbox; + +} DAC_MBOX; +typedef DAC_MBOX *PDAC_MBOX; + + + +/* +** Device parameters as returned from DAC firmware +*/ + +typedef struct { + ULONG No_Drives; + ULONG Size[MAX_DRVS]; + UCHAR Filler0[7]; + UCHAR max_io_cmds; /* Maxm No Of Concurrent commands */ + UCHAR Filler[150]; + +} DAC_DPT; + +typedef DAC_DPT *PDAC_DPT; + + +/* +** SCSI stuff +*/ +/* 88-bytes */ + +typedef struct { + UCHAR device; /* device -> chn(4):dev(4) */ + UCHAR dir; /* direction-> 0=>no xfr, 1=>IN, 2=>OUT, MSB =1 => + disconnecting,=0=> non-disconnecting */ + USHORT byte_cnt; /* 64K max data xfr */ + ULONG ptr; /* pointer to the data (in system memory) */ + UCHAR cdb_len; /* length of cdb */ + UCHAR sense_len; /* length of valid sense information */ + UCHAR cdb[12]; + UCHAR sense[64]; + UCHAR status; + UCHAR fill; + +} DIRECT_CDB, *PDIRECT_CDB; + + + +// +// Context structure for board scanning +// +typedef struct { + ULONG Slot; + ULONG AdapterCount; + +} SCANCONTEXT, *PSCANCONTEXT; + + +// +// The following structure is allocated +// from noncached memory as data will be DMA'd to +// and from it. +// +typedef struct _NONCACHED_EXTENSION { + + // Device Parameter Table for the Get_Device_Parameters request + + DAC_DPT DevParms; + UCHAR Buffer[DAC_THUNK]; + ULONG PhysicalScsiReqAddress; + ULONG PhysicalReqSenseAddress; + UCHAR ReqSense[DAC_MAXRQS]; + +} NONCACHED_EXTENSION, *PNONCACHED_EXTENSION; + + + +// +// Request Control Block (SRB Extension) +// All information required to break down and execute +// a disk request is stored here +// +typedef struct _RCB { + PUCHAR VirtualTransferAddress; + ULONG BlockAddress; + ULONG BytesToGo; + UCHAR DacCommand; + UCHAR DacStatus; + UCHAR DacErrcode; + +} RCB, *PRCB; + + +// +// SCSI Command Control Block +// We use this block to break down a non-disk scsi request +// + +typedef struct _SCCB { + PUCHAR VirtualTransferAddress; + ULONG DeviceAddress; + ULONG BytesPerBlock; + ULONG BlocksToGo; + ULONG BlocksThisReq; + ULONG BytesThisReq; + UCHAR Started; + UCHAR Opcode; + UCHAR DevType; + +} SCCB, *PSCCB; + + +// +// Device extension +// + +typedef struct _HW_DEVICE_EXTENSION { + + // NonCached extension + + PNONCACHED_EXTENSION NoncachedExtension; + ULONG NCE_PhyAddr; + PVOID EisaAddress; // base address for slot (X000h) + PUSHORT printAddr; + ULONG AdapterIndex; + UCHAR HostTargetId; + UCHAR MaxChannels; + UCHAR No_SysDrives; + UCHAR ND_DevMap[MAXTARGET]; + + // Pending request. + // This request has not been sent to the adapter yet + // because the adapter was busy + + PSCSI_REQUEST_BLOCK PendingSrb; + PSCSI_REQUEST_BLOCK PendingNDSrb; + ULONG NDPending; + + // Pointers to disk IO requests sent to adapter + // and their statuses + + ULONG ActiveCmds; + USHORT MaxCmds; + PSCSI_REQUEST_BLOCK ActiveSrb[DAC_MAX_IOCMDS]; + RCB ActiveRcb[DAC_MAX_IOCMDS]; + + + // Pointer to non-disk SCSI requests sent to adapter + + PSCSI_REQUEST_BLOCK ActiveScsiSrb; + SCCB Sccb; + ULONG Kicked; + ULONG ScsiInterruptCount; + +} HW_DEVICE_EXTENSION, *PHW_DEVICE_EXTENSION; + + +// Scatter Gather List * + +typedef struct _SG_DESCRIPTOR { + ULONG Address; + ULONG Length; + +} SG_DESCRIPTOR, *PSG_DESCRIPTOR; + +typedef struct _SGL { + SG_DESCRIPTOR Descriptor[MAXIMUM_SGL_DESCRIPTORS]; +} SGL, *PSGL; + +#pragma pack() + + |