siopreg.h revision 1.13 1 1.13 bouyer /* $NetBSD: siopreg.h,v 1.13 2002/08/29 16:43:23 bouyer Exp $ */
2 1.1 bouyer
3 1.1 bouyer /*
4 1.1 bouyer * Copyright (c) 2000 Manuel Bouyer.
5 1.1 bouyer *
6 1.1 bouyer * Redistribution and use in source and binary forms, with or without
7 1.1 bouyer * modification, are permitted provided that the following conditions
8 1.1 bouyer * are met:
9 1.1 bouyer * 1. Redistributions of source code must retain the above copyright
10 1.1 bouyer * notice, this list of conditions and the following disclaimer.
11 1.1 bouyer * 2. Redistributions in binary form must reproduce the above copyright
12 1.1 bouyer * notice, this list of conditions and the following disclaimer in the
13 1.1 bouyer * documentation and/or other materials provided with the distribution.
14 1.1 bouyer * 3. All advertising materials mentioning features or use of this software
15 1.1 bouyer * must display the following acknowledgement:
16 1.11 bouyer * This product includes software developed by Manuel Bouyer.
17 1.3 bouyer * 4. The name of the author may not be used to endorse or promote products
18 1.3 bouyer * derived from this software without specific prior written permission.
19 1.1 bouyer *
20 1.5 bouyer * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
21 1.5 bouyer * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
22 1.5 bouyer * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
23 1.5 bouyer * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
24 1.5 bouyer * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
25 1.5 bouyer * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 1.5 bouyer * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 1.5 bouyer * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 1.5 bouyer * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
29 1.5 bouyer * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 1.1 bouyer *
31 1.1 bouyer */
32 1.1 bouyer
33 1.1 bouyer /*
34 1.1 bouyer * Devices definitions for Symbios/NCR M53c8xx PCI-SCSI I/O Processors
35 1.1 bouyer * Docs available from http://www.symbios.com/
36 1.1 bouyer */
37 1.1 bouyer
38 1.1 bouyer #define SIOP_SCNTL0 0x00 /* SCSI control 0, R/W */
39 1.1 bouyer #define SCNTL0_ARB_MASK 0xc0
40 1.1 bouyer #define SCNTL0_SARB 0x00
41 1.1 bouyer #define SCNTL0_FARB 0xc0
42 1.1 bouyer #define SCNTL0_START 0x20
43 1.1 bouyer #define SCNTL0_WATM 0x10
44 1.1 bouyer #define SCNTL0_EPC 0x08
45 1.1 bouyer #define SCNTL0_AAP 0x02
46 1.1 bouyer #define SCNTL0_TRG 0x01
47 1.1 bouyer
48 1.1 bouyer #define SIOP_SCNTL1 0x01 /* SCSI control 1, R/W */
49 1.1 bouyer #define SCNTL1_EXC 0x80
50 1.1 bouyer #define SCNTL1_ADB 0x40
51 1.1 bouyer #define SCNTL1_DHP 0x20
52 1.1 bouyer #define SCNTL1_CON 0x10
53 1.1 bouyer #define SCNTL1_RST 0x08
54 1.1 bouyer #define SCNTL1_AESP 0x04
55 1.1 bouyer #define SCNTL1_IARB 0x02
56 1.1 bouyer #define SCNTL1_SST 0x01
57 1.1 bouyer
58 1.1 bouyer #define SIOP_SCNTL2 0x02 /* SCSI control 2, R/W */
59 1.1 bouyer #define SCNTL2_SDU 0x80
60 1.1 bouyer #define SCNTL2_CHM 0x40 /* 875 only */
61 1.1 bouyer #define SCNTL2_SLPMD 0x20 /* 875 only */
62 1.1 bouyer #define SCNTL2_SLPHBEN 0x10 /* 875 only */
63 1.1 bouyer #define SCNTL2_WSS 0x08 /* 875 only */
64 1.1 bouyer #define SCNTL2_VUE0 0x04 /* 875 only */
65 1.1 bouyer #define SCNTL2_VUE1 0x02 /* 875 only */
66 1.1 bouyer #define SCNTL2_WSR 0x01 /* 875 only */
67 1.1 bouyer
68 1.1 bouyer #define SIOP_SCNTL3 0x03 /* SCSI control 3, R/W */
69 1.1 bouyer #define SCNTL3_ULTRA 0x80 /* 875 only */
70 1.1 bouyer #define SCNTL3_SCF_SHIFT 4
71 1.1 bouyer #define SCNTL3_SCF_MASK 0x70
72 1.4 bouyer #define SCNTL3_EWS 0x08 /* 875 only */
73 1.1 bouyer #define SCNTL3_CCF_SHIFT 0
74 1.5 bouyer #define SCNTL3_CCF_MASK 0x07
75 1.1 bouyer
76 1.4 bouyer /* periods for various SCF values, assume transfer period of 4 */
77 1.4 bouyer struct scf_period {
78 1.4 bouyer int clock; /* clock period (ns * 10) */
79 1.4 bouyer int period; /* scsi period, as set in the SDTR message */
80 1.4 bouyer int scf; /* scf value to use */
81 1.4 bouyer };
82 1.4 bouyer
83 1.5 bouyer static const struct scf_period scf_period[] __attribute__((__unused__)) = {
84 1.10 bouyer {250, 25, 1}, /* 10.0 Mhz */
85 1.10 bouyer {250, 37, 2}, /* 6.67 Mhz */
86 1.10 bouyer {250, 50, 3}, /* 5.00 Mhz */
87 1.10 bouyer {250, 75, 4}, /* 3.33 Mhz */
88 1.10 bouyer {125, 12, 1}, /* 20.0 Mhz */
89 1.10 bouyer {125, 18, 2}, /* 13.3 Mhz */
90 1.10 bouyer {125, 25, 3}, /* 10.0 Mhz */
91 1.10 bouyer {125, 37, 4}, /* 6.67 Mhz */
92 1.10 bouyer {125, 50, 5}, /* 5.0 Mhz */
93 1.10 bouyer { 62, 10, 1}, /* 40.0 Mhz */
94 1.10 bouyer { 62, 12, 3}, /* 20.0 Mhz */
95 1.10 bouyer { 62, 18, 4}, /* 13.3 Mhz */
96 1.10 bouyer { 62, 25, 5}, /* 10.0 Mhz */
97 1.10 bouyer };
98 1.10 bouyer
99 1.10 bouyer static const struct scf_period dt_scf_period[] __attribute__((__unused__)) = {
100 1.10 bouyer { 62, 9, 1}, /* 80.0 Mhz */
101 1.10 bouyer { 62, 10, 3}, /* 40.0 Mhz */
102 1.10 bouyer { 62, 12, 5}, /* 20.0 Mhz */
103 1.10 bouyer { 62, 18, 6}, /* 13.3 Mhz */
104 1.10 bouyer { 62, 25, 7}, /* 10.0 Mhz */
105 1.4 bouyer };
106 1.4 bouyer
107 1.1 bouyer #define SIOP_SCID 0x04 /* SCSI chip ID R/W */
108 1.1 bouyer #define SCID_RRE 0x40
109 1.1 bouyer #define SCID_SRE 0x20
110 1.1 bouyer #define SCID_ENCID_SHIFT 0
111 1.1 bouyer #define SCID_ENCID_MASK 0x07
112 1.1 bouyer
113 1.7 bouyer #define SIOP_SXFER 0x05 /* SCSI transfer, R/W */
114 1.7 bouyer #define SXFER_TP_SHIFT 5
115 1.7 bouyer #define SXFER_TP_MASK 0xe0
116 1.7 bouyer #define SXFER_MO_SHIFT 0
117 1.10 bouyer #define SXFER_MO_MASK 0x3f
118 1.1 bouyer
119 1.1 bouyer #define SIOP_SDID 0x06 /* SCSI destiation ID, R/W */
120 1.1 bouyer #define SDID_ENCID_SHIFT 0
121 1.1 bouyer #define SDID_ENCID_MASK 0x07
122 1.1 bouyer
123 1.1 bouyer #define SIOP_GPREG 0x07 /* General purpose, R/W */
124 1.1 bouyer #define GPREG_GPIO4 0x10 /* 875 only */
125 1.1 bouyer #define GPREG_GPIO3 0x08 /* 875 only */
126 1.1 bouyer #define GPREG_GPIO2 0x04 /* 875 only */
127 1.1 bouyer #define GPREG_GPIO1 0x02
128 1.1 bouyer #define GPREG_GPIO0 0x01
129 1.1 bouyer
130 1.1 bouyer #define SIOP_SFBR 0x08 /* SCSI first byte received, R/W */
131 1.1 bouyer
132 1.1 bouyer #define SIOP_SOCL 0x09 /* SCSI output control latch, RW */
133 1.1 bouyer
134 1.1 bouyer #define SIOP_SSID 0x0A /* SCSI selector ID, RO */
135 1.1 bouyer #define SSID_VAL 0x80
136 1.1 bouyer #define SSID_ENCID_SHIFT 0
137 1.1 bouyer #define SSID_ENCID_MASK 0x0f
138 1.1 bouyer
139 1.1 bouyer #define SIOP_SBCL 0x0B /* SCSI control line, RO */
140 1.1 bouyer
141 1.1 bouyer #define SIOP_DSTAT 0x0C /* DMA status, RO */
142 1.1 bouyer #define DSTAT_DFE 0x80
143 1.1 bouyer #define DSTAT_MDPE 0x40
144 1.1 bouyer #define DSTAT_BF 0x20
145 1.1 bouyer #define DSTAT_ABRT 0x10
146 1.1 bouyer #define DSTAT_SSI 0x08
147 1.1 bouyer #define DSTAT_SIR 0x04
148 1.1 bouyer #define DSTAT_IID 0x01
149 1.1 bouyer
150 1.1 bouyer #define SIOP_SSTAT0 0x0D /* STSI status 0, RO */
151 1.1 bouyer #define SSTAT0_ILF 0x80
152 1.1 bouyer #define SSTAT0_ORF 0x40
153 1.1 bouyer #define SSTAT0_OLF 0x20
154 1.1 bouyer #define SSTAT0_AIP 0x10
155 1.1 bouyer #define SSTAT0_LOA 0x08
156 1.1 bouyer #define SSTAT0_WOA 0x04
157 1.1 bouyer #define SSTAT0_RST 0x02
158 1.1 bouyer #define SSTAT0_SDP 0x01
159 1.1 bouyer
160 1.1 bouyer #define SIOP_SSTAT1 0x0E /* STSI status 1, RO */
161 1.1 bouyer #define SSTAT1_FFO_SHIFT 4
162 1.1 bouyer #define SSTAT1_FFO_MASK 0x80
163 1.1 bouyer #define SSTAT1_SDPL 0x08
164 1.1 bouyer #define SSTAT1_MSG 0x04
165 1.1 bouyer #define SSTAT1_CD 0x02
166 1.1 bouyer #define SSTAT1_IO 0x01
167 1.1 bouyer #define SSTAT1_PHASE_MASK (SSTAT1_IO | SSTAT1_CD | SSTAT1_MSG)
168 1.1 bouyer #define SSTAT1_PHASE_DATAOUT 0
169 1.1 bouyer #define SSTAT1_PHASE_DATAIN SSTAT1_IO
170 1.1 bouyer #define SSTAT1_PHASE_CMD SSTAT1_CD
171 1.1 bouyer #define SSTAT1_PHASE_STATUS (SSTAT1_CD | SSTAT1_IO)
172 1.1 bouyer #define SSTAT1_PHASE_MSGOUT (SSTAT1_MSG | SSTAT1_CD)
173 1.1 bouyer #define SSTAT1_PHASE_MSGIN (SSTAT1_MSG | SSTAT1_CD | SSTAT1_IO)
174 1.1 bouyer
175 1.1 bouyer #define SIOP_SSTAT2 0x0F /* STSI status 2, RO */
176 1.1 bouyer #define SSTAT2_ILF1 0x80 /* 875 only */
177 1.1 bouyer #define SSTAT2_ORF1 0x40 /* 875 only */
178 1.1 bouyer #define SSTAT2_OLF1 0x20 /* 875 only */
179 1.1 bouyer #define SSTAT2_FF4 0x10 /* 875 only */
180 1.1 bouyer #define SSTAT2_SPL1 0x08 /* 875 only */
181 1.1 bouyer #define SSTAT2_DF 0x04 /* 875 only */
182 1.1 bouyer #define SSTAT2_LDSC 0x02
183 1.1 bouyer #define SSTAT2_SDP1 0x01 /* 875 only */
184 1.1 bouyer
185 1.1 bouyer #define SIOP_DSA 0x10 /* data struct addr, R/W */
186 1.1 bouyer
187 1.1 bouyer #define SIOP_ISTAT 0x14 /* IRQ status, R/W */
188 1.1 bouyer #define ISTAT_ABRT 0x80
189 1.1 bouyer #define ISTAT_SRST 0x40
190 1.1 bouyer #define ISTAT_SIGP 0x20
191 1.1 bouyer #define ISTAT_SEM 0x10
192 1.1 bouyer #define ISTAT_CON 0x08
193 1.1 bouyer #define ISTAT_INTF 0x04
194 1.1 bouyer #define ISTAT_SIP 0x02
195 1.1 bouyer #define ISTAT_DIP 0x01
196 1.1 bouyer
197 1.1 bouyer #define SIOP_CTEST0 0x18 /* Chip test 0, R/W */
198 1.1 bouyer
199 1.1 bouyer #define SIOP_CTEST1 0x19 /* Chip test 1, R/W */
200 1.1 bouyer
201 1.1 bouyer #define SIOP_CTEST2 0x1A /* Chip test 2, R/W */
202 1.1 bouyer #define CTEST2_SRTCH 0x04 /* 875 only */
203 1.1 bouyer
204 1.1 bouyer #define SIOP_CTEST3 0x1B /* Chip test 3, R/W */
205 1.1 bouyer #define CTEST3_FLF 0x08
206 1.1 bouyer #define CTEST3_CLF 0x04
207 1.1 bouyer #define CTEST3_FM 0x02
208 1.1 bouyer #define CTEST3_WRIE 0x01
209 1.1 bouyer
210 1.1 bouyer #define SIOP_TEMP 0x1C /* Temp register (used by CALL/RET), R/W */
211 1.1 bouyer
212 1.1 bouyer #define SIOP_DFIFO 0x20 /* DMA FIFO */
213 1.1 bouyer
214 1.1 bouyer #define SIOP_CTEST4 0x21 /* Chip test 4, R/W */
215 1.1 bouyer #define CTEST4_BDIS 0x80
216 1.1 bouyer #define CTEST_ZMOD 0x40
217 1.1 bouyer #define CTEST_ZSD 0x20
218 1.1 bouyer #define CTEST_SRTM 0x10
219 1.1 bouyer #define CTEST_MPEE 0x08
220 1.1 bouyer
221 1.1 bouyer #define SIOP_CTEST5 0x22 /* Chip test 5, R/W */
222 1.1 bouyer #define CTEST5_ADCK 0x80
223 1.1 bouyer #define CTEST5_BBCK 0x40
224 1.5 bouyer #define CTEST5_DFS 0x20
225 1.1 bouyer #define CTEST5_MASR 0x10
226 1.1 bouyer #define CTEST5_DDIR 0x08
227 1.5 bouyer #define CTEST5_BOMASK 0x03
228 1.1 bouyer
229 1.1 bouyer #define SIOP_CTEST6 0x23 /* Chip test 6, R/W */
230 1.1 bouyer
231 1.1 bouyer #define SIOP_DBC 0x24 /* DMA byte counter, R/W */
232 1.1 bouyer
233 1.1 bouyer #define SIOP_DCMD 0x27 /* DMA command, R/W */
234 1.1 bouyer
235 1.1 bouyer #define SIOP_DNAD 0x28 /* DMA next addr, R/W */
236 1.1 bouyer
237 1.1 bouyer #define SIOP_DSP 0x2C /* DMA scripts pointer, R/W */
238 1.1 bouyer
239 1.1 bouyer #define SIOP_DSPS 0x30 /* DMA scripts pointer save, R/W */
240 1.1 bouyer
241 1.1 bouyer #define SIOP_SCRATCHA 0x34 /* scratch register A. R/W */
242 1.1 bouyer
243 1.1 bouyer #define SIOP_DMODE 0x38 /* DMA mode, R/W */
244 1.1 bouyer #define DMODE_BL_SHIFT 6
245 1.1 bouyer #define DMODE_BL_MASK 0xC0
246 1.1 bouyer #define DMODE_SIOM 0x20
247 1.1 bouyer #define DMODE_DIOM 0x10
248 1.1 bouyer #define DMODE_ERL 0x08
249 1.1 bouyer #define DMODE_ERMP 0x04
250 1.1 bouyer #define DMODE_BOF 0x02
251 1.1 bouyer #define DMODE_MAN 0x01
252 1.1 bouyer
253 1.1 bouyer #define SIOP_DIEN 0x39 /* DMA interrupt enable, R/W */
254 1.1 bouyer #define DIEN_MDPE 0x40
255 1.1 bouyer #define DIEN_BF 0x20
256 1.1 bouyer #define DIEN_AVRT 0x10
257 1.1 bouyer #define DIEN_SSI 0x08
258 1.1 bouyer #define DIEN_SIR 0x04
259 1.1 bouyer #define DIEN_IID 0x01
260 1.1 bouyer
261 1.1 bouyer #define SIOP_SBR 0x3A /* scratch byte register, R/W */
262 1.1 bouyer
263 1.1 bouyer #define SIOP_DCNTL 0x3B /* DMA control, R/W */
264 1.1 bouyer #define DCNTL_CLSE 0x80
265 1.1 bouyer #define DCNTL_PFF 0x40
266 1.1 bouyer #define DCNTL_PFEN 0x20
267 1.1 bouyer #define DCNTL_SSM 0x10
268 1.1 bouyer #define DCNTL_IRQM 0x08
269 1.1 bouyer #define DCNTL_STD 0x04
270 1.1 bouyer #define DCNTL_IRQD 0x02
271 1.1 bouyer #define DCNTL_COM 0x01
272 1.1 bouyer
273 1.1 bouyer #define SIOP_ADDER 0x3C /* adder output sum, RO */
274 1.1 bouyer
275 1.1 bouyer #define SIOP_SIEN0 0x40 /* SCSI interrupt enable 0, R/W */
276 1.1 bouyer #define SIEN0_MA 0x80
277 1.1 bouyer #define SIEN0_CMP 0x40
278 1.1 bouyer #define SIEN0_SEL 0x20
279 1.1 bouyer #define SIEN0_RSL 0x10
280 1.1 bouyer #define SIEN0_SGE 0x08
281 1.1 bouyer #define SIEN0_UDC 0x04
282 1.1 bouyer #define SIEN0_SRT 0x02
283 1.1 bouyer #define SIEN0_PAR 0x01
284 1.1 bouyer
285 1.1 bouyer #define SIOP_SIEN1 0x41 /* SCSI interrupt enable 1, R/W */
286 1.6 bouyer #define SIEN1_SBMC 0x10 /* 895 only */
287 1.1 bouyer #define SIEN1_STO 0x04
288 1.1 bouyer #define SIEN1_GEN 0x02
289 1.1 bouyer #define SIEN1_HTH 0x01
290 1.1 bouyer
291 1.1 bouyer #define SIOP_SIST0 0x42 /* SCSI interrupt status 0, RO */
292 1.1 bouyer #define SIST0_MA 0x80
293 1.1 bouyer #define SIST0_CMP 0x40
294 1.1 bouyer #define SIST0_SEL 0x20
295 1.1 bouyer #define SIST0_RSL 0x10
296 1.1 bouyer #define SIST0_SGE 0x08
297 1.1 bouyer #define SIST0_UDC 0x04
298 1.1 bouyer #define SIST0_RST 0x02
299 1.1 bouyer #define SIST0_PAR 0x01
300 1.1 bouyer
301 1.1 bouyer #define SIOP_SIST1 0x43 /* SCSI interrut status 1, RO */
302 1.6 bouyer #define SIST1_SBMC 0x10 /* 895 only */
303 1.1 bouyer #define SIST1_STO 0x04
304 1.1 bouyer #define SIST1_GEN 0x02
305 1.1 bouyer #define SIST1_HTH 0x01
306 1.1 bouyer
307 1.1 bouyer #define SIOP_SLPAR 0x44 /* scsi longitudinal parity, R/W */
308 1.1 bouyer
309 1.1 bouyer #define SIOP_SWIDE 0x45 /* scsi wide residue, RW, 875 only */
310 1.1 bouyer
311 1.1 bouyer #define SIOP_MACNTL 0x46 /* memory access control, R/W */
312 1.1 bouyer
313 1.1 bouyer #define SIOP_GPCNTL 0x47 /* General Purpose Pin control, R/W */
314 1.1 bouyer #define GPCNTL_ME 0x80 /* 875 only */
315 1.1 bouyer #define GPCNTL_FE 0x40 /* 875 only */
316 1.1 bouyer #define GPCNTL_IN4 0x10 /* 875 only */
317 1.1 bouyer #define GPCNTL_IN3 0x08 /* 875 only */
318 1.1 bouyer #define GPCNTL_IN2 0x04 /* 875 only */
319 1.1 bouyer #define GPCNTL_IN1 0x02
320 1.1 bouyer #define GPCNTL_IN0 0x01
321 1.1 bouyer
322 1.1 bouyer #define SIOP_STIME0 0x48 /* SCSI timer 0, R/W */
323 1.1 bouyer #define STIME0_HTH_SHIFT 4
324 1.1 bouyer #define STIME0_HTH_MASK 0xf0
325 1.1 bouyer #define STIME0_SEL_SHIFT 0
326 1.1 bouyer #define STIME0_SEL_MASK 0x0f
327 1.1 bouyer
328 1.1 bouyer #define SIOP_STIME1 0x49 /* SCSI timer 1, R/W */
329 1.1 bouyer #define STIME1_HTHBA 0x40 /* 875 only */
330 1.1 bouyer #define STIME1_GENSF 0x20 /* 875 only */
331 1.1 bouyer #define STIME1_HTHSF 0x10 /* 875 only */
332 1.1 bouyer #define STIME1_GEN_SHIFT 0
333 1.1 bouyer #define STIME1_GEN_MASK 0x0f
334 1.1 bouyer
335 1.1 bouyer #define SIOP_RESPID0 0x4A /* response ID, R/W */
336 1.1 bouyer
337 1.1 bouyer #define SIOP_RESPID1 0x4B /* response ID, R/W, 875-only */
338 1.1 bouyer
339 1.1 bouyer #define SIOP_STEST0 0x4C /* SCSI test 0, RO */
340 1.1 bouyer
341 1.1 bouyer #define SIOP_STEST1 0x4D /* SCSI test 1, RO, RW on 875 */
342 1.12 bouyer #define STEST1_DOGE 0x20 /* 1010 only */
343 1.12 bouyer #define STEST1_DIGE 0x10 /* 1010 only */
344 1.1 bouyer #define STEST1_DBLEN 0x08 /* 875-only */
345 1.1 bouyer #define STEST1_DBLSEL 0x04 /* 875-only */
346 1.1 bouyer
347 1.1 bouyer #define SIOP_STEST2 0x4E /* SCSI test 2, RO, R/W on 875 */
348 1.1 bouyer #define STEST2_DIF 0x20 /* 875 only */
349 1.1 bouyer #define STEST2_EXT 0x02
350 1.1 bouyer
351 1.1 bouyer #define SIOP_STEST3 0x4F /* SCSI test 3, RO, RW on 875 */
352 1.1 bouyer #define STEST3_TE 0x80
353 1.4 bouyer #define STEST3_HSC 0x20
354 1.4 bouyer
355 1.4 bouyer #define SIOP_STEST4 0x52 /* SCSI test 4, 895 only */
356 1.4 bouyer #define STEST4_MODE_MASK 0xc0
357 1.4 bouyer #define STEST4_MODE_DIF 0x40
358 1.4 bouyer #define STEST4_MODE_SE 0x80
359 1.4 bouyer #define STEST4_MODE_LVD 0xc0
360 1.4 bouyer #define STEST4_LOCK 0x20
361 1.4 bouyer #define STEST4_
362 1.1 bouyer
363 1.1 bouyer #define SIOP_SIDL 0x50 /* SCSI input data latch, RO */
364 1.1 bouyer
365 1.1 bouyer #define SIOP_SODL 0x54 /* SCSI output data latch, R/W */
366 1.1 bouyer
367 1.1 bouyer #define SIOP_SBDL 0x58 /* SCSI bus data lines, RO */
368 1.1 bouyer
369 1.1 bouyer #define SIOP_SCRATCHB 0x5C /* Scratch register B, R/W */
370 1.1 bouyer
371 1.1 bouyer #define SIOP_SCRATCHC 0x60 /* Scratch register C, R/W, 875 only */
372 1.1 bouyer
373 1.1 bouyer #define SIOP_SCRATCHD 0x64 /* Scratch register D, R/W, 875-only */
374 1.1 bouyer
375 1.1 bouyer #define SIOP_SCRATCHE 0x68 /* Scratch register E, R/W, 875-only */
376 1.1 bouyer
377 1.1 bouyer #define SIOP_SCRATCHF 0x6c /* Scratch register F, R/W, 875-only */
378 1.1 bouyer
379 1.1 bouyer #define SIOP_SCRATCHG 0x70 /* Scratch register G, R/W, 875-only */
380 1.1 bouyer
381 1.1 bouyer #define SIOP_SCRATCHH 0x74 /* Scratch register H, R/W, 875-only */
382 1.1 bouyer
383 1.1 bouyer #define SIOP_SCRATCHI 0x78 /* Scratch register I, R/W, 875-only */
384 1.1 bouyer
385 1.1 bouyer #define SIOP_SCRATCHJ 0x7c /* Scratch register J, R/W, 875-only */
386 1.10 bouyer
387 1.10 bouyer #define SIOP_SCNTL4 0xBC /* SCSI control 4, R/W, 1010-only */
388 1.10 bouyer #define SCNTL4_XCLKS_ST 0x01
389 1.10 bouyer #define SCNTL4_XCLKS_DT 0x02
390 1.10 bouyer #define SCNTL4_XCLKH_ST 0x04
391 1.10 bouyer #define SCNTL4_XCLKH_DT 0x08
392 1.10 bouyer #define SCNTL4_AIPEN 0x40
393 1.10 bouyer #define SCNTL4_U3EN 0x80
394 1.8 bouyer
395 1.8 bouyer #define SIOP_DFBC 0xf0 /* DMA fifo byte count, RO */
396 1.13 bouyer
397 1.13 bouyer #define SIOP_AIPCNTL0 0xbe /* AIP Control 0, 1010-only */
398 1.13 bouyer #define AIPCNTL0_ERRLIVE 0x04 /* AIP error status, live */
399 1.13 bouyer #define AIPCNTL0_ERR 0x02 /* AIP error status, latched */
400 1.13 bouyer #define AIPCNTL0_PARITYERRs 0x01 /* Parity error */
401 1.13 bouyer
402 1.13 bouyer #define SIOP_AIPCNTL1 0xbf /* AIP Control 1, 1010-only */
403 1.13 bouyer #define AIPCNTL1_DIS 0x08 /* disable AIP generation, 1010-66 only */
404 1.13 bouyer #define AIPCNTL1_RSETERR 0x04 /* reset AIP error 1010-66 only */
405 1.13 bouyer #define AIPCNTL1_FB 0x02 /* force bad AIP value 1010-66 only */
406 1.13 bouyer #define AIPCNTL1_RSET 0x01 /* reset AIP sequence value 1010-66 only */
407 1.9 thorpej
408 1.9 thorpej /*
409 1.9 thorpej * Non-volatile configuration settings stored in the EEPROM. There
410 1.9 thorpej * are at least two known formats: Symbios Logic format and Tekram format.
411 1.9 thorpej */
412 1.9 thorpej
413 1.9 thorpej #define SIOP_NVRAM_SYM_SIZE 368
414 1.9 thorpej #define SIOP_NVRAM_SYM_ADDRESS 0x100
415 1.9 thorpej
416 1.9 thorpej struct nvram_symbios {
417 1.9 thorpej /* Header (6 bytes) */
418 1.9 thorpej u_int16_t type; /* 0x0000 */
419 1.9 thorpej u_int16_t byte_count; /* excluding header/trailer */
420 1.9 thorpej u_int16_t checksum;
421 1.9 thorpej
422 1.9 thorpej /* Adapter configuration (20 bytes) */
423 1.9 thorpej u_int8_t v_major;
424 1.9 thorpej u_int8_t v_minor;
425 1.9 thorpej u_int32_t boot_crc;
426 1.9 thorpej u_int16_t flags;
427 1.9 thorpej #define NVRAM_SYM_F_SCAM_ENABLE 0x0001
428 1.9 thorpej #define NVRAM_SYM_F_PARITY_ENABLE 0x0002
429 1.9 thorpej #define NVRAM_SYM_F_VERBOSE_MESSAGES 0x0004
430 1.9 thorpej #define NVRAM_SYM_F_CHS_MAPPING 0x0008
431 1.9 thorpej u_int16_t flags1;
432 1.9 thorpej #define NVRAM_SYM_F1_SCAN_HI_LO 0x0001
433 1.9 thorpej u_int16_t term_state;
434 1.9 thorpej #define NVRAM_SYM_TERM_CANT_PROGRAM 0
435 1.9 thorpej #define NVRAM_SYM_TERM_ENABLED 1
436 1.9 thorpej #define NVRAM_SYM_TERM_DISABLED 2
437 1.9 thorpej u_int16_t rmvbl_flags;
438 1.9 thorpej #define NVRAM_SYM_RMVBL_NO_SUPPORT 0
439 1.9 thorpej #define NVRAM_SYM_RMVBL_BOOT_DEVICE 1
440 1.9 thorpej #define NVRAM_SYM_RMVBL_MEDIA_INSTALLED 2
441 1.9 thorpej u_int8_t host_id;
442 1.9 thorpej u_int8_t num_hba;
443 1.9 thorpej u_int8_t num_devices;
444 1.9 thorpej u_int8_t max_scam_devices;
445 1.9 thorpej u_int8_t num_valid_scam_devices;
446 1.9 thorpej u_int8_t rsvd;
447 1.9 thorpej
448 1.9 thorpej /* Boot order (14 bytes x 4) */
449 1.9 thorpej struct nvram_symbios_host {
450 1.9 thorpej u_int16_t type; /* 4 - 8xx */
451 1.9 thorpej u_int16_t device_id; /* PCI device ID */
452 1.9 thorpej u_int16_t vendor_id; /* PCI vendor ID */
453 1.9 thorpej u_int8_t bus_nr; /* PCI bus number */
454 1.9 thorpej u_int8_t device_fn; /* PCI device/func # << 3 */
455 1.9 thorpej u_int16_t word8;
456 1.9 thorpej u_int16_t flags;
457 1.9 thorpej #define NVRAM_SYM_HOST_F_SCAN_AT_BOOT 0x0001
458 1.9 thorpej u_int16_t io_port; /* PCI I/O address */
459 1.9 thorpej } __attribute__((__packed__)) host[4];
460 1.9 thorpej
461 1.9 thorpej /* Targets (8 bytes x 16) */
462 1.9 thorpej struct nvram_symbios_target {
463 1.9 thorpej u_int8_t flags;
464 1.9 thorpej #define NVRAM_SYM_TARG_F_DISCONNECT_EN 0x0001
465 1.9 thorpej #define NVRAM_SYM_TARG_F_SCAN_AT_BOOT 0x0002
466 1.9 thorpej #define NVRAM_SYM_TARG_F_SCAN_LUNS 0x0004
467 1.9 thorpej #define NVRAM_SYM_TARG_F_TQ_EN 0x0008
468 1.9 thorpej u_int8_t rsvd;
469 1.9 thorpej u_int8_t bus_width;
470 1.9 thorpej u_int8_t sync_offset; /* 8, 16, etc. */
471 1.9 thorpej u_int16_t sync_period; /* 4 * factor */
472 1.9 thorpej u_int16_t timeout;
473 1.9 thorpej } __attribute__((__packed__)) target[16];
474 1.9 thorpej
475 1.9 thorpej /* SCAM table (8 bytes x 4) */
476 1.9 thorpej struct nvram_symbios_scam {
477 1.9 thorpej u_int16_t id;
478 1.9 thorpej u_int16_t method;
479 1.9 thorpej #define NVRAM_SYM_SCAM_DEFAULT_METHOD 0
480 1.9 thorpej #define NVRAM_SYM_SCAM_DONT_ASSIGN 1
481 1.9 thorpej #define NVRAM_SYM_SCAM_SET_SPECIFIC_ID 2
482 1.9 thorpej #define NVRAM_SYM_SCAM_USE_ORDER_GIVEN 3
483 1.9 thorpej u_int16_t status;
484 1.9 thorpej #define NVRAM_SYM_SCAM_UNKNOWN 0
485 1.9 thorpej #define NVRAM_SYM_SCAM_DEVICE_NOT_FOUND 1
486 1.9 thorpej #define NVRAM_SYM_SCAM_ID_NOT_SET 2
487 1.9 thorpej #define NVRAM_SYM_SCAM_ID_VALID 3
488 1.9 thorpej u_int8_t target_id;
489 1.9 thorpej u_int8_t rsvd;
490 1.9 thorpej } __attribute__((__packed__)) scam[4];
491 1.9 thorpej
492 1.9 thorpej u_int8_t spare_devices[15 * 8];
493 1.9 thorpej u_int8_t trailer[6]; /* 0xfe 0xfe 0x00 0x00 0x00 0x00 */
494 1.9 thorpej } __attribute__((__packed__));
495 1.9 thorpej
496 1.9 thorpej #define SIOP_NVRAM_TEK_SIZE 64
497 1.9 thorpej #define SIOP_NVRAM_TEK_93c46_ADDRESS 0
498 1.9 thorpej #define SIOP_NVRAM_TEK_24c16_ADDRESS 0x40
499 1.9 thorpej
500 1.9 thorpej static const u_int8_t tekram_sync_table[16] __attribute__((__unused__)) = {
501 1.9 thorpej 25, 31, 37, 43,
502 1.9 thorpej 50, 62, 75, 125,
503 1.9 thorpej 12, 15, 18, 21,
504 1.9 thorpej 6, 7, 9, 10,
505 1.9 thorpej };
506 1.9 thorpej
507 1.9 thorpej struct nvram_tekram {
508 1.9 thorpej struct nvram_tekram_target {
509 1.9 thorpej u_int8_t flags;
510 1.9 thorpej #define NVRAM_TEK_TARG_F_PARITY_CHECK 0x01
511 1.9 thorpej #define NVRAM_TEK_TARG_F_SYNC_NEGO 0x02
512 1.9 thorpej #define NVRAM_TEK_TARG_F_DISCONNECT_EN 0x04
513 1.9 thorpej #define NVRAM_TEK_TARG_F_START_CMD 0x08
514 1.9 thorpej #define NVRAM_TEK_TARG_F_TQ_EN 0x10
515 1.9 thorpej #define NVRAM_TEK_TARG_F_WIDE_NEGO 0x20
516 1.9 thorpej u_int8_t sync_index;
517 1.9 thorpej u_int16_t word2;
518 1.9 thorpej } __attribute__((__packed__)) target[16];
519 1.9 thorpej u_int8_t host_id;
520 1.9 thorpej u_int8_t flags;
521 1.9 thorpej #define NVRAM_TEK_F_MORE_THAN_2_DRIVES 0x01
522 1.9 thorpej #define NVRAM_TEK_F_DRIVES_SUP_1G 0x02
523 1.9 thorpej #define NVRAM_TEK_F_RESET_ON_POWER_ON 0x04
524 1.9 thorpej #define NVRAM_TEK_F_ACTIVE_NEGATION 0x08
525 1.9 thorpej #define NVRAM_TEK_F_IMMEDIATE_SEEK 0x10
526 1.9 thorpej #define NVRAM_TEK_F_SCAN_LUNS 0x20
527 1.9 thorpej #define NVRAM_TEK_F_REMOVABLE_FLAGS 0xc0 /* 0 dis, 1 boot, 2 all */
528 1.9 thorpej u_int8_t boot_delay_index;
529 1.9 thorpej u_int8_t max_tags_index;
530 1.9 thorpej u_int16_t flags1;
531 1.9 thorpej #define NVRAM_TEK_F_F2_F6_ENABLED 0x0001
532 1.9 thorpej u_int16_t spare[29];
533 1.9 thorpej } __attribute__((__packed__));
534