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
37
38
39
40
41 #ifndef NCR53C8XX_H
42 #define NCR53C8XX_H
43
44 #include <scsi/scsi_host.h>
45
46
47
48
49
50
51 #define SCSI_NCR_BOOT_COMMAND_LINE_SUPPORT
52 #define SCSI_NCR_DEBUG_INFO_SUPPORT
53
54
55
56
57
58 #ifdef CONFIG_SCSI_NCR53C8XX_INTEGRITY_CHECK
59 # define SCSI_NCR_ENABLE_INTEGRITY_CHECK
60 #endif
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79 #define SCSI_NCR_SETUP_SPECIAL_FEATURES (3)
80
81 #define SCSI_NCR_MAX_SYNC (80)
82
83
84
85
86 #ifdef CONFIG_SCSI_NCR53C8XX_MAX_TAGS
87 #if CONFIG_SCSI_NCR53C8XX_MAX_TAGS < 2
88 #define SCSI_NCR_MAX_TAGS (2)
89 #elif CONFIG_SCSI_NCR53C8XX_MAX_TAGS > 256
90 #define SCSI_NCR_MAX_TAGS (256)
91 #else
92 #define SCSI_NCR_MAX_TAGS CONFIG_SCSI_NCR53C8XX_MAX_TAGS
93 #endif
94 #else
95 #define SCSI_NCR_MAX_TAGS (8)
96 #endif
97
98
99
100
101
102 #ifdef CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS
103 #define SCSI_NCR_SETUP_DEFAULT_TAGS CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS
104 #elif defined CONFIG_SCSI_NCR53C8XX_TAGGED_QUEUE
105 #define SCSI_NCR_SETUP_DEFAULT_TAGS SCSI_NCR_MAX_TAGS
106 #else
107 #define SCSI_NCR_SETUP_DEFAULT_TAGS (0)
108 #endif
109
110
111
112
113 #if defined(CONFIG_SCSI_NCR53C8XX_IARB)
114 #define SCSI_NCR_IARB_SUPPORT
115 #endif
116
117
118
119
120
121 #ifndef CONFIG_SCSI_NCR53C8XX_SYNC
122 #define CONFIG_SCSI_NCR53C8XX_SYNC (20)
123 #elif CONFIG_SCSI_NCR53C8XX_SYNC > SCSI_NCR_MAX_SYNC
124 #undef CONFIG_SCSI_NCR53C8XX_SYNC
125 #define CONFIG_SCSI_NCR53C8XX_SYNC SCSI_NCR_MAX_SYNC
126 #endif
127
128 #if CONFIG_SCSI_NCR53C8XX_SYNC == 0
129 #define SCSI_NCR_SETUP_DEFAULT_SYNC (255)
130 #elif CONFIG_SCSI_NCR53C8XX_SYNC <= 5
131 #define SCSI_NCR_SETUP_DEFAULT_SYNC (50)
132 #elif CONFIG_SCSI_NCR53C8XX_SYNC <= 20
133 #define SCSI_NCR_SETUP_DEFAULT_SYNC (250/(CONFIG_SCSI_NCR53C8XX_SYNC))
134 #elif CONFIG_SCSI_NCR53C8XX_SYNC <= 33
135 #define SCSI_NCR_SETUP_DEFAULT_SYNC (11)
136 #elif CONFIG_SCSI_NCR53C8XX_SYNC <= 40
137 #define SCSI_NCR_SETUP_DEFAULT_SYNC (10)
138 #else
139 #define SCSI_NCR_SETUP_DEFAULT_SYNC (9)
140 #endif
141
142
143
144
145 #ifdef CONFIG_SCSI_NCR53C8XX_NO_DISCONNECT
146 #define SCSI_NCR_SETUP_DISCONNECTION (0)
147 #else
148 #define SCSI_NCR_SETUP_DISCONNECTION (1)
149 #endif
150
151
152
153
154 #ifdef CONFIG_SCSI_NCR53C8XX_FORCE_SYNC_NEGO
155 #define SCSI_NCR_SETUP_FORCE_SYNC_NEGO (1)
156 #else
157 #define SCSI_NCR_SETUP_FORCE_SYNC_NEGO (0)
158 #endif
159
160
161
162
163 #ifdef CONFIG_SCSI_NCR53C8XX_DISABLE_MPARITY_CHECK
164 #define SCSI_NCR_SETUP_MASTER_PARITY (0)
165 #else
166 #define SCSI_NCR_SETUP_MASTER_PARITY (1)
167 #endif
168
169
170
171
172 #ifdef CONFIG_SCSI_NCR53C8XX_DISABLE_PARITY_CHECK
173 #define SCSI_NCR_SETUP_SCSI_PARITY (0)
174 #else
175 #define SCSI_NCR_SETUP_SCSI_PARITY (1)
176 #endif
177
178
179
180
181 #define SCSI_NCR_SETUP_SETTLE_TIME (2)
182
183
184
185
186 #ifndef SCSI_NCR_PCIQ_WORK_AROUND_OPT
187 #define SCSI_NCR_PCIQ_WORK_AROUND_OPT 1
188 #endif
189
190
191
192
193
194
195
196
197
198
199
200 #if SCSI_NCR_PCIQ_WORK_AROUND_OPT == 1
201 #define SCSI_NCR_PCIQ_MAY_NOT_FLUSH_PW_UPSTREAM
202 #define SCSI_NCR_PCIQ_MAY_REORDER_WRITES
203 #define SCSI_NCR_PCIQ_MAY_MISS_COMPLETIONS
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218 #elif SCSI_NCR_PCIQ_WORK_AROUND_OPT == 2
219 #define SCSI_NCR_PCIQ_MAY_NOT_FLUSH_PW_UPSTREAM
220 #define SCSI_NCR_PCIQ_MAY_REORDER_WRITES
221 #define SCSI_NCR_PCIQ_MAY_MISS_COMPLETIONS
222 #define SCSI_NCR_PCIQ_BROKEN_INTR
223
224
225
226
227
228
229
230 #elif SCSI_NCR_PCIQ_WORK_AROUND_OPT == 3
231 #define SCSI_NCR_PCIQ_SYNC_ON_INTR
232 #endif
233
234
235
236
237
238
239 #define SCSI_NCR_ALWAYS_SIMPLE_TAG
240 #define SCSI_NCR_MAX_SCATTER (127)
241 #define SCSI_NCR_MAX_TARGET (16)
242
243
244
245
246
247
248
249 #define SCSI_NCR_CAN_QUEUE (8*SCSI_NCR_MAX_TAGS + 2*SCSI_NCR_MAX_TARGET)
250 #define SCSI_NCR_CMD_PER_LUN (SCSI_NCR_MAX_TAGS)
251
252 #define SCSI_NCR_SG_TABLESIZE (SCSI_NCR_MAX_SCATTER)
253 #define SCSI_NCR_TIMER_INTERVAL (HZ)
254
255 #define SCSI_NCR_MAX_LUN (16)
256
257
258
259
260
261
262 #ifdef __BIG_ENDIAN
263
264 #define inw_l2b inw
265 #define inl_l2b inl
266 #define outw_b2l outw
267 #define outl_b2l outl
268
269 #define readb_raw readb
270 #define writeb_raw writeb
271
272 #if defined(SCSI_NCR_BIG_ENDIAN)
273 #define readw_l2b __raw_readw
274 #define readl_l2b __raw_readl
275 #define writew_b2l __raw_writew
276 #define writel_b2l __raw_writel
277 #define readw_raw __raw_readw
278 #define readl_raw __raw_readl
279 #define writew_raw __raw_writew
280 #define writel_raw __raw_writel
281 #else
282 #define readw_l2b readw
283 #define readl_l2b readl
284 #define writew_b2l writew
285 #define writel_b2l writel
286 #define readw_raw readw
287 #define readl_raw readl
288 #define writew_raw writew
289 #define writel_raw writel
290 #endif
291
292 #else
293
294 #define inw_raw inw
295 #define inl_raw inl
296 #define outw_raw outw
297 #define outl_raw outl
298
299 #define readb_raw readb
300 #define readw_raw readw
301 #define readl_raw readl
302 #define writeb_raw writeb
303 #define writew_raw writew
304 #define writel_raw writel
305
306 #endif
307
308 #if !defined(__hppa__) && !defined(__mips__)
309 #ifdef SCSI_NCR_BIG_ENDIAN
310 #error "The NCR in BIG ENDIAN addressing mode is not (yet) supported"
311 #endif
312 #endif
313
314 #define MEMORY_BARRIER() mb()
315
316
317
318
319
320
321
322
323
324
325 #if defined(SCSI_NCR_BIG_ENDIAN)
326
327 #define ncr_offb(o) (((o)&~3)+((~((o)&3))&3))
328 #define ncr_offw(o) (((o)&~3)+((~((o)&3))&2))
329
330 #else
331
332 #define ncr_offb(o) (o)
333 #define ncr_offw(o) (o)
334
335 #endif
336
337
338
339
340
341
342
343
344
345 #if defined(__BIG_ENDIAN) && !defined(SCSI_NCR_BIG_ENDIAN)
346
347 #define cpu_to_scr(dw) cpu_to_le32(dw)
348 #define scr_to_cpu(dw) le32_to_cpu(dw)
349
350 #elif defined(__LITTLE_ENDIAN) && defined(SCSI_NCR_BIG_ENDIAN)
351
352 #define cpu_to_scr(dw) cpu_to_be32(dw)
353 #define scr_to_cpu(dw) be32_to_cpu(dw)
354
355 #else
356
357 #define cpu_to_scr(dw) (dw)
358 #define scr_to_cpu(dw) (dw)
359
360 #endif
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379 #define INB_OFF(o) readb_raw((char __iomem *)np->reg + ncr_offb(o))
380 #define OUTB_OFF(o, val) writeb_raw((val), (char __iomem *)np->reg + ncr_offb(o))
381
382 #if defined(__BIG_ENDIAN) && !defined(SCSI_NCR_BIG_ENDIAN)
383
384 #define INW_OFF(o) readw_l2b((char __iomem *)np->reg + ncr_offw(o))
385 #define INL_OFF(o) readl_l2b((char __iomem *)np->reg + (o))
386
387 #define OUTW_OFF(o, val) writew_b2l((val), (char __iomem *)np->reg + ncr_offw(o))
388 #define OUTL_OFF(o, val) writel_b2l((val), (char __iomem *)np->reg + (o))
389
390 #elif defined(__LITTLE_ENDIAN) && defined(SCSI_NCR_BIG_ENDIAN)
391
392 #define INW_OFF(o) readw_b2l((char __iomem *)np->reg + ncr_offw(o))
393 #define INL_OFF(o) readl_b2l((char __iomem *)np->reg + (o))
394
395 #define OUTW_OFF(o, val) writew_l2b((val), (char __iomem *)np->reg + ncr_offw(o))
396 #define OUTL_OFF(o, val) writel_l2b((val), (char __iomem *)np->reg + (o))
397
398 #else
399
400 #ifdef CONFIG_SCSI_NCR53C8XX_NO_WORD_TRANSFERS
401
402 #define INW_OFF(o) (readb((char __iomem *)np->reg + ncr_offw(o)) << 8 | readb((char __iomem *)np->reg + ncr_offw(o) + 1))
403 #else
404 #define INW_OFF(o) readw_raw((char __iomem *)np->reg + ncr_offw(o))
405 #endif
406 #define INL_OFF(o) readl_raw((char __iomem *)np->reg + (o))
407
408 #ifdef CONFIG_SCSI_NCR53C8XX_NO_WORD_TRANSFERS
409
410 #define OUTW_OFF(o, val) do { writeb((char)((val) >> 8), (char __iomem *)np->reg + ncr_offw(o)); writeb((char)(val), (char __iomem *)np->reg + ncr_offw(o) + 1); } while (0)
411 #else
412 #define OUTW_OFF(o, val) writew_raw((val), (char __iomem *)np->reg + ncr_offw(o))
413 #endif
414 #define OUTL_OFF(o, val) writel_raw((val), (char __iomem *)np->reg + (o))
415
416 #endif
417
418 #define INB(r) INB_OFF (offsetof(struct ncr_reg,r))
419 #define INW(r) INW_OFF (offsetof(struct ncr_reg,r))
420 #define INL(r) INL_OFF (offsetof(struct ncr_reg,r))
421
422 #define OUTB(r, val) OUTB_OFF (offsetof(struct ncr_reg,r), (val))
423 #define OUTW(r, val) OUTW_OFF (offsetof(struct ncr_reg,r), (val))
424 #define OUTL(r, val) OUTL_OFF (offsetof(struct ncr_reg,r), (val))
425
426
427
428
429
430 #define OUTONB(r, m) OUTB(r, INB(r) | (m))
431 #define OUTOFFB(r, m) OUTB(r, INB(r) & ~(m))
432 #define OUTONW(r, m) OUTW(r, INW(r) | (m))
433 #define OUTOFFW(r, m) OUTW(r, INW(r) & ~(m))
434 #define OUTONL(r, m) OUTL(r, INL(r) | (m))
435 #define OUTOFFL(r, m) OUTL(r, INL(r) & ~(m))
436
437
438
439
440
441
442 #define OUTL_DSP(v) \
443 do { \
444 MEMORY_BARRIER(); \
445 OUTL (nc_dsp, (v)); \
446 } while (0)
447
448 #define OUTONB_STD() \
449 do { \
450 MEMORY_BARRIER(); \
451 OUTONB (nc_dcntl, (STD|NOCOM)); \
452 } while (0)
453
454
455
456
457
458 struct ncr_chip {
459 unsigned short revision_id;
460 unsigned char burst_max;
461 unsigned char offset_max;
462 unsigned char nr_divisor;
463 unsigned int features;
464 #define FE_LED0 (1<<0)
465 #define FE_WIDE (1<<1)
466 #define FE_ULTRA (1<<2)
467 #define FE_DBLR (1<<4)
468 #define FE_QUAD (1<<5)
469 #define FE_ERL (1<<6)
470 #define FE_CLSE (1<<7)
471 #define FE_WRIE (1<<8)
472 #define FE_ERMP (1<<9)
473 #define FE_BOF (1<<10)
474 #define FE_DFS (1<<11)
475 #define FE_PFEN (1<<12)
476 #define FE_LDSTR (1<<13)
477 #define FE_RAM (1<<14)
478 #define FE_VARCLK (1<<15)
479 #define FE_RAM8K (1<<16)
480 #define FE_64BIT (1<<17)
481 #define FE_IO256 (1<<18)
482 #define FE_NOPM (1<<19)
483 #define FE_LEDC (1<<20)
484 #define FE_DIFF (1<<21)
485 #define FE_66MHZ (1<<23)
486 #define FE_DAC (1<<24)
487 #define FE_ISTAT1 (1<<25)
488 #define FE_DAC_IN_USE (1<<26)
489 #define FE_EHP (1<<27)
490 #define FE_MUX (1<<28)
491 #define FE_EA (1<<29)
492
493 #define FE_CACHE_SET (FE_ERL|FE_CLSE|FE_WRIE|FE_ERMP)
494 #define FE_SCSI_SET (FE_WIDE|FE_ULTRA|FE_DBLR|FE_QUAD|F_CLK80)
495 #define FE_SPECIAL_SET (FE_CACHE_SET|FE_BOF|FE_DFS|FE_LDSTR|FE_PFEN|FE_RAM)
496 };
497
498
499
500
501
502
503
504
505 #define SCSI_NCR_MAX_EXCLUDES 8
506 struct ncr_driver_setup {
507 u8 master_parity;
508 u8 scsi_parity;
509 u8 disconnection;
510 u8 special_features;
511 u8 force_sync_nego;
512 u8 reverse_probe;
513 u8 pci_fix_up;
514 u8 use_nvram;
515 u8 verbose;
516 u8 default_tags;
517 u16 default_sync;
518 u16 debug;
519 u8 burst_max;
520 u8 led_pin;
521 u8 max_wide;
522 u8 settle_delay;
523 u8 diff_support;
524 u8 irqm;
525 u8 bus_check;
526 u8 optimize;
527 u8 recovery;
528 u8 host_id;
529 u16 iarb;
530 u32 excludes[SCSI_NCR_MAX_EXCLUDES];
531 char tag_ctrl[100];
532 };
533
534
535
536
537
538 #define SCSI_NCR_DRIVER_SETUP \
539 { \
540 SCSI_NCR_SETUP_MASTER_PARITY, \
541 SCSI_NCR_SETUP_SCSI_PARITY, \
542 SCSI_NCR_SETUP_DISCONNECTION, \
543 SCSI_NCR_SETUP_SPECIAL_FEATURES, \
544 SCSI_NCR_SETUP_FORCE_SYNC_NEGO, \
545 0, \
546 0, \
547 1, \
548 0, \
549 SCSI_NCR_SETUP_DEFAULT_TAGS, \
550 SCSI_NCR_SETUP_DEFAULT_SYNC, \
551 0x00, \
552 7, \
553 0, \
554 1, \
555 SCSI_NCR_SETUP_SETTLE_TIME, \
556 0, \
557 0, \
558 1, \
559 0, \
560 0, \
561 255, \
562 0x00 \
563 }
564
565
566
567
568
569
570 #define SCSI_NCR_DRIVER_SAFE_SETUP \
571 { \
572 0, \
573 1, \
574 0, \
575 0, \
576 0, \
577 0, \
578 0, \
579 1, \
580 2, \
581 0, \
582 255, \
583 0x00, \
584 255, \
585 0, \
586 0, \
587 10, \
588 1, \
589 1, \
590 1, \
591 0, \
592 0, \
593 255 \
594 }
595
596
597
598
599
600
601
602
603
604
605 struct ncr_reg {
606 u8 nc_scntl0;
607
608 u8 nc_scntl1;
609 #define ISCON 0x10
610 #define CRST 0x08
611 #define IARB 0x02
612
613 u8 nc_scntl2;
614 #define SDU 0x80
615 #define CHM 0x40
616 #define WSS 0x08
617 #define WSR 0x01
618
619 u8 nc_scntl3;
620 #define EWS 0x08
621 #define ULTRA 0x80
622
623
624 u8 nc_scid;
625 #define RRE 0x40
626 #define SRE 0x20
627
628 u8 nc_sxfer;
629
630
631 u8 nc_sdid;
632
633 u8 nc_gpreg;
634
635 u8 nc_sfbr;
636
637 u8 nc_socl;
638 #define CREQ 0x80
639 #define CACK 0x40
640 #define CBSY 0x20
641 #define CSEL 0x10
642 #define CATN 0x08
643 #define CMSG 0x04
644 #define CC_D 0x02
645 #define CI_O 0x01
646
647 u8 nc_ssid;
648
649 u8 nc_sbcl;
650
651 u8 nc_dstat;
652 #define DFE 0x80
653 #define MDPE 0x40
654 #define BF 0x20
655 #define ABRT 0x10
656 #define SSI 0x08
657 #define SIR 0x04
658 #define IID 0x01
659
660 u8 nc_sstat0;
661 #define ILF 0x80
662 #define ORF 0x40
663 #define OLF 0x20
664 #define AIP 0x10
665 #define LOA 0x08
666 #define WOA 0x04
667 #define IRST 0x02
668 #define SDP 0x01
669
670 u8 nc_sstat1;
671 #define FF3210 0xf0
672
673 u8 nc_sstat2;
674 #define ILF1 0x80
675 #define ORF1 0x40
676 #define OLF1 0x20
677 #define DM 0x04
678 #define LDSC 0x02
679
680 u8 nc_dsa;
681 u8 nc_dsa1;
682 u8 nc_dsa2;
683 u8 nc_dsa3;
684
685 u8 nc_istat;
686 #define CABRT 0x80
687 #define SRST 0x40
688 #define SIGP 0x20
689 #define SEM 0x10
690 #define CON 0x08
691 #define INTF 0x04
692 #define SIP 0x02
693 #define DIP 0x01
694
695 u8 nc_istat1;
696 #define FLSH 0x04
697 #define SRUN 0x02
698 #define SIRQD 0x01
699
700 u8 nc_mbox0;
701 u8 nc_mbox1;
702
703 u8 nc_ctest0;
704 #define EHP 0x04
705 u8 nc_ctest1;
706
707 u8 nc_ctest2;
708 #define CSIGP 0x40
709
710
711 u8 nc_ctest3;
712 #define FLF 0x08
713 #define CLF 0x04
714 #define FM 0x02
715 #define WRIE 0x01
716
717
718 u32 nc_temp;
719
720 u8 nc_dfifo;
721 u8 nc_ctest4;
722 #define MUX 0x80
723 #define BDIS 0x80
724 #define MPEE 0x08
725
726 u8 nc_ctest5;
727 #define DFS 0x20
728
729 u8 nc_ctest6;
730
731 u32 nc_dbc;
732 u32 nc_dnad;
733 u32 nc_dsp;
734 u32 nc_dsps;
735
736 u8 nc_scratcha;
737 u8 nc_scratcha1;
738 u8 nc_scratcha2;
739 u8 nc_scratcha3;
740
741 u8 nc_dmode;
742 #define BL_2 0x80
743 #define BL_1 0x40
744 #define ERL 0x08
745 #define ERMP 0x04
746 #define BOF 0x02
747
748 u8 nc_dien;
749 u8 nc_sbr;
750
751 u8 nc_dcntl;
752 #define CLSE 0x80
753 #define PFF 0x40
754 #define PFEN 0x20
755 #define EA 0x20
756 #define SSM 0x10
757 #define IRQM 0x08
758 #define STD 0x04
759 #define IRQD 0x02
760 #define NOCOM 0x01
761
762
763 u32 nc_adder;
764
765 u16 nc_sien;
766 u16 nc_sist;
767 #define SBMC 0x1000
768 #define STO 0x0400
769 #define GEN 0x0200
770 #define HTH 0x0100
771 #define MA 0x80
772 #define CMP 0x40
773 #define SEL 0x20
774 #define RSL 0x10
775 #define SGE 0x08
776 #define UDC 0x04
777 #define RST 0x02
778 #define PAR 0x01
779
780 u8 nc_slpar;
781 u8 nc_swide;
782 u8 nc_macntl;
783 u8 nc_gpcntl;
784 u8 nc_stime0;
785 u8 nc_stime1;
786 u16 nc_respid;
787
788 u8 nc_stest0;
789
790 u8 nc_stest1;
791 #define SCLK 0x80
792 #define DBLEN 0x08
793 #define DBLSEL 0x04
794
795
796 u8 nc_stest2;
797 #define ROF 0x40
798 #define DIF 0x20
799 #define EXT 0x02
800
801 u8 nc_stest3;
802 #define TE 0x80
803 #define HSC 0x20
804 #define CSF 0x02
805
806 u16 nc_sidl;
807 u8 nc_stest4;
808 #define SMODE 0xc0
809 #define SMODE_HVD 0x40
810 #define SMODE_SE 0x80
811 #define SMODE_LVD 0xc0
812 #define LCKFRQ 0x20
813
814
815 u8 nc_53_;
816 u16 nc_sodl;
817 u8 nc_ccntl0;
818 #define ENPMJ 0x80
819 #define PMJCTL 0x40
820 #define ENNDJ 0x20
821 #define DISFC 0x10
822 #define DILS 0x02
823 #define DPR 0x01
824
825 u8 nc_ccntl1;
826 #define ZMOD 0x80
827 #define DIC 0x10
828 #define DDAC 0x08
829 #define XTIMOD 0x04
830 #define EXTIBMV 0x02
831 #define EXDBMV 0x01
832
833 u16 nc_sbdl;
834 u16 nc_5a_;
835
836 u8 nc_scr0;
837 u8 nc_scr1;
838 u8 nc_scr2;
839 u8 nc_scr3;
840
841 u8 nc_scrx[64];
842 u32 nc_mmrs;
843 u32 nc_mmws;
844 u32 nc_sfs;
845 u32 nc_drs;
846 u32 nc_sbms;
847 u32 nc_dbms;
848 u32 nc_dnad64;
849 u16 nc_scntl4;
850 #define U3EN 0x80
851 #define AIPEN 0x40
852 #define XCLKH_DT 0x08
853
854 #define XCLKH_ST 0x04
855
856
857 u8 nc_aipcntl0;
858 u8 nc_aipcntl1;
859
860 u32 nc_pmjad1;
861 u32 nc_pmjad2;
862 u8 nc_rbc;
863 u8 nc_rbc1;
864 u8 nc_rbc2;
865 u8 nc_rbc3;
866
867 u8 nc_ua;
868 u8 nc_ua1;
869 u8 nc_ua2;
870 u8 nc_ua3;
871 u32 nc_esa;
872 u8 nc_ia;
873 u8 nc_ia1;
874 u8 nc_ia2;
875 u8 nc_ia3;
876 u32 nc_sbc;
877 u32 nc_csbc;
878
879
880 u16 nc_crcpad;
881 u8 nc_crccntl0;
882 #define SNDCRC 0x10
883 u8 nc_crccntl1;
884 u32 nc_crcdata;
885 u32 nc_e8_;
886 u32 nc_ec_;
887 u16 nc_dfbc;
888
889 };
890
891
892
893
894
895
896
897
898 #define REGJ(p,r) (offsetof(struct ncr_reg, p ## r))
899 #define REG(r) REGJ (nc_, r)
900
901 typedef u32 ncrcmd;
902
903
904
905
906
907
908
909
910
911
912 #define SCR_DATA_OUT 0x00000000
913 #define SCR_DATA_IN 0x01000000
914 #define SCR_COMMAND 0x02000000
915 #define SCR_STATUS 0x03000000
916 #define SCR_DT_DATA_OUT 0x04000000
917 #define SCR_DT_DATA_IN 0x05000000
918 #define SCR_MSG_OUT 0x06000000
919 #define SCR_MSG_IN 0x07000000
920
921 #define SCR_ILG_OUT 0x04000000
922 #define SCR_ILG_IN 0x05000000
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942 #define OPC_MOVE 0x08000000
943
944 #define SCR_MOVE_ABS(l) ((0x00000000 | OPC_MOVE) | (l))
945 #define SCR_MOVE_IND(l) ((0x20000000 | OPC_MOVE) | (l))
946 #define SCR_MOVE_TBL (0x10000000 | OPC_MOVE)
947
948 #define SCR_CHMOV_ABS(l) ((0x00000000) | (l))
949 #define SCR_CHMOV_IND(l) ((0x20000000) | (l))
950 #define SCR_CHMOV_TBL (0x10000000)
951
952 struct scr_tblmove {
953 u32 size;
954 u32 addr;
955 };
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972 #define SCR_SEL_ABS 0x40000000
973 #define SCR_SEL_ABS_ATN 0x41000000
974 #define SCR_SEL_TBL 0x42000000
975 #define SCR_SEL_TBL_ATN 0x43000000
976
977
978 #ifdef SCSI_NCR_BIG_ENDIAN
979 struct scr_tblsel {
980 u8 sel_scntl3;
981 u8 sel_id;
982 u8 sel_sxfer;
983 u8 sel_scntl4;
984 };
985 #else
986 struct scr_tblsel {
987 u8 sel_scntl4;
988 u8 sel_sxfer;
989 u8 sel_id;
990 u8 sel_scntl3;
991 };
992 #endif
993
994 #define SCR_JMP_REL 0x04000000
995 #define SCR_ID(id) (((u32)(id)) << 16)
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012 #define SCR_WAIT_DISC 0x48000000
1013 #define SCR_WAIT_RESEL 0x50000000
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028 #define SCR_SET(f) (0x58000000 | (f))
1029 #define SCR_CLR(f) (0x60000000 | (f))
1030
1031 #define SCR_CARRY 0x00000400
1032 #define SCR_TRG 0x00000200
1033 #define SCR_ACK 0x00000040
1034 #define SCR_ATN 0x00000008
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057 #define SCR_NO_FLUSH 0x01000000
1058
1059 #define SCR_COPY(n) (0xc0000000 | SCR_NO_FLUSH | (n))
1060 #define SCR_COPY_F(n) (0xc0000000 | (n))
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086 #define SCR_REG_OFS(ofs) ((((ofs) & 0x7f) << 16ul) + ((ofs) & 0x80))
1087
1088 #define SCR_SFBR_REG(reg,op,data) \
1089 (0x68000000 | (SCR_REG_OFS(REG(reg))) | (op) | (((data)&0xff)<<8ul))
1090
1091 #define SCR_REG_SFBR(reg,op,data) \
1092 (0x70000000 | (SCR_REG_OFS(REG(reg))) | (op) | (((data)&0xff)<<8ul))
1093
1094 #define SCR_REG_REG(reg,op,data) \
1095 (0x78000000 | (SCR_REG_OFS(REG(reg))) | (op) | (((data)&0xff)<<8ul))
1096
1097
1098 #define SCR_LOAD 0x00000000
1099 #define SCR_SHL 0x01000000
1100 #define SCR_OR 0x02000000
1101 #define SCR_XOR 0x03000000
1102 #define SCR_AND 0x04000000
1103 #define SCR_SHR 0x05000000
1104 #define SCR_ADD 0x06000000
1105 #define SCR_ADDC 0x07000000
1106
1107 #define SCR_SFBR_DATA (0x00800000>>8ul)
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126 #define SCR_FROM_REG(reg) \
1127 SCR_REG_SFBR(reg,SCR_OR,0)
1128
1129 #define SCR_TO_REG(reg) \
1130 SCR_SFBR_REG(reg,SCR_OR,0)
1131
1132 #define SCR_LOAD_REG(reg,data) \
1133 SCR_REG_REG(reg,SCR_LOAD,data)
1134
1135 #define SCR_LOAD_SFBR(data) \
1136 (SCR_REG_SFBR (gpreg, SCR_LOAD, data))
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156 #define SCR_REG_OFS2(ofs) (((ofs) & 0xff) << 16ul)
1157 #define SCR_NO_FLUSH2 0x02000000
1158 #define SCR_DSA_REL2 0x10000000
1159
1160 #define SCR_LOAD_R(reg, how, n) \
1161 (0xe1000000 | how | (SCR_REG_OFS2(REG(reg))) | (n))
1162
1163 #define SCR_STORE_R(reg, how, n) \
1164 (0xe0000000 | how | (SCR_REG_OFS2(REG(reg))) | (n))
1165
1166 #define SCR_LOAD_ABS(reg, n) SCR_LOAD_R(reg, SCR_NO_FLUSH2, n)
1167 #define SCR_LOAD_REL(reg, n) SCR_LOAD_R(reg, SCR_NO_FLUSH2|SCR_DSA_REL2, n)
1168 #define SCR_LOAD_ABS_F(reg, n) SCR_LOAD_R(reg, 0, n)
1169 #define SCR_LOAD_REL_F(reg, n) SCR_LOAD_R(reg, SCR_DSA_REL2, n)
1170
1171 #define SCR_STORE_ABS(reg, n) SCR_STORE_R(reg, SCR_NO_FLUSH2, n)
1172 #define SCR_STORE_REL(reg, n) SCR_STORE_R(reg, SCR_NO_FLUSH2|SCR_DSA_REL2,n)
1173 #define SCR_STORE_ABS_F(reg, n) SCR_STORE_R(reg, 0, n)
1174 #define SCR_STORE_REL_F(reg, n) SCR_STORE_R(reg, SCR_DSA_REL2, n)
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213 #define SCR_NO_OP 0x80000000
1214 #define SCR_JUMP 0x80080000
1215 #define SCR_JUMP64 0x80480000
1216 #define SCR_JUMPR 0x80880000
1217 #define SCR_CALL 0x88080000
1218 #define SCR_CALLR 0x88880000
1219 #define SCR_RETURN 0x90080000
1220 #define SCR_INT 0x98080000
1221 #define SCR_INT_FLY 0x98180000
1222
1223 #define IFFALSE(arg) (0x00080000 | (arg))
1224 #define IFTRUE(arg) (0x00000000 | (arg))
1225
1226 #define WHEN(phase) (0x00030000 | (phase))
1227 #define IF(phase) (0x00020000 | (phase))
1228
1229 #define DATA(D) (0x00040000 | ((D) & 0xff))
1230 #define MASK(D,M) (0x00040000 | (((M ^ 0xff) & 0xff) << 8ul)|((D) & 0xff))
1231
1232 #define CARRYSET (0x00200000)
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245 #define S_GOOD (0x00)
1246 #define S_CHECK_COND (0x02)
1247 #define S_COND_MET (0x04)
1248 #define S_BUSY (0x08)
1249 #define S_INT (0x10)
1250 #define S_INT_COND_MET (0x14)
1251 #define S_CONFLICT (0x18)
1252 #define S_TERMINATED (0x20)
1253 #define S_QUEUE_FULL (0x28)
1254 #define S_ILLEGAL (0xff)
1255 #define S_SENSE (0x80)
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267 #define ncr_build_sge(np, data, badd, len) \
1268 do { \
1269 (data)->addr = cpu_to_scr(badd); \
1270 (data)->size = cpu_to_scr(len); \
1271 } while (0)
1272
1273
1274
1275
1276
1277
1278
1279
1280 struct ncr_slot {
1281 u_long base;
1282 u_long base_2;
1283 u_long base_c;
1284 u_long base_2_c;
1285 void __iomem *base_v;
1286 void __iomem *base_2_v;
1287 int irq;
1288
1289 volatile struct ncr_reg __iomem *reg;
1290 };
1291
1292
1293
1294
1295
1296
1297
1298
1299 struct ncr_device {
1300 struct device *dev;
1301 struct ncr_slot slot;
1302 struct ncr_chip chip;
1303 u_char host_id;
1304 u8 differential;
1305 };
1306
1307 extern struct Scsi_Host *ncr_attach(struct scsi_host_template *tpnt, int unit, struct ncr_device *device);
1308 extern void ncr53c8xx_release(struct Scsi_Host *host);
1309 irqreturn_t ncr53c8xx_intr(int irq, void *dev_id);
1310 extern int ncr53c8xx_init(void);
1311 extern void ncr53c8xx_exit(void);
1312
1313 #endif