cced1dd42e
3592 tape devices are able to write data encrpyted on tape mediums. This z/Linux device driver support includes the following functions: * ioctl to switch on/off encryption * ioctl to query encryption status of drive * ioctls to set and query key encrypting keys (kekls) * long busy interrupt handling Signed-off-by: Michael Holzheu <holzheu@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
172 lines
3.6 KiB
C
172 lines
3.6 KiB
C
/*
|
|
* drivers/s390/char/tape_3590.h
|
|
* tape device discipline for 3590 tapes.
|
|
*
|
|
* Copyright IBM Corp. 2001,2006
|
|
* 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
|
|
#define MSENSE_CRYPT_MASK 0x00000010
|
|
|
|
#define TAPE_3590_MAX_MSG 0xb0
|
|
|
|
/* Datatypes */
|
|
|
|
struct tape_3590_disc_data {
|
|
struct tape390_crypt_info crypt_info;
|
|
int read_back_op;
|
|
};
|
|
|
|
#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
|
|
|
|
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;
|
|
char pad1[7];
|
|
unsigned int flags;
|
|
char pad2[116];
|
|
} __attribute__ ((packed));
|
|
|
|
/* 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];
|
|
} __attribute__ ((packed));
|
|
|
|
#endif /* _TAPE_3590_H */
|