11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef _ST_H 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _ST_H 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/completion.h> 628f85009e0cf6a5232cd285131eac3dfe26d9e3aMatthias Kaehlcke#include <linux/mutex.h> 7f03a567054fea4f9d43c50ec91338266c0bd588dKai Makisara#include <linux/kref.h> 88b05b773b6030de5b1bab1cbb0bf1ff8c34cdbe0Mike Christie#include <scsi/scsi_cmnd.h> 91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Descriptor for analyzed sense data */ 111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct st_cmdstatus { 121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int midlevel_result; 131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct scsi_sense_hdr sense_hdr; 141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int have_sense; 1540f6b36c6243462fb95d0343237331c423494b03Kai Makisara int residual; 161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u64 uremainder64; 171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 flags; 181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 remainder_valid; 191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 fixed_format; 201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 deferred; 211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 238b05b773b6030de5b1bab1cbb0bf1ff8c34cdbe0Mike Christiestruct scsi_tape; 248b05b773b6030de5b1bab1cbb0bf1ff8c34cdbe0Mike Christie 258b05b773b6030de5b1bab1cbb0bf1ff8c34cdbe0Mike Christie/* scsi tape command */ 268b05b773b6030de5b1bab1cbb0bf1ff8c34cdbe0Mike Christiestruct st_request { 278b05b773b6030de5b1bab1cbb0bf1ff8c34cdbe0Mike Christie unsigned char cmd[MAX_COMMAND_SIZE]; 288b05b773b6030de5b1bab1cbb0bf1ff8c34cdbe0Mike Christie unsigned char sense[SCSI_SENSE_BUFFERSIZE]; 298b05b773b6030de5b1bab1cbb0bf1ff8c34cdbe0Mike Christie int result; 308b05b773b6030de5b1bab1cbb0bf1ff8c34cdbe0Mike Christie struct scsi_tape *stp; 318b05b773b6030de5b1bab1cbb0bf1ff8c34cdbe0Mike Christie struct completion *waiting; 3213b53b443482623d33fd9446289d320e1c719f02FUJITA Tomonori struct bio *bio; 338b05b773b6030de5b1bab1cbb0bf1ff8c34cdbe0Mike Christie}; 348b05b773b6030de5b1bab1cbb0bf1ff8c34cdbe0Mike Christie 351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* The tape buffer descriptor. */ 361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct st_buffer { 371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char dma; /* DMA-able buffer */ 381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char do_dio; /* direct i/o set up? */ 3940f6b36c6243462fb95d0343237331c423494b03Kai Makisara unsigned char cleared; /* internal buffer cleared after open? */ 401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int buffer_size; 411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int buffer_blocks; 421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int buffer_bytes; 431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int read_pointer; 441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int writing; 451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int syscall_result; 468b05b773b6030de5b1bab1cbb0bf1ff8c34cdbe0Mike Christie struct st_request *last_SRpnt; 471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct st_cmdstatus cmdstat; 48d0e1ae31be226e83cdd0684625bf1535518ee0d3FUJITA Tomonori struct page **reserved_pages; 49c982c368bb90adbd312faa05d0cfd842e9ab45a7FUJITA Tomonori int reserved_page_order; 506620742f72d2fcf311e3fc8aa2476daa91fa3f31FUJITA Tomonori struct page **mapped_pages; 51d0e1ae31be226e83cdd0684625bf1535518ee0d3FUJITA Tomonori struct rq_map_data map_data; 521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char *b_data; 531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned short use_sg; /* zero or max number of s/g segments for this adapter */ 541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned short sg_segs; /* number of segments in s/g list */ 551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned short frp_segs; /* number of buffer segments */ 561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* The tape mode definition */ 591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct st_modedef { 601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char defined; 611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char sysv; /* SYS V semantics? */ 621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char do_async_writes; 631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char do_buffer_writes; 641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char do_read_ahead; 651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char defaults_for_writes; 661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char default_compression; /* 0 = don't touch, etc */ 671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds short default_density; /* Forced density, -1 = no value */ 681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int default_blksize; /* Forced blocksize, -1 = no value */ 691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct cdev *cdevs[2]; /* Auto-rewind and non-rewind devices */ 701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Number of modes can be changed by changing ST_NBR_MODE_BITS. The maximum 731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds number of modes is 16 (ST_NBR_MODE_BITS 4) */ 741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ST_NBR_MODE_BITS 2 751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ST_NBR_MODES (1 << ST_NBR_MODE_BITS) 761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ST_MODE_SHIFT (7 - ST_NBR_MODE_BITS) 771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ST_MODE_MASK ((ST_NBR_MODES - 1) << ST_MODE_SHIFT) 781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ST_MAX_TAPES 128 801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ST_MAX_TAPE_ENTRIES (ST_MAX_TAPES << (ST_NBR_MODE_BITS + 1)) 811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* The status related to each partition */ 831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct st_partstat { 841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char rw; 851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char eof; 861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char at_sm; 871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char last_block_valid; 881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 last_block_visited; 891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int drv_block; /* The block where the drive head is */ 901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int drv_file; 911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ST_NBR_PARTITIONS 4 941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* The tape drive descriptor */ 961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct scsi_tape { 971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct scsi_driver *driver; 981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct scsi_device *device; 9928f85009e0cf6a5232cd285131eac3dfe26d9e3aMatthias Kaehlcke struct mutex lock; /* For serialization */ 1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct completion wait; /* For SCSI commands */ 1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct st_buffer *buffer; 1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Drive characteristics */ 1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char omit_blklims; 1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char do_auto_lock; 1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char can_bsr; 1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char can_partitions; 1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char two_fm; 1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char fast_mteom; 1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char immediate; 1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char restr_dma; 1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char scsi2_logical; 1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char default_drvbuffer; /* 0xff = don't touch, value 3 bits */ 1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char cln_mode; /* 0 = none, otherwise sense byte nbr */ 1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char cln_sense_value; 1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char cln_sense_mask; 1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char use_pf; /* Set Page Format bit in all mode selects? */ 1189abe16c670bd3d4ab5519257514f9f291383d104Kai Makisara unsigned char try_dio; /* try direct i/o in general? */ 1199abe16c670bd3d4ab5519257514f9f291383d104Kai Makisara unsigned char try_dio_now; /* try direct i/o before next close? */ 1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char c_algo; /* compression algorithm */ 1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char pos_unknown; /* after reset position unknown */ 12240f6b36c6243462fb95d0343237331c423494b03Kai Makisara unsigned char sili; /* use SILI when reading in variable b mode */ 123c743e44fbb1f8668941e83de07662b1ecd33d083Lee Duncan unsigned char immediate_filemark; /* write filemark immediately */ 1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int tape_type; 1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int long_timeout; /* timeout for commands known to take long time */ 1261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned long max_pfn; /* the maximum page number reachable by the HBA */ 1281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Mode characteristics */ 1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct st_modedef modes[ST_NBR_MODES]; 1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int current_mode; 1321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Status variables */ 1341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int partition; 1351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int new_partition; 1361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int nbr_partitions; /* zero until partition support enabled */ 1371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct st_partstat ps[ST_NBR_PARTITIONS]; 1381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char dirty; 1391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char ready; 1401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char write_prot; 1411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char drv_write_prot; 1421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char in_use; 1431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char blksize_changed; 1441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char density_changed; 1451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char compression_changed; 1461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char drv_buffer; 1471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char density; 1481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char door_locked; 1491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char autorew_dev; /* auto-rewind device */ 1501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char rew_at_close; /* rewind necessary at close */ 1511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char inited; 1521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char cleaning_req; /* cleaning requested? */ 1531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int block_size; 1541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int min_block; 1551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int max_block; 1561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int recover_count; /* From tape opening */ 1571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int recover_reg; /* From last status call */ 1581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#if DEBUG 1601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char write_pending; 1611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int nbr_finished; 1621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int nbr_waits; 1631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int nbr_requests; 1641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int nbr_dio; 1651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int nbr_pages; 1661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char last_cmnd[6]; 1671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char last_sense[16]; 1681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 1691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct gendisk *disk; 170f03a567054fea4f9d43c50ec91338266c0bd588dKai Makisara struct kref kref; 1711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 1721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Bit masks for use_pf */ 1741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define USE_PF 1 1751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PF_TESTED 2 1761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Values of eof */ 1781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ST_NOEOF 0 1791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ST_FM_HIT 1 1801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ST_FM 2 1811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ST_EOM_OK 3 1821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ST_EOM_ERROR 4 1831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ST_EOD_1 5 1841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ST_EOD_2 6 1851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ST_EOD 7 1861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* EOD hit while reading => ST_EOD_1 => return zero => ST_EOD_2 => 1871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return zero => ST_EOD, return ENOSPC */ 1881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* When writing: ST_EOM_OK == early warning found, write OK 1891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ST_EOD_1 == allow trying new write after early warning 1901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ST_EOM_ERROR == early warning found, not able to write all */ 1911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Values of rw */ 1931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ST_IDLE 0 1941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ST_READING 1 1951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ST_WRITING 2 1961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Values of ready state */ 1981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ST_READY 0 1991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ST_NOT_READY 1 2001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ST_NO_TAPE 2 2011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Values for door lock state */ 2031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ST_UNLOCKED 0 2041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ST_LOCKED_EXPLICIT 1 2051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ST_LOCKED_AUTO 2 2061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ST_LOCK_FAILS 3 2071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Positioning SCSI-commands for Tandberg, etc. drives */ 2091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QFA_REQUEST_BLOCK 0x02 2101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QFA_SEEK_BLOCK 0x0c 2111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Setting the binary options */ 2131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ST_DONT_TOUCH 0 2141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ST_NO 1 2151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ST_YES 2 2161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EXTENDED_SENSE_START 18 2181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Masks for some conditions in the sense data */ 2201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SENSE_FMK 0x80 2211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SENSE_EOM 0x40 2221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SENSE_ILI 0x20 2231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 225