00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
#ifndef _NCR53C94_
00031 
#define _NCR53C94_
00032 
00033 
00034 
00035 
00036 
00037 
00038 
#if defined(DECSTATION)
00039 
00040 
typedef struct _SCSI_REGISTER {
00041     UCHAR Byte;
00042     UCHAR Fill[3];
00043 } 
SCSI_REGISTER, *PSCSI_REGISTER;
00044 
00045 
#else
00046 
00047 #define SCSI_REGISTER UCHAR
00048 
00049 
#endif // DECSTATION
00050 
00051 
00052 
00053 
00054 
00055 
00056 
00057 typedef struct _SCSI_READ_REGISTERS {
00058     SCSI_REGISTER TransferCountLow;
00059     SCSI_REGISTER TransferCountHigh;
00060     SCSI_REGISTER Fifo;
00061     SCSI_REGISTER Command;
00062     SCSI_REGISTER ScsiStatus;
00063     SCSI_REGISTER ScsiInterrupt;
00064     SCSI_REGISTER SequenceStep;
00065     SCSI_REGISTER FifoFlags;
00066     SCSI_REGISTER Configuration1;
00067     SCSI_REGISTER Reserved1;
00068     SCSI_REGISTER Reserved2;
00069     SCSI_REGISTER Configuration2;
00070     SCSI_REGISTER Configuration3;
00071     SCSI_REGISTER Reserved;
00072     SCSI_REGISTER TransferCountPage;
00073     SCSI_REGISTER FifoBottem;
00074 } 
SCSI_READ_REGISTERS, *
PSCSI_READ_REGISTERS;
00075 
00076 
00077 
00078 
00079 
00080 typedef struct _SCSI_WRITE_REGISTERS {
00081     SCSI_REGISTER TransferCountLow;
00082     SCSI_REGISTER TransferCountHigh;
00083     SCSI_REGISTER Fifo;
00084     SCSI_REGISTER Command;
00085     SCSI_REGISTER DestinationId;
00086     SCSI_REGISTER SelectTimeOut;
00087     SCSI_REGISTER SynchronousPeriod;
00088     SCSI_REGISTER SynchronousOffset;
00089     SCSI_REGISTER Configuration1;
00090     SCSI_REGISTER ClockConversionFactor;
00091     SCSI_REGISTER TestMode;
00092     SCSI_REGISTER Configuration2;
00093     SCSI_REGISTER Configuration3;
00094     SCSI_REGISTER Reserved;
00095     SCSI_REGISTER TransferCountPage;
00096     SCSI_REGISTER FifoBottem;
00097 } 
SCSI_WRITE_REGISTERS, *
PSCSI_WRITE_REGISTERS;
00098 
00099 typedef union _SCSI_REGISTERS {
00100     SCSI_READ_REGISTERS  ReadRegisters;
00101     SCSI_WRITE_REGISTERS WriteRegisters;
00102 } 
SCSI_REGISTERS, *
PSCSI_REGISTERS;
00103 
00104 
00105 
00106 
00107 
00108 #define NO_OPERATION_DMA 0x80
00109 #define FLUSH_FIFO 0x1
00110 #define RESET_SCSI_CHIP 0x2
00111 #define RESET_SCSI_BUS 0x3
00112 #define TRANSFER_INFORMATION 0x10
00113 #define TRANSFER_INFORMATION_DMA 0x90
00114 #define COMMAND_COMPLETE 0x11
00115 #define MESSAGE_ACCEPTED 0x12
00116 #define TRANSFER_PAD 0x18
00117 #define SET_ATTENTION 0x1a
00118 #define RESET_ATTENTION 0x1b
00119 #define RESELECT 0x40
00120 #define SELECT_WITHOUT_ATTENTION 0x41
00121 #define SELECT_WITH_ATTENTION 0x42
00122 #define SELECT_WITH_ATTENTION_STOP 0x43
00123 #define ENABLE_SELECTION_RESELECTION 0x44
00124 #define DISABLE_SELECTION_RESELECTION 0x45
00125 #define SELECT_WITH_ATTENTION3 0x46
00126 
00127 
00128 
00129 
00130 typedef struct _SCSI_STATUS {
00131     UCHAR 
Phase : 3;
00132     UCHAR 
ValidGroup : 1;
00133     UCHAR 
TerminalCount : 1;
00134     UCHAR 
ParityError : 1;
00135     UCHAR 
GrossError : 1;
00136     UCHAR 
Interrupt : 1;
00137 } 
SCSI_STATUS, *
PSCSI_STATUS;
00138 
00139 
00140 
00141 
00142 
00143 #define DATA_OUT 0x0
00144 #define DATA_IN 0x1
00145 #define COMMAND_OUT 0x2
00146 #define STATUS_IN 0x3
00147 #define MESSAGE_OUT 0x6
00148 #define MESSAGE_IN 0x7
00149 
00150 
00151 
00152 
00153 
00154 typedef struct _SCSI_INTERRUPT {
00155     UCHAR 
Selected : 1;
00156     UCHAR 
SelectedWithAttention : 1;
00157     UCHAR 
Reselected : 1;
00158     UCHAR 
FunctionComplete : 1;
00159     UCHAR 
BusService : 1;
00160     UCHAR 
Disconnect : 1;
00161     UCHAR 
IllegalCommand : 1;
00162     UCHAR 
ScsiReset : 1;
00163 } 
SCSI_INTERRUPT, *
PSCSI_INTERRUPT;
00164 
00165 
00166 
00167 
00168 
00169 typedef struct _SCSI_SEQUENCE_STEP {
00170     UCHAR 
Step : 3;
00171     UCHAR 
MaximumOffset : 1;
00172     UCHAR 
Reserved : 4;
00173 } 
SCSI_SEQUENCE_STEP, *
PSCSI_SEQUENCE_STEP;
00174 
00175 
00176 
00177 
00178 
00179 typedef struct _SCSI_FIFO_FLAGS {
00180     UCHAR 
ByteCount : 5;
00181     UCHAR 
FifoStep : 3;
00182 } 
SCSI_FIFO_FLAGS, *
PSCSI_FIFO_FLAGS;
00183 
00184 
00185 
00186 
00187 
00188 typedef struct _SCSI_CONFIGURATION1 {
00189     UCHAR 
HostBusId : 3;
00190     UCHAR 
ChipTestEnable : 1;
00191     UCHAR 
ParityEnable : 1;
00192     UCHAR 
ParityTestMode : 1;
00193     UCHAR 
ResetInterruptDisable : 1;
00194     UCHAR 
SlowCableMode : 1;
00195 } 
SCSI_CONFIGURATION1, *
PSCSI_CONFIGURATION1;
00196 
00197 
00198 
00199 
00200 
00201 typedef struct _SCSI_CONFIGURATION2 {
00202     UCHAR 
DmaParityEnable : 1;
00203     UCHAR 
RegisterParityEnable : 1;
00204     UCHAR 
TargetBadParityAbort : 1;
00205     UCHAR 
Scsi2 : 1;
00206     UCHAR 
HighImpedance : 1;
00207     UCHAR 
EnableByteControl : 1;
00208     UCHAR 
EnablePhaseLatch : 1;
00209     UCHAR 
ReserveFifoByte : 1;
00210 } 
SCSI_CONFIGURATION2, *
PSCSI_CONFIGURATION2;
00211 
00212 
00213 
00214 
00215 
00216 typedef struct _SCSI_CONFIGURATION3 {
00217     UCHAR 
Threshold8 : 1;
00218     UCHAR 
AlternateDmaMode : 1;
00219     UCHAR 
SaveResidualByte : 1;
00220     UCHAR 
FastClock : 1;
00221     UCHAR 
FastScsi : 1;
00222     UCHAR 
EnableCdb10 : 1;
00223     UCHAR 
EnableQueue : 1;
00224     UCHAR 
CheckIdMessage : 1;
00225 } 
SCSI_CONFIGURATION3, *
PSCSI_CONFIGURATION3;
00226 
00227 
00228 
00229 
00230 
00231 typedef struct _NCR_PART_CODE {
00232     UCHAR 
RevisionLevel : 3;
00233     UCHAR 
ChipFamily : 5;
00234 }
NCR_PART_CODE, *
PNCR_PART_CODE;
00235 
00236 #define EMULEX_FAS_216 2
00237 
00238 
00239 
00240 
00241 
00242 
#if defined(DECSTATION)
00243 
00244 
#define SCSI_READ(ChipAddr, Register) \
00245 
    (READ_REGISTER_UCHAR (&((ChipAddr)->ReadRegisters.Register.Byte)))
00246 
00247 
#define SCSI_WRITE(ChipAddr, Register, Value) \
00248 
    WRITE_REGISTER_UCHAR(&((ChipAddr)->WriteRegisters.Register.Byte), (Value))
00249 
00250 
#else
00251 
00252 #define SCSI_READ(ChipAddr, Register) \
00253 
    (READ_REGISTER_UCHAR (&((ChipAddr)->ReadRegisters.Register)))
00254 
00255 #define SCSI_WRITE(ChipAddr, Register, Value) \
00256 
    WRITE_REGISTER_UCHAR(&((ChipAddr)->WriteRegisters.Register), (Value))
00257 
00258 
#endif
00259 
00260 
00261 
#endif