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