File: /usr/src/linux/drivers/scsi/psi_roy.h

1     /****************************************************************************
2      * Perceptive Solutions, Inc. PCI-2000 device driver for Linux.
3      *
4      * psi_roy.h - Linux Host Driver for PCI-2000 IntelliCache SCSI Adapters
5      *
6      * Copyright (c) 1997-1999 Perceptive Solutions, Inc.
7      * All Rights Reserved.
8      *
9      * Redistribution and use in source and binary forms, with or without
10      * modification, are permitted provided that redistributions of source
11      * code retain the above copyright notice and this comment without
12      * modification.
13      *
14      * Technical updates and product information at:
15      *  http://www.psidisk.com
16      *
17      * Please send questions, comments, bug reports to:
18      *  tech@psidisk.com Technical Support
19      *
20      ****************************************************************************/
21     
22     #ifndef	ROY_HOST
23     #define	ROY_HOST
24     
25     /************************************************/
26     /*		PCI setup								*/
27     /************************************************/
28     #define	VENDOR_PSI			0x1256
29     #define	DEVICE_ROY_1		0x5201		/* 'R1' */
30     
31     /************************************************/
32     /*		controller constants					*/
33     /************************************************/
34     #define MAXADAPTER			4			// Increase this and the sizes of the arrays below, if you need more.
35     #define	MAX_BUS				2
36     #define	MAX_UNITS			16
37     #define	TIMEOUT_COMMAND		400			// number of milliSecondos for command busy timeout
38     
39     /************************************************/
40     /*		I/O address offsets						*/
41     /************************************************/
42     #define RTR_MAILBOX						0x040
43     #define RTR_LOCAL_DOORBELL				0x060
44     #define RTR_PCI_DOORBELL				0x064
45     
46     /************************************************/
47     /*												*/
48     /*			Host command codes					*/
49     /*												*/
50     /************************************************/
51     #define	CMD_READ_CHS		0x01		/* read sectors as specified (CHS mode) */
52     #define	CMD_READ			0x02		/* read sectors as specified (RBA mode) */
53     #define	CMD_READ_SG			0x03		/* read sectors using scatter/gather list */
54     #define	CMD_WRITE_CHS		0x04		/* write sectors as specified (CHS mode) */
55     #define	CMD_WRITE			0x05		/* write sectors as specified (RBA mode) */
56     #define	CMD_WRITE_SG		0x06		/* write sectors using scatter/gather list (LBA mode) */
57     #define	CMD_READ_CHS_SG		0x07		/* read sectors using scatter/gather list (CHS mode) */
58     #define	CMD_WRITE_CHS_SG	0x08		/* write sectors using scatter/gather list (CHS mode) */
59     #define	CMD_VERIFY_CHS		0x09		/* verify data on sectors as specified (CHS mode) */
60     #define	CMD_VERIFY			0x0A		/* verify data on sectors as specified (RBA mode) */
61     #define	CMD_DASD_CDB		0x0B		/* process CDB for a DASD device */
62     #define	CMD_DASD_CDB_SG		0x0C		/* process CDB for a DASD device with scatter/gather */
63     
64     #define	CMD_READ_ABS		0x10		/* read absolute disk */
65     #define	CMD_WRITE_ABS		0x11		/* write absolute disk */
66     #define	CMD_VERIFY_ABS		0x12		/* verify absolute disk */
67     #define	CMD_TEST_READY		0x13		/* test unit ready and return status code */
68     #define	CMD_LOCK_DOOR		0x14		/* lock device door */
69     #define	CMD_UNLOCK_DOOR		0x15		/* unlock device door */
70     #define	CMD_EJECT_MEDIA		0x16		/* eject the media */
71     #define	CMD_UPDATE_CAP		0x17		/* update capacity information */
72     #define	CMD_TEST_PRIV		0x18		/* test and setup private format media */
73     
74     
75     #define	CMD_SCSI_THRU		0x30		/* SCSI pass through CDB */
76     #define	CMD_SCSI_THRU_SG	0x31		/* SCSI pass through CDB with scatter/gather */
77     #define	CMD_SCSI_REQ_SENSE	0x32		/* SCSI pass through request sense after check condition */
78     
79     #define	CMD_DASD_RAID_RQ	0x35		/* request DASD RAID drive data */
80     #define	CMD_DASD_RAID_RQ0	0x31			/* byte 1 subcommand to query for RAID 0 informatation */
81     #define	CMD_DASD_RAID_RQ1	0x32			/* byte 1 subcommand to query for RAID 1 informatation */
82     #define	CMD_DASD_RAID_RQ5	0x33			/* byte 1 subcommand to query for RAID 5 informatation */
83     
84     #define	CMD_DASD_SCSI_INQ	0x36		/* do DASD inquire and return in SCSI format */
85     #define	CMD_DASD_CAP		0x37		/* read DASD capacity */
86     #define	CMD_DASD_INQ		0x38		/* do DASD inquire for type data and return SCSI/EIDE inquiry */
87     #define	CMD_SCSI_INQ		0x39		/* do SCSI inquire */
88     #define	CMD_READ_SETUP		0x3A		/* Get setup structures from controller */
89     #define	CMD_WRITE_SETUP		0x3B		/* Put setup structures in controller and burn in flash */
90     #define	CMD_READ_CONFIG		0x3C		/* Get the entire configuration and setup structures */
91     #define	CMD_WRITE_CONFIG	0x3D		/* Put the entire configuration and setup structures in flash */
92     
93     #define	CMD_TEXT_DEVICE		0x3E		/* obtain device text */
94     #define	CMD_TEXT_SIGNON		0x3F		/* get sign on banner */
95     
96     #define	CMD_QUEUE			0x40		/* any command below this generates a queue tag interrupt to host*/
97     
98     #define	CMD_PREFETCH		0x40		/* prefetch sectors as specified */
99     #define	CMD_TEST_WRITE		0x41		/* Test a device for write protect */
100     #define	CMD_LAST_STATUS		0x42		/* get last command status and error data*/
101     #define	CMD_ABORT			0x43		/* abort command as specified */
102     #define	CMD_ERROR			0x44		/* fetch error code from a tagged op */
103     #define	CMD_DONE			0x45		/* done with operation */
104     #define	CMD_DIAGNOSTICS		0x46		/* execute controller diagnostics and wait for results */
105     #define	CMD_FEATURE_MODE	0x47		/* feature mode control word */
106     #define	CMD_DASD_INQUIRE	0x48		/* inquire as to DASD SCSI device (32 possible) */
107     #define	CMD_FEATURE_QUERY	0x49		/* query the feature control word */
108     #define	CMD_DASD_EJECT		0x4A		/* Eject removable media for DASD type */
109     #define	CMD_DASD_LOCK		0x4B		/* Lock removable media for DASD type */
110     #define	CMD_DASD_TYPE		0x4C		/* obtain DASD device type */
111     #define	CMD_NUM_DEV			0x4D		/* obtain the number of devices connected to the controller */
112     #define	CMD_GET_PARMS		0x4E		/* obtain device parameters */
113     #define	CMD_SPECIFY			0x4F		/* specify operating system for scatter/gather operations */
114     
115     #define	CMD_RAID_GET_DEV	0x50		/* read RAID device geometry */
116     #define CMD_RAID_READ		0x51		/* read RAID 1 parameter block */
117     #define	CMD_RAID_WRITE		0x52		/* write RAID 1 parameter block */
118     #define	CMD_RAID_LITEUP		0x53		/* Light up the drive light for identification */
119     #define	CMD_RAID_REBUILD	0x54		/* issue a RAID 1 pair rebuild */
120     #define	CMD_RAID_MUTE		0x55		/* mute RAID failure alarm */
121     #define	CMD_RAID_FAIL		0x56		/* induce a RAID failure */
122     #define	CMD_RAID_STATUS		0x57		/* get status of RAID pair */
123     #define	CMD_RAID_STOP		0x58		/* stop any reconstruct in progress */
124     #define CMD_RAID_START		0x59		/* start reconstruct */
125     #define	CMD_RAID0_READ		0x5A		/* read RAID 0 parameter block */
126     #define	CMD_RAID0_WRITE		0x5B		/* write RAID 0 parameter block */
127     #define	CMD_RAID5_READ		0x5C		/* read RAID 5 parameter block */
128     #define	CMD_RAID5_WRITE		0x5D		/* write RAID 5 parameter block */
129     
130     #define	CMD_ERASE_TABLES	0x5F		/* erase partition table and RAID signatutures */
131     
132     #define	CMD_SCSI_GET		0x60		/* get SCSI pass through devices */
133     #define	CMD_SCSI_TIMEOUT	0x61		/* set SCSI pass through timeout */
134     #define	CMD_SCSI_ERROR		0x62		/* get SCSI pass through request sense length and residual data count */
135     #define	CMD_GET_SPARMS		0x63		/* get SCSI bus and user parms */
136     #define	CMD_SCSI_ABORT		0x64		/* abort by setting time-out to zero */
137     
138     #define	CMD_CHIRP_CHIRP		0x77		/* make a chirp chirp sound */
139     #define	CMD_GET_LAST_DONE	0x78		/* get tag of last done in progress */
140     #define	CMD_GET_FEATURES	0x79		/* get feature code and ESN */
141     #define CMD_CLEAR_CACHE		0x7A		/* Clear cache on specified device */
142     #define	CMD_BIOS_TEST		0x7B		/* Test whether or not to load BIOS */
143     #define	CMD_WAIT_FLUSH		0x7C		/* wait for cache flushed and invalidate read cache */
144     #define	CMD_RESET_BUS		0x7D		/* reset the SCSI bus */
145     #define	CMD_STARTUP_QRY		0x7E		/* startup in progress query */
146     #define	CMD_RESET			0x7F		/* reset the controller */
147     
148     #define	CMD_RESTART_RESET	0x80		/* reload and restart the controller at any reset issued */
149     #define	CMD_SOFT_RESET		0x81		/* do a soft reset NOW! */
150     
151     /************************************************/
152     /*												*/
153     /*				Host return errors				*/
154     /*												*/
155     /************************************************/
156     #define	ERR08_TAGGED		0x80		/* doorbell error ored with tag */
157     
158     #define	ERR16_NONE			0x0000		/* no errors */
159     #define	ERR16_SC_COND_MET	0x0004		/* SCSI status - Condition Met */
160     #define	ERR16_CMD			0x0101		/* command error */
161     #define	ERR16_SC_CHECK_COND	0x0002		/* SCSI status - Check Condition */
162     #define	ERR16_CMD_NOT		0x0201		/* command not supported */
163     #define ERR16_NO_DEVICE     0x0301		/* invalid device selection */
164     #define	ERR16_SECTOR		0x0202		/* bad sector */
165     #define	ERR16_PROTECT		0x0303		/* write protected */
166     #define	ERR16_NOSECTOR		0x0404		/* sector not found */
167     #define	ERR16_MEDIA			0x0C0C		/* invalid media */
168     #define	ERR16_CONTROL		0x2020		/* controller error */
169     #define	ERR16_CONTROL_DMA	0x2120		/* controller DMA engine error */
170     #define	ERR16_NO_ALARM		0x2220		/* alarm is not active */
171     #define	ERR16_OP_BUSY		0x2320		/* operation busy */
172     #define	ERR16_SEEK			0x4040		/* seek failure */
173     #define	ERR16_DEVICE_FAIL	0x4140		/* device has failed */
174     #define ERR16_TIMEOUT		0x8080		/* timeout error */
175     #define	ERR16_DEV_NOT_READY	0xAAAA		/* drive not ready */
176     #define	ERR16_UNDEFINED		0xBBBB		/* undefined error */
177     #define	ERR16_WRITE_FAULT	0xCCCC		/* write fault */
178     #define ERR16_INVALID_DEV	0x4001		/* invalid device access */
179     #define	ERR16_DEVICE_BUSY	0x4002		/* device is busy */
180     #define	ERR16_MEMORY		0x4003		/* device pass thru requires too much memory */
181     #define	ERR16_NO_FEATURE	0x40FA		/* feature no implemented */
182     #define	ERR16_NOTAG			0x40FD		/* no tag space available */
183     #define	ERR16_NOT_READY		0x40FE		/* controller not ready error */
184     #define	ERR16_SETUP_FLASH	0x5050		/* error when writing setup to flash memory */
185     #define	ERR16_SETUP_SIZE	0x5051		/* setup block size error */
186     #define	ERR16_SENSE			0xFFFF		/* sense opereration failed */
187     #define	ERR16_SC_BUSY		0x0008		/* SCSI status - Busy */
188     #define	ERR16_SC_RES_CONFL	0x0018		/* SCSI status - Reservation Conflict */
189     #define	ERR16_SC_CMD_TERM	0x0022		/* SCSI status - Command Terminated */
190     #define	ERR16_SC_OTHER		0x00FF		/* SCSI status - not recognized (any value masked) */
191     #define	ERR16_MEDIA_CHANGED	0x8001		/* devices media has been changed */
192     
193     #define	ERR32_NONE			0x00000000	/* no errors */
194     #define	ERR32_SC_COND_MET	0x00000004	/* SCSI status - Condition Met */
195     #define	ERR32_CMD			0x00010101	/* command error */
196     #define	ERR32_SC_CHECK_COND	0x00020002	/* SCSI status - Check Condition */
197     #define	ERR32_CMD_NOT		0x00030201	/* command not supported */
198     #define ERR32_NO_DEVICE     0x00040301	/* invalid device selection */
199     #define	ERR32_SECTOR		0x00050202	/* bad sector */
200     #define	ERR32_PROTECT		0x00060303	/* write protected */
201     #define	ERR32_NOSECTOR		0x00070404	/* sector not found */
202     #define	ERR32_MEDIA			0x00080C0C	/* invalid media */
203     #define	ERR32_CONTROL		0x00092020	/* controller error */
204     #define	ERR32_CONTROL_DMA	0x000A2120	/* Controller DMA error */
205     #define	ERR32_NO_ALARM		0x000B2220 	/* alarm is not active */
206     #define	ERR32_OP_BUSY		0x000C2320	/* operation busy */
207     #define	ERR32_SEEK			0x000D4040	/* seek failure */
208     #define	ERR32_DEVICE_FAIL	0x000E4140	/* device has failed */
209     #define ERR32_TIMEOUT		0x000F8080	/* timeout error */
210     #define	ERR32_DEV_NOT_READY	0x0010AAAA	/* drive not ready */
211     #define	ERR32_UNDEFINED		0x0011BBBB	/* undefined error */
212     #define	ERR32_WRITE_FAULT	0x0012CCCC	/* write fault */
213     #define ERR32_INVALID_DEV	0x00134001	/* invalid device access */
214     #define	ERR32_DEVICE_BUSY	0x00144002	/* device is busy */
215     #define	ERR32_MEMORY		0x00154003	/* device pass thru requires too much memory */
216     #define	ERR32_NO_FEATURE	0x001640FA	/* feature no implemented */
217     #define	ERR32_NOTAG			0x001740FD	/* no tag space available */
218     #define	ERR32_NOT_READY		0x001840FE	/* controller not ready error */
219     #define	ERR32_SETUP_FLASH	0x00195050	/* error when writing setup to flash memory */
220     #define	ERR32_SETUP_SIZE	0x001A5051	/* setup block size error */
221     #define	ERR32_SENSE			0x001BFFFF	/* sense opereration failed */
222     #define	ERR32_SC_BUSY		0x001C0008	/* SCSI status - Busy */
223     #define	ERR32_SC_RES_CONFL	0x001D0018	/* SCSI status - Reservation Conflict */
224     #define	ERR32_SC_CMD_TERM	0x001E0022	/* SCSI status - Command Terminated */
225     #define	ERR32_SC_OTHER		0x001F00FF	/* SCSI status - not recognized (any value masked) */
226     #define	ERR32_MEDIA_CHANGED	0x00208001	/* devices media has been changed */
227     
228     /************************************************/
229     /*												*/
230     /*	Host Operating System specification codes	*/
231     /*												*/
232     /************************************************/
233     #define	SPEC_INTERRUPT		0x80		/* specification requires host interrupt */
234     #define	SPEC_BACKWARD_SG	0x40		/* specification requires scatter/gather items reversed */
235     #define	SPEC_DOS_BLOCK		0x01		/* DOS DASD blocking on pass through */
236     #define	SPEC_OS2_V3			0x02		/* OS/2 Warp */
237     #define	SPCE_SCO_3242		0x04		/* SCO 3.4.2.2 */
238     #define	SPEC_QNX_4X			0x05		/* QNX 4.XX */
239     #define	SPEC_NOVELL_NWPA	0x08		/* Novell NWPA scatter/gather support */
240     
241     /************************************************/
242     /*												*/
243     /*	Inquire structures							*/
244     /*												*/
245     /************************************************/
246     typedef	struct	_CNT_SCSI_INQ
247     	{
248     	UCHAR	devt;						/* 00: device type */
249     	UCHAR	devtm;						/* 01: device type modifier */
250     	UCHAR	svers;						/* 02: SCSI version */
251     	UCHAR	rfmt;						/* 03: response data format */
252     	UCHAR	adlen;						/* 04: additional length of data */
253     	UCHAR	res1;						/* 05: */
254     	UCHAR	res2;						/* 06: */
255     	UCHAR	fncs;						/* 07: functional capabilities */
256     	UCHAR	vid[8];						/* 08: vendor ID */
257     	UCHAR	pid[16];					/* 10: product ID */
258     	UCHAR	rev[4];						/* 20: product revision */
259     	}	CNT_SCSI_INQ;
260     
261     typedef	struct	_CNT_IDE_INQ
262     	{
263     	USHORT	GeneralConfiguration;		/* 00 */
264     	USHORT	NumberOfCylinders;			/* 02 */
265     	USHORT	Reserved1;					/* 04 */
266     	USHORT	NumberOfHeads;				/* 06 */
267     	USHORT	UnformattedBytesPerTrack;	/* 08 */
268     	USHORT	UnformattedBytesPerSector;	/* 0A */
269     	USHORT	SectorsPerTrack;			/* 0C */
270     	USHORT	VendorUnique1[3];			/* 0E */
271     	USHORT	SerialNumber[10];			/* 14 */
272     	USHORT	BufferType;					/* 28 */
273     	USHORT	BufferSectorSize;			/* 2A */
274     	USHORT	NumberOfEccBytes;			/* 2C */
275     	USHORT	FirmwareRevision[4];		/* 2E */
276     	USHORT	ModelNumber[20];			/* 36 */
277     	UCHAR	MaximumBlockTransfer;		/* 5E */
278     	UCHAR	VendorUnique2;				/* 5F */
279     	USHORT	DoubleWordIo;				/* 60 */
280     	USHORT	Capabilities;				/* 62 */
281     	USHORT	Reserved2;					/* 64 */
282     	UCHAR	VendorUnique3;				/* 66 */
283     	UCHAR	PioCycleTimingMode;			/* 67 */
284     	UCHAR	VendorUnique4;				/* 68 */
285     	UCHAR	DmaCycleTimingMode;			/* 69 */
286     	USHORT	TranslationFieldsValid;		/* 6A */
287     	USHORT	NumberOfCurrentCylinders;	/* 6C */
288     	USHORT	NumberOfCurrentHeads;		/* 6E */
289     	USHORT	CurrentSectorsPerTrack;		/* 70 */
290     	ULONG	CurrentSectorCapacity;		/* 72 */
291     	}	CNT_IDE_INQ;
292     
293     typedef struct	_DASD_INQUIRE
294     	{
295     	ULONG	type;						/* 0 = SCSI, 1 = IDE */
296     	union
297     		{
298     		CNT_SCSI_INQ	scsi;			/* SCSI inquire data */
299     		CNT_IDE_INQ		ide;			/* IDE inquire data */
300     		}	inq;
301     	}	DASD_INQUIRE;
302     
303     /************************************************/
304     /*												*/
305     /*	Device Codes								*/
306     /*												*/
307     /************************************************/
308     #define DEVC_DASD			0x00		/* Direct-access Storage Device */
309     #define DEVC_SEQACESS		0x01		/* Sequential-access device */
310     #define DEVC_PRINTER		0x02		/* Printer device */
311     #define DEVC_PROCESSOR		0x03		/* Processor device */
312     #define DEVC_WRITEONCE		0x04		/* Write-once device */
313     #define DEVC_CDROM			0x05		/* CD-ROM device */
314     #define DEVC_SCANNER		0x06		/* Scanner device */
315     #define DEVC_OPTICAL		0x07		/* Optical memory device */
316     #define DEVC_MEDCHGR		0x08		/* Medium changer device */
317     #define	DEVC_DASD_REMOVABLE	0x80		/* Direct-access storage device, Removable */
318     #define	DEVC_NONE			0xFF		/* no device */
319     
320     // SCSI controls for RAID
321     #define	SC_MY_RAID			0xBF			// our special CDB command byte for Win95... interface
322     #define	MY_SCSI_QUERY0		0x31			// byte 1 subcommand to query driver for RAID 0 informatation
323     #define	MY_SCSI_QUERY1		0x32			// byte 1 subcommand to query driver for RAID 1 informatation
324     #define	MY_SCSI_QUERY5		0x33			// byte 1 subcommand to query driver for RAID 5 informatation
325     #define	MY_SCSI_REBUILD		0x40			// byte 1 subcommand to reconstruct a mirrored pair
326     #define MY_SCSI_DEMOFAIL	0x54			// byte 1 subcommand for RAID failure demonstration
327     #define	MY_SCSI_ALARMMUTE	0x60			// byte 1 subcommand to mute any alarm currently on
328     
329     
330     #endif
331     
332