Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

223 lines
5.3 KiB

/*++
Copyright (c) 1992 Microsoft Corporation
Module Name:
ultra14f.h
Abstract:
This file contains the structures and definitions that define
the ULTRASTOR 14F ISA SCSI host bus adapter.
Author:
Stephen Fong (SF)
Revision History:
--*/
#include "scsi.h"
//
// SCATTER/GATHER definitions
//
#define MAXIMUM_SG_DESCRIPTORS 16
#define MAXIMUM_TRANSFER_LENGTH 0xFFFFFFFF
typedef struct _SGD {
ULONG Address;
ULONG Length;
} SGD, *PSGD;
typedef struct _SDL {
SGD Descriptor[MAXIMUM_SG_DESCRIPTORS];
} SDL, *PSDL;
//
// MailBox SCSI Command Packet
//
#pragma pack(1)
typedef struct _MSCP {
UCHAR OperationCode:3; // byte 00
UCHAR TransferDirection:2;
UCHAR DisableDisconnect:1;
UCHAR UseCache:1;
UCHAR ScatterGather:1;
UCHAR TargetId:3; // byte 01
UCHAR Channel:2;
UCHAR Lun:3;
ULONG DataPointer; // byte 02
ULONG DataLength; // byte 06
ULONG CommandLink; // byte 0a
UCHAR CommandLinkId; // byte 0e
UCHAR SgDescriptorCount; // byte 0f
UCHAR RequestSenseLength; // byte 10
UCHAR CdbLength; // byte 11
UCHAR Cdb[12]; // byte 12
UCHAR AdapterStatus; // byte 1e
UCHAR TargetStatus; // byte 1f
ULONG RequestSensePointer; // byte 20
PSCSI_REQUEST_BLOCK SrbAddress; // byte 24
PSCSI_REQUEST_BLOCK AbortSrb; // byte 28
SDL Sdl; // byte 2c
} MSCP, *PMSCP;
#pragma pack()
//
// Operation codes
//
#define MSCP_OPERATION_HA_COMMAND 1
#define MSCP_OPERATION_SCSI_COMMAND 2
#define MSCP_OPERATION_DEVICE_RESET 4
//
// Transfer direction
//
#define MSCP_TRANSFER_SCSI 0
#define MSCP_TRANSFER_IN 1
#define MSCP_TRANSFER_OUT 2
#define MSCP_NO_TRANSFER 3
//
// Host Adapter Error Codes
//
#define MSCP_NO_ERROR 0x00
#define MSCP_INVALID_COMMAND 0x01
#define MSCP_INVALID_PARAMETER 0x02
#define MSCP_INVALID_DATA_LIST 0x03
#define MSCP_CPU_DIAG_ERROR 0x30
#define MSCP_BUFFER_RAM_DIAG_ERROR 0x31
#define MSCP_STATIC_RAM_DIAG_FAIL 0x32
#define MSCP_BMIC_CHIP_DIAG_ERROR 0x33
#define MSCP_CACHE_TAG_RAM_FAIL 0x34
#define MSCP_ROM_CHECKSUM_CHECK 0x35
#define MSCP_INVALID_CONFIG_DATA 0x36
#define MSCP_BUFFER_UNDERRUN 0x40
#define MSCP_BUFFER_OVERRUN 0x41
#define MSCP_BUFFER_PARITY_ERROR 0x42
#define MSCP_ISA_BUS_PARITY_ERROR 0x43
#define MSCP_ISA_INTERFACE_ERROR 0x44
#define MSCP_SCSI_BUS_ABORT_ERROR 0x84
#define MSCP_SELECTION_TIMEOUT 0x91
#define MSCP_BUS_UNDER_OVERRUN 0x92
#define MSCP_UNEXPECTED_BUS_FREE 0x93
#define MSCP_INVALID_PHASE_CHANGE 0x94
#define MSCP_ILLEGAL_SCSI_COMMAND 0x96
#define MSCP_AUTO_SENSE_ERROR 0x9B
#define MSCP_UNEXPECTED_COMPLETE 0x9F
#define MSCP_BUS_RESET_ERROR 0xA3
#define MSCP_ABORT_NOT_FOUND 0xAA
#define MSCP_INVALID_SG_LIST 0xFF
//
// ISA Registers definition
//
#pragma pack(1)
typedef struct _U14_BASEIO_ADDRESS {// baseioport offset
UCHAR LocalDoorBellMask; // + 0
UCHAR LocalDoorBellInterrupt; // + 1
UCHAR SystemDoorBellMask; // + 2
UCHAR SystemDoorBellInterrupt; // + 3
UCHAR ProductId1; // + 4
UCHAR ProductId2; // + 5
UCHAR Config1; // + 6
UCHAR Config2; // + 7
ULONG OutGoingMailPointer; // + 8
ULONG InComingMailPointer; // + C
} U14_BASEIO_ADDRESS, *PU14_BASEIO_ADDRESS;
#pragma pack()
//
// UltraStor 14F board id
//
#define ULTRASTOR_14F_ID1 0x56
#define ULTRASTOR_14F_ID2 0x40 // to work with both 14F, 34L and other models
// driver should mask ID2 byte bit0-bit3 to 0
//
// InComing Statuses
//
#define ICM_STATUS_COMPLETE_SUCCESS 0x01
#define ICM_STATUS_COMPLETE_ERROR 0x02
#define ICM_STATUS_ABORT_SUCCESS 0x03
#define ICM_STATUS_ABORT_FAILED 0x04
//
// DMA Channels
//
#define US_DMA_CHANNEL_5 0x00
#define US_DMA_CHANNEL_6 0x40
#define US_DMA_CHANNEL_7 0x80
#define US_DMA_CHANNEL_5_RESERVED 0xC0
//
// Interrupt levels
//
#define US_INTERRUPT_LEVEL_15 0x00
#define US_INTERRUPT_LEVEL_14 0x10
#define US_INTERRUPT_LEVEL_11 0x20
#define US_INTERRUPT_LEVEL_10 0x30
//
// Alternate address selection
//
#define US_ISA_SECONDARY_ADDRESS 0x40
//
// ISA TSR Port enabled
//
#define US_ISA_PRIMARY_ADDRESS 0x00
#define US_ISA_DISABLE 0x80
//
// Local doorbell mask (baseaddr+0)
//
#define US_ENABLE_OGMINT 0x01
#define US_ENABLE_SCSI_BUS_RESET 0x20
#define US_ENABLE_HA_SOFT_RESET 0x40
//
// Local doorbell interrupt/status (baseaddr+1)
//
#define US_OGMINT 0x01
#define US_SCSI_BUS_RESET 0x20
#define US_HA_SOFT_RESET 0x40
//
// System doorbell mask (baseaddr+2)
//
#define US_ENABLE_ICMINT 0x01
#define US_ENABLE_SYSTEM_DOORBELL 0x80
//
// System doorbell interrupt (baseaddr+3)
//
#define US_ICMINT 0x01
#define US_SINT_PENDING 0x80
#define US_RESET_ICMINT 0x01