blob: 36b759e89d22d9aca38c7294a03983648b421a74 [file] [log] [blame]
Stefan Baderb6cba4e2006-03-24 03:15:29 -08001/*
Stefan Baderb6cba4e2006-03-24 03:15:29 -08002 * tape device discipline for 3590 tapes.
3 *
Heiko Carstensa53c8fa2012-07-20 11:15:04 +02004 * Copyright IBM Corp. 2001, 2006
Stefan Baderb6cba4e2006-03-24 03:15:29 -08005 * 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 Holzheucced1dd2007-02-05 21:18:26 +010040#define MSENSE_CRYPT_MASK 0x00000010
Stefan Baderb6cba4e2006-03-24 03:15:29 -080041
42#define TAPE_3590_MAX_MSG 0xb0
43
44/* Datatypes */
45
46struct tape_3590_disc_data {
Michael Holzheucced1dd2007-02-05 21:18:26 +010047 struct tape390_crypt_info crypt_info;
Stefan Baderb6cba4e2006-03-24 03:15:29 -080048 int read_back_op;
49};
50
Michael Holzheucced1dd2007-02-05 21:18:26 +010051#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 Baderb6cba4e2006-03-24 03:15:29 -080056struct 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
123struct tape_3590_med_sense {
124 unsigned int macst:4;
125 unsigned int masst:4;
Michael Holzheucced1dd2007-02-05 21:18:26 +0100126 char pad1[7];
127 unsigned int flags;
128 char pad2[116];
129} __attribute__ ((packed));
130
Michael Holzheue2963062007-05-04 18:47:53 +0200131struct tape_3590_rdc_data {
132 char data[64];
133} __attribute__ ((packed));
134
Michael Holzheucced1dd2007-02-05 21:18:26 +0100135/* Datastructures for 3592 encryption support */
136
137struct tape3592_kekl {
138 __u8 flags;
139 char label[64];
140} __attribute__ ((packed));
141
142struct tape3592_kekl_pair {
143 __u8 count;
144 struct tape3592_kekl kekl[2];
145} __attribute__ ((packed));
146
147struct 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
157struct 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
165struct 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 Baderb6cba4e2006-03-24 03:15:29 -0800172} __attribute__ ((packed));
173
174#endif /* _TAPE_3590_H */