1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
2 /*
3  * Libbrasero-media
4  * Copyright (C) Philippe Rouquier 2005-2009 <bonfire-app@wanadoo.fr>
5  *
6  * Libbrasero-media is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * The Libbrasero-media authors hereby grant permission for non-GPL compatible
12  * GStreamer plugins to be used and distributed together with GStreamer
13  * and Libbrasero-media. This permission is above and beyond the permissions granted
14  * by the GPL license by which Libbrasero-media is covered. If you modify this code
15  * you may extend this exception to your version of the code, but you are not
16  * obligated to do so. If you do not wish to do so, delete this exception
17  * statement from your version.
18  *
19  * Libbrasero-media is distributed in the hope that it will be useful,
20  * but WITHOUT ANY WARRANTY; without even the implied warranty of
21  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22  * GNU Library General Public License for more details.
23  *
24  * You should have received a copy of the GNU General Public License
25  * along with this program; if not, write to:
26  * 	The Free Software Foundation, Inc.,
27  * 	51 Franklin Street, Fifth Floor
28  * 	Boston, MA  02110-1301, USA.
29  */
30 
31 #include <glib.h>
32 
33 #include "scsi-base.h"
34 
35 #ifndef _SCSI_GET_CONFIGURATION_H
36 #define _SCSI_GET_CONFIGURATION_H
37 
38 G_BEGIN_DECLS
39 
40 typedef enum {
41 BRASERO_SCSI_PROF_EMPTY				= 0x0000,
42 BRASERO_SCSI_PROF_NON_REMOVABLE		= 0x0001,
43 BRASERO_SCSI_PROF_REMOVABLE		= 0x0002,
44 BRASERO_SCSI_PROF_MO_ERASABLE		= 0x0003,
45 BRASERO_SCSI_PROF_MO_WRITE_ONCE		= 0x0004,
46 BRASERO_SCSI_PROF_MO_ADVANCED_STORAGE	= 0x0005,
47 	/* reserved */
48 BRASERO_SCSI_PROF_CDROM			= 0x0008,
49 BRASERO_SCSI_PROF_CDR			= 0x0009,
50 BRASERO_SCSI_PROF_CDRW			= 0x000A,
51 	/* reserved */
52 BRASERO_SCSI_PROF_DVD_ROM		= 0x0010,
53 BRASERO_SCSI_PROF_DVD_R			= 0x0011,
54 BRASERO_SCSI_PROF_DVD_RAM		= 0x0012,
55 BRASERO_SCSI_PROF_DVD_RW_RESTRICTED	= 0x0013,
56 BRASERO_SCSI_PROF_DVD_RW_SEQUENTIAL	= 0x0014,
57 BRASERO_SCSI_PROF_DVD_R_DL_SEQUENTIAL	= 0x0015,
58 BRASERO_SCSI_PROF_DVD_R_DL_JUMP		= 0x0016,
59 	/* reserved */
60 BRASERO_SCSI_PROF_DVD_RW_PLUS		= 0x001A,
61 BRASERO_SCSI_PROF_DVD_R_PLUS		= 0x001B,
62 	/* reserved */
63 BRASERO_SCSI_PROF_DDCD_ROM		= 0x0020,
64 BRASERO_SCSI_PROF_DDCD_R		= 0x0021,
65 BRASERO_SCSI_PROF_DDCD_RW		= 0x0022,
66 	/* reserved */
67 BRASERO_SCSI_PROF_DVD_RW_PLUS_DL	= 0x002A,
68 BRASERO_SCSI_PROF_DVD_R_PLUS_DL		= 0x002B,
69 	/* reserved */
70 BRASERO_SCSI_PROF_BD_ROM		= 0x0040,
71 BRASERO_SCSI_PROF_BR_R_SEQUENTIAL	= 0x0041,
72 BRASERO_SCSI_PROF_BR_R_RANDOM		= 0x0042,
73 BRASERO_SCSI_PROF_BD_RW			= 0x0043,
74 BRASERO_SCSI_PROF_HD_DVD_ROM		= 0x0050,
75 BRASERO_SCSI_PROF_HD_DVD_R		= 0x0051,
76 BRASERO_SCSI_PROF_HD_DVD_RAM		= 0x0052,
77 	/* reserved */
78 } BraseroScsiProfile;
79 
80 typedef enum {
81 BRASERO_SCSI_INTERFACE_NONE		= 0x00000000,
82 BRASERO_SCSI_INTERFACE_SCSI		= 0x00000001,
83 BRASERO_SCSI_INTERFACE_ATAPI		= 0x00000002,
84 BRASERO_SCSI_INTERFACE_FIREWIRE_95	= 0x00000003,
85 BRASERO_SCSI_INTERFACE_FIREWIRE_A	= 0x00000004,
86 BRASERO_SCSI_INTERFACE_FCP		= 0x00000005,
87 BRASERO_SCSI_INTERFACE_FIREWIRE_B	= 0x00000006,
88 BRASERO_SCSI_INTERFACE_SERIAL_ATAPI	= 0x00000007,
89 BRASERO_SCSI_INTERFACE_USB		= 0x00000008
90 } BraseroScsiInterface;
91 
92 typedef enum {
93 BRASERO_SCSI_LOADING_CADDY		= 0x000,
94 BRASERO_SCSI_LOADING_TRAY		= 0x001,
95 BRASERO_SCSI_LOADING_POPUP		= 0x002,
96 BRASERO_SCSI_LOADING_EMBED_CHANGER_IND	= 0X004,
97 BRASERO_SCSI_LOADING_EMBED_CHANGER_MAG	= 0x005
98 } BraseroScsiLoadingMech;
99 
100 typedef enum {
101 BRASERO_SCSI_FEAT_PROFILES		= 0x0000,
102 BRASERO_SCSI_FEAT_CORE			= 0x0001,
103 BRASERO_SCSI_FEAT_MORPHING		= 0x0002,
104 BRASERO_SCSI_FEAT_REMOVABLE		= 0x0003,
105 BRASERO_SCSI_FEAT_WRT_PROTECT		= 0x0004,
106 	/* reserved */
107 BRASERO_SCSI_FEAT_RD_RANDOM		= 0x0010,
108 	/* reserved */
109 BRASERO_SCSI_FEAT_RD_MULTI		= 0x001D,
110 BRASERO_SCSI_FEAT_RD_CD			= 0x001E,
111 BRASERO_SCSI_FEAT_RD_DVD		= 0x001F,
112 BRASERO_SCSI_FEAT_WRT_RANDOM		= 0x0020,
113 BRASERO_SCSI_FEAT_WRT_INCREMENT		= 0x0021,
114 BRASERO_SCSI_FEAT_WRT_ERASE		= 0x0022,
115 BRASERO_SCSI_FEAT_WRT_FORMAT		= 0x0023,
116 BRASERO_SCSI_FEAT_DEFECT_MNGT		= 0x0024,
117 BRASERO_SCSI_FEAT_WRT_ONCE		= 0x0025,
118 BRASERO_SCSI_FEAT_RESTRICT_OVERWRT	= 0x0026,
119 BRASERO_SCSI_FEAT_WRT_CAV_CDRW		= 0x0027,
120 BRASERO_SCSI_FEAT_MRW			= 0x0028,
121 BRASERO_SCSI_FEAT_DEFECT_REPORT		= 0x0029,
122 BRASERO_SCSI_FEAT_WRT_DVDRW_PLUS	= 0x002A,
123 BRASERO_SCSI_FEAT_WRT_DVDR_PLUS		= 0x002B,
124 BRASERO_SCSI_FEAT_RIGID_OVERWRT		= 0x002C,
125 BRASERO_SCSI_FEAT_WRT_TAO		= 0x002D,
126 BRASERO_SCSI_FEAT_WRT_SAO_RAW		= 0x002E,
127 BRASERO_SCSI_FEAT_WRT_DVD_LESS		= 0x002F,
128 BRASERO_SCSI_FEAT_RD_DDCD		= 0x0030,
129 BRASERO_SCSI_FEAT_WRT_DDCD		= 0x0031,
130 BRASERO_SCSI_FEAT_RW_DDCD		= 0x0032,
131 BRASERO_SCSI_FEAT_LAYER_JUMP		= 0x0033,
132 BRASERO_SCSI_FEAT_WRT_CDRW		= 0x0037,
133 BRASERO_SCSI_FEAT_BDR_POW		= 0x0038,
134 	/* reserved */
135 BRASERO_SCSI_FEAT_WRT_DVDRW_PLUS_DL		= 0x003A,
136 BRASERO_SCSI_FEAT_WRT_DVDR_PLUS_DL		= 0x003B,
137 	/* reserved */
138 BRASERO_SCSI_FEAT_RD_BD			= 0x0040,
139 BRASERO_SCSI_FEAT_WRT_BD		= 0x0041,
140 BRASERO_SCSI_FEAT_TSR			= 0x0042,
141 	/* reserved */
142 BRASERO_SCSI_FEAT_RD_HDDVD		= 0x0050,
143 BRASERO_SCSI_FEAT_WRT_HDDVD		= 0x0051,
144 	/* reserved */
145 BRASERO_SCSI_FEAT_HYBRID_DISC		= 0x0080,
146 	/* reserved */
147 BRASERO_SCSI_FEAT_PWR_MNGT		= 0x0100,
148 BRASERO_SCSI_FEAT_SMART			= 0x0101,
149 BRASERO_SCSI_FEAT_EMBED_CHNGR		= 0x0102,
150 BRASERO_SCSI_FEAT_AUDIO_PLAY		= 0x0103,
151 BRASERO_SCSI_FEAT_FIRM_UPGRADE		= 0x0104,
152 BRASERO_SCSI_FEAT_TIMEOUT		= 0x0105,
153 BRASERO_SCSI_FEAT_DVD_CSS		= 0x0106,
154 BRASERO_SCSI_FEAT_REAL_TIME_STREAM	= 0x0107,
155 BRASERO_SCSI_FEAT_DRIVE_SERIAL_NB	= 0x0108,
156 BRASERO_SCSI_FEAT_MEDIA_SERIAL_NB	= 0x0109,
157 BRASERO_SCSI_FEAT_DCB			= 0x010A,
158 BRASERO_SCSI_FEAT_DVD_CPRM		= 0x010B,
159 BRASERO_SCSI_FEAT_FIRMWARE_INFO		= 0x010C,
160 BRASERO_SCSI_FEAT_AACS			= 0x010D,
161 	/* reserved */
162 BRASERO_SCSI_FEAT_VCPS			= 0x0110,
163 } BraseroScsiFeatureType;
164 
165 
166 #if G_BYTE_ORDER == G_LITTLE_ENDIAN
167 
168 struct _BraseroScsiFeatureDesc {
169 	uchar code		[2];
170 
171 	uchar current		:1;
172 	uchar persistent	:1;
173 	uchar version		:4;
174 	uchar reserved		:2;
175 
176 	uchar add_len;
177 	uchar data		[0];
178 };
179 
180 struct _BraseroScsiCoreDescMMC4 {
181 	/* this is for MMC4 & MMC5 */
182 	uchar dbe		:1;
183 	uchar inq2		:1;
184 	uchar reserved0		:6;
185 
186 	uchar reserved1		[3];
187 };
188 
189 struct _BraseroScsiCoreDescMMC3 {
190 	uchar interface		[4];
191 };
192 
193 struct _BraseroScsiProfileDesc {
194 	uchar number		[2];
195 
196 	uchar currentp		:1;
197 	uchar reserved0		:7;
198 
199 	uchar reserved1;
200 };
201 
202 struct _BraseroScsiMorphingDesc {
203 	uchar async		:1;
204 	uchar op_chge_event	:1;
205 	uchar reserved0		:6;
206 
207 	uchar reserved1		[3];
208 };
209 
210 struct _BraseroScsiMediumDesc {
211 	uchar lock		:1;
212 	uchar reserved		:1;
213 	uchar prevent_jmp	:1;
214 	uchar eject		:1;
215 	uchar reserved1		:1;
216 	uchar loading_mech	:3;
217 
218 	uchar reserved2		[3];
219 };
220 
221 struct _BraseroScsiWrtProtectDesc {
222 	uchar sswpp		:1;
223 	uchar spwp		:1;
224 	uchar wdcb		:1;
225 	uchar dwp		:1;
226 	uchar reserved0		:4;
227 
228 	uchar reserved1		[3];
229 };
230 
231 struct _BraseroScsiRandomReadDesc {
232 	uchar block_size	[4];
233 	uchar blocking		[2];
234 
235 	uchar pp		:1;
236 	uchar reserved0		:7;
237 
238 	uchar reserved1;
239 };
240 
241 struct _BraseroScsiCDReadDesc {
242 	uchar cdtext		:1;
243 	uchar c2flags		:1;
244 	uchar reserved0		:5;
245 	uchar dap		:1;
246 
247 	uchar reserved1		[3];
248 };
249 
250 /* MMC5 only otherwise just the header */
251 struct _BraseroScsiDVDReadDesc {
252 	uchar multi110		:1;
253 	uchar reserved0		:7;
254 
255 	uchar reserved1;
256 
257 	uchar dual_R		:1;
258 	uchar reserved2		:7;
259 
260 	uchar reserved3;
261 };
262 
263 struct _BraseroScsiRandomWriteDesc {
264 	/* MMC4/MMC5 only */
265 	uchar last_lba		[4];
266 
267 	uchar block_size	[4];
268 	uchar blocking		[2];
269 
270 	uchar pp		:1;
271 	uchar reserved0		:7;
272 
273 	uchar reserved1;
274 };
275 
276 struct _BraseroScsiIncrementalWrtDesc {
277 	uchar block_type	[2];
278 
279 	uchar buf		:1;
280 	uchar arsv		:1;		/* MMC5 */
281 	uchar trio		:1;		/* MMC5 */
282 	uchar reserved0		:5;
283 
284 	uchar num_link_sizes;
285 	uchar links		[0];
286 };
287 
288 /* MMC5 only */
289 struct _BraseroScsiFormatDesc {
290 	uchar cert		:1;
291 	uchar qcert		:1;
292 	uchar expand		:1;
293 	uchar renosa		:1;
294 	uchar reserved0		:4;
295 
296 	uchar reserved1		[3];
297 
298 	uchar rrm		:1;
299 	uchar reserved2		:7;
300 
301 	uchar reserved3		[3];
302 };
303 
304 struct _BraseroScsiDefectMngDesc {
305 	uchar reserved0		:7;
306 	uchar ssa		:1;
307 
308 	uchar reserved1		[3];
309 };
310 
311 struct _BraseroScsiWrtOnceDesc {
312 	uchar lba_size		[4];
313 	uchar blocking		[2];
314 
315 	uchar pp		:1;
316 	uchar reserved0		:7;
317 
318 	uchar reserved1;
319 };
320 
321 struct _BraseroScsiMRWDesc {
322 	uchar wrt_CD		:1;
323 	uchar rd_DVDplus	:1;
324 	uchar wrt_DVDplus	:1;
325 	uchar reserved0		:5;
326 
327 	uchar reserved1		[3];
328 };
329 
330 struct _BraseroScsiDefectReportDesc {
331 	uchar drt_dm		:1;
332 	uchar reserved0		:7;
333 
334 	uchar dbi_zones_num;
335 	uchar num_entries	[2];
336 };
337 
338 struct _BraseroScsiDVDRWplusDesc {
339 	uchar write		:1;
340 	uchar reserved0		:7;
341 
342 	uchar close		:1;
343 	uchar quick_start	:1;
344 	uchar reserved1		:6;
345 
346 	uchar reserved2		[2];
347 };
348 
349 struct _BraseroScsiDVDRplusDesc {
350 	uchar write		:1;
351 	uchar reserved0		:7;
352 
353 	uchar reserved1		[3];
354 };
355 
356 struct _BraseroScsiRigidOverwrtDesc {
357 	uchar blank		:1;
358 	uchar intermediate	:1;
359 	uchar dsdr		:1;
360 	uchar dsdg		:1;
361 	uchar reserved0		:4;
362 
363 	uchar reserved1		[3];
364 };
365 
366 struct _BraseroScsiCDTAODesc {
367 	uchar RW_subcode	:1;
368 	uchar CDRW		:1;
369 	uchar dummy		:1;
370 	uchar RW_pack		:1;
371 	uchar RW_raw		:1;
372 	uchar reserved0		:1;
373 	uchar buf		:1;
374 	uchar reserved1		:1;
375 
376 	uchar reserved2;
377 
378 	uchar data_type		[2];
379 };
380 
381 struct _BraseroScsiCDSAODesc {
382 	uchar rw_sub_chan	:1;
383 	uchar rw_CD		:1;
384 	uchar dummy		:1;
385 	uchar raw		:1;
386 	uchar raw_multi		:1;
387 	uchar sao		:1;
388 	uchar buf		:1;
389 	uchar reserved		:1;
390 
391 	uchar max_cue_size	[3];
392 };
393 
394 struct _BraseroScsiDVDRWlessWrtDesc {
395 	uchar reserved0		:1;
396 	uchar rw_DVD		:1;
397 	uchar dummy		:1;
398 	uchar dual_layer_r	:1;
399 	uchar reserved1		:2;
400 	uchar buf		:1;
401 	uchar reserved2		:1;
402 
403 	uchar reserved3		[3];
404 };
405 
406 struct _BraseroScsiCDRWWrtDesc {
407 	uchar reserved0;
408 
409 	uchar sub0		:1;
410 	uchar sub1		:1;
411 	uchar sub2		:1;
412 	uchar sub3		:1;
413 	uchar sub4		:1;
414 	uchar sub5		:1;
415 	uchar sub6		:1;
416 	uchar sub7		:1;
417 
418 	uchar reserved1		[2];
419 };
420 
421 struct _BraseroScsiDVDRWDLDesc {
422 	uchar write		:1;
423 	uchar reserved0		:7;
424 
425 	uchar close		:1;
426 	uchar quick_start	:1;
427 	uchar reserved1		:6;
428 
429 	uchar reserved2		[2];
430 };
431 
432 struct _BraseroScsiDVDRDLDesc {
433 	uchar write		:1;
434 	uchar reserved0		:7;
435 
436 	uchar reserved1		[3];
437 };
438 
439 struct _BraseroScsiBDReadDesc {
440 	uchar reserved		[4];
441 
442 	uchar class0_RE_v8	:1;
443 	uchar class0_RE_v9	:1;
444 	uchar class0_RE_v10	:1;
445 	uchar class0_RE_v11	:1;
446 	uchar class0_RE_v12	:1;
447 	uchar class0_RE_v13	:1;
448 	uchar class0_RE_v14	:1;
449 	uchar class0_RE_v15	:1;
450 
451 	uchar class0_RE_v0	:1;
452 	uchar class0_RE_v1	:1;
453 	uchar class0_RE_v2	:1;
454 	uchar class0_RE_v3	:1;
455 	uchar class0_RE_v4	:1;
456 	uchar class0_RE_v5	:1;
457 	uchar class0_RE_v6	:1;
458 	uchar class0_RE_v7	:1;
459 
460 	uchar class1_RE_v8	:1;
461 	uchar class1_RE_v9	:1;
462 	uchar class1_RE_v10	:1;
463 	uchar class1_RE_v11	:1;
464 	uchar class1_RE_v12	:1;
465 	uchar class1_RE_v13	:1;
466 	uchar class1_RE_v14	:1;
467 	uchar class1_RE_v15	:1;
468 
469 	uchar class1_RE_v0	:1;
470 	uchar class1_RE_v1	:1;
471 	uchar class1_RE_v2	:1;
472 	uchar class1_RE_v3	:1;
473 	uchar class1_RE_v4	:1;
474 	uchar class1_RE_v5	:1;
475 	uchar class1_RE_v6	:1;
476 	uchar class1_RE_v7	:1;
477 
478 	uchar class2_RE_v8	:1;
479 	uchar class2_RE_v9	:1;
480 	uchar class2_RE_v10	:1;
481 	uchar class2_RE_v11	:1;
482 	uchar class2_RE_v12	:1;
483 	uchar class2_RE_v13	:1;
484 	uchar class2_RE_v14	:1;
485 	uchar class2_RE_v15	:1;
486 
487 	uchar class2_RE_v0	:1;
488 	uchar class2_RE_v1	:1;
489 	uchar class2_RE_v2	:1;
490 	uchar class2_RE_v3	:1;
491 	uchar class2_RE_v4	:1;
492 	uchar class2_RE_v5	:1;
493 	uchar class2_RE_v6	:1;
494 	uchar class2_RE_v7	:1;
495 
496 	uchar class3_RE_v8	:1;
497 	uchar class3_RE_v9	:1;
498 	uchar class3_RE_v10	:1;
499 	uchar class3_RE_v11	:1;
500 	uchar class3_RE_v12	:1;
501 	uchar class3_RE_v13	:1;
502 	uchar class3_RE_v14	:1;
503 	uchar class3_RE_v15	:1;
504 
505 	uchar class3_RE_v0	:1;
506 	uchar class3_RE_v1	:1;
507 	uchar class3_RE_v2	:1;
508 	uchar class3_RE_v3	:1;
509 	uchar class3_RE_v4	:1;
510 	uchar class3_RE_v5	:1;
511 	uchar class3_RE_v6	:1;
512 	uchar class3_RE_v7	:1;
513 
514 	uchar class0_R_v8	:1;
515 	uchar class0_R_v9	:1;
516 	uchar class0_R_v10	:1;
517 	uchar class0_R_v11	:1;
518 	uchar class0_R_v12	:1;
519 	uchar class0_R_v13	:1;
520 	uchar class0_R_v14	:1;
521 	uchar class0_R_v15	:1;
522 
523 	uchar class0_R_v0	:1;
524 	uchar class0_R_v1	:1;
525 	uchar class0_R_v2	:1;
526 	uchar class0_R_v3	:1;
527 	uchar class0_R_v4	:1;
528 	uchar class0_R_v5	:1;
529 	uchar class0_R_v6	:1;
530 	uchar class0_R_v7	:1;
531 
532 	uchar class1_R_v8	:1;
533 	uchar class1_R_v9	:1;
534 	uchar class1_R_v10	:1;
535 	uchar class1_R_v11	:1;
536 	uchar class1_R_v12	:1;
537 	uchar class1_R_v13	:1;
538 	uchar class1_R_v14	:1;
539 	uchar class1_R_v15	:1;
540 
541 	uchar class1_R_v0	:1;
542 	uchar class1_R_v1	:1;
543 	uchar class1_R_v2	:1;
544 	uchar class1_R_v3	:1;
545 	uchar class1_R_v4	:1;
546 	uchar class1_R_v5	:1;
547 	uchar class1_R_v6	:1;
548 	uchar class1_R_v7	:1;
549 
550 	uchar class2_R_v8	:1;
551 	uchar class2_R_v9	:1;
552 	uchar class2_R_v10	:1;
553 	uchar class2_R_v11	:1;
554 	uchar class2_R_v12	:1;
555 	uchar class2_R_v13	:1;
556 	uchar class2_R_v14	:1;
557 	uchar class2_R_v15	:1;
558 
559 	uchar class2_R_v0	:1;
560 	uchar class2_R_v1	:1;
561 	uchar class2_R_v2	:1;
562 	uchar class2_R_v3	:1;
563 	uchar class2_R_v4	:1;
564 	uchar class2_R_v5	:1;
565 	uchar class2_R_v6	:1;
566 	uchar class2_R_v7	:1;
567 
568 	uchar class3_R_v8	:1;
569 	uchar class3_R_v9	:1;
570 	uchar class3_R_v10	:1;
571 	uchar class3_R_v11	:1;
572 	uchar class3_R_v12	:1;
573 	uchar class3_R_v13	:1;
574 	uchar class3_R_v14	:1;
575 	uchar class3_R_v15	:1;
576 
577 	uchar class3_R_v0	:1;
578 	uchar class3_R_v1	:1;
579 	uchar class3_R_v2	:1;
580 	uchar class3_R_v3	:1;
581 	uchar class3_R_v4	:1;
582 	uchar class3_R_v5	:1;
583 	uchar class3_R_v6	:1;
584 	uchar class3_R_v7	:1;
585 };
586 
587 struct _BraseroScsiBDWriteDesc {
588 	uchar reserved		[4];
589 
590 	uchar class0_RE_v8	:1;
591 	uchar class0_RE_v9	:1;
592 	uchar class0_RE_v10	:1;
593 	uchar class0_RE_v11	:1;
594 	uchar class0_RE_v12	:1;
595 	uchar class0_RE_v13	:1;
596 	uchar class0_RE_v14	:1;
597 	uchar class0_RE_v15	:1;
598 
599 	uchar class0_RE_v0	:1;
600 	uchar class0_RE_v1	:1;
601 	uchar class0_RE_v2	:1;
602 	uchar class0_RE_v3	:1;
603 	uchar class0_RE_v4	:1;
604 	uchar class0_RE_v5	:1;
605 	uchar class0_RE_v6	:1;
606 	uchar class0_RE_v7	:1;
607 
608 	uchar class1_RE_v8	:1;
609 	uchar class1_RE_v9	:1;
610 	uchar class1_RE_v10	:1;
611 	uchar class1_RE_v11	:1;
612 	uchar class1_RE_v12	:1;
613 	uchar class1_RE_v13	:1;
614 	uchar class1_RE_v14	:1;
615 	uchar class1_RE_v15	:1;
616 
617 	uchar class1_RE_v0	:1;
618 	uchar class1_RE_v1	:1;
619 	uchar class1_RE_v2	:1;
620 	uchar class1_RE_v3	:1;
621 	uchar class1_RE_v4	:1;
622 	uchar class1_RE_v5	:1;
623 	uchar class1_RE_v6	:1;
624 	uchar class1_RE_v7	:1;
625 
626 	uchar class2_RE_v8	:1;
627 	uchar class2_RE_v9	:1;
628 	uchar class2_RE_v10	:1;
629 	uchar class2_RE_v11	:1;
630 	uchar class2_RE_v12	:1;
631 	uchar class2_RE_v13	:1;
632 	uchar class2_RE_v14	:1;
633 	uchar class2_RE_v15	:1;
634 
635 	uchar class2_RE_v0	:1;
636 	uchar class2_RE_v1	:1;
637 	uchar class2_RE_v2	:1;
638 	uchar class2_RE_v3	:1;
639 	uchar class2_RE_v4	:1;
640 	uchar class2_RE_v5	:1;
641 	uchar class2_RE_v6	:1;
642 	uchar class2_RE_v7	:1;
643 
644 	uchar class3_RE_v8	:1;
645 	uchar class3_RE_v9	:1;
646 	uchar class3_RE_v10	:1;
647 	uchar class3_RE_v11	:1;
648 	uchar class3_RE_v12	:1;
649 	uchar class3_RE_v13	:1;
650 	uchar class3_RE_v14	:1;
651 	uchar class3_RE_v15	:1;
652 
653 	uchar class3_RE_v0	:1;
654 	uchar class3_RE_v1	:1;
655 	uchar class3_RE_v2	:1;
656 	uchar class3_RE_v3	:1;
657 	uchar class3_RE_v4	:1;
658 	uchar class3_RE_v5	:1;
659 	uchar class3_RE_v6	:1;
660 	uchar class3_RE_v7	:1;
661 
662 	uchar class0_R_v8	:1;
663 	uchar class0_R_v9	:1;
664 	uchar class0_R_v10	:1;
665 	uchar class0_R_v11	:1;
666 	uchar class0_R_v12	:1;
667 	uchar class0_R_v13	:1;
668 	uchar class0_R_v14	:1;
669 	uchar class0_R_v15	:1;
670 
671 	uchar class0_R_v0	:1;
672 	uchar class0_R_v1	:1;
673 	uchar class0_R_v2	:1;
674 	uchar class0_R_v3	:1;
675 	uchar class0_R_v4	:1;
676 	uchar class0_R_v5	:1;
677 	uchar class0_R_v6	:1;
678 	uchar class0_R_v7	:1;
679 
680 	uchar class1_R_v8	:1;
681 	uchar class1_R_v9	:1;
682 	uchar class1_R_v10	:1;
683 	uchar class1_R_v11	:1;
684 	uchar class1_R_v12	:1;
685 	uchar class1_R_v13	:1;
686 	uchar class1_R_v14	:1;
687 	uchar class1_R_v15	:1;
688 
689 	uchar class1_R_v0	:1;
690 	uchar class1_R_v1	:1;
691 	uchar class1_R_v2	:1;
692 	uchar class1_R_v3	:1;
693 	uchar class1_R_v4	:1;
694 	uchar class1_R_v5	:1;
695 	uchar class1_R_v6	:1;
696 	uchar class1_R_v7	:1;
697 
698 	uchar class2_R_v8	:1;
699 	uchar class2_R_v9	:1;
700 	uchar class2_R_v10	:1;
701 	uchar class2_R_v11	:1;
702 	uchar class2_R_v12	:1;
703 	uchar class2_R_v13	:1;
704 	uchar class2_R_v14	:1;
705 	uchar class2_R_v15	:1;
706 
707 	uchar class2_R_v0	:1;
708 	uchar class2_R_v1	:1;
709 	uchar class2_R_v2	:1;
710 	uchar class2_R_v3	:1;
711 	uchar class2_R_v4	:1;
712 	uchar class2_R_v5	:1;
713 	uchar class2_R_v6	:1;
714 	uchar class2_R_v7	:1;
715 
716 	uchar class3_R_v8	:1;
717 	uchar class3_R_v9	:1;
718 	uchar class3_R_v10	:1;
719 	uchar class3_R_v11	:1;
720 	uchar class3_R_v12	:1;
721 	uchar class3_R_v13	:1;
722 	uchar class3_R_v14	:1;
723 	uchar class3_R_v15	:1;
724 
725 	uchar class3_R_v0	:1;
726 	uchar class3_R_v1	:1;
727 	uchar class3_R_v2	:1;
728 	uchar class3_R_v3	:1;
729 	uchar class3_R_v4	:1;
730 	uchar class3_R_v5	:1;
731 	uchar class3_R_v6	:1;
732 	uchar class3_R_v7	:1;
733 };
734 
735 struct _BraseroScsiHDDVDReadDesc {
736 	uchar hd_dvd_r		:1;
737 	uchar reserved0		:7;
738 
739 	uchar reserved1;
740 
741 	uchar hd_dvd_ram	:1;
742 	uchar reserved2		:7;
743 
744 	uchar reserved3;
745 };
746 
747 struct _BraseroScsiHDDVDWriteDesc {
748 	uchar hd_dvd_r		:1;
749 	uchar reserved0		:7;
750 
751 	uchar reserved1;
752 
753 	uchar hd_dvd_ram	:1;
754 	uchar reserved2		:7;
755 
756 	uchar reserved3;
757 };
758 
759 struct _BraseroScsiHybridDiscDesc {
760 	uchar ri		:1;
761 	uchar reserved0		:7;
762 
763 	uchar reserved1		[3];
764 };
765 
766 struct _BraseroScsiSmartDesc {
767 	uchar pp		:1;
768 	uchar reserved0		:7;
769 
770 	uchar reserved1		[3];
771 };
772 
773 struct _BraseroScsiEmbedChngDesc {
774 	uchar reserved0		:1;
775 	uchar sdp		:1;
776 	uchar reserved1		:1;
777 	uchar scc		:1;
778 	uchar reserved2		:3;
779 
780 	uchar reserved3		[2];
781 
782 	uchar slot_num		:5;
783 	uchar reserved4		:3;
784 };
785 
786 struct _BraseroScsiExtAudioPlayDesc {
787 	uchar separate_vol	:1;
788 	uchar separate_chnl_mute:1;
789 	uchar scan_command	:1;
790 	uchar reserved0		:5;
791 
792 	uchar reserved1;
793 
794 	uchar number_vol	[2];
795 };
796 
797 struct _BraseroScsiFirmwareUpgrDesc {
798 	uchar m5		:1;
799 	uchar reserved0		:7;
800 
801 	uchar reserved1		[3];
802 };
803 
804 struct _BraseroScsiTimeoutDesc {
805 	uchar group3		:1;
806 	uchar reserved0		:7;
807 
808 	uchar reserved1;
809 	uchar unit_len		[2];
810 };
811 
812 struct _BraseroScsiRTStreamDesc {
813 	uchar stream_wrt	:1;
814 	uchar wrt_spd		:1;
815 	uchar mp2a		:1;
816 	uchar set_cd_spd	:1;
817 	uchar rd_buf_caps_block	:1;
818 	uchar reserved0		:3;
819 
820 	uchar reserved1		[3];
821 };
822 
823 struct _BraseroScsiAACSDesc {
824 	uchar bng		:1;
825 	uchar reserved0		:7;
826 
827 	uchar block_count;
828 
829 	uchar agids_num		:4;
830 	uchar reserved1		:4;
831 
832 	uchar version;
833 };
834 
835 #else
836 
837 struct _BraseroScsiFeatureDesc {
838 	uchar code		[2];
839 
840 	uchar current		:1;
841 	uchar persistent	:1;
842 	uchar version		:4;
843 	uchar reserved		:2;
844 
845 	uchar add_len;
846 	uchar data		[0];
847 };
848 
849 struct _BraseroScsiProfileDesc {
850 	uchar number		[2];
851 
852 	uchar reserved0		:7;
853 	uchar currentp		:1;
854 
855 	uchar reserved1;
856 };
857 
858 struct _BraseroScsiCoreDescMMC4 {
859 	uchar reserved0		:6;
860 	uchar inq2		:1;
861 	uchar dbe		:1;
862 
863   	uchar mmc4		[0];
864 	uchar reserved1		[3];
865 };
866 
867 struct _BraseroScsiCoreDescMMC3 {
868 	uchar interface		[4];
869 };
870 
871 struct _BraseroScsiMorphingDesc {
872 	uchar reserved0		:6;
873 	uchar op_chge_event	:1;
874 	uchar async		:1;
875 
876 	uchar reserved1		[3];
877 };
878 
879 struct _BraseroScsiMediumDesc {
880 	uchar loading_mech	:3;
881 	uchar reserved1		:1;
882 	uchar eject		:1;
883 	uchar prevent_jmp	:1;
884 	uchar reserved		:1;
885 	uchar lock		:1;
886 
887 	uchar reserved2		[3];
888 };
889 
890 struct _BraseroScsiWrtProtectDesc {
891 	uchar reserved0		:4;
892 	uchar dwp		:1;
893 	uchar wdcb		:1;
894 	uchar spwp		:1;
895 	uchar sswpp		:1;
896 
897 	uchar reserved1		[3];
898 };
899 
900 struct _BraseroScsiRandomReadDesc {
901 	uchar block_size	[4];
902 	uchar blocking		[2];
903 
904 	uchar reserved0		:7;
905 	uchar pp		:1;
906 
907 	uchar reserved1;
908 };
909 
910 struct _BraseroScsiCDReadDesc {
911 	uchar dap		:1;
912 	uchar reserved0		:5;
913 	uchar c2flags		:1;
914 	uchar cdtext		:1;
915 
916 	uchar reserved1		[3];
917 };
918 
919 struct _BraseroScsiDVDReadDesc {
920 	uchar reserved0		:7;
921 	uchar multi110		:1;
922 
923 	uchar reserved1;
924 
925 	uchar reserved2		:7;
926 	uchar dual_R		:1;
927 
928 	uchar reserved3;
929 };
930 
931 struct _BraseroScsiRandomWriteDesc {
932 	uchar last_lba		[4];
933 	uchar block_size	[4];
934 	uchar blocking		[2];
935 
936 	uchar reserved0		:7;
937 	uchar pp		:1;
938 
939 	uchar reserved1;
940 };
941 
942 struct _BraseroScsiIncrementalWrtDesc {
943 	uchar block_type	[2];
944 
945 	uchar reserved0		:5;
946 	uchar trio		:1;
947 	uchar arsv		:1;
948 	uchar buf		:1;
949 
950 	uchar num_link_sizes;
951 	uchar links;
952 };
953 
954 struct _BraseroScsiFormatDesc {
955 	uchar reserved0		:4;
956 	uchar renosa		:1;
957 	uchar expand		:1;
958 	uchar qcert		:1;
959 	uchar cert		:1;
960 
961 	uchar reserved1		[3];
962 
963 	uchar reserved2		:7;
964 	uchar rrm		:1;
965 
966 	uchar reserved3		[3];
967 };
968 
969 struct _BraseroScsiDefectMngDesc {
970 	uchar ssa		:1;
971 	uchar reserved0		:7;
972 
973 	uchar reserved1		[3];
974 };
975 
976 struct _BraseroScsiWrtOnceDesc {
977 	uchar lba_size		[4];
978 	uchar blocking		[2];
979 
980 	uchar reserved0		:7;
981 	uchar pp		:1;
982 
983 	uchar reserved1;
984 };
985 
986 struct _BraseroScsiMRWDesc {
987 	uchar reserved0		:5;
988 	uchar wrt_DVDplus	:1;
989 	uchar rd_DVDplus	:1;
990 	uchar wrt_CD		:1;
991 
992 	uchar reserved1		[3];
993 };
994 
995 struct _BraseroScsiDefectReportDesc {
996 	uchar reserved0		:7;
997 	uchar drt_dm		:1;
998 
999 	uchar dbi_zones_num;
1000 	uchar num_entries	[2];
1001 };
1002 
1003 struct _BraseroScsiDVDRWplusDesc {
1004 	uchar reserved0		:7;
1005 	uchar write		:1;
1006 
1007 	uchar reserved1		:6;
1008 	uchar quick_start	:1;
1009 	uchar close		:1;
1010 
1011 	uchar reserved2		[2];
1012 };
1013 
1014 struct _BraseroScsiDVDRplusDesc {
1015 	uchar reserved0		:7;
1016 	uchar write		:1;
1017 
1018 	uchar reserved1		[3];
1019 };
1020 
1021 struct _BraseroScsiRigidOverwrtDesc {
1022 	uchar reserved0		:4;
1023 	uchar dsdg		:1;
1024 	uchar dsdr		:1;
1025 	uchar intermediate	:1;
1026 	uchar blank		:1;
1027 
1028 	uchar reserved1		[3];
1029 };
1030 
1031 struct _BraseroScsiCDTAODesc {
1032 	uchar reserved1		:1;
1033 	uchar buf		:1;
1034 	uchar reserved0		:1;
1035 	uchar RW_raw		:1;
1036 	uchar RW_pack		:1;
1037 	uchar dummy		:1;
1038 	uchar CDRW		:1;
1039 	uchar RW_subcode	:1;
1040 
1041 	uchar reserved2;
1042 
1043 	uchar data_type		[2];
1044 };
1045 
1046 struct _BraseroScsiCDSAODesc {
1047 	uchar reserved		:1;
1048 	uchar buf		:1;
1049 	uchar sao		:1;
1050 	uchar raw_multi		:1;
1051 	uchar raw		:1;
1052 	uchar dummy		:1;
1053 	uchar rw_CD		:1;
1054 	uchar rw_sub_chan	:1;
1055 
1056 	uchar max_cue_size	[3];
1057 };
1058 
1059 struct _BraseroScsiDVDRWlessWrtDesc {
1060 	uchar reserved2		:1;
1061 	uchar buf		:1;
1062 	uchar reserved1		:2;
1063 	uchar dual_layer_r	:1;
1064 	uchar dummy		:1;
1065 	uchar rw_DVD		:1;
1066 	uchar reserved0		:1;
1067 
1068 	uchar reserved3		[3];
1069 };
1070 
1071 struct _BraseroScsiCDRWWrtDesc {
1072 	uchar reserved0;
1073 
1074 	uchar sub7		:1;
1075 	uchar sub6		:1;
1076 	uchar sub5		:1;
1077 	uchar sub4		:1;
1078 	uchar sub3		:1;
1079 	uchar sub2		:1;
1080 	uchar sub1		:1;
1081 	uchar sub0		:1;
1082 
1083 	uchar reserved1		[2];
1084 };
1085 
1086 struct _BraseroScsiDVDRWDLDesc {
1087 	uchar reserved0		:7;
1088 	uchar write		:1;
1089 
1090 	uchar reserved1		:6;
1091 	uchar quick_start	:1;
1092 	uchar close		:1;
1093 
1094 	uchar reserved2		[2];
1095 };
1096 
1097 struct _BraseroScsiDVDRDLDesc {
1098 	uchar reserved0		:7;
1099 	uchar write		:1;
1100 
1101 	uchar reserved1		[3];
1102 };
1103 
1104 struct _BraseroScsiBDReadDesc {
1105 	uchar reserved		[4];
1106 
1107 	uchar class0_RE_v15	:1;
1108 	uchar class0_RE_v14	:1;
1109 	uchar class0_RE_v13	:1;
1110 	uchar class0_RE_v12	:1;
1111 	uchar class0_RE_v11	:1;
1112 	uchar class0_RE_v10	:1;
1113 	uchar class0_RE_v9	:1;
1114 	uchar class0_RE_v8	:1;
1115 
1116 	uchar class0_RE_v7	:1;
1117 	uchar class0_RE_v6	:1;
1118 	uchar class0_RE_v5	:1;
1119 	uchar class0_RE_v4	:1;
1120 	uchar class0_RE_v3	:1;
1121 	uchar class0_RE_v2	:1;
1122 	uchar class0_RE_v1	:1;
1123 	uchar class0_RE_v0	:1;
1124 
1125 	uchar class1_RE_v15	:1;
1126 	uchar class1_RE_v14	:1;
1127 	uchar class1_RE_v13	:1;
1128 	uchar class1_RE_v12	:1;
1129 	uchar class1_RE_v11	:1;
1130 	uchar class1_RE_v10	:1;
1131 	uchar class1_RE_v9	:1;
1132 	uchar class1_RE_v8	:1;
1133 
1134 	uchar class1_RE_v7	:1;
1135 	uchar class1_RE_v6	:1;
1136 	uchar class1_RE_v5	:1;
1137 	uchar class1_RE_v4	:1;
1138 	uchar class1_RE_v3	:1;
1139 	uchar class1_RE_v2	:1;
1140 	uchar class1_RE_v1	:1;
1141 	uchar class1_RE_v0	:1;
1142 
1143 	uchar class2_RE_v15	:1;
1144 	uchar class2_RE_v14	:1;
1145 	uchar class2_RE_v13	:1;
1146 	uchar class2_RE_v12	:1;
1147 	uchar class2_RE_v11	:1;
1148 	uchar class2_RE_v10	:1;
1149 	uchar class2_RE_v9	:1;
1150 	uchar class2_RE_v8	:1;
1151 
1152 	uchar class2_RE_v7	:1;
1153 	uchar class2_RE_v6	:1;
1154 	uchar class2_RE_v5	:1;
1155 	uchar class2_RE_v4	:1;
1156 	uchar class2_RE_v3	:1;
1157 	uchar class2_RE_v2	:1;
1158 	uchar class2_RE_v1	:1;
1159 	uchar class2_RE_v0	:1;
1160 
1161 	uchar class3_RE_v15	:1;
1162 	uchar class3_RE_v14	:1;
1163 	uchar class3_RE_v13	:1;
1164 	uchar class3_RE_v12	:1;
1165 	uchar class3_RE_v11	:1;
1166 	uchar class3_RE_v10	:1;
1167 	uchar class3_RE_v9	:1;
1168 	uchar class3_RE_v8	:1;
1169 
1170 	uchar class3_RE_v7	:1;
1171 	uchar class3_RE_v6	:1;
1172 	uchar class3_RE_v5	:1;
1173 	uchar class3_RE_v4	:1;
1174 	uchar class3_RE_v3	:1;
1175 	uchar class3_RE_v2	:1;
1176 	uchar class3_RE_v1	:1;
1177 	uchar class3_RE_v0	:1;
1178 
1179 	uchar class0_R_v15	:1;
1180 	uchar class0_R_v14	:1;
1181 	uchar class0_R_v13	:1;
1182 	uchar class0_R_v12	:1;
1183 	uchar class0_R_v11	:1;
1184 	uchar class0_R_v10	:1;
1185 	uchar class0_R_v9	:1;
1186 	uchar class0_R_v8	:1;
1187 
1188 	uchar class0_R_v7	:1;
1189 	uchar class0_R_v6	:1;
1190 	uchar class0_R_v5	:1;
1191 	uchar class0_R_v4	:1;
1192 	uchar class0_R_v3	:1;
1193 	uchar class0_R_v2	:1;
1194 	uchar class0_R_v1	:1;
1195 	uchar class0_R_v0	:1;
1196 
1197 	uchar class1_R_v15	:1;
1198 	uchar class1_R_v14	:1;
1199 	uchar class1_R_v13	:1;
1200 	uchar class1_R_v12	:1;
1201 	uchar class1_R_v11	:1;
1202 	uchar class1_R_v10	:1;
1203 	uchar class1_R_v9	:1;
1204 	uchar class1_R_v8	:1;
1205 
1206 	uchar class1_R_v7	:1;
1207 	uchar class1_R_v6	:1;
1208 	uchar class1_R_v5	:1;
1209 	uchar class1_R_v4	:1;
1210 	uchar class1_R_v3	:1;
1211 	uchar class1_R_v2	:1;
1212 	uchar class1_R_v1	:1;
1213 	uchar class1_R_v0	:1;
1214 
1215 	uchar class2_R_v15	:1;
1216 	uchar class2_R_v14	:1;
1217 	uchar class2_R_v13	:1;
1218 	uchar class2_R_v12	:1;
1219 	uchar class2_R_v11	:1;
1220 	uchar class2_R_v10	:1;
1221 	uchar class2_R_v9	:1;
1222 	uchar class2_R_v8	:1;
1223 
1224 	uchar class2_R_v7	:1;
1225 	uchar class2_R_v6	:1;
1226 	uchar class2_R_v5	:1;
1227 	uchar class2_R_v4	:1;
1228 	uchar class2_R_v3	:1;
1229 	uchar class2_R_v2	:1;
1230 	uchar class2_R_v1	:1;
1231 	uchar class2_R_v0	:1;
1232 
1233 	uchar class3_R_v15	:1;
1234 	uchar class3_R_v14	:1;
1235 	uchar class3_R_v13	:1;
1236 	uchar class3_R_v12	:1;
1237 	uchar class3_R_v11	:1;
1238 	uchar class3_R_v10	:1;
1239 	uchar class3_R_v9	:1;
1240 	uchar class3_R_v8	:1;
1241 
1242 	uchar class3_R_v7	:1;
1243 	uchar class3_R_v6	:1;
1244 	uchar class3_R_v5	:1;
1245 	uchar class3_R_v4	:1;
1246 	uchar class3_R_v3	:1;
1247 	uchar class3_R_v2	:1;
1248 	uchar class3_R_v1	:1;
1249 	uchar class3_R_v0	:1;
1250 };
1251 
1252 struct _BraseroScsiBDWriteDesc {
1253 	uchar reserved		[4];
1254 
1255 	uchar class0_RE_v15	:1;
1256 	uchar class0_RE_v14	:1;
1257 	uchar class0_RE_v13	:1;
1258 	uchar class0_RE_v12	:1;
1259 	uchar class0_RE_v11	:1;
1260 	uchar class0_RE_v10	:1;
1261 	uchar class0_RE_v9	:1;
1262 	uchar class0_RE_v8	:1;
1263 
1264 	uchar class0_RE_v7	:1;
1265 	uchar class0_RE_v6	:1;
1266 	uchar class0_RE_v5	:1;
1267 	uchar class0_RE_v4	:1;
1268 	uchar class0_RE_v3	:1;
1269 	uchar class0_RE_v2	:1;
1270 	uchar class0_RE_v1	:1;
1271 	uchar class0_RE_v0	:1;
1272 
1273 	uchar class1_RE_v15	:1;
1274 	uchar class1_RE_v14	:1;
1275 	uchar class1_RE_v13	:1;
1276 	uchar class1_RE_v12	:1;
1277 	uchar class1_RE_v11	:1;
1278 	uchar class1_RE_v10	:1;
1279 	uchar class1_RE_v9	:1;
1280 	uchar class1_RE_v8	:1;
1281 
1282 	uchar class1_RE_v7	:1;
1283 	uchar class1_RE_v6	:1;
1284 	uchar class1_RE_v5	:1;
1285 	uchar class1_RE_v4	:1;
1286 	uchar class1_RE_v3	:1;
1287 	uchar class1_RE_v2	:1;
1288 	uchar class1_RE_v1	:1;
1289 	uchar class1_RE_v0	:1;
1290 
1291 	uchar class2_RE_v15	:1;
1292 	uchar class2_RE_v14	:1;
1293 	uchar class2_RE_v13	:1;
1294 	uchar class2_RE_v12	:1;
1295 	uchar class2_RE_v11	:1;
1296 	uchar class2_RE_v10	:1;
1297 	uchar class2_RE_v9	:1;
1298 	uchar class2_RE_v8	:1;
1299 
1300 	uchar class2_RE_v7	:1;
1301 	uchar class2_RE_v6	:1;
1302 	uchar class2_RE_v5	:1;
1303 	uchar class2_RE_v4	:1;
1304 	uchar class2_RE_v3	:1;
1305 	uchar class2_RE_v2	:1;
1306 	uchar class2_RE_v1	:1;
1307 	uchar class2_RE_v0	:1;
1308 
1309 	uchar class3_RE_v15	:1;
1310 	uchar class3_RE_v14	:1;
1311 	uchar class3_RE_v13	:1;
1312 	uchar class3_RE_v12	:1;
1313 	uchar class3_RE_v11	:1;
1314 	uchar class3_RE_v10	:1;
1315 	uchar class3_RE_v9	:1;
1316 	uchar class3_RE_v8	:1;
1317 
1318 	uchar class3_RE_v7	:1;
1319 	uchar class3_RE_v6	:1;
1320 	uchar class3_RE_v5	:1;
1321 	uchar class3_RE_v4	:1;
1322 	uchar class3_RE_v3	:1;
1323 	uchar class3_RE_v2	:1;
1324 	uchar class3_RE_v1	:1;
1325 	uchar class3_RE_v0	:1;
1326 
1327 	uchar class0_R_v15	:1;
1328 	uchar class0_R_v14	:1;
1329 	uchar class0_R_v13	:1;
1330 	uchar class0_R_v12	:1;
1331 	uchar class0_R_v11	:1;
1332 	uchar class0_R_v10	:1;
1333 	uchar class0_R_v9	:1;
1334 	uchar class0_R_v8	:1;
1335 
1336 	uchar class0_R_v7	:1;
1337 	uchar class0_R_v6	:1;
1338 	uchar class0_R_v5	:1;
1339 	uchar class0_R_v4	:1;
1340 	uchar class0_R_v3	:1;
1341 	uchar class0_R_v2	:1;
1342 	uchar class0_R_v1	:1;
1343 	uchar class0_R_v0	:1;
1344 
1345 	uchar class1_R_v15	:1;
1346 	uchar class1_R_v14	:1;
1347 	uchar class1_R_v13	:1;
1348 	uchar class1_R_v12	:1;
1349 	uchar class1_R_v11	:1;
1350 	uchar class1_R_v10	:1;
1351 	uchar class1_R_v9	:1;
1352 	uchar class1_R_v8	:1;
1353 
1354 	uchar class1_R_v7	:1;
1355 	uchar class1_R_v6	:1;
1356 	uchar class1_R_v5	:1;
1357 	uchar class1_R_v4	:1;
1358 	uchar class1_R_v3	:1;
1359 	uchar class1_R_v2	:1;
1360 	uchar class1_R_v1	:1;
1361 	uchar class1_R_v0	:1;
1362 
1363 	uchar class2_R_v15	:1;
1364 	uchar class2_R_v14	:1;
1365 	uchar class2_R_v13	:1;
1366 	uchar class2_R_v12	:1;
1367 	uchar class2_R_v11	:1;
1368 	uchar class2_R_v10	:1;
1369 	uchar class2_R_v9	:1;
1370 	uchar class2_R_v8	:1;
1371 
1372 	uchar class2_R_v7	:1;
1373 	uchar class2_R_v6	:1;
1374 	uchar class2_R_v5	:1;
1375 	uchar class2_R_v4	:1;
1376 	uchar class2_R_v3	:1;
1377 	uchar class2_R_v2	:1;
1378 	uchar class2_R_v1	:1;
1379 	uchar class2_R_v0	:1;
1380 
1381 	uchar class3_R_v15	:1;
1382 	uchar class3_R_v14	:1;
1383 	uchar class3_R_v13	:1;
1384 	uchar class3_R_v12	:1;
1385 	uchar class3_R_v11	:1;
1386 	uchar class3_R_v10	:1;
1387 	uchar class3_R_v9	:1;
1388 	uchar class3_R_v8	:1;
1389 
1390 	uchar class3_R_v7	:1;
1391 	uchar class3_R_v6	:1;
1392 	uchar class3_R_v5	:1;
1393 	uchar class3_R_v4	:1;
1394 	uchar class3_R_v3	:1;
1395 	uchar class3_R_v2	:1;
1396 	uchar class3_R_v1	:1;
1397 	uchar class3_R_v0	:1;
1398 };
1399 
1400 struct _BraseroScsiHDDVDReadDesc {
1401 	uchar reserved0		:7;
1402 	uchar hd_dvd_r		:1;
1403 
1404 	uchar reserved1;
1405 
1406 	uchar reserved2		:7;
1407 	uchar hd_dvd_ram	:1;
1408 
1409 	uchar reserved3;
1410 };
1411 
1412 struct _BraseroScsiHDDVDWriteDesc {
1413 	uchar reserved0		:7;
1414 	uchar hd_dvd_r		:1;
1415 
1416 	uchar reserved1;
1417 
1418 	uchar reserved2		:7;
1419 	uchar hd_dvd_ram	:1;
1420 
1421 	uchar reserved3;
1422 };
1423 
1424 struct _BraseroScsiHybridDiscDesc {
1425 	uchar reserved0		:7;
1426 	uchar ri		:1;
1427 
1428 	uchar reserved1		[3];
1429 };
1430 
1431 struct _BraseroScsiSmartDesc {
1432 	uchar reserved0		:7;
1433 	uchar pp		:1;
1434 
1435 	uchar reserved1		[3];
1436 };
1437 
1438 struct _BraseroScsiEmbedChngDesc {
1439 	uchar reserved2		:3;
1440 	uchar scc		:1;
1441 	uchar reserved1		:1;
1442 	uchar sdp		:1;
1443 	uchar reserved0		:1;
1444 
1445 	uchar reserved3		[2];
1446 
1447 	uchar reserved4		:3;
1448 	uchar slot_num		:5;
1449 };
1450 
1451 struct _BraseroScsiExtAudioPlayDesc {
1452 	uchar reserved0		:5;
1453 	uchar scan_command	:1;
1454 	uchar separate_chnl_mute:1;
1455 	uchar separate_vol	:1;
1456 
1457 	uchar reserved1;
1458 
1459 	uchar number_vol	[2];
1460 };
1461 
1462 struct _BraseroScsiFirmwareUpgrDesc {
1463 	uchar reserved0		:7;
1464 	uchar m5		:1;
1465 
1466 	uchar reserved1		[3];
1467 };
1468 
1469 struct _BraseroScsiTimeoutDesc {
1470 	uchar reserved0		:7;
1471 	uchar group3		:1;
1472 
1473 	uchar reserved1;
1474 	uchar unit_len		[2];
1475 };
1476 
1477 struct _BraseroScsiRTStreamDesc {
1478 	uchar reserved0		:3;
1479 	uchar rd_buf_caps_block	:1;
1480 	uchar set_cd_spd	:1;
1481 	uchar mp2a		:1;
1482 	uchar wrt_spd		:1;
1483 	uchar stream_wrt	:1;
1484 
1485 	uchar reserved1		[3];
1486 };
1487 
1488 struct _BraseroScsiAACSDesc {
1489 	uchar reserved0		:7;
1490 	uchar bng		:1;
1491 
1492 	uchar block_count;
1493 
1494 	uchar reserved1		:4;
1495 	uchar agids_num		:4;
1496 
1497 	uchar version;
1498 };
1499 
1500 #endif
1501 
1502 struct _BraseroScsiInterfaceDesc {
1503 	uchar code		[4];
1504 };
1505 
1506 struct _BraseroScsiCDrwCavDesc {
1507 	uchar reserved		[4];
1508 };
1509 
1510 /* NOTE: this structure is extendable with padding to have a multiple of 4 */
1511 struct _BraseroScsiLayerJmpDesc {
1512 	uchar reserved0		[3];
1513 	uchar num_link_sizes;
1514 	uchar links		[0];
1515 };
1516 
1517 struct _BraseroScsiPOWDesc {
1518 	uchar reserved		[4];
1519 };
1520 
1521 struct _BraseroScsiDVDCssDesc {
1522 	uchar reserved		[3];
1523 	uchar version;
1524 };
1525 
1526 /* NOTE: this structure is extendable with padding to have a multiple of 4 */
1527 struct _BraseroScsiDriveSerialNumDesc {
1528 	uchar serial		[4];
1529 };
1530 
1531 struct _BraseroScsiMediaSerialNumDesc {
1532 	uchar serial		[4];
1533 };
1534 
1535 /* NOTE: this structure is extendable with padding to have a multiple of 4 */
1536 struct _BraseroScsiDiscCtlBlocksDesc {
1537 	uchar entry		[1][4];
1538 };
1539 
1540 struct _BraseroScsiDVDCprmDesc {
1541 	uchar reserved0 	[3];
1542 	uchar version;
1543 };
1544 
1545 struct _BraseroScsiFirmwareDesc {
1546 	uchar century		[2];
1547 	uchar year		[2];
1548 	uchar month		[2];
1549 	uchar day		[2];
1550 	uchar hour		[2];
1551 	uchar minute		[2];
1552 	uchar second		[2];
1553 	uchar reserved		[2];
1554 };
1555 
1556 struct _BraseroScsiVPSDesc {
1557 	uchar reserved		[4];
1558 };
1559 
1560 typedef struct _BraseroScsiFeatureDesc BraseroScsiFeatureDesc;
1561 typedef struct _BraseroScsiProfileDesc BraseroScsiProfileDesc;
1562 typedef struct _BraseroScsiCoreDescMMC3 BraseroScsiCoreDescMMC3;
1563 typedef struct _BraseroScsiCoreDescMMC4 BraseroScsiCoreDescMMC4;
1564 typedef struct _BraseroScsiInterfaceDesc BraseroScsiInterfaceDesc;
1565 typedef struct _BraseroScsiMorphingDesc BraseroScsiMorphingDesc;
1566 typedef struct _BraseroScsiMediumDesc BraseroScsiMediumDesc;
1567 typedef struct _BraseroScsiWrtProtectDesc BraseroScsiWrtProtectDesc;
1568 typedef struct _BraseroScsiRandomReadDesc BraseroScsiRandomReadDesc;
1569 typedef struct _BraseroScsiCDReadDesc BraseroScsiCDReadDesc;
1570 typedef struct _BraseroScsiDVDReadDesc BraseroScsiDVDReadDesc;
1571 typedef struct _BraseroScsiRandomWriteDesc BraseroScsiRandomWriteDesc;
1572 typedef struct _BraseroScsiIncrementalWrtDesc BraseroScsiIncrementalWrtDesc;
1573 typedef struct _BraseroScsiFormatDesc BraseroScsiFormatDesc;
1574 typedef struct _BraseroScsiDefectMngDesc BraseroScsiDefectMngDesc;
1575 typedef struct _BraseroScsiWrtOnceDesc BraseroScsiWrtOnceDesc;
1576 typedef struct _BraseroScsiCDrwCavDesc BraseroScsiCDrwCavDesc;
1577 typedef struct _BraseroScsiMRWDesc BraseroScsiMRWDesc;
1578 typedef struct _BraseroScsiDefectReportDesc BraseroScsiDefectReportDesc;
1579 typedef struct _BraseroScsiDVDRWplusDesc BraseroScsiDVDRWplusDesc;
1580 typedef struct _BraseroScsiDVDRplusDesc BraseroScsiDVDRplusDesc;
1581 typedef struct _BraseroScsiRigidOverwrtDesc BraseroScsiRigidOverwrtDesc;
1582 typedef struct _BraseroScsiCDTAODesc BraseroScsiCDTAODesc;
1583 typedef struct _BraseroScsiCDSAODesc BraseroScsiCDSAODesc;
1584 typedef struct _BraseroScsiDVDRWlessWrtDesc BraseroScsiDVDRWlessWrtDesc;
1585 typedef struct _BraseroScsiLayerJmpDesc BraseroScsiLayerJmpDesc;
1586 typedef struct _BraseroScsiCDRWWrtDesc BraseroScsiCDRWWrtDesc;
1587 typedef struct _BraseroScsiDVDRWDLDesc BraseroScsiDVDRWDLDesc;
1588 typedef struct _BraseroScsiDVDRDLDesc BraseroScsiDVDRDLDesc;
1589 typedef struct _BraseroScsiBDReadDesc BraseroScsiBDReadDesc;
1590 typedef struct _BraseroScsiBDWriteDesc BraseroScsiBDWriteDesc;
1591 typedef struct _BraseroScsiHDDVDReadDesc BraseroScsiHDDVDReadDesc;
1592 typedef struct _BraseroScsiHDDVDWriteDesc BraseroScsiHDDVDWriteDesc;
1593 typedef struct _BraseroScsiHybridDiscDesc BraseroScsiHybridDiscDesc;
1594 typedef struct _BraseroScsiSmartDesc BraseroScsiSmartDesc;
1595 typedef struct _BraseroScsiEmbedChngDesc BraseroScsiEmbedChngDesc;
1596 typedef struct _BraseroScsiExtAudioPlayDesc BraseroScsiExtAudioPlayDesc;
1597 typedef struct _BraseroScsiFirmwareUpgrDesc BraseroScsiFirmwareUpgrDesc;
1598 typedef struct _BraseroScsiTimeoutDesc BraseroScsiTimeoutDesc;
1599 typedef struct _BraseroScsiRTStreamDesc BraseroScsiRTStreamDesc;
1600 typedef struct _BraseroScsiAACSDesc BraseroScsiAACSDesc;
1601 typedef struct _BraseroScsiPOWDesc BraseroScsiPOWDesc;
1602 typedef struct _BraseroScsiDVDCssDesc BraseroScsiDVDCssDesc;
1603 typedef struct _BraseroScsiDriveSerialNumDesc BraseroScsiDriveSerialNumDesc;
1604 typedef struct _BraseroScsiMediaSerialNumDesc BraseroScsiMediaSerialNumDesc;
1605 typedef struct _BraseroScsiDiscCtlBlocksDesc BraseroScsiDiscCtlBlocksDesc;
1606 typedef struct _BraseroScsiDVDCprmDesc BraseroScsiDVDCprmDesc;
1607 typedef struct _BraseroScsiFirmwareDesc BraseroScsiFirmwareDesc;
1608 typedef struct _BraseroScsiVPSDesc BraseroScsiVPSDesc;
1609 
1610 struct _BraseroScsiGetConfigHdr {
1611 	uchar len			[4];
1612 	uchar reserved			[2];
1613 	uchar current_profile		[2];
1614 
1615 	BraseroScsiFeatureDesc desc 	[0];
1616 };
1617 typedef struct _BraseroScsiGetConfigHdr BraseroScsiGetConfigHdr;
1618 
1619 G_END_DECLS
1620 
1621 #endif /* _SCSI_GET_CONFIGURATION_H */
1622 
1623 
1624