Annotation of sys/arch/mvme68k/dev/sshreg.h, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: sshreg.h,v 1.5 2005/11/21 21:52:45 miod Exp $ */
2:
3: /*
4: * Copyright (c) 1995 Theo de Raadt
5: * Copyright (c) 1990 The Regents of the University of California.
6: * All rights reserved.
7: *
8: * This code is derived from software contributed to Berkeley by
9: * Van Jacobson of Lawrence Berkeley Laboratory.
10: *
11: * Redistribution and use in source and binary forms, with or without
12: * modification, are permitted provided that the following conditions
13: * are met:
14: * 1. Redistributions of source code must retain the above copyright
15: * notice, this list of conditions and the following disclaimer.
16: * 2. Redistributions in binary form must reproduce the above copyright
17: * notice, this list of conditions and the following disclaimer in the
18: * documentation and/or other materials provided with the distribution.
19: * 3. Neither the name of the University nor the names of its contributors
20: * may be used to endorse or promote products derived from this software
21: * without specific prior written permission.
22: *
23: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
24: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
27: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33: * SUCH DAMAGE.
34: *
35: * @(#)sshreg.h 7.3 (Berkeley) 2/5/91
36: */
37:
38: /*
39: * NCR 53C710 SCSI interface hardware description.
40: *
41: * From the Mach scsi driver for the 53C700
42: */
43:
44: typedef struct {
45: /*00*/ volatile unsigned char ssh_sien; /* rw: SCSI Interrupt Enable */
46: /*01*/ volatile unsigned char ssh_sdid; /* rw: SCSI Destination ID */
47: /*02*/ volatile unsigned char ssh_scntl1; /* rw: SCSI control reg 1 */
48: /*03*/ volatile unsigned char ssh_scntl0; /* rw: SCSI control reg 0 */
49: /*04*/ volatile unsigned char ssh_socl; /* rw: SCSI Output Control Latch */
50: /*05*/ volatile unsigned char ssh_sodl; /* rw: SCSI Output Data Latch */
51: /*06*/ volatile unsigned char ssh_sxfer; /* rw: SCSI Transfer reg */
52: /*07*/ volatile unsigned char ssh_scid; /* rw: SCSI Chip ID reg */
53: /*08*/ volatile unsigned char ssh_sbcl; /* ro: SCSI Bus Control Lines */
54: /*09*/ volatile unsigned char ssh_sbdl; /* ro: SCSI Bus Data Lines */
55: /*0a*/ volatile unsigned char ssh_sidl; /* ro: SCSI Input Data Latch */
56: /*0b*/ volatile unsigned char ssh_sfbr; /* ro: SCSI First Byte Received */
57: /*0c*/ volatile unsigned char ssh_sstat2; /* ro: SCSI status reg 2 */
58: /*0d*/ volatile unsigned char ssh_sstat1; /* ro: SCSI status reg 1 */
59: /*0e*/ volatile unsigned char ssh_sstat0; /* ro: SCSI status reg 0 */
60: /*0f*/ volatile unsigned char ssh_dstat; /* ro: DMA status */
61: /*10*/ volatile unsigned long ssh_dsa; /* rw: Data Structure Address */
62: /*14*/ volatile unsigned char ssh_ctest3; /* ro: Chip test register 3 */
63: /*15*/ volatile unsigned char ssh_ctest2; /* ro: Chip test register 2 */
64: /*16*/ volatile unsigned char ssh_ctest1; /* ro: Chip test register 1 */
65: /*17*/ volatile unsigned char ssh_ctest0; /* ro: Chip test register 0 */
66: /*18*/ volatile unsigned char ssh_ctest7; /* rw: Chip test register 7 */
67: /*19*/ volatile unsigned char ssh_ctest6; /* rw: Chip test register 6 */
68: /*1a*/ volatile unsigned char ssh_ctest5; /* rw: Chip test register 5 */
69: /*1b*/ volatile unsigned char ssh_ctest4; /* rw: Chip test register 4 */
70: /*1c*/ volatile unsigned long ssh_temp; /* rw: Temporary Stack reg */
71: /*20*/ volatile unsigned char ssh_lcrc; /* rw: LCRC value */
72: /*21*/ volatile unsigned char ssh_ctest8; /* rw: Chip test register 8 */
73: /*22*/ volatile unsigned char ssh_istat; /* rw: Interrupt Status reg */
74: /*23*/ volatile unsigned char ssh_dfifo; /* rw: DMA FIFO */
75: /*24*/ volatile unsigned char ssh_dcmd; /* rw: DMA Command Register */
76: /*25*/ volatile unsigned char ssh_dbc2; /* rw: DMA Byte Counter reg */
77: /*26*/ volatile unsigned char ssh_dbc1;
78: /*27*/ volatile unsigned char ssh_dbc0;
79: /*28*/ volatile unsigned long ssh_dnad; /* rw: DMA Next Address */
80: /*2c*/ volatile unsigned long ssh_dsp; /* rw: DMA SCRIPTS Pointer reg */
81: /*30*/ volatile unsigned long ssh_dsps; /* rw: DMA SCRIPTS Pointer Save reg */
82: /*34*/ volatile unsigned long ssh_scratch; /* rw: Scratch Register */
83: /*38*/ volatile unsigned char ssh_dcntl; /* rw: DMA Control reg */
84: /*39*/ volatile unsigned char ssh_dwt; /* rw: DMA Watchdog Timer */
85: /*3a*/ volatile unsigned char ssh_dien; /* rw: DMA Interrupt Enable */
86: /*3b*/ volatile unsigned char ssh_dmode; /* rw: DMA Mode reg */
87: /*3c*/ volatile unsigned long ssh_adder;
88:
89: } ssh_regmap_t;
90: typedef volatile ssh_regmap_t *ssh_regmap_p;
91:
92: /*
93: * Register defines
94: */
95:
96: /* Scsi control register 0 (scntl0) */
97:
98: #define SSH_SCNTL0_ARB 0xc0 /* Arbitration mode */
99: # define SSH_ARB_SIMPLE 0x00
100: # define SSH_ARB_FULL 0xc0
101: #define SSH_SCNTL0_START 0x20 /* Start Sequence */
102: #define SSH_SCNTL0_WATN 0x10 /* (Select) With ATN */
103: #define SSH_SCNTL0_EPC 0x08 /* Enable Parity Checking */
104: #define SSH_SCNTL0_EPG 0x04 /* Enable Parity Generation */
105: #define SSH_SCNTL0_AAP 0x02 /* Assert ATN on Parity Error */
106: #define SSH_SCNTL0_TRG 0x01 /* Target Mode */
107:
108: /* Scsi control register 1 (scntl1) */
109:
110: #define SSH_SCNTL1_EXC 0x80 /* Extra Clock Cycle of data setup */
111: #define SSH_SCNTL1_ADB 0x40 /* Assert Data Bus */
112: #define SSH_SCNTL1_ESR 0x20 /* Enable Selection/Reselection */
113: #define SSH_SCNTL1_CON 0x10 /* Connected */
114: #define SSH_SCNTL1_RST 0x08 /* Assert RST */
115: #define SSH_SCNTL1_AESP 0x04 /* Assert even SCSI parity */
116: #define SSH_SCNTL1_RES0 0x02 /* Reserved */
117: #define SSH_SCNTL1_RES1 0x01 /* Reserved */
118:
119: /* Scsi interrupt enable register (sien) */
120:
121: #define SSH_SIEN_M_A 0x80 /* Phase Mismatch or ATN active */
122: #define SSH_SIEN_FCMP 0x40 /* Function Complete */
123: #define SSH_SIEN_STO 0x20 /* (Re)Selection timeout */
124: #define SSH_SIEN_SEL 0x10 /* (Re)Selected */
125: #define SSH_SIEN_SGE 0x08 /* SCSI Gross Error */
126: #define SSH_SIEN_UDC 0x04 /* Unexpected Disconnect */
127: #define SSH_SIEN_RST 0x02 /* RST asserted */
128: #define SSH_SIEN_PAR 0x01 /* Parity Error */
129:
130: /* Scsi chip ID (scid) */
131:
132: #define SSH_SCID_VALUE(i) (1<<i)
133:
134: /* Scsi transfer register (sxfer) */
135:
136: #define SSH_SXFER_DHP 0x80 /* Disable Halt on Parity error/ ATN asserted */
137: #define SSH_SXFER_TP 0x70 /* Synch Transfer Period */
138: /* see specs for formulas:
139: Period = TCP * (4 + XFERP )
140: TCP = 1 + CLK + 1..2;
141: */
142: #define SSH_SXFER_MO 0x0f /* Synch Max Offset */
143: # define SSH_MAX_OFFSET 8
144:
145: /* Scsi output data latch register (sodl) */
146:
147: /* Scsi output control latch register (socl) */
148:
149: #define SSH_REQ 0x80 /* SCSI signal <x> asserted */
150: #define SSH_ACK 0x40
151: #define SSH_BSY 0x20
152: #define SSH_SEL 0x10
153: #define SSH_ATN 0x08
154: #define SSH_MSG 0x04
155: #define SSH_CD 0x02
156: #define SSH_IO 0x01
157:
158: #define SSH_PHASE(socl) SCSI_PHASE(socl)
159:
160: /* Scsi first byte received register (sfbr) */
161:
162: /* Scsi input data latch register (sidl) */
163:
164: /* Scsi bus data lines register (sbdl) */
165:
166: /* Scsi bus control lines register (sbcl). Same as socl */
167:
168: /* DMA status register (dstat) */
169:
170: #define SSH_DSTAT_DFE 0x80 /* DMA FIFO empty */
171: #define SSH_DSTAT_RES 0x40
172: #define SSH_DSTAT_BF 0x20 /* Bus fault */
173: #define SSH_DSTAT_ABRT 0x10 /* Aborted */
174: #define SSH_DSTAT_SSI 0x08 /* SCRIPT Single Step */
175: #define SSH_DSTAT_SIR 0x04 /* SCRIPT Interrupt Instruction */
176: #define SSH_DSTAT_WTD 0x02 /* Watchdog Timeout Detected */
177: #define SSH_DSTAT_IID 0x01 /* Invalid Instruction Detected */
178:
179: /* Scsi status register 0 (sstat0) */
180:
181: #define SSH_SSTAT0_M_A 0x80 /* Phase Mismatch or ATN active */
182: #define SSH_SSTAT0_FCMP 0x40 /* Function Complete */
183: #define SSH_SSTAT0_STO 0x20 /* (Re)Selection timeout */
184: #define SSH_SSTAT0_SEL 0x10 /* (Re)Selected */
185: #define SSH_SSTAT0_SGE 0x08 /* SCSI Gross Error */
186: #define SSH_SSTAT0_UDC 0x04 /* Unexpected Disconnect */
187: #define SSH_SSTAT0_RST 0x02 /* RST asserted */
188: #define SSH_SSTAT0_PAR 0x01 /* Parity Error */
189:
190: /* Scsi status register 1 (sstat1) */
191:
192: #define SSH_SSTAT1_ILF 0x80 /* Input latch (sidl) full */
193: #define SSH_SSTAT1_ORF 0x40 /* output reg (sodr) full */
194: #define SSH_SSTAT1_OLF 0x20 /* output latch (sodl) full */
195: #define SSH_SSTAT1_AIP 0x10 /* Arbitration in progress */
196: #define SSH_SSTAT1_LOA 0x08 /* Lost arbitration */
197: #define SSH_SSTAT1_WOA 0x04 /* Won arbitration */
198: #define SSH_SSTAT1_RST 0x02 /* SCSI RST current value */
199: #define SSH_SSTAT1_SDP 0x01 /* SCSI SDP current value */
200:
201: /* Scsi status register 2 (sstat2) */
202:
203: #define SSH_SSTAT2_FF 0xf0 /* SCSI FIFO flags (bytecount) */
204: # define SSH_SCSI_FIFO_DEEP 8
205: #define SSH_SSTAT2_SDP 0x08 /* Latched (on REQ) SCSI SDP */
206: #define SSH_SSTAT2_MSG 0x04 /* Latched SCSI phase */
207: #define SSH_SSTAT2_CD 0x02
208: #define SSH_SSTAT2_IO 0x01
209:
210: /* Chip test register 0 (ctest0) */
211:
212: #define SSH_CTEST0_RES0 0x80
213: #define SSH_CTEST0_BTD 0x40 /* Byte-to-byte Timer Disable */
214: #define SSH_CTEST0_GRP 0x20 /* Generate Receive Parity for Passthrough */
215: #define SSH_CTEST0_EAN 0x10 /* Enable Active Negation */
216: #define SSH_CTEST0_HSC 0x08 /* Halt SCSI clock */
217: #define SSH_CTEST0_ERF 0x04 /* Extend REQ/ACK Filtering */
218: #define SSH_CTEST0_RES1 0x02
219: #define SSH_CTEST0_DDIR 0x01 /* Xfer direction (1-> from SCSI bus) */
220:
221: /* Chip test register 1 (ctest1) */
222:
223: #define SSH_CTEST1_FMT 0xf0 /* Byte empty in DMA FIFO bottom (high->byte3) */
224: #define SSH_CTEST1_FFL 0x0f /* Byte full in DMA FIFO top, same */
225:
226: /* Chip test register 2 (ctest2) */
227:
228: #define SSH_CTEST2_RES 0x80
229: #define SSH_CTEST2_SIGP 0x40 /* Signal process */
230: #define SSH_CTEST2_SOFF 0x20 /* Synch Offset compare (1-> zero Init, max Tgt */
231: #define SSH_CTEST2_SFP 0x10 /* SCSI FIFO Parity */
232: #define SSH_CTEST2_DFP 0x08 /* DMA FIFO Parity */
233: #define SSH_CTEST2_TEOP 0x04 /* True EOP (a-la 5380) */
234: #define SSH_CTEST2_DREQ 0x02 /* DREQ status */
235: #define SSH_CTEST2_DACK 0x01 /* DACK status */
236:
237: /* Chip test register 3 (ctest3) read-only, top of SCSI FIFO */
238:
239: /* Chip test register 4 (ctest4) */
240:
241: #define SSH_CTEST4_MUX 0x80 /* Host bus multiplex mode */
242: #define SSH_CTEST4_ZMOD 0x40 /* High-impedance outputs */
243: #define SSH_CTEST4_SZM 0x20 /* ditto, SCSI "outputs" */
244: #define SSH_CTEST4_SLBE 0x10 /* SCSI loobpack enable */
245: #define SSH_CTEST4_SFWR 0x08 /* SCSI FIFO write enable (from sodl) */
246: #define SSH_CTEST4_FBL 0x07 /* DMA FIFO Byte Lane select (from ctest6)
247: 4->0, .. 7->3 */
248:
249: /* Chip test register 5 (ctest5) */
250:
251: #define SSH_CTEST5_ADCK 0x80 /* Clock Address Incrementor */
252: #define SSH_CTEST5_BBCK 0x40 /* Clock Byte counter */
253: #define SSH_CTEST5_ROFF 0x20 /* Reset SCSI offset */
254: #define SSH_CTEST5_MASR 0x10 /* Master set/reset pulses (of bits 3-0) */
255: #define SSH_CTEST5_DDIR 0x08 /* (re)set internal DMA direction */
256: #define SSH_CTEST5_EOP 0x04 /* (re)set internal EOP */
257: #define SSH_CTEST5_DREQ 0x02 /* (re)set internal REQ */
258: #define SSH_CTEST5_DACK 0x01 /* (re)set internal ACK */
259:
260: /* Chip test register 6 (ctest6) DMA FIFO access */
261:
262: /* Chip test register 7 (ctest7) */
263:
264: #define SSH_CTEST7_CDIS 0x80 /* Cache burst disable */
265: #define SSH_CTEST7_SC1 0x40 /* Snoop control 1 */
266: #define SSH_CTEST7_SC0 0x20 /* Snoop control 0 */
267: #define SSH_CTEST7_INHIBIT (0 << 5)
268: #define SSH_CTEST7_SNOOP (1 << 5)
269: #define SSH_CTEST7_INVAL (2 << 5)
270: #define SSH_CTEST7_RESV (3 << 5)
271: #define SSH_CTEST7_STD 0x10 /* Selection timeout disable */
272: #define SSH_CTEST7_DFP 0x08 /* DMA FIFO parity bit */
273: #define SSH_CTEST7_EVP 0x04 /* Even parity (to host bus) */
274: #define SSH_CTEST7_TT1 0x02 /* Transfer type bit */
275: #define SSH_CTEST7_DIFF 0x01 /* Differential mode */
276:
277: /* DMA FIFO register (dfifo) */
278:
279: #define SSH_DFIFO_RES 0x80
280: #define SSH_DFIFO_BO 0x7f /* FIFO byte offset counter */
281:
282: /* Interrupt status register (istat) */
283:
284: #define SSH_ISTAT_ABRT 0x80 /* Abort operation */
285: #define SSH_ISTAT_RST 0x40 /* Software reset */
286: #define SSH_ISTAT_SIGP 0x20 /* Signal process */
287: #define SSH_ISTAT_RES 0x10
288: #define SSH_ISTAT_CON 0x08 /* Connected */
289: #define SSH_ISTAT_RES1 0x04
290: #define SSH_ISTAT_SIP 0x02 /* SCSI Interrupt pending */
291: #define SSH_ISTAT_DIP 0x01 /* DMA Interrupt pending */
292:
293: /* Chip test register 8 (ctest8) */
294:
295: #define SSH_CTEST8_V 0xf0 /* Chip revision level */
296: #define SSH_CTEST8_FLF 0x08 /* Flush DMA FIFO */
297: #define SSH_CTEST8_CLF 0x04 /* Clear DMA and SCSI FIFOs */
298: #define SSH_CTEST8_FM 0x02 /* Fetch pin mode */
299: #define SSH_CTEST8_SM 0x01 /* Snoop pins mode */
300:
301: /* DMA Mode register (dmode) */
302:
303: #define SSH_DMODE_BL_MASK 0xc0 /* 0->1 1->2 2->4 3->8 */
304: #define SSH_DMODE_FC 0x30 /* Function code */
305: #define SSH_DMODE_PD 0x08 /* Program/data */
306: #define SSH_DMODE_FAM 0x04 /* Fixed address mode */
307: #define SSH_DMODE_U0 0x02 /* User programmable transfer type */
308: #define SSH_DMODE_MAN 0x01 /* Manual start mode */
309:
310: /* DMA interrupt enable register (dien) */
311:
312: #define SSH_DIEN_RES 0xc0
313: #define SSH_DIEN_BF 0x20 /* On Bus Fault */
314: #define SSH_DIEN_ABRT 0x10 /* On Abort */
315: #define SSH_DIEN_SSI 0x08 /* On SCRIPTS sstep */
316: #define SSH_DIEN_SIR 0x04 /* On SCRIPTS intr instruction */
317: #define SSH_DIEN_WTD 0x02 /* On watchdog timeout */
318: #define SSH_DIEN_IID 0x01 /* On illegal instruction detected */
319:
320: /* DMA control register (dcntl) */
321:
322: #define SSH_DCNTL_CF_MASK 0xc0 /* Clock frequency dividers:
323: 0 --> 37.51..50.00 MHz, div=2
324: 1 --> 25.01..37.50 MHz, div=1.5
325: 2 --> 16.67..25.00 MHz, div=1
326: 3 --> 50.01..66.67 MHz, div=3
327: */
328: #define SSH_DCNTL_EA 0x20 /* Enable ack */
329: #define SSH_DCNTL_SSM 0x10 /* Single step mode */
330: #define SSH_DCNTL_LLM 0x08 /* Enable SCSI Low-level mode */
331: #define SSH_DCNTL_STD 0x04 /* Start DMA operation */
332: #define SSH_DCNTL_FA 0x02 /* Fast arbitration */
333: #define SSH_DCNTL_COM 0x01 /* 53C700 compatibility */
CVSweb