1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36#ifndef SUN3_NCR5380_H
37#define SUN3_NCR5380_H
38
39#define SUN3SCSI_PUBLIC_RELEASE 1
40
41
42
43
44
45#define IRQ_SUN3_SCSI 2
46#define IOBASE_SUN3_SCSI 0x00140000
47
48#define IOBASE_SUN3_VMESCSI 0xff200000
49
50static int sun3scsi_abort(struct scsi_cmnd *);
51static int sun3scsi_detect (struct scsi_host_template *);
52static const char *sun3scsi_info (struct Scsi_Host *);
53static int sun3scsi_bus_reset(struct scsi_cmnd *);
54static int sun3scsi_queue_command(struct Scsi_Host *, struct scsi_cmnd *);
55static int sun3scsi_release (struct Scsi_Host *);
56
57#ifndef CMD_PER_LUN
58#define CMD_PER_LUN 2
59#endif
60
61#ifndef CAN_QUEUE
62#define CAN_QUEUE 16
63#endif
64
65#ifndef SG_TABLESIZE
66#define SG_TABLESIZE SG_NONE
67#endif
68
69#ifndef MAX_TAGS
70#define MAX_TAGS 32
71#endif
72
73#ifndef USE_TAGGED_QUEUING
74#define USE_TAGGED_QUEUING 1
75#endif
76
77#include <scsi/scsicam.h>
78
79#ifdef SUN3_SCSI_VME
80#define SUN3_SCSI_NAME "Sun3 NCR5380 VME SCSI"
81#else
82#define SUN3_SCSI_NAME "Sun3 NCR5380 SCSI"
83#endif
84
85#ifndef HOSTS_C
86
87#define NCR5380_implementation_fields \
88 int port, ctrl
89
90#define NCR5380_local_declare() \
91 struct Scsi_Host *_instance
92
93#define NCR5380_setup(instance) \
94 _instance = instance
95
96#define NCR5380_read(reg) sun3scsi_read(reg)
97#define NCR5380_write(reg, value) sun3scsi_write(reg, value)
98
99#define NCR5380_intr sun3scsi_intr
100#define NCR5380_queue_command sun3scsi_queue_command
101#define NCR5380_bus_reset sun3scsi_bus_reset
102#define NCR5380_abort sun3scsi_abort
103#define NCR5380_proc_info sun3scsi_proc_info
104#define NCR5380_dma_xfer_len(i, cmd, phase) \
105 sun3scsi_dma_xfer_len(cmd->SCp.this_residual,cmd,((phase) & SR_IO) ? 0 : 1)
106
107#define NCR5380_dma_write_setup(instance, data, count) sun3scsi_dma_setup(data, count, 1)
108#define NCR5380_dma_read_setup(instance, data, count) sun3scsi_dma_setup(data, count, 0)
109#define NCR5380_dma_residual sun3scsi_dma_residual
110
111#define BOARD_NORMAL 0
112#define BOARD_NCR53C400 1
113
114
115
116struct sun3_dma_regs {
117 unsigned short dma_addr_hi;
118 unsigned short dma_addr_lo;
119 unsigned short dma_count_hi;
120 unsigned short dma_count_lo;
121 unsigned short udc_data;
122 unsigned short udc_addr;
123 unsigned short fifo_data;
124
125 unsigned short fifo_count;
126 unsigned short csr;
127 unsigned short bpack_hi;
128 unsigned short bpack_lo;
129 unsigned short ivect;
130 unsigned short fifo_count_hi;
131};
132
133
134struct sun3_udc_regs {
135 unsigned short rsel;
136 unsigned short addr_hi;
137 unsigned short addr_lo;
138 unsigned short count;
139 unsigned short mode_hi;
140 unsigned short mode_lo;
141};
142
143
144#define UDC_MODE 0x38
145#define UDC_CSR 0x2e
146#define UDC_CHN_HI 0x26
147#define UDC_CHN_LO 0x22
148#define UDC_CURA_HI 0x1a
149#define UDC_CURA_LO 0x0a
150#define UDC_CURB_HI 0x12
151#define UDC_CURB_LO 0x02
152#define UDC_MODE_HI 0x56
153#define UDC_MODE_LO 0x52
154#define UDC_COUNT 0x32
155
156
157#define UDC_RESET 0
158#define UDC_CHN_START 0xa0
159#define UDC_INT_ENABLE 0x32
160
161
162#define UDC_MODE_HIWORD 0x40
163#define UDC_MODE_LSEND 0xc2
164#define UDC_MODE_LRECV 0xd2
165
166
167#define UDC_RSEL_SEND 0x282
168#define UDC_RSEL_RECV 0x182
169
170
171#define CSR_DMA_ACTIVE 0x8000
172#define CSR_DMA_CONFLICT 0x4000
173#define CSR_DMA_BUSERR 0x2000
174
175#define CSR_FIFO_EMPTY 0x400
176#define CSR_SDB_INT 0x200
177#define CSR_DMA_INT 0x100
178
179#define CSR_LEFT 0xc0
180#define CSR_LEFT_3 0xc0
181#define CSR_LEFT_2 0x80
182#define CSR_LEFT_1 0x40
183#define CSR_PACK_ENABLE 0x20
184
185#define CSR_DMA_ENABLE 0x10
186
187#define CSR_SEND 0x8
188#define CSR_FIFO 0x2
189#define CSR_INTR 0x4
190#define CSR_SCSI 0x1
191
192#define VME_DATA24 0x3d00
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223#include "NCR5380.h"
224
225#if NDEBUG & NDEBUG_ARBITRATION
226#define ARB_PRINTK(format, args...) \
227 printk(KERN_DEBUG format , ## args)
228#else
229#define ARB_PRINTK(format, args...)
230#endif
231#if NDEBUG & NDEBUG_AUTOSENSE
232#define ASEN_PRINTK(format, args...) \
233 printk(KERN_DEBUG format , ## args)
234#else
235#define ASEN_PRINTK(format, args...)
236#endif
237#if NDEBUG & NDEBUG_DMA
238#define DMA_PRINTK(format, args...) \
239 printk(KERN_DEBUG format , ## args)
240#else
241#define DMA_PRINTK(format, args...)
242#endif
243#if NDEBUG & NDEBUG_HANDSHAKE
244#define HSH_PRINTK(format, args...) \
245 printk(KERN_DEBUG format , ## args)
246#else
247#define HSH_PRINTK(format, args...)
248#endif
249#if NDEBUG & NDEBUG_INFORMATION
250#define INF_PRINTK(format, args...) \
251 printk(KERN_DEBUG format , ## args)
252#else
253#define INF_PRINTK(format, args...)
254#endif
255#if NDEBUG & NDEBUG_INIT
256#define INI_PRINTK(format, args...) \
257 printk(KERN_DEBUG format , ## args)
258#else
259#define INI_PRINTK(format, args...)
260#endif
261#if NDEBUG & NDEBUG_INTR
262#define INT_PRINTK(format, args...) \
263 printk(KERN_DEBUG format , ## args)
264#else
265#define INT_PRINTK(format, args...)
266#endif
267#if NDEBUG & NDEBUG_LINKED
268#define LNK_PRINTK(format, args...) \
269 printk(KERN_DEBUG format , ## args)
270#else
271#define LNK_PRINTK(format, args...)
272#endif
273#if NDEBUG & NDEBUG_MAIN
274#define MAIN_PRINTK(format, args...) \
275 printk(KERN_DEBUG format , ## args)
276#else
277#define MAIN_PRINTK(format, args...)
278#endif
279#if NDEBUG & NDEBUG_NO_DATAOUT
280#define NDAT_PRINTK(format, args...) \
281 printk(KERN_DEBUG format , ## args)
282#else
283#define NDAT_PRINTK(format, args...)
284#endif
285#if NDEBUG & NDEBUG_NO_WRITE
286#define NWR_PRINTK(format, args...) \
287 printk(KERN_DEBUG format , ## args)
288#else
289#define NWR_PRINTK(format, args...)
290#endif
291#if NDEBUG & NDEBUG_PIO
292#define PIO_PRINTK(format, args...) \
293 printk(KERN_DEBUG format , ## args)
294#else
295#define PIO_PRINTK(format, args...)
296#endif
297#if NDEBUG & NDEBUG_PSEUDO_DMA
298#define PDMA_PRINTK(format, args...) \
299 printk(KERN_DEBUG format , ## args)
300#else
301#define PDMA_PRINTK(format, args...)
302#endif
303#if NDEBUG & NDEBUG_QUEUES
304#define QU_PRINTK(format, args...) \
305 printk(KERN_DEBUG format , ## args)
306#else
307#define QU_PRINTK(format, args...)
308#endif
309#if NDEBUG & NDEBUG_RESELECTION
310#define RSL_PRINTK(format, args...) \
311 printk(KERN_DEBUG format , ## args)
312#else
313#define RSL_PRINTK(format, args...)
314#endif
315#if NDEBUG & NDEBUG_SELECTION
316#define SEL_PRINTK(format, args...) \
317 printk(KERN_DEBUG format , ## args)
318#else
319#define SEL_PRINTK(format, args...)
320#endif
321#if NDEBUG & NDEBUG_USLEEP
322#define USL_PRINTK(format, args...) \
323 printk(KERN_DEBUG format , ## args)
324#else
325#define USL_PRINTK(format, args...)
326#endif
327#if NDEBUG & NDEBUG_LAST_BYTE_SENT
328#define LBS_PRINTK(format, args...) \
329 printk(KERN_DEBUG format , ## args)
330#else
331#define LBS_PRINTK(format, args...)
332#endif
333#if NDEBUG & NDEBUG_RESTART_SELECT
334#define RSS_PRINTK(format, args...) \
335 printk(KERN_DEBUG format , ## args)
336#else
337#define RSS_PRINTK(format, args...)
338#endif
339#if NDEBUG & NDEBUG_EXTENDED
340#define EXT_PRINTK(format, args...) \
341 printk(KERN_DEBUG format , ## args)
342#else
343#define EXT_PRINTK(format, args...)
344#endif
345#if NDEBUG & NDEBUG_ABORT
346#define ABRT_PRINTK(format, args...) \
347 printk(KERN_DEBUG format , ## args)
348#else
349#define ABRT_PRINTK(format, args...)
350#endif
351#if NDEBUG & NDEBUG_TAGS
352#define TAG_PRINTK(format, args...) \
353 printk(KERN_DEBUG format , ## args)
354#else
355#define TAG_PRINTK(format, args...)
356#endif
357#if NDEBUG & NDEBUG_MERGING
358#define MER_PRINTK(format, args...) \
359 printk(KERN_DEBUG format , ## args)
360#else
361#define MER_PRINTK(format, args...)
362#endif
363
364
365
366#define NCR_PRINT(mask) \
367 ((NDEBUG & (mask)) ? NCR5380_print(instance) : (void)0)
368
369#define NCR_PRINT_PHASE(mask) \
370 ((NDEBUG & (mask)) ? NCR5380_print_phase(instance) : (void)0)
371
372#define NCR_PRINT_STATUS(mask) \
373 ((NDEBUG & (mask)) ? NCR5380_print_status(instance) : (void)0)
374
375
376
377#endif
378#endif
379
380