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