1 #ifndef _AHA152X_H
2 #define _AHA152X_H
3
4
5
6
7
8 #include "../block/blk.h"
9 #include "scsi.h"
10 #if defined(__KERNEL__)
11 #include <asm/io.h>
12
13 int aha152x_detect(int);
14 const char *aha152x_info(void);
15 int aha152x_command(Scsi_Cmnd *);
16 int aha152x_queue(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *));
17 int aha152x_abort(Scsi_Cmnd *, int);
18 int aha152x_reset(Scsi_Cmnd *);
19 int aha152x_biosparam(int, int, int*);
20
21
22
23 #define AHA152X_MAXQUEUE 7
24
25 #define AHA152X_REVID "Adaptec 152x SCSI driver; $Revision: 1.0 $"
26
27
28 #define AHA152X { AHA152X_REVID, \
29 aha152x_detect, \
30 aha152x_info, \
31 aha152x_command, \
32 aha152x_queue, \
33 aha152x_abort, \
34 aha152x_reset, \
35 0, \
36 aha152x_biosparam, \
37 1, \
38 7, \
39 SG_ALL, \
40 1, \
41 0, \
42 0 }
43 #endif
44
45
46
47 #define SCSISEQ (port_base+0x00)
48 #define SXFRCTL0 (port_base+0x01)
49 #define SXFRCTL1 (port_base+0x02)
50 #define SCSISIG (port_base+0x03)
51 #define SCSIRATE (port_base+0x04)
52 #define SELID (port_base+0x05)
53 #define SCSIID SELID
54 #define SCSIDAT (port_base+0x06)
55 #define SCSIBUS (port_base+0x07)
56 #define STCNT0 (port_base+0x08)
57 #define STCNT1 (port_base+0x09)
58 #define STCNT2 (port_base+0x0a)
59 #define SSTAT0 (port_base+0x0b)
60 #define SSTAT1 (port_base+0x0c)
61 #define SSTAT2 (port_base+0x0d)
62 #define SCSITEST (port_base+0x0e)
63 #define SSTAT4 (port_base+0x0f)
64 #define SIMODE0 (port_base+0x10)
65 #define SIMODE1 (port_base+0x11)
66 #define DMACNTRL0 (port_base+0x12)
67 #define DMACNTRL1 (port_base+0x13)
68 #define DMASTAT (port_base+0x14)
69 #define FIFOSTAT (port_base+0x15)
70 #define DATAPORT (port_base+0x16)
71 #define BRSTCNTRL (port_base+0x18)
72 #define PORTA (port_base+0x1a)
73 #define PORTB (port_base+0x1b)
74 #define REV (port_base+0x1c)
75 #define STACK (port_base+0x1d)
76 #define TEST (port_base+0x1e)
77
78
79
80
81
82 #define TEMODEO 0x80
83 #define ENSELO 0x40
84 #define ENSELI 0x20
85 #define ENRESELI 0x10
86 #define ENAUTOATNO 0x08
87 #define ENAUTOATNI 0x04
88 #define ENAUTOATNP 0x02
89 #define SCSIRSTO 0x01
90
91
92 #define SCSIEN 0x80
93 #define DMAEN 0x40
94 #define CH1 0x20
95 #define CLRSTCNT 0x10
96 #define SPIOEN 0x08
97 #define CLRCH1 0x02
98
99
100 #define BITBUCKET 0x80
101 #define SWRAPEN 0x40
102 #define ENSPCHK 0x20
103 #define STIMESEL 0x18
104 #define STIMESEL_ 3
105 #define ENSTIMER 0x04
106 #define BYTEALIGN 0x02
107
108
109 #define CDI 0x80
110 #define IOI 0x40
111 #define MSGI 0x20
112 #define ATNI 0x10
113 #define SELI 0x08
114 #define BSYI 0x04
115 #define REQI 0x02
116 #define ACKI 0x01
117
118
119 #define P_MASK (MSGI|CDI|IOI)
120 #define P_DATAO (0)
121 #define P_DATAI (IOI)
122 #define P_CMD (CDI)
123 #define P_STATUS (CDI|IOI)
124 #define P_MSGO (MSGI|CDI)
125 #define P_MSGI (MSGI|CDI|IOI)
126
127
128 #define CDO 0x80
129 #define IOO 0x40
130 #define MSGO 0x20
131 #define ATNO 0x10
132 #define SELO 0x08
133 #define BSYO 0x04
134 #define REQO 0x02
135 #define ACKO 0x01
136
137
138 #define SXFR 0x70
139 #define SXFR_ 4
140 #define SOFS 0x0f
141
142
143 #define OID 0x70
144 #define OID_ 4
145 #define TID 0x07
146
147
148 #define GETSTCNT() ( (GETPORT(STCNT2)<<16) \
149 + (GETPORT(STCNT1)<< 8) \
150 + GETPORT(STCNT0) )
151
152 #define SETSTCNT(X) { SETPORT(STCNT2, ((X) & 0xFF0000) >> 16); \
153 SETPORT(STCNT1, ((X) & 0x00FF00) >> 8); \
154 SETPORT(STCNT0, ((X) & 0x0000FF) ); }
155
156
157 #define TARGET 0x80
158 #define SELDO 0x40
159 #define SELDI 0x20
160 #define SELINGO 0x10
161 #define SWRAP 0x08
162 #define SDONE 0x04
163 #define SPIORDY 0x02
164 #define DMADONE 0x01
165
166 #define SETSDONE 0x80
167 #define CLRSELDO 0x40
168 #define CLRSELDI 0x20
169 #define CLRSELINGO 0x10
170 #define CLRSWRAP 0x08
171 #define CLRSDONE 0x04
172 #define CLRSPIORDY 0x02
173 #define CLRDMADONE 0x01
174
175
176 #define SELTO 0x80
177 #define ATNTARG 0x40
178 #define SCSIRSTI 0x20
179 #define PHASEMIS 0x10
180 #define BUSFREE 0x08
181 #define SCSIPERR 0x04
182 #define PHASECHG 0x02
183 #define REQINIT 0x01
184
185 #define CLRSELTIMO 0x80
186 #define CLRATNO 0x40
187 #define CLRSCSIRSTI 0x20
188 #define CLRBUSFREE 0x08
189 #define CLRSCSIPERR 0x04
190 #define CLRPHASECHG 0x02
191 #define CLRREQINIT 0x01
192
193
194 #define SOFFSET 0x20
195 #define SEMPTY 0x10
196 #define SFULL 0x08
197 #define SFCNT 0x07
198
199
200 #define SCSICNT 0xf0
201 #define SCSICNT_ 4
202 #define OFFCNT 0x0f
203
204
205 #define SCTESTU 0x08
206 #define SCTESTD 0x04
207 #define STCTEST 0x01
208
209
210 #define SYNCERR 0x04
211 #define FWERR 0x02
212 #define FRERR 0x01
213
214 #define CLRSYNCERR 0x04
215 #define CLRFWERR 0x02
216 #define CLRFRERR 0x01
217
218
219 #define ENSELDO 0x40
220 #define ENSELDI 0x20
221 #define ENSELINGO 0x10
222 #define ENSWRAP 0x08
223 #define ENSDONE 0x04
224 #define ENSPIORDY 0x02
225 #define ENDMADONE 0x01
226
227
228 #define ENSELTIMO 0x80
229 #define ENATNTARG 0x40
230 #define ENSCSIRST 0x20
231 #define ENPHASEMIS 0x10
232 #define ENBUSFREE 0x08
233 #define ENSCSIPERR 0x04
234 #define ENPHASECHG 0x02
235 #define ENREQINIT 0x01
236
237
238 #define ENDMA 0x80
239 #define _8BIT 0x40
240 #define DMA 0x20
241 #define WRITE_READ 0x08
242 #define INTEN 0x04
243 #define RSTFIFO 0x02
244 #define SWINT 0x01
245
246
247 #define PWRDWN 0x80
248 #define STK 0x07
249
250
251 #define ATDONE 0x80
252 #define WORDRDY 0x40
253 #define INTSTAT 0x20
254 #define DFIFOFULL 0x10
255 #define DFIFOEMP 0x08
256
257
258 #define BON 0xf0
259 #define BOFF 0x0f
260
261
262 #define BOFFTMR 0x40
263 #define BONTMR 0x20
264 #define STCNTH 0x10
265 #define STCNTM 0x08
266 #define STCNTL 0x04
267 #define SCSIBLK 0x02
268 #define DMABLK 0x01
269
270
271
272 typedef union {
273 struct {
274 unsigned reserved:2;
275 unsigned tardisc:1;
276 unsigned syncneg:1;
277 unsigned msgclasses:2;
278
279
280
281
282
283 unsigned boot:1;
284 unsigned dma:1;
285 unsigned id:3;
286 unsigned irq:2;
287 unsigned dmachan:2;
288 unsigned parity:1;
289 } fields;
290 unsigned short port;
291 } aha152x_config ;
292
293 #define cf_parity fields.parity
294 #define cf_dmachan fields.dmachan
295 #define cf_irq fields.irq
296 #define cf_id fields.id
297 #define cf_dma fields.dma
298 #define cf_boot fields.boot
299 #define cf_msgclasses fields.msgclasses
300 #define cf_syncneg fields.syncneg
301 #define cf_tardisc fields.tardisc
302 #define cf_port port
303
304
305
306 #define SETPORT(PORT, VAL) \
307 outb( (VAL), (PORT) )
308
309 #define SETPORTP(PORT, VAL) \
310 outb_p( (VAL), (PORT) )
311
312 #define SETPORTW(PORT, VAL) \
313 outw( (VAL), (PORT) )
314
315 #define GETPORT(PORT) \
316 inb( PORT )
317
318 #define GETPORTW(PORT) \
319 inw( PORT )
320
321 #define SETBITS(PORT, BITS) \
322 outb( (inb(PORT) | (BITS)), (PORT) )
323
324 #define CLRBITS(PORT, BITS) \
325 outb( (inb(PORT) & ~(BITS)), (PORT) )
326
327 #define CLRSETBITS(PORT, CLR, SET) \
328 outb( (inb(PORT) & ~(CLR)) | (SET) , (PORT) )
329
330 #define TESTHI(PORT, BITS) \
331 ((inb(PORT) & (BITS)) == BITS)
332
333 #define TESTLO(PORT, BITS) \
334 ((inb(PORT) & (BITS)) == 0)
335
336 #endif