]> git.karo-electronics.de Git - karo-tx-linux.git/blob - drivers/s390/char/tape_3590.h
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux
[karo-tx-linux.git] / drivers / s390 / char / tape_3590.h
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 */