cregit-Linux how code gets into the kernel

Release 4.14 drivers/scsi/osst.h

Directory: drivers/scsi
/* SPDX-License-Identifier: GPL-2.0 */
/*
 *      $Header: /cvsroot/osst/Driver/osst.h,v 1.16 2005/01/01 21:13:35 wriede Exp $
 */

#include <asm/byteorder.h>
#include <linux/completion.h>
#include <linux/mutex.h>

/*      FIXME - rename and use the following two types or delete them!
 *              and the types really should go to st.h anyway...
 *      INQUIRY packet command - Data Format (From Table 6-8 of QIC-157C)
 */
typedef struct {
	
unsigned	device_type	:5;	/* Peripheral Device Type */
	
unsigned	reserved0_765	:3;	/* Peripheral Qualifier - Reserved */
	
unsigned	reserved1_6t0	:7;	/* Reserved */
	
unsigned	rmb		:1;	/* Removable Medium Bit */
	
unsigned	ansi_version	:3;	/* ANSI Version */
	
unsigned	ecma_version	:3;	/* ECMA Version */
	
unsigned	iso_version	:2;	/* ISO Version */
	
unsigned	response_format :4;	/* Response Data Format */
	
unsigned	reserved3_45	:2;	/* Reserved */
	
unsigned	reserved3_6	:1;	/* TrmIOP - Reserved */
	
unsigned	reserved3_7	:1;	/* AENC - Reserved */
	
u8		additional_length;	/* Additional Length (total_length-4) */
	


u8		rsv5, rsv6, rsv7;	/* Reserved */
	
u8		vendor_id[8];		/* Vendor Identification */
	
u8		product_id[16];		/* Product Identification */
	
u8		revision_level[4];	/* Revision Level */
	
u8		vendor_specific[20];	/* Vendor Specific - Optional */
	
u8		reserved56t95[40];	/* Reserved - Optional */
						/* Additional information may be returned */

} idetape_inquiry_result_t;

/*
 *      READ POSITION packet command - Data Format (From Table 6-57)
 */
typedef struct {
	
unsigned	reserved0_10	:2;	/* Reserved */
	
unsigned	bpu		:1;	/* Block Position Unknown */	
	
unsigned	reserved0_543	:3;	/* Reserved */
	
unsigned	eop		:1;	/* End Of Partition */
	
unsigned	bop		:1;	/* Beginning Of Partition */
	
u8		partition;		/* Partition Number */
	

u8		reserved2, reserved3;	/* Reserved */
	
u32		first_block;		/* First Block Location */
	
u32		last_block;		/* Last Block Location (Optional) */
	
u8		reserved12;		/* Reserved */
	
u8		blocks_in_buffer[3];	/* Blocks In Buffer - (Optional) */
	
u32		bytes_in_buffer;	/* Bytes In Buffer (Optional) */

} idetape_read_position_result_t;

/*
 *      Follows structures which are related to the SELECT SENSE / MODE SENSE
 *      packet commands. 
 */

#define COMPRESSION_PAGE           0x0f

#define COMPRESSION_PAGE_LENGTH    16


#define CAPABILITIES_PAGE          0x2a

#define CAPABILITIES_PAGE_LENGTH   20


#define TAPE_PARAMTR_PAGE          0x2b

#define TAPE_PARAMTR_PAGE_LENGTH   16


#define NUMBER_RETRIES_PAGE        0x2f

#define NUMBER_RETRIES_PAGE_LENGTH 4


#define BLOCK_SIZE_PAGE            0x30

#define BLOCK_SIZE_PAGE_LENGTH     4


#define BUFFER_FILLING_PAGE        0x33

#define BUFFER_FILLING_PAGE_LENGTH 4


#define VENDOR_IDENT_PAGE          0x36

#define VENDOR_IDENT_PAGE_LENGTH   8


#define LOCATE_STATUS_PAGE         0x37

#define LOCATE_STATUS_PAGE_LENGTH  0


#define MODE_HEADER_LENGTH         4


/*
 *      REQUEST SENSE packet command result - Data Format.
 */
typedef struct {
	
unsigned	error_code	:7;	/* Current of deferred errors */
	
unsigned	valid		:1;	/* The information field conforms to QIC-157C */
	
u8		reserved1	:8;	/* Segment Number - Reserved */
	
unsigned	sense_key	:4;	/* Sense Key */
	
unsigned	reserved2_4	:1;	/* Reserved */
	
unsigned	ili		:1;	/* Incorrect Length Indicator */
	
unsigned	eom		:1;	/* End Of Medium */
	
unsigned	filemark 	:1;	/* Filemark */
	
u32		information __attribute__ ((packed));
	
u8		asl;			
/* Additional sense length (n-7) */
	
u32		command_specific;	
/* Additional command specific information */
	
u8		asc;			
/* Additional Sense Code */
	
u8		ascq;			
/* Additional Sense Code Qualifier */
	
u8		replaceable_unit_code;	
/* Field Replaceable Unit Code */
	
unsigned	sk_specific1 	:7;	
/* Sense Key Specific */
	
unsigned	sksv		:1;	
/* Sense Key Specific information is valid */
	
u8		sk_specific2;		
/* Sense Key Specific */
	
u8		sk_specific3;		
/* Sense Key Specific */
	
u8		pad[2];			
/* Padding to 20 bytes */

} idetape_request_sense_result_t;

/*
 *      Mode Parameter Header for the MODE SENSE packet command
 */
typedef struct {
        
u8              mode_data_length;       /* Length of the following data transfer */
        
u8              medium_type;            /* Medium Type */
        
u8              dsp;                    /* Device Specific Parameter */
        
u8              bdl;                    /* Block Descriptor Length */

} osst_mode_parameter_header_t;

/*
 *      Mode Parameter Block Descriptor the MODE SENSE packet command
 *
 *      Support for block descriptors is optional.
 */
typedef struct {
        
u8              density_code;           /* Medium density code */
        
u8              blocks[3];              /* Number of blocks */
        
u8              reserved4;              /* Reserved */
        
u8              length[3];              /* Block Length */

} osst_parameter_block_descriptor_t;

/*
 *      The Data Compression Page, as returned by the MODE SENSE packet command.
 */
typedef struct {
#if   defined(__BIG_ENDIAN_BITFIELD)
        
unsigned        ps              :1;
        
unsigned        reserved0       :1;     /* Reserved */
	
unsigned        page_code       :6;     /* Page Code - Should be 0xf */
#elif defined(__LITTLE_ENDIAN_BITFIELD)
	unsigned        page_code       :6;     /* Page Code - Should be 0xf */
        unsigned        reserved0       :1;     /* Reserved */
        unsigned        ps              :1;
#else
#error "Please fix <asm/byteorder.h>"
#endif
        
u8              page_length;            /* Page Length - Should be 14 */
#if   defined(__BIG_ENDIAN_BITFIELD)
        
unsigned        dce             :1;     /* Data Compression Enable */
        
unsigned        dcc             :1;     /* Data Compression Capable */
	
unsigned        reserved2       :6;     /* Reserved */
#elif defined(__LITTLE_ENDIAN_BITFIELD)
	
unsigned        reserved2       :6;     /* Reserved */
        
unsigned        dcc             :1;     /* Data Compression Capable */
        
unsigned        dce             :1;     /* Data Compression Enable */
#else
#error "Please fix <asm/byteorder.h>"
#endif
#if   defined(__BIG_ENDIAN_BITFIELD)
        
unsigned        dde             :1;     /* Data Decompression Enable */
        
unsigned        red             :2;     /* Report Exception on Decompression */
	
unsigned        reserved3       :5;     /* Reserved */
#elif defined(__LITTLE_ENDIAN_BITFIELD)
	
unsigned        reserved3       :5;     /* Reserved */
        
unsigned        red             :2;     /* Report Exception on Decompression */
        
unsigned        dde             :1;     /* Data Decompression Enable */
#else
#error "Please fix <asm/byteorder.h>"
#endif
        
u32             ca;                     /* Compression Algorithm */
        
u32             da;                     /* Decompression Algorithm */
        
u8              reserved[4];            /* Reserved */

} osst_data_compression_page_t;

/*
 *      The Medium Partition Page, as returned by the MODE SENSE packet command.
 */
typedef struct {
#if   defined(__BIG_ENDIAN_BITFIELD)
        
unsigned        ps              :1;
        
unsigned        reserved1_6     :1;     /* Reserved */
	
unsigned        page_code       :6;     /* Page Code - Should be 0x11 */
#elif defined(__LITTLE_ENDIAN_BITFIELD)
	unsigned        page_code       :6;     /* Page Code - Should be 0x11 */
        unsigned        reserved1_6     :1;     /* Reserved */
        unsigned        ps              :1;
#else
#error "Please fix <asm/byteorder.h>"
#endif
        
u8              page_length;            /* Page Length - Should be 6 */
        
u8              map;                    /* Maximum Additional Partitions - Should be 0 */
        
u8              apd;                    /* Additional Partitions Defined - Should be 0 */
#if   defined(__BIG_ENDIAN_BITFIELD)
        
unsigned        fdp             :1;     /* Fixed Data Partitions */
        
unsigned        sdp             :1;     /* Should be 0 */
        
unsigned        idp             :1;     /* Should be 0 */
        
unsigned        psum            :2;     /* Should be 0 */
	
unsigned        reserved4_012   :3;     /* Reserved */
#elif defined(__LITTLE_ENDIAN_BITFIELD)
	
unsigned        reserved4_012   :3;     /* Reserved */
        
unsigned        psum            :2;     /* Should be 0 */
        
unsigned        idp             :1;     /* Should be 0 */
        
unsigned        sdp             :1;     /* Should be 0 */
        
unsigned        fdp             :1;     /* Fixed Data Partitions */
#else
#error "Please fix <asm/byteorder.h>"
#endif
        
u8              mfr;                    /* Medium Format Recognition */
        
u8              reserved[2];            /* Reserved */

} osst_medium_partition_page_t;

/*
 *      Capabilities and Mechanical Status Page
 */
typedef struct {
#if   defined(__BIG_ENDIAN_BITFIELD)
        
unsigned        reserved1_67    :2;
	
unsigned        page_code       :6;     /* Page code - Should be 0x2a */
#elif defined(__LITTLE_ENDIAN_BITFIELD)
	unsigned        page_code       :6;     /* Page code - Should be 0x2a */
        unsigned        reserved1_67    :2;
#else
#error "Please fix <asm/byteorder.h>"
#endif
        
u8              page_length;            /* Page Length - Should be 0x12 */
        

u8              reserved2, reserved3;
#if   defined(__BIG_ENDIAN_BITFIELD)
        
unsigned        reserved4_67    :2;
        
unsigned        sprev           :1;     /* Supports SPACE in the reverse direction */
        
unsigned        reserved4_1234  :4;
	
unsigned        ro              :1;     /* Read Only Mode */
#elif defined(__LITTLE_ENDIAN_BITFIELD)
	
unsigned        ro              :1;     /* Read Only Mode */
        
unsigned        reserved4_1234  :4;
        
unsigned        sprev           :1;     /* Supports SPACE in the reverse direction */
        
unsigned        reserved4_67    :2;
#else
#error "Please fix <asm/byteorder.h>"
#endif
#if   defined(__BIG_ENDIAN_BITFIELD)
        
unsigned        reserved5_67    :2;
        
unsigned        qfa             :1;     /* Supports the QFA two partition formats */
        
unsigned        reserved5_4     :1;
        
unsigned        efmt            :1;     /* Supports ERASE command initiated formatting */
	
unsigned        reserved5_012   :3;
#elif defined(__LITTLE_ENDIAN_BITFIELD)
	
unsigned        reserved5_012   :3;
        
unsigned        efmt            :1;     /* Supports ERASE command initiated formatting */
        
unsigned        reserved5_4     :1;
        
unsigned        qfa             :1;     /* Supports the QFA two partition formats */
        
unsigned        reserved5_67    :2;
#else
#error "Please fix <asm/byteorder.h>"
#endif
#if   defined(__BIG_ENDIAN_BITFIELD)
        
unsigned        cmprs           :1;     /* Supports data compression */
        
unsigned        ecc             :1;     /* Supports error correction */
	
unsigned        reserved6_45    :2;     /* Reserved */  
        
unsigned        eject           :1;     /* The device can eject the volume */
        
unsigned        prevent         :1;     /* The device defaults in the prevent state after power up */
        
unsigned        locked          :1;     /* The volume is locked */
	
unsigned        lock            :1;     /* Supports locking the volume */
#elif defined(__LITTLE_ENDIAN_BITFIELD)
	
unsigned        lock            :1;     /* Supports locking the volume */
        
unsigned        locked          :1;     /* The volume is locked */
        
unsigned        prevent         :1;     /* The device defaults in the prevent state after power up */
        
unsigned        eject           :1;     /* The device can eject the volume */
	
unsigned        reserved6_45    :2;     /* Reserved */  
        
unsigned        ecc             :1;     /* Supports error correction */
        
unsigned        cmprs           :1;     /* Supports data compression */
#else
#error "Please fix <asm/byteorder.h>"
#endif
#if   defined(__BIG_ENDIAN_BITFIELD)
        
unsigned        blk32768        :1;     /* slowb - the device restricts the byte count for PIO */
                                                /* transfers for slow buffer memory ??? */
                                                /* Also 32768 block size in some cases */
        
unsigned        reserved7_3_6   :4;
        
unsigned        blk1024         :1;     /* Supports 1024 bytes block size */
        
unsigned        blk512          :1;     /* Supports 512 bytes block size */
	
unsigned        reserved7_0     :1;
#elif defined(__LITTLE_ENDIAN_BITFIELD)
	
unsigned        reserved7_0     :1;
        
unsigned        blk512          :1;     /* Supports 512 bytes block size */
        
unsigned        blk1024         :1;     /* Supports 1024 bytes block size */
        
unsigned        reserved7_3_6   :4;
        
unsigned        blk32768        :1;     /* slowb - the device restricts the byte count for PIO */
                                                /* transfers for slow buffer memory ??? */
                                                /* Also 32768 block size in some cases */
#else
#error "Please fix <asm/byteorder.h>"
#endif
        
__be16          max_speed;              /* Maximum speed supported in KBps */
        

u8              reserved10, reserved11;
        
__be16          ctl;                    /* Continuous Transfer Limit in blocks */
        
__be16          speed;                  /* Current Speed, in KBps */
        
__be16          buffer_size;            /* Buffer Size, in 512 bytes */
        

u8              reserved18, reserved19;

} osst_capabilities_page_t;

/*
 *      Block Size Page
 */
typedef struct {
#if   defined(__BIG_ENDIAN_BITFIELD)
        
unsigned        ps              :1;
        
unsigned        reserved1_6     :1;
	
unsigned        page_code       :6;     /* Page code - Should be 0x30 */
#elif defined(__LITTLE_ENDIAN_BITFIELD)
	unsigned        page_code       :6;     /* Page code - Should be 0x30 */
        unsigned        reserved1_6     :1;
        unsigned        ps              :1;
#else
#error "Please fix <asm/byteorder.h>"
#endif
        
u8              page_length;            /* Page Length - Should be 2 */
        
u8              reserved2;
#if   defined(__BIG_ENDIAN_BITFIELD)
        
unsigned        one             :1;
        
unsigned        reserved2_6     :1;
        
unsigned        record32_5      :1;
        
unsigned        record32        :1;
        
unsigned        reserved2_23    :2;
        
unsigned        play32_5        :1;
	
unsigned        play32          :1;
#elif defined(__LITTLE_ENDIAN_BITFIELD)
	
unsigned        play32          :1;
        
unsigned        play32_5        :1;
        
unsigned        reserved2_23    :2;
        
unsigned        record32        :1;
        
unsigned        record32_5      :1;
        
unsigned        reserved2_6     :1;
        
unsigned        one             :1;
#else
#error "Please fix <asm/byteorder.h>"
#endif

} osst_block_size_page_t;

/*
 *      Tape Parameters Page
 */
typedef struct {
#if   defined(__BIG_ENDIAN_BITFIELD)
        
unsigned        ps              :1;
        
unsigned        reserved1_6     :1;
	
unsigned        page_code       :6;     /* Page code - Should be 0x2b */
#elif defined(__LITTLE_ENDIAN_BITFIELD)
	unsigned        page_code       :6;     /* Page code - Should be 0x2b */
        unsigned        reserved1_6     :1;
        unsigned        ps              :1;
#else
#error "Please fix <asm/byteorder.h>"
#endif
	
u8		reserved2;
	
u8		density;
	

u8		reserved3,reserved4;
	
__be16		segtrk;
	
__be16		trks;
	





u8		reserved5,reserved6,reserved7,reserved8,reserved9,reserved10;

} osst_tape_paramtr_page_t;

/* OnStream definitions */


#define OS_CONFIG_PARTITION     (0xff)

#define OS_DATA_PARTITION       (0)

#define OS_PARTITION_VERSION    (1)

/*
 * partition
 */

typedef struct os_partition_s {
        
__u8    partition_num;
        
__u8    par_desc_ver;
        
__be16  wrt_pass_cntr;
        
__be32  first_frame_ppos;
        
__be32  last_frame_ppos;
        
__be32  eod_frame_ppos;

} os_partition_t;

/*
 * DAT entry
 */

typedef struct os_dat_entry_s {
        
__be32  blk_sz;
        
__be16  blk_cnt;
        
__u8    flags;
        
__u8    reserved;

} os_dat_entry_t;

/*
 * DAT
 */

#define OS_DAT_FLAGS_DATA       (0xc)

#define OS_DAT_FLAGS_MARK       (0x1)


typedef struct os_dat_s {
        
__u8            dat_sz;
        
__u8            reserved1;
        
__u8            entry_cnt;
        
__u8            reserved3;
        
os_dat_entry_t  dat_list[16];

} os_dat_t;

/*
 * Frame types
 */

#define OS_FRAME_TYPE_FILL      (0)

#define OS_FRAME_TYPE_EOD       (1 << 0)

#define OS_FRAME_TYPE_MARKER    (1 << 1)

#define OS_FRAME_TYPE_HEADER    (1 << 3)

#define OS_FRAME_TYPE_DATA      (1 << 7)

/*
 * AUX
 */

typedef struct os_aux_s {
        
__be32          format_id;              /* hardware compatibility AUX is based on */
        
char            application_sig[4];     /* driver used to write this media */
        
__be32          hdwr;                   /* reserved */
        
__be32          update_frame_cntr;      /* for configuration frame */
        
__u8            frame_type;
        
__u8            frame_type_reserved;
        
__u8            reserved_18_19[2];
        
os_partition_t  partition;
        
__u8            reserved_36_43[8];
        
__be32          frame_seq_num;
        
__be32          logical_blk_num_high;
        
__be32          logical_blk_num;
        
os_dat_t        dat;
        
__u8            reserved188_191[4];
        
__be32          filemark_cnt;
        
__be32          phys_fm;
        
__be32          last_mark_ppos;
        
__u8            reserved204_223[20];

        /*
         * __u8         app_specific[32];
         *
         * Linux specific fields:
         */
         
__be32         next_mark_ppos;         /* when known, points to next marker */
	 
__be32		last_mark_lbn;		/* storing log_blk_num of last mark is extends ADR spec */
         
__u8           linux_specific[24];

        
__u8            reserved_256_511[256];

} os_aux_t;


#define OS_FM_TAB_MAX 1024


typedef struct os_fm_tab_s {
	
__u8		fm_part_num;
	
__u8		reserved_1;
	
__u8		fm_tab_ent_sz;
	
__u8		reserved_3;
	
__be16		fm_tab_ent_cnt;
	
__u8		reserved6_15[10];
	
__be32		fm_tab_ent[OS_FM_TAB_MAX];

} os_fm_tab_t;


typedef struct os_ext_trk_ey_s {
	
__u8		et_part_num;
	
__u8		fmt;
	
__be16		fm_tab_off;
	
__u8		reserved4_7[4];
	
__be32		last_hlb_hi;
	
__be32		last_hlb;
	
__be32		last_pp;
	
__u8		reserved20_31[12];

} os_ext_trk_ey_t;


typedef struct os_ext_trk_tb_s {
	
__u8		nr_stream_part;
	
__u8		reserved_1;
	
__u8		et_ent_sz;
	
__u8		reserved3_15[13];
	
os_ext_trk_ey_t	dat_ext_trk_ey;
	
os_ext_trk_ey_t	qfa_ext_trk_ey;

} os_ext_trk_tb_t;


typedef struct os_header_s {
        
char            ident_str[8];
        
__u8            major_rev;
        
__u8            minor_rev;
	
__be16		ext_trk_tb_off;
        
__u8            reserved12_15[4];
        
__u8            pt_par_num;
        
__u8            pt_reserved1_3[3];
        
os_partition_t  partition[16];
	
__be32		cfg_col_width;
	
__be32		dat_col_width;
	
__be32		qfa_col_width;
	
__u8		cartridge[16];
	
__u8		reserved304_511[208];
	
__be32		old_filemark_list[16680/4];		/* in ADR 1.4 __u8 track_table[16680] */
	
os_ext_trk_tb_t	ext_track_tb;
	
__u8		reserved17272_17735[464];
	
os_fm_tab_t	dat_fm_tab;
	
os_fm_tab_t	qfa_fm_tab;
	
__u8		reserved25960_32767[6808];

} os_header_t;


/*
 * OnStream ADRL frame
 */

#define OS_FRAME_SIZE   (32 * 1024 + 512)

#define OS_DATA_SIZE    (32 * 1024)

#define OS_AUX_SIZE     (512)
//#define OSST_MAX_SG      2

/* The OnStream tape buffer descriptor. */

struct osst_buffer {
  
unsigned char in_use;
  
unsigned char dma;	/* DMA-able buffer */
  
int buffer_size;
  
int buffer_blocks;
  
int buffer_bytes;
  
int read_pointer;
  
int writing;
  
int midlevel_result;
  
int syscall_result;
  
struct osst_request *last_SRpnt;
  
struct st_cmdstatus cmdstat;
  
struct rq_map_data map_data;
  
unsigned char *b_data;
  
os_aux_t *aux;               /* onstream AUX structure at end of each block     */
  
unsigned short use_sg;       /* zero or number of s/g segments for this adapter */
  
unsigned short sg_segs;      /* number of segments in s/g list                  */
  
unsigned short orig_sg_segs; /* number of segments allocated at first try       */
  
struct scatterlist sg[1];    /* MUST BE last item                               */
} ;

/* The OnStream tape drive descriptor */

struct osst_tape {
  
struct scsi_driver *driver;
  
unsigned capacity;
  
struct scsi_device *device;
  
struct mutex lock;           /* for serialization */
  
struct completion wait;      /* for SCSI commands */
  
struct osst_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 restr_dma;
  
unsigned char scsi2_logical;
  
unsigned char default_drvbuffer;  /* 0xff = don't touch, value 3 bits */
  
unsigned char pos_unknown;        /* after reset position unknown */
  
int write_threshold;
  
int timeout;			/* timeout for normal commands */
  
int long_timeout;		/* timeout for commands known to take long time*/

  /* 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 rew_at_close;
  
unsigned char inited;
  
int block_size;
  
int min_block;
  
int max_block;
  
int recover_count;            /* from tape opening */
  
int abort_count;
  
int write_count;
  
int read_count;
  
int recover_erreg;            /* from last status call */
  /*
   * OnStream specific data
   */
  
int	   os_fw_rev;			       /* the firmware revision * 10000 */
  
unsigned char  raw;                          /* flag OnStream raw access (32.5KB block size) */
  
unsigned char  poll;                         /* flag that this drive needs polling (IDE|firmware) */
  
unsigned char  frame_in_buffer;	       /* flag that the frame as per frame_seq_number
                                                * has been read into STp->buffer and is valid */
  
int      frame_seq_number;                   /* logical frame number */
  
int      logical_blk_num;                    /* logical block number */
  
unsigned first_frame_position;               /* physical frame to be transferred to/from host */
  
unsigned last_frame_position;                /* physical frame to be transferd to/from tape */
  
int      cur_frames;                         /* current number of frames in internal buffer */
  
int      max_frames;                         /* max number of frames in internal buffer */
  
char     application_sig[5];                 /* application signature */
  
unsigned char  fast_open;                    /* flag that reminds us we didn't check headers at open */
  
unsigned short wrt_pass_cntr;                /* write pass counter */
  
int      update_frame_cntr;                  /* update frame counter */
  
int      onstream_write_error;               /* write error recovery active */
  
int      header_ok;                          /* header frame verified ok */
  
int      linux_media;                        /* reading linux-specifc media */
  
int      linux_media_version;
  
os_header_t * header_cache;		       /* cache is kept for filemark positions */
  
int      filemark_cnt;
  
int      first_mark_ppos;
  
int      last_mark_ppos;
  
int      last_mark_lbn;			/* storing log_blk_num of last mark is extends ADR spec */
  
int      first_data_ppos;
  
int      eod_frame_ppos;
  
int      eod_frame_lfa;
  
int      write_type;				/* used in write error recovery */
  
int      read_error_frame;			/* used in read error recovery */
  
unsigned long cmd_start_time;
  
unsigned long max_cmd_time;

#if DEBUG
  
unsigned char write_pending;
  
int nbr_finished;
  
int nbr_waits;
  
unsigned char last_cmnd[6];
  
unsigned char last_sense[16];
#endif
  
struct gendisk *drive;
} ;

/* scsi tape command */

struct osst_request {
	
unsigned char cmd[MAX_COMMAND_SIZE];
	
unsigned char sense[SCSI_SENSE_BUFFERSIZE];
	
int result;
	
struct osst_tape *stp;
	
struct completion *waiting;
	
struct bio *bio;
};

/* Values of write_type */

#define OS_WRITE_DATA      0

#define OS_WRITE_EOD       1

#define OS_WRITE_NEW_MARK  2

#define OS_WRITE_LAST_MARK 3

#define OS_WRITE_HEADER    4

#define OS_WRITE_FILLER    5

/* Additional rw state */

#define OS_WRITING_COMPLETE 3

Overall Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)220093.42%15.56%
Willem Riede582.46%316.67%
Al Viro411.74%211.11%
Linus Torvalds241.02%316.67%
FUJITA Tomonori90.38%15.56%
James Bottomley80.34%211.11%
Douglas Gilbert50.21%15.56%
Christoph Hellwig40.17%211.11%
Matthias Kaehlcke40.17%15.56%
Lucas De Marchi10.04%15.56%
Greg Kroah-Hartman10.04%15.56%
Total2355100.00%18100.00%
Directory: drivers/scsi
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.