linux/drivers/scsi/st.h
<<
>>
Prefs
   1
   2#ifndef _ST_H
   3#define _ST_H
   4
   5#include <linux/completion.h>
   6
   7
   8/* The tape buffer descriptor. */
   9struct st_buffer {
  10        unsigned char in_use;
  11        unsigned char dma;      /* DMA-able buffer */
  12        unsigned char do_dio;   /* direct i/o set up? */
  13        int buffer_size;
  14        int buffer_blocks;
  15        int buffer_bytes;
  16        int read_pointer;
  17        int writing;
  18        int midlevel_result;
  19        int syscall_result;
  20        struct scsi_request *last_SRpnt;
  21        unsigned char *b_data;
  22        unsigned short use_sg;  /* zero or max number of s/g segments for this adapter */
  23        unsigned short sg_segs;         /* number of segments in s/g list */
  24        unsigned short orig_frp_segs;   /* number of segments allocated at first try */
  25        unsigned short frp_segs;        /* number of buffer segments */
  26        unsigned int frp_sg_current;    /* driver buffer length currently in s/g list */
  27        struct st_buf_fragment *frp;    /* the allocated buffer fragment list */
  28        struct scatterlist sg[1];       /* MUST BE last item */
  29};
  30
  31/* The tape buffer fragment descriptor */
  32struct st_buf_fragment {
  33        struct page *page;
  34        unsigned int length;
  35};
  36
  37/* The tape mode definition */
  38struct st_modedef {
  39        unsigned char defined;
  40        unsigned char sysv;     /* SYS V semantics? */
  41        unsigned char do_async_writes;
  42        unsigned char do_buffer_writes;
  43        unsigned char do_read_ahead;
  44        unsigned char defaults_for_writes;
  45        unsigned char default_compression;      /* 0 = don't touch, etc */
  46        short default_density;  /* Forced density, -1 = no value */
  47        int default_blksize;    /* Forced blocksize, -1 = no value */
  48        struct cdev *cdevs[2];  /* Auto-rewind and non-rewind devices */
  49};
  50
  51/* Number of modes can be changed by changing ST_NBR_MODE_BITS. The maximum
  52   number of modes is 16 (ST_NBR_MODE_BITS 4) */
  53#define ST_NBR_MODE_BITS 2
  54#define ST_NBR_MODES (1 << ST_NBR_MODE_BITS)
  55#define ST_MODE_SHIFT (7 - ST_NBR_MODE_BITS)
  56#define ST_MODE_MASK ((ST_NBR_MODES - 1) << ST_MODE_SHIFT)
  57
  58#define ST_MAX_TAPES 128
  59#define ST_MAX_TAPE_ENTRIES  (ST_MAX_TAPES << (ST_NBR_MODE_BITS + 1))
  60
  61/* The status related to each partition */
  62struct st_partstat {
  63        unsigned char rw;
  64        unsigned char eof;
  65        unsigned char at_sm;
  66        unsigned char last_block_valid;
  67        u32 last_block_visited;
  68        int drv_block;          /* The block where the drive head is */
  69        int drv_file;
  70};
  71
  72#define ST_NBR_PARTITIONS 4
  73
  74/* The tape drive descriptor */
  75struct scsi_tape {
  76        struct scsi_driver *driver;
  77        struct scsi_device *device;
  78        struct semaphore lock;  /* For serialization */
  79        struct completion wait; /* For SCSI commands */
  80        struct st_buffer *buffer;
  81
  82        /* Drive characteristics */
  83        unsigned char omit_blklims;
  84        unsigned char do_auto_lock;
  85        unsigned char can_bsr;
  86        unsigned char can_partitions;
  87        unsigned char two_fm;
  88        unsigned char fast_mteom;
  89        unsigned char immediate;
  90        unsigned char restr_dma;
  91        unsigned char scsi2_logical;
  92        unsigned char default_drvbuffer;        /* 0xff = don't touch, value 3 bits */
  93        unsigned char cln_mode;                 /* 0 = none, otherwise sense byte nbr */
  94        unsigned char cln_sense_value;
  95        unsigned char cln_sense_mask;
  96        unsigned char use_pf;                   /* Set Page Format bit in all mode selects? */
  97        unsigned char try_dio;                  /* try direct i/o? */
  98        unsigned char c_algo;                   /* compression algorithm */
  99        unsigned char pos_unknown;                      /* after reset position unknown */
 100        int tape_type;
 101        int long_timeout;       /* timeout for commands known to take long time */
 102
 103        unsigned long max_pfn;  /* the maximum page number reachable by the HBA */
 104
 105        /* Mode characteristics */
 106        struct st_modedef modes[ST_NBR_MODES];
 107        int current_mode;
 108
 109        /* Status variables */
 110        int partition;
 111        int new_partition;
 112        int nbr_partitions;     /* zero until partition support enabled */
 113        struct st_partstat ps[ST_NBR_PARTITIONS];
 114        unsigned char dirty;
 115        unsigned char ready;
 116        unsigned char write_prot;
 117        unsigned char drv_write_prot;
 118        unsigned char in_use;
 119        unsigned char blksize_changed;
 120        unsigned char density_changed;
 121        unsigned char compression_changed;
 122        unsigned char drv_buffer;
 123        unsigned char density;
 124        unsigned char door_locked;
 125        unsigned char autorew_dev;   /* auto-rewind device */
 126        unsigned char rew_at_close;  /* rewind necessary at close */
 127        unsigned char inited;
 128        unsigned char cleaning_req;  /* cleaning requested? */
 129        int block_size;
 130        int min_block;
 131        int max_block;
 132        int recover_count;     /* From tape opening */
 133        int recover_reg;       /* From last status call */
 134
 135#if DEBUG
 136        unsigned char write_pending;
 137        int nbr_finished;
 138        int nbr_waits;
 139        int nbr_requests;
 140        int nbr_dio;
 141        int nbr_pages;
 142        int nbr_combinable;
 143        unsigned char last_cmnd[6];
 144        unsigned char last_sense[16];
 145#endif
 146        struct gendisk *disk;
 147};
 148
 149/* Bit masks for use_pf */
 150#define USE_PF      1
 151#define PF_TESTED   2
 152
 153/* Values of eof */
 154#define ST_NOEOF        0
 155#define ST_FM_HIT       1
 156#define ST_FM           2
 157#define ST_EOM_OK       3
 158#define ST_EOM_ERROR    4
 159#define ST_EOD_1        5
 160#define ST_EOD_2        6
 161#define ST_EOD          7
 162/* EOD hit while reading => ST_EOD_1 => return zero => ST_EOD_2 =>
 163   return zero => ST_EOD, return ENOSPC */
 164/* When writing: ST_EOM_OK == early warning found, write OK
 165                 ST_EOD_1  == allow trying new write after early warning
 166                 ST_EOM_ERROR == early warning found, not able to write all */
 167
 168/* Values of rw */
 169#define ST_IDLE         0
 170#define ST_READING      1
 171#define ST_WRITING      2
 172
 173/* Values of ready state */
 174#define ST_READY        0
 175#define ST_NOT_READY    1
 176#define ST_NO_TAPE      2
 177
 178/* Values for door lock state */
 179#define ST_UNLOCKED     0
 180#define ST_LOCKED_EXPLICIT 1
 181#define ST_LOCKED_AUTO  2
 182#define ST_LOCK_FAILS   3
 183
 184/* Positioning SCSI-commands for Tandberg, etc. drives */
 185#define QFA_REQUEST_BLOCK       0x02
 186#define QFA_SEEK_BLOCK          0x0c
 187
 188/* Setting the binary options */
 189#define ST_DONT_TOUCH  0
 190#define ST_NO          1
 191#define ST_YES         2
 192
 193#define EXTENDED_SENSE_START  18
 194
 195#endif
 196
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.