xref: /linux/drivers/s390/char/tape_3590.h (revision 498495dba268b20e8eadd7fe93c140c68b6cc9d2)
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