Blame view

drivers/scsi/t128.h 4.13 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
6
7
8
9
10
  /*
   * Trantor T128/T128F/T228 defines
   *	Note : architecturally, the T100 and T128 are different and won't work
   *
   * Copyright 1993, Drew Eckhardt
   *	Visionary Computing
   *	(Unix and Linux consulting and custom programming)
   *	drew@colorado.edu
   *      +1 (303) 440-4894
   *
667c667f8   Henrik Kretzschmar   [SCSI] scsi: t128...
11
   * DISTRIBUTION RELEASE 3.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
12
   *
667c667f8   Henrik Kretzschmar   [SCSI] scsi: t128...
13
   * For more information, please consult
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
14
15
16
17
   *
   * Trantor Systems, Ltd.
   * T128/T128F/T228 SCSI Host Adapter
   * Hardware Specifications
667c667f8   Henrik Kretzschmar   [SCSI] scsi: t128...
18
19
   *
   * Trantor Systems, Ltd.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
20
21
22
   * 5415 Randall Place
   * Fremont, CA 94538
   * 1+ (415) 770-1400, FAX 1+ (415) 770-9910
667c667f8   Henrik Kretzschmar   [SCSI] scsi: t128...
23
24
   *
   * and
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
   *
   * NCR 5380 Family
   * SCSI Protocol Controller
   * Databook
   *
   * NCR Microelectronics
   * 1635 Aeroplaza Drive
   * Colorado Springs, CO 80916
   * 1+ (719) 578-3400
   * 1+ (800) 334-5454
   */
  
  /*
   * $Log: t128.h,v $
   */
  
  #ifndef T128_H
  #define T128_H
  
  #define T128_PUBLIC_RELEASE 3
44456d37b   Olaf Hering   [PATCH] turn many...
45
  #define TDEBUG		0
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
46
47
48
49
  #define TDEBUG_INIT	0x1
  #define TDEBUG_TRANSFER 0x2
  
  /*
667c667f8   Henrik Kretzschmar   [SCSI] scsi: t128...
50
   * The trantor boards are memory mapped. They use an NCR5380 or
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
51
   * equivalent (my sample board had part second sourced from ZILOG).
667c667f8   Henrik Kretzschmar   [SCSI] scsi: t128...
52
   * NCR's recommended "Pseudo-DMA" architecture is used, where
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
53
   * a PAL drives the DMA signals on the 5380 allowing fast, blind
667c667f8   Henrik Kretzschmar   [SCSI] scsi: t128...
54
   * transfers with proper handshaking.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
55
56
57
   */
  
  /*
667c667f8   Henrik Kretzschmar   [SCSI] scsi: t128...
58
   * Note : a boot switch is provided for the purpose of informing the
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
   * firmware to boot or not boot from attached SCSI devices.  So, I imagine
   * there are fewer people who've yanked the ROM like they do on the Seagate
   * to make bootup faster, and I'll probably use this for autodetection.
   */
  #define T_ROM_OFFSET		0
  
  /*
   * Note : my sample board *WAS NOT* populated with the SRAM, so this
   * can't be used for autodetection without a ROM present.
   */
  #define T_RAM_OFFSET		0x1800
  
  /*
   * All of the registers are allocated 32 bytes of address space, except
   * for the data register (read/write to/from the 5380 in pseudo-DMA mode)
   */ 
  #define T_CONTROL_REG_OFFSET	0x1c00	/* rw */
  #define T_CR_INT		0x10	/* Enable interrupts */
  #define T_CR_CT			0x02	/* Reset watchdog timer */
  
  #define T_STATUS_REG_OFFSET	0x1c20	/* ro */
  #define T_ST_BOOT		0x80	/* Boot switch */
  #define T_ST_S3			0x40	/* User settable switches, */
  #define T_ST_S2			0x20	/* read 0 when switch is on, 1 off */
  #define T_ST_S1			0x10
  #define T_ST_PS2		0x08	/* Set for Microchannel 228 */
  #define T_ST_RDY		0x04	/* 5380 DRQ */
  #define T_ST_TIM		0x02	/* indicates 40us watchdog timer fired */
  #define T_ST_ZERO		0x01	/* Always zero */
  
  #define T_5380_OFFSET		0x1d00	/* 8 registers here, see NCR5380.h */
  
  #define T_DATA_REG_OFFSET	0x1e00	/* rw 512 bytes long */
  
  #ifndef ASM
667c667f8   Henrik Kretzschmar   [SCSI] scsi: t128...
94
  static int t128_abort(struct scsi_cmnd *);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
95
96
  static int t128_biosparam(struct scsi_device *, struct block_device *,
  			  sector_t, int*);
d0be4a7d2   Christoph Hellwig   [SCSI] remove Scs...
97
  static int t128_detect(struct scsi_host_template *);
f281233d3   Jeff Garzik   SCSI host lock pu...
98
  static int t128_queue_command(struct Scsi_Host *, struct scsi_cmnd *);
667c667f8   Henrik Kretzschmar   [SCSI] scsi: t128...
99
  static int t128_bus_reset(struct scsi_cmnd *);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
100
101
102
103
104
105
  
  #ifndef CMD_PER_LUN
  #define CMD_PER_LUN 2
  #endif
  
  #ifndef CAN_QUEUE
667c667f8   Henrik Kretzschmar   [SCSI] scsi: t128...
106
  #define CAN_QUEUE 32
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
107
108
109
110
111
112
113
114
115
116
117
118
119
120
  #endif
  
  #ifndef HOSTS_C
  
  #define NCR5380_implementation_fields \
      void __iomem *base
  
  #define NCR5380_local_declare() \
      void __iomem *base
  
  #define NCR5380_setup(instance) \
      base = ((struct NCR5380_hostdata *)(instance->hostdata))->base
  
  #define T128_address(reg) (base + T_5380_OFFSET + ((reg) * 0x20))
667c667f8   Henrik Kretzschmar   [SCSI] scsi: t128...
121
  #if !(TDEBUG & TDEBUG_TRANSFER)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
122
123
124
125
126
127
128
129
130
  #define NCR5380_read(reg) readb(T128_address(reg))
  #define NCR5380_write(reg, value) writeb((value),(T128_address(reg)))
  #else
  #define NCR5380_read(reg)						\
      (((unsigned char) printk("scsi%d : read register %d at address %08x
  "\
      , instance->hostno, (reg), T128_address(reg))), readb(T128_address(reg)))
  
  #define NCR5380_write(reg, value) {					\
667c667f8   Henrik Kretzschmar   [SCSI] scsi: t128...
131
132
      printk("scsi%d : write %02x to register %d at address %08x
  ",	\
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
133
134
135
136
137
138
139
140
141
  	    instance->hostno, (value), (reg), T128_address(reg));	\
      writeb((value), (T128_address(reg)));				\
  }
  #endif
  
  #define NCR5380_intr t128_intr
  #define do_NCR5380_intr do_t128_intr
  #define NCR5380_queue_command t128_queue_command
  #define NCR5380_abort t128_abort
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
142
143
  #define NCR5380_bus_reset t128_bus_reset
  #define NCR5380_proc_info t128_proc_info
667c667f8   Henrik Kretzschmar   [SCSI] scsi: t128...
144
  /* 15 14 12 10 7 5 3
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
145
     1101 0100 1010 1000 */
667c667f8   Henrik Kretzschmar   [SCSI] scsi: t128...
146
147
  
  #define T128_IRQS 0xc4a8
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
148
149
150
151
  
  #endif /* else def HOSTS_C */
  #endif /* ndef ASM */
  #endif /* T128_H */