GUI: Fix Tomato RAF theme for all builds. Compilation typo.
[tomato.git] / release / src-rt-6.x.4708 / linux / linux-2.6.36 / drivers / scsi / osst.h
blob19f3c9a594ffa1d059056701d51ecc6d32ffad25
1 /*
2 * $Header: /cvsroot/osst/Driver/osst.h,v 1.16 2005/01/01 21:13:35 wriede Exp $
3 */
5 #include <asm/byteorder.h>
6 #include <linux/completion.h>
7 #include <linux/mutex.h>
9 typedef struct {
10 unsigned device_type :5; /* Peripheral Device Type */
11 unsigned reserved0_765 :3; /* Peripheral Qualifier - Reserved */
12 unsigned reserved1_6t0 :7; /* Reserved */
13 unsigned rmb :1; /* Removable Medium Bit */
14 unsigned ansi_version :3; /* ANSI Version */
15 unsigned ecma_version :3; /* ECMA Version */
16 unsigned iso_version :2; /* ISO Version */
17 unsigned response_format :4; /* Response Data Format */
18 unsigned reserved3_45 :2; /* Reserved */
19 unsigned reserved3_6 :1; /* TrmIOP - Reserved */
20 unsigned reserved3_7 :1; /* AENC - Reserved */
21 u8 additional_length; /* Additional Length (total_length-4) */
22 u8 rsv5, rsv6, rsv7; /* Reserved */
23 u8 vendor_id[8]; /* Vendor Identification */
24 u8 product_id[16]; /* Product Identification */
25 u8 revision_level[4]; /* Revision Level */
26 u8 vendor_specific[20]; /* Vendor Specific - Optional */
27 u8 reserved56t95[40]; /* Reserved - Optional */
28 /* Additional information may be returned */
29 } idetape_inquiry_result_t;
32 * READ POSITION packet command - Data Format (From Table 6-57)
34 typedef struct {
35 unsigned reserved0_10 :2; /* Reserved */
36 unsigned bpu :1; /* Block Position Unknown */
37 unsigned reserved0_543 :3; /* Reserved */
38 unsigned eop :1; /* End Of Partition */
39 unsigned bop :1; /* Beginning Of Partition */
40 u8 partition; /* Partition Number */
41 u8 reserved2, reserved3; /* Reserved */
42 u32 first_block; /* First Block Location */
43 u32 last_block; /* Last Block Location (Optional) */
44 u8 reserved12; /* Reserved */
45 u8 blocks_in_buffer[3]; /* Blocks In Buffer - (Optional) */
46 u32 bytes_in_buffer; /* Bytes In Buffer (Optional) */
47 } idetape_read_position_result_t;
50 * Follows structures which are related to the SELECT SENSE / MODE SENSE
51 * packet commands.
53 #define COMPRESSION_PAGE 0x0f
54 #define COMPRESSION_PAGE_LENGTH 16
56 #define CAPABILITIES_PAGE 0x2a
57 #define CAPABILITIES_PAGE_LENGTH 20
59 #define TAPE_PARAMTR_PAGE 0x2b
60 #define TAPE_PARAMTR_PAGE_LENGTH 16
62 #define NUMBER_RETRIES_PAGE 0x2f
63 #define NUMBER_RETRIES_PAGE_LENGTH 4
65 #define BLOCK_SIZE_PAGE 0x30
66 #define BLOCK_SIZE_PAGE_LENGTH 4
68 #define BUFFER_FILLING_PAGE 0x33
69 #define BUFFER_FILLING_PAGE_LENGTH 4
71 #define VENDOR_IDENT_PAGE 0x36
72 #define VENDOR_IDENT_PAGE_LENGTH 8
74 #define LOCATE_STATUS_PAGE 0x37
75 #define LOCATE_STATUS_PAGE_LENGTH 0
77 #define MODE_HEADER_LENGTH 4
81 * REQUEST SENSE packet command result - Data Format.
83 typedef struct {
84 unsigned error_code :7; /* Current of deferred errors */
85 unsigned valid :1; /* The information field conforms to QIC-157C */
86 u8 reserved1 :8; /* Segment Number - Reserved */
87 unsigned sense_key :4; /* Sense Key */
88 unsigned reserved2_4 :1; /* Reserved */
89 unsigned ili :1; /* Incorrect Length Indicator */
90 unsigned eom :1; /* End Of Medium */
91 unsigned filemark :1; /* Filemark */
92 u32 information __attribute__ ((packed));
93 u8 asl; /* Additional sense length (n-7) */
94 u32 command_specific; /* Additional command specific information */
95 u8 asc; /* Additional Sense Code */
96 u8 ascq; /* Additional Sense Code Qualifier */
97 u8 replaceable_unit_code; /* Field Replaceable Unit Code */
98 unsigned sk_specific1 :7; /* Sense Key Specific */
99 unsigned sksv :1; /* Sense Key Specific information is valid */
100 u8 sk_specific2; /* Sense Key Specific */
101 u8 sk_specific3; /* Sense Key Specific */
102 u8 pad[2]; /* Padding to 20 bytes */
103 } idetape_request_sense_result_t;
106 * Mode Parameter Header for the MODE SENSE packet command
108 typedef struct {
109 u8 mode_data_length; /* Length of the following data transfer */
110 u8 medium_type; /* Medium Type */
111 u8 dsp; /* Device Specific Parameter */
112 u8 bdl; /* Block Descriptor Length */
113 } osst_mode_parameter_header_t;
116 * Mode Parameter Block Descriptor the MODE SENSE packet command
118 * Support for block descriptors is optional.
120 typedef struct {
121 u8 density_code; /* Medium density code */
122 u8 blocks[3]; /* Number of blocks */
123 u8 reserved4; /* Reserved */
124 u8 length[3]; /* Block Length */
125 } osst_parameter_block_descriptor_t;
128 * The Data Compression Page, as returned by the MODE SENSE packet command.
130 typedef struct {
131 #if defined(__BIG_ENDIAN_BITFIELD)
132 unsigned ps :1;
133 unsigned reserved0 :1; /* Reserved */
134 unsigned page_code :6; /* Page Code - Should be 0xf */
135 #elif defined(__LITTLE_ENDIAN_BITFIELD)
136 unsigned page_code :6; /* Page Code - Should be 0xf */
137 unsigned reserved0 :1; /* Reserved */
138 unsigned ps :1;
139 #else
140 #error "Please fix <asm/byteorder.h>"
141 #endif
142 u8 page_length; /* Page Length - Should be 14 */
143 #if defined(__BIG_ENDIAN_BITFIELD)
144 unsigned dce :1; /* Data Compression Enable */
145 unsigned dcc :1; /* Data Compression Capable */
146 unsigned reserved2 :6; /* Reserved */
147 #elif defined(__LITTLE_ENDIAN_BITFIELD)
148 unsigned reserved2 :6; /* Reserved */
149 unsigned dcc :1; /* Data Compression Capable */
150 unsigned dce :1; /* Data Compression Enable */
151 #else
152 #error "Please fix <asm/byteorder.h>"
153 #endif
154 #if defined(__BIG_ENDIAN_BITFIELD)
155 unsigned dde :1; /* Data Decompression Enable */
156 unsigned red :2; /* Report Exception on Decompression */
157 unsigned reserved3 :5; /* Reserved */
158 #elif defined(__LITTLE_ENDIAN_BITFIELD)
159 unsigned reserved3 :5; /* Reserved */
160 unsigned red :2; /* Report Exception on Decompression */
161 unsigned dde :1; /* Data Decompression Enable */
162 #else
163 #error "Please fix <asm/byteorder.h>"
164 #endif
165 u32 ca; /* Compression Algorithm */
166 u32 da; /* Decompression Algorithm */
167 u8 reserved[4]; /* Reserved */
168 } osst_data_compression_page_t;
171 * The Medium Partition Page, as returned by the MODE SENSE packet command.
173 typedef struct {
174 #if defined(__BIG_ENDIAN_BITFIELD)
175 unsigned ps :1;
176 unsigned reserved1_6 :1; /* Reserved */
177 unsigned page_code :6; /* Page Code - Should be 0x11 */
178 #elif defined(__LITTLE_ENDIAN_BITFIELD)
179 unsigned page_code :6; /* Page Code - Should be 0x11 */
180 unsigned reserved1_6 :1; /* Reserved */
181 unsigned ps :1;
182 #else
183 #error "Please fix <asm/byteorder.h>"
184 #endif
185 u8 page_length; /* Page Length - Should be 6 */
186 u8 map; /* Maximum Additional Partitions - Should be 0 */
187 u8 apd; /* Additional Partitions Defined - Should be 0 */
188 #if defined(__BIG_ENDIAN_BITFIELD)
189 unsigned fdp :1; /* Fixed Data Partitions */
190 unsigned sdp :1; /* Should be 0 */
191 unsigned idp :1; /* Should be 0 */
192 unsigned psum :2; /* Should be 0 */
193 unsigned reserved4_012 :3; /* Reserved */
194 #elif defined(__LITTLE_ENDIAN_BITFIELD)
195 unsigned reserved4_012 :3; /* Reserved */
196 unsigned psum :2; /* Should be 0 */
197 unsigned idp :1; /* Should be 0 */
198 unsigned sdp :1; /* Should be 0 */
199 unsigned fdp :1; /* Fixed Data Partitions */
200 #else
201 #error "Please fix <asm/byteorder.h>"
202 #endif
203 u8 mfr; /* Medium Format Recognition */
204 u8 reserved[2]; /* Reserved */
205 } osst_medium_partition_page_t;
208 * Capabilities and Mechanical Status Page
210 typedef struct {
211 #if defined(__BIG_ENDIAN_BITFIELD)
212 unsigned reserved1_67 :2;
213 unsigned page_code :6; /* Page code - Should be 0x2a */
214 #elif defined(__LITTLE_ENDIAN_BITFIELD)
215 unsigned page_code :6; /* Page code - Should be 0x2a */
216 unsigned reserved1_67 :2;
217 #else
218 #error "Please fix <asm/byteorder.h>"
219 #endif
220 u8 page_length; /* Page Length - Should be 0x12 */
221 u8 reserved2, reserved3;
222 #if defined(__BIG_ENDIAN_BITFIELD)
223 unsigned reserved4_67 :2;
224 unsigned sprev :1; /* Supports SPACE in the reverse direction */
225 unsigned reserved4_1234 :4;
226 unsigned ro :1; /* Read Only Mode */
227 #elif defined(__LITTLE_ENDIAN_BITFIELD)
228 unsigned ro :1; /* Read Only Mode */
229 unsigned reserved4_1234 :4;
230 unsigned sprev :1; /* Supports SPACE in the reverse direction */
231 unsigned reserved4_67 :2;
232 #else
233 #error "Please fix <asm/byteorder.h>"
234 #endif
235 #if defined(__BIG_ENDIAN_BITFIELD)
236 unsigned reserved5_67 :2;
237 unsigned qfa :1; /* Supports the QFA two partition formats */
238 unsigned reserved5_4 :1;
239 unsigned efmt :1; /* Supports ERASE command initiated formatting */
240 unsigned reserved5_012 :3;
241 #elif defined(__LITTLE_ENDIAN_BITFIELD)
242 unsigned reserved5_012 :3;
243 unsigned efmt :1; /* Supports ERASE command initiated formatting */
244 unsigned reserved5_4 :1;
245 unsigned qfa :1; /* Supports the QFA two partition formats */
246 unsigned reserved5_67 :2;
247 #else
248 #error "Please fix <asm/byteorder.h>"
249 #endif
250 #if defined(__BIG_ENDIAN_BITFIELD)
251 unsigned cmprs :1; /* Supports data compression */
252 unsigned ecc :1; /* Supports error correction */
253 unsigned reserved6_45 :2; /* Reserved */
254 unsigned eject :1; /* The device can eject the volume */
255 unsigned prevent :1; /* The device defaults in the prevent state after power up */
256 unsigned locked :1; /* The volume is locked */
257 unsigned lock :1; /* Supports locking the volume */
258 #elif defined(__LITTLE_ENDIAN_BITFIELD)
259 unsigned lock :1; /* Supports locking the volume */
260 unsigned locked :1; /* The volume is locked */
261 unsigned prevent :1; /* The device defaults in the prevent state after power up */
262 unsigned eject :1; /* The device can eject the volume */
263 unsigned reserved6_45 :2; /* Reserved */
264 unsigned ecc :1; /* Supports error correction */
265 unsigned cmprs :1; /* Supports data compression */
266 #else
267 #error "Please fix <asm/byteorder.h>"
268 #endif
269 #if defined(__BIG_ENDIAN_BITFIELD)
270 unsigned blk32768 :1; /* slowb - the device restricts the byte count for PIO */
271 /* transfers for slow buffer memory ??? */
272 /* Also 32768 block size in some cases */
273 unsigned reserved7_3_6 :4;
274 unsigned blk1024 :1; /* Supports 1024 bytes block size */
275 unsigned blk512 :1; /* Supports 512 bytes block size */
276 unsigned reserved7_0 :1;
277 #elif defined(__LITTLE_ENDIAN_BITFIELD)
278 unsigned reserved7_0 :1;
279 unsigned blk512 :1; /* Supports 512 bytes block size */
280 unsigned blk1024 :1; /* Supports 1024 bytes block size */
281 unsigned reserved7_3_6 :4;
282 unsigned blk32768 :1; /* slowb - the device restricts the byte count for PIO */
283 /* transfers for slow buffer memory ??? */
284 /* Also 32768 block size in some cases */
285 #else
286 #error "Please fix <asm/byteorder.h>"
287 #endif
288 __be16 max_speed; /* Maximum speed supported in KBps */
289 u8 reserved10, reserved11;
290 __be16 ctl; /* Continuous Transfer Limit in blocks */
291 __be16 speed; /* Current Speed, in KBps */
292 __be16 buffer_size; /* Buffer Size, in 512 bytes */
293 u8 reserved18, reserved19;
294 } osst_capabilities_page_t;
297 * Block Size Page
299 typedef struct {
300 #if defined(__BIG_ENDIAN_BITFIELD)
301 unsigned ps :1;
302 unsigned reserved1_6 :1;
303 unsigned page_code :6; /* Page code - Should be 0x30 */
304 #elif defined(__LITTLE_ENDIAN_BITFIELD)
305 unsigned page_code :6; /* Page code - Should be 0x30 */
306 unsigned reserved1_6 :1;
307 unsigned ps :1;
308 #else
309 #error "Please fix <asm/byteorder.h>"
310 #endif
311 u8 page_length; /* Page Length - Should be 2 */
312 u8 reserved2;
313 #if defined(__BIG_ENDIAN_BITFIELD)
314 unsigned one :1;
315 unsigned reserved2_6 :1;
316 unsigned record32_5 :1;
317 unsigned record32 :1;
318 unsigned reserved2_23 :2;
319 unsigned play32_5 :1;
320 unsigned play32 :1;
321 #elif defined(__LITTLE_ENDIAN_BITFIELD)
322 unsigned play32 :1;
323 unsigned play32_5 :1;
324 unsigned reserved2_23 :2;
325 unsigned record32 :1;
326 unsigned record32_5 :1;
327 unsigned reserved2_6 :1;
328 unsigned one :1;
329 #else
330 #error "Please fix <asm/byteorder.h>"
331 #endif
332 } osst_block_size_page_t;
335 * Tape Parameters Page
337 typedef struct {
338 #if defined(__BIG_ENDIAN_BITFIELD)
339 unsigned ps :1;
340 unsigned reserved1_6 :1;
341 unsigned page_code :6; /* Page code - Should be 0x2b */
342 #elif defined(__LITTLE_ENDIAN_BITFIELD)
343 unsigned page_code :6; /* Page code - Should be 0x2b */
344 unsigned reserved1_6 :1;
345 unsigned ps :1;
346 #else
347 #error "Please fix <asm/byteorder.h>"
348 #endif
349 u8 reserved2;
350 u8 density;
351 u8 reserved3,reserved4;
352 __be16 segtrk;
353 __be16 trks;
354 u8 reserved5,reserved6,reserved7,reserved8,reserved9,reserved10;
355 } osst_tape_paramtr_page_t;
357 /* OnStream definitions */
359 #define OS_CONFIG_PARTITION (0xff)
360 #define OS_DATA_PARTITION (0)
361 #define OS_PARTITION_VERSION (1)
364 * partition
366 typedef struct os_partition_s {
367 __u8 partition_num;
368 __u8 par_desc_ver;
369 __be16 wrt_pass_cntr;
370 __be32 first_frame_ppos;
371 __be32 last_frame_ppos;
372 __be32 eod_frame_ppos;
373 } os_partition_t;
376 * DAT entry
378 typedef struct os_dat_entry_s {
379 __be32 blk_sz;
380 __be16 blk_cnt;
381 __u8 flags;
382 __u8 reserved;
383 } os_dat_entry_t;
386 * DAT
388 #define OS_DAT_FLAGS_DATA (0xc)
389 #define OS_DAT_FLAGS_MARK (0x1)
391 typedef struct os_dat_s {
392 __u8 dat_sz;
393 __u8 reserved1;
394 __u8 entry_cnt;
395 __u8 reserved3;
396 os_dat_entry_t dat_list[16];
397 } os_dat_t;
400 * Frame types
402 #define OS_FRAME_TYPE_FILL (0)
403 #define OS_FRAME_TYPE_EOD (1 << 0)
404 #define OS_FRAME_TYPE_MARKER (1 << 1)
405 #define OS_FRAME_TYPE_HEADER (1 << 3)
406 #define OS_FRAME_TYPE_DATA (1 << 7)
409 * AUX
411 typedef struct os_aux_s {
412 __be32 format_id; /* hardware compability AUX is based on */
413 char application_sig[4]; /* driver used to write this media */
414 __be32 hdwr; /* reserved */
415 __be32 update_frame_cntr; /* for configuration frame */
416 __u8 frame_type;
417 __u8 frame_type_reserved;
418 __u8 reserved_18_19[2];
419 os_partition_t partition;
420 __u8 reserved_36_43[8];
421 __be32 frame_seq_num;
422 __be32 logical_blk_num_high;
423 __be32 logical_blk_num;
424 os_dat_t dat;
425 __u8 reserved188_191[4];
426 __be32 filemark_cnt;
427 __be32 phys_fm;
428 __be32 last_mark_ppos;
429 __u8 reserved204_223[20];
432 * __u8 app_specific[32];
434 * Linux specific fields:
436 __be32 next_mark_ppos; /* when known, points to next marker */
437 __be32 last_mark_lbn; /* storing log_blk_num of last mark is extends ADR spec */
438 __u8 linux_specific[24];
440 __u8 reserved_256_511[256];
441 } os_aux_t;
443 #define OS_FM_TAB_MAX 1024
445 typedef struct os_fm_tab_s {
446 __u8 fm_part_num;
447 __u8 reserved_1;
448 __u8 fm_tab_ent_sz;
449 __u8 reserved_3;
450 __be16 fm_tab_ent_cnt;
451 __u8 reserved6_15[10];
452 __be32 fm_tab_ent[OS_FM_TAB_MAX];
453 } os_fm_tab_t;
455 typedef struct os_ext_trk_ey_s {
456 __u8 et_part_num;
457 __u8 fmt;
458 __be16 fm_tab_off;
459 __u8 reserved4_7[4];
460 __be32 last_hlb_hi;
461 __be32 last_hlb;
462 __be32 last_pp;
463 __u8 reserved20_31[12];
464 } os_ext_trk_ey_t;
466 typedef struct os_ext_trk_tb_s {
467 __u8 nr_stream_part;
468 __u8 reserved_1;
469 __u8 et_ent_sz;
470 __u8 reserved3_15[13];
471 os_ext_trk_ey_t dat_ext_trk_ey;
472 os_ext_trk_ey_t qfa_ext_trk_ey;
473 } os_ext_trk_tb_t;
475 typedef struct os_header_s {
476 char ident_str[8];
477 __u8 major_rev;
478 __u8 minor_rev;
479 __be16 ext_trk_tb_off;
480 __u8 reserved12_15[4];
481 __u8 pt_par_num;
482 __u8 pt_reserved1_3[3];
483 os_partition_t partition[16];
484 __be32 cfg_col_width;
485 __be32 dat_col_width;
486 __be32 qfa_col_width;
487 __u8 cartridge[16];
488 __u8 reserved304_511[208];
489 __be32 old_filemark_list[16680/4]; /* in ADR 1.4 __u8 track_table[16680] */
490 os_ext_trk_tb_t ext_track_tb;
491 __u8 reserved17272_17735[464];
492 os_fm_tab_t dat_fm_tab;
493 os_fm_tab_t qfa_fm_tab;
494 __u8 reserved25960_32767[6808];
495 } os_header_t;
499 * OnStream ADRL frame
501 #define OS_FRAME_SIZE (32 * 1024 + 512)
502 #define OS_DATA_SIZE (32 * 1024)
503 #define OS_AUX_SIZE (512)
504 //#define OSST_MAX_SG 2
506 /* The OnStream tape buffer descriptor. */
507 struct osst_buffer {
508 unsigned char in_use;
509 unsigned char dma; /* DMA-able buffer */
510 int buffer_size;
511 int buffer_blocks;
512 int buffer_bytes;
513 int read_pointer;
514 int writing;
515 int midlevel_result;
516 int syscall_result;
517 struct osst_request *last_SRpnt;
518 struct st_cmdstatus cmdstat;
519 struct rq_map_data map_data;
520 unsigned char *b_data;
521 os_aux_t *aux; /* onstream AUX structure at end of each block */
522 unsigned short use_sg; /* zero or number of s/g segments for this adapter */
523 unsigned short sg_segs; /* number of segments in s/g list */
524 unsigned short orig_sg_segs; /* number of segments allocated at first try */
525 struct scatterlist sg[1]; /* MUST BE last item */
528 /* The OnStream tape drive descriptor */
529 struct osst_tape {
530 struct scsi_driver *driver;
531 unsigned capacity;
532 struct scsi_device *device;
533 struct mutex lock; /* for serialization */
534 struct completion wait; /* for SCSI commands */
535 struct osst_buffer * buffer;
537 /* Drive characteristics */
538 unsigned char omit_blklims;
539 unsigned char do_auto_lock;
540 unsigned char can_bsr;
541 unsigned char can_partitions;
542 unsigned char two_fm;
543 unsigned char fast_mteom;
544 unsigned char restr_dma;
545 unsigned char scsi2_logical;
546 unsigned char default_drvbuffer; /* 0xff = don't touch, value 3 bits */
547 unsigned char pos_unknown; /* after reset position unknown */
548 int write_threshold;
549 int timeout; /* timeout for normal commands */
550 int long_timeout; /* timeout for commands known to take long time*/
552 /* Mode characteristics */
553 struct st_modedef modes[ST_NBR_MODES];
554 int current_mode;
556 /* Status variables */
557 int partition;
558 int new_partition;
559 int nbr_partitions; /* zero until partition support enabled */
560 struct st_partstat ps[ST_NBR_PARTITIONS];
561 unsigned char dirty;
562 unsigned char ready;
563 unsigned char write_prot;
564 unsigned char drv_write_prot;
565 unsigned char in_use;
566 unsigned char blksize_changed;
567 unsigned char density_changed;
568 unsigned char compression_changed;
569 unsigned char drv_buffer;
570 unsigned char density;
571 unsigned char door_locked;
572 unsigned char rew_at_close;
573 unsigned char inited;
574 int block_size;
575 int min_block;
576 int max_block;
577 int recover_count; /* from tape opening */
578 int abort_count;
579 int write_count;
580 int read_count;
581 int recover_erreg; /* from last status call */
583 * OnStream specific data
585 int os_fw_rev; /* the firmware revision * 10000 */
586 unsigned char raw; /* flag OnStream raw access (32.5KB block size) */
587 unsigned char poll; /* flag that this drive needs polling (IDE|firmware) */
588 unsigned char frame_in_buffer; /* flag that the frame as per frame_seq_number
589 * has been read into STp->buffer and is valid */
590 int frame_seq_number; /* logical frame number */
591 int logical_blk_num; /* logical block number */
592 unsigned first_frame_position; /* physical frame to be transferred to/from host */
593 unsigned last_frame_position; /* physical frame to be transferd to/from tape */
594 int cur_frames; /* current number of frames in internal buffer */
595 int max_frames; /* max number of frames in internal buffer */
596 char application_sig[5]; /* application signature */
597 unsigned char fast_open; /* flag that reminds us we didn't check headers at open */
598 unsigned short wrt_pass_cntr; /* write pass counter */
599 int update_frame_cntr; /* update frame counter */
600 int onstream_write_error; /* write error recovery active */
601 int header_ok; /* header frame verified ok */
602 int linux_media; /* reading linux-specifc media */
603 int linux_media_version;
604 os_header_t * header_cache; /* cache is kept for filemark positions */
605 int filemark_cnt;
606 int first_mark_ppos;
607 int last_mark_ppos;
608 int last_mark_lbn; /* storing log_blk_num of last mark is extends ADR spec */
609 int first_data_ppos;
610 int eod_frame_ppos;
611 int eod_frame_lfa;
612 int write_type; /* used in write error recovery */
613 int read_error_frame; /* used in read error recovery */
614 unsigned long cmd_start_time;
615 unsigned long max_cmd_time;
617 #if DEBUG
618 unsigned char write_pending;
619 int nbr_finished;
620 int nbr_waits;
621 unsigned char last_cmnd[6];
622 unsigned char last_sense[16];
623 #endif
624 struct gendisk *drive;
627 /* scsi tape command */
628 struct osst_request {
629 unsigned char cmd[MAX_COMMAND_SIZE];
630 unsigned char sense[SCSI_SENSE_BUFFERSIZE];
631 int result;
632 struct osst_tape *stp;
633 struct completion *waiting;
634 struct bio *bio;
637 /* Values of write_type */
638 #define OS_WRITE_DATA 0
639 #define OS_WRITE_EOD 1
640 #define OS_WRITE_NEW_MARK 2
641 #define OS_WRITE_LAST_MARK 3
642 #define OS_WRITE_HEADER 4
643 #define OS_WRITE_FILLER 5
645 /* Additional rw state */
646 #define OS_WRITING_COMPLETE 3