|
|
1.1 root 1: /*++
2:
3: Copyright (c) 1990 Microsoft Corporation
4:
5: Module Name:
6:
7: ncr53c9x.h
8:
9: Abstract:
10:
11: The module defines the structures, defines and functions for the NCR 53c9x
12: family of host bus adapter chips.
13:
14: Author:
15:
16: Jeff Havens (jhavens) 28-Feb-1991
17:
18: Revision History:
19:
20: --*/
21:
22: #ifndef _NCR53C9X_
23: #define _NCR53C9X_
24:
25:
26: //
27: // Define SCSI Protocol Chip register format.
28: //
29:
30: #if defined(DECSTATION)
31:
32: typedef struct _SCSI_REGISTER {
33: UCHAR Byte;
34: UCHAR Fill[3];
35: } SCSI_REGISTER, *PSCSI_REGISTER;
36:
37: #else
38:
39: #define SCSI_REGISTER UCHAR
40:
41: #endif // DECSTATION
42:
43: //
44: // SCSI Protocol Chip Definitions.
45: //
46: // Define SCSI Protocol Chip Read registers structure.
47: //
48:
49: typedef struct _SCSI_READ_REGISTERS {
50: SCSI_REGISTER TransferCountLow;
51: SCSI_REGISTER TransferCountHigh;
52: SCSI_REGISTER Fifo;
53: SCSI_REGISTER Command;
54: SCSI_REGISTER ScsiStatus;
55: SCSI_REGISTER ScsiInterrupt;
56: SCSI_REGISTER SequenceStep;
57: SCSI_REGISTER FifoFlags;
58: SCSI_REGISTER Configuration1;
59: SCSI_REGISTER Reserved1;
60: SCSI_REGISTER Reserved2;
61: SCSI_REGISTER Configuration2;
62: SCSI_REGISTER Configuration3;
63: SCSI_REGISTER Configuration4;
64: SCSI_REGISTER TransferCountPage;
65: SCSI_REGISTER FifoBottem;
66: } SCSI_READ_REGISTERS, *PSCSI_READ_REGISTERS;
67:
68: //
69: // Define SCSI Protocol Chip Write registers structure.
70: //
71:
72: typedef struct _SCSI_WRITE_REGISTERS {
73: SCSI_REGISTER TransferCountLow;
74: SCSI_REGISTER TransferCountHigh;
75: SCSI_REGISTER Fifo;
76: SCSI_REGISTER Command;
77: SCSI_REGISTER DestinationId;
78: SCSI_REGISTER SelectTimeOut;
79: SCSI_REGISTER SynchronousPeriod;
80: SCSI_REGISTER SynchronousOffset;
81: SCSI_REGISTER Configuration1;
82: SCSI_REGISTER ClockConversionFactor;
83: SCSI_REGISTER TestMode;
84: SCSI_REGISTER Configuration2;
85: SCSI_REGISTER Configuration3;
86: SCSI_REGISTER Configuration4;
87: SCSI_REGISTER TransferCountPage;
88: SCSI_REGISTER FifoBottem;
89: } SCSI_WRITE_REGISTERS, *PSCSI_WRITE_REGISTERS;
90:
91: typedef union _SCSI_REGISTERS {
92: SCSI_READ_REGISTERS ReadRegisters;
93: SCSI_WRITE_REGISTERS WriteRegisters;
94: } SCSI_REGISTERS, *PSCSI_REGISTERS;
95:
96: //
97: // Define SCSI Command Codes.
98: //
99:
100: #define NO_OPERATION_DMA 0x80
101: #define FLUSH_FIFO 0x1
102: #define RESET_SCSI_CHIP 0x2
103: #define RESET_SCSI_BUS 0x3
104: #define TRANSFER_INFORMATION 0x10
105: #define TRANSFER_INFORMATION_DMA 0x90
106: #define COMMAND_COMPLETE 0x11
107: #define MESSAGE_ACCEPTED 0x12
108: #define TRANSFER_PAD 0x18
109: #define SET_ATTENTION 0x1a
110: #define RESET_ATTENTION 0x1b
111: #define RESELECT 0x40
112: #define SELECT_WITHOUT_ATTENTION 0x41
113: #define SELECT_WITH_ATTENTION 0x42
114: #define SELECT_WITH_ATTENTION_STOP 0x43
115: #define ENABLE_SELECTION_RESELECTION 0x44
116: #define DISABLE_SELECTION_RESELECTION 0x45
117: #define SELECT_WITH_ATTENTION3 0x46
118:
119: //
120: // Define SCSI Status Register structure.
121: //
122: typedef struct _SCSI_STATUS {
123: UCHAR Phase : 3;
124: UCHAR ValidGroup : 1;
125: UCHAR TerminalCount : 1;
126: UCHAR ParityError : 1;
127: UCHAR GrossError : 1;
128: UCHAR Interrupt : 1;
129: } SCSI_STATUS, *PSCSI_STATUS;
130:
131: //
132: // Define SCSI Phase Codes.
133: //
134:
135: #define DATA_OUT 0x0
136: #define DATA_IN 0x1
137: #define COMMAND_OUT 0x2
138: #define STATUS_IN 0x3
139: #define MESSAGE_OUT 0x6
140: #define MESSAGE_IN 0x7
141:
142: //
143: // Define SCSI Interrupt Register structure.
144: //
145:
146: typedef struct _SCSI_INTERRUPT {
147: UCHAR Selected : 1;
148: UCHAR SelectedWithAttention : 1;
149: UCHAR Reselected : 1;
150: UCHAR FunctionComplete : 1;
151: UCHAR BusService : 1;
152: UCHAR Disconnect : 1;
153: UCHAR IllegalCommand : 1;
154: UCHAR ScsiReset : 1;
155: } SCSI_INTERRUPT, *PSCSI_INTERRUPT;
156:
157: //
158: // Define SCSI Sequence Step Register structure.
159: //
160:
161: typedef struct _SCSI_SEQUENCE_STEP {
162: UCHAR Step : 3;
163: UCHAR MaximumOffset : 1;
164: UCHAR Reserved : 4;
165: } SCSI_SEQUENCE_STEP, *PSCSI_SEQUENCE_STEP;
166:
167: //
168: // Define SCSI Fifo Flags Register structure.
169: //
170:
171: typedef struct _SCSI_FIFO_FLAGS {
172: UCHAR ByteCount : 5;
173: UCHAR FifoStep : 3;
174: } SCSI_FIFO_FLAGS, *PSCSI_FIFO_FLAGS;
175:
176: //
177: // Define SCSI Configuration 1 Register structure.
178: //
179:
180: typedef struct _SCSI_CONFIGURATION1 {
181: UCHAR HostBusId : 3;
182: UCHAR ChipTestEnable : 1;
183: UCHAR ParityEnable : 1;
184: UCHAR ParityTestMode : 1;
185: UCHAR ResetInterruptDisable : 1;
186: UCHAR SlowCableMode : 1;
187: } SCSI_CONFIGURATION1, *PSCSI_CONFIGURATION1;
188:
189: //
190: // Define SCSI Configuration 2 Register structure.
191: //
192:
193: typedef struct _SCSI_CONFIGURATION2 {
194: UCHAR DmaParityEnable : 1;
195: UCHAR RegisterParityEnable : 1;
196: UCHAR TargetBadParityAbort : 1;
197: UCHAR Scsi2 : 1;
198: UCHAR HighImpedance : 1;
199: UCHAR EnableByteControl : 1;
200: UCHAR EnablePhaseLatch : 1;
201: UCHAR ReserveFifoByte : 1;
202: } SCSI_CONFIGURATION2, *PSCSI_CONFIGURATION2;
203:
204: //
205: // Define SCSI Configuration 3 Register structure.
206: //
207:
208: typedef struct _SCSI_CONFIGURATION3 {
209: UCHAR Threshold8 : 1;
210: UCHAR AlternateDmaMode : 1;
211: UCHAR SaveResidualByte : 1;
212: UCHAR FastClock : 1;
213: UCHAR FastScsi : 1;
214: UCHAR EnableCdb10 : 1;
215: UCHAR EnableQueue : 1;
216: UCHAR CheckIdMessage : 1;
217: } SCSI_CONFIGURATION3, *PSCSI_CONFIGURATION3;
218:
219: //
220: // Define SCSI Configuration 4 Register structure.
221: //
222:
223: typedef struct _SCSI_CONFIGURATION4 {
224: UCHAR ActiveNegation : 1;
225: UCHAR TestTransferCounter : 1;
226: UCHAR BackToBackTransfer : 1;
227: UCHAR Reserved : 5;
228: } SCSI_CONFIGURATION4, *PSCSI_CONFIGURATION4;
229:
230: //
231: // Define Emulex FAS 218 unique part Id code.
232: //
233:
234: typedef struct _NCR_PART_CODE {
235: UCHAR RevisionLevel : 3;
236: UCHAR ChipFamily : 5;
237: }NCR_PART_CODE, *PNCR_PART_CODE;
238:
239: #define EMULEX_FAS_216 2
240: #define NCR_53c96 0x14
241:
242: //
243: // SCSI Protocol Chip Control read and write macros.
244: //
245:
246: #if defined(DECSTATION)
247:
248: #define SCSI_READ(ChipAddr, Register) \
249: (READ_REGISTER_UCHAR (&((ChipAddr)->ReadRegisters.Register.Byte)))
250:
251: #define SCSI_WRITE(ChipAddr, Register, Value) \
252: WRITE_REGISTER_UCHAR(&((ChipAddr)->WriteRegisters.Register.Byte), (Value))
253:
254: #else
255:
256: #define SCSI_READ(ChipAddr, Register) \
257: (READ_REGISTER_UCHAR (&((ChipAddr)->ReadRegisters.Register)))
258:
259: #define SCSI_WRITE(ChipAddr, Register, Value) \
260: WRITE_REGISTER_UCHAR(&((ChipAddr)->WriteRegisters.Register), (Value))
261:
262: #endif
263:
264:
265: //
266: // Define SCSI Adapter Specific Read registers structure
267: //
268:
269: typedef struct _ADAPTER_READ_REGISTERS {
270: UCHAR Reserved00;
271: UCHAR Reserved01;
272: UCHAR OptionSelect1;
273: UCHAR OptionSelect2;
274: UCHAR Reserved04;
275: UCHAR OptionSelect5;
276: UCHAR Reserved06;
277: UCHAR Reserved07;
278: UCHAR Reserved08;
279: UCHAR Reserved09;
280: UCHAR Reserved0a;
281: UCHAR Reserved0b;
282: UCHAR DmaStatus;
283: UCHAR Reserved0d;
284: UCHAR Reserved0e;
285: UCHAR Reserved0f;
286: } ADAPTER_READ_REGISTERS, *PADAPTER_READ_REGISTERS;
287:
288: //
289: // Define SCSI Adapter Specific Write registers structure
290: //
291:
292: typedef struct _ADAPTER_WRITE_REGISTERS {
293: UCHAR Reserved00;
294: UCHAR Reserved01;
295: UCHAR OptionSelect1;
296: UCHAR OptionSelect2;
297: UCHAR Reserved04;
298: UCHAR OptionSelect5;
299: UCHAR Reserved06;
300: UCHAR Reserved07;
301: UCHAR Reserved08;
302: UCHAR Reserved09;
303: UCHAR DmaDecode;
304: UCHAR Reserved0b;
305: UCHAR Reserved0c;
306: UCHAR Reserved0d;
307: UCHAR Reserved0e;
308: UCHAR Reserved0f;
309: } ADAPTER_WRITE_REGISTERS, *PADAPTER_WRITE_REGISTERS;
310:
311:
312:
313: typedef union _ADAPTER_REGISTERS {
314: ADAPTER_READ_REGISTERS ReadRegisters;
315: ADAPTER_WRITE_REGISTERS WriteRegisters;
316: } ADAPTER_REGISTERS, *PADAPTER_REGISTERS;
317:
318:
319:
320: //
321: // Define Option Select Register structures.
322: //
323:
324: typedef struct _POS_DATA_1 {
325: UCHAR AdapterEnable : 1;
326: UCHAR IoAddressSelects : 3;
327: UCHAR InterruptSelects : 2;
328: UCHAR InterruptEnable : 1;
329: UCHAR Reserved : 1;
330: } POS_DATA_1, *PPOS_DATA_1;
331:
332: typedef struct _POS_DATA_2 {
333: UCHAR DmaSelects : 3;
334: UCHAR UnusedDmaSelect : 1;
335: UCHAR AdapterFairness : 1;
336: UCHAR PreemptCount : 2;
337: UCHAR DmaEnable : 1;
338: } POS_DATA_2, *PPOS_DATA_2;
339:
340: typedef struct _POS_DATA_3 {
341: UCHAR Reserved : 3;
342: UCHAR SramAddressSelects : 3; // 7f4c only
343: UCHAR HostIdSelects : 2; // 7f4c only
344: } POS_DATA_3, *PPOS_DATA_3;
345:
346: typedef struct _POS_DATA_4 {
347: UCHAR Reserved0 : 5;
348: UCHAR HostIdSelects : 1; // 7f4d & 7f4f only
349: UCHAR Reserved1 : 2;
350: } POS_DATA_4, *PPOS_DATA_4;
351:
352: //
353: // Define SCSI Dma Status Register structure.
354: //
355:
356: typedef struct _SCSI_DMA_STATUS {
357: UCHAR Interrupt : 1;
358: UCHAR DmaRequest : 1;
359: UCHAR Reserved : 6;
360: } SCSI_DMA_STATUS, *PSCSI_DMA_STATUS;
361:
362: //
363: // Adapter configuration Information.
364: //
365:
366: #define ONBOARD_C94_ADAPTER_ID 0x7f4c
367: #define ONBOARD_C90_ADAPTER_ID 0x7f4d
368: #define PLUGIN_C90_ADAPTER_ID 0x7f4f
369:
370: typedef struct _POS_DATA {
371: USHORT AdapterId;
372: UCHAR OptionData1;
373: UCHAR OptionData2;
374: UCHAR OptionData3;
375: UCHAR OptionData4;
376: } POS_DATA, *PPOS_DATA;
377:
378: typedef struct _INIT_DATA {
379: ULONG AdapterId;
380: ULONG CardSlot;
381: POS_DATA PosData[8];
382: }INIT_DATA, *PINIT_DATA;
383:
384: static const PVOID
385: AdapterBaseAddress[] = {
386: (PVOID) 0x0000,
387: (PVOID) 0x0240,
388: (PVOID) 0x0340,
389: (PVOID) 0x0400,
390: (PVOID) 0x0420,
391: (PVOID) 0x3240,
392: (PVOID) 0x8240,
393: (PVOID) 0xa240
394: };
395:
396: static const UCHAR
397: AdapterInterruptLevel[] = {
398: 0x03,
399: 0x05,
400: 0x07,
401: 0x09
402: };
403:
404: static const UCHAR
405: AdapterDmaLevel[] = {
406: 0x00,
407: 0x01,
408: 0x02, // invalid setting
409: 0x03,
410: 0x04, // invalid setting
411: 0x05,
412: 0x06,
413: 0x07
414: };
415:
416: static const UCHAR
417: AdapterScsiIdC90[] = {
418: 0x06,
419: 0x07
420: };
421:
422: static const UCHAR
423: AdapterScsiIdC94[] = {
424: 0x04,
425: 0x05,
426: 0x06,
427: 0x07
428: };
429:
430: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.