cd.device: CD32 CDROM support
[AROS.git] / compiler / include / devices / cd.h
bloba20cad4853c34ab534c30c0805a77e7cf0aeea37
1 #ifndef DEVICES_CD_H
2 #define DEVICES_CD_H
4 /*
5 Copyright © 1995-2001, The AROS Development Team. All rights reserved.
6 $Id$
8 Desc: Definitions for cd.device and CD drivers
9 Lang: english
12 /* CD device error codes */
14 #ifndef EXEC_IO_H
15 #include <exec/io.h>
16 #endif
17 #ifndef DEVICES_TRACKDISK_H
18 #include <devices/trackdisk.h>
19 #endif
21 #define CDERR_OPENFAIL (-1)
22 #define CDERR_ABORTED (-2)
23 #define CDERR_NOCMD (-3)
24 #define CDERR_BADLENGTH (-4)
25 #define CDERR_BADADDRESS (-5)
26 #define CDERR_UNITBUSY (-6)
27 #define CDERR_SELFTEST (-7)
29 #define CDERR_NotSpecified 20
30 #define CDERR_NoSecHdr 21
31 #define CDERR_BadSecPreamble 22
32 #define CDERR_BadSecID 23
33 #define CDERR_BadHdrSum 24
34 #define CDERR_BadSecSum 25
35 #define CDERR_TooFewSecs 26
36 #define CDERR_BadSecHdr 27
37 #define CDERR_WriteProt 28
38 #define CDERR_NoDisk 29
39 #define CDERR_SeekError 30
40 #define CDERR_NoMem 31
41 #define CDERR_BadUnitNum 32
42 #define CDERR_BadDriveType 33
43 #define CDERR_DriveInUse 34
44 #define CDERR_PostReset 35
45 #define CDERR_BadDataType 36
46 #define CDERR_InvalidState 37
48 #define CDERR_Phase 42
49 #define CDERR_NoBoard 50
51 #define CD_RESET CMD_RESET
52 #define CD_READ CMD_READ
53 #define CD_WRITE CMD_WRITE
54 #define CD_UPDATE CMD_UPDATE
55 #define CD_CLEAR CMD_CLEAR
56 #define CD_STOP CMD_STOP
57 #define CD_START CMD_START
58 #define CD_FLUSH CMD_FLUSH
59 #define CD_MOTOR TD_MOTOR
60 #define CD_SEEK TD_SEEK
61 #define CD_FORMAT TD_FORMAT
62 #define CD_REMOVE TD_REMOVE
63 #define CD_CHANGENUM TD_CHANGENUM
64 #define CD_CHANGESTATE TD_CHANGESTATE
65 #define CD_PROTSTATUS TD_PROTSTATUS
66 #define CD_GETDRIVETYPE TD_GETDRIVETYPE
67 #define CD_GETNUMTRACKS TD_GETNUMTRACKS
68 #define CD_ADDCHANGEINT TD_ADDCHANGEINT
69 #define CD_REMCHANGEINT TD_REMCHANGEINT
70 #define CD_GETGEOMETRY TD_GETGEOMETRY
71 #define CD_EJECT TD_EJECT
73 #define CD_INFO 32 /* io_Data - Pointer to struct CDInfo
74 * io_Length - sizeof(struct CDInfo)
77 struct CDInfo {
78 UWORD PlaySpeed; /* In frames/second (75 = x1, 150 = x2, etc) */
79 UWORD ReadSpeed; /* In frames/second */
80 UWORD ReadXLSpeed; /* In frames/second */
81 UWORD SectorSize; /* 2048 or 2328 */
82 UWORD XLECC; /* 1 = CDXL ECC enabled, 0 = CDXL ECC disabled */
83 UWORD EjectReset; /* 1 = Reset on eject */
84 UWORD Reserved1[4];
85 UWORD MaxSpeed; /* Maximum frames/second for the drive */
86 UWORD AudioPrecision; /* 0 = no atten., 1 = mute only, N = levels */
87 UWORD Status; /* See CDSTSB_* flags */
88 UWORD Reserved2[4];
91 #define CDSTSB_CLOSED 0 /* Drive closed */
92 #define CDSTSB_DISK 1 /* Disk present */
93 #define CDSTSB_SPIN 2 /* Disk spinning */
94 #define CDSTSB_TOC 3 /* TOC read */
95 #define CDSTSB_CDROM 4 /* Track 1 is data Mode 1 */
96 #define CDSTSB_PLAYING 5 /* Playing audio track */
97 #define CDSTSB_PAUSED 6 /* Playing paused */
98 #define CDSTSB_SEARCH 7 /* Playing fast forward/fast reverse */
99 #define CDSTSB_DIRECTION 8 /* Playing forward (0) or reverse (1) */
101 #define CDSTSF_CLOSED (1 << CDSTSB_CLOSED)
102 #define CDSTSF_DISK (1 << CDSTSB_DISK)
103 #define CDSTSF_SPIN (1 << CDSTSB_SPIN)
104 #define CDSTSF_TOC (1 << CDSTSB_TOC)
105 #define CDSTSF_CDROM (1 << CDSTSB_CDROM)
106 #define CDSTSF_PLAYING (1 << CDSTSB_PLAYING)
107 #define CDSTSF_PAUSED (1 << CDSTSB_PAUSED)
108 #define CDSTSF_SEARCH (1 << CDSTSB_SEARCH)
109 #define CDSTSF_DIRECTION (1 << CDSTSB_DIRECTION)
111 #define CD_CONFIG 33 /* io_Data - Pointer to TagItem array
112 * io_Length - 0
114 /* NOTE: TAG_IGNORE, TAG_MORE, and TAG_SKIP are illegal in this command! */
115 #define TAGCD_DONE 0 /* Last tag */
116 #define TAGCD_PLAYSPEED 1 /* in frames/second */
117 #define TAGCD_READSPEED 2 /* in frames/second */
118 #define TAGCD_READXLSPEED 3 /* in frames/second */
119 #define TAGCD_SECTORSIZE 4 /* 2048 or 2328 */
120 #define TAGCD_XLECC 5 /* 0 or 1 */
121 #define TAGCD_EJECTRESET 6 /* 0 or 1 */
123 #define CD_TOCMSF 34
124 #define CD_TOCLSN 35 /* io_Data - union CDTOC array
125 * io_Length - # of CDTOC array entries.
126 * io_Offset - Starting entry (0 for summary)
129 union LSNMSF {
130 struct RMSF {
131 UBYTE Reserved; /* Always 0 */
132 UBYTE Minute; /* Minutes (0..99) */
133 UBYTE Second; /* Seconds (0..59) */
134 UBYTE Frame; /* Frame (0..74) */
135 } MSF;
136 ULONG LSN; /* Logical sector number */
139 union CDTOC {
140 struct TOCSummary { /* Entry 0 */
141 UBYTE FirstTrack; /* ID of first track (almost always 1) */
142 UBYTE LastTrack; /* Last track on the disk */
143 union LSNMSF LeadOut; /* Beginning of lead-out */
144 } Summary;
145 struct TOCEntry { /* All other entries */
146 UBYTE CtlAdr; /* Q-Code */
147 UBYTE Track; /* Track Number */
148 union LSNMSF Position;
149 } Entry;
152 #define CD_READXL 36 /* io_Data - Pointer to CDXL node's List
153 * io_Length - Maximum transfer length (or 0)
154 * io_Offset - Byte offset into Mode 1 Track 1
157 #define CD_READXL_INTP(n, cdxl, data) \
158 AROS_UFP3(VOID, n, \
159 AROS_UFPA(struct CDXL *, cdxl, A2), \
160 AROS_UFPA(APTR, data, A4), \
161 AROS_UFPA(struct ExecBase *, __cxdl_SysBase, A6))
163 #define CD_READXL_INTC(n, cdxl, data) \
164 AROS_UFC3(VOID, n, \
165 AROS_UFCA(struct CDXL *, cdxl, A2), \
166 AROS_UFCA(APTR, data, A4), \
167 AROS_UFCA(struct ExecBase *, SysBase, A6))
169 #define CD_READXL_INTH(n, cdxl, data) \
170 AROS_UFH3(VOID, n, \
171 AROS_UFHA(struct CDXL *, cdxl, A2), \
172 AROS_UFHA(APTR, data, A4), \
173 AROS_UFHA(struct ExecBase *, SysBase, A6))
175 #define CD_READXL_INTFUNC_INIT AROS_USERFUNC_INIT
176 #define CD_READXL_INTFUNC_EXIT AROS_USERFUNC_EXIT
178 struct CDXL {
179 struct MinNode Node;
180 BYTE *Buffer;
181 LONG Length;
182 LONG Actual;
183 APTR IntData; /* 'data' parameter */
184 APTR IntCode; /* CD_READXL_INTH() function */
187 #define CD_PLAYTRACK 37 /* io_Length - Number of track to play
188 * io_Offset - Starting track
190 #define CD_PLAYMSF 38 /* io_Length - MSF length to play
191 * io_Offset - MSF start
193 #define CD_PLAYLSN 39 /* io_Length - Frames to play
194 * io_Offset - Starting frame
196 #define CD_PAUSE 40 /* io_Length - 0 = unpause, 1 = pause */
198 #define CD_SEARCH 41 /* io_Length - 0 (normal), 1 (FFW), 2 (FREV) */
200 /* Modes for CD_SEARCH's io_Length parameter: */
201 #define CDMODE_NORMAL 0 /* Play normally */
202 #define CDMODE_FFWD 1 /* Play fast forward */
203 #define CDMODE_FREV 2 /* Play fast reverse */
205 #define CD_QCODEMSF 42
206 #define CD_QCODELSN 43 /* io_Data - Pointer to struct QCode
207 * io_Length - sizeof(struct QCode)
209 struct QCode {
210 UBYTE CtlAdr;
211 UBYTE Track;
212 UBYTE Index;
213 UBYTE Zero;
214 union LSNMSF TrackPosition;
215 union LSNMSF DiskPosition;
218 #define CD_ATTENUATE 44 /* io_Length - Duration of fade in frames
219 * io_Offset - Target volume (0 - 0x7FFF, or -1)
220 * -> io_Actual - Current volume
223 #define CD_ADDFRAMEINT 45 /* io_Data - struct Interrupt
224 * io_Length - sizeof(struct Interrupt)
226 #define CD_REMFRAMEINT 46
229 #endif /* DEVICES_CD_H */