Stefan Bader | b6cba4e | 2006-03-24 03:15:29 -0800 | [diff] [blame] | 1 | /* |
Stefan Bader | b6cba4e | 2006-03-24 03:15:29 -0800 | [diff] [blame] | 2 | * tape device discipline for 3590 tapes. |
| 3 | * |
Heiko Carstens | a53c8fa | 2012-07-20 11:15:04 +0200 | [diff] [blame] | 4 | * Copyright IBM Corp. 2001, 2006 |
Stefan Bader | b6cba4e | 2006-03-24 03:15:29 -0800 | [diff] [blame] | 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 |
Michael Holzheu | cced1dd | 2007-02-05 21:18:26 +0100 | [diff] [blame] | 40 | #define MSENSE_CRYPT_MASK 0x00000010 |
Stefan Bader | b6cba4e | 2006-03-24 03:15:29 -0800 | [diff] [blame] | 41 | |
| 42 | #define TAPE_3590_MAX_MSG 0xb0 |
| 43 | |
| 44 | /* Datatypes */ |
| 45 | |
| 46 | struct tape_3590_disc_data { |
Michael Holzheu | cced1dd | 2007-02-05 21:18:26 +0100 | [diff] [blame] | 47 | struct tape390_crypt_info crypt_info; |
Stefan Bader | b6cba4e | 2006-03-24 03:15:29 -0800 | [diff] [blame] | 48 | int read_back_op; |
| 49 | }; |
| 50 | |
Michael Holzheu | cced1dd | 2007-02-05 21:18:26 +0100 | [diff] [blame] | 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 | |
Stefan Bader | b6cba4e | 2006-03-24 03:15:29 -0800 | [diff] [blame] | 56 | struct 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 | |
| 123 | struct tape_3590_med_sense { |
| 124 | unsigned int macst:4; |
| 125 | unsigned int masst:4; |
Michael Holzheu | cced1dd | 2007-02-05 21:18:26 +0100 | [diff] [blame] | 126 | char pad1[7]; |
| 127 | unsigned int flags; |
| 128 | char pad2[116]; |
| 129 | } __attribute__ ((packed)); |
| 130 | |
Michael Holzheu | e296306 | 2007-05-04 18:47:53 +0200 | [diff] [blame] | 131 | struct tape_3590_rdc_data { |
| 132 | char data[64]; |
| 133 | } __attribute__ ((packed)); |
| 134 | |
Michael Holzheu | cced1dd | 2007-02-05 21:18:26 +0100 | [diff] [blame] | 135 | /* Datastructures for 3592 encryption support */ |
| 136 | |
| 137 | struct tape3592_kekl { |
| 138 | __u8 flags; |
| 139 | char label[64]; |
| 140 | } __attribute__ ((packed)); |
| 141 | |
| 142 | struct tape3592_kekl_pair { |
| 143 | __u8 count; |
| 144 | struct tape3592_kekl kekl[2]; |
| 145 | } __attribute__ ((packed)); |
| 146 | |
| 147 | struct 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 | |
| 157 | struct 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 | |
| 165 | struct 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]; |
Stefan Bader | b6cba4e | 2006-03-24 03:15:29 -0800 | [diff] [blame] | 172 | } __attribute__ ((packed)); |
| 173 | |
| 174 | #endif /* _TAPE_3590_H */ |