Imported Upstream version 1.1.11
[platform/upstream/cdrkit.git] / wodim / scsimmc.h
1 /*
2  * This file has been modified for the cdrkit suite.
3  *
4  * The behaviour and appearence of the program code below can differ to a major
5  * extent from the version distributed by the original author(s).
6  *
7  * For details, see Changelog file distributed with the cdrkit package. If you
8  * received this file from another source then ask the distributing person for
9  * a log of modifications.
10  *
11  */
12
13 /* @(#)scsimmc.h        1.11 04/03/01 Copyright 1997-2004 J. Schilling */
14 /*
15  *      Definitions for SCSI/mmc compliant drives
16  *
17  *      Copyright (c) 1997-2004 J. Schilling
18  */
19 /*
20  * This program is free software; you can redistribute it and/or modify
21  * it under the terms of the GNU General Public License version 2
22  * as published by the Free Software Foundation.
23  *
24  * This program is distributed in the hope that it will be useful,
25  * but WITHOUT ANY WARRANTY; without even the implied warranty of
26  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
27  * GNU General Public License for more details.
28  *
29  * You should have received a copy of the GNU General Public License along with
30  * this program; see the file COPYING.  If not, write to the Free Software
31  * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
32  */
33
34 #ifndef _SCSIMMC_H
35 #define _SCSIMMC_H
36
37 #include <utypes.h>
38 #include <btorder.h>
39
40 typedef struct opc {
41         Uchar   opc_speed[2];
42         Uchar   opc_val[6];
43 } opc_t;
44
45 #if defined(_BIT_FIELDS_LTOH)   /* Intel bitorder */
46
47 struct disk_info {
48         Uchar   data_len[2];            /* Data len without this info   */
49         Ucbit   disk_status     : 2;    /* Status of the disk           */
50         Ucbit   sess_status     : 2;    /* Status of last session       */
51         Ucbit   erasable        : 1;    /* Disk is erasable             */
52         Ucbit   res2            : 3;    /* Reserved                     */
53         Uchar   first_track;            /* # of first track on disk     */
54         Uchar   numsess;                /* # of sessions                */
55         Uchar   first_track_ls;         /* First track in last sessaion */
56         Uchar   last_track_ls;          /* Last track in last sessaion  */
57         Ucbit   bg_format_stat  : 2;    /* Background format status     */
58         Ucbit   dbit            : 1;    /* Dirty Bit of defect table    */
59         Ucbit   res7_34         : 2;    /* Reserved                     */
60         Ucbit   uru             : 1;    /* This is an unrestricted disk */
61         Ucbit   dbc_v           : 1;    /* Disk bar code valid          */
62         Ucbit   did_v           : 1;    /* Disk id valid                */
63         Uchar   disk_type;              /* Disk type                    */
64         Uchar   res9[3];                /* Reserved                     */
65         Uchar   disk_id[4];             /* Disk identification          */
66         Uchar   last_lead_in[4];        /* Last session lead in time    */
67         Uchar   last_lead_out[4];       /* Last session lead out time   */
68         Uchar   disk_barcode[8];        /* Disk bar code                */
69         Uchar   res32;                  /* Reserved                     */
70         Uchar   num_opc_entries;        /* # of OPC table entries       */
71         opc_t   opc_table[1];           /* OPC table                    */
72 };
73
74 #else                           /* Motorola bitorder */
75
76 struct disk_info {
77         Uchar   data_len[2];            /* Data len without this info   */
78         Ucbit   res2            : 3;    /* Reserved                     */
79         Ucbit   erasable        : 1;    /* Disk is erasable             */
80         Ucbit   sess_status     : 2;    /* Status of last session       */
81         Ucbit   disk_status     : 2;    /* Status of the disk           */
82         Uchar   first_track;            /* # of first track on disk     */
83         Uchar   numsess;                /* # of sessions                */
84         Uchar   first_track_ls;         /* First track in last sessaion */
85         Uchar   last_track_ls;          /* Last track in last sessaion  */
86         Ucbit   did_v           : 1;    /* Disk id valid                */
87         Ucbit   dbc_v           : 1;    /* Disk bar code valid          */
88         Ucbit   uru             : 1;    /* This is an unrestricted disk */
89         Ucbit   res7_34         : 2;    /* Reserved                     */
90         Ucbit   dbit            : 1;    /* Dirty Bit of defect table    */
91         Ucbit   bg_format_stat  : 2;    /* Background format status     */
92         Uchar   disk_type;              /* Disk type                    */
93         Uchar   res9[3];                /* Reserved                     */
94         Uchar   disk_id[4];             /* Disk identification          */
95         Uchar   last_lead_in[4];        /* Last session lead in time    */
96         Uchar   last_lead_out[4];       /* Last session lead out time   */
97         Uchar   disk_barcode[8];        /* Disk bar code                */
98         Uchar   res32;                  /* Reserved                     */
99         Uchar   num_opc_entries;        /* # of OPC table entries       */
100         opc_t   opc_table[1];           /* OPC table                    */
101 };
102
103 #endif
104
105 struct cd_mode_data {
106         struct scsi_mode_header header;
107         union cd_pagex  {
108                 struct cd_mode_page_05  page05;
109                 struct cd_mode_page_2A  page2A;
110         } pagex;
111 };
112
113 struct tocheader {
114         Uchar   len[2];
115         Uchar   first;
116         Uchar   last;
117 };
118
119 /*
120  * Full TOC entry
121  */
122 struct ftrackdesc {
123         Uchar   sess_number;
124
125 #if defined(_BIT_FIELDS_LTOH)           /* Intel byteorder */
126         Ucbit   control         : 4;
127         Ucbit   adr             : 4;
128 #else                                   /* Motorola byteorder */
129         Ucbit   adr             : 4;
130         Ucbit   control         : 4;
131 #endif
132
133         Uchar   track;
134         Uchar   point;
135         Uchar   amin;
136         Uchar   asec;
137         Uchar   aframe;
138         Uchar   res7;
139         Uchar   pmin;
140         Uchar   psec;
141         Uchar   pframe;
142 };
143
144 struct fdiskinfo {
145         struct tocheader        hd;
146         struct ftrackdesc       desc[1];
147 };
148
149
150
151 #if defined(_BIT_FIELDS_LTOH)   /* Intel bitorder */
152
153 struct atipdesc {
154         Ucbit   ref_speed       : 3;    /* Reference speed              */
155         Ucbit   res4_3          : 1;    /* Reserved                     */
156         Ucbit   ind_wr_power    : 3;    /* Indicative tgt writing power */
157         Ucbit   res4_7          : 1;    /* Reserved (must be "1")       */
158         Ucbit   res5_05         : 6;    /* Reserved                     */
159         Ucbit   uru             : 1;    /* Disk is for unrestricted use */
160         Ucbit   res5_7          : 1;    /* Reserved (must be "0")       */
161         Ucbit   a3_v            : 1;    /* A 3 Values valid             */
162         Ucbit   a2_v            : 1;    /* A 2 Values valid             */
163         Ucbit   a1_v            : 1;    /* A 1 Values valid             */
164         Ucbit   sub_type        : 3;    /* Disc sub type                */
165         Ucbit   erasable        : 1;    /* Disk is erasable             */
166         Ucbit   res6_7          : 1;    /* Reserved (must be "1")       */
167         Uchar   lead_in[4];             /* Lead in time                 */
168         Uchar   lead_out[4];            /* Lead out time                */
169         Uchar   res15;                  /* Reserved                     */
170         Ucbit   clv_high        : 4;    /* Highes usable CLV recording speed */
171         Ucbit   clv_low         : 3;    /* Lowest usable CLV recording speed */
172         Ucbit   res16_7         : 1;    /* Reserved (must be "0")       */
173         Ucbit   res17_0         : 1;    /* Reserved                     */
174         Ucbit   tgt_y_pow       : 3;    /* Tgt y val of the power mod fun */
175         Ucbit   power_mult      : 3;    /* Power multiplication factor  */
176         Ucbit   res17_7         : 1;    /* Reserved (must be "0")       */
177         Ucbit   res_18_30       : 4;    /* Reserved                     */
178         Ucbit   rerase_pwr_ratio: 3;    /* Recommended erase/write power*/
179         Ucbit   res18_7         : 1;    /* Reserved (must be "1")       */
180         Uchar   res19;                  /* Reserved                     */
181         Uchar   a2[3];                  /* A 2 Values                   */
182         Uchar   res23;                  /* Reserved                     */
183         Uchar   a3[3];                  /* A 3 Vaules                   */
184         Uchar   res27;                  /* Reserved                     */
185 };
186
187 #else                           /* Motorola bitorder */
188
189 struct atipdesc {
190         Ucbit   res4_7          : 1;    /* Reserved (must be "1")       */
191         Ucbit   ind_wr_power    : 3;    /* Indicative tgt writing power */
192         Ucbit   res4_3          : 1;    /* Reserved                     */
193         Ucbit   ref_speed       : 3;    /* Reference speed              */
194         Ucbit   res5_7          : 1;    /* Reserved (must be "0")       */
195         Ucbit   uru             : 1;    /* Disk is for unrestricted use */
196         Ucbit   res5_05         : 6;    /* Reserved                     */
197         Ucbit   res6_7          : 1;    /* Reserved (must be "1")       */
198         Ucbit   erasable        : 1;    /* Disk is erasable             */
199         Ucbit   sub_type        : 3;    /* Disc sub type                */
200         Ucbit   a1_v            : 1;    /* A 1 Values valid             */
201         Ucbit   a2_v            : 1;    /* A 2 Values valid             */
202         Ucbit   a3_v            : 1;    /* A 3 Values valid             */
203         Uchar   lead_in[4];             /* Lead in time                 */
204         Uchar   lead_out[4];            /* Lead out time                */
205         Uchar   res15;                  /* Reserved                     */
206         Ucbit   res16_7         : 1;    /* Reserved (must be "0")       */
207         Ucbit   clv_low         : 3;    /* Lowest usable CLV recording speed */
208         Ucbit   clv_high        : 4;    /* Highes usable CLV recording speed */
209         Ucbit   res17_7         : 1;    /* Reserved (must be "0")       */
210         Ucbit   power_mult      : 3;    /* Power multiplication factor  */
211         Ucbit   tgt_y_pow       : 3;    /* Tgt y val of the power mod fun */
212         Ucbit   res17_0         : 1;    /* Reserved                     */
213         Ucbit   res18_7         : 1;    /* Reserved (must be "1")       */
214         Ucbit   rerase_pwr_ratio: 3;    /* Recommended erase/write power*/
215         Ucbit   res_18_30       : 4;    /* Reserved                     */
216         Uchar   res19;                  /* Reserved                     */
217         Uchar   a2[3];                  /* A 2 Values                   */
218         Uchar   res23;                  /* Reserved                     */
219         Uchar   a3[3];                  /* A 3 Vaules                   */
220         Uchar   res27;                  /* Reserved                     */
221 };
222
223 #endif
224
225 struct atipinfo {
226         struct tocheader        hd;
227         struct atipdesc         desc;
228 };
229
230 /*
231  * XXX Check how we may merge Track_info & Rzone_info
232  */
233 #if defined(_BIT_FIELDS_LTOH)   /* Intel bitorder */
234
235 struct track_info {
236         Uchar   data_len[2];            /* Data len without this info   */
237         Uchar   track_number;           /* Track number for this info   */
238         Uchar   session_number;         /* Session number for this info */
239         Uchar   res4;                   /* Reserved                     */
240         Ucbit   track_mode      : 4;    /* Track mode (Q-sub control)   */
241         Ucbit   copy            : 1;    /* This track is a higher copy  */
242         Ucbit   damage          : 1;    /* if 1 & nwa_valid 0: inc track*/
243         Ucbit   res5_67         : 2;    /* Reserved                     */
244         Ucbit   data_mode       : 4;    /* Data mode of this track      */
245         Ucbit   fp              : 1;    /* This is a fixed packet track */
246         Ucbit   packet          : 1;    /* This track is in packet mode */
247         Ucbit   blank           : 1;    /* This is an invisible track   */
248         Ucbit   rt              : 1;    /* This is a reserved track     */
249         Ucbit   nwa_valid       : 1;    /* Next writable addr valid     */
250         Ucbit   res7_17         : 7;    /* Reserved                     */
251         Uchar   track_start[4];         /* Track start address          */
252         Uchar   next_writable_addr[4];  /* Next writable address        */
253         Uchar   free_blocks[4];         /* Free usr blocks in this track*/
254         Uchar   packet_size[4];         /* Packet size if in fixed mode */
255         Uchar   track_size[4];          /* # of user data blocks in trk */
256 };
257
258 #else                           /* Motorola bitorder */
259
260 struct track_info {
261         Uchar   data_len[2];            /* Data len without this info   */
262         Uchar   track_number;           /* Track number for this info   */
263         Uchar   session_number;         /* Session number for this info */
264         Uchar   res4;                   /* Reserved                     */
265         Ucbit   res5_67         : 2;    /* Reserved                     */
266         Ucbit   damage          : 1;    /* if 1 & nwa_valid 0: inc track*/
267         Ucbit   copy            : 1;    /* This track is a higher copy  */
268         Ucbit   track_mode      : 4;    /* Track mode (Q-sub control)   */
269         Ucbit   rt              : 1;    /* This is a reserved track     */
270         Ucbit   blank           : 1;    /* This is an invisible track   */
271         Ucbit   packet          : 1;    /* This track is in packet mode */
272         Ucbit   fp              : 1;    /* This is a fixed packet track */
273         Ucbit   data_mode       : 4;    /* Data mode of this track      */
274         Ucbit   res7_17         : 7;    /* Reserved                     */
275         Ucbit   nwa_valid       : 1;    /* Next writable addr valid     */
276         Uchar   track_start[4];         /* Track start address          */
277         Uchar   next_writable_addr[4];  /* Next writable address        */
278         Uchar   free_blocks[4];         /* Free usr blocks in this track*/
279         Uchar   packet_size[4];         /* Packet size if in fixed mode */
280         Uchar   track_size[4];          /* # of user data blocks in trk */
281 };
282
283 #endif
284
285 /*
286  * XXX Check how we may merge Track_info & Rzone_info
287  */
288 #if defined(_BIT_FIELDS_LTOH)   /* Intel bitorder */
289
290 struct rzone_info {
291         Uchar   data_len[2];            /* Data len without this info   */
292         Uchar   rzone_num_lsb;          /* RZone number LSB             */
293         Uchar   border_num_lsb;         /* Border number LSB            */
294         Uchar   res_4;                  /* Reserved                     */
295         Ucbit   res5_04         : 5;    /* Reserved                     */
296         Ucbit   damage          : 1;    /* Damaged RZone                */
297         Ucbit   res5_67         : 2;    /* Reserved                     */
298         Ucbit   res6_04         : 5;    /* Reserved                     */
299         Ucbit   incremental     : 1;    /* RZone is to be written incremental */
300         Ucbit   blank           : 1;    /* RZone is blank               */
301         Ucbit   rt              : 1;    /* RZone is reserved            */
302         Ucbit   nwa_v           : 1;    /* Next WR address is valid     */
303         Ucbit   lra_v           : 1;    /* Last rec address is valid    */
304         Ucbit   res7_27         : 6;    /* Reserved                     */
305         Uchar   rzone_start[4];         /* RZone start address          */
306         Uchar   next_recordable_addr[4]; /* Next recordable address     */
307         Uchar   free_blocks[4];         /* Free blocks in RZone         */
308         Uchar   block_factor[4];        /* # of sectors of disc acc unit */
309         Uchar   rzone_size[4];          /* RZone size                   */
310         Uchar   last_recorded_addr[4];  /* Last Recorded addr in RZone  */
311         Uchar   rzone_num_msb;          /* RZone number MSB             */
312         Uchar   border_num_msb;         /* Border number MSB            */
313         Uchar   res_34_35[2];           /* Reserved                     */
314 };
315
316 #else                           /* Motorola bitorder */
317
318 struct rzone_info {
319         Uchar   data_len[2];            /* Data len without this info   */
320         Uchar   rzone_num_lsb;          /* RZone number LSB             */
321         Uchar   border_num_lsb;         /* Border number LSB            */
322         Uchar   res_4;                  /* Reserved                     */
323         Ucbit   res5_67         : 2;    /* Reserved                     */
324         Ucbit   damage          : 1;    /* Damaged RZone                */
325         Ucbit   res5_04         : 5;    /* Reserved                     */
326         Ucbit   rt              : 1;    /* RZone is reserved            */
327         Ucbit   blank           : 1;    /* RZone is blank               */
328         Ucbit   incremental     : 1;    /* RZone is to be written incremental */
329         Ucbit   res6_04         : 5;    /* Reserved                     */
330         Ucbit   res7_27         : 6;    /* Reserved                     */
331         Ucbit   lra_v           : 1;    /* Last rec address is valid    */
332         Ucbit   nwa_v           : 1;    /* Next WR address is valid     */
333         Uchar   rzone_start[4];         /* RZone start address          */
334         Uchar   next_recordable_addr[4]; /* Next recordable address     */
335         Uchar   free_blocks[4];         /* Free blocks in RZone         */
336         Uchar   block_factor[4];        /* # of sectors of disc acc unit */
337         Uchar   rzone_size[4];          /* RZone size                   */
338         Uchar   last_recorded_addr[4];  /* Last Recorded addr in RZone  */
339         Uchar   rzone_num_msb;          /* RZone number MSB             */
340         Uchar   border_num_msb;         /* Border number MSB            */
341         Uchar   res_34_35[2];           /* Reserved                     */
342 };
343
344 #endif
345
346 #if defined(_BIT_FIELDS_LTOH)   /* Intel bitorder */
347
348 struct dvd_structure_00 {
349         Uchar   data_len[2];            /* Data len without this info   */
350         Uchar   res23[2];               /* Reserved                     */
351         Ucbit   book_version    : 4;    /* DVD Book version             */
352         Ucbit   book_type       : 4;    /* DVD Book type                */
353         Ucbit   minimum_rate    : 4;    /* Minimum data rate (coded)    */
354         Ucbit   disc_size       : 4;    /* Disc size (coded)            */
355         Ucbit   layer_type      : 4;    /* Layer type                   */
356         Ucbit   track_path      : 1;    /* 0 = parallel, 1 = opposit dir*/
357         Ucbit   numlayers       : 2;    /* Number of Layers (0 == 1)    */
358         Ucbit   res2_7          : 1;    /* Reserved                     */
359         Ucbit   track_density   : 4;    /* Track density (coded)        */
360         Ucbit   linear_density  : 4;    /* Linear data density (coded)  */
361         Uchar   res8;                   /* Reserved                     */
362         Uchar   phys_start[3];          /* Starting Physical sector #   */
363         Uchar   res12;                  /* Reserved                     */
364         Uchar   phys_end[3];            /* End physical data sector #   */
365         Uchar   res16;                  /* Reserved                     */
366         Uchar   end_layer0[3];          /* End sector # in layer        */
367         Ucbit   res20           : 7;    /* Reserved                     */
368         Ucbit   bca             : 1;    /* BCA flag bit                 */
369 };
370
371 #else                           /* Motorola bitorder */
372
373 struct dvd_structure_00 {
374         Uchar   data_len[2];            /* Data len without this info   */
375         Uchar   res23[2];               /* Reserved                     */
376         Ucbit   book_type       : 4;    /* DVD Book type                */
377         Ucbit   book_version    : 4;    /* DVD Book version             */
378         Ucbit   disc_size       : 4;    /* Disc size (coded)            */
379         Ucbit   minimum_rate    : 4;    /* Minimum data rate (coded)    */
380         Ucbit   res2_7          : 1;    /* Reserved                     */
381         Ucbit   numlayers       : 2;    /* Number of Layers (0 == 1)    */
382         Ucbit   track_path      : 1;    /* 0 = parallel, 1 = opposit dir*/
383         Ucbit   layer_type      : 4;    /* Layer type                   */
384         Ucbit   linear_density  : 4;    /* Linear data density (coded)  */
385         Ucbit   track_density   : 4;    /* Track density (coded)        */
386         Uchar   res8;                   /* Reserved                     */
387         Uchar   phys_start[3];          /* Starting Physical sector #   */
388         Uchar   res12;                  /* Reserved                     */
389         Uchar   phys_end[3];            /* End physical data sector #   */
390         Uchar   res16;                  /* Reserved                     */
391         Uchar   end_layer0[3];          /* End sector # in layer        */
392         Ucbit   bca             : 1;    /* BCA flag bit                 */
393         Ucbit   res20           : 7;    /* Reserved                     */
394 };
395
396 #endif
397
398 struct dvd_structure_01 {
399         Uchar   data_len[2];            /* Data len without this info   */
400         Uchar   res23[2];               /* Reserved                     */
401         Uchar   copyr_prot_type;        /* Copyright prot system type   */
402         Uchar   region_mgt_info;        /* Region management info       */
403         Uchar   res67[2];               /* Reserved                     */
404 };
405
406 struct dvd_structure_02 {
407         Uchar   data_len[2];            /* Data len without this info   */
408         Uchar   res23[2];               /* Reserved                     */
409         Uchar   key_data[2048];         /* Disc Key data                */
410 };
411
412 struct dvd_structure_03 {
413         Uchar   data_len[2];            /* Data len without this info   */
414         Uchar   res23[2];               /* Reserved                     */
415         Uchar   bca_info[1];            /* BCA information (12-188 bytes)*/
416 };
417
418 struct dvd_structure_04 {
419         Uchar   data_len[2];            /* Data len without this info   */
420         Uchar   res23[2];               /* Reserved                     */
421         Uchar   man_info[2048];         /* Disc manufacturing info      */
422 };
423
424 #if defined(_BIT_FIELDS_LTOH)   /* Intel bitorder */
425
426 struct dvd_structure_05 {
427         Uchar   data_len[2];            /* Data len without this info   */
428         Uchar   res23[2];               /* Reserved                     */
429         Ucbit   res4_03         : 4;    /* Reserved                     */
430         Ucbit   cgms            : 2;    /* CGMS (see below)             */
431         Ucbit   res4_6          : 1;    /* Reserved                     */
432         Ucbit   cpm             : 1;    /* This is copyrighted material */
433         Uchar   res57[3];               /* Reserved                     */
434 };
435
436 #else                           /* Motorola bitorder */
437
438 struct dvd_structure_05 {
439         Uchar   data_len[2];            /* Data len without this info   */
440         Uchar   res23[2];               /* Reserved                     */
441         Ucbit   cpm             : 1;    /* This is copyrighted material */
442         Ucbit   res4_6          : 1;    /* Reserved                     */
443         Ucbit   cgms            : 2;    /* CGMS (see below)             */
444         Ucbit   res4_03         : 4;    /* Reserved                     */
445         Uchar   res57[3];               /* Reserved                     */
446 };
447
448 #endif
449
450 #define CGMS_PERMITTED          0       /* Unlimited copy permitted     */
451 #define CGMS_RES                1       /* Reserved                     */
452 #define CGMS_ONE_COPY           2       /* One copy permitted           */
453 #define CGMS_NO_COPY            3       /* No copy permitted            */
454
455 struct dvd_structure_0D {
456         Uchar   data_len[2];            /* Data len without this info   */
457         Uchar   res23[2];               /* Reserved                     */
458         Uchar   last_rma_sector[2];     /* Last recorded RMA sector #   */
459         Uchar   rmd_bytes[1];           /* Content of Record man area   */
460 };
461
462 struct dvd_structure_0E {
463         Uchar   data_len[2];            /* Data len without this info   */
464         Uchar   res23[2];               /* Reserved                     */
465         Uchar   field_id;               /* Field ID (1)                 */
466         Uchar   application_code;       /* Disc Application code        */
467         Uchar   phys_data;              /* Disc Phisical Data           */
468         Uchar   last_recordable_addr[3]; /* Last addr of recordable area */
469         Uchar   res_a[2];               /* Reserved                     */
470         Uchar   field_id_2;             /* Field ID (2)                 */
471         Uchar   ind_wr_power;           /* Recommended writing power    */
472         Uchar   ind_wavelength;         /* Wavelength for ind_wr_power  */
473         Uchar   opt_wr_strategy[4];     /* Optimum write Strategy       */
474         Uchar   res_b[1];               /* Reserved                     */
475         Uchar   field_id_3;             /* Field ID (3)                 */
476         Uchar   man_id[6];              /* Manufacturer ID              */
477         Uchar   res_m1;                 /* Reserved                     */
478         Uchar   field_id_4;             /* Field ID (4)                 */
479         Uchar   man_id2[6];             /* Manufacturer ID              */
480         Uchar   res_m2;                 /* Reserved                     */
481 };
482
483 struct dvd_structure_0F {
484         Uchar   data_len[2];            /* Data len without this info   */
485         Uchar   res23[2];               /* Reserved                     */
486         Uchar   res45[2];               /* Reserved                     */
487         Uchar   random[2];              /* Random number                */
488         Uchar   year[4];                /* Year (ascii)                 */
489         Uchar   month[2];               /* Month (ascii)                */
490         Uchar   day[2];                 /* Day (ascii)                  */
491         Uchar   hour[2];                /* Hour (ascii)                 */
492         Uchar   minute[2];              /* Minute (ascii)               */
493         Uchar   second[2];              /* Second (ascii)               */
494 };
495
496 struct dvd_structure_0F_w {
497         Uchar   data_len[2];            /* Data len without this info   */
498         Uchar   res23[2];               /* Reserved                     */
499         Uchar   res45[2];               /* Reserved                     */
500         Uchar   year[4];                /* Year (ascii)                 */
501         Uchar   month[2];               /* Month (ascii)                */
502         Uchar   day[2];                 /* Day (ascii)                  */
503         Uchar   hour[2];                /* Hour (ascii)                 */
504         Uchar   minute[2];              /* Minute (ascii)               */
505         Uchar   second[2];              /* Second (ascii)               */
506 };
507
508 struct mmc_cue {
509         Uchar   cs_ctladr;              /* CTL/ADR for this track       */
510         Uchar   cs_tno;                 /* This track number            */
511         Uchar   cs_index;               /* Index within this track      */
512         Uchar   cs_dataform;            /* Data form                    */
513         Uchar   cs_scms;                /* Serial copy management       */
514         Uchar   cs_min;                 /* Absolute time minutes        */
515         Uchar   cs_sec;                 /* Absolute time seconds        */
516         Uchar   cs_frame;               /* Absolute time frames         */
517 };
518
519 struct mmc_performance_header {
520         Uchar   p_datalen[4];           /* Performance Data length      */
521 #if defined(_BIT_FIELDS_LTOH)   /* Intel bitorder */
522         Ucbit   p_exept         :1;     /* Nominal vs. Exept. conditions*/
523         Ucbit   p_write         :1;     /* Write vs. Read performance   */
524         Ucbit   p_res_4         :6;     /* Reserved bits...             */
525 #else                           /* Motorola bitorder */
526         Ucbit   p_res_4         :6;     /* Reserved bits...             */
527         Ucbit   p_write         :1;     /* Write vs. Read performance   */
528         Ucbit   p_exept         :1;     /* Nominal vs. Exept. conditions*/
529 #endif
530         Uchar   p_res[3];               /* Reserved bytes               */
531 };
532
533
534 struct mmc_performance {                /* Type == 00 (nominal)         */
535         Uchar   start_lba[4];           /* Starting LBA                 */
536         Uchar   start_perf[4];          /* Start Performance            */
537         Uchar   end_lba[4];             /* Ending LBA                   */
538         Uchar   end_perf[4];            /* Ending Performance           */
539 };
540
541 struct mmc_exceptions {                 /* Type == 00 (execptions)      */
542         Uchar   lba[4];                 /* LBA                          */
543         Uchar   time[2];                /* Time                         */
544 };
545
546 struct mmc_write_speed {                /* Type == 00 (write speed)     */
547 #if defined(_BIT_FIELDS_LTOH)   /* Intel bitorder */
548         Ucbit   p_mrw           :1;     /* Suitable for mixed read/write*/
549         Ucbit   p_exact         :1;     /* Speed count for whole media  */
550         Ucbit   p_rdd           :1;     /* Media rotational control     */
551         Ucbit   p_wrc           :2;     /* Write rotational control     */
552         Ucbit   p_res           :3;     /* Reserved bits...             */
553 #else                           /* Motorola bitorder */
554         Ucbit   p_res           :3;     /* Reserved bits...             */
555         Ucbit   p_wrc           :2;     /* Write rotational control     */
556         Ucbit   p_rdd           :1;     /* Media rotational control     */
557         Ucbit   p_exact         :1;     /* Speed count for whole media  */
558         Ucbit   p_mrw           :1;     /* Suitable for mixed read/write*/
559 #endif
560         Uchar   res[3];                 /* Reserved Bytes               */
561         Uchar   end_lba[4];             /* Ending LBA                   */
562         Uchar   read_speed[4];          /* Read Speed                   */
563         Uchar   write_speed[4];         /* Write Speed                  */
564 };
565
566 #define WRC_DEF_RC      0               /* Media default rotational control */
567 #define WRC_CAV         1               /* CAV                              */
568
569
570 struct mmc_streaming {                  /* Performance for set streaming*/
571 #if defined(_BIT_FIELDS_LTOH)   /* Intel bitorder */
572         Ucbit   p_ra            :1;     /* Random Acess                 */
573         Ucbit   p_exact         :1;     /* Set values exactly           */
574         Ucbit   p_rdd           :1;     /* Restore unit defaults        */
575         Ucbit   p_wrc           :2;     /* Write rotational control     */
576         Ucbit   p_res           :3;     /* Reserved bits...             */
577 #else                           /* Motorola bitorder */
578         Ucbit   p_res           :3;     /* Reserved bits...             */
579         Ucbit   p_wrc           :2;     /* Write rotational control     */
580         Ucbit   p_rdd           :1;     /* Restore unit defaults        */
581         Ucbit   p_exact         :1;     /* Set values exactly           */
582         Ucbit   p_ra            :1;     /* Random Acess                 */
583 #endif
584         Uchar   res[3];                 /* Reserved Bytes               */
585         Uchar   start_lba[4];           /* Starting LBA                 */
586         Uchar   end_lba[4];             /* Ending LBA                   */
587         Uchar   read_size[4];           /* Read Size                    */
588         Uchar   read_time[4];           /* Read Time                    */
589         Uchar   write_size[4];          /* Write Size                   */
590         Uchar   write_time[4];          /* Write Time                   */
591 };
592
593 #endif  /* _SCSIMMC_H */