1c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*
2c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * -- <linux/cdrom.h>
3c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * General header file for linux CD-ROM drivers
4c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Copyright (C) 1992         David Giller, rafetmad@oxy.edu
5c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *               1994, 1995   Eberhard Moenkeberg, emoenke@gwdg.de
6c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *               1996         David van Leeuwen, david@tm.tno.nl
7c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *               1997, 1998   Erik Andersen, andersee@debian.org
8c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *               1998-2002    Jens Axboe, axboe@suse.de
9c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */
10c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
11c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef	_LINUX_CDROM_H
12c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define	_LINUX_CDROM_H
13c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
14c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <asm/byteorder.h>
15c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
16c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*******************************************************
17c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * As of Linux 2.1.x, all Linux CD-ROM application programs will use this
18c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * (and only this) include file.  It is my hope to provide Linux with
19c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * a uniform interface between software accessing CD-ROMs and the various
20c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * device drivers that actually talk to the drives.  There may still be
21c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * 23 different kinds of strange CD-ROM drives, but at least there will
22c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * now be one, and only one, Linux CD-ROM interface.
23c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *
24c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Additionally, as of Linux 2.1.x, all Linux application programs
25c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * should use the O_NONBLOCK option when opening a CD-ROM device
26c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * for subsequent ioctl commands.  This allows for neat system errors
27c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * like "No medium found" or "Wrong medium type" upon attempting to
28c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * mount or play an empty slot, mount an audio disc, or play a data disc.
29c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Generally, changing an application program to support O_NONBLOCK
30c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * is as easy as the following:
31c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *       -    drive = open("/dev/cdrom", O_RDONLY);
32c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *       +    drive = open("/dev/cdrom", O_RDONLY | O_NONBLOCK);
33c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * It is worth the small change.
34c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *
35c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *  Patches for many common CD programs (provided by David A. van Leeuwen)
36c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *  can be found at:  ftp://ftp.gwdg.de/pub/linux/cdrom/drivers/cm206/
37c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *
38c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *******************************************************/
39c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
40c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* When a driver supports a certain function, but the cdrom drive we are
41c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * using doesn't, we will return the error EDRIVE_CANT_DO_THIS.  We will
42c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * borrow the "Operation not supported" error from the network folks to
43c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * accomplish this.  Maybe someday we will get a more targeted error code,
44c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * but this will do for now... */
45c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define EDRIVE_CANT_DO_THIS  EOPNOTSUPP
46c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
47c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*******************************************************
48c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * The CD-ROM IOCTL commands  -- these should be supported by
49c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * all the various cdrom drivers.  For the CD-ROM ioctls, we
50c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * will commandeer byte 0x53, or 'S'.
51c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *******************************************************/
52c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROMPAUSE		0x5301 /* Pause Audio Operation */
53c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROMRESUME		0x5302 /* Resume paused Audio Operation */
54c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROMPLAYMSF		0x5303 /* Play Audio MSF (struct cdrom_msf) */
55c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROMPLAYTRKIND		0x5304 /* Play Audio Track/index
56c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru                                           (struct cdrom_ti) */
57c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROMREADTOCHDR		0x5305 /* Read TOC header
58c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru                                           (struct cdrom_tochdr) */
59c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROMREADTOCENTRY	0x5306 /* Read TOC entry
60c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru                                           (struct cdrom_tocentry) */
61c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROMSTOP		0x5307 /* Stop the cdrom drive */
62c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROMSTART		0x5308 /* Start the cdrom drive */
63c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROMEJECT		0x5309 /* Ejects the cdrom media */
64c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROMVOLCTRL		0x530a /* Control output volume
65c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru                                           (struct cdrom_volctrl) */
66c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROMSUBCHNL		0x530b /* Read subchannel data
67c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru                                           (struct cdrom_subchnl) */
68c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROMREADMODE2		0x530c /* Read CDROM mode 2 data (2336 Bytes)
69c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru                                           (struct cdrom_read) */
70c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROMREADMODE1		0x530d /* Read CDROM mode 1 data (2048 Bytes)
71c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru                                           (struct cdrom_read) */
72c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROMREADAUDIO		0x530e /* (struct cdrom_read_audio) */
73c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROMEJECT_SW		0x530f /* enable(1)/disable(0) auto-ejecting */
74c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROMMULTISESSION	0x5310 /* Obtain the start-of-last-session
75c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru                                           address of multi session disks
76c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru                                           (struct cdrom_multisession) */
77c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROM_GET_MCN		0x5311 /* Obtain the "Universal Product Code"
78c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru                                           if available (struct cdrom_mcn) */
79c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROM_GET_UPC		CDROM_GET_MCN  /* This one is depricated,
80c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru                                          but here anyway for compatibility */
81c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROMRESET		0x5312 /* hard-reset the drive */
82c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROMVOLREAD		0x5313 /* Get the drive's volume setting
83c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru                                          (struct cdrom_volctrl) */
84c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROMREADRAW		0x5314	/* read data in raw mode (2352 Bytes)
85c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru                                           (struct cdrom_read) */
86c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*
87c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * These ioctls are used only used in aztcd.c and optcd.c
88c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */
89c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROMREADCOOKED		0x5315	/* read data in cooked mode */
90c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROMSEEK		0x5316  /* seek msf address */
91c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
92c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*
93c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * This ioctl is only used by the scsi-cd driver.
94c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru   It is for playing audio in logical block addressing mode.
95c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */
96c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROMPLAYBLK		0x5317	/* (struct cdrom_blk) */
97c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
98c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*
99c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * These ioctls are only used in optcd.c
100c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */
101c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROMREADALL		0x5318	/* read all 2646 bytes */
102c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
103c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*
104c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * These ioctls are (now) only in ide-cd.c for controlling
105c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * drive spindown time.  They should be implemented in the
106c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Uniform driver, via generic packet commands, GPCMD_MODE_SELECT_10,
107c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * GPCMD_MODE_SENSE_10 and the GPMODE_POWER_PAGE...
108c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *  -Erik
109c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */
110c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROMGETSPINDOWN        0x531d
111c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROMSETSPINDOWN        0x531e
112c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
113c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*
114c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * These ioctls are implemented through the uniform CD-ROM driver
115c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * They _will_ be adopted by all CD-ROM drivers, when all the CD-ROM
116c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * drivers are eventually ported to the uniform CD-ROM driver interface.
117c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */
118c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROMCLOSETRAY		0x5319	/* pendant of CDROMEJECT */
119c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROM_SET_OPTIONS	0x5320  /* Set behavior options */
120c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROM_CLEAR_OPTIONS	0x5321  /* Clear behavior options */
121c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROM_SELECT_SPEED	0x5322  /* Set the CD-ROM speed */
122c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROM_SELECT_DISC	0x5323  /* Select disc (for juke-boxes) */
123c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROM_MEDIA_CHANGED	0x5325  /* Check is media changed  */
124c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROM_DRIVE_STATUS	0x5326  /* Get tray position, etc. */
125c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROM_DISC_STATUS	0x5327  /* Get disc type, etc. */
126c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROM_CHANGER_NSLOTS    0x5328  /* Get number of slots */
127c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROM_LOCKDOOR		0x5329  /* lock or unlock door */
128c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROM_DEBUG		0x5330	/* Turn debug messages on/off */
129c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROM_GET_CAPABILITY	0x5331	/* get capabilities */
130c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
131c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Note that scsi/scsi_ioctl.h also uses 0x5382 - 0x5386.
132c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Future CDROM ioctls should be kept below 0x537F
133c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */
134c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
135c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* This ioctl is only used by sbpcd at the moment */
136c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROMAUDIOBUFSIZ        0x5382	/* set the audio buffer size */
137c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru					/* conflict with SCSI_IOCTL_GET_IDLUN */
138c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
139c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* DVD-ROM Specific ioctls */
140c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define DVD_READ_STRUCT		0x5390  /* Read structure */
141c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define DVD_WRITE_STRUCT	0x5391  /* Write structure */
142c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define DVD_AUTH		0x5392  /* Authentication */
143c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
144c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROM_SEND_PACKET	0x5393	/* send a packet to the drive */
145c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROM_NEXT_WRITABLE	0x5394	/* get next writable block */
146c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROM_LAST_WRITTEN	0x5395	/* get last block written on disc */
147c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
148c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*******************************************************
149c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * CDROM IOCTL structures
150c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *******************************************************/
151c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
152c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Address in MSF format */
153c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct cdrom_msf0
154c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{
155c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	minute;
156c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	second;
157c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	frame;
158c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
159c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
160c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Address in either MSF or logical format */
161c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruunion cdrom_addr
162c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{
163c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	struct cdrom_msf0	msf;
164c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int			lba;
165c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
166c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
167c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* This struct is used by the CDROMPLAYMSF ioctl */
168c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct cdrom_msf
169c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{
170c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	cdmsf_min0;	/* start minute */
171c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	cdmsf_sec0;	/* start second */
172c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	cdmsf_frame0;	/* start frame */
173c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	cdmsf_min1;	/* end minute */
174c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	cdmsf_sec1;	/* end second */
175c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	cdmsf_frame1;	/* end frame */
176c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
177c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
178c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* This struct is used by the CDROMPLAYTRKIND ioctl */
179c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct cdrom_ti
180c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{
181c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	cdti_trk0;	/* start track */
182c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	cdti_ind0;	/* start index */
183c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	cdti_trk1;	/* end track */
184c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	cdti_ind1;	/* end index */
185c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
186c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
187c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* This struct is used by the CDROMREADTOCHDR ioctl */
188c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct cdrom_tochdr
189c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{
190c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	cdth_trk0;	/* start track */
191c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	cdth_trk1;	/* end track */
192c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
193c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
194c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* This struct is used by the CDROMVOLCTRL and CDROMVOLREAD ioctls */
195c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct cdrom_volctrl
196c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{
197c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	channel0;
198c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	channel1;
199c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	channel2;
200c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	channel3;
201c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
202c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
203c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* This struct is used by the CDROMSUBCHNL ioctl */
204c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct cdrom_subchnl
205c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{
206c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	cdsc_format;
207c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	cdsc_audiostatus;
208c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	cdsc_adr:	4;
209c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	cdsc_ctrl:	4;
210c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	cdsc_trk;
211c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	cdsc_ind;
212c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	union cdrom_addr cdsc_absaddr;
213c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	union cdrom_addr cdsc_reladdr;
214c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
215c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
216c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
217c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* This struct is used by the CDROMREADTOCENTRY ioctl */
218c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct cdrom_tocentry
219c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{
220c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	cdte_track;
221c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	cdte_adr	:4;
222c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	cdte_ctrl	:4;
223c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	cdte_format;
224c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	union cdrom_addr cdte_addr;
225c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	cdte_datamode;
226c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
227c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
228c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* This struct is used by the CDROMREADMODE1, and CDROMREADMODE2 ioctls */
229c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct cdrom_read
230c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{
231c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int	cdread_lba;
232c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	char 	*cdread_bufaddr;
233c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int	cdread_buflen;
234c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
235c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
236c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* This struct is used by the CDROMREADAUDIO ioctl */
237c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct cdrom_read_audio
238c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{
239c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	union cdrom_addr addr; /* frame address */
240c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 addr_format;      /* CDROM_LBA or CDROM_MSF */
241c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int nframes;           /* number of 2352-byte-frames to read at once */
242c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 __user *buf;      /* frame buffer (size: nframes*2352 bytes) */
243c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
244c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
245c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* This struct is used with the CDROMMULTISESSION ioctl */
246c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct cdrom_multisession
247c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{
248c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	union cdrom_addr addr; /* frame address: start-of-last-session
249c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	                           (not the new "frame 16"!).  Only valid
250c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	                           if the "xa_flag" is true. */
251c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 xa_flag;        /* 1: "is XA disk" */
252c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 addr_format;    /* CDROM_LBA or CDROM_MSF */
253c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
254c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
255c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* This struct is used with the CDROM_GET_MCN ioctl.
256c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Very few audio discs actually have Universal Product Code information,
257c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * which should just be the Medium Catalog Number on the box.  Also note
258c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * that the way the codeis written on CD is _not_ uniform across all discs!
259c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */
260c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct cdrom_mcn
261c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{
262c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru  __u8 medium_catalog_number[14]; /* 13 ASCII digits, null-terminated */
263c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
264c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
265c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* This is used by the CDROMPLAYBLK ioctl */
266c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct cdrom_blk
267c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{
268c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	unsigned from;
269c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	unsigned short len;
270c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
271c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
272c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROM_PACKET_SIZE	12
273c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
274c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CGC_DATA_UNKNOWN	0
275c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CGC_DATA_WRITE		1
276c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CGC_DATA_READ		2
277c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CGC_DATA_NONE		3
278c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
279c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* for CDROM_PACKET_COMMAND ioctl */
280c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct cdrom_generic_command
281c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{
282c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	unsigned char 		cmd[CDROM_PACKET_SIZE];
283c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	unsigned char		__user *buffer;
284c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	unsigned int 		buflen;
285c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int			stat;
286c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	struct request_sense	__user *sense;
287c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	unsigned char		data_direction;
288c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int			quiet;
289c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int			timeout;
290c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	void			__user *reserved[1];	/* unused, actually */
291c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
292c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
293c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*
294c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * A CD-ROM physical sector size is 2048, 2052, 2056, 2324, 2332, 2336,
295c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * 2340, or 2352 bytes long.
296c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
297c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru*         Sector types of the standard CD-ROM data formats:
298c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *
299c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * format   sector type               user data size (bytes)
300c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * -----------------------------------------------------------------------------
301c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *   1     (Red Book)    CD-DA          2352    (CD_FRAMESIZE_RAW)
302c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *   2     (Yellow Book) Mode1 Form1    2048    (CD_FRAMESIZE)
303c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *   3     (Yellow Book) Mode1 Form2    2336    (CD_FRAMESIZE_RAW0)
304c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *   4     (Green Book)  Mode2 Form1    2048    (CD_FRAMESIZE)
305c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *   5     (Green Book)  Mode2 Form2    2328    (2324+4 spare bytes)
306c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *
307c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *
308c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *       The layout of the standard CD-ROM data formats:
309c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * -----------------------------------------------------------------------------
310c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * - audio (red):                  | audio_sample_bytes |
311c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *                                 |        2352        |
312c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *
313c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * - data (yellow, mode1):         | sync - head - data - EDC - zero - ECC |
314c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *                                 |  12  -   4  - 2048 -  4  -   8  - 276 |
315c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *
316c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * - data (yellow, mode2):         | sync - head - data |
317c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *                                 |  12  -   4  - 2336 |
318c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *
319c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * - XA data (green, mode2 form1): | sync - head - sub - data - EDC - ECC |
320c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *                                 |  12  -   4  -  8  - 2048 -  4  - 276 |
321c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *
322c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * - XA data (green, mode2 form2): | sync - head - sub - data - Spare |
323c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *                                 |  12  -   4  -  8  - 2324 -  4    |
324c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *
325c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */
326c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
327c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Some generally useful CD-ROM information -- mostly based on the above */
328c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CD_MINS              74 /* max. minutes per CD, not really a limit */
329c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CD_SECS              60 /* seconds per minute */
330c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CD_FRAMES            75 /* frames per second */
331c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CD_SYNC_SIZE         12 /* 12 sync bytes per raw data frame */
332c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CD_MSF_OFFSET       150 /* MSF numbering offset of first frame */
333c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CD_CHUNK_SIZE        24 /* lowest-level "data bytes piece" */
334c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CD_NUM_OF_CHUNKS     98 /* chunks per frame */
335c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CD_FRAMESIZE_SUB     96 /* subchannel data "frame" size */
336c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CD_HEAD_SIZE          4 /* header (address) bytes per raw data frame */
337c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CD_SUBHEAD_SIZE       8 /* subheader bytes per raw XA data frame */
338c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CD_EDC_SIZE           4 /* bytes EDC per most raw data frame types */
339c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CD_ZERO_SIZE          8 /* bytes zero per yellow book mode 1 frame */
340c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CD_ECC_SIZE         276 /* bytes ECC per most raw data frame types */
341c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CD_FRAMESIZE       2048 /* bytes per frame, "cooked" mode */
342c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CD_FRAMESIZE_RAW   2352 /* bytes per frame, "raw" mode */
343c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CD_FRAMESIZE_RAWER 2646 /* The maximum possible returned bytes */
344c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* most drives don't deliver everything: */
345c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CD_FRAMESIZE_RAW1 (CD_FRAMESIZE_RAW-CD_SYNC_SIZE) /*2340*/
346c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CD_FRAMESIZE_RAW0 (CD_FRAMESIZE_RAW-CD_SYNC_SIZE-CD_HEAD_SIZE) /*2336*/
347c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
348c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CD_XA_HEAD        (CD_HEAD_SIZE+CD_SUBHEAD_SIZE) /* "before data" part of raw XA frame */
349c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CD_XA_TAIL        (CD_EDC_SIZE+CD_ECC_SIZE) /* "after data" part of raw XA frame */
350c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CD_XA_SYNC_HEAD   (CD_SYNC_SIZE+CD_XA_HEAD) /* sync bytes + header of XA frame */
351c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
352c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* CD-ROM address types (cdrom_tocentry.cdte_format) */
353c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define	CDROM_LBA 0x01 /* "logical block": first frame is #0 */
354c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define	CDROM_MSF 0x02 /* "minute-second-frame": binary, not bcd here! */
355c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
356c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* bit to tell whether track is data or audio (cdrom_tocentry.cdte_ctrl) */
357c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define	CDROM_DATA_TRACK	0x04
358c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
359c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* The leadout track is always 0xAA, regardless of # of tracks on disc */
360c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define	CDROM_LEADOUT		0xAA
361c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
362c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* audio states (from SCSI-2, but seen with other drives, too) */
363c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define	CDROM_AUDIO_INVALID	0x00	/* audio status not supported */
364c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define	CDROM_AUDIO_PLAY	0x11	/* audio play operation in progress */
365c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define	CDROM_AUDIO_PAUSED	0x12	/* audio play operation paused */
366c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define	CDROM_AUDIO_COMPLETED	0x13	/* audio play successfully completed */
367c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define	CDROM_AUDIO_ERROR	0x14	/* audio play stopped due to error */
368c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define	CDROM_AUDIO_NO_STATUS	0x15	/* no current audio status to return */
369c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
370c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* capability flags used with the uniform CD-ROM driver */
371c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDC_CLOSE_TRAY		0x1     /* caddy systems _can't_ close */
372c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDC_OPEN_TRAY		0x2     /* but _can_ eject.  */
373c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDC_LOCK		0x4     /* disable manual eject */
374c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDC_SELECT_SPEED 	0x8     /* programmable speed */
375c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDC_SELECT_DISC		0x10    /* select disc from juke-box */
376c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDC_MULTI_SESSION 	0x20    /* read sessions>1 */
377c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDC_MCN			0x40    /* Medium Catalog Number */
378c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDC_MEDIA_CHANGED 	0x80    /* media changed */
379c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDC_PLAY_AUDIO		0x100   /* audio functions */
380c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDC_RESET               0x200   /* hard reset device */
381c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDC_DRIVE_STATUS        0x800   /* driver implements drive status */
382c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDC_GENERIC_PACKET	0x1000	/* driver implements generic packets */
383c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDC_CD_R		0x2000	/* drive is a CD-R */
384c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDC_CD_RW		0x4000	/* drive is a CD-RW */
385c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDC_DVD			0x8000	/* drive is a DVD */
386c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDC_DVD_R		0x10000	/* drive can write DVD-R */
387c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDC_DVD_RAM		0x20000	/* drive can write DVD-RAM */
388c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDC_MO_DRIVE		0x40000 /* drive is an MO device */
389c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDC_MRW			0x80000 /* drive can read MRW */
390c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDC_MRW_W		0x100000 /* drive can write MRW */
391c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDC_RAM			0x200000 /* ok to open for WRITE */
392c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
393c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* drive status possibilities returned by CDROM_DRIVE_STATUS ioctl */
394c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDS_NO_INFO		0	/* if not implemented */
395c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDS_NO_DISC		1
396c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDS_TRAY_OPEN		2
397c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDS_DRIVE_NOT_READY	3
398c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDS_DISC_OK		4
399c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
400c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* return values for the CDROM_DISC_STATUS ioctl */
401c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* can also return CDS_NO_[INFO|DISC], from above */
402c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDS_AUDIO		100
403c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDS_DATA_1		101
404c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDS_DATA_2		102
405c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDS_XA_2_1		103
406c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDS_XA_2_2		104
407c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDS_MIXED		105
408c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
409c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* User-configurable behavior options for the uniform CD-ROM driver */
410c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDO_AUTO_CLOSE		0x1     /* close tray on first open() */
411c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDO_AUTO_EJECT		0x2     /* open tray on last release() */
412c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDO_USE_FFLAGS		0x4     /* use O_NONBLOCK information on open */
413c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDO_LOCK		0x8     /* lock tray on open files */
414c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDO_CHECK_TYPE		0x10    /* check type on open for data */
415c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
416c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Special codes used when specifying changer slots. */
417c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDSL_NONE       	((int) (~0U>>1)-1)
418c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDSL_CURRENT    	((int) (~0U>>1))
419c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
420c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* For partition based multisession access. IDE can handle 64 partitions
421c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * per drive - SCSI CD-ROM's use minors to differentiate between the
422c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * various drives, so we can't do multisessions the same way there.
423c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Use the -o session=x option to mount on them.
424c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */
425c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CD_PART_MAX		64
426c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CD_PART_MASK		(CD_PART_MAX - 1)
427c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
428c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*********************************************************************
429c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Generic Packet commands, MMC commands, and such
430c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *********************************************************************/
431c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
432c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru /* The generic packet command opcodes for CD/DVD Logical Units,
433c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * From Table 57 of the SFF8090 Ver. 3 (Mt. Fuji) draft standard. */
434c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_BLANK			    0xa1
435c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_CLOSE_TRACK		    0x5b
436c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_FLUSH_CACHE		    0x35
437c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_FORMAT_UNIT		    0x04
438c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_GET_CONFIGURATION		    0x46
439c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_GET_EVENT_STATUS_NOTIFICATION 0x4a
440c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_GET_PERFORMANCE		    0xac
441c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_INQUIRY			    0x12
442c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_LOAD_UNLOAD		    0xa6
443c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_MECHANISM_STATUS		    0xbd
444c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_MODE_SELECT_10		    0x55
445c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_MODE_SENSE_10		    0x5a
446c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_PAUSE_RESUME		    0x4b
447c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_PLAY_AUDIO_10		    0x45
448c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_PLAY_AUDIO_MSF		    0x47
449c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_PLAY_AUDIO_TI		    0x48
450c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_PLAY_CD			    0xbc
451c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_PREVENT_ALLOW_MEDIUM_REMOVAL  0x1e
452c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_READ_10			    0x28
453c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_READ_12			    0xa8
454c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_READ_BUFFER_CAPACITY	    0x5c
455c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_READ_CDVD_CAPACITY	    0x25
456c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_READ_CD			    0xbe
457c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_READ_CD_MSF		    0xb9
458c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_READ_DISC_INFO		    0x51
459c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_READ_DVD_STRUCTURE	    0xad
460c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_READ_FORMAT_CAPACITIES	    0x23
461c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_READ_HEADER		    0x44
462c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_READ_TRACK_RZONE_INFO	    0x52
463c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_READ_SUBCHANNEL		    0x42
464c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_READ_TOC_PMA_ATIP		    0x43
465c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_REPAIR_RZONE_TRACK	    0x58
466c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_REPORT_KEY		    0xa4
467c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_REQUEST_SENSE		    0x03
468c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_RESERVE_RZONE_TRACK	    0x53
469c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_SEND_CUE_SHEET		    0x5d
470c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_SCAN			    0xba
471c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_SEEK			    0x2b
472c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_SEND_DVD_STRUCTURE	    0xbf
473c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_SEND_EVENT		    0xa2
474c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_SEND_KEY			    0xa3
475c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_SEND_OPC			    0x54
476c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_SET_READ_AHEAD		    0xa7
477c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_SET_STREAMING		    0xb6
478c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_START_STOP_UNIT		    0x1b
479c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_STOP_PLAY_SCAN		    0x4e
480c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_TEST_UNIT_READY		    0x00
481c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_VERIFY_10			    0x2f
482c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_WRITE_10			    0x2a
483c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_WRITE_AND_VERIFY_10	    0x2e
484c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* This is listed as optional in ATAPI 2.6, but is (curiously)
485c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * missing from Mt. Fuji, Table 57.  It _is_ mentioned in Mt. Fuji
486c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Table 377 as an MMC command for SCSi devices though...  Most ATAPI
487c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * drives support it. */
488c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_SET_SPEED			    0xbb
489c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* This seems to be a SCSI specific CD-ROM opcode
490c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * to play data at track/index */
491c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_PLAYAUDIO_TI		    0x48
492c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*
493c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * From MS Media Status Notification Support Specification. For
494c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * older drives only.
495c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */
496c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPCMD_GET_MEDIA_STATUS		    0xda
497c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
498c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Mode page codes for mode sense/set */
499c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPMODE_VENDOR_PAGE		0x00
500c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPMODE_R_W_ERROR_PAGE		0x01
501c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPMODE_WRITE_PARMS_PAGE		0x05
502c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPMODE_WCACHING_PAGE		0x08
503c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPMODE_AUDIO_CTL_PAGE		0x0e
504c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPMODE_POWER_PAGE		0x1a
505c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPMODE_FAULT_FAIL_PAGE		0x1c
506c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPMODE_TO_PROTECT_PAGE		0x1d
507c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPMODE_CAPABILITIES_PAGE	0x2a
508c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPMODE_ALL_PAGES		0x3f
509c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Not in Mt. Fuji, but in ATAPI 2.6 -- depricated now in favor
510c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * of MODE_SENSE_POWER_PAGE */
511c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GPMODE_CDROM_PAGE		0x0d
512c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
513c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
514c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
515c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* DVD struct types */
516c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define DVD_STRUCT_PHYSICAL	0x00
517c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define DVD_STRUCT_COPYRIGHT	0x01
518c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define DVD_STRUCT_DISCKEY	0x02
519c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define DVD_STRUCT_BCA		0x03
520c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define DVD_STRUCT_MANUFACT	0x04
521c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
522c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct dvd_layer {
523c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 book_version	: 4;
524c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 book_type		: 4;
525c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 min_rate		: 4;
526c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 disc_size		: 4;
527c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 layer_type		: 4;
528c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 track_path		: 1;
529c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 nlayers		: 2;
530c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 track_density	: 4;
531c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 linear_density	: 4;
532c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 bca		: 1;
533c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u32 start_sector;
534c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u32 end_sector;
535c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u32 end_sector_l0;
536c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
537c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
538c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define DVD_LAYERS	4
539c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
540c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct dvd_physical {
541c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 type;
542c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 layer_num;
543c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	struct dvd_layer layer[DVD_LAYERS];
544c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
545c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
546c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct dvd_copyright {
547c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 type;
548c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
549c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 layer_num;
550c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 cpst;
551c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 rmi;
552c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
553c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
554c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct dvd_disckey {
555c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 type;
556c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
557c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	unsigned agid		: 2;
558c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 value[2048];
559c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
560c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
561c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct dvd_bca {
562c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 type;
563c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
564c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int len;
565c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 value[188];
566c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
567c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
568c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct dvd_manufact {
569c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 type;
570c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
571c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 layer_num;
572c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int len;
573c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 value[2048];
574c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
575c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
576c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querutypedef union {
577c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 type;
578c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
579c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	struct dvd_physical	physical;
580c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	struct dvd_copyright	copyright;
581c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	struct dvd_disckey	disckey;
582c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	struct dvd_bca		bca;
583c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	struct dvd_manufact	manufact;
584c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} dvd_struct;
585c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
586c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*
587c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * DVD authentication ioctl
588c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */
589c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
590c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Authentication states */
591c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define DVD_LU_SEND_AGID	0
592c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define DVD_HOST_SEND_CHALLENGE	1
593c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define DVD_LU_SEND_KEY1	2
594c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define DVD_LU_SEND_CHALLENGE	3
595c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define DVD_HOST_SEND_KEY2	4
596c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
597c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Termination states */
598c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define DVD_AUTH_ESTABLISHED	5
599c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define DVD_AUTH_FAILURE	6
600c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
601c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Other functions */
602c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define DVD_LU_SEND_TITLE_KEY	7
603c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define DVD_LU_SEND_ASF		8
604c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define DVD_INVALIDATE_AGID	9
605c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define DVD_LU_SEND_RPC_STATE	10
606c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define DVD_HOST_SEND_RPC_STATE	11
607c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
608c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* State data */
609c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querutypedef __u8 dvd_key[5];		/* 40-bit value, MSB is first elem. */
610c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querutypedef __u8 dvd_challenge[10];	/* 80-bit value, MSB is first elem. */
611c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
612c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct dvd_lu_send_agid {
613c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 type;
614c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	unsigned agid		: 2;
615c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
616c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
617c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct dvd_host_send_challenge {
618c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 type;
619c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	unsigned agid		: 2;
620c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
621c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	dvd_challenge chal;
622c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
623c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
624c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct dvd_send_key {
625c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 type;
626c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	unsigned agid		: 2;
627c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
628c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	dvd_key key;
629c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
630c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
631c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct dvd_lu_send_challenge {
632c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 type;
633c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	unsigned agid		: 2;
634c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
635c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	dvd_challenge chal;
636c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
637c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
638c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define DVD_CPM_NO_COPYRIGHT	0
639c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define DVD_CPM_COPYRIGHTED	1
640c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
641c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define DVD_CP_SEC_NONE		0
642c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define DVD_CP_SEC_EXIST	1
643c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
644c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define DVD_CGMS_UNRESTRICTED	0
645c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define DVD_CGMS_SINGLE		2
646c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define DVD_CGMS_RESTRICTED	3
647c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
648c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct dvd_lu_send_title_key {
649c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 type;
650c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	unsigned agid		: 2;
651c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
652c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	dvd_key title_key;
653c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int lba;
654c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	unsigned cpm		: 1;
655c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	unsigned cp_sec		: 1;
656c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	unsigned cgms		: 2;
657c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
658c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
659c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct dvd_lu_send_asf {
660c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 type;
661c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	unsigned agid		: 2;
662c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
663c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	unsigned asf		: 1;
664c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
665c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
666c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct dvd_host_send_rpcstate {
667c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 type;
668c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 pdrc;
669c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
670c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
671c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct dvd_lu_send_rpcstate {
672c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 type		: 2;
673c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 vra		: 3;
674c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 ucca		: 3;
675c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 region_mask;
676c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 rpc_scheme;
677c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
678c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
679c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querutypedef union {
680c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 type;
681c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
682c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	struct dvd_lu_send_agid		lsa;
683c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	struct dvd_host_send_challenge	hsc;
684c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	struct dvd_send_key		lsk;
685c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	struct dvd_lu_send_challenge	lsc;
686c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	struct dvd_send_key		hsk;
687c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	struct dvd_lu_send_title_key	lstk;
688c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	struct dvd_lu_send_asf		lsasf;
689c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	struct dvd_host_send_rpcstate	hrpcs;
690c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	struct dvd_lu_send_rpcstate	lrpcs;
691c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} dvd_authinfo;
692c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
693c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct request_sense {
694c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#if defined(__BIG_ENDIAN_BITFIELD)
695c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 valid		: 1;
696c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 error_code		: 7;
697c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#elif defined(__LITTLE_ENDIAN_BITFIELD)
698c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 error_code		: 7;
699c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 valid		: 1;
700c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif
701c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 segment_number;
702c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#if defined(__BIG_ENDIAN_BITFIELD)
703c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved1		: 2;
704c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 ili		: 1;
705c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved2		: 1;
706c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 sense_key		: 4;
707c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#elif defined(__LITTLE_ENDIAN_BITFIELD)
708c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 sense_key		: 4;
709c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved2		: 1;
710c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 ili		: 1;
711c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved1		: 2;
712c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif
713c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 information[4];
714c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 add_sense_len;
715c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 command_info[4];
716c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 asc;
717c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 ascq;
718c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 fruc;
719c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 sks[3];
720c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 asb[46];
721c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
722c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
723c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*
724c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * feature profile
725c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */
726c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDF_RWRT	0x0020	/* "Random Writable" */
727c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDF_HWDM	0x0024	/* "Hardware Defect Management" */
728c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDF_MRW 	0x0028
729c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
730c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*
731c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * media status bits
732c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */
733c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDM_MRW_NOTMRW			0
734c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDM_MRW_BGFORMAT_INACTIVE	1
735c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDM_MRW_BGFORMAT_ACTIVE		2
736c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDM_MRW_BGFORMAT_COMPLETE	3
737c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
738c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*
739c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * mrw address spaces
740c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */
741c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define MRW_LBA_DMA			0
742c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define MRW_LBA_GAA			1
743c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
744c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*
745c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * mrw mode pages (first is deprecated) -- probed at init time and
746c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * cdi->mrw_mode_page is set
747c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */
748c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define MRW_MODE_PC_PRE1		0x2c
749c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define MRW_MODE_PC			0x03
750c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
751c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct mrw_feature_desc {
752c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u16 feature_code;
753c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#if defined(__BIG_ENDIAN_BITFIELD)
754c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved1		: 2;
755c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 feature_version	: 4;
756c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 persistent		: 1;
757c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 curr		: 1;
758c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#elif defined(__LITTLE_ENDIAN_BITFIELD)
759c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 curr		: 1;
760c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 persistent		: 1;
761c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 feature_version	: 4;
762c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved1		: 2;
763c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif
764c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 add_len;
765c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#if defined(__BIG_ENDIAN_BITFIELD)
766c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved2		: 7;
767c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 write		: 1;
768c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#elif defined(__LITTLE_ENDIAN_BITFIELD)
769c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 write		: 1;
770c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved2		: 7;
771c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif
772c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved3;
773c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved4;
774c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved5;
775c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
776c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
777c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* cf. mmc4r02g.pdf 5.3.10 Random Writable Feature (0020h) pg 197 of 635 */
778c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct rwrt_feature_desc {
779c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u16 feature_code;
780c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#if defined(__BIG_ENDIAN_BITFIELD)
781c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved1		: 2;
782c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 feature_version	: 4;
783c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 persistent		: 1;
784c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 curr		: 1;
785c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#elif defined(__LITTLE_ENDIAN_BITFIELD)
786c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 curr		: 1;
787c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 persistent		: 1;
788c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 feature_version	: 4;
789c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved1		: 2;
790c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif
791c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 add_len;
792c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u32 last_lba;
793c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u32 block_size;
794c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u16 blocking;
795c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#if defined(__BIG_ENDIAN_BITFIELD)
796c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved2		: 7;
797c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 page_present	: 1;
798c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#elif defined(__LITTLE_ENDIAN_BITFIELD)
799c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 page_present	: 1;
800c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved2		: 7;
801c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif
802c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved3;
803c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
804c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
805c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querutypedef struct {
806c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u16 disc_information_length;
807c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#if defined(__BIG_ENDIAN_BITFIELD)
808c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved1			: 3;
809c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru        __u8 erasable			: 1;
810c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru        __u8 border_status		: 2;
811c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru        __u8 disc_status		: 2;
812c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#elif defined(__LITTLE_ENDIAN_BITFIELD)
813c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru        __u8 disc_status		: 2;
814c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru        __u8 border_status		: 2;
815c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru        __u8 erasable			: 1;
816c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved1			: 3;
817c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#else
818c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#error "Please fix <asm/byteorder.h>"
819c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif
820c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 n_first_track;
821c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 n_sessions_lsb;
822c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 first_track_lsb;
823c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 last_track_lsb;
824c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#if defined(__BIG_ENDIAN_BITFIELD)
825c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 did_v			: 1;
826c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru        __u8 dbc_v			: 1;
827c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru        __u8 uru			: 1;
828c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru        __u8 reserved2			: 2;
829c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 dbit			: 1;
830c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 mrw_status			: 2;
831c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#elif defined(__LITTLE_ENDIAN_BITFIELD)
832c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 mrw_status			: 2;
833c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 dbit			: 1;
834c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru        __u8 reserved2			: 2;
835c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru        __u8 uru			: 1;
836c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru        __u8 dbc_v			: 1;
837c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 did_v			: 1;
838c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif
839c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 disc_type;
840c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 n_sessions_msb;
841c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 first_track_msb;
842c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 last_track_msb;
843c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u32 disc_id;
844c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u32 lead_in;
845c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u32 lead_out;
846c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 disc_bar_code[8];
847c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved3;
848c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 n_opc;
849c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} disc_information;
850c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
851c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querutypedef struct {
852c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u16 track_information_length;
853c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 track_lsb;
854c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 session_lsb;
855c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved1;
856c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#if defined(__BIG_ENDIAN_BITFIELD)
857c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved2			: 2;
858c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru        __u8 damage			: 1;
859c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru        __u8 copy			: 1;
860c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru        __u8 track_mode			: 4;
861c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 rt				: 1;
862c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 blank			: 1;
863c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 packet			: 1;
864c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 fp				: 1;
865c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 data_mode			: 4;
866c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved3			: 6;
867c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 lra_v			: 1;
868c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 nwa_v			: 1;
869c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#elif defined(__LITTLE_ENDIAN_BITFIELD)
870c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru        __u8 track_mode			: 4;
871c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru        __u8 copy			: 1;
872c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru        __u8 damage			: 1;
873c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved2			: 2;
874c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 data_mode			: 4;
875c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 fp				: 1;
876c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 packet			: 1;
877c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 blank			: 1;
878c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 rt				: 1;
879c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 nwa_v			: 1;
880c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 lra_v			: 1;
881c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved3			: 6;
882c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif
883c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u32 track_start;
884c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u32 next_writable;
885c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u32 free_blocks;
886c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u32 fixed_packet_size;
887c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u32 track_size;
888c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u32 last_rec_address;
889c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} track_information;
890c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
891c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct feature_header {
892c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u32 data_len;
893c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved1;
894c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved2;
895c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u16 curr_profile;
896c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
897c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
898c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct mode_page_header {
899c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u16 mode_data_length;
900c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 medium_type;
901c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved1;
902c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved2;
903c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved3;
904c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u16 desc_length;
905c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
906c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
907c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifdef __KERNEL__
908c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <linux/fs.h>		/* not really needed, later.. */
909c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <linux/device.h>
910c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
911c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct packet_command
912c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{
913c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	unsigned char 		cmd[CDROM_PACKET_SIZE];
914c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	unsigned char 		*buffer;
915c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	unsigned int 		buflen;
916c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int			stat;
917c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	struct request_sense	*sense;
918c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	unsigned char		data_direction;
919c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int			quiet;
920c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int			timeout;
921c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	void			*reserved[1];
922c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
923c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
924c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*
925c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * _OLD will use PIO transfer on atapi devices, _BPC_* will use DMA
926c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */
927c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDDA_OLD		0	/* old style */
928c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDDA_BPC_SINGLE		1	/* single frame block pc */
929c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDDA_BPC_FULL		2	/* multi frame block pc */
930c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
931c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Uniform cdrom data structures for cdrom.c */
932c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct cdrom_device_info {
933c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	struct cdrom_device_ops  *ops;  /* link to device_ops */
934c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	struct cdrom_device_info *next; /* next device_info for this major */
935c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	struct gendisk *disk;		/* matching block layer disk */
936c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	void *handle;		        /* driver-dependent data */
937c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* specifications */
938c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int mask;                       /* mask of capability: disables them */
939c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int speed;			/* maximum speed for reading data */
940c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int capacity;			/* number of discs in jukebox */
941c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* device-related storage */
942c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int options		: 30;	/* options flags */
943c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	unsigned mc_flags	: 2;	/* media change buffer flags */
944c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru    	int use_count;                  /* number of times device opened */
945c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru    	char name[20];                  /* name of the device type */
946c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* per-device flags */
947c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru        __u8 sanyo_slot		: 2;	/* Sanyo 3 CD changer support */
948c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru        __u8 reserved		: 6;	/* not used yet */
949c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int cdda_method;		/* see flags */
950c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 last_sense;
951c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 media_written;		/* dirty flag, DVD+RW bookkeeping */
952c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	unsigned short mmc3_profile;	/* current MMC3 profile */
953c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int for_data;
954c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int (*exit)(struct cdrom_device_info *);
955c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int mrw_mode_page;
956c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
957c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
958c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct cdrom_device_ops {
959c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* routines */
960c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int (*open) (struct cdrom_device_info *, int);
961c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	void (*release) (struct cdrom_device_info *);
962c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int (*drive_status) (struct cdrom_device_info *, int);
963c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int (*media_changed) (struct cdrom_device_info *, int);
964c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int (*tray_move) (struct cdrom_device_info *, int);
965c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int (*lock_door) (struct cdrom_device_info *, int);
966c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int (*select_speed) (struct cdrom_device_info *, int);
967c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int (*select_disc) (struct cdrom_device_info *, int);
968c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int (*get_last_session) (struct cdrom_device_info *,
969c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru				 struct cdrom_multisession *);
970c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int (*get_mcn) (struct cdrom_device_info *,
971c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru			struct cdrom_mcn *);
972c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	/* hard reset device */
973c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int (*reset) (struct cdrom_device_info *);
974c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	/* play stuff */
975c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int (*audio_ioctl) (struct cdrom_device_info *,unsigned int, void *);
976c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
977c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* driver specifications */
978c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	const int capability;   /* capability flags */
979c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int n_minors;           /* number of active minor devices */
980c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	/* handle uniform packets for scsi type devices (scsi,atapi) */
981c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int (*generic_packet) (struct cdrom_device_info *,
982c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru			       struct packet_command *);
983c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
984c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
985c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* the general block_device operations structure: */
986c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern int cdrom_open(struct cdrom_device_info *cdi, struct inode *ip,
987c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru			struct file *fp);
988c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern int cdrom_release(struct cdrom_device_info *cdi, struct file *fp);
989c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern int cdrom_ioctl(struct file *file, struct cdrom_device_info *cdi,
990c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru		struct inode *ip, unsigned int cmd, unsigned long arg);
991c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern int cdrom_media_changed(struct cdrom_device_info *);
992c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
993c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern int register_cdrom(struct cdrom_device_info *cdi);
994c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern int unregister_cdrom(struct cdrom_device_info *cdi);
995c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
996c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querutypedef struct {
997c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru    int data;
998c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru    int audio;
999c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru    int cdi;
1000c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru    int xa;
1001c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru    long error;
1002c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} tracktype;
1003c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
1004c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern int cdrom_get_last_written(struct cdrom_device_info *cdi, long *last_written);
1005c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern int cdrom_number_of_slots(struct cdrom_device_info *cdi);
1006c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern int cdrom_mode_select(struct cdrom_device_info *cdi,
1007c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru			     struct packet_command *cgc);
1008c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern int cdrom_mode_sense(struct cdrom_device_info *cdi,
1009c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru			    struct packet_command *cgc,
1010c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru			    int page_code, int page_control);
1011c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void init_cdrom_command(struct packet_command *cgc,
1012c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru			       void *buffer, int len, int type);
1013c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
1014c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* The SCSI spec says there could be 256 slots. */
1015c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CDROM_MAX_SLOTS	256
1016c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
1017c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct cdrom_mechstat_header {
1018c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#if defined(__BIG_ENDIAN_BITFIELD)
1019c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 fault         : 1;
1020c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 changer_state : 2;
1021c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 curslot       : 5;
1022c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 mech_state    : 3;
1023c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 door_open     : 1;
1024c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved1     : 4;
1025c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#elif defined(__LITTLE_ENDIAN_BITFIELD)
1026c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 curslot       : 5;
1027c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 changer_state : 2;
1028c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 fault         : 1;
1029c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved1     : 4;
1030c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 door_open     : 1;
1031c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 mech_state    : 3;
1032c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif
1033c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8     curlba[3];
1034c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8     nslots;
1035c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u16 slot_tablelen;
1036c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
1037c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
1038c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct cdrom_slot {
1039c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#if defined(__BIG_ENDIAN_BITFIELD)
1040c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 disc_present : 1;
1041c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved1    : 6;
1042c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 change       : 1;
1043c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#elif defined(__LITTLE_ENDIAN_BITFIELD)
1044c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 change       : 1;
1045c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved1    : 6;
1046c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 disc_present : 1;
1047c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif
1048c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved2[3];
1049c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
1050c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
1051c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct cdrom_changer_info {
1052c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	struct cdrom_mechstat_header hdr;
1053c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	struct cdrom_slot slots[CDROM_MAX_SLOTS];
1054c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
1055c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
1056c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querutypedef enum {
1057c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	mechtype_caddy = 0,
1058c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	mechtype_tray  = 1,
1059c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	mechtype_popup = 2,
1060c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	mechtype_individual_changer = 4,
1061c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	mechtype_cartridge_changer  = 5
1062c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} mechtype_t;
1063c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
1064c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querutypedef struct {
1065c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#if defined(__BIG_ENDIAN_BITFIELD)
1066c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 ps			: 1;
1067c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved1		: 1;
1068c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 page_code		: 6;
1069c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru        __u8 page_length;
1070c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved2		: 1;
1071c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 bufe		: 1;
1072c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 ls_v		: 1;
1073c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 test_write		: 1;
1074c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru        __u8 write_type		: 4;
1075c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 multi_session	: 2; /* or border, DVD */
1076c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 fp			: 1;
1077c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 copy		: 1;
1078c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 track_mode		: 4;
1079c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved3		: 4;
1080c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 data_block_type	: 4;
1081c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#elif defined(__LITTLE_ENDIAN_BITFIELD)
1082c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 page_code		: 6;
1083c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved1		: 1;
1084c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 ps			: 1;
1085c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru        __u8 page_length;
1086c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru        __u8 write_type		: 4;
1087c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 test_write		: 1;
1088c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 ls_v		: 1;
1089c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 bufe		: 1;
1090c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved2		: 1;
1091c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 track_mode		: 4;
1092c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 copy		: 1;
1093c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 fp			: 1;
1094c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 multi_session	: 2; /* or border, DVD */
1095c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 data_block_type	: 4;
1096c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved3		: 4;
1097c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif
1098c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 link_size;
1099c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved4;
1100c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#if defined(__BIG_ENDIAN_BITFIELD)
1101c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved5		: 2;
1102c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 app_code		: 6;
1103c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#elif defined(__LITTLE_ENDIAN_BITFIELD)
1104c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 app_code		: 6;
1105c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved5		: 2;
1106c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif
1107c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 session_format;
1108c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved6;
1109c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u32 packet_size;
1110c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u16 audio_pause;
1111c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 mcn[16];
1112c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 isrc[16];
1113c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 subhdr0;
1114c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 subhdr1;
1115c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 subhdr2;
1116c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 subhdr3;
1117c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} __attribute__((packed)) write_param_page;
1118c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
1119c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct modesel_head
1120c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{
1121c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	reserved1;
1122c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	medium;
1123c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	reserved2;
1124c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	block_desc_length;
1125c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	density;
1126c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	number_of_blocks_hi;
1127c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	number_of_blocks_med;
1128c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	number_of_blocks_lo;
1129c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	reserved3;
1130c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	block_length_hi;
1131c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	block_length_med;
1132c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8	block_length_lo;
1133c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
1134c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
1135c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querutypedef struct {
1136c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u16 report_key_length;
1137c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved1;
1138c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved2;
1139c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#if defined(__BIG_ENDIAN_BITFIELD)
1140c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 type_code			: 2;
1141c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 vra			: 3;
1142c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 ucca			: 3;
1143c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#elif defined(__LITTLE_ENDIAN_BITFIELD)
1144c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 ucca			: 3;
1145c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 vra			: 3;
1146c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 type_code			: 2;
1147c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif
1148c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 region_mask;
1149c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 rpc_scheme;
1150c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved3;
1151c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} rpc_state_t;
1152c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
1153c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct event_header {
1154c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u16 data_len;
1155c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#if defined(__BIG_ENDIAN_BITFIELD)
1156c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 nea		: 1;
1157c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved1		: 4;
1158c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 notification_class	: 3;
1159c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#elif defined(__LITTLE_ENDIAN_BITFIELD)
1160c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 notification_class	: 3;
1161c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved1		: 4;
1162c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 nea		: 1;
1163c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif
1164c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 supp_event_class;
1165c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
1166c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
1167c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct media_event_desc {
1168c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#if defined(__BIG_ENDIAN_BITFIELD)
1169c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved1		: 4;
1170c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 media_event_code	: 4;
1171c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved2		: 6;
1172c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 media_present	: 1;
1173c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 door_open		: 1;
1174c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#elif defined(__LITTLE_ENDIAN_BITFIELD)
1175c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 media_event_code	: 4;
1176c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved1		: 4;
1177c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 door_open		: 1;
1178c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 media_present	: 1;
1179c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 reserved2		: 6;
1180c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif
1181c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 start_slot;
1182c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__u8 end_slot;
1183c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
1184c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
1185c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern int cdrom_get_media_event(struct cdrom_device_info *cdi, struct media_event_desc *med);
1186c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
1187c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif  /* End of kernel only stuff */
1188c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
1189c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif  /* _LINUX_CDROM_H */
1190