
#ifndef _ST_H
#define _ST_H

#include <linux/completion.h>


/* Descriptor for analyzed sense data */
struct st_cmdstatus {
	int midlevel_result;
	struct scsi_sense_hdr sense_hdr;
	int have_sense;
	u64 uremainder64;
	u8 flags;
	u8 remainder_valid;
	u8 fixed_format;
	u8 deferred;
};

/* The tape buffer descriptor. */
struct st_buffer {
	unsigned char in_use;
	unsigned char dma;	/* DMA-able buffer */
	unsigned char do_dio;   /* direct i/o set up? */
	int buffer_size;
	int buffer_blocks;
	int buffer_bytes;
	int read_pointer;
	int writing;
	int syscall_result;
	struct scsi_request *last_SRpnt;
	struct st_cmdstatus cmdstat;
	unsigned char *b_data;
	unsigned short use_sg;	/* zero or max number of s/g segments for this adapter */
	unsigned short sg_segs;		/* number of segments in s/g list */
	unsigned short orig_frp_segs;	/* number of segments allocated at first try */
	unsigned short frp_segs;	/* number of buffer segments */
	unsigned int frp_sg_current;	/* driver buffer length currently in s/g list */
	struct st_buf_fragment *frp;	/* the allocated buffer fragment list */
	struct scatterlist sg[1];	/* MUST BE last item */
};

/* The tape buffer fragment descriptor */
struct st_buf_fragment {
	struct page *page;
	unsigned int length;
};

/* The tape mode definition */
struct st_modedef {
	unsigned char defined;
	unsigned char sysv;	/* SYS V semantics? */
	unsigned char do_async_writes;
	unsigned char do_buffer_writes;
	unsigned char do_read_ahead;
	unsigned char defaults_for_writes;
	unsigned char default_compression;	/* 0 = don't touch, etc */
	short default_density;	/* Forced density, -1 = no value */
	int default_blksize;	/* Forced blocksize, -1 = no value */
	struct cdev *cdevs[2];  /* Auto-rewind and non-rewind devices */
};

/* Number of modes can be changed by changing ST_NBR_MODE_BITS. The maximum
   number of modes is 16 (ST_NBR_MODE_BITS 4) */
#define ST_NBR_MODE_BITS 2
#define ST_NBR_MODES (1 << ST_NBR_MODE_BITS)
#define ST_MODE_SHIFT (7 - ST_NBR_MODE_BITS)
#define ST_MODE_MASK ((ST_NBR_MODES - 1) << ST_MODE_SHIFT)

#define ST_MAX_TAPES 128
#define ST_MAX_TAPE_ENTRIES  (ST_MAX_TAPES << (ST_NBR_MODE_BITS + 1))

/* The status related to each partition */
struct st_partstat {
	unsigned char rw;
	unsigned char eof;
	unsigned char at_sm;
	unsigned char last_block_valid;
	u32 last_block_visited;
	int drv_block;		/* The block where the drive head is */
	int drv_file;
};

#define ST_NBR_PARTITIONS 4

/* The tape drive descriptor */
struct scsi_tape {
	struct scsi_driver *driver;
	struct scsi_device *device;
	struct semaphore lock;	/* For serialization */
	struct completion wait;	/* For SCSI commands */
	struct st_buffer *buffer;

	/* Drive characteristics */
	unsigned char omit_blklims;
	unsigned char do_auto_lock;
	unsigned char can_bsr;
	unsigned char can_partitions;
	unsigned char two_fm;
	unsigned char fast_mteom;
	unsigned char immediate;
	unsigned char restr_dma;
	unsigned char scsi2_logical;
	unsigned char default_drvbuffer;	/* 0xff = don't touch, value 3 bits */
	unsigned char cln_mode;			/* 0 = none, otherwise sense byte nbr */
	unsigned char cln_sense_value;
	unsigned char cln_sense_mask;
	unsigned char use_pf;			/* Set Page Format bit in all mode selects? */
	unsigned char try_dio;			/* try direct i/o? */
	unsigned char c_algo;			/* compression algorithm */
	unsigned char pos_unknown;			/* after reset position unknown */
	int tape_type;
	int long_timeout;	/* timeout for commands known to take long time */

	unsigned long max_pfn;	/* the maximum page number reachable by the HBA */

	/* Mode characteristics */
	struct st_modedef modes[ST_NBR_MODES];
	int current_mode;

	/* Status variables */
	int partition;
	int new_partition;
	int nbr_partitions;	/* zero until partition support enabled */
	struct st_partstat ps[ST_NBR_PARTITIONS];
	unsigned char dirty;
	unsigned char ready;
	unsigned char write_prot;
	unsigned char drv_write_prot;
	unsigned char in_use;
	unsigned char blksize_changed;
	unsigned char density_changed;
	unsigned char compression_changed;
	unsigned char drv_buffer;
	unsigned char density;
	unsigned char door_locked;
	unsigned char autorew_dev;   /* auto-rewind device */
	unsigned char rew_at_close;  /* rewind necessary at close */
	unsigned char inited;
	unsigned char cleaning_req;  /* cleaning requested? */
	int block_size;
	int min_block;
	int max_block;
	int recover_count;     /* From tape opening */
	int recover_reg;       /* From last status call */

#if DEBUG
	unsigned char write_pending;
	int nbr_finished;
	int nbr_waits;
	int nbr_requests;
	int nbr_dio;
	int nbr_pages;
	int nbr_combinable;
	unsigned char last_cmnd[6];
	unsigned char last_sense[16];
#endif
	struct gendisk *disk;
};

/* Bit masks for use_pf */
#define USE_PF      1
#define PF_TESTED   2

/* Values of eof */
#define	ST_NOEOF	0
#define ST_FM_HIT       1
#define ST_FM           2
#define ST_EOM_OK       3
#define ST_EOM_ERROR	4
#define	ST_EOD_1        5
#define ST_EOD_2        6
#define ST_EOD		7
/* EOD hit while reading => ST_EOD_1 => return zero => ST_EOD_2 =>
   return zero => ST_EOD, return ENOSPC */
/* When writing: ST_EOM_OK == early warning found, write OK
		 ST_EOD_1  == allow trying new write after early warning
		 ST_EOM_ERROR == early warning found, not able to write all */

/* Values of rw */
#define	ST_IDLE		0
#define	ST_READING	1
#define	ST_WRITING	2

/* Values of ready state */
#define ST_READY	0
#define ST_NOT_READY	1
#define ST_NO_TAPE	2

/* Values for door lock state */
#define ST_UNLOCKED	0
#define ST_LOCKED_EXPLICIT 1
#define ST_LOCKED_AUTO  2
#define ST_LOCK_FAILS   3

/* Positioning SCSI-commands for Tandberg, etc. drives */
#define	QFA_REQUEST_BLOCK	0x02
#define	QFA_SEEK_BLOCK		0x0c

/* Setting the binary options */
#define ST_DONT_TOUCH  0
#define ST_NO          1
#define ST_YES         2

#define EXTENDED_SENSE_START  18

/* Masks for some conditions in the sense data */
#define SENSE_FMK   0x80
#define SENSE_EOM   0x40
#define SENSE_ILI   0x20

#endif
