• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6/drivers/scsi/
1/*
2 *	$Header: /cvsroot/osst/Driver/osst.h,v 1.16 2005/01/01 21:13:35 wriede Exp $
3 */
4
5#include <asm/byteorder.h>
6#include <linux/completion.h>
7#include <linux/mutex.h>
8
9typedef 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;
30
31/*
32 *	READ POSITION packet command - Data Format (From Table 6-57)
33 */
34typedef 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;
48
49/*
50 *      Follows structures which are related to the SELECT SENSE / MODE SENSE
51 *      packet commands.
52 */
53#define COMPRESSION_PAGE           0x0f
54#define COMPRESSION_PAGE_LENGTH    16
55
56#define CAPABILITIES_PAGE          0x2a
57#define CAPABILITIES_PAGE_LENGTH   20
58
59#define TAPE_PARAMTR_PAGE          0x2b
60#define TAPE_PARAMTR_PAGE_LENGTH   16
61
62#define NUMBER_RETRIES_PAGE        0x2f
63#define NUMBER_RETRIES_PAGE_LENGTH 4
64
65#define BLOCK_SIZE_PAGE            0x30
66#define BLOCK_SIZE_PAGE_LENGTH     4
67
68#define BUFFER_FILLING_PAGE        0x33
69#define BUFFER_FILLING_PAGE_LENGTH 4
70
71#define VENDOR_IDENT_PAGE          0x36
72#define VENDOR_IDENT_PAGE_LENGTH   8
73
74#define LOCATE_STATUS_PAGE         0x37
75#define LOCATE_STATUS_PAGE_LENGTH  0
76
77#define MODE_HEADER_LENGTH         4
78
79
80/*
81 *	REQUEST SENSE packet command result - Data Format.
82 */
83typedef 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;
104
105/*
106 *      Mode Parameter Header for the MODE SENSE packet command
107 */
108typedef 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;
114
115/*
116 *      Mode Parameter Block Descriptor the MODE SENSE packet command
117 *
118 *      Support for block descriptors is optional.
119 */
120typedef 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;
126
127/*
128 *      The Data Compression Page, as returned by the MODE SENSE packet command.
129 */
130typedef 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;
169
170/*
171 *      The Medium Partition Page, as returned by the MODE SENSE packet command.
172 */
173typedef 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;
206
207/*
208 *      Capabilities and Mechanical Status Page
209 */
210typedef 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;
295
296/*
297 *      Block Size Page
298 */
299typedef 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;
333
334/*
335 *	Tape Parameters Page
336 */
337typedef 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;
356
357/* OnStream definitions */
358
359#define OS_CONFIG_PARTITION     (0xff)
360#define OS_DATA_PARTITION       (0)
361#define OS_PARTITION_VERSION    (1)
362
363/*
364 * partition
365 */
366typedef 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;
374
375/*
376 * DAT entry
377 */
378typedef struct os_dat_entry_s {
379        __be32  blk_sz;
380        __be16  blk_cnt;
381        __u8    flags;
382        __u8    reserved;
383} os_dat_entry_t;
384
385/*
386 * DAT
387 */
388#define OS_DAT_FLAGS_DATA       (0xc)
389#define OS_DAT_FLAGS_MARK       (0x1)
390
391typedef 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;
398
399/*
400 * Frame types
401 */
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)
407
408/*
409 * AUX
410 */
411typedef 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];
430
431        /*
432         * __u8         app_specific[32];
433         *
434         * Linux specific fields:
435         */
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];
439
440        __u8            reserved_256_511[256];
441} os_aux_t;
442
443#define OS_FM_TAB_MAX 1024
444
445typedef 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;
454
455typedef 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;
465
466typedef 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;
474
475typedef 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;
496
497
498/*
499 * OnStream ADRL frame
500 */
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
505
506/* The OnStream tape buffer descriptor. */
507struct 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                               */
526} ;
527
528/* The OnStream tape drive descriptor */
529struct 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;
536
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*/
551
552  /* Mode characteristics */
553  struct st_modedef modes[ST_NBR_MODES];
554  int current_mode;
555
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 */
582  /*
583   * OnStream specific data
584   */
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;
616
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;
625} ;
626
627/* scsi tape command */
628struct 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;
635};
636
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
644
645/* Additional rw state */
646#define OS_WRITING_COMPLETE 3
647