Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v2.6.14-rc3 213 lines 6.0 kB view raw
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 */ 9struct 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. */ 21struct 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 */ 44struct st_buf_fragment { 45 struct page *page; 46 unsigned int length; 47}; 48 49/* The tape mode definition */ 50struct 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 */ 74struct 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 */ 87struct 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