Import 2.1.81
[davej-history.git] / drivers / scsi / pci2220i.h
blob1a9bd6cad4400bd1f45e3f49b8683287a8fbc4a6
1 /*+M*************************************************************************
2 * Perceptive Solutions, Inc. PCI-2000 device driver proc support for Linux.
4 * Copyright (c) 1997 Perceptive Solutions, Inc.
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2, or (at your option)
9 * any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; see the file COPYING. If not, write to
18 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
21 * File Name: pci2220i.h
23 * Description: Header file for the SCSI driver for the PCI2220I
24 * EIDE interface card.
26 *-M*************************************************************************/
28 #ifndef _PCI2220I_H
29 #define _PCI2220I_H
31 #include <linux/types.h>
32 #include <linux/kdev_t.h>
34 #ifndef PSI_EIDE_SCSIOP
35 #define PSI_EIDE_SCSIOP 1
37 /************************************************/
38 /* Some defines that we like */
39 /************************************************/
40 #define CHAR char
41 #define UCHAR unsigned char
42 #define SHORT short
43 #define USHORT unsigned short
44 #define BOOL unsigned short
45 #define LONG long
46 #define ULONG unsigned long
47 #define VOID void
49 /************************************************/
50 /* Timeout konstants */
51 /************************************************/
52 #define TIMEOUT_READY 10 // 100 mSec
53 #define TIMEOUT_DRQ 40 // 400 mSec
55 /************************************************/
56 /* Misc. macros */
57 /************************************************/
58 #define ANY2SCSI(up, p) \
59 ((UCHAR *)up)[0] = (((ULONG)(p)) >> 8); \
60 ((UCHAR *)up)[1] = ((ULONG)(p));
62 #define SCSI2LONG(up) \
63 ( (((long)*(((UCHAR *)up))) << 16) \
64 + (((long)(((UCHAR *)up)[1])) << 8) \
65 + ((long)(((UCHAR *)up)[2])) )
67 #define XANY2SCSI(up, p) \
68 ((UCHAR *)up)[0] = ((long)(p)) >> 24; \
69 ((UCHAR *)up)[1] = ((long)(p)) >> 16; \
70 ((UCHAR *)up)[2] = ((long)(p)) >> 8; \
71 ((UCHAR *)up)[3] = ((long)(p));
73 #define XSCSI2LONG(up) \
74 ( (((long)(((UCHAR *)up)[0])) << 24) \
75 + (((long)(((UCHAR *)up)[1])) << 16) \
76 + (((long)(((UCHAR *)up)[2])) << 8) \
77 + ((long)(((UCHAR *)up)[3])) )
79 /************************************************/
80 /* SCSI CDB operation codes */
81 /************************************************/
82 #define SCSIOP_TEST_UNIT_READY 0x00
83 #define SCSIOP_REZERO_UNIT 0x01
84 #define SCSIOP_REWIND 0x01
85 #define SCSIOP_REQUEST_BLOCK_ADDR 0x02
86 #define SCSIOP_REQUEST_SENSE 0x03
87 #define SCSIOP_FORMAT_UNIT 0x04
88 #define SCSIOP_READ_BLOCK_LIMITS 0x05
89 #define SCSIOP_REASSIGN_BLOCKS 0x07
90 #define SCSIOP_READ6 0x08
91 #define SCSIOP_RECEIVE 0x08
92 #define SCSIOP_WRITE6 0x0A
93 #define SCSIOP_PRINT 0x0A
94 #define SCSIOP_SEND 0x0A
95 #define SCSIOP_SEEK6 0x0B
96 #define SCSIOP_TRACK_SELECT 0x0B
97 #define SCSIOP_SLEW_PRINT 0x0B
98 #define SCSIOP_SEEK_BLOCK 0x0C
99 #define SCSIOP_PARTITION 0x0D
100 #define SCSIOP_READ_REVERSE 0x0F
101 #define SCSIOP_WRITE_FILEMARKS 0x10
102 #define SCSIOP_FLUSH_BUFFER 0x10
103 #define SCSIOP_SPACE 0x11
104 #define SCSIOP_INQUIRY 0x12
105 #define SCSIOP_VERIFY6 0x13
106 #define SCSIOP_RECOVER_BUF_DATA 0x14
107 #define SCSIOP_MODE_SELECT 0x15
108 #define SCSIOP_RESERVE_UNIT 0x16
109 #define SCSIOP_RELEASE_UNIT 0x17
110 #define SCSIOP_COPY 0x18
111 #define SCSIOP_ERASE 0x19
112 #define SCSIOP_MODE_SENSE 0x1A
113 #define SCSIOP_START_STOP_UNIT 0x1B
114 #define SCSIOP_STOP_PRINT 0x1B
115 #define SCSIOP_LOAD_UNLOAD 0x1B
116 #define SCSIOP_RECEIVE_DIAGNOSTIC 0x1C
117 #define SCSIOP_SEND_DIAGNOSTIC 0x1D
118 #define SCSIOP_MEDIUM_REMOVAL 0x1E
119 #define SCSIOP_READ_CAPACITY 0x25
120 #define SCSIOP_READ 0x28
121 #define SCSIOP_WRITE 0x2A
122 #define SCSIOP_SEEK 0x2B
123 #define SCSIOP_LOCATE 0x2B
124 #define SCSIOP_WRITE_VERIFY 0x2E
125 #define SCSIOP_VERIFY 0x2F
126 #define SCSIOP_SEARCH_DATA_HIGH 0x30
127 #define SCSIOP_SEARCH_DATA_EQUAL 0x31
128 #define SCSIOP_SEARCH_DATA_LOW 0x32
129 #define SCSIOP_SET_LIMITS 0x33
130 #define SCSIOP_READ_POSITION 0x34
131 #define SCSIOP_SYNCHRONIZE_CACHE 0x35
132 #define SCSIOP_COMPARE 0x39
133 #define SCSIOP_COPY_COMPARE 0x3A
134 #define SCSIOP_WRITE_DATA_BUFF 0x3B
135 #define SCSIOP_READ_DATA_BUFF 0x3C
136 #define SCSIOP_CHANGE_DEFINITION 0x40
137 #define SCSIOP_READ_SUB_CHANNEL 0x42
138 #define SCSIOP_READ_TOC 0x43
139 #define SCSIOP_READ_HEADER 0x44
140 #define SCSIOP_PLAY_AUDIO 0x45
141 #define SCSIOP_PLAY_AUDIO_MSF 0x47
142 #define SCSIOP_PLAY_TRACK_INDEX 0x48
143 #define SCSIOP_PLAY_TRACK_RELATIVE 0x49
144 #define SCSIOP_PAUSE_RESUME 0x4B
145 #define SCSIOP_LOG_SELECT 0x4C
146 #define SCSIOP_LOG_SENSE 0x4D
147 #define SCSIOP_MODE_SELECT10 0x55
148 #define SCSIOP_MODE_SENSE10 0x5A
149 #define SCSIOP_LOAD_UNLOAD_SLOT 0xA6
150 #define SCSIOP_MECHANISM_STATUS 0xBD
151 #define SCSIOP_READ_CD 0xBE
153 // IDE command definitions
154 #define IDE_COMMAND_ATAPI_RESET 0x08
155 #define IDE_COMMAND_READ 0x20
156 #define IDE_COMMAND_WRITE 0x30
157 #define IDE_COMMAND_RECALIBRATE 0x10
158 #define IDE_COMMAND_SEEK 0x70
159 #define IDE_COMMAND_SET_PARAMETERS 0x91
160 #define IDE_COMMAND_VERIFY 0x40
161 #define IDE_COMMAND_ATAPI_PACKET 0xA0
162 #define IDE_COMMAND_ATAPI_IDENTIFY 0xA1
163 #define IDE_CMD_READ_MULTIPLE 0xC4
164 #define IDE_CMD_WRITE_MULTIPLE 0xC5
165 #define IDE_CMD_SET_MULTIPLE 0xC6
166 #define IDE_COMMAND_WRITE_DMA 0xCA
167 #define IDE_COMMAND_READ_DMA 0xC8
168 #define IDE_COMMAND_IDENTIFY 0xEC
170 // IDE status definitions
171 #define IDE_STATUS_ERROR 0x01
172 #define IDE_STATUS_INDEX 0x02
173 #define IDE_STATUS_CORRECTED_ERROR 0x04
174 #define IDE_STATUS_DRQ 0x08
175 #define IDE_STATUS_DSC 0x10
176 #define IDE_STATUS_WRITE_FAULT 0x20
177 #define IDE_STATUS_DRDY 0x40
178 #define IDE_STATUS_BUSY 0x80
180 // IDE error definitions
181 #define IDE_ERROR_AMNF 0x01
182 #define IDE_ERROR_TKONF 0x02
183 #define IDE_ERROR_ABRT 0x04
184 #define IDE_ERROR_MCR 0x08
185 #define IDE_ERROR_IDFN 0x10
186 #define IDE_ERROR_MC 0x20
187 #define IDE_ERROR_UNC 0x40
188 #define IDE_ERROR_BBK 0x80
190 // IDE interface structure
191 typedef struct _IDE_STRUCT
193 union
195 UCHAR ide[9];
196 struct
198 USHORT data;
199 UCHAR sectors;
200 UCHAR lba[4];
201 UCHAR cmd;
202 UCHAR spigot;
203 } ides;
204 } ide;
205 } IDE_STRUCT;
207 // SCSI read capacity structure
208 typedef struct _READ_CAPACITY_DATA
210 ULONG blks; /* total blocks (converted to little endian) */
211 ULONG blksiz; /* size of each (converted to little endian) */
212 } READ_CAPACITY_DATA, *PREAD_CAPACITY_DATA;
214 // SCSI inquiry data
215 typedef struct _INQUIRYDATA
217 UCHAR DeviceType :5;
218 UCHAR DeviceTypeQualifier :3;
219 UCHAR DeviceTypeModifier :7;
220 UCHAR RemovableMedia :1;
221 UCHAR Versions;
222 UCHAR ResponseDataFormat;
223 UCHAR AdditionalLength;
224 UCHAR Reserved[2];
225 UCHAR SoftReset :1;
226 UCHAR CommandQueue :1;
227 UCHAR Reserved2 :1;
228 UCHAR LinkedCommands :1;
229 UCHAR Synchronous :1;
230 UCHAR Wide16Bit :1;
231 UCHAR Wide32Bit :1;
232 UCHAR RelativeAddressing :1;
233 UCHAR VendorId[8];
234 UCHAR ProductId[16];
235 UCHAR ProductRevisionLevel[4];
236 UCHAR VendorSpecific[20];
237 UCHAR Reserved3[40];
238 } INQUIRYDATA, *PINQUIRYDATA;
240 // IDE IDENTIFY data
241 typedef struct _IDENTIFY_DATA
243 USHORT GeneralConfiguration; // 00
244 USHORT NumberOfCylinders; // 02
245 USHORT Reserved1; // 04
246 USHORT NumberOfHeads; // 06
247 USHORT UnformattedBytesPerTrack; // 08
248 USHORT UnformattedBytesPerSector; // 0A
249 USHORT SectorsPerTrack; // 0C
250 USHORT VendorUnique1[3]; // 0E
251 USHORT SerialNumber[10]; // 14
252 USHORT BufferType; // 28
253 USHORT BufferSectorSize; // 2A
254 USHORT NumberOfEccBytes; // 2C
255 USHORT FirmwareRevision[4]; // 2E
256 USHORT ModelNumber[20]; // 36
257 UCHAR MaximumBlockTransfer; // 5E
258 UCHAR VendorUnique2; // 5F
259 USHORT DoubleWordIo; // 60
260 USHORT Capabilities; // 62
261 USHORT Reserved2; // 64
262 UCHAR VendorUnique3; // 66
263 UCHAR PioCycleTimingMode; // 67
264 UCHAR VendorUnique4; // 68
265 UCHAR DmaCycleTimingMode; // 69
266 USHORT TranslationFieldsValid:1; // 6A
267 USHORT Reserved3:15;
268 USHORT NumberOfCurrentCylinders; // 6C
269 USHORT NumberOfCurrentHeads; // 6E
270 USHORT CurrentSectorsPerTrack; // 70
271 ULONG CurrentSectorCapacity; // 72
272 USHORT Reserved4[197]; // 76
273 } IDENTIFY_DATA, *PIDENTIFY_DATA;
275 // Identify data without the Reserved4.
276 typedef struct _IDENTIFY_DATA2 {
277 USHORT GeneralConfiguration; // 00
278 USHORT NumberOfCylinders; // 02
279 USHORT Reserved1; // 04
280 USHORT NumberOfHeads; // 06
281 USHORT UnformattedBytesPerTrack; // 08
282 USHORT UnformattedBytesPerSector; // 0A
283 USHORT SectorsPerTrack; // 0C
284 USHORT VendorUnique1[3]; // 0E
285 USHORT SerialNumber[10]; // 14
286 USHORT BufferType; // 28
287 USHORT BufferSectorSize; // 2A
288 USHORT NumberOfEccBytes; // 2C
289 USHORT FirmwareRevision[4]; // 2E
290 USHORT ModelNumber[20]; // 36
291 UCHAR MaximumBlockTransfer; // 5E
292 UCHAR VendorUnique2; // 5F
293 USHORT DoubleWordIo; // 60
294 USHORT Capabilities; // 62
295 USHORT Reserved2; // 64
296 UCHAR VendorUnique3; // 66
297 UCHAR PioCycleTimingMode; // 67
298 UCHAR VendorUnique4; // 68
299 UCHAR DmaCycleTimingMode; // 69
300 USHORT TranslationFieldsValid:1; // 6A
301 USHORT Reserved3:15;
302 USHORT NumberOfCurrentCylinders; // 6C
303 USHORT NumberOfCurrentHeads; // 6E
304 USHORT CurrentSectorsPerTrack; // 70
305 ULONG CurrentSectorCapacity; // 72
306 } IDENTIFY_DATA2, *PIDENTIFY_DATA2;
308 #endif // PSI_EIDE_SCSIOP
310 // function prototypes
311 int Pci2220i_Detect (Scsi_Host_Template *tpnt);
312 int Pci2220i_Command (Scsi_Cmnd *SCpnt);
313 int Pci2220i_QueueCommand (Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *));
314 int Pci2220i_Abort (Scsi_Cmnd *SCpnt);
315 int Pci2220i_Reset (Scsi_Cmnd *SCpnt, unsigned int flags);
316 int Pci2220i_BiosParam (Disk *disk, kdev_t dev, int geom[]);
318 #ifndef NULL
319 #define NULL 0
320 #endif
322 extern struct proc_dir_entry Proc_Scsi_Pci2220i;
324 #define PCI2220I { proc_dir: &Proc_Scsi_Pci2220i,/* proc_dir_entry */ \
325 name: "PCI-2220I EIDE Disk Controller",\
326 detect: Pci2220i_Detect, \
327 command: Pci2220i_Command, \
328 queuecommand: Pci2220i_QueueCommand, \
329 abort: Pci2220i_Abort, \
330 reset: Pci2220i_Reset, \
331 bios_param: Pci2220i_BiosParam, \
332 can_queue: 1, \
333 this_id: -1, \
334 sg_tablesize: SG_NONE, \
335 cmd_per_lun: 1, \
336 use_clustering: DISABLE_CLUSTERING }
338 #endif