1193323Sed/* SPDX-License-Identifier: GPL-2.0 */ 2193323Sed/* 3193323Sed * tape device discipline for 3590 tapes. 4193323Sed * 5193323Sed * Copyright IBM Corp. 2001, 2006 6193323Sed * Author(s): Stefan Bader <shbader@de.ibm.com> 7193323Sed * Michael Holzheu <holzheu@de.ibm.com> 8193323Sed * Martin Schwidefsky <schwidefsky@de.ibm.com> 9193323Sed */ 10193323Sed 11193323Sed#ifndef _TAPE_3590_H 12193323Sed#define _TAPE_3590_H 13193323Sed 14249423Sdim#define MEDIUM_SENSE 0xc2 15193323Sed#define READ_PREVIOUS 0x0a 16249423Sdim#define MODE_SENSE 0xcf 17249423Sdim#define PERFORM_SS_FUNC 0x77 18193323Sed#define READ_SS_DATA 0x3e 19193323Sed 20193323Sed#define PREP_RD_SS_DATA 0x18 21193323Sed#define RD_ATTMSG 0x3 22249423Sdim 23249423Sdim#define SENSE_BRA_PER 0 24193323Sed#define SENSE_BRA_CONT 1 25193323Sed#define SENSE_BRA_RE 2 26193323Sed#define SENSE_BRA_DRE 3 27249423Sdim 28249423Sdim#define SENSE_FMT_LIBRARY 0x23 29193323Sed#define SENSE_FMT_UNSOLICITED 0x40 30193323Sed#define SENSE_FMT_COMMAND_REJ 0x41 31193323Sed#define SENSE_FMT_COMMAND_EXEC0 0x50 32193323Sed#define SENSE_FMT_COMMAND_EXEC1 0x51 33193323Sed#define SENSE_FMT_EVENT0 0x60 34199989Srdivacky#define SENSE_FMT_EVENT1 0x61 35200581Srdivacky#define SENSE_FMT_MIM 0x70 36200581Srdivacky#define SENSE_FMT_SIM 0x71 37199989Srdivacky 38193323Sed#define MSENSE_UNASSOCIATED 0x00 39193323Sed#define MSENSE_ASSOCIATED_MOUNT 0x01 40193323Sed#define MSENSE_ASSOCIATED_UMOUNT 0x02 41193323Sed#define MSENSE_CRYPT_MASK 0x00000010 42193323Sed 43193323Sed#define TAPE_3590_MAX_MSG 0xb0 44193323Sed 45193323Sed/* Datatypes */ 46193323Sed 47198090Srdivackystruct tape_3590_disc_data { 48193323Sed struct tape390_crypt_info crypt_info; 49193323Sed int read_back_op; 50200581Srdivacky}; 51200581Srdivacky 52243830Sdim#define TAPE_3590_CRYPT_INFO(device) \ 53200581Srdivacky ((struct tape_3590_disc_data*)(device->discdata))->crypt_info 54200581Srdivacky#define TAPE_3590_READ_BACK_OP(device) \ 55193323Sed ((struct tape_3590_disc_data*)(device->discdata))->read_back_op 56199989Srdivacky 57199989Srdivackystruct tape_3590_sense { 58193323Sed 59193323Sed unsigned int command_rej:1; 60193323Sed unsigned int interv_req:1; 61193323Sed unsigned int bus_out_check:1; 62193323Sed unsigned int eq_check:1; 63193323Sed unsigned int data_check:1; 64193323Sed unsigned int overrun:1; 65193323Sed unsigned int def_unit_check:1; 66193323Sed unsigned int assgnd_elsew:1; 67193323Sed 68193323Sed unsigned int locate_fail:1; 69193323Sed unsigned int inst_online:1; 70193323Sed unsigned int reserved:1; 71193323Sed unsigned int blk_seq_err:1; 72193323Sed unsigned int begin_part:1; 73193323Sed unsigned int wr_mode:1; 74193323Sed unsigned int wr_prot:1; 75243830Sdim unsigned int not_cap:1; 76193323Sed 77193323Sed unsigned int bra:2; 78193323Sed unsigned int lc:3; 79193323Sed unsigned int vlf_active:1; 80193323Sed unsigned int stm:1; 81200581Srdivacky unsigned int med_pos:1; 82193323Sed 83193323Sed unsigned int rac:8; 84193323Sed 85193323Sed unsigned int rc_rqc:16; 86200581Srdivacky 87193323Sed unsigned int mc:8; 88193323Sed 89193323Sed unsigned int sense_fmt:8; 90221345Sdim 91221345Sdim union { 92193323Sed struct { 93198090Srdivacky unsigned int emc:4; 94218893Sdim unsigned int smc:4; 95193323Sed unsigned int sev:2; 96193323Sed unsigned int reserved:6; 97193323Sed unsigned int md:8; 98193323Sed unsigned int refcode:8; 99193323Sed unsigned int mid:16; 100193323Sed unsigned int mp:16; 101200581Srdivacky unsigned char volid[6]; 102199989Srdivacky unsigned int fid:8; 103199989Srdivacky } f70; 104199989Srdivacky struct { 105199989Srdivacky unsigned int emc:4; 106199989Srdivacky unsigned int smc:4; 107199989Srdivacky unsigned int sev:2; 108199989Srdivacky unsigned int reserved1:5; 109199989Srdivacky unsigned int mdf:1; 110199989Srdivacky unsigned char md[3]; 111199989Srdivacky unsigned int simid:8; 112193323Sed unsigned int uid:16; 113193323Sed unsigned int refcode1:16; 114193323Sed unsigned int refcode2:16; 115193323Sed unsigned int refcode3:16; 116193323Sed unsigned int reserved2:8; 117193323Sed } f71; 118193323Sed unsigned char data[14]; 119193323Sed } fmt; 120193323Sed unsigned char pad[10]; 121193323Sed 122193323Sed} __attribute__ ((packed)); 123193323Sed 124193323Sedstruct tape_3590_med_sense { 125193323Sed unsigned int macst:4; 126193323Sed unsigned int masst:4; 127193323Sed char pad1[7]; 128193323Sed unsigned int flags; 129193323Sed char pad2[116]; 130193323Sed} __attribute__ ((packed)); 131193323Sed 132193323Sedstruct tape_3590_rdc_data { 133193323Sed char data[64]; 134193323Sed} __attribute__ ((packed)); 135193323Sed 136193323Sed/* Datastructures for 3592 encryption support */ 137199989Srdivacky 138200581Srdivackystruct tape3592_kekl { 139193323Sed __u8 flags; 140193323Sed char label[64]; 141193323Sed} __attribute__ ((packed)); 142193323Sed 143193323Sedstruct tape3592_kekl_pair { 144193323Sed __u8 count; 145193323Sed struct tape3592_kekl kekl[2]; 146193323Sed} __attribute__ ((packed)); 147193323Sed 148243830Sdimstruct tape3592_kekl_query_data { 149198090Srdivacky __u16 len; 150193323Sed __u8 fmt; 151198090Srdivacky __u8 mc; 152198090Srdivacky __u32 id; 153193323Sed __u8 flags; 154193323Sed struct tape3592_kekl_pair kekls; 155193323Sed char reserved[116]; 156193323Sed} __attribute__ ((packed)); 157193323Sed 158193323Sedstruct tape3592_kekl_query_order { 159193323Sed __u8 code; 160193323Sed __u8 flags; 161193323Sed char reserved1[2]; 162193323Sed __u8 max_count; 163193323Sed char reserved2[35]; 164193323Sed} __attribute__ ((packed)); 165193323Sed 166193323Sedstruct tape3592_kekl_set_order { 167193323Sed __u8 code; 168198090Srdivacky __u8 flags; 169198090Srdivacky char reserved1[2]; 170193323Sed __u8 op; 171193323Sed struct tape3592_kekl_pair kekls; 172193323Sed char reserved2[120]; 173193323Sed} __attribute__ ((packed)); 174193323Sed 175193323Sed#endif /* _TAPE_3590_H */ 176193323Sed