Merge branch 'origin'
[pandora-kernel.git] / drivers / s390 / block / dasd_eckd.h
1 /* 
2  * File...........: linux/drivers/s390/block/dasd_eckd.h
3  * Author(s)......: Holger Smolinski <Holger.Smolinski@de.ibm.com>
4  *                  Horst Hummel <Horst.Hummel@de.ibm.com> 
5  * Bugreports.to..: <Linux390@de.ibm.com>
6  * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000
7  *
8  */
9
10 #ifndef DASD_ECKD_H
11 #define DASD_ECKD_H
12
13 /*****************************************************************************
14  * SECTION: CCW Definitions
15  ****************************************************************************/
16 #define DASD_ECKD_CCW_WRITE              0x05
17 #define DASD_ECKD_CCW_READ               0x06
18 #define DASD_ECKD_CCW_WRITE_HOME_ADDRESS 0x09
19 #define DASD_ECKD_CCW_READ_HOME_ADDRESS  0x0a
20 #define DASD_ECKD_CCW_WRITE_KD           0x0d
21 #define DASD_ECKD_CCW_READ_KD            0x0e
22 #define DASD_ECKD_CCW_ERASE              0x11
23 #define DASD_ECKD_CCW_READ_COUNT         0x12
24 #define DASD_ECKD_CCW_SLCK               0x14
25 #define DASD_ECKD_CCW_WRITE_RECORD_ZERO  0x15
26 #define DASD_ECKD_CCW_READ_RECORD_ZERO   0x16
27 #define DASD_ECKD_CCW_WRITE_CKD          0x1d
28 #define DASD_ECKD_CCW_READ_CKD           0x1e
29 #define DASD_ECKD_CCW_PSF                0x27
30 #define DASD_ECKD_CCW_RSSD               0x3e
31 #define DASD_ECKD_CCW_LOCATE_RECORD      0x47
32 #define DASD_ECKD_CCW_DEFINE_EXTENT      0x63
33 #define DASD_ECKD_CCW_WRITE_MT           0x85
34 #define DASD_ECKD_CCW_READ_MT            0x86
35 #define DASD_ECKD_CCW_WRITE_KD_MT        0x8d
36 #define DASD_ECKD_CCW_READ_KD_MT         0x8e
37 #define DASD_ECKD_CCW_RELEASE            0x94
38 #define DASD_ECKD_CCW_READ_CKD_MT        0x9e
39 #define DASD_ECKD_CCW_WRITE_CKD_MT       0x9d
40 #define DASD_ECKD_CCW_RESERVE            0xB4
41
42 /*
43  *Perform Subsystem Function / Sub-Orders
44  */
45 #define PSF_ORDER_PRSSD                  0x18
46
47 /*****************************************************************************
48  * SECTION: Type Definitions
49  ****************************************************************************/
50
51 struct eckd_count {
52         __u16 cyl;
53         __u16 head;
54         __u8 record;
55         __u8 kl;
56         __u16 dl;
57 } __attribute__ ((packed));
58
59 struct ch_t {
60         __u16 cyl;
61         __u16 head;
62 } __attribute__ ((packed));
63
64 struct chs_t {
65         __u16 cyl;
66         __u16 head;
67         __u32 sector;
68 } __attribute__ ((packed));
69
70 struct chr_t {
71         __u16 cyl;
72         __u16 head;
73         __u8 record;
74 } __attribute__ ((packed));
75
76 struct geom_t {
77         __u16 cyl;
78         __u16 head;
79         __u32 sector;
80 } __attribute__ ((packed));
81
82 struct eckd_home {
83         __u8 skip_control[14];
84         __u16 cell_number;
85         __u8 physical_addr[3];
86         __u8 flag;
87         struct ch_t track_addr;
88         __u8 reserved;
89         __u8 key_length;
90         __u8 reserved2[2];
91 } __attribute__ ((packed));
92
93 struct DE_eckd_data {
94         struct {
95                 unsigned char perm:2;   /* Permissions on this extent */
96                 unsigned char reserved:1;
97                 unsigned char seek:2;   /* Seek control */
98                 unsigned char auth:2;   /* Access authorization */
99                 unsigned char pci:1;    /* PCI Fetch mode */
100         } __attribute__ ((packed)) mask;
101         struct {
102                 unsigned char mode:2;   /* Architecture mode */
103                 unsigned char ckd:1;    /* CKD Conversion */
104                 unsigned char operation:3;      /* Operation mode */
105                 unsigned char cfw:1;    /* Cache fast write */
106                 unsigned char dfw:1;    /* DASD fast write */
107         } __attribute__ ((packed)) attributes;
108         __u16 blk_size;         /* Blocksize */
109         __u16 fast_write_id;
110         __u8 ga_additional;     /* Global Attributes Additional */
111         __u8 ga_extended;       /* Global Attributes Extended   */
112         struct ch_t beg_ext;
113         struct ch_t end_ext;
114         unsigned long long ep_sys_time; /* Ext Parameter - System Time Stamp */
115         __u8 ep_format;        /* Extended Parameter format byte       */
116         __u8 ep_prio;          /* Extended Parameter priority I/O byte */
117         __u8 ep_reserved[6];   /* Extended Parameter Reserved          */
118 } __attribute__ ((packed));
119
120 struct LO_eckd_data {
121         struct {
122                 unsigned char orientation:2;
123                 unsigned char operation:6;
124         } __attribute__ ((packed)) operation;
125         struct {
126                 unsigned char last_bytes_used:1;
127                 unsigned char reserved:6;
128                 unsigned char read_count_suffix:1;
129         } __attribute__ ((packed)) auxiliary;
130         __u8 unused;
131         __u8 count;
132         struct ch_t seek_addr;
133         struct chr_t search_arg;
134         __u8 sector;
135         __u16 length;
136 } __attribute__ ((packed));
137
138 struct dasd_eckd_characteristics {
139         __u16 cu_type;
140         struct {
141                 unsigned char support:2;
142                 unsigned char async:1;
143                 unsigned char reserved:1;
144                 unsigned char cache_info:1;
145                 unsigned char model:3;
146         } __attribute__ ((packed)) cu_model;
147         __u16 dev_type;
148         __u8 dev_model;
149         struct {
150                 unsigned char mult_burst:1;
151                 unsigned char RT_in_LR:1;
152                 unsigned char reserved1:1;
153                 unsigned char RD_IN_LR:1;
154                 unsigned char reserved2:4;
155                 unsigned char reserved3:8;
156                 unsigned char defect_wr:1;
157                 unsigned char XRC_supported:1; 
158                 unsigned char reserved4:1;
159                 unsigned char striping:1;
160                 unsigned char reserved5:4;
161                 unsigned char cfw:1;
162                 unsigned char reserved6:2;
163                 unsigned char cache:1;
164                 unsigned char dual_copy:1;
165                 unsigned char dfw:1;
166                 unsigned char reset_alleg:1;
167                 unsigned char sense_down:1;
168         } __attribute__ ((packed)) facilities;
169         __u8 dev_class;
170         __u8 unit_type;
171         __u16 no_cyl;
172         __u16 trk_per_cyl;
173         __u8 sec_per_trk;
174         __u8 byte_per_track[3];
175         __u16 home_bytes;
176         __u8 formula;
177         union {
178                 struct {
179                         __u8 f1;
180                         __u16 f2;
181                         __u16 f3;
182                 } __attribute__ ((packed)) f_0x01;
183                 struct {
184                         __u8 f1;
185                         __u8 f2;
186                         __u8 f3;
187                         __u8 f4;
188                         __u8 f5;
189                 } __attribute__ ((packed)) f_0x02;
190         } __attribute__ ((packed)) factors;
191         __u16 first_alt_trk;
192         __u16 no_alt_trk;
193         __u16 first_dia_trk;
194         __u16 no_dia_trk;
195         __u16 first_sup_trk;
196         __u16 no_sup_trk;
197         __u8 MDR_ID;
198         __u8 OBR_ID;
199         __u8 director;
200         __u8 rd_trk_set;
201         __u16 max_rec_zero;
202         __u8 reserved1;
203         __u8 RWANY_in_LR;
204         __u8 factor6;
205         __u8 factor7;
206         __u8 factor8;
207         __u8 reserved2[3];
208         __u8 reserved3[10];
209 } __attribute__ ((packed));
210
211 struct dasd_eckd_confdata {
212         struct {
213                 struct {
214                         unsigned char identifier:2;
215                         unsigned char token_id:1;
216                         unsigned char sno_valid:1;
217                         unsigned char subst_sno:1;
218                         unsigned char recNED:1;
219                         unsigned char emuNED:1;
220                         unsigned char reserved:1;
221                 } __attribute__ ((packed)) flags;
222                 __u8 descriptor;
223                 __u8 dev_class;
224                 __u8 reserved;
225                 unsigned char dev_type[6];
226                 unsigned char dev_model[3];
227                 unsigned char HDA_manufacturer[3];
228                 unsigned char HDA_location[2];
229                 unsigned char HDA_seqno[12];
230                 __u16 ID;
231         } __attribute__ ((packed)) ned1;
232         struct {
233                 struct {
234                         unsigned char identifier:2;
235                         unsigned char token_id:1;
236                         unsigned char sno_valid:1;
237                         unsigned char subst_sno:1;
238                         unsigned char recNED:1;
239                         unsigned char emuNED:1;
240                         unsigned char reserved:1;
241                 } __attribute__ ((packed)) flags;
242                 __u8 descriptor;
243                 __u8 reserved[2];
244                 unsigned char dev_type[6];
245                 unsigned char dev_model[3];
246                 unsigned char DASD_manufacturer[3];
247                 unsigned char DASD_location[2];
248                 unsigned char DASD_seqno[12];
249                 __u16 ID;
250         } __attribute__ ((packed)) ned2;
251         struct {
252                 struct {
253                         unsigned char identifier:2;
254                         unsigned char token_id:1;
255                         unsigned char sno_valid:1;
256                         unsigned char subst_sno:1;
257                         unsigned char recNED:1;
258                         unsigned char emuNED:1;
259                         unsigned char reserved:1;
260                 } __attribute__ ((packed)) flags;
261                 __u8 descriptor;
262                 __u8 reserved[2];
263                 unsigned char cont_type[6];
264                 unsigned char cont_model[3];
265                 unsigned char cont_manufacturer[3];
266                 unsigned char cont_location[2];
267                 unsigned char cont_seqno[12];
268                 __u16 ID;
269         } __attribute__ ((packed)) ned3;
270         struct {
271                 struct {
272                         unsigned char identifier:2;
273                         unsigned char token_id:1;
274                         unsigned char sno_valid:1;
275                         unsigned char subst_sno:1;
276                         unsigned char recNED:1;
277                         unsigned char emuNED:1;
278                         unsigned char reserved:1;
279                 } __attribute__ ((packed)) flags;
280                 __u8 descriptor;
281                 __u8 reserved[2];
282                 unsigned char cont_type[6];
283                 unsigned char empty[3];
284                 unsigned char cont_manufacturer[3];
285                 unsigned char cont_location[2];
286                 unsigned char cont_seqno[12];
287                 __u16 ID;
288         } __attribute__ ((packed)) ned4;
289         unsigned char ned5[32];
290         unsigned char ned6[32];
291         unsigned char ned7[32];
292         struct {
293                 struct {
294                         unsigned char identifier:2;
295                         unsigned char reserved:6;
296                 } __attribute__ ((packed)) flags;
297                 __u8 selector;
298                 __u16 interfaceID;
299                 __u32 reserved;
300                 __u16 subsystemID;
301                 struct {
302                         unsigned char sp0:1;
303                         unsigned char sp1:1;
304                         unsigned char reserved:5;
305                         unsigned char scluster:1;
306                 } __attribute__ ((packed)) spathID;
307                 __u8 unit_address;
308                 __u8 dev_ID;
309                 __u8 dev_address;
310                 __u8 adapterID;
311                 __u16 link_address;
312                 struct {
313                         unsigned char parallel:1;
314                         unsigned char escon:1;
315                         unsigned char reserved:1;
316                         unsigned char ficon:1;
317                         unsigned char reserved2:4;
318                 } __attribute__ ((packed)) protocol_type;
319                 struct {
320                         unsigned char PID_in_236:1;
321                         unsigned char reserved:7;
322                 } __attribute__ ((packed)) format_flags;
323                 __u8 log_dev_address;
324                 unsigned char reserved2[12];
325         } __attribute__ ((packed)) neq;
326 } __attribute__ ((packed));
327
328 struct dasd_eckd_path {
329         __u8 opm;
330         __u8 ppm;
331         __u8 npm;
332 };
333
334 /*
335  * Perform Subsystem Function - Prepare for Read Subsystem Data  
336  */
337 struct dasd_psf_prssd_data {
338         unsigned char order;
339         unsigned char flags;
340         unsigned char reserved[4];
341         unsigned char suborder;
342         unsigned char varies[9];
343 } __attribute__ ((packed));
344
345 #endif                          /* DASD_ECKD_H */