xref: /rk3399_rockchip-uboot/include/sym53c8xx.h (revision 326ea986ac150acdc7656d57fca647db80b50158)
1e85390dcSwdenk /*
2e85390dcSwdenk  * (C) Copyright 2001
3e85390dcSwdenk  * Denis Peter, MPL AG Switzerland
4e85390dcSwdenk  *
5*1a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
6e85390dcSwdenk  *
7e85390dcSwdenk  * Most of these definitions are derived from
8e85390dcSwdenk  * linux/drivers/scsi/sym53c8xx_defs.h
9e85390dcSwdenk  */
10e85390dcSwdenk 
11e85390dcSwdenk #ifndef _SYM53C8XX_DEFS_H
12e85390dcSwdenk #define _SYM53C8XX_DEFS_H
13e85390dcSwdenk 
14e85390dcSwdenk 
15e85390dcSwdenk #define SCNTL0		0x00    /* full arb., ena parity, par->ATN  */
16e85390dcSwdenk 
17e85390dcSwdenk #define SCNTL1		0x01    /* no reset                         */
18e85390dcSwdenk   #define   ISCON   0x10  /* connected to scsi						*/
19e85390dcSwdenk   #define   CRST    0x08  /* force reset                      */
20e85390dcSwdenk   #define   IARB    0x02  /* immediate arbitration            */
21e85390dcSwdenk 
22e85390dcSwdenk #define SCNTL2		0x02    /* no disconnect expected           */
23e85390dcSwdenk 	#define   SDU     0x80  /* cmd: disconnect will raise error */
24e85390dcSwdenk 	#define   CHM     0x40  /* sta: chained mode                */
25e85390dcSwdenk 	#define   WSS     0x08  /* sta: wide scsi send           [W]*/
26e85390dcSwdenk 	#define   WSR     0x01  /* sta: wide scsi received       [W]*/
27e85390dcSwdenk 
28e85390dcSwdenk #define SCNTL3		0x03    /* cnf system clock dependent       */
29e85390dcSwdenk 	#define   EWS     0x08  /* cmd: enable wide scsi         [W]*/
30e85390dcSwdenk 	#define   ULTRA   0x80  /* cmd: ULTRA enable                */
31e85390dcSwdenk 				/* bits 0-2, 7 rsvd for C1010       */
32e85390dcSwdenk 
33e85390dcSwdenk #define SCID			0x04		/* cnf host adapter scsi address    */
34e85390dcSwdenk 	#define   RRE     0x40  /* r/w:e enable response to resel.  */
35e85390dcSwdenk 	#define   SRE     0x20  /* r/w:e enable response to select  */
36e85390dcSwdenk 
37e85390dcSwdenk #define SXFER			0x05		/* ### Sync speed and count         */
38e85390dcSwdenk 				/* bits 6-7 rsvd for C1010          */
39e85390dcSwdenk 
40e85390dcSwdenk #define SDID			0x06	/* ### Destination-ID               */
41e85390dcSwdenk 
42e85390dcSwdenk #define GPREG			0x07	/* ??? IO-Pins                      */
43e85390dcSwdenk 
44e85390dcSwdenk #define SFBR			0x08	/* ### First byte in phase          */
45e85390dcSwdenk 
46e85390dcSwdenk #define SOCL			0x09
47e85390dcSwdenk 	#define   CREQ	  0x80	/* r/w: SCSI-REQ                    */
48e85390dcSwdenk 	#define   CACK	  0x40	/* r/w: SCSI-ACK                    */
49e85390dcSwdenk 	#define   CBSY	  0x20	/* r/w: SCSI-BSY                    */
50e85390dcSwdenk 	#define   CSEL	  0x10	/* r/w: SCSI-SEL                    */
51e85390dcSwdenk 	#define   CATN	  0x08	/* r/w: SCSI-ATN                    */
52e85390dcSwdenk 	#define   CMSG	  0x04	/* r/w: SCSI-MSG                    */
53e85390dcSwdenk 	#define   CC_D	  0x02	/* r/w: SCSI-C_D                    */
54e85390dcSwdenk 	#define   CI_O	  0x01	/* r/w: SCSI-I_O                    */
55e85390dcSwdenk 
56e85390dcSwdenk #define SSID			0x0a
57e85390dcSwdenk 
58e85390dcSwdenk #define SBCL			0x0b
59e85390dcSwdenk 
60e85390dcSwdenk #define DSTAT			0x0c
61e85390dcSwdenk   #define   DFE     0x80  /* sta: dma fifo empty              */
62e85390dcSwdenk   #define   MDPE    0x40  /* int: master data parity error    */
63e85390dcSwdenk   #define   BF      0x20  /* int: script: bus fault           */
64e85390dcSwdenk   #define   ABRT    0x10  /* int: script: command aborted     */
65e85390dcSwdenk   #define   SSI     0x08  /* int: script: single step         */
66e85390dcSwdenk   #define   SIR     0x04  /* int: script: interrupt instruct. */
67e85390dcSwdenk   #define   IID     0x01  /* int: script: illegal instruct.   */
68e85390dcSwdenk 
69e85390dcSwdenk #define SSTAT0		0x0d
70e85390dcSwdenk   #define   ILF     0x80  /* sta: data in SIDL register lsb   */
71e85390dcSwdenk   #define   ORF     0x40  /* sta: data in SODR register lsb   */
72e85390dcSwdenk   #define   OLF     0x20  /* sta: data in SODL register lsb   */
73e85390dcSwdenk   #define   AIP     0x10  /* sta: arbitration in progress     */
74e85390dcSwdenk   #define   LOA     0x08  /* sta: arbitration lost            */
75e85390dcSwdenk   #define   WOA     0x04  /* sta: arbitration won             */
76e85390dcSwdenk   #define   IRST    0x02  /* sta: scsi reset signal           */
77e85390dcSwdenk   #define   SDP     0x01  /* sta: scsi parity signal          */
78e85390dcSwdenk 
79e85390dcSwdenk #define SSTAT1		0x0e
80e85390dcSwdenk 	#define   FF3210  0xf0	/* sta: bytes in the scsi fifo      */
81e85390dcSwdenk 
82e85390dcSwdenk #define SSTAT2		0x0f
83e85390dcSwdenk   #define   ILF1    0x80  /* sta: data in SIDL register msb[W]*/
84e85390dcSwdenk   #define   ORF1    0x40  /* sta: data in SODR register msb[W]*/
85e85390dcSwdenk   #define   OLF1    0x20  /* sta: data in SODL register msb[W]*/
86e85390dcSwdenk   #define   DM      0x04  /* sta: DIFFSENS mismatch (895/6 only) */
87e85390dcSwdenk   #define   LDSC    0x02  /* sta: disconnect & reconnect      */
88e85390dcSwdenk 
89e85390dcSwdenk #define DSA				0x10		/* --> Base page                    */
90e85390dcSwdenk #define DSA1			0x11
91e85390dcSwdenk #define DSA2			0x12
92e85390dcSwdenk #define DSA3			0x13
93e85390dcSwdenk 
94e85390dcSwdenk #define ISTAT			0x14	/* --> Main Command and status      */
95e85390dcSwdenk   #define   CABRT   0x80  /* cmd: abort current operation     */
96e85390dcSwdenk   #define   SRST    0x40  /* mod: reset chip                  */
97e85390dcSwdenk   #define   SIGP    0x20  /* r/w: message from host to ncr    */
98e85390dcSwdenk   #define   SEM     0x10  /* r/w: message between host + ncr  */
99e85390dcSwdenk   #define   CON     0x08  /* sta: connected to scsi           */
100e85390dcSwdenk   #define   INTF    0x04  /* sta: int on the fly (reset by wr)*/
101e85390dcSwdenk   #define   SIP     0x02  /* sta: scsi-interrupt              */
102e85390dcSwdenk   #define   DIP     0x01  /* sta: host/script interrupt       */
103e85390dcSwdenk 
104e85390dcSwdenk 
105e85390dcSwdenk #define CTEST0		0x18
106e85390dcSwdenk #define CTEST1		0x19
107e85390dcSwdenk #define CTEST2		0x1a
108e85390dcSwdenk 	#define   CSIGP   0x40
109e85390dcSwdenk 				/* bits 0-2,7 rsvd for C1010        */
110e85390dcSwdenk 
111e85390dcSwdenk #define CTEST3		0x1b
112e85390dcSwdenk 	#define   FLF     0x08  /* cmd: flush dma fifo              */
113e85390dcSwdenk 	#define   CLF		0x04	/* cmd: clear dma fifo		    */
114e85390dcSwdenk 	#define   FM      0x02  /* mod: fetch pin mode              */
115e85390dcSwdenk 	#define   WRIE    0x01  /* mod: write and invalidate enable */
116e85390dcSwdenk 				/* bits 4-7 rsvd for C1010          */
117e85390dcSwdenk 
118e85390dcSwdenk #define DFIFO			0x20
119e85390dcSwdenk #define CTEST4		0x21
120e85390dcSwdenk 	#define   BDIS    0x80  /* mod: burst disable               */
121e85390dcSwdenk 	#define   MPEE    0x08  /* mod: master parity error enable  */
122e85390dcSwdenk 
123e85390dcSwdenk #define CTEST5		0x22
124e85390dcSwdenk 	#define   DFS     0x20  /* mod: dma fifo size               */
125e85390dcSwdenk 				/* bits 0-1, 3-7 rsvd for C1010          */
126e85390dcSwdenk #define CTEST6		0x23
127e85390dcSwdenk 
128e85390dcSwdenk #define DBC				0x24	/* ### Byte count and command       */
129e85390dcSwdenk #define DNAD			0x28	/* ### Next command register        */
130e85390dcSwdenk #define DSP				0x2c	/* --> Script Pointer               */
131e85390dcSwdenk #define DSPS			0x30	/* --> Script pointer save/opcode#2 */
132e85390dcSwdenk 
133e85390dcSwdenk #define SCRATCHA	0x34  /* Temporary register a            */
134e85390dcSwdenk #define SCRATCHA1	0x35
135e85390dcSwdenk #define SCRATCHA2	0x36
136e85390dcSwdenk #define SCRATCHA3	0x37
137e85390dcSwdenk 
138e85390dcSwdenk #define DMODE			0x38
139e85390dcSwdenk 	#define   BL_2    0x80  /* mod: burst length shift value +2 */
140e85390dcSwdenk 	#define   BL_1    0x40  /* mod: burst length shift value +1 */
141e85390dcSwdenk 	#define   ERL     0x08  /* mod: enable read line            */
142e85390dcSwdenk 	#define   ERMP    0x04  /* mod: enable read multiple        */
143e85390dcSwdenk 	#define   BOF     0x02  /* mod: burst op code fetch         */
144e85390dcSwdenk 	#define   MAN     0x01  /* mod: manual start				         */
145e85390dcSwdenk 
146e85390dcSwdenk #define DIEN		0x39
147e85390dcSwdenk #define SBR			0x3a
148e85390dcSwdenk 
149e85390dcSwdenk #define DCNTL		0x3b			/* --> Script execution control     */
150e85390dcSwdenk 	#define   CLSE    0x80  /* mod: cache line size enable      */
151e85390dcSwdenk 	#define   PFF     0x40  /* cmd: pre-fetch flush             */
152e85390dcSwdenk 	#define   PFEN    0x20  /* mod: pre-fetch enable            */
153e85390dcSwdenk 	#define   SSM     0x10  /* mod: single step mode            */
154e85390dcSwdenk 	#define   IRQM    0x08  /* mod: irq mode (1 = totem pole !) */
155e85390dcSwdenk 	#define   STD     0x04  /* cmd: start dma mode              */
156e85390dcSwdenk 	#define   IRQD    0x02  /* mod: irq disable                 */
157e85390dcSwdenk 	#define	  NOCOM   0x01	/* cmd: protect sfbr while reselect */
158e85390dcSwdenk 				/* bits 0-1 rsvd for C1010          */
159e85390dcSwdenk 
160e85390dcSwdenk #define ADDER			0x3c
161e85390dcSwdenk 
162e85390dcSwdenk #define SIEN			0x40	/* -->: interrupt enable            */
163e85390dcSwdenk #define SIST			0x42	/* <--: interrupt status            */
164e85390dcSwdenk   #define   SBMC    0x1000/* sta: SCSI Bus Mode Change (895/6 only) */
165e85390dcSwdenk   #define   STO     0x0400/* sta: timeout (select)            */
166e85390dcSwdenk   #define   GEN     0x0200/* sta: timeout (general)           */
167e85390dcSwdenk   #define   HTH     0x0100/* sta: timeout (handshake)         */
168e85390dcSwdenk   #define   MA      0x80  /* sta: phase mismatch              */
169e85390dcSwdenk   #define   CMP     0x40  /* sta: arbitration complete        */
170e85390dcSwdenk   #define   SEL     0x20  /* sta: selected by another device  */
171e85390dcSwdenk   #define   RSL     0x10  /* sta: reselected by another device*/
172e85390dcSwdenk   #define   SGE     0x08  /* sta: gross error (over/underflow)*/
173e85390dcSwdenk   #define   UDC     0x04  /* sta: unexpected disconnect       */
174e85390dcSwdenk   #define   RST     0x02  /* sta: scsi bus reset detected     */
175e85390dcSwdenk   #define   PAR     0x01  /* sta: scsi parity error           */
176e85390dcSwdenk 
177e85390dcSwdenk #define SLPAR				0x44
178e85390dcSwdenk #define SWIDE				0x45
179e85390dcSwdenk #define MACNTL			0x46
180e85390dcSwdenk #define GPCNTL			0x47
181e85390dcSwdenk #define STIME0			0x48    /* cmd: timeout for select&handshake*/
182e85390dcSwdenk #define STIME1			0x49    /* cmd: timeout user defined        */
183e85390dcSwdenk #define RESPID			0x4a    /* sta: Reselect-IDs                */
184e85390dcSwdenk 
185e85390dcSwdenk #define STEST0			0x4c
186e85390dcSwdenk 
187e85390dcSwdenk #define STEST1			0x4d
188e85390dcSwdenk 	#define   SCLK    0x80	/* Use the PCI clock as SCSI clock	*/
189e85390dcSwdenk 	#define   DBLEN   0x08	/* clock doubler running		*/
190e85390dcSwdenk 	#define   DBLSEL  0x04	/* clock doubler selected		*/
191e85390dcSwdenk 
192e85390dcSwdenk 
193e85390dcSwdenk #define STEST2			0x4e
194e85390dcSwdenk 	#define   ROF     0x40	/* reset scsi offset (after gross error!) */
195e85390dcSwdenk 	#define   EXT     0x02  /* extended filtering                     */
196e85390dcSwdenk 
197e85390dcSwdenk #define STEST3			0x4f
198e85390dcSwdenk 	#define   TE     0x80	/* c: tolerAnt enable */
199e85390dcSwdenk 	#define   HSC    0x20	/* c: Halt SCSI Clock */
200e85390dcSwdenk 	#define   CSF    0x02	/* c: clear scsi fifo */
201e85390dcSwdenk 
202e85390dcSwdenk #define SIDL			0x50	/* Lowlevel: latched from scsi data */
203e85390dcSwdenk #define STEST4		0x52
204e85390dcSwdenk 	#define SMODE	0xc0	/* SCSI bus mode      (895/6 only) */
205e85390dcSwdenk 	#define SMODE_HVD 0x40	/* High Voltage Differential       */
206e85390dcSwdenk 	#define SMODE_SE  0x80	/* Single Ended                    */
207e85390dcSwdenk 	#define SMODE_LVD 0xc0	/* Low Voltage Differential        */
208e85390dcSwdenk 	#define LCKFRQ 0x20	/* Frequency Lock (895/6 only)     */
209e85390dcSwdenk 				/* bits 0-5 rsvd for C1010          */
210e85390dcSwdenk 
211e85390dcSwdenk #define SODL			0x54	/* Lowlevel: data out to scsi data  */
212e85390dcSwdenk 
213e85390dcSwdenk #define SBDL			0x58	/* Lowlevel: data from scsi data    */
214e85390dcSwdenk 
215e85390dcSwdenk 
216e85390dcSwdenk /*-----------------------------------------------------------
217e85390dcSwdenk **
218e85390dcSwdenk **	Utility macros for the script.
219e85390dcSwdenk **
220e85390dcSwdenk **-----------------------------------------------------------
221e85390dcSwdenk */
222e85390dcSwdenk 
223e85390dcSwdenk #define REG(r) (r)
224e85390dcSwdenk 
225e85390dcSwdenk /*-----------------------------------------------------------
226e85390dcSwdenk **
227e85390dcSwdenk **	SCSI phases
228e85390dcSwdenk **
229e85390dcSwdenk **	DT phases illegal for ncr driver.
230e85390dcSwdenk **
231e85390dcSwdenk **-----------------------------------------------------------
232e85390dcSwdenk */
233e85390dcSwdenk 
234e85390dcSwdenk #define	SCR_DATA_OUT	0x00000000
235e85390dcSwdenk #define	SCR_DATA_IN	0x01000000
236e85390dcSwdenk #define	SCR_COMMAND	0x02000000
237e85390dcSwdenk #define	SCR_STATUS	0x03000000
238e85390dcSwdenk #define SCR_DT_DATA_OUT	0x04000000
239e85390dcSwdenk #define SCR_DT_DATA_IN	0x05000000
240e85390dcSwdenk #define SCR_MSG_OUT	0x06000000
241e85390dcSwdenk #define SCR_MSG_IN      0x07000000
242e85390dcSwdenk 
243e85390dcSwdenk #define SCR_ILG_OUT	0x04000000
244e85390dcSwdenk #define SCR_ILG_IN	0x05000000
245e85390dcSwdenk 
246e85390dcSwdenk /*-----------------------------------------------------------
247e85390dcSwdenk **
248e85390dcSwdenk **	Data transfer via SCSI.
249e85390dcSwdenk **
250e85390dcSwdenk **-----------------------------------------------------------
251e85390dcSwdenk **
252e85390dcSwdenk **	MOVE_ABS (LEN)
253e85390dcSwdenk **	<<start address>>
254e85390dcSwdenk **
255e85390dcSwdenk **	MOVE_IND (LEN)
256e85390dcSwdenk **	<<dnad_offset>>
257e85390dcSwdenk **
258e85390dcSwdenk **	MOVE_TBL
259e85390dcSwdenk **	<<dnad_offset>>
260e85390dcSwdenk **
261e85390dcSwdenk **-----------------------------------------------------------
262e85390dcSwdenk */
263e85390dcSwdenk 
264e85390dcSwdenk #define OPC_MOVE          0x08000000
265e85390dcSwdenk 
266e85390dcSwdenk #define SCR_MOVE_ABS(l) ((0x00000000 | OPC_MOVE) | (l))
267e85390dcSwdenk #define SCR_MOVE_IND(l) ((0x20000000 | OPC_MOVE) | (l))
268e85390dcSwdenk #define SCR_MOVE_TBL     (0x10000000 | OPC_MOVE)
269e85390dcSwdenk 
270e85390dcSwdenk #define SCR_CHMOV_ABS(l) ((0x00000000) | (l))
271e85390dcSwdenk #define SCR_CHMOV_IND(l) ((0x20000000) | (l))
272e85390dcSwdenk #define SCR_CHMOV_TBL     (0x10000000)
273e85390dcSwdenk 
274e85390dcSwdenk 
275e85390dcSwdenk /*-----------------------------------------------------------
276e85390dcSwdenk **
277e85390dcSwdenk **	Selection
278e85390dcSwdenk **
279e85390dcSwdenk **-----------------------------------------------------------
280e85390dcSwdenk **
281e85390dcSwdenk **	SEL_ABS | SCR_ID (0..15)    [ | REL_JMP]
282e85390dcSwdenk **	<<alternate_address>>
283e85390dcSwdenk **
284e85390dcSwdenk **	SEL_TBL | << dnad_offset>>  [ | REL_JMP]
285e85390dcSwdenk **	<<alternate_address>>
286e85390dcSwdenk **
287e85390dcSwdenk **-----------------------------------------------------------
288e85390dcSwdenk */
289e85390dcSwdenk 
290e85390dcSwdenk #define	SCR_SEL_ABS	0x40000000
291e85390dcSwdenk #define	SCR_SEL_ABS_ATN	0x41000000
292e85390dcSwdenk #define	SCR_SEL_TBL	0x42000000
293e85390dcSwdenk #define	SCR_SEL_TBL_ATN	0x43000000
294e85390dcSwdenk 
295e85390dcSwdenk 
296e85390dcSwdenk #define SCR_JMP_REL     0x04000000
297e85390dcSwdenk #define SCR_ID(id)	(((unsigned long)(id)) << 16)
298e85390dcSwdenk 
299e85390dcSwdenk /*-----------------------------------------------------------
300e85390dcSwdenk **
301e85390dcSwdenk **	Waiting for Disconnect or Reselect
302e85390dcSwdenk **
303e85390dcSwdenk **-----------------------------------------------------------
304e85390dcSwdenk **
305e85390dcSwdenk **	WAIT_DISC
306e85390dcSwdenk **	dummy: <<alternate_address>>
307e85390dcSwdenk **
308e85390dcSwdenk **	WAIT_RESEL
309e85390dcSwdenk **	<<alternate_address>>
310e85390dcSwdenk **
311e85390dcSwdenk **-----------------------------------------------------------
312e85390dcSwdenk */
313e85390dcSwdenk 
314e85390dcSwdenk #define	SCR_WAIT_DISC	0x48000000
315e85390dcSwdenk #define SCR_WAIT_RESEL  0x50000000
316e85390dcSwdenk 
317e85390dcSwdenk /*-----------------------------------------------------------
318e85390dcSwdenk **
319e85390dcSwdenk **	Bit Set / Reset
320e85390dcSwdenk **
321e85390dcSwdenk **-----------------------------------------------------------
322e85390dcSwdenk **
323e85390dcSwdenk **	SET (flags {|.. })
324e85390dcSwdenk **
325e85390dcSwdenk **	CLR (flags {|.. })
326e85390dcSwdenk **
327e85390dcSwdenk **-----------------------------------------------------------
328e85390dcSwdenk */
329e85390dcSwdenk 
330e85390dcSwdenk #define SCR_SET(f)     (0x58000000 | (f))
331e85390dcSwdenk #define SCR_CLR(f)     (0x60000000 | (f))
332e85390dcSwdenk 
333e85390dcSwdenk #define	SCR_CARRY	0x00000400
334e85390dcSwdenk #define	SCR_TRG		0x00000200
335e85390dcSwdenk #define	SCR_ACK		0x00000040
336e85390dcSwdenk #define	SCR_ATN		0x00000008
337e85390dcSwdenk 
338e85390dcSwdenk 
339e85390dcSwdenk /*-----------------------------------------------------------
340e85390dcSwdenk **
341e85390dcSwdenk **	Memory to memory move
342e85390dcSwdenk **
343e85390dcSwdenk **-----------------------------------------------------------
344e85390dcSwdenk **
345e85390dcSwdenk **	COPY (bytecount)
346e85390dcSwdenk **	<< source_address >>
347e85390dcSwdenk **	<< destination_address >>
348e85390dcSwdenk **
349e85390dcSwdenk **	SCR_COPY   sets the NO FLUSH option by default.
350e85390dcSwdenk **	SCR_COPY_F does not set this option.
351e85390dcSwdenk **
352e85390dcSwdenk **	For chips which do not support this option,
353e85390dcSwdenk **	ncr_copy_and_bind() will remove this bit.
354e85390dcSwdenk **-----------------------------------------------------------
355e85390dcSwdenk */
356e85390dcSwdenk 
357e85390dcSwdenk #define SCR_NO_FLUSH 0x01000000
358e85390dcSwdenk 
359e85390dcSwdenk #define SCR_COPY(n) (0xc0000000 | SCR_NO_FLUSH | (n))
360e85390dcSwdenk #define SCR_COPY_F(n) (0xc0000000 | (n))
361e85390dcSwdenk 
362e85390dcSwdenk /*-----------------------------------------------------------
363e85390dcSwdenk **
364e85390dcSwdenk **	Register move and binary operations
365e85390dcSwdenk **
366e85390dcSwdenk **-----------------------------------------------------------
367e85390dcSwdenk **
368e85390dcSwdenk **	SFBR_REG (reg, op, data)        reg  = SFBR op data
369e85390dcSwdenk **	<< 0 >>
370e85390dcSwdenk **
371e85390dcSwdenk **	REG_SFBR (reg, op, data)        SFBR = reg op data
372e85390dcSwdenk **	<< 0 >>
373e85390dcSwdenk **
374e85390dcSwdenk **	REG_REG  (reg, op, data)        reg  = reg op data
375e85390dcSwdenk **	<< 0 >>
376e85390dcSwdenk **
377e85390dcSwdenk **-----------------------------------------------------------
378e85390dcSwdenk **	On 810A, 860, 825A, 875, 895 and 896 chips the content
379e85390dcSwdenk **	of SFBR register can be used as data (SCR_SFBR_DATA).
380e85390dcSwdenk **	The 896 has additionnal IO registers starting at
381e85390dcSwdenk **	offset 0x80. Bit 7 of register offset is stored in
382e85390dcSwdenk **	bit 7 of the SCRIPTS instruction first DWORD.
383e85390dcSwdenk **-----------------------------------------------------------
384e85390dcSwdenk */
385e85390dcSwdenk 
386e85390dcSwdenk #define SCR_REG_OFS(ofs) ((((ofs) & 0x7f) << 16ul)) /* + ((ofs) & 0x80)) */
387e85390dcSwdenk 
388e85390dcSwdenk #define SCR_SFBR_REG(reg,op,data) \
389e85390dcSwdenk 	(0x68000000 | (SCR_REG_OFS(REG(reg))) | (op) | (((data)&0xff)<<8ul))
390e85390dcSwdenk 
391e85390dcSwdenk #define SCR_REG_SFBR(reg,op,data) \
392e85390dcSwdenk 	(0x70000000 | (SCR_REG_OFS(REG(reg))) | (op) | (((data)&0xff)<<8ul))
393e85390dcSwdenk 
394e85390dcSwdenk #define SCR_REG_REG(reg,op,data) \
395e85390dcSwdenk 	(0x78000000 | (SCR_REG_OFS(REG(reg))) | (op) | (((data)&0xff)<<8ul))
396e85390dcSwdenk 
397e85390dcSwdenk 
398e85390dcSwdenk #define      SCR_LOAD   0x00000000
399e85390dcSwdenk #define      SCR_SHL    0x01000000
400e85390dcSwdenk #define      SCR_OR     0x02000000
401e85390dcSwdenk #define      SCR_XOR    0x03000000
402e85390dcSwdenk #define      SCR_AND    0x04000000
403e85390dcSwdenk #define      SCR_SHR    0x05000000
404e85390dcSwdenk #define      SCR_ADD    0x06000000
405e85390dcSwdenk #define      SCR_ADDC   0x07000000
406e85390dcSwdenk 
407e85390dcSwdenk #define      SCR_SFBR_DATA   (0x00800000>>8ul)	/* Use SFBR as data */
408e85390dcSwdenk 
409e85390dcSwdenk /*-----------------------------------------------------------
410e85390dcSwdenk **
411e85390dcSwdenk **	FROM_REG (reg)		  SFBR = reg
412e85390dcSwdenk **	<< 0 >>
413e85390dcSwdenk **
414e85390dcSwdenk **	TO_REG	 (reg)		  reg  = SFBR
415e85390dcSwdenk **	<< 0 >>
416e85390dcSwdenk **
417e85390dcSwdenk **	LOAD_REG (reg, data)	  reg  = <data>
418e85390dcSwdenk **	<< 0 >>
419e85390dcSwdenk **
420e85390dcSwdenk **	LOAD_SFBR(data)		  SFBR = <data>
421e85390dcSwdenk **	<< 0 >>
422e85390dcSwdenk **
423e85390dcSwdenk **-----------------------------------------------------------
424e85390dcSwdenk */
425e85390dcSwdenk 
426e85390dcSwdenk #define	SCR_FROM_REG(reg) \
427e85390dcSwdenk 	SCR_REG_SFBR(reg,SCR_OR,0)
428e85390dcSwdenk 
429e85390dcSwdenk #define	SCR_TO_REG(reg) \
430e85390dcSwdenk 	SCR_SFBR_REG(reg,SCR_OR,0)
431e85390dcSwdenk 
432e85390dcSwdenk #define	SCR_LOAD_REG(reg,data) \
433e85390dcSwdenk 	SCR_REG_REG(reg,SCR_LOAD,data)
434e85390dcSwdenk 
435e85390dcSwdenk #define SCR_LOAD_SFBR(data) \
436e85390dcSwdenk 	(SCR_REG_SFBR (gpreg, SCR_LOAD, data))
437e85390dcSwdenk 
438e85390dcSwdenk /*-----------------------------------------------------------
439e85390dcSwdenk **
440e85390dcSwdenk **	LOAD  from memory   to register.
441e85390dcSwdenk **	STORE from register to memory.
442e85390dcSwdenk **
443e85390dcSwdenk **	Only supported by 810A, 860, 825A, 875, 895 and 896.
444e85390dcSwdenk **
445e85390dcSwdenk **-----------------------------------------------------------
446e85390dcSwdenk **
447e85390dcSwdenk **	LOAD_ABS (LEN)
448e85390dcSwdenk **	<<start address>>
449e85390dcSwdenk **
450e85390dcSwdenk **	LOAD_REL (LEN)        (DSA relative)
451e85390dcSwdenk **	<<dsa_offset>>
452e85390dcSwdenk **
453e85390dcSwdenk **-----------------------------------------------------------
454e85390dcSwdenk */
455e85390dcSwdenk 
456e85390dcSwdenk #define SCR_REG_OFS2(ofs) (((ofs) & 0xff) << 16ul)
457e85390dcSwdenk #define SCR_NO_FLUSH2	0x02000000
458e85390dcSwdenk #define SCR_DSA_REL2	0x10000000
459e85390dcSwdenk 
460e85390dcSwdenk #define SCR_LOAD_R(reg, how, n) \
461e85390dcSwdenk 	(0xe1000000 | how | (SCR_REG_OFS2(REG(reg))) | (n))
462e85390dcSwdenk 
463e85390dcSwdenk #define SCR_STORE_R(reg, how, n) \
464e85390dcSwdenk 	(0xe0000000 | how | (SCR_REG_OFS2(REG(reg))) | (n))
465e85390dcSwdenk 
466e85390dcSwdenk #define SCR_LOAD_ABS(reg, n)	SCR_LOAD_R(reg, SCR_NO_FLUSH2, n)
467e85390dcSwdenk #define SCR_LOAD_REL(reg, n)	SCR_LOAD_R(reg, SCR_NO_FLUSH2|SCR_DSA_REL2, n)
468e85390dcSwdenk #define SCR_LOAD_ABS_F(reg, n)	SCR_LOAD_R(reg, 0, n)
469e85390dcSwdenk #define SCR_LOAD_REL_F(reg, n)	SCR_LOAD_R(reg, SCR_DSA_REL2, n)
470e85390dcSwdenk 
471e85390dcSwdenk #define SCR_STORE_ABS(reg, n)	SCR_STORE_R(reg, SCR_NO_FLUSH2, n)
472e85390dcSwdenk #define SCR_STORE_REL(reg, n)	SCR_STORE_R(reg, SCR_NO_FLUSH2|SCR_DSA_REL2,n)
473e85390dcSwdenk #define SCR_STORE_ABS_F(reg, n)	SCR_STORE_R(reg, 0, n)
474e85390dcSwdenk #define SCR_STORE_REL_F(reg, n)	SCR_STORE_R(reg, SCR_DSA_REL2, n)
475e85390dcSwdenk 
476e85390dcSwdenk 
477e85390dcSwdenk /*-----------------------------------------------------------
478e85390dcSwdenk **
479e85390dcSwdenk **	Waiting for Disconnect or Reselect
480e85390dcSwdenk **
481e85390dcSwdenk **-----------------------------------------------------------
482e85390dcSwdenk **
483e85390dcSwdenk **	JUMP            [ | IFTRUE/IFFALSE ( ... ) ]
484e85390dcSwdenk **	<<address>>
485e85390dcSwdenk **
486e85390dcSwdenk **	JUMPR           [ | IFTRUE/IFFALSE ( ... ) ]
487e85390dcSwdenk **	<<distance>>
488e85390dcSwdenk **
489e85390dcSwdenk **	CALL            [ | IFTRUE/IFFALSE ( ... ) ]
490e85390dcSwdenk **	<<address>>
491e85390dcSwdenk **
492e85390dcSwdenk **	CALLR           [ | IFTRUE/IFFALSE ( ... ) ]
493e85390dcSwdenk **	<<distance>>
494e85390dcSwdenk **
495e85390dcSwdenk **	RETURN          [ | IFTRUE/IFFALSE ( ... ) ]
496e85390dcSwdenk **	<<dummy>>
497e85390dcSwdenk **
498e85390dcSwdenk **	INT             [ | IFTRUE/IFFALSE ( ... ) ]
499e85390dcSwdenk **	<<ident>>
500e85390dcSwdenk **
501e85390dcSwdenk **	INT_FLY         [ | IFTRUE/IFFALSE ( ... ) ]
502e85390dcSwdenk **	<<ident>>
503e85390dcSwdenk **
504e85390dcSwdenk **	Conditions:
505e85390dcSwdenk **	     WHEN (phase)
506e85390dcSwdenk **	     IF   (phase)
507e85390dcSwdenk **	     CARRYSET
508e85390dcSwdenk **	     DATA (data, mask)
509e85390dcSwdenk **
510e85390dcSwdenk **-----------------------------------------------------------
511e85390dcSwdenk */
512e85390dcSwdenk 
513e85390dcSwdenk #define SCR_NO_OP       0x80000000
514e85390dcSwdenk #define SCR_JUMP        0x80080000
515e85390dcSwdenk #define SCR_JUMP64      0x80480000
516e85390dcSwdenk #define SCR_JUMPR       0x80880000
517e85390dcSwdenk #define SCR_CALL        0x88080000
518e85390dcSwdenk #define SCR_CALLR       0x88880000
519e85390dcSwdenk #define SCR_RETURN      0x90080000
520e85390dcSwdenk #define SCR_INT         0x98080000
521e85390dcSwdenk #define SCR_INT_FLY     0x98180000
522e85390dcSwdenk 
523e85390dcSwdenk #define IFFALSE(arg)   (0x00080000 | (arg))
524e85390dcSwdenk #define IFTRUE(arg)    (0x00000000 | (arg))
525e85390dcSwdenk 
526e85390dcSwdenk #define WHEN(phase)    (0x00030000 | (phase))
527e85390dcSwdenk #define IF(phase)      (0x00020000 | (phase))
528e85390dcSwdenk 
529e85390dcSwdenk #define DATA(D)        (0x00040000 | ((D) & 0xff))
530e85390dcSwdenk #define MASK(D,M)      (0x00040000 | (((M ^ 0xff) & 0xff) << 8ul)|((D) & 0xff))
531e85390dcSwdenk 
532e85390dcSwdenk #define CARRYSET       (0x00200000)
533e85390dcSwdenk 
534e85390dcSwdenk 
535e85390dcSwdenk #define SIR_COMPLETE					 0x10000000
536e85390dcSwdenk /* script errors */
537e85390dcSwdenk #define SIR_SEL_ATN_NO_MSG_OUT 0x00000001
538e85390dcSwdenk #define SIR_CMD_OUT_ILL_PH     0x00000002
539e85390dcSwdenk #define SIR_STATUS_ILL_PH			 0x00000003
540e85390dcSwdenk #define SIR_MSG_RECEIVED			 0x00000004
541e85390dcSwdenk #define SIR_DATA_IN_ERR        0x00000005
542e85390dcSwdenk #define SIR_DATA_OUT_ERR			 0x00000006
543e85390dcSwdenk #define SIR_SCRIPT_ERROR			 0x00000007
544e85390dcSwdenk #define SIR_MSG_OUT_NO_CMD		 0x00000008
545e85390dcSwdenk #define SIR_MSG_OVER7					 0x00000009
546e85390dcSwdenk /* Fly interrupt */
547e85390dcSwdenk #define INT_ON_FY							 0x00000080
548e85390dcSwdenk 
549e85390dcSwdenk /* Hardware errors  are defined in scsi.h */
550e85390dcSwdenk 
551e85390dcSwdenk #define SCSI_IDENTIFY					0xC0
552e85390dcSwdenk 
553e85390dcSwdenk #endif
554