1
2
3
4
5
6
7
8
9
10
11#ifndef _LINUX_CDROM_H
12#define _LINUX_CDROM_H
13
14#include <asm/byteorder.h>
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45#define EDRIVE_CANT_DO_THIS EOPNOTSUPP
46
47
48
49
50
51
52#define CDROMPAUSE 0x5301
53#define CDROMRESUME 0x5302
54#define CDROMPLAYMSF 0x5303
55#define CDROMPLAYTRKIND 0x5304
56
57#define CDROMREADTOCHDR 0x5305
58
59#define CDROMREADTOCENTRY 0x5306
60
61#define CDROMSTOP 0x5307
62#define CDROMSTART 0x5308
63#define CDROMEJECT 0x5309
64#define CDROMVOLCTRL 0x530a
65
66#define CDROMSUBCHNL 0x530b
67
68#define CDROMREADMODE2 0x530c
69
70#define CDROMREADMODE1 0x530d
71
72#define CDROMREADAUDIO 0x530e
73#define CDROMEJECT_SW 0x530f
74#define CDROMMULTISESSION 0x5310
75
76
77#define CDROM_GET_MCN 0x5311
78
79#define CDROM_GET_UPC CDROM_GET_MCN
80
81#define CDROMRESET 0x5312
82#define CDROMVOLREAD 0x5313
83
84#define CDROMREADRAW 0x5314
85
86
87
88
89#define CDROMREADCOOKED 0x5315
90#define CDROMSEEK 0x5316
91
92
93
94
95
96#define CDROMPLAYBLK 0x5317
97
98
99
100
101#define CDROMREADALL 0x5318
102
103
104
105
106
107
108
109
110#define CDROMGETSPINDOWN 0x531d
111#define CDROMSETSPINDOWN 0x531e
112
113
114
115
116
117
118#define CDROMCLOSETRAY 0x5319
119#define CDROM_SET_OPTIONS 0x5320
120#define CDROM_CLEAR_OPTIONS 0x5321
121#define CDROM_SELECT_SPEED 0x5322
122#define CDROM_SELECT_DISC 0x5323
123#define CDROM_MEDIA_CHANGED 0x5325
124#define CDROM_DRIVE_STATUS 0x5326
125#define CDROM_DISC_STATUS 0x5327
126#define CDROM_CHANGER_NSLOTS 0x5328
127#define CDROM_LOCKDOOR 0x5329
128#define CDROM_DEBUG 0x5330
129#define CDROM_GET_CAPABILITY 0x5331
130
131
132
133
134
135
136#define CDROMAUDIOBUFSIZ 0x5382
137
138
139
140#define DVD_READ_STRUCT 0x5390
141#define DVD_WRITE_STRUCT 0x5391
142#define DVD_AUTH 0x5392
143
144#define CDROM_SEND_PACKET 0x5393
145#define CDROM_NEXT_WRITABLE 0x5394
146#define CDROM_LAST_WRITTEN 0x5395
147
148
149
150
151
152
153struct cdrom_msf0
154{
155 __u8 minute;
156 __u8 second;
157 __u8 frame;
158};
159
160
161union cdrom_addr
162{
163 struct cdrom_msf0 msf;
164 int lba;
165};
166
167
168struct cdrom_msf
169{
170 __u8 cdmsf_min0;
171 __u8 cdmsf_sec0;
172 __u8 cdmsf_frame0;
173 __u8 cdmsf_min1;
174 __u8 cdmsf_sec1;
175 __u8 cdmsf_frame1;
176};
177
178
179struct cdrom_ti
180{
181 __u8 cdti_trk0;
182 __u8 cdti_ind0;
183 __u8 cdti_trk1;
184 __u8 cdti_ind1;
185};
186
187
188struct cdrom_tochdr
189{
190 __u8 cdth_trk0;
191 __u8 cdth_trk1;
192};
193
194
195struct cdrom_volctrl
196{
197 __u8 channel0;
198 __u8 channel1;
199 __u8 channel2;
200 __u8 channel3;
201};
202
203
204struct cdrom_subchnl
205{
206 __u8 cdsc_format;
207 __u8 cdsc_audiostatus;
208 __u8 cdsc_adr: 4;
209 __u8 cdsc_ctrl: 4;
210 __u8 cdsc_trk;
211 __u8 cdsc_ind;
212 union cdrom_addr cdsc_absaddr;
213 union cdrom_addr cdsc_reladdr;
214};
215
216
217
218struct cdrom_tocentry
219{
220 __u8 cdte_track;
221 __u8 cdte_adr :4;
222 __u8 cdte_ctrl :4;
223 __u8 cdte_format;
224 union cdrom_addr cdte_addr;
225 __u8 cdte_datamode;
226};
227
228
229struct cdrom_read
230{
231 int cdread_lba;
232 char *cdread_bufaddr;
233 int cdread_buflen;
234};
235
236
237struct cdrom_read_audio
238{
239 union cdrom_addr addr;
240 __u8 addr_format;
241 int nframes;
242 __u8 *buf;
243};
244
245
246struct cdrom_multisession
247{
248 union cdrom_addr addr;
249
250
251 __u8 xa_flag;
252 __u8 addr_format;
253};
254
255
256
257
258
259
260struct cdrom_mcn
261{
262 __u8 medium_catalog_number[14];
263};
264
265
266struct cdrom_blk
267{
268 unsigned from;
269 unsigned short len;
270};
271
272#define CDROM_PACKET_SIZE 12
273
274#define CGC_DATA_UNKNOWN 0
275#define CGC_DATA_WRITE 1
276#define CGC_DATA_READ 2
277#define CGC_DATA_NONE 3
278
279
280struct cdrom_generic_command
281{
282 unsigned char cmd[CDROM_PACKET_SIZE];
283 unsigned char *buffer;
284 unsigned int buflen;
285 int stat;
286 struct request_sense *sense;
287 unsigned char data_direction;
288 int quiet;
289 int timeout;
290 void *reserved[1];
291};
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329#define CD_MINS 74
330#define CD_SECS 60
331#define CD_FRAMES 75
332#define CD_SYNC_SIZE 12
333#define CD_MSF_OFFSET 150
334#define CD_CHUNK_SIZE 24
335#define CD_NUM_OF_CHUNKS 98
336#define CD_FRAMESIZE_SUB 96
337#define CD_HEAD_SIZE 4
338#define CD_SUBHEAD_SIZE 8
339#define CD_EDC_SIZE 4
340#define CD_ZERO_SIZE 8
341#define CD_ECC_SIZE 276
342#define CD_FRAMESIZE 2048
343#define CD_FRAMESIZE_RAW 2352
344#define CD_FRAMESIZE_RAWER 2646
345
346#define CD_FRAMESIZE_RAW1 (CD_FRAMESIZE_RAW-CD_SYNC_SIZE)
347#define CD_FRAMESIZE_RAW0 (CD_FRAMESIZE_RAW-CD_SYNC_SIZE-CD_HEAD_SIZE)
348
349#define CD_XA_HEAD (CD_HEAD_SIZE+CD_SUBHEAD_SIZE)
350#define CD_XA_TAIL (CD_EDC_SIZE+CD_ECC_SIZE)
351#define CD_XA_SYNC_HEAD (CD_SYNC_SIZE+CD_XA_HEAD)
352
353
354#define CDROM_LBA 0x01
355#define CDROM_MSF 0x02
356
357
358#define CDROM_DATA_TRACK 0x04
359
360
361#define CDROM_LEADOUT 0xAA
362
363
364#define CDROM_AUDIO_INVALID 0x00
365#define CDROM_AUDIO_PLAY 0x11
366#define CDROM_AUDIO_PAUSED 0x12
367#define CDROM_AUDIO_COMPLETED 0x13
368#define CDROM_AUDIO_ERROR 0x14
369#define CDROM_AUDIO_NO_STATUS 0x15
370
371
372#define CDC_CLOSE_TRAY 0x1
373#define CDC_OPEN_TRAY 0x2
374#define CDC_LOCK 0x4
375#define CDC_SELECT_SPEED 0x8
376#define CDC_SELECT_DISC 0x10
377#define CDC_MULTI_SESSION 0x20
378#define CDC_MCN 0x40
379#define CDC_MEDIA_CHANGED 0x80
380#define CDC_PLAY_AUDIO 0x100
381#define CDC_RESET 0x200
382#define CDC_IOCTLS 0x400
383#define CDC_DRIVE_STATUS 0x800
384#define CDC_GENERIC_PACKET 0x1000
385#define CDC_CD_R 0x2000
386#define CDC_CD_RW 0x4000
387#define CDC_DVD 0x8000
388#define CDC_DVD_R 0x10000
389#define CDC_DVD_RAM 0x20000
390
391
392#define CDS_NO_INFO 0
393#define CDS_NO_DISC 1
394#define CDS_TRAY_OPEN 2
395#define CDS_DRIVE_NOT_READY 3
396#define CDS_DISC_OK 4
397
398
399
400#define CDS_AUDIO 100
401#define CDS_DATA_1 101
402#define CDS_DATA_2 102
403#define CDS_XA_2_1 103
404#define CDS_XA_2_2 104
405#define CDS_MIXED 105
406
407
408#define CDO_AUTO_CLOSE 0x1
409#define CDO_AUTO_EJECT 0x2
410#define CDO_USE_FFLAGS 0x4
411#define CDO_LOCK 0x8
412#define CDO_CHECK_TYPE 0x10
413
414
415#define CDSL_NONE ((int) (~0U>>1)-1)
416#define CDSL_CURRENT ((int) (~0U>>1))
417
418
419
420
421
422
423#define CD_PART_MAX 64
424#define CD_PART_MASK (CD_PART_MAX - 1)
425
426
427
428
429
430
431
432#define GPCMD_BLANK 0xa1
433#define GPCMD_CLOSE_TRACK 0x5b
434#define GPCMD_FLUSH_CACHE 0x35
435#define GPCMD_FORMAT_UNIT 0x04
436#define GPCMD_GET_CONFIGURATION 0x46
437#define GPCMD_GET_EVENT_STATUS_NOTIFICATION 0x4a
438#define GPCMD_GET_PERFORMANCE 0xac
439#define GPCMD_INQUIRY 0x12
440#define GPCMD_LOAD_UNLOAD 0xa6
441#define GPCMD_MECHANISM_STATUS 0xbd
442#define GPCMD_MODE_SELECT_10 0x55
443#define GPCMD_MODE_SENSE_10 0x5a
444#define GPCMD_PAUSE_RESUME 0x4b
445#define GPCMD_PLAY_AUDIO_10 0x45
446#define GPCMD_PLAY_AUDIO_MSF 0x47
447#define GPCMD_PLAY_AUDIO_TI 0x48
448#define GPCMD_PLAY_CD 0xbc
449#define GPCMD_PREVENT_ALLOW_MEDIUM_REMOVAL 0x1e
450#define GPCMD_READ_10 0x28
451#define GPCMD_READ_12 0xa8
452#define GPCMD_READ_CDVD_CAPACITY 0x25
453#define GPCMD_READ_CD 0xbe
454#define GPCMD_READ_CD_MSF 0xb9
455#define GPCMD_READ_DISC_INFO 0x51
456#define GPCMD_READ_DVD_STRUCTURE 0xad
457#define GPCMD_READ_FORMAT_CAPACITIES 0x23
458#define GPCMD_READ_HEADER 0x44
459#define GPCMD_READ_TRACK_RZONE_INFO 0x52
460#define GPCMD_READ_SUBCHANNEL 0x42
461#define GPCMD_READ_TOC_PMA_ATIP 0x43
462#define GPCMD_REPAIR_RZONE_TRACK 0x58
463#define GPCMD_REPORT_KEY 0xa4
464#define GPCMD_REQUEST_SENSE 0x03
465#define GPCMD_RESERVE_RZONE_TRACK 0x53
466#define GPCMD_SCAN 0xba
467#define GPCMD_SEEK 0x2b
468#define GPCMD_SEND_DVD_STRUCTURE 0xad
469#define GPCMD_SEND_EVENT 0xa2
470#define GPCMD_SEND_KEY 0xa3
471#define GPCMD_SEND_OPC 0x54
472#define GPCMD_SET_READ_AHEAD 0xa7
473#define GPCMD_SET_STREAMING 0xb6
474#define GPCMD_START_STOP_UNIT 0x1b
475#define GPCMD_STOP_PLAY_SCAN 0x4e
476#define GPCMD_TEST_UNIT_READY 0x00
477#define GPCMD_VERIFY_10 0x2f
478#define GPCMD_WRITE_10 0x2a
479#define GPCMD_WRITE_AND_VERIFY_10 0x2e
480
481
482
483
484#define GPCMD_SET_SPEED 0xbb
485
486
487#define GPCMD_PLAYAUDIO_TI 0x48
488
489
490
491
492#define GPCMD_GET_MEDIA_STATUS 0xda
493
494
495#define GPMODE_R_W_ERROR_PAGE 0x01
496#define GPMODE_WRITE_PARMS_PAGE 0x05
497#define GPMODE_AUDIO_CTL_PAGE 0x0e
498#define GPMODE_POWER_PAGE 0x1a
499#define GPMODE_FAULT_FAIL_PAGE 0x1c
500#define GPMODE_TO_PROTECT_PAGE 0x1d
501#define GPMODE_CAPABILITIES_PAGE 0x2a
502#define GPMODE_ALL_PAGES 0x3f
503
504
505#define GPMODE_CDROM_PAGE 0x0d
506
507
508
509
510#define DVD_STRUCT_PHYSICAL 0x00
511#define DVD_STRUCT_COPYRIGHT 0x01
512#define DVD_STRUCT_DISCKEY 0x02
513#define DVD_STRUCT_BCA 0x03
514#define DVD_STRUCT_MANUFACT 0x04
515
516struct dvd_layer {
517 __u8 book_version : 4;
518 __u8 book_type : 4;
519 __u8 min_rate : 4;
520 __u8 disc_size : 4;
521 __u8 layer_type : 4;
522 __u8 track_path : 1;
523 __u8 nlayers : 2;
524 __u8 track_density : 4;
525 __u8 linear_density : 4;
526 __u8 bca : 1;
527 __u32 start_sector;
528 __u32 end_sector;
529 __u32 end_sector_l0;
530};
531
532#define DVD_LAYERS 4
533
534struct dvd_physical {
535 __u8 type;
536 __u8 layer_num;
537 struct dvd_layer layer[DVD_LAYERS];
538};
539
540struct dvd_copyright {
541 __u8 type;
542
543 __u8 layer_num;
544 __u8 cpst;
545 __u8 rmi;
546};
547
548struct dvd_disckey {
549 __u8 type;
550
551 unsigned agid : 2;
552 __u8 value[2048];
553};
554
555struct dvd_bca {
556 __u8 type;
557
558 int len;
559 __u8 value[188];
560};
561
562struct dvd_manufact {
563 __u8 type;
564
565 __u8 layer_num;
566 int len;
567 __u8 value[2048];
568};
569
570typedef union {
571 __u8 type;
572
573 struct dvd_physical physical;
574 struct dvd_copyright copyright;
575 struct dvd_disckey disckey;
576 struct dvd_bca bca;
577 struct dvd_manufact manufact;
578} dvd_struct;
579
580
581
582
583
584
585#define DVD_LU_SEND_AGID 0
586#define DVD_HOST_SEND_CHALLENGE 1
587#define DVD_LU_SEND_KEY1 2
588#define DVD_LU_SEND_CHALLENGE 3
589#define DVD_HOST_SEND_KEY2 4
590
591
592#define DVD_AUTH_ESTABLISHED 5
593#define DVD_AUTH_FAILURE 6
594
595
596#define DVD_LU_SEND_TITLE_KEY 7
597#define DVD_LU_SEND_ASF 8
598#define DVD_INVALIDATE_AGID 9
599#define DVD_LU_SEND_RPC_STATE 10
600#define DVD_HOST_SEND_RPC_STATE 11
601
602
603typedef __u8 dvd_key[5];
604typedef __u8 dvd_challenge[10];
605
606struct dvd_lu_send_agid {
607 __u8 type;
608 unsigned agid : 2;
609};
610
611struct dvd_host_send_challenge {
612 __u8 type;
613 unsigned agid : 2;
614
615 dvd_challenge chal;
616};
617
618struct dvd_send_key {
619 __u8 type;
620 unsigned agid : 2;
621
622 dvd_key key;
623};
624
625struct dvd_lu_send_challenge {
626 __u8 type;
627 unsigned agid : 2;
628
629 dvd_challenge chal;
630};
631
632#define DVD_CPM_NO_COPYRIGHT 0
633#define DVD_CPM_COPYRIGHTED 1
634
635#define DVD_CP_SEC_NONE 0
636#define DVD_CP_SEC_EXIST 1
637
638#define DVD_CGMS_UNRESTRICTED 0
639#define DVD_CGMS_SINGLE 2
640#define DVD_CGMS_RESTRICTED 3
641
642struct dvd_lu_send_title_key {
643 __u8 type;
644 unsigned agid : 2;
645
646 dvd_key title_key;
647 int lba;
648 unsigned cpm : 1;
649 unsigned cp_sec : 1;
650 unsigned cgms : 2;
651};
652
653struct dvd_lu_send_asf {
654 __u8 type;
655 unsigned agid : 2;
656
657 unsigned asf : 1;
658};
659
660struct dvd_host_send_rpcstate {
661 __u8 type;
662 __u8 pdrc;
663};
664
665struct dvd_lu_send_rpcstate {
666 __u8 type : 2;
667 __u8 vra : 3;
668 __u8 ucca : 3;
669 __u8 region_mask;
670 __u8 rpc_scheme;
671};
672
673typedef union {
674 __u8 type;
675
676 struct dvd_lu_send_agid lsa;
677 struct dvd_host_send_challenge hsc;
678 struct dvd_send_key lsk;
679 struct dvd_lu_send_challenge lsc;
680 struct dvd_send_key hsk;
681 struct dvd_lu_send_title_key lstk;
682 struct dvd_lu_send_asf lsasf;
683 struct dvd_host_send_rpcstate hrpcs;
684 struct dvd_lu_send_rpcstate lrpcs;
685} dvd_authinfo;
686
687struct request_sense {
688#if defined(__BIG_ENDIAN_BITFIELD)
689 __u8 valid : 1;
690 __u8 error_code : 7;
691#elif defined(__LITTLE_ENDIAN_BITFIELD)
692 __u8 error_code : 7;
693 __u8 valid : 1;
694#endif
695 __u8 segment_number;
696#if defined(__BIG_ENDIAN_BITFIELD)
697 __u8 reserved1 : 2;
698 __u8 ili : 1;
699 __u8 reserved2 : 1;
700 __u8 sense_key : 4;
701#elif defined(__LITTLE_ENDIAN_BITFIELD)
702 __u8 sense_key : 4;
703 __u8 reserved2 : 1;
704 __u8 ili : 1;
705 __u8 reserved1 : 2;
706#endif
707 __u8 information[4];
708 __u8 add_sense_len;
709 __u8 command_info[4];
710 __u8 asc;
711 __u8 ascq;
712 __u8 fruc;
713 __u8 sks[3];
714 __u8 asb[46];
715};
716
717#ifdef __KERNEL__
718#include <linux/devfs_fs_kernel.h>
719
720struct cdrom_write_settings {
721 unsigned char fpacket;
722 unsigned long packet_size;
723 unsigned long nwa;
724 unsigned char writeable;
725};
726
727
728struct cdrom_device_info {
729 struct cdrom_device_ops *ops;
730 struct cdrom_device_info *next;
731 void *handle;
732 devfs_handle_t de;
733 int number;
734
735 kdev_t dev;
736 int mask;
737 int speed;
738 int capacity;
739
740 int options : 30;
741 unsigned mc_flags : 2;
742 int use_count;
743 char name[20];
744
745 __u8 sanyo_slot : 2;
746 __u8 reserved : 6;
747 struct cdrom_write_settings write;
748};
749
750struct cdrom_device_ops {
751
752 int (*open) (struct cdrom_device_info *, int);
753 void (*release) (struct cdrom_device_info *);
754 int (*drive_status) (struct cdrom_device_info *, int);
755 int (*media_changed) (struct cdrom_device_info *, int);
756 int (*tray_move) (struct cdrom_device_info *, int);
757 int (*lock_door) (struct cdrom_device_info *, int);
758 int (*select_speed) (struct cdrom_device_info *, int);
759 int (*select_disc) (struct cdrom_device_info *, int);
760 int (*get_last_session) (struct cdrom_device_info *,
761 struct cdrom_multisession *);
762 int (*get_mcn) (struct cdrom_device_info *,
763 struct cdrom_mcn *);
764
765 int (*reset) (struct cdrom_device_info *);
766
767 int (*audio_ioctl) (struct cdrom_device_info *,unsigned int, void *);
768
769 int (*dev_ioctl) (struct cdrom_device_info *,
770 unsigned int, unsigned long);
771
772 const int capability;
773 int n_minors;
774
775 int (*generic_packet) (struct cdrom_device_info *,
776 struct cdrom_generic_command *);
777};
778
779
780extern int cdrom_open(struct inode *, struct file *);
781extern int cdrom_release(struct inode *, struct file *);
782extern int cdrom_ioctl(struct inode *, struct file *, unsigned, unsigned long);
783extern int cdrom_media_changed(kdev_t);
784
785extern int register_cdrom(struct cdrom_device_info *cdi);
786extern int unregister_cdrom(struct cdrom_device_info *cdi);
787
788static inline void devfs_plain_cdrom(struct cdrom_device_info *cdi,
789 struct block_device_operations *ops)
790{
791 char vname[23];
792
793 sprintf (vname, "cdroms/cdrom%d", cdi->number);
794 cdi->de = devfs_register (NULL, vname, DEVFS_FL_DEFAULT,
795 MAJOR (cdi->dev), MINOR (cdi->dev),
796 S_IFBLK | S_IRUGO | S_IWUGO,
797 ops, NULL);
798}
799
800typedef struct {
801 int data;
802 int audio;
803 int cdi;
804 int xa;
805 long error;
806} tracktype;
807
808extern void cdrom_count_tracks(struct cdrom_device_info *cdi,tracktype* tracks);
809extern int cdrom_get_next_writable(kdev_t dev, long *next_writable);
810extern int cdrom_get_last_written(kdev_t dev, long *last_written);
811extern int cdrom_number_of_slots(struct cdrom_device_info *cdi);
812extern int cdrom_select_disc(struct cdrom_device_info *cdi, int slot);
813extern int cdrom_mode_select(struct cdrom_device_info *cdi,
814 struct cdrom_generic_command *cgc);
815extern int cdrom_mode_sense(struct cdrom_device_info *cdi,
816 struct cdrom_generic_command *cgc,
817 int page_code, int page_control);
818extern void init_cdrom_command(struct cdrom_generic_command *cgc,
819 void *buffer, int len, int type);
820extern struct cdrom_device_info *cdrom_find_device(kdev_t dev);
821
822typedef struct {
823 __u16 disc_information_length;
824#if defined(__BIG_ENDIAN_BITFIELD)
825 __u8 reserved1 : 3;
826 __u8 erasable : 1;
827 __u8 border_status : 2;
828 __u8 disc_status : 2;
829#elif defined(__LITTLE_ENDIAN_BITFIELD)
830 __u8 disc_status : 2;
831 __u8 border_status : 2;
832 __u8 erasable : 1;
833 __u8 reserved1 : 3;
834#else
835#error "Please fix <asm/byteorder.h>"
836#endif
837 __u8 n_first_track;
838 __u8 n_sessions_lsb;
839 __u8 first_track_lsb;
840 __u8 last_track_lsb;
841#if defined(__BIG_ENDIAN_BITFIELD)
842 __u8 did_v : 1;
843 __u8 dbc_v : 1;
844 __u8 uru : 1;
845 __u8 reserved2 : 5;
846#elif defined(__LITTLE_ENDIAN_BITFIELD)
847 __u8 reserved2 : 5;
848 __u8 uru : 1;
849 __u8 dbc_v : 1;
850 __u8 did_v : 1;
851#endif
852 __u8 disc_type;
853 __u8 n_sessions_msb;
854 __u8 first_track_msb;
855 __u8 last_track_msb;
856 __u32 disc_id;
857 __u32 lead_in;
858 __u32 lead_out;
859 __u8 disc_bar_code[8];
860 __u8 reserved3;
861 __u8 n_opc;
862} disc_information;
863
864typedef struct {
865 __u16 track_information_length;
866 __u8 track_lsb;
867 __u8 session_lsb;
868 __u8 reserved1;
869#if defined(__BIG_ENDIAN_BITFIELD)
870 __u8 reserved2 : 2;
871 __u8 damage : 1;
872 __u8 copy : 1;
873 __u8 track_mode : 4;
874 __u8 rt : 1;
875 __u8 blank : 1;
876 __u8 packet : 1;
877 __u8 fp : 1;
878 __u8 data_mode : 4;
879 __u8 reserved3 : 6;
880 __u8 lra_v : 1;
881 __u8 nwa_v : 1;
882#elif defined(__LITTLE_ENDIAN_BITFIELD)
883 __u8 track_mode : 4;
884 __u8 copy : 1;
885 __u8 damage : 1;
886 __u8 reserved2 : 2;
887 __u8 data_mode : 4;
888 __u8 fp : 1;
889 __u8 packet : 1;
890 __u8 blank : 1;
891 __u8 rt : 1;
892 __u8 nwa_v : 1;
893 __u8 lra_v : 1;
894 __u8 reserved3 : 6;
895#endif
896 __u32 track_start;
897 __u32 next_writable;
898 __u32 free_blocks;
899 __u32 fixed_packet_size;
900 __u32 track_size;
901 __u32 last_rec_address;
902} track_information;
903
904extern int cdrom_get_disc_info(kdev_t dev, disc_information *di);
905extern int cdrom_get_track_info(kdev_t dev, __u16 track, __u8 type,
906 track_information *ti);
907
908
909#define CDROM_MAX_SLOTS 256
910
911struct cdrom_mechstat_header {
912#if defined(__BIG_ENDIAN_BITFIELD)
913 __u8 fault : 1;
914 __u8 changer_state : 2;
915 __u8 curslot : 5;
916 __u8 mech_state : 3;
917 __u8 door_open : 1;
918 __u8 reserved1 : 4;
919#elif defined(__LITTLE_ENDIAN_BITFIELD)
920 __u8 curslot : 5;
921 __u8 changer_state : 2;
922 __u8 fault : 1;
923 __u8 reserved1 : 4;
924 __u8 door_open : 1;
925 __u8 mech_state : 3;
926#endif
927 __u8 curlba[3];
928 __u8 nslots;
929 __u16 slot_tablelen;
930};
931
932struct cdrom_slot {
933#if defined(__BIG_ENDIAN_BITFIELD)
934 __u8 disc_present : 1;
935 __u8 reserved1 : 6;
936 __u8 change : 1;
937#elif defined(__LITTLE_ENDIAN_BITFIELD)
938 __u8 change : 1;
939 __u8 reserved1 : 6;
940 __u8 disc_present : 1;
941#endif
942 __u8 reserved2[3];
943};
944
945struct cdrom_changer_info {
946 struct cdrom_mechstat_header hdr;
947 struct cdrom_slot slots[CDROM_MAX_SLOTS];
948};
949
950typedef enum {
951 mechtype_caddy = 0,
952 mechtype_tray = 1,
953 mechtype_popup = 2,
954 mechtype_individual_changer = 4,
955 mechtype_cartridge_changer = 5
956} mechtype_t;
957
958struct mode_page_header {
959 __u16 mode_data_length;
960 __u8 medium_type;
961 __u8 reserved1;
962 __u8 reserved2;
963 __u8 reserved3;
964 __u16 desc_length;
965};
966
967typedef struct {
968#if defined(__BIG_ENDIAN_BITFIELD)
969 __u8 ps : 1;
970 __u8 reserved1 : 1;
971 __u8 page_code : 6;
972 __u8 page_length;
973 __u8 reserved2 : 1;
974 __u8 bufe : 1;
975 __u8 ls_v : 1;
976 __u8 test_write : 1;
977 __u8 write_type : 4;
978 __u8 multi_session : 2;
979 __u8 fp : 1;
980 __u8 copy : 1;
981 __u8 track_mode : 4;
982 __u8 reserved3 : 4;
983 __u8 data_block_type : 4;
984#elif defined(__LITTLE_ENDIAN_BITFIELD)
985 __u8 page_code : 6;
986 __u8 reserved1 : 1;
987 __u8 ps : 1;
988 __u8 page_length;
989 __u8 write_type : 4;
990 __u8 test_write : 1;
991 __u8 ls_v : 1;
992 __u8 bufe : 1;
993 __u8 reserved2 : 1;
994 __u8 track_mode : 4;
995 __u8 copy : 1;
996 __u8 fp : 1;
997 __u8 multi_session : 2;
998 __u8 data_block_type : 4;
999 __u8 reserved3 : 4;
1000#endif
1001 __u8 link_size;
1002 __u8 reserved4;
1003#if defined(__BIG_ENDIAN_BITFIELD)
1004 __u8 reserved5 : 2;
1005 __u8 app_code : 6;
1006#elif defined(__LITTLE_ENDIAN_BITFIELD)
1007 __u8 app_code : 6;
1008 __u8 reserved5 : 2;
1009#endif
1010 __u8 session_format;
1011 __u8 reserved6;
1012 __u32 packet_size;
1013 __u16 audio_pause;
1014 __u8 mcn[16];
1015 __u8 isrc[16];
1016 __u8 subhdr0;
1017 __u8 subhdr1;
1018 __u8 subhdr2;
1019 __u8 subhdr3;
1020} __attribute__((packed)) write_param_page;
1021
1022struct modesel_head
1023{
1024 __u8 reserved1;
1025 __u8 medium;
1026 __u8 reserved2;
1027 __u8 block_desc_length;
1028 __u8 density;
1029 __u8 number_of_blocks_hi;
1030 __u8 number_of_blocks_med;
1031 __u8 number_of_blocks_lo;
1032 __u8 reserved3;
1033 __u8 block_length_hi;
1034 __u8 block_length_med;
1035 __u8 block_length_lo;
1036};
1037
1038typedef struct {
1039 __u16 report_key_length;
1040 __u8 reserved1;
1041 __u8 reserved2;
1042#if defined(__BIG_ENDIAN_BITFIELD)
1043 __u8 type_code : 2;
1044 __u8 vra : 3;
1045 __u8 ucca : 3;
1046#elif defined(__LITTLE_ENDIAN_BITFIELD)
1047 __u8 ucca : 3;
1048 __u8 vra : 3;
1049 __u8 type_code : 2;
1050#endif
1051 __u8 region_mask;
1052 __u8 rpc_scheme;
1053 __u8 reserved3;
1054} rpc_state_t;
1055
1056#endif
1057
1058#endif
1059