xref: /OK3568_Linux_fs/kernel/drivers/scsi/dc395x.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /************************************************************************/
3*4882a593Smuzhiyun /*									*/
4*4882a593Smuzhiyun /*	dc395x.h							*/
5*4882a593Smuzhiyun /*									*/
6*4882a593Smuzhiyun /*	Device Driver for Tekram DC395(U/UW/F), DC315(U)		*/
7*4882a593Smuzhiyun /*	PCI SCSI Bus Master Host Adapter				*/
8*4882a593Smuzhiyun /*	(SCSI chip set used Tekram ASIC TRM-S1040)			*/
9*4882a593Smuzhiyun /*									*/
10*4882a593Smuzhiyun /************************************************************************/
11*4882a593Smuzhiyun #ifndef DC395x_H
12*4882a593Smuzhiyun #define DC395x_H
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun /************************************************************************/
15*4882a593Smuzhiyun /*									*/
16*4882a593Smuzhiyun /*	Initial values							*/
17*4882a593Smuzhiyun /*									*/
18*4882a593Smuzhiyun /************************************************************************/
19*4882a593Smuzhiyun #define DC395x_MAX_CMD_QUEUE		32
20*4882a593Smuzhiyun /* #define DC395x_MAX_QTAGS		32 */
21*4882a593Smuzhiyun #define DC395x_MAX_QTAGS		16
22*4882a593Smuzhiyun #define DC395x_MAX_SCSI_ID		16
23*4882a593Smuzhiyun #define DC395x_MAX_CMD_PER_LUN		DC395x_MAX_QTAGS
24*4882a593Smuzhiyun #define DC395x_MAX_SG_TABLESIZE		64	/* HW limitation			*/
25*4882a593Smuzhiyun #define DC395x_MAX_SG_LISTENTRY		64	/* Must be equal or lower to previous	*/
26*4882a593Smuzhiyun 						/* item					*/
27*4882a593Smuzhiyun #define DC395x_MAX_SRB_CNT		63
28*4882a593Smuzhiyun /* #define DC395x_MAX_CAN_QUEUE		7 * DC395x_MAX_QTAGS */
29*4882a593Smuzhiyun #define DC395x_MAX_CAN_QUEUE		DC395x_MAX_SRB_CNT
30*4882a593Smuzhiyun #define DC395x_END_SCAN			2
31*4882a593Smuzhiyun #define DC395x_SEL_TIMEOUT		153	/* 250 ms selection timeout (@ 40 MHz)	*/
32*4882a593Smuzhiyun #define DC395x_MAX_RETRIES		3
33*4882a593Smuzhiyun 
34*4882a593Smuzhiyun #if 0
35*4882a593Smuzhiyun #define SYNC_FIRST
36*4882a593Smuzhiyun #endif
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun #define NORM_REC_LVL			0
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun /************************************************************************/
41*4882a593Smuzhiyun /*									*/
42*4882a593Smuzhiyun /*	Various definitions						*/
43*4882a593Smuzhiyun /*									*/
44*4882a593Smuzhiyun /************************************************************************/
45*4882a593Smuzhiyun #define BIT31				0x80000000
46*4882a593Smuzhiyun #define BIT30				0x40000000
47*4882a593Smuzhiyun #define BIT29				0x20000000
48*4882a593Smuzhiyun #define BIT28				0x10000000
49*4882a593Smuzhiyun #define BIT27				0x08000000
50*4882a593Smuzhiyun #define BIT26				0x04000000
51*4882a593Smuzhiyun #define BIT25				0x02000000
52*4882a593Smuzhiyun #define BIT24				0x01000000
53*4882a593Smuzhiyun #define BIT23				0x00800000
54*4882a593Smuzhiyun #define BIT22				0x00400000
55*4882a593Smuzhiyun #define BIT21				0x00200000
56*4882a593Smuzhiyun #define BIT20				0x00100000
57*4882a593Smuzhiyun #define BIT19				0x00080000
58*4882a593Smuzhiyun #define BIT18				0x00040000
59*4882a593Smuzhiyun #define BIT17				0x00020000
60*4882a593Smuzhiyun #define BIT16				0x00010000
61*4882a593Smuzhiyun #define BIT15				0x00008000
62*4882a593Smuzhiyun #define BIT14				0x00004000
63*4882a593Smuzhiyun #define BIT13				0x00002000
64*4882a593Smuzhiyun #define BIT12				0x00001000
65*4882a593Smuzhiyun #define BIT11				0x00000800
66*4882a593Smuzhiyun #define BIT10				0x00000400
67*4882a593Smuzhiyun #define BIT9				0x00000200
68*4882a593Smuzhiyun #define BIT8				0x00000100
69*4882a593Smuzhiyun #define BIT7				0x00000080
70*4882a593Smuzhiyun #define BIT6				0x00000040
71*4882a593Smuzhiyun #define BIT5				0x00000020
72*4882a593Smuzhiyun #define BIT4				0x00000010
73*4882a593Smuzhiyun #define BIT3				0x00000008
74*4882a593Smuzhiyun #define BIT2				0x00000004
75*4882a593Smuzhiyun #define BIT1				0x00000002
76*4882a593Smuzhiyun #define BIT0				0x00000001
77*4882a593Smuzhiyun 
78*4882a593Smuzhiyun /* UnitCtrlFlag */
79*4882a593Smuzhiyun #define UNIT_ALLOCATED			BIT0
80*4882a593Smuzhiyun #define UNIT_INFO_CHANGED		BIT1
81*4882a593Smuzhiyun #define FORMATING_MEDIA			BIT2
82*4882a593Smuzhiyun #define UNIT_RETRY			BIT3
83*4882a593Smuzhiyun 
84*4882a593Smuzhiyun /* UnitFlags */
85*4882a593Smuzhiyun #define DASD_SUPPORT			BIT0
86*4882a593Smuzhiyun #define SCSI_SUPPORT			BIT1
87*4882a593Smuzhiyun #define ASPI_SUPPORT			BIT2
88*4882a593Smuzhiyun 
89*4882a593Smuzhiyun /* SRBState machine definition */
90*4882a593Smuzhiyun #define SRB_FREE			0x0000
91*4882a593Smuzhiyun #define SRB_WAIT			0x0001
92*4882a593Smuzhiyun #define SRB_READY			0x0002
93*4882a593Smuzhiyun #define SRB_MSGOUT			0x0004	/* arbitration+msg_out 1st byte		*/
94*4882a593Smuzhiyun #define SRB_MSGIN			0x0008
95*4882a593Smuzhiyun #define SRB_EXTEND_MSGIN		0x0010
96*4882a593Smuzhiyun #define SRB_COMMAND			0x0020
97*4882a593Smuzhiyun #define SRB_START_			0x0040	/* arbitration+msg_out+command_out	*/
98*4882a593Smuzhiyun #define SRB_DISCONNECT			0x0080
99*4882a593Smuzhiyun #define SRB_DATA_XFER			0x0100
100*4882a593Smuzhiyun #define SRB_XFERPAD			0x0200
101*4882a593Smuzhiyun #define SRB_STATUS			0x0400
102*4882a593Smuzhiyun #define SRB_COMPLETED			0x0800
103*4882a593Smuzhiyun #define SRB_ABORT_SENT			0x1000
104*4882a593Smuzhiyun #define SRB_DO_SYNC_NEGO		0x2000
105*4882a593Smuzhiyun #define SRB_DO_WIDE_NEGO		0x4000
106*4882a593Smuzhiyun #define SRB_UNEXPECT_RESEL		0x8000
107*4882a593Smuzhiyun 
108*4882a593Smuzhiyun /************************************************************************/
109*4882a593Smuzhiyun /*									*/
110*4882a593Smuzhiyun /*	ACB Config							*/
111*4882a593Smuzhiyun /*									*/
112*4882a593Smuzhiyun /************************************************************************/
113*4882a593Smuzhiyun #define HCC_WIDE_CARD			0x20
114*4882a593Smuzhiyun #define HCC_SCSI_RESET			0x10
115*4882a593Smuzhiyun #define HCC_PARITY			0x08
116*4882a593Smuzhiyun #define HCC_AUTOTERM			0x04
117*4882a593Smuzhiyun #define HCC_LOW8TERM			0x02
118*4882a593Smuzhiyun #define HCC_UP8TERM			0x01
119*4882a593Smuzhiyun 
120*4882a593Smuzhiyun /* ACBFlag */
121*4882a593Smuzhiyun #define RESET_DEV			BIT0
122*4882a593Smuzhiyun #define RESET_DETECT			BIT1
123*4882a593Smuzhiyun #define RESET_DONE			BIT2
124*4882a593Smuzhiyun 
125*4882a593Smuzhiyun /* DCBFlag */
126*4882a593Smuzhiyun #define ABORT_DEV_			BIT0
127*4882a593Smuzhiyun 
128*4882a593Smuzhiyun /* SRBstatus */
129*4882a593Smuzhiyun #define SRB_OK				BIT0
130*4882a593Smuzhiyun #define ABORTION			BIT1
131*4882a593Smuzhiyun #define OVER_RUN			BIT2
132*4882a593Smuzhiyun #define UNDER_RUN			BIT3
133*4882a593Smuzhiyun #define PARITY_ERROR			BIT4
134*4882a593Smuzhiyun #define SRB_ERROR			BIT5
135*4882a593Smuzhiyun 
136*4882a593Smuzhiyun /* SRBFlag */
137*4882a593Smuzhiyun #define DATAOUT				BIT7
138*4882a593Smuzhiyun #define DATAIN				BIT6
139*4882a593Smuzhiyun #define RESIDUAL_VALID			BIT5
140*4882a593Smuzhiyun #define ENABLE_TIMER			BIT4
141*4882a593Smuzhiyun #define RESET_DEV0			BIT2
142*4882a593Smuzhiyun #define ABORT_DEV			BIT1
143*4882a593Smuzhiyun #define AUTO_REQSENSE			BIT0
144*4882a593Smuzhiyun 
145*4882a593Smuzhiyun /* Adapter status */
146*4882a593Smuzhiyun #define H_STATUS_GOOD			0
147*4882a593Smuzhiyun #define H_SEL_TIMEOUT			0x11
148*4882a593Smuzhiyun #define H_OVER_UNDER_RUN		0x12
149*4882a593Smuzhiyun #define H_UNEXP_BUS_FREE		0x13
150*4882a593Smuzhiyun #define H_TARGET_PHASE_F		0x14
151*4882a593Smuzhiyun #define H_INVALID_CCB_OP		0x16
152*4882a593Smuzhiyun #define H_LINK_CCB_BAD			0x17
153*4882a593Smuzhiyun #define H_BAD_TARGET_DIR		0x18
154*4882a593Smuzhiyun #define H_DUPLICATE_CCB			0x19
155*4882a593Smuzhiyun #define H_BAD_CCB_OR_SG			0x1A
156*4882a593Smuzhiyun #define H_ABORT				0x0FF
157*4882a593Smuzhiyun 
158*4882a593Smuzhiyun /* SCSI BUS Status byte codes */
159*4882a593Smuzhiyun #define SCSI_STAT_GOOD			0x0	/* Good status				*/
160*4882a593Smuzhiyun #define SCSI_STAT_CHECKCOND		0x02	/* SCSI Check Condition			*/
161*4882a593Smuzhiyun #define SCSI_STAT_CONDMET		0x04	/* Condition Met			*/
162*4882a593Smuzhiyun #define SCSI_STAT_BUSY			0x08	/* Target busy status			*/
163*4882a593Smuzhiyun #define SCSI_STAT_INTER			0x10	/* Intermediate status			*/
164*4882a593Smuzhiyun #define SCSI_STAT_INTERCONDMET		0x14	/* Intermediate condition met		*/
165*4882a593Smuzhiyun #define SCSI_STAT_RESCONFLICT		0x18	/* Reservation conflict			*/
166*4882a593Smuzhiyun #define SCSI_STAT_CMDTERM		0x22	/* Command Terminated			*/
167*4882a593Smuzhiyun #define SCSI_STAT_QUEUEFULL		0x28	/* Queue Full				*/
168*4882a593Smuzhiyun #define SCSI_STAT_UNEXP_BUS_F		0xFD	/* Unexpect Bus Free			*/
169*4882a593Smuzhiyun #define SCSI_STAT_BUS_RST_DETECT	0xFE	/* Scsi Bus Reset detected		*/
170*4882a593Smuzhiyun #define SCSI_STAT_SEL_TIMEOUT		0xFF	/* Selection Time out			*/
171*4882a593Smuzhiyun 
172*4882a593Smuzhiyun /* Sync_Mode */
173*4882a593Smuzhiyun #define SYNC_WIDE_TAG_ATNT_DISABLE	0
174*4882a593Smuzhiyun #define SYNC_NEGO_ENABLE		BIT0
175*4882a593Smuzhiyun #define SYNC_NEGO_DONE			BIT1
176*4882a593Smuzhiyun #define WIDE_NEGO_ENABLE		BIT2
177*4882a593Smuzhiyun #define WIDE_NEGO_DONE			BIT3
178*4882a593Smuzhiyun #define WIDE_NEGO_STATE			BIT4
179*4882a593Smuzhiyun #define EN_TAG_QUEUEING			BIT5
180*4882a593Smuzhiyun #define EN_ATN_STOP			BIT6
181*4882a593Smuzhiyun 
182*4882a593Smuzhiyun #define SYNC_NEGO_OFFSET		15
183*4882a593Smuzhiyun 
184*4882a593Smuzhiyun /* SCSI MSG BYTE */
185*4882a593Smuzhiyun #define MSG_COMPLETE			0x00
186*4882a593Smuzhiyun #define MSG_EXTENDED			0x01
187*4882a593Smuzhiyun #define MSG_SAVE_PTR			0x02
188*4882a593Smuzhiyun #define MSG_RESTORE_PTR			0x03
189*4882a593Smuzhiyun #define MSG_DISCONNECT			0x04
190*4882a593Smuzhiyun #define MSG_INITIATOR_ERROR		0x05
191*4882a593Smuzhiyun #define MSG_ABORT			0x06
192*4882a593Smuzhiyun #define MSG_REJECT_			0x07
193*4882a593Smuzhiyun #define MSG_NOP				0x08
194*4882a593Smuzhiyun #define MSG_PARITY_ERROR		0x09
195*4882a593Smuzhiyun #define MSG_LINK_CMD_COMPL		0x0A
196*4882a593Smuzhiyun #define MSG_LINK_CMD_COMPL_FLG		0x0B
197*4882a593Smuzhiyun #define MSG_BUS_RESET			0x0C
198*4882a593Smuzhiyun #define MSG_ABORT_TAG			0x0D
199*4882a593Smuzhiyun #define MSG_SIMPLE_QTAG			0x20
200*4882a593Smuzhiyun #define MSG_HEAD_QTAG			0x21
201*4882a593Smuzhiyun #define MSG_ORDER_QTAG			0x22
202*4882a593Smuzhiyun #define MSG_IGNOREWIDE			0x23
203*4882a593Smuzhiyun #define MSG_IDENTIFY			0x80
204*4882a593Smuzhiyun #define MSG_HOST_ID			0xC0
205*4882a593Smuzhiyun 
206*4882a593Smuzhiyun /* SCSI STATUS BYTE */
207*4882a593Smuzhiyun #define STATUS_GOOD			0x00
208*4882a593Smuzhiyun #define CHECK_CONDITION_		0x02
209*4882a593Smuzhiyun #define STATUS_BUSY			0x08
210*4882a593Smuzhiyun #define STATUS_INTERMEDIATE		0x10
211*4882a593Smuzhiyun #define RESERVE_CONFLICT		0x18
212*4882a593Smuzhiyun 
213*4882a593Smuzhiyun /* cmd->result */
214*4882a593Smuzhiyun #define STATUS_MASK_			0xFF
215*4882a593Smuzhiyun #define MSG_MASK			0xFF00
216*4882a593Smuzhiyun #define RETURN_MASK			0xFF0000
217*4882a593Smuzhiyun 
218*4882a593Smuzhiyun /************************************************************************/
219*4882a593Smuzhiyun /*									*/
220*4882a593Smuzhiyun /*	Inquiry Data format						*/
221*4882a593Smuzhiyun /*									*/
222*4882a593Smuzhiyun /************************************************************************/
223*4882a593Smuzhiyun struct ScsiInqData
224*4882a593Smuzhiyun {						/* INQ					*/
225*4882a593Smuzhiyun 	u8 DevType;				/* Periph Qualifier & Periph Dev Type	*/
226*4882a593Smuzhiyun 	u8 RMB_TypeMod;				/* rem media bit & Dev Type Modifier	*/
227*4882a593Smuzhiyun 	u8 Vers;				/* ISO, ECMA, & ANSI versions		*/
228*4882a593Smuzhiyun 	u8 RDF;					/* AEN, TRMIOP, & response data format	*/
229*4882a593Smuzhiyun 	u8 AddLen;				/* length of additional data		*/
230*4882a593Smuzhiyun 	u8 Res1;				/* reserved				*/
231*4882a593Smuzhiyun 	u8 Res2;				/* reserved				*/
232*4882a593Smuzhiyun 	u8 Flags;				/* RelADr, Wbus32, Wbus16, Sync, etc.	*/
233*4882a593Smuzhiyun 	u8 VendorID[8];				/* Vendor Identification		*/
234*4882a593Smuzhiyun 	u8 ProductID[16];			/* Product Identification		*/
235*4882a593Smuzhiyun 	u8 ProductRev[4];			/* Product Revision			*/
236*4882a593Smuzhiyun };
237*4882a593Smuzhiyun 
238*4882a593Smuzhiyun 						/* Inquiry byte 0 masks			*/
239*4882a593Smuzhiyun #define SCSI_DEVTYPE			0x1F	/* Peripheral Device Type		*/
240*4882a593Smuzhiyun #define SCSI_PERIPHQUAL			0xE0	/* Peripheral Qualifier			*/
241*4882a593Smuzhiyun 						/* Inquiry byte 1 mask			*/
242*4882a593Smuzhiyun #define SCSI_REMOVABLE_MEDIA		0x80	/* Removable Media bit (1=removable)	*/
243*4882a593Smuzhiyun 						/* Peripheral Device Type definitions	*/
244*4882a593Smuzhiyun 						/* See include/scsi/scsi.h		*/
245*4882a593Smuzhiyun #define TYPE_NODEV		SCSI_DEVTYPE	/* Unknown or no device type		*/
246*4882a593Smuzhiyun #ifndef TYPE_PRINTER				/*					*/
247*4882a593Smuzhiyun # define TYPE_PRINTER			0x02	/* Printer device			*/
248*4882a593Smuzhiyun #endif						/*					*/
249*4882a593Smuzhiyun #ifndef TYPE_COMM				/*					*/
250*4882a593Smuzhiyun # define TYPE_COMM			0x09	/* Communications device		*/
251*4882a593Smuzhiyun #endif
252*4882a593Smuzhiyun 
253*4882a593Smuzhiyun /************************************************************************/
254*4882a593Smuzhiyun /*									*/
255*4882a593Smuzhiyun /*	Inquiry flag definitions (Inq data byte 7)			*/
256*4882a593Smuzhiyun /*									*/
257*4882a593Smuzhiyun /************************************************************************/
258*4882a593Smuzhiyun #define SCSI_INQ_RELADR			0x80	/* device supports relative addressing	*/
259*4882a593Smuzhiyun #define SCSI_INQ_WBUS32			0x40	/* device supports 32 bit data xfers	*/
260*4882a593Smuzhiyun #define SCSI_INQ_WBUS16			0x20	/* device supports 16 bit data xfers	*/
261*4882a593Smuzhiyun #define SCSI_INQ_SYNC			0x10	/* device supports synchronous xfer	*/
262*4882a593Smuzhiyun #define SCSI_INQ_LINKED			0x08	/* device supports linked commands	*/
263*4882a593Smuzhiyun #define SCSI_INQ_CMDQUEUE		0x02	/* device supports command queueing	*/
264*4882a593Smuzhiyun #define SCSI_INQ_SFTRE			0x01	/* device supports soft resets		*/
265*4882a593Smuzhiyun 
266*4882a593Smuzhiyun #define ENABLE_CE			1
267*4882a593Smuzhiyun #define DISABLE_CE			0
268*4882a593Smuzhiyun #define EEPROM_READ			0x80
269*4882a593Smuzhiyun 
270*4882a593Smuzhiyun /************************************************************************/
271*4882a593Smuzhiyun /*									*/
272*4882a593Smuzhiyun /*	The PCI configuration register offset for TRM_S1040		*/
273*4882a593Smuzhiyun /*									*/
274*4882a593Smuzhiyun /************************************************************************/
275*4882a593Smuzhiyun #define TRM_S1040_ID			0x00	/* Vendor and Device ID			*/
276*4882a593Smuzhiyun #define TRM_S1040_COMMAND		0x04	/* PCI command register			*/
277*4882a593Smuzhiyun #define TRM_S1040_IOBASE		0x10	/* I/O Space base address		*/
278*4882a593Smuzhiyun #define TRM_S1040_ROMBASE		0x30	/* Expansion ROM Base Address		*/
279*4882a593Smuzhiyun #define TRM_S1040_INTLINE		0x3C	/* Interrupt line			*/
280*4882a593Smuzhiyun 
281*4882a593Smuzhiyun /************************************************************************/
282*4882a593Smuzhiyun /*									*/
283*4882a593Smuzhiyun /*	The SCSI register offset for TRM_S1040				*/
284*4882a593Smuzhiyun /*									*/
285*4882a593Smuzhiyun /************************************************************************/
286*4882a593Smuzhiyun #define TRM_S1040_SCSI_STATUS		0x80	/* SCSI Status (R)			*/
287*4882a593Smuzhiyun #define COMMANDPHASEDONE		0x2000	/* SCSI command phase done		*/
288*4882a593Smuzhiyun #define SCSIXFERDONE			0x0800	/* SCSI SCSI transfer done		*/
289*4882a593Smuzhiyun #define SCSIXFERCNT_2_ZERO		0x0100	/* SCSI SCSI transfer count to zero	*/
290*4882a593Smuzhiyun #define SCSIINTERRUPT			0x0080	/* SCSI interrupt pending		*/
291*4882a593Smuzhiyun #define COMMANDABORT			0x0040	/* SCSI command abort			*/
292*4882a593Smuzhiyun #define SEQUENCERACTIVE			0x0020	/* SCSI sequencer active		*/
293*4882a593Smuzhiyun #define PHASEMISMATCH			0x0010	/* SCSI phase mismatch			*/
294*4882a593Smuzhiyun #define PARITYERROR			0x0008	/* SCSI parity error			*/
295*4882a593Smuzhiyun 
296*4882a593Smuzhiyun #define PHASEMASK			0x0007	/* Phase MSG/CD/IO			*/
297*4882a593Smuzhiyun #define PH_DATA_OUT			0x00	/* Data out phase			*/
298*4882a593Smuzhiyun #define PH_DATA_IN			0x01	/* Data in phase			*/
299*4882a593Smuzhiyun #define PH_COMMAND			0x02	/* Command phase			*/
300*4882a593Smuzhiyun #define PH_STATUS			0x03	/* Status phase				*/
301*4882a593Smuzhiyun #define PH_BUS_FREE			0x05	/* Invalid phase used as bus free	*/
302*4882a593Smuzhiyun #define PH_MSG_OUT			0x06	/* Message out phase			*/
303*4882a593Smuzhiyun #define PH_MSG_IN			0x07	/* Message in phase			*/
304*4882a593Smuzhiyun 
305*4882a593Smuzhiyun #define TRM_S1040_SCSI_CONTROL		0x80	/* SCSI Control (W)			*/
306*4882a593Smuzhiyun #define DO_CLRATN			0x0400	/* Clear ATN				*/
307*4882a593Smuzhiyun #define DO_SETATN			0x0200	/* Set ATN				*/
308*4882a593Smuzhiyun #define DO_CMDABORT			0x0100	/* Abort SCSI command			*/
309*4882a593Smuzhiyun #define DO_RSTMODULE			0x0010	/* Reset SCSI chip			*/
310*4882a593Smuzhiyun #define DO_RSTSCSI			0x0008	/* Reset SCSI bus			*/
311*4882a593Smuzhiyun #define DO_CLRFIFO			0x0004	/* Clear SCSI transfer FIFO		*/
312*4882a593Smuzhiyun #define DO_DATALATCH			0x0002	/* Enable SCSI bus data input (latched)	*/
313*4882a593Smuzhiyun /* #define DO_DATALATCH			0x0000 */	/* KG: DISable SCSI bus data latch	*/
314*4882a593Smuzhiyun #define DO_HWRESELECT			0x0001	/* Enable hardware reselection		*/
315*4882a593Smuzhiyun 
316*4882a593Smuzhiyun #define TRM_S1040_SCSI_FIFOCNT		0x82	/* SCSI FIFO Counter 5bits(R)		*/
317*4882a593Smuzhiyun #define TRM_S1040_SCSI_SIGNAL		0x83	/* SCSI low level signal (R/W)		*/
318*4882a593Smuzhiyun 
319*4882a593Smuzhiyun #define TRM_S1040_SCSI_INTSTATUS	0x84	/* SCSI Interrupt Status (R)		*/
320*4882a593Smuzhiyun #define INT_SCAM			0x80	/* SCAM selection interrupt		*/
321*4882a593Smuzhiyun #define INT_SELECT			0x40	/* Selection interrupt			*/
322*4882a593Smuzhiyun #define INT_SELTIMEOUT			0x20	/* Selection timeout interrupt		*/
323*4882a593Smuzhiyun #define INT_DISCONNECT			0x10	/* Bus disconnected interrupt		*/
324*4882a593Smuzhiyun #define INT_RESELECTED			0x08	/* Reselected interrupt			*/
325*4882a593Smuzhiyun #define INT_SCSIRESET			0x04	/* SCSI reset detected interrupt	*/
326*4882a593Smuzhiyun #define INT_BUSSERVICE			0x02	/* Bus service interrupt		*/
327*4882a593Smuzhiyun #define INT_CMDDONE			0x01	/* SCSI command done interrupt		*/
328*4882a593Smuzhiyun 
329*4882a593Smuzhiyun #define TRM_S1040_SCSI_OFFSET		0x84	/* SCSI Offset Count (W)		*/
330*4882a593Smuzhiyun 
331*4882a593Smuzhiyun /************************************************************************/
332*4882a593Smuzhiyun /*									*/
333*4882a593Smuzhiyun /*	Bit		Name		Definition			*/
334*4882a593Smuzhiyun /*	---------	-------------	----------------------------	*/
335*4882a593Smuzhiyun /*	07-05	0	RSVD		Reversed. Always 0.		*/
336*4882a593Smuzhiyun /*	04	0	OFFSET4		Reversed for LVDS. Always 0.	*/
337*4882a593Smuzhiyun /*	03-00	0	OFFSET[03:00]	Offset number from 0 to 15	*/
338*4882a593Smuzhiyun /*									*/
339*4882a593Smuzhiyun /************************************************************************/
340*4882a593Smuzhiyun 
341*4882a593Smuzhiyun #define TRM_S1040_SCSI_SYNC		0x85	/* SCSI Synchronous Control (R/W)	*/
342*4882a593Smuzhiyun #define LVDS_SYNC			0x20	/* Enable LVDS synchronous		*/
343*4882a593Smuzhiyun #define WIDE_SYNC			0x10	/* Enable WIDE synchronous		*/
344*4882a593Smuzhiyun #define ALT_SYNC			0x08	/* Enable Fast-20 alternate synchronous	*/
345*4882a593Smuzhiyun 
346*4882a593Smuzhiyun /************************************************************************/
347*4882a593Smuzhiyun /*									*/
348*4882a593Smuzhiyun /*	SYNCM	7    6    5    4    3       2       1       0		*/
349*4882a593Smuzhiyun /*	Name	RSVD RSVD LVDS WIDE ALTPERD PERIOD2 PERIOD1 PERIOD0	*/
350*4882a593Smuzhiyun /*	Default	0    0    0    0    0       0       0       0		*/
351*4882a593Smuzhiyun /*									*/
352*4882a593Smuzhiyun /*	Bit		Name		Definition			*/
353*4882a593Smuzhiyun /*	---------	-------------	---------------------------	*/
354*4882a593Smuzhiyun /*	07-06	0	RSVD		Reversed. Always read 0		*/
355*4882a593Smuzhiyun /*	05	0	LVDS		Reversed. Always read 0		*/
356*4882a593Smuzhiyun /*	04	0	WIDE/WSCSI	Enable wide (16-bits) SCSI	*/
357*4882a593Smuzhiyun /*					transfer.			*/
358*4882a593Smuzhiyun /*	03	0	ALTPERD/ALTPD	Alternate (Sync./Period) mode.	*/
359*4882a593Smuzhiyun /*									*/
360*4882a593Smuzhiyun /*			@@ When this bit is set,			*/
361*4882a593Smuzhiyun /*			   the synchronous period bits 2:0		*/
362*4882a593Smuzhiyun /*			   in the Synchronous Mode register		*/
363*4882a593Smuzhiyun /*			   are used to transfer data			*/
364*4882a593Smuzhiyun /*			   at the Fast-20 rate.				*/
365*4882a593Smuzhiyun /*			@@ When this bit is unset,			*/
366*4882a593Smuzhiyun /*			   the synchronous period bits 2:0		*/
367*4882a593Smuzhiyun /*			   in the Synchronous Mode Register		*/
368*4882a593Smuzhiyun /*			   are used to transfer data			*/
369*4882a593Smuzhiyun /*			   at the Fast-10 rate (or Fast-40 w/ LVDS).	*/
370*4882a593Smuzhiyun /*									*/
371*4882a593Smuzhiyun /*	02-00	0	PERIOD[2:0]/	Synchronous SCSI Transfer Rate.	*/
372*4882a593Smuzhiyun /*			SXPD[02:00]	These 3 bits specify		*/
373*4882a593Smuzhiyun /*					the Synchronous SCSI Transfer	*/
374*4882a593Smuzhiyun /*					Rate for Fast-20 and Fast-10.	*/
375*4882a593Smuzhiyun /*					These bits are also reset	*/
376*4882a593Smuzhiyun /*					by a SCSI Bus reset.		*/
377*4882a593Smuzhiyun /*									*/
378*4882a593Smuzhiyun /*	For Fast-10 bit ALTPD = 0 and LVDS = 0				*/
379*4882a593Smuzhiyun /*	and bit2,bit1,bit0 is defined as follows :			*/
380*4882a593Smuzhiyun /*									*/
381*4882a593Smuzhiyun /*	000	100ns, 10.0 MHz						*/
382*4882a593Smuzhiyun /*	001	150ns,  6.6 MHz						*/
383*4882a593Smuzhiyun /*	010	200ns,  5.0 MHz						*/
384*4882a593Smuzhiyun /*	011	250ns,  4.0 MHz						*/
385*4882a593Smuzhiyun /*	100	300ns,  3.3 MHz						*/
386*4882a593Smuzhiyun /*	101	350ns,  2.8 MHz						*/
387*4882a593Smuzhiyun /*	110	400ns,  2.5 MHz						*/
388*4882a593Smuzhiyun /*	111	450ns,  2.2 MHz						*/
389*4882a593Smuzhiyun /*									*/
390*4882a593Smuzhiyun /*	For Fast-20 bit ALTPD = 1 and LVDS = 0				*/
391*4882a593Smuzhiyun /*	and bit2,bit1,bit0 is defined as follows :			*/
392*4882a593Smuzhiyun /*									*/
393*4882a593Smuzhiyun /*	000	 50ns, 20.0 MHz						*/
394*4882a593Smuzhiyun /*	001	 75ns, 13.3 MHz						*/
395*4882a593Smuzhiyun /*	010	100ns, 10.0 MHz						*/
396*4882a593Smuzhiyun /*	011	125ns,  8.0 MHz						*/
397*4882a593Smuzhiyun /*	100	150ns,  6.6 MHz						*/
398*4882a593Smuzhiyun /*	101	175ns,  5.7 MHz						*/
399*4882a593Smuzhiyun /*	110	200ns,  5.0 MHz						*/
400*4882a593Smuzhiyun /*	111	250ns,  4.0 MHz   KG: Maybe 225ns, 4.4 MHz		*/
401*4882a593Smuzhiyun /*									*/
402*4882a593Smuzhiyun /*	For Fast-40 bit ALTPD = 0 and LVDS = 1				*/
403*4882a593Smuzhiyun /*	and bit2,bit1,bit0 is defined as follows :			*/
404*4882a593Smuzhiyun /*									*/
405*4882a593Smuzhiyun /*	000	 25ns, 40.0 MHz						*/
406*4882a593Smuzhiyun /*	001	 50ns, 20.0 MHz						*/
407*4882a593Smuzhiyun /*	010	 75ns, 13.3 MHz						*/
408*4882a593Smuzhiyun /*	011	100ns, 10.0 MHz						*/
409*4882a593Smuzhiyun /*	100	125ns,  8.0 MHz						*/
410*4882a593Smuzhiyun /*	101	150ns,  6.6 MHz						*/
411*4882a593Smuzhiyun /*	110	175ns,  5.7 MHz						*/
412*4882a593Smuzhiyun /*	111	200ns,  5.0 MHz						*/
413*4882a593Smuzhiyun /*									*/
414*4882a593Smuzhiyun /************************************************************************/
415*4882a593Smuzhiyun 
416*4882a593Smuzhiyun #define TRM_S1040_SCSI_TARGETID		0x86	/* SCSI Target ID (R/W)			*/
417*4882a593Smuzhiyun #define TRM_S1040_SCSI_IDMSG		0x87	/* SCSI Identify Message (R)		*/
418*4882a593Smuzhiyun #define TRM_S1040_SCSI_HOSTID		0x87	/* SCSI Host ID (W)			*/
419*4882a593Smuzhiyun #define TRM_S1040_SCSI_COUNTER		0x88	/* SCSI Transfer Counter 24bits(R/W)	*/
420*4882a593Smuzhiyun 
421*4882a593Smuzhiyun #define TRM_S1040_SCSI_INTEN		0x8C	/* SCSI Interrupt Enable (R/W)		*/
422*4882a593Smuzhiyun #define EN_SCAM				0x80	/* Enable SCAM selection interrupt	*/
423*4882a593Smuzhiyun #define EN_SELECT			0x40	/* Enable selection interrupt		*/
424*4882a593Smuzhiyun #define EN_SELTIMEOUT			0x20	/* Enable selection timeout interrupt	*/
425*4882a593Smuzhiyun #define EN_DISCONNECT			0x10	/* Enable bus disconnected interrupt	*/
426*4882a593Smuzhiyun #define EN_RESELECTED			0x08	/* Enable reselected interrupt		*/
427*4882a593Smuzhiyun #define EN_SCSIRESET			0x04	/* Enable SCSI reset detected interrupt	*/
428*4882a593Smuzhiyun #define EN_BUSSERVICE			0x02	/* Enable bus service interrupt		*/
429*4882a593Smuzhiyun #define EN_CMDDONE			0x01	/* Enable SCSI command done interrupt	*/
430*4882a593Smuzhiyun 
431*4882a593Smuzhiyun #define TRM_S1040_SCSI_CONFIG0		0x8D	/* SCSI Configuration 0 (R/W)		*/
432*4882a593Smuzhiyun #define PHASELATCH			0x40	/* Enable phase latch			*/
433*4882a593Smuzhiyun #define INITIATOR			0x20	/* Enable initiator mode		*/
434*4882a593Smuzhiyun #define PARITYCHECK			0x10	/* Enable parity check			*/
435*4882a593Smuzhiyun #define BLOCKRST			0x01	/* Disable SCSI reset1			*/
436*4882a593Smuzhiyun 
437*4882a593Smuzhiyun #define TRM_S1040_SCSI_CONFIG1		0x8E	/* SCSI Configuration 1 (R/W)		*/
438*4882a593Smuzhiyun #define ACTIVE_NEGPLUS			0x10	/* Enhance active negation		*/
439*4882a593Smuzhiyun #define FILTER_DISABLE			0x08	/* Disable SCSI data filter		*/
440*4882a593Smuzhiyun #define FAST_FILTER			0x04	/* ?					*/
441*4882a593Smuzhiyun #define ACTIVE_NEG			0x02	/* Enable active negation		*/
442*4882a593Smuzhiyun 
443*4882a593Smuzhiyun #define TRM_S1040_SCSI_CONFIG2		0x8F	/* SCSI Configuration 2 (R/W)		*/
444*4882a593Smuzhiyun #define CFG2_WIDEFIFO			0x02	/*					*/
445*4882a593Smuzhiyun 
446*4882a593Smuzhiyun #define TRM_S1040_SCSI_COMMAND		0x90	/* SCSI Command (R/W)			*/
447*4882a593Smuzhiyun #define SCMD_COMP			0x12	/* Command complete			*/
448*4882a593Smuzhiyun #define SCMD_SEL_ATN			0x60	/* Selection with ATN			*/
449*4882a593Smuzhiyun #define SCMD_SEL_ATN3			0x64	/* Selection with ATN3			*/
450*4882a593Smuzhiyun #define SCMD_SEL_ATNSTOP		0xB8	/* Selection with ATN and Stop		*/
451*4882a593Smuzhiyun #define SCMD_FIFO_OUT			0xC0	/* SCSI FIFO transfer out		*/
452*4882a593Smuzhiyun #define SCMD_DMA_OUT			0xC1	/* SCSI DMA transfer out		*/
453*4882a593Smuzhiyun #define SCMD_FIFO_IN			0xC2	/* SCSI FIFO transfer in		*/
454*4882a593Smuzhiyun #define SCMD_DMA_IN			0xC3	/* SCSI DMA transfer in			*/
455*4882a593Smuzhiyun #define SCMD_MSGACCEPT			0xD8	/* Message accept			*/
456*4882a593Smuzhiyun 
457*4882a593Smuzhiyun /************************************************************************/
458*4882a593Smuzhiyun /*									*/
459*4882a593Smuzhiyun /*	Code	Command Description					*/
460*4882a593Smuzhiyun /*	----	----------------------------------------		*/
461*4882a593Smuzhiyun /*	02	Enable reselection with FIFO				*/
462*4882a593Smuzhiyun /*	40	Select without ATN with FIFO				*/
463*4882a593Smuzhiyun /*	60	Select with ATN with FIFO				*/
464*4882a593Smuzhiyun /*	64	Select with ATN3 with FIFO				*/
465*4882a593Smuzhiyun /*	A0	Select with ATN and stop with FIFO			*/
466*4882a593Smuzhiyun /*	C0	Transfer information out with FIFO			*/
467*4882a593Smuzhiyun /*	C1	Transfer information out with DMA			*/
468*4882a593Smuzhiyun /*	C2	Transfer information in with FIFO			*/
469*4882a593Smuzhiyun /*	C3	Transfer information in with DMA			*/
470*4882a593Smuzhiyun /*	12	Initiator command complete with FIFO			*/
471*4882a593Smuzhiyun /*	50	Initiator transfer information out sequence without ATN	*/
472*4882a593Smuzhiyun /*		with FIFO						*/
473*4882a593Smuzhiyun /*	70	Initiator transfer information out sequence with ATN	*/
474*4882a593Smuzhiyun /*		with FIFO						*/
475*4882a593Smuzhiyun /*	74	Initiator transfer information out sequence with ATN3	*/
476*4882a593Smuzhiyun /*		with FIFO						*/
477*4882a593Smuzhiyun /*	52	Initiator transfer information in sequence without ATN	*/
478*4882a593Smuzhiyun /*		with FIFO						*/
479*4882a593Smuzhiyun /*	72	Initiator transfer information in sequence with ATN	*/
480*4882a593Smuzhiyun /*		with FIFO						*/
481*4882a593Smuzhiyun /*	76	Initiator transfer information in sequence with ATN3	*/
482*4882a593Smuzhiyun /*		with FIFO						*/
483*4882a593Smuzhiyun /*	90	Initiator transfer information out command complete	*/
484*4882a593Smuzhiyun /*		with FIFO						*/
485*4882a593Smuzhiyun /*	92	Initiator transfer information in command complete	*/
486*4882a593Smuzhiyun /*		with FIFO						*/
487*4882a593Smuzhiyun /*	D2	Enable selection					*/
488*4882a593Smuzhiyun /*	08	Reselection						*/
489*4882a593Smuzhiyun /*	48	Disconnect command with FIFO				*/
490*4882a593Smuzhiyun /*	88	Terminate command with FIFO				*/
491*4882a593Smuzhiyun /*	C8	Target command complete with FIFO			*/
492*4882a593Smuzhiyun /*	18	SCAM Arbitration/ Selection				*/
493*4882a593Smuzhiyun /*	5A	Enable reselection					*/
494*4882a593Smuzhiyun /*	98	Select without ATN with FIFO				*/
495*4882a593Smuzhiyun /*	B8	Select with ATN with FIFO				*/
496*4882a593Smuzhiyun /*	D8	Message Accepted					*/
497*4882a593Smuzhiyun /*	58	NOP							*/
498*4882a593Smuzhiyun /*									*/
499*4882a593Smuzhiyun /************************************************************************/
500*4882a593Smuzhiyun 
501*4882a593Smuzhiyun #define TRM_S1040_SCSI_TIMEOUT		0x91	/* SCSI Time Out Value (R/W)		*/
502*4882a593Smuzhiyun #define TRM_S1040_SCSI_FIFO		0x98	/* SCSI FIFO (R/W)			*/
503*4882a593Smuzhiyun 
504*4882a593Smuzhiyun #define TRM_S1040_SCSI_TCR0		0x9C	/* SCSI Target Control 0 (R/W)		*/
505*4882a593Smuzhiyun #define TCR0_WIDE_NEGO_DONE		0x8000	/* Wide nego done			*/
506*4882a593Smuzhiyun #define TCR0_SYNC_NEGO_DONE		0x4000	/* Synchronous nego done		*/
507*4882a593Smuzhiyun #define TCR0_ENABLE_LVDS		0x2000	/* Enable LVDS synchronous		*/
508*4882a593Smuzhiyun #define TCR0_ENABLE_WIDE		0x1000	/* Enable WIDE synchronous		*/
509*4882a593Smuzhiyun #define TCR0_ENABLE_ALT			0x0800	/* Enable alternate synchronous		*/
510*4882a593Smuzhiyun #define TCR0_PERIOD_MASK		0x0700	/* Transfer rate			*/
511*4882a593Smuzhiyun 
512*4882a593Smuzhiyun #define TCR0_DO_WIDE_NEGO		0x0080	/* Do wide NEGO				*/
513*4882a593Smuzhiyun #define TCR0_DO_SYNC_NEGO		0x0040	/* Do sync NEGO				*/
514*4882a593Smuzhiyun #define TCR0_DISCONNECT_EN		0x0020	/* Disconnection enable			*/
515*4882a593Smuzhiyun #define TCR0_OFFSET_MASK		0x001F	/* Offset number			*/
516*4882a593Smuzhiyun 
517*4882a593Smuzhiyun #define TRM_S1040_SCSI_TCR1		0x9E	/* SCSI Target Control 1 (R/W)		*/
518*4882a593Smuzhiyun #define MAXTAG_MASK			0x7F00	/* Maximum tags (127)			*/
519*4882a593Smuzhiyun #define NON_TAG_BUSY			0x0080	/* Non tag command active		*/
520*4882a593Smuzhiyun #define ACTTAG_MASK			0x007F	/* Active tags				*/
521*4882a593Smuzhiyun 
522*4882a593Smuzhiyun /************************************************************************/
523*4882a593Smuzhiyun /*									*/
524*4882a593Smuzhiyun /*	The DMA register offset for TRM_S1040				*/
525*4882a593Smuzhiyun /*									*/
526*4882a593Smuzhiyun /************************************************************************/
527*4882a593Smuzhiyun #define TRM_S1040_DMA_COMMAND		0xA0	/* DMA Command (R/W)			*/
528*4882a593Smuzhiyun #define DMACMD_SG			0x02	/* Enable HW S/G support		*/
529*4882a593Smuzhiyun #define DMACMD_DIR			0x01	/* 1 = read from SCSI write to Host	*/
530*4882a593Smuzhiyun #define XFERDATAIN_SG			0x0103	/* Transfer data in  w/  SG		*/
531*4882a593Smuzhiyun #define XFERDATAOUT_SG			0x0102	/* Transfer data out w/  SG		*/
532*4882a593Smuzhiyun #define XFERDATAIN			0x0101	/* Transfer data in  w/o SG		*/
533*4882a593Smuzhiyun #define XFERDATAOUT			0x0100	/* Transfer data out w/o SG		*/
534*4882a593Smuzhiyun 
535*4882a593Smuzhiyun #define TRM_S1040_DMA_FIFOCNT		0xA1	/* DMA FIFO Counter (R)			*/
536*4882a593Smuzhiyun 
537*4882a593Smuzhiyun #define TRM_S1040_DMA_CONTROL		0xA1	/* DMA Control (W)			*/
538*4882a593Smuzhiyun #define DMARESETMODULE			0x10	/* Reset PCI/DMA module			*/
539*4882a593Smuzhiyun #define STOPDMAXFER			0x08	/* Stop  DMA transfer			*/
540*4882a593Smuzhiyun #define ABORTXFER			0x04	/* Abort DMA transfer			*/
541*4882a593Smuzhiyun #define CLRXFIFO			0x02	/* Clear DMA transfer FIFO		*/
542*4882a593Smuzhiyun #define STARTDMAXFER			0x01	/* Start DMA transfer			*/
543*4882a593Smuzhiyun 
544*4882a593Smuzhiyun #define TRM_S1040_DMA_FIFOSTAT		0xA2	/* DMA FIFO Status (R)			*/
545*4882a593Smuzhiyun 
546*4882a593Smuzhiyun #define TRM_S1040_DMA_STATUS		0xA3	/* DMA Interrupt Status (R/W)		*/
547*4882a593Smuzhiyun #define XFERPENDING			0x80	/* Transfer pending			*/
548*4882a593Smuzhiyun #define SCSIBUSY			0x40	/* SCSI busy				*/
549*4882a593Smuzhiyun #define GLOBALINT			0x20	/* DMA_INTEN bit 0-4 set		*/
550*4882a593Smuzhiyun #define FORCEDMACOMP			0x10	/* Force DMA transfer complete		*/
551*4882a593Smuzhiyun #define DMAXFERERROR			0x08	/* DMA transfer error			*/
552*4882a593Smuzhiyun #define DMAXFERABORT			0x04	/* DMA transfer abort			*/
553*4882a593Smuzhiyun #define DMAXFERCOMP			0x02	/* Bus Master XFER Complete status	*/
554*4882a593Smuzhiyun #define SCSICOMP			0x01	/* SCSI complete interrupt		*/
555*4882a593Smuzhiyun 
556*4882a593Smuzhiyun #define TRM_S1040_DMA_INTEN		0xA4	/* DMA Interrupt Enable (R/W)		*/
557*4882a593Smuzhiyun #define EN_FORCEDMACOMP			0x10	/* Force DMA transfer complete		*/
558*4882a593Smuzhiyun #define EN_DMAXFERERROR			0x08	/* DMA transfer error			*/
559*4882a593Smuzhiyun #define EN_DMAXFERABORT			0x04	/* DMA transfer abort			*/
560*4882a593Smuzhiyun #define EN_DMAXFERCOMP			0x02	/* Bus Master XFER Complete status	*/
561*4882a593Smuzhiyun #define EN_SCSIINTR			0x01	/* Enable SCSI complete interrupt	*/
562*4882a593Smuzhiyun 
563*4882a593Smuzhiyun #define TRM_S1040_DMA_CONFIG		0xA6	/* DMA Configuration (R/W)		*/
564*4882a593Smuzhiyun #define DMA_ENHANCE			0x8000	/* Enable DMA enhance feature (SG?)	*/
565*4882a593Smuzhiyun #define DMA_PCI_DUAL_ADDR		0x4000	/*					*/
566*4882a593Smuzhiyun #define DMA_CFG_RES			0x2000	/* Always 1				*/
567*4882a593Smuzhiyun #define DMA_AUTO_CLR_FIFO		0x1000	/* DISable DMA auto clear FIFO		*/
568*4882a593Smuzhiyun #define DMA_MEM_MULTI_READ		0x0800	/*					*/
569*4882a593Smuzhiyun #define DMA_MEM_WRITE_INVAL		0x0400	/* Memory write and invalidate		*/
570*4882a593Smuzhiyun #define DMA_FIFO_CTRL			0x0300	/* Control FIFO operation with DMA	*/
571*4882a593Smuzhiyun #define DMA_FIFO_HALF_HALF		0x0200	/* Keep half filled on both read/write	*/
572*4882a593Smuzhiyun 
573*4882a593Smuzhiyun #define TRM_S1040_DMA_XCNT		0xA8	/* DMA Transfer Counter (R/W), 24bits	*/
574*4882a593Smuzhiyun #define TRM_S1040_DMA_CXCNT		0xAC	/* DMA Current Transfer Counter (R)	*/
575*4882a593Smuzhiyun #define TRM_S1040_DMA_XLOWADDR		0xB0	/* DMA Transfer Physical Low Address	*/
576*4882a593Smuzhiyun #define TRM_S1040_DMA_XHIGHADDR		0xB4	/* DMA Transfer Physical High Address	*/
577*4882a593Smuzhiyun 
578*4882a593Smuzhiyun /************************************************************************/
579*4882a593Smuzhiyun /*									*/
580*4882a593Smuzhiyun /*	The general register offset for TRM_S1040			*/
581*4882a593Smuzhiyun /*									*/
582*4882a593Smuzhiyun /************************************************************************/
583*4882a593Smuzhiyun #define TRM_S1040_GEN_CONTROL		0xD4	/* Global Control			*/
584*4882a593Smuzhiyun #define CTRL_LED			0x80	/* Control onboard LED			*/
585*4882a593Smuzhiyun #define EN_EEPROM			0x10	/* Enable EEPROM programming		*/
586*4882a593Smuzhiyun #define DIS_TERM			0x08	/* Disable onboard termination		*/
587*4882a593Smuzhiyun #define AUTOTERM			0x04	/* Enable Auto SCSI terminator		*/
588*4882a593Smuzhiyun #define LOW8TERM			0x02	/* Enable Lower 8 bit SCSI terminator	*/
589*4882a593Smuzhiyun #define UP8TERM				0x01	/* Enable Upper 8 bit SCSI terminator	*/
590*4882a593Smuzhiyun 
591*4882a593Smuzhiyun #define TRM_S1040_GEN_STATUS		0xD5	/* Global Status			*/
592*4882a593Smuzhiyun #define GTIMEOUT			0x80	/* Global timer reach 0			*/
593*4882a593Smuzhiyun #define EXT68HIGH			0x40	/* Higher 8 bit connected externally	*/
594*4882a593Smuzhiyun #define INT68HIGH			0x20	/* Higher 8 bit connected internally	*/
595*4882a593Smuzhiyun #define CON5068				0x10	/* External 50/68 pin connected (low)	*/
596*4882a593Smuzhiyun #define CON68				0x08	/* Internal 68 pin connected (low)	*/
597*4882a593Smuzhiyun #define CON50				0x04	/* Internal 50 pin connected (low!)	*/
598*4882a593Smuzhiyun #define WIDESCSI			0x02	/* Wide SCSI card			*/
599*4882a593Smuzhiyun #define STATUS_LOAD_DEFAULT		0x01	/*					*/
600*4882a593Smuzhiyun 
601*4882a593Smuzhiyun #define TRM_S1040_GEN_NVRAM		0xD6	/* Serial NON-VOLATILE RAM port		*/
602*4882a593Smuzhiyun #define NVR_BITOUT			0x08	/* Serial data out			*/
603*4882a593Smuzhiyun #define NVR_BITIN			0x04	/* Serial data in			*/
604*4882a593Smuzhiyun #define NVR_CLOCK			0x02	/* Serial clock				*/
605*4882a593Smuzhiyun #define NVR_SELECT			0x01	/* Serial select			*/
606*4882a593Smuzhiyun 
607*4882a593Smuzhiyun #define TRM_S1040_GEN_EDATA		0xD7	/* Parallel EEPROM data port		*/
608*4882a593Smuzhiyun #define TRM_S1040_GEN_EADDRESS		0xD8	/* Parallel EEPROM address		*/
609*4882a593Smuzhiyun #define TRM_S1040_GEN_TIMER		0xDB	/* Global timer				*/
610*4882a593Smuzhiyun 
611*4882a593Smuzhiyun /************************************************************************/
612*4882a593Smuzhiyun /*									*/
613*4882a593Smuzhiyun /*	NvmTarCfg0: Target configuration byte 0 :..pDCB->DevMode	*/
614*4882a593Smuzhiyun /*									*/
615*4882a593Smuzhiyun /************************************************************************/
616*4882a593Smuzhiyun #define NTC_DO_WIDE_NEGO		0x20	/* Wide negotiate			*/
617*4882a593Smuzhiyun #define NTC_DO_TAG_QUEUEING		0x10	/* Enable SCSI tag queuing		*/
618*4882a593Smuzhiyun #define NTC_DO_SEND_START		0x08	/* Send start command SPINUP		*/
619*4882a593Smuzhiyun #define NTC_DO_DISCONNECT		0x04	/* Enable SCSI disconnect		*/
620*4882a593Smuzhiyun #define NTC_DO_SYNC_NEGO		0x02	/* Sync negotiation			*/
621*4882a593Smuzhiyun #define NTC_DO_PARITY_CHK		0x01	/* (it should define at NAC)		*/
622*4882a593Smuzhiyun 						/* Parity check enable			*/
623*4882a593Smuzhiyun 
624*4882a593Smuzhiyun /************************************************************************/
625*4882a593Smuzhiyun /*									*/
626*4882a593Smuzhiyun /*	Nvram Initiater bits definition					*/
627*4882a593Smuzhiyun /*									*/
628*4882a593Smuzhiyun /************************************************************************/
629*4882a593Smuzhiyun #if 0
630*4882a593Smuzhiyun #define MORE2_DRV			BIT0
631*4882a593Smuzhiyun #define GREATER_1G			BIT1
632*4882a593Smuzhiyun #define RST_SCSI_BUS			BIT2
633*4882a593Smuzhiyun #define ACTIVE_NEGATION			BIT3
634*4882a593Smuzhiyun #define NO_SEEK				BIT4
635*4882a593Smuzhiyun #define LUN_CHECK			BIT5
636*4882a593Smuzhiyun #endif
637*4882a593Smuzhiyun 
638*4882a593Smuzhiyun /************************************************************************/
639*4882a593Smuzhiyun /*									*/
640*4882a593Smuzhiyun /*	Nvram Adapter Cfg bits definition				*/
641*4882a593Smuzhiyun /*									*/
642*4882a593Smuzhiyun /************************************************************************/
643*4882a593Smuzhiyun #define NAC_SCANLUN			0x20	/* Include LUN as BIOS device		*/
644*4882a593Smuzhiyun #define NAC_POWERON_SCSI_RESET		0x04	/* Power on reset enable		*/
645*4882a593Smuzhiyun #define NAC_GREATER_1G			0x02	/* > 1G support enable			*/
646*4882a593Smuzhiyun #define NAC_GT2DRIVES			0x01	/* Support more than 2 drives		*/
647*4882a593Smuzhiyun /* #define NAC_DO_PARITY_CHK		0x08 */	/* Parity check enable			*/
648*4882a593Smuzhiyun 
649*4882a593Smuzhiyun #endif
650