This source file includes following definitions.
- NCR5380_i386_dma_setup
- NCR5380_i386_dma_write_setup
- NCR5380_i386_dma_read_setup
- NCR5380_i386_dma_residual
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 #ifndef NCR5380_H
29 #define NCR5380_H
30
31 #define NCR5380_PUBLIC_RELEASE 6
32 #ifdef NCR53C400
33 #define NCR53C400_PUBLIC_RELEASE 1
34 #endif
35
36 #define NDEBUG_ARBITRATION 0x1
37 #define NDEBUG_AUTOSENSE 0x2
38 #define NDEBUG_DMA 0x4
39 #define NDEBUG_HANDSHAKE 0x8
40 #define NDEBUG_INFORMATION 0x10
41 #define NDEBUG_INIT 0x20
42 #define NDEBUG_INTR 0x40
43 #define NDEBUG_LINKED 0x80
44 #define NDEBUG_MAIN 0x100
45 #define NDEBUG_NO_DATAOUT 0x200
46 #define NDEBUG_NO_WRITE 0x400
47 #define NDEBUG_PIO 0x800
48 #define NDEBUG_PSEUDO_DMA 0x1000
49 #define NDEBUG_QUEUES 0x2000
50 #define NDEBUG_RESELECTION 0x4000
51 #define NDEBUG_SELECTION 0x8000
52 #define NDEBUG_USLEEP 0x10000
53 #define NDEBUG_LAST_BYTE_SENT 0x20000
54 #define NDEBUG_RESTART_SELECT 0x40000
55 #define NDEBUG_EXTENDED 0x80000
56
57
58
59
60
61
62
63
64 #define OUTPUT_DATA_REG 0
65 #define CURRENT_SCSI_DATA_REG 0
66
67 #define INITIATOR_COMMAND_REG 1
68 #define ICR_ASSERT_RST 0x80
69 #define ICR_ARBITRATION_PROGRESS 0x40
70 #define ICR_TRI_STATE 0x40
71 #define ICR_ARBITRATION_LOST 0x20
72 #define ICR_DIFF_ENABLE 0x20
73 #define ICR_ASSERT_ACK 0x10
74 #define ICR_ASSERT_BSY 0x08
75 #define ICR_ASSERT_SEL 0x04
76 #define ICR_ASSERT_ATN 0x02
77 #define ICR_ASSERT_DATA 0x01
78
79 #ifdef DIFFERENTIAL
80 #define ICR_BASE ICR_DIFF_ENABLE
81 #else
82 #define ICR_BASE 0
83 #endif
84
85 #define MODE_REG 2
86
87
88
89
90
91 #define MR_BLOCK_DMA_MODE 0x80
92 #define MR_TARGET 0x40
93 #define MR_ENABLE_PAR_CHECK 0x20
94 #define MR_ENABLE_PAR_INTR 0x10
95 #define MR_ENABLE_EOP_INTR 0x08
96 #define MR_MONITOR_BSY 0x04
97 #define MR_DMA_MODE 0x02
98 #define MR_ARBITRATE 0x01
99
100 #ifdef PARITY
101 #define MR_BASE MR_ENABLE_PAR_CHECK
102 #else
103 #define MR_BASE 0
104 #endif
105
106 #define TARGET_COMMAND_REG 3
107 #define TCR_LAST_BYTE_SENT 0x80
108 #define TCR_ASSERT_REQ 0x08
109 #define TCR_ASSERT_MSG 0x04
110 #define TCR_ASSERT_CD 0x02
111 #define TCR_ASSERT_IO 0x01
112
113 #define STATUS_REG 4
114
115
116
117
118 #define SR_RST 0x80
119 #define SR_BSY 0x40
120 #define SR_REQ 0x20
121 #define SR_MSG 0x10
122 #define SR_CD 0x08
123 #define SR_IO 0x04
124 #define SR_SEL 0x02
125 #define SR_DBP 0x01
126
127
128
129
130
131 #define SELECT_ENABLE_REG 4
132
133 #define BUS_AND_STATUS_REG 5
134 #define BASR_END_DMA_TRANSFER 0x80
135 #define BASR_DRQ 0x40
136 #define BASR_PARITY_ERROR 0x20
137 #define BASR_IRQ 0x10
138 #define BASR_PHASE_MATCH 0x08
139 #define BASR_BUSY_ERROR 0x04
140 #define BASR_ATN 0x02
141 #define BASR_ACK 0x01
142
143
144 #define START_DMA_SEND_REG 5
145
146
147
148
149
150 #define INPUT_DATA_REG 6
151
152
153 #define START_DMA_TARGET_RECEIVE_REG 6
154
155
156 #define RESET_PARITY_INTERRUPT_REG 7
157
158
159 #define START_DMA_INITIATOR_RECEIVE_REG 7
160
161 #ifdef NCR53C400
162 #define C400_CONTROL_STATUS_REG -8
163
164 #define CSR_RESET 0x80
165 #define CSR_53C80_REG 0x80
166 #define CSR_TRANS_DIR 0x40
167 #define CSR_SCSI_BUFF_INTR 0x20
168 #define CSR_53C80_INTR 0x10
169 #define CSR_SHARED_INTR 0x08
170 #define CSR_HOST_BUF_NOT_RDY 0x04
171 #define CSR_SCSI_BUF_RDY 0x02
172 #define CSR_GATED_53C80_IRQ 0x01
173
174 #define CSR_BASE CSR_SCSI_BUFF_INTR | CSR_53C80_INTR
175
176
177 #define C400_CLOCK_COUNTER_REG -7
178
179
180 #define C400_RESUME_TRANSFER_REG -6
181
182
183 #define C400_HOST_BUFFER -4
184
185 #endif
186
187
188
189 #define PHASE_MASK (SR_MSG | SR_CD | SR_IO)
190
191 #define PHASE_DATAOUT 0
192 #define PHASE_DATAIN SR_IO
193 #define PHASE_CMDOUT SR_CD
194 #define PHASE_STATIN (SR_CD | SR_IO)
195 #define PHASE_MSGOUT (SR_MSG | SR_CD)
196 #define PHASE_MSGIN (SR_MSG | SR_CD | SR_IO)
197 #define PHASE_UNKNOWN 0xff
198
199
200
201
202
203
204
205 #define PHASE_SR_TO_TCR(phase) ((phase) >> 2)
206
207
208
209
210
211
212
213 #define DISCONNECT_NONE 0
214 #define DISCONNECT_TIME_TO_DATA 1
215 #define DISCONNECT_LONG 2
216
217
218
219
220
221 #define TAG_NEXT -1
222 #define TAG_NONE -2
223
224
225
226
227
228
229
230
231
232 #define IRQ_NONE 255
233 #define DMA_NONE 255
234 #define IRQ_AUTO 254
235 #define DMA_AUTO 254
236
237 #define FLAG_HAS_LAST_BYTE_SENT 1
238 #define FLAG_CHECK_LAST_BYTE_SENT 2
239 #define FLAG_NCR53C400 4
240
241 #ifndef ASM
242 struct NCR5380_hostdata {
243 NCR5380_implementation_fields;
244 unsigned char id_mask, id_higher_mask;
245 unsigned char targets_present;
246
247
248 volatile unsigned char busy[8];
249 #if defined(REAL_DMA) || defined(REAL_DMA_POLL)
250 volatile int dma_len;
251 #endif
252 volatile unsigned char last_message;
253 volatile Scsi_Cmnd *connected;
254 volatile Scsi_Cmnd *issue_queue;
255 volatile Scsi_Cmnd *disconnected_queue;
256 volatile int restart_select;
257
258
259 volatile unsigned aborted:1;
260 int flags;
261 #ifdef USLEEP
262 unsigned long time_expires;
263 struct Scsi_Host *next_timer;
264 #endif
265 };
266
267 #ifdef __KERNEL__
268 static struct Scsi_Host *first_instance;
269
270 #if defined(AUTOPROBE_IRQ)
271 static int NCR5380_probe_irq (struct Scsi_Host *instance, int possible);
272 #endif
273 static void NCR5380_init (struct Scsi_Host *instance, int flags);
274 static void NCR5380_information_transfer (struct Scsi_Host *instance);
275 static void NCR5380_intr (int irq);
276 static void NCR5380_main (void);
277 static void NCR5380_print_options (struct Scsi_Host *instance);
278 #ifndef NCR5380_abort
279 static
280 #endif
281 int NCR5380_abort (Scsi_Cmnd *cmd);
282 #ifndef NCR5380_reset
283 static
284 #endif
285 int NCR5380_reset (Scsi_Cmnd *cmd);
286 #ifndef NCR5380_queue_command
287 static
288 #endif
289 int NCR5380_queue_command (Scsi_Cmnd *cmd, void (*done)(Scsi_Cmnd *));
290
291
292 static void NCR5380_reselect (struct Scsi_Host *instance);
293 static int NCR5380_select (struct Scsi_Host *instance, Scsi_Cmnd *cmd, int tag);
294 #if defined(PSEUDO_DMA) || defined(REAL_DMA) || defined(REAL_DMA_POLL)
295 static int NCR5380_transfer_dma (struct Scsi_Host *instance,
296 unsigned char *phase, int *count, unsigned char **data);
297 #endif
298 static int NCR5380_transfer_pio (struct Scsi_Host *instance,
299 unsigned char *phase, int *count, unsigned char **data);
300
301 #if (defined(REAL_DMA) || defined(REAL_DMA_POLL)) && defined(i386)
302 static __inline__ int NCR5380_i386_dma_setup (struct Scsi_Host *instance,
303 unsigned char *ptr, unsigned int count, unsigned char mode) {
304 unsigned limit;
305
306 if (instance->dma_channel <=3) {
307 if (count > 65536)
308 count = 65536;
309 limit = 65536 - (((unsigned) ptr) & 0xFFFF);
310 } else {
311 if (count > 65536 * 2)
312 count = 65536 * 2;
313 limit = 65536* 2 - (((unsigned) ptr) & 0x1FFFF);
314 }
315
316 if (count > limit) count = limit;
317
318 if ((count & 1) || (((unsigned) ptr) & 1))
319 panic ("scsi%d : attempted unaligned DMA transfer\n", instance->host_no);
320 cli();
321 disable_dma(instance->dma_channel);
322 clear_dma_ff(instance->dma_channel);
323 set_dma_addr(instance->dma_channel, (unsigned int) ptr);
324 set_dma_count(instance->dma_channel, count);
325 set_dma_mode(instance->dma_channel, mode);
326 enable_dma(instance->dma_channel);
327 sti();
328 return count;
329 }
330
331 static __inline__ int NCR5380_i386_dma_write_setup (struct Scsi_Host *instance,
332 unsigned char *src, unsigned int count) {
333 return NCR5380_i386_dma_setup (instance, src, count, DMA_MODE_WRITE);
334 }
335
336 static __inline__ int NCR5380_i386_dma_read_setup (struct Scsi_Host *instance,
337 unsigned char *src, unsigned int count) {
338 return NCR5380_i386_dma_setup (instance, src, count, DMA_MODE_READ);
339 }
340
341 static __inline__ int NCR5380_i386_dma_residual (struct Scsi_Host *instance) {
342 register int tmp;
343 cli();
344 clear_dma_ff(instance->dma_channel);
345 tmp = get_dma_residue(instance->dma_channel);
346 sti();
347 return tmp;
348 }
349 #endif
350 #endif __KERNEL_
351 #endif
352 #endif