1/* 2 * tape device discipline for 3590 tapes. 3 * 4 * Copyright IBM Corp. 2001, 2006 5 * Author(s): Stefan Bader <shbader@de.ibm.com> 6 * Michael Holzheu <holzheu@de.ibm.com> 7 * Martin Schwidefsky <schwidefsky@de.ibm.com> 8 */ 9 10#ifndef _TAPE_3590_H 11#define _TAPE_3590_H 12 13#define MEDIUM_SENSE 0xc2 14#define READ_PREVIOUS 0x0a 15#define MODE_SENSE 0xcf 16#define PERFORM_SS_FUNC 0x77 17#define READ_SS_DATA 0x3e 18 19#define PREP_RD_SS_DATA 0x18 20#define RD_ATTMSG 0x3 21 22#define SENSE_BRA_PER 0 23#define SENSE_BRA_CONT 1 24#define SENSE_BRA_RE 2 25#define SENSE_BRA_DRE 3 26 27#define SENSE_FMT_LIBRARY 0x23 28#define SENSE_FMT_UNSOLICITED 0x40 29#define SENSE_FMT_COMMAND_REJ 0x41 30#define SENSE_FMT_COMMAND_EXEC0 0x50 31#define SENSE_FMT_COMMAND_EXEC1 0x51 32#define SENSE_FMT_EVENT0 0x60 33#define SENSE_FMT_EVENT1 0x61 34#define SENSE_FMT_MIM 0x70 35#define SENSE_FMT_SIM 0x71 36 37#define MSENSE_UNASSOCIATED 0x00 38#define MSENSE_ASSOCIATED_MOUNT 0x01 39#define MSENSE_ASSOCIATED_UMOUNT 0x02 40#define MSENSE_CRYPT_MASK 0x00000010 41 42#define TAPE_3590_MAX_MSG 0xb0 43 44/* Datatypes */ 45 46struct tape_3590_disc_data { 47 struct tape390_crypt_info crypt_info; 48 int read_back_op; 49}; 50 51#define TAPE_3590_CRYPT_INFO(device) \ 52 ((struct tape_3590_disc_data*)(device->discdata))->crypt_info 53#define TAPE_3590_READ_BACK_OP(device) \ 54 ((struct tape_3590_disc_data*)(device->discdata))->read_back_op 55 56struct tape_3590_sense { 57 58 unsigned int command_rej:1; 59 unsigned int interv_req:1; 60 unsigned int bus_out_check:1; 61 unsigned int eq_check:1; 62 unsigned int data_check:1; 63 unsigned int overrun:1; 64 unsigned int def_unit_check:1; 65 unsigned int assgnd_elsew:1; 66 67 unsigned int locate_fail:1; 68 unsigned int inst_online:1; 69 unsigned int reserved:1; 70 unsigned int blk_seq_err:1; 71 unsigned int begin_part:1; 72 unsigned int wr_mode:1; 73 unsigned int wr_prot:1; 74 unsigned int not_cap:1; 75 76 unsigned int bra:2; 77 unsigned int lc:3; 78 unsigned int vlf_active:1; 79 unsigned int stm:1; 80 unsigned int med_pos:1; 81 82 unsigned int rac:8; 83 84 unsigned int rc_rqc:16; 85 86 unsigned int mc:8; 87 88 unsigned int sense_fmt:8; 89 90 union { 91 struct { 92 unsigned int emc:4; 93 unsigned int smc:4; 94 unsigned int sev:2; 95 unsigned int reserved:6; 96 unsigned int md:8; 97 unsigned int refcode:8; 98 unsigned int mid:16; 99 unsigned int mp:16; 100 unsigned char volid[6]; 101 unsigned int fid:8; 102 } f70; 103 struct { 104 unsigned int emc:4; 105 unsigned int smc:4; 106 unsigned int sev:2; 107 unsigned int reserved1:5; 108 unsigned int mdf:1; 109 unsigned char md[3]; 110 unsigned int simid:8; 111 unsigned int uid:16; 112 unsigned int refcode1:16; 113 unsigned int refcode2:16; 114 unsigned int refcode3:16; 115 unsigned int reserved2:8; 116 } f71; 117 unsigned char data[14]; 118 } fmt; 119 unsigned char pad[10]; 120 121} __attribute__ ((packed)); 122 123struct tape_3590_med_sense { 124 unsigned int macst:4; 125 unsigned int masst:4; 126 char pad1[7]; 127 unsigned int flags; 128 char pad2[116]; 129} __attribute__ ((packed)); 130 131struct tape_3590_rdc_data { 132 char data[64]; 133} __attribute__ ((packed)); 134 135/* Datastructures for 3592 encryption support */ 136 137struct tape3592_kekl { 138 __u8 flags; 139 char label[64]; 140} __attribute__ ((packed)); 141 142struct tape3592_kekl_pair { 143 __u8 count; 144 struct tape3592_kekl kekl[2]; 145} __attribute__ ((packed)); 146 147struct tape3592_kekl_query_data { 148 __u16 len; 149 __u8 fmt; 150 __u8 mc; 151 __u32 id; 152 __u8 flags; 153 struct tape3592_kekl_pair kekls; 154 char reserved[116]; 155} __attribute__ ((packed)); 156 157struct tape3592_kekl_query_order { 158 __u8 code; 159 __u8 flags; 160 char reserved1[2]; 161 __u8 max_count; 162 char reserved2[35]; 163} __attribute__ ((packed)); 164 165struct tape3592_kekl_set_order { 166 __u8 code; 167 __u8 flags; 168 char reserved1[2]; 169 __u8 op; 170 struct tape3592_kekl_pair kekls; 171 char reserved2[120]; 172} __attribute__ ((packed)); 173 174#endif /* _TAPE_3590_H */ 175