Linux-2.6.12-rc2
[linux-flexiantxendom0-natty.git] / 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