xref: /linux/drivers/s390/char/tape_3590.h (revision 93df8a1ed6231727c5db94a80b1a6bd5ee67cec3)
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 
46 struct 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 
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;
126 	char pad1[7];
127 	unsigned int flags;
128 	char pad2[116];
129 } __attribute__ ((packed));
130 
131 struct tape_3590_rdc_data {
132 	char data[64];
133 } __attribute__ ((packed));
134 
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];
172 } __attribute__ ((packed));
173 
174 #endif /* _TAPE_3590_H */
175