2  *      $Header: /cvsroot/osst/Driver/osst.h,v 1.16 2005/01/01 21:13:35 wriede Exp $
 
   5 #include <asm/byteorder.h>
 
   6 #include <linux/completion.h>
 
   7 #include <linux/mutex.h>
 
   9 /*      FIXME - rename and use the following two types or delete them!
 
  10  *              and the types really should go to st.h anyway...
 
  11  *      INQUIRY packet command - Data Format (From Table 6-8 of QIC-157C)
 
  14         unsigned        device_type     :5;     /* Peripheral Device Type */
 
  15         unsigned        reserved0_765   :3;     /* Peripheral Qualifier - Reserved */
 
  16         unsigned        reserved1_6t0   :7;     /* Reserved */
 
  17         unsigned        rmb             :1;     /* Removable Medium Bit */
 
  18         unsigned        ansi_version    :3;     /* ANSI Version */
 
  19         unsigned        ecma_version    :3;     /* ECMA Version */
 
  20         unsigned        iso_version     :2;     /* ISO Version */
 
  21         unsigned        response_format :4;     /* Response Data Format */
 
  22         unsigned        reserved3_45    :2;     /* Reserved */
 
  23         unsigned        reserved3_6     :1;     /* TrmIOP - Reserved */
 
  24         unsigned        reserved3_7     :1;     /* AENC - Reserved */
 
  25         u8              additional_length;      /* Additional Length (total_length-4) */
 
  26         u8              rsv5, rsv6, rsv7;       /* Reserved */
 
  27         u8              vendor_id[8];           /* Vendor Identification */
 
  28         u8              product_id[16];         /* Product Identification */
 
  29         u8              revision_level[4];      /* Revision Level */
 
  30         u8              vendor_specific[20];    /* Vendor Specific - Optional */
 
  31         u8              reserved56t95[40];      /* Reserved - Optional */
 
  32                                                 /* Additional information may be returned */
 
  33 } idetape_inquiry_result_t;
 
  36  *      READ POSITION packet command - Data Format (From Table 6-57)
 
  39         unsigned        reserved0_10    :2;     /* Reserved */
 
  40         unsigned        bpu             :1;     /* Block Position Unknown */    
 
  41         unsigned        reserved0_543   :3;     /* Reserved */
 
  42         unsigned        eop             :1;     /* End Of Partition */
 
  43         unsigned        bop             :1;     /* Beginning Of Partition */
 
  44         u8              partition;              /* Partition Number */
 
  45         u8              reserved2, reserved3;   /* Reserved */
 
  46         u32             first_block;            /* First Block Location */
 
  47         u32             last_block;             /* Last Block Location (Optional) */
 
  48         u8              reserved12;             /* Reserved */
 
  49         u8              blocks_in_buffer[3];    /* Blocks In Buffer - (Optional) */
 
  50         u32             bytes_in_buffer;        /* Bytes In Buffer (Optional) */
 
  51 } idetape_read_position_result_t;
 
  54  *      Follows structures which are related to the SELECT SENSE / MODE SENSE
 
  57 #define COMPRESSION_PAGE           0x0f
 
  58 #define COMPRESSION_PAGE_LENGTH    16
 
  60 #define CAPABILITIES_PAGE          0x2a
 
  61 #define CAPABILITIES_PAGE_LENGTH   20
 
  63 #define TAPE_PARAMTR_PAGE          0x2b
 
  64 #define TAPE_PARAMTR_PAGE_LENGTH   16
 
  66 #define NUMBER_RETRIES_PAGE        0x2f
 
  67 #define NUMBER_RETRIES_PAGE_LENGTH 4
 
  69 #define BLOCK_SIZE_PAGE            0x30
 
  70 #define BLOCK_SIZE_PAGE_LENGTH     4
 
  72 #define BUFFER_FILLING_PAGE        0x33
 
  73 #define BUFFER_FILLING_PAGE_LENGTH 4
 
  75 #define VENDOR_IDENT_PAGE          0x36
 
  76 #define VENDOR_IDENT_PAGE_LENGTH   8
 
  78 #define LOCATE_STATUS_PAGE         0x37
 
  79 #define LOCATE_STATUS_PAGE_LENGTH  0
 
  81 #define MODE_HEADER_LENGTH         4
 
  85  *      REQUEST SENSE packet command result - Data Format.
 
  88         unsigned        error_code      :7;     /* Current of deferred errors */
 
  89         unsigned        valid           :1;     /* The information field conforms to QIC-157C */
 
  90         u8              reserved1       :8;     /* Segment Number - Reserved */
 
  91         unsigned        sense_key       :4;     /* Sense Key */
 
  92         unsigned        reserved2_4     :1;     /* Reserved */
 
  93         unsigned        ili             :1;     /* Incorrect Length Indicator */
 
  94         unsigned        eom             :1;     /* End Of Medium */
 
  95         unsigned        filemark        :1;     /* Filemark */
 
  96         u32             information __attribute__ ((packed));
 
  97         u8              asl;                    /* Additional sense length (n-7) */
 
  98         u32             command_specific;       /* Additional command specific information */
 
  99         u8              asc;                    /* Additional Sense Code */
 
 100         u8              ascq;                   /* Additional Sense Code Qualifier */
 
 101         u8              replaceable_unit_code;  /* Field Replaceable Unit Code */
 
 102         unsigned        sk_specific1    :7;     /* Sense Key Specific */
 
 103         unsigned        sksv            :1;     /* Sense Key Specific information is valid */
 
 104         u8              sk_specific2;           /* Sense Key Specific */
 
 105         u8              sk_specific3;           /* Sense Key Specific */
 
 106         u8              pad[2];                 /* Padding to 20 bytes */
 
 107 } idetape_request_sense_result_t;
 
 110  *      Mode Parameter Header for the MODE SENSE packet command
 
 113         u8              mode_data_length;       /* Length of the following data transfer */
 
 114         u8              medium_type;            /* Medium Type */
 
 115         u8              dsp;                    /* Device Specific Parameter */
 
 116         u8              bdl;                    /* Block Descriptor Length */
 
 117 } osst_mode_parameter_header_t;
 
 120  *      Mode Parameter Block Descriptor the MODE SENSE packet command
 
 122  *      Support for block descriptors is optional.
 
 125         u8              density_code;           /* Medium density code */
 
 126         u8              blocks[3];              /* Number of blocks */
 
 127         u8              reserved4;              /* Reserved */
 
 128         u8              length[3];              /* Block Length */
 
 129 } osst_parameter_block_descriptor_t;
 
 132  *      The Data Compression Page, as returned by the MODE SENSE packet command.
 
 135 #if   defined(__BIG_ENDIAN_BITFIELD)
 
 137         unsigned        reserved0       :1;     /* Reserved */
 
 138         unsigned        page_code       :6;     /* Page Code - Should be 0xf */
 
 139 #elif defined(__LITTLE_ENDIAN_BITFIELD)
 
 140         unsigned        page_code       :6;     /* Page Code - Should be 0xf */
 
 141         unsigned        reserved0       :1;     /* Reserved */
 
 144 #error "Please fix <asm/byteorder.h>"
 
 146         u8              page_length;            /* Page Length - Should be 14 */
 
 147 #if   defined(__BIG_ENDIAN_BITFIELD)
 
 148         unsigned        dce             :1;     /* Data Compression Enable */
 
 149         unsigned        dcc             :1;     /* Data Compression Capable */
 
 150         unsigned        reserved2       :6;     /* Reserved */
 
 151 #elif defined(__LITTLE_ENDIAN_BITFIELD)
 
 152         unsigned        reserved2       :6;     /* Reserved */
 
 153         unsigned        dcc             :1;     /* Data Compression Capable */
 
 154         unsigned        dce             :1;     /* Data Compression Enable */
 
 156 #error "Please fix <asm/byteorder.h>"
 
 158 #if   defined(__BIG_ENDIAN_BITFIELD)
 
 159         unsigned        dde             :1;     /* Data Decompression Enable */
 
 160         unsigned        red             :2;     /* Report Exception on Decompression */
 
 161         unsigned        reserved3       :5;     /* Reserved */
 
 162 #elif defined(__LITTLE_ENDIAN_BITFIELD)
 
 163         unsigned        reserved3       :5;     /* Reserved */
 
 164         unsigned        red             :2;     /* Report Exception on Decompression */
 
 165         unsigned        dde             :1;     /* Data Decompression Enable */
 
 167 #error "Please fix <asm/byteorder.h>"
 
 169         u32             ca;                     /* Compression Algorithm */
 
 170         u32             da;                     /* Decompression Algorithm */
 
 171         u8              reserved[4];            /* Reserved */
 
 172 } osst_data_compression_page_t;
 
 175  *      The Medium Partition Page, as returned by the MODE SENSE packet command.
 
 178 #if   defined(__BIG_ENDIAN_BITFIELD)
 
 180         unsigned        reserved1_6     :1;     /* Reserved */
 
 181         unsigned        page_code       :6;     /* Page Code - Should be 0x11 */
 
 182 #elif defined(__LITTLE_ENDIAN_BITFIELD)
 
 183         unsigned        page_code       :6;     /* Page Code - Should be 0x11 */
 
 184         unsigned        reserved1_6     :1;     /* Reserved */
 
 187 #error "Please fix <asm/byteorder.h>"
 
 189         u8              page_length;            /* Page Length - Should be 6 */
 
 190         u8              map;                    /* Maximum Additional Partitions - Should be 0 */
 
 191         u8              apd;                    /* Additional Partitions Defined - Should be 0 */
 
 192 #if   defined(__BIG_ENDIAN_BITFIELD)
 
 193         unsigned        fdp             :1;     /* Fixed Data Partitions */
 
 194         unsigned        sdp             :1;     /* Should be 0 */
 
 195         unsigned        idp             :1;     /* Should be 0 */
 
 196         unsigned        psum            :2;     /* Should be 0 */
 
 197         unsigned        reserved4_012   :3;     /* Reserved */
 
 198 #elif defined(__LITTLE_ENDIAN_BITFIELD)
 
 199         unsigned        reserved4_012   :3;     /* Reserved */
 
 200         unsigned        psum            :2;     /* Should be 0 */
 
 201         unsigned        idp             :1;     /* Should be 0 */
 
 202         unsigned        sdp             :1;     /* Should be 0 */
 
 203         unsigned        fdp             :1;     /* Fixed Data Partitions */
 
 205 #error "Please fix <asm/byteorder.h>"
 
 207         u8              mfr;                    /* Medium Format Recognition */
 
 208         u8              reserved[2];            /* Reserved */
 
 209 } osst_medium_partition_page_t;
 
 212  *      Capabilities and Mechanical Status Page
 
 215 #if   defined(__BIG_ENDIAN_BITFIELD)
 
 216         unsigned        reserved1_67    :2;
 
 217         unsigned        page_code       :6;     /* Page code - Should be 0x2a */
 
 218 #elif defined(__LITTLE_ENDIAN_BITFIELD)
 
 219         unsigned        page_code       :6;     /* Page code - Should be 0x2a */
 
 220         unsigned        reserved1_67    :2;
 
 222 #error "Please fix <asm/byteorder.h>"
 
 224         u8              page_length;            /* Page Length - Should be 0x12 */
 
 225         u8              reserved2, reserved3;
 
 226 #if   defined(__BIG_ENDIAN_BITFIELD)
 
 227         unsigned        reserved4_67    :2;
 
 228         unsigned        sprev           :1;     /* Supports SPACE in the reverse direction */
 
 229         unsigned        reserved4_1234  :4;
 
 230         unsigned        ro              :1;     /* Read Only Mode */
 
 231 #elif defined(__LITTLE_ENDIAN_BITFIELD)
 
 232         unsigned        ro              :1;     /* Read Only Mode */
 
 233         unsigned        reserved4_1234  :4;
 
 234         unsigned        sprev           :1;     /* Supports SPACE in the reverse direction */
 
 235         unsigned        reserved4_67    :2;
 
 237 #error "Please fix <asm/byteorder.h>"
 
 239 #if   defined(__BIG_ENDIAN_BITFIELD)
 
 240         unsigned        reserved5_67    :2;
 
 241         unsigned        qfa             :1;     /* Supports the QFA two partition formats */
 
 242         unsigned        reserved5_4     :1;
 
 243         unsigned        efmt            :1;     /* Supports ERASE command initiated formatting */
 
 244         unsigned        reserved5_012   :3;
 
 245 #elif defined(__LITTLE_ENDIAN_BITFIELD)
 
 246         unsigned        reserved5_012   :3;
 
 247         unsigned        efmt            :1;     /* Supports ERASE command initiated formatting */
 
 248         unsigned        reserved5_4     :1;
 
 249         unsigned        qfa             :1;     /* Supports the QFA two partition formats */
 
 250         unsigned        reserved5_67    :2;
 
 252 #error "Please fix <asm/byteorder.h>"
 
 254 #if   defined(__BIG_ENDIAN_BITFIELD)
 
 255         unsigned        cmprs           :1;     /* Supports data compression */
 
 256         unsigned        ecc             :1;     /* Supports error correction */
 
 257         unsigned        reserved6_45    :2;     /* Reserved */  
 
 258         unsigned        eject           :1;     /* The device can eject the volume */
 
 259         unsigned        prevent         :1;     /* The device defaults in the prevent state after power up */
 
 260         unsigned        locked          :1;     /* The volume is locked */
 
 261         unsigned        lock            :1;     /* Supports locking the volume */
 
 262 #elif defined(__LITTLE_ENDIAN_BITFIELD)
 
 263         unsigned        lock            :1;     /* Supports locking the volume */
 
 264         unsigned        locked          :1;     /* The volume is locked */
 
 265         unsigned        prevent         :1;     /* The device defaults in the prevent state after power up */
 
 266         unsigned        eject           :1;     /* The device can eject the volume */
 
 267         unsigned        reserved6_45    :2;     /* Reserved */  
 
 268         unsigned        ecc             :1;     /* Supports error correction */
 
 269         unsigned        cmprs           :1;     /* Supports data compression */
 
 271 #error "Please fix <asm/byteorder.h>"
 
 273 #if   defined(__BIG_ENDIAN_BITFIELD)
 
 274         unsigned        blk32768        :1;     /* slowb - the device restricts the byte count for PIO */
 
 275                                                 /* transfers for slow buffer memory ??? */
 
 276                                                 /* Also 32768 block size in some cases */
 
 277         unsigned        reserved7_3_6   :4;
 
 278         unsigned        blk1024         :1;     /* Supports 1024 bytes block size */
 
 279         unsigned        blk512          :1;     /* Supports 512 bytes block size */
 
 280         unsigned        reserved7_0     :1;
 
 281 #elif defined(__LITTLE_ENDIAN_BITFIELD)
 
 282         unsigned        reserved7_0     :1;
 
 283         unsigned        blk512          :1;     /* Supports 512 bytes block size */
 
 284         unsigned        blk1024         :1;     /* Supports 1024 bytes block size */
 
 285         unsigned        reserved7_3_6   :4;
 
 286         unsigned        blk32768        :1;     /* slowb - the device restricts the byte count for PIO */
 
 287                                                 /* transfers for slow buffer memory ??? */
 
 288                                                 /* Also 32768 block size in some cases */
 
 290 #error "Please fix <asm/byteorder.h>"
 
 292         __be16          max_speed;              /* Maximum speed supported in KBps */
 
 293         u8              reserved10, reserved11;
 
 294         __be16          ctl;                    /* Continuous Transfer Limit in blocks */
 
 295         __be16          speed;                  /* Current Speed, in KBps */
 
 296         __be16          buffer_size;            /* Buffer Size, in 512 bytes */
 
 297         u8              reserved18, reserved19;
 
 298 } osst_capabilities_page_t;
 
 304 #if   defined(__BIG_ENDIAN_BITFIELD)
 
 306         unsigned        reserved1_6     :1;
 
 307         unsigned        page_code       :6;     /* Page code - Should be 0x30 */
 
 308 #elif defined(__LITTLE_ENDIAN_BITFIELD)
 
 309         unsigned        page_code       :6;     /* Page code - Should be 0x30 */
 
 310         unsigned        reserved1_6     :1;
 
 313 #error "Please fix <asm/byteorder.h>"
 
 315         u8              page_length;            /* Page Length - Should be 2 */
 
 317 #if   defined(__BIG_ENDIAN_BITFIELD)
 
 319         unsigned        reserved2_6     :1;
 
 320         unsigned        record32_5      :1;
 
 321         unsigned        record32        :1;
 
 322         unsigned        reserved2_23    :2;
 
 323         unsigned        play32_5        :1;
 
 325 #elif defined(__LITTLE_ENDIAN_BITFIELD)
 
 327         unsigned        play32_5        :1;
 
 328         unsigned        reserved2_23    :2;
 
 329         unsigned        record32        :1;
 
 330         unsigned        record32_5      :1;
 
 331         unsigned        reserved2_6     :1;
 
 334 #error "Please fix <asm/byteorder.h>"
 
 336 } osst_block_size_page_t;
 
 339  *      Tape Parameters Page
 
 342 #if   defined(__BIG_ENDIAN_BITFIELD)
 
 344         unsigned        reserved1_6     :1;
 
 345         unsigned        page_code       :6;     /* Page code - Should be 0x2b */
 
 346 #elif defined(__LITTLE_ENDIAN_BITFIELD)
 
 347         unsigned        page_code       :6;     /* Page code - Should be 0x2b */
 
 348         unsigned        reserved1_6     :1;
 
 351 #error "Please fix <asm/byteorder.h>"
 
 355         u8              reserved3,reserved4;
 
 358         u8              reserved5,reserved6,reserved7,reserved8,reserved9,reserved10;
 
 359 } osst_tape_paramtr_page_t;
 
 361 /* OnStream definitions */
 
 363 #define OS_CONFIG_PARTITION     (0xff)
 
 364 #define OS_DATA_PARTITION       (0)
 
 365 #define OS_PARTITION_VERSION    (1)
 
 370 typedef struct os_partition_s {
 
 373         __be16  wrt_pass_cntr;
 
 374         __be32  first_frame_ppos;
 
 375         __be32  last_frame_ppos;
 
 376         __be32  eod_frame_ppos;
 
 382 typedef struct os_dat_entry_s {
 
 392 #define OS_DAT_FLAGS_DATA       (0xc)
 
 393 #define OS_DAT_FLAGS_MARK       (0x1)
 
 395 typedef struct os_dat_s {
 
 400         os_dat_entry_t  dat_list[16];
 
 406 #define OS_FRAME_TYPE_FILL      (0)
 
 407 #define OS_FRAME_TYPE_EOD       (1 << 0)
 
 408 #define OS_FRAME_TYPE_MARKER    (1 << 1)
 
 409 #define OS_FRAME_TYPE_HEADER    (1 << 3)
 
 410 #define OS_FRAME_TYPE_DATA      (1 << 7)
 
 415 typedef struct os_aux_s {
 
 416         __be32          format_id;              /* hardware compability AUX is based on */
 
 417         char            application_sig[4];     /* driver used to write this media */
 
 418         __be32          hdwr;                   /* reserved */
 
 419         __be32          update_frame_cntr;      /* for configuration frame */
 
 421         __u8            frame_type_reserved;
 
 422         __u8            reserved_18_19[2];
 
 423         os_partition_t  partition;
 
 424         __u8            reserved_36_43[8];
 
 425         __be32          frame_seq_num;
 
 426         __be32          logical_blk_num_high;
 
 427         __be32          logical_blk_num;
 
 429         __u8            reserved188_191[4];
 
 432         __be32          last_mark_ppos;
 
 433         __u8            reserved204_223[20];
 
 436          * __u8         app_specific[32];
 
 438          * Linux specific fields:
 
 440          __be32         next_mark_ppos;         /* when known, points to next marker */
 
 441          __be32         last_mark_lbn;          /* storing log_blk_num of last mark is extends ADR spec */
 
 442          __u8           linux_specific[24];
 
 444         __u8            reserved_256_511[256];
 
 447 #define OS_FM_TAB_MAX 1024
 
 449 typedef struct os_fm_tab_s {
 
 454         __be16          fm_tab_ent_cnt;
 
 455         __u8            reserved6_15[10];
 
 456         __be32          fm_tab_ent[OS_FM_TAB_MAX];
 
 459 typedef struct os_ext_trk_ey_s {
 
 467         __u8            reserved20_31[12];
 
 470 typedef struct os_ext_trk_tb_s {
 
 474         __u8            reserved3_15[13];
 
 475         os_ext_trk_ey_t dat_ext_trk_ey;
 
 476         os_ext_trk_ey_t qfa_ext_trk_ey;
 
 479 typedef struct os_header_s {
 
 483         __be16          ext_trk_tb_off;
 
 484         __u8            reserved12_15[4];
 
 486         __u8            pt_reserved1_3[3];
 
 487         os_partition_t  partition[16];
 
 488         __be32          cfg_col_width;
 
 489         __be32          dat_col_width;
 
 490         __be32          qfa_col_width;
 
 492         __u8            reserved304_511[208];
 
 493         __be32          old_filemark_list[16680/4];             /* in ADR 1.4 __u8 track_table[16680] */
 
 494         os_ext_trk_tb_t ext_track_tb;
 
 495         __u8            reserved17272_17735[464];
 
 496         os_fm_tab_t     dat_fm_tab;
 
 497         os_fm_tab_t     qfa_fm_tab;
 
 498         __u8            reserved25960_32767[6808];
 
 503  * OnStream ADRL frame
 
 505 #define OS_FRAME_SIZE   (32 * 1024 + 512)
 
 506 #define OS_DATA_SIZE    (32 * 1024)
 
 507 #define OS_AUX_SIZE     (512)
 
 508 //#define OSST_MAX_SG      2
 
 510 /* The OnStream tape buffer descriptor. */
 
 512   unsigned char in_use;
 
 513   unsigned char dma;    /* DMA-able buffer */
 
 521   struct osst_request *last_SRpnt;
 
 522   struct st_cmdstatus cmdstat;
 
 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 s/g segments for this adapter */
 
 526   unsigned short sg_segs;      /* number of segments in s/g list                  */
 
 527   unsigned short orig_sg_segs; /* number of segments allocated at first try       */
 
 528   struct scatterlist sg[1];    /* MUST BE last item                               */
 
 531 /* The OnStream tape drive descriptor */
 
 533   struct scsi_driver *driver;
 
 535   struct scsi_device *device;
 
 536   struct mutex lock;           /* for serialization */
 
 537   struct completion wait;      /* for SCSI commands */
 
 538   struct osst_buffer * buffer;
 
 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   unsigned char pos_unknown;        /* after reset position unknown */
 
 552   int timeout;                  /* timeout for normal commands */
 
 553   int long_timeout;             /* timeout for commands known to take long time*/
 
 555   /* Mode characteristics */
 
 556   struct st_modedef modes[ST_NBR_MODES];
 
 559   /* Status variables */
 
 562   int nbr_partitions;    /* zero until partition support enabled */
 
 563   struct st_partstat ps[ST_NBR_PARTITIONS];
 
 566   unsigned char write_prot;
 
 567   unsigned char drv_write_prot;
 
 568   unsigned char in_use;
 
 569   unsigned char blksize_changed;
 
 570   unsigned char density_changed;
 
 571   unsigned char compression_changed;
 
 572   unsigned char drv_buffer;
 
 573   unsigned char density;
 
 574   unsigned char door_locked;
 
 575   unsigned char rew_at_close;
 
 576   unsigned char inited;
 
 580   int recover_count;            /* from tape opening */
 
 584   int recover_erreg;            /* from last status call */
 
 586    * OnStream specific data
 
 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  frame_in_buffer;              /* flag that the frame as per frame_seq_number
 
 592                                                 * has been read into STp->buffer and is valid */
 
 593   int      frame_seq_number;                   /* logical frame number */
 
 594   int      logical_blk_num;                    /* logical block number */
 
 595   unsigned first_frame_position;               /* physical frame to be transferred to/from host */
 
 596   unsigned last_frame_position;                /* physical frame to be transferd to/from tape */
 
 597   int      cur_frames;                         /* current number of frames in internal buffer */
 
 598   int      max_frames;                         /* max number of frames in internal buffer */
 
 599   char     application_sig[5];                 /* application signature */
 
 600   unsigned char  fast_open;                    /* flag that reminds us we didn't check headers at open */
 
 601   unsigned short wrt_pass_cntr;                /* write pass counter */
 
 602   int      update_frame_cntr;                  /* update frame counter */
 
 603   int      onstream_write_error;               /* write error recovery active */
 
 604   int      header_ok;                          /* header frame verified ok */
 
 605   int      linux_media;                        /* reading linux-specifc media */
 
 606   int      linux_media_version;
 
 607   os_header_t * header_cache;                  /* cache is kept for filemark positions */
 
 611   int      last_mark_lbn;                       /* storing log_blk_num of last mark is extends ADR spec */
 
 615   int      write_type;                          /* used in write error recovery */
 
 616   int      read_error_frame;                    /* used in read error recovery */
 
 617   unsigned long cmd_start_time;
 
 618   unsigned long max_cmd_time;
 
 621   unsigned char write_pending;
 
 624   unsigned char last_cmnd[6];
 
 625   unsigned char last_sense[16];
 
 627   struct gendisk *drive;
 
 630 /* scsi tape command */
 
 631 struct osst_request {
 
 632         unsigned char cmd[MAX_COMMAND_SIZE];
 
 633         unsigned char sense[SCSI_SENSE_BUFFERSIZE];
 
 635         struct osst_tape *stp;
 
 636         struct completion *waiting;
 
 639 /* Values of write_type */
 
 640 #define OS_WRITE_DATA      0
 
 641 #define OS_WRITE_EOD       1
 
 642 #define OS_WRITE_NEW_MARK  2
 
 643 #define OS_WRITE_LAST_MARK 3
 
 644 #define OS_WRITE_HEADER    4
 
 645 #define OS_WRITE_FILLER    5
 
 647 /* Additional rw state */
 
 648 #define OS_WRITING_COMPLETE 3