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