^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) #ifndef _ST_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) #define _ST_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) #include <linux/completion.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) #include <linux/mutex.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #include <linux/kref.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) #include <scsi/scsi_cmnd.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) /* Descriptor for analyzed sense data */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) struct st_cmdstatus {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) int midlevel_result;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) struct scsi_sense_hdr sense_hdr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) int have_sense;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) int residual;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) u64 uremainder64;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) u8 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) u8 remainder_valid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) u8 fixed_format;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) u8 deferred;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) struct scsi_tape;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) /* scsi tape command */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) struct st_request {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) unsigned char cmd[MAX_COMMAND_SIZE];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) unsigned char sense[SCSI_SENSE_BUFFERSIZE];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) int result;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) struct scsi_tape *stp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) struct completion *waiting;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) struct bio *bio;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) /* The tape buffer descriptor. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) struct st_buffer {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) unsigned char dma; /* DMA-able buffer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) unsigned char cleared; /* internal buffer cleared after open? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) unsigned short do_dio; /* direct i/o set up? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) int buffer_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) int buffer_blocks;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) int buffer_bytes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) int read_pointer;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) int writing;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) int syscall_result;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) struct st_request *last_SRpnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) struct st_cmdstatus cmdstat;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) struct page **reserved_pages;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) int reserved_page_order;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) struct page **mapped_pages;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) struct rq_map_data map_data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) unsigned char *b_data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) unsigned short use_sg; /* zero or max number of s/g segments for this adapter */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) unsigned short sg_segs; /* number of segments in s/g list */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) unsigned short frp_segs; /* number of buffer segments */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) /* The tape mode definition */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) struct st_modedef {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) unsigned char defined;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) unsigned char sysv; /* SYS V semantics? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) unsigned char do_async_writes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) unsigned char do_buffer_writes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) unsigned char do_read_ahead;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) unsigned char defaults_for_writes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) unsigned char default_compression; /* 0 = don't touch, etc */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) short default_density; /* Forced density, -1 = no value */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) int default_blksize; /* Forced blocksize, -1 = no value */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) struct scsi_tape *tape;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) struct device *devs[2]; /* Auto-rewind and non-rewind devices */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) struct cdev *cdevs[2]; /* Auto-rewind and non-rewind devices */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) /* Number of modes can be changed by changing ST_NBR_MODE_BITS. The maximum
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) number of modes is 16 (ST_NBR_MODE_BITS 4) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) #define ST_NBR_MODE_BITS 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) #define ST_NBR_MODES (1 << ST_NBR_MODE_BITS)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) #define ST_MODE_SHIFT (7 - ST_NBR_MODE_BITS)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) #define ST_MODE_MASK ((ST_NBR_MODES - 1) << ST_MODE_SHIFT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) #define ST_MAX_TAPES (1 << (20 - (ST_NBR_MODE_BITS + 1)))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) #define ST_MAX_TAPE_ENTRIES (ST_MAX_TAPES << (ST_NBR_MODE_BITS + 1))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) /* The status related to each partition */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) struct st_partstat {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) unsigned char rw;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) unsigned char eof;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) unsigned char at_sm;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) unsigned char last_block_valid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) u32 last_block_visited;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) int drv_block; /* The block where the drive head is */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) int drv_file;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) /* Tape statistics */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) struct scsi_tape_stats {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) atomic64_t read_byte_cnt; /* bytes read */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) atomic64_t write_byte_cnt; /* bytes written */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) atomic64_t in_flight; /* Number of I/Os in flight */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) atomic64_t read_cnt; /* Count of read requests */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) atomic64_t write_cnt; /* Count of write requests */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) atomic64_t other_cnt; /* Count of other requests either
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) * implicit or from user space
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) * ioctl. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) atomic64_t resid_cnt; /* Count of resid_len > 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) atomic64_t tot_read_time; /* ktime spent completing reads */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) atomic64_t tot_write_time; /* ktime spent completing writes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) atomic64_t tot_io_time; /* ktime spent doing any I/O */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) ktime_t read_time; /* holds ktime request was queued */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) ktime_t write_time; /* holds ktime request was queued */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) ktime_t other_time; /* holds ktime request was queued */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) atomic_t last_read_size; /* Number of bytes issued for last read */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) atomic_t last_write_size; /* Number of bytes issued for last write */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) #define ST_NBR_PARTITIONS 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) /* The tape drive descriptor */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) struct scsi_tape {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) struct scsi_driver *driver;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) struct scsi_device *device;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) struct mutex lock; /* For serialization */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) struct completion wait; /* For SCSI commands */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) struct st_buffer *buffer;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) int index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) /* Drive characteristics */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) unsigned char omit_blklims;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) unsigned char do_auto_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) unsigned char can_bsr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) unsigned char can_partitions;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) unsigned char two_fm;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) unsigned char fast_mteom;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) unsigned char immediate;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) unsigned char restr_dma;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) unsigned char scsi2_logical;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) unsigned char default_drvbuffer; /* 0xff = don't touch, value 3 bits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) unsigned char cln_mode; /* 0 = none, otherwise sense byte nbr */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) unsigned char cln_sense_value;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) unsigned char cln_sense_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) unsigned char use_pf; /* Set Page Format bit in all mode selects? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) unsigned char try_dio; /* try direct i/o in general? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) unsigned char try_dio_now; /* try direct i/o before next close? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) unsigned char c_algo; /* compression algorithm */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) unsigned char pos_unknown; /* after reset position unknown */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) unsigned char sili; /* use SILI when reading in variable b mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) unsigned char immediate_filemark; /* write filemark immediately */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) int tape_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) int long_timeout; /* timeout for commands known to take long time */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) /* Mode characteristics */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) struct st_modedef modes[ST_NBR_MODES];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) int current_mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) /* Status variables */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) int partition;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) int new_partition;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) int nbr_partitions; /* zero until partition support enabled */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) struct st_partstat ps[ST_NBR_PARTITIONS];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) unsigned char dirty;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) unsigned char ready;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) unsigned char write_prot;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) unsigned char drv_write_prot;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) unsigned char in_use;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) unsigned char blksize_changed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) unsigned char density_changed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) unsigned char compression_changed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) unsigned char drv_buffer;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) unsigned char density;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) unsigned char door_locked;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) unsigned char autorew_dev; /* auto-rewind device */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) unsigned char rew_at_close; /* rewind necessary at close */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) unsigned char inited;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) unsigned char cleaning_req; /* cleaning requested? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) int block_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) int min_block;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) int max_block;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) int recover_count; /* From tape opening */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) int recover_reg; /* From last status call */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) #if DEBUG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) unsigned char write_pending;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) int nbr_finished;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) int nbr_waits;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) int nbr_requests;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) int nbr_dio;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) int nbr_pages;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) unsigned char last_cmnd[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) unsigned char last_sense[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) struct gendisk *disk;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) struct kref kref;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) struct scsi_tape_stats *stats;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) /* Bit masks for use_pf */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) #define USE_PF 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) #define PF_TESTED 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) /* Values of eof */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) #define ST_NOEOF 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) #define ST_FM_HIT 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) #define ST_FM 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) #define ST_EOM_OK 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) #define ST_EOM_ERROR 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) #define ST_EOD_1 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) #define ST_EOD_2 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) #define ST_EOD 7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) /* EOD hit while reading => ST_EOD_1 => return zero => ST_EOD_2 =>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) return zero => ST_EOD, return ENOSPC */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) /* When writing: ST_EOM_OK == early warning found, write OK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) ST_EOD_1 == allow trying new write after early warning
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) ST_EOM_ERROR == early warning found, not able to write all */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) /* Values of rw */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) #define ST_IDLE 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) #define ST_READING 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) #define ST_WRITING 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) /* Values of ready state */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) #define ST_READY 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) #define ST_NOT_READY 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) #define ST_NO_TAPE 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) /* Values for door lock state */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) #define ST_UNLOCKED 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) #define ST_LOCKED_EXPLICIT 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) #define ST_LOCKED_AUTO 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) #define ST_LOCK_FAILS 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) /* Positioning SCSI-commands for Tandberg, etc. drives */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) #define QFA_REQUEST_BLOCK 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) #define QFA_SEEK_BLOCK 0x0c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) /* Setting the binary options */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) #define ST_DONT_TOUCH 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) #define ST_NO 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) #define ST_YES 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) #define EXTENDED_SENSE_START 18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) /* Masks for some conditions in the sense data */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) #define SENSE_FMK 0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) #define SENSE_EOM 0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) #define SENSE_ILI 0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) #endif