2006-03-24 14:15:29 +03:00
/*
* drivers / s390 / char / tape_3590 . h
* tape device discipline for 3590 tapes .
*
2007-02-05 23:18:26 +03:00
* Copyright IBM Corp . 2001 , 2006
2006-03-24 14:15:29 +03:00
* Author ( s ) : Stefan Bader < shbader @ de . ibm . com >
* Michael Holzheu < holzheu @ de . ibm . com >
* Martin Schwidefsky < schwidefsky @ de . ibm . com >
*/
# ifndef _TAPE_3590_H
# define _TAPE_3590_H
# define MEDIUM_SENSE 0xc2
# define READ_PREVIOUS 0x0a
# define MODE_SENSE 0xcf
# define PERFORM_SS_FUNC 0x77
# define READ_SS_DATA 0x3e
# define PREP_RD_SS_DATA 0x18
# define RD_ATTMSG 0x3
# define SENSE_BRA_PER 0
# define SENSE_BRA_CONT 1
# define SENSE_BRA_RE 2
# define SENSE_BRA_DRE 3
# define SENSE_FMT_LIBRARY 0x23
# define SENSE_FMT_UNSOLICITED 0x40
# define SENSE_FMT_COMMAND_REJ 0x41
# define SENSE_FMT_COMMAND_EXEC0 0x50
# define SENSE_FMT_COMMAND_EXEC1 0x51
# define SENSE_FMT_EVENT0 0x60
# define SENSE_FMT_EVENT1 0x61
# define SENSE_FMT_MIM 0x70
# define SENSE_FMT_SIM 0x71
# define MSENSE_UNASSOCIATED 0x00
# define MSENSE_ASSOCIATED_MOUNT 0x01
# define MSENSE_ASSOCIATED_UMOUNT 0x02
2007-02-05 23:18:26 +03:00
# define MSENSE_CRYPT_MASK 0x00000010
2006-03-24 14:15:29 +03:00
# define TAPE_3590_MAX_MSG 0xb0
/* Datatypes */
struct tape_3590_disc_data {
2007-02-05 23:18:26 +03:00
struct tape390_crypt_info crypt_info ;
2006-03-24 14:15:29 +03:00
int read_back_op ;
} ;
2007-02-05 23:18:26 +03:00
# define TAPE_3590_CRYPT_INFO(device) \
( ( struct tape_3590_disc_data * ) ( device - > discdata ) ) - > crypt_info
# define TAPE_3590_READ_BACK_OP(device) \
( ( struct tape_3590_disc_data * ) ( device - > discdata ) ) - > read_back_op
2006-03-24 14:15:29 +03:00
struct tape_3590_sense {
unsigned int command_rej : 1 ;
unsigned int interv_req : 1 ;
unsigned int bus_out_check : 1 ;
unsigned int eq_check : 1 ;
unsigned int data_check : 1 ;
unsigned int overrun : 1 ;
unsigned int def_unit_check : 1 ;
unsigned int assgnd_elsew : 1 ;
unsigned int locate_fail : 1 ;
unsigned int inst_online : 1 ;
unsigned int reserved : 1 ;
unsigned int blk_seq_err : 1 ;
unsigned int begin_part : 1 ;
unsigned int wr_mode : 1 ;
unsigned int wr_prot : 1 ;
unsigned int not_cap : 1 ;
unsigned int bra : 2 ;
unsigned int lc : 3 ;
unsigned int vlf_active : 1 ;
unsigned int stm : 1 ;
unsigned int med_pos : 1 ;
unsigned int rac : 8 ;
unsigned int rc_rqc : 16 ;
unsigned int mc : 8 ;
unsigned int sense_fmt : 8 ;
union {
struct {
unsigned int emc : 4 ;
unsigned int smc : 4 ;
unsigned int sev : 2 ;
unsigned int reserved : 6 ;
unsigned int md : 8 ;
unsigned int refcode : 8 ;
unsigned int mid : 16 ;
unsigned int mp : 16 ;
unsigned char volid [ 6 ] ;
unsigned int fid : 8 ;
} f70 ;
struct {
unsigned int emc : 4 ;
unsigned int smc : 4 ;
unsigned int sev : 2 ;
unsigned int reserved1 : 5 ;
unsigned int mdf : 1 ;
unsigned char md [ 3 ] ;
unsigned int simid : 8 ;
unsigned int uid : 16 ;
unsigned int refcode1 : 16 ;
unsigned int refcode2 : 16 ;
unsigned int refcode3 : 16 ;
unsigned int reserved2 : 8 ;
} f71 ;
unsigned char data [ 14 ] ;
} fmt ;
unsigned char pad [ 10 ] ;
} __attribute__ ( ( packed ) ) ;
struct tape_3590_med_sense {
unsigned int macst : 4 ;
unsigned int masst : 4 ;
2007-02-05 23:18:26 +03:00
char pad1 [ 7 ] ;
unsigned int flags ;
char pad2 [ 116 ] ;
} __attribute__ ( ( packed ) ) ;
2007-05-04 20:47:53 +04:00
struct tape_3590_rdc_data {
char data [ 64 ] ;
} __attribute__ ( ( packed ) ) ;
2007-02-05 23:18:26 +03:00
/* Datastructures for 3592 encryption support */
struct tape3592_kekl {
__u8 flags ;
char label [ 64 ] ;
} __attribute__ ( ( packed ) ) ;
struct tape3592_kekl_pair {
__u8 count ;
struct tape3592_kekl kekl [ 2 ] ;
} __attribute__ ( ( packed ) ) ;
struct tape3592_kekl_query_data {
__u16 len ;
__u8 fmt ;
__u8 mc ;
__u32 id ;
__u8 flags ;
struct tape3592_kekl_pair kekls ;
char reserved [ 116 ] ;
} __attribute__ ( ( packed ) ) ;
struct tape3592_kekl_query_order {
__u8 code ;
__u8 flags ;
char reserved1 [ 2 ] ;
__u8 max_count ;
char reserved2 [ 35 ] ;
} __attribute__ ( ( packed ) ) ;
struct tape3592_kekl_set_order {
__u8 code ;
__u8 flags ;
char reserved1 [ 2 ] ;
__u8 op ;
struct tape3592_kekl_pair kekls ;
char reserved2 [ 120 ] ;
2006-03-24 14:15:29 +03:00
} __attribute__ ( ( packed ) ) ;
# endif /* _TAPE_3590_H */