1 /* @(#)cdda_paranoia.h	1.29 13/12/22 J. Schilling from cdparanoia-III-alpha9.8 */
2 /*
3  * CopyPolicy: GNU Lesser General Public License v2.1 applies
4  * Copyright (C) 1997-2001,2008 by Monty (xiphmont@mit.edu)
5  * Copyright (C) 2002-2013 by J. Schilling
6  */
7 
8 #ifndef	_CDROM_PARANOIA_H
9 #define	_CDROM_PARANOIA_H
10 
11 #ifndef _SCHILY_MCONFIG_H
12 #include <schily/mconfig.h>
13 #endif
14 #ifndef _SCHILY_UTYPES_H
15 #include <schily/utypes.h>
16 #endif
17 
18 #define	CD_FRAMESIZE_RAW		2352
19 #define	CD_FRAMEWORDS			(CD_FRAMESIZE_RAW/2)
20 #define	CD_C2PTR_RAW			(CD_FRAMESIZE_RAW/8)
21 #define	CD_C2SIZE_RAW			(CD_FRAMESIZE_RAW + CD_C2PTR_RAW)
22 
23 #define	CD_READAHEAD			150	/* # of sectors to read for a block */
24 
25 /*
26  * Second parameter of the callback function
27  */
28 #define	PARANOIA_CB_READ		 0	/* Read off adjust ??? */
29 #define	PARANOIA_CB_VERIFY		 1	/* Verifying jitter */
30 #define	PARANOIA_CB_FIXUP_EDGE		 2	/* Fixed jitter at edge */
31 #define	PARANOIA_CB_FIXUP_ATOM		 3	/* Fixed jitter in atomic read */
32 #define	PARANOIA_CB_SCRATCH		 4	/* Unsupported */
33 #define	PARANOIA_CB_REPAIR		 5	/* Unsupported */
34 #define	PARANOIA_CB_SKIP		 6	/* Skip exhausted retry */
35 #define	PARANOIA_CB_DRIFT		 7	/* Drift detected */
36 #define	PARANOIA_CB_BACKOFF		 8	/* Unsupported */
37 #define	PARANOIA_CB_OVERLAP		 9	/* Dyn Overlap adjust */
38 #define	PARANOIA_CB_FIXUP_DROPPED	10	/* Fixed dropped bytes */
39 #define	PARANOIA_CB_FIXUP_DUPED		11	/* Fixed duplicate bytes */
40 #define	PARANOIA_CB_READERR		12	/* Hard read error */
41 #define	PARANOIA_CB_CACHEERR		13	/* Cache seek positional error */
42 #define	PARANOIA_CB_SECS		14	/* # of sectors with last read */
43 #define	PARANOIA_CB_C2ERR		15	/* # of reads with C2 errors */
44 #define	PARANOIA_CB_C2BYTES		16	/* # of bytes with C2 errors */
45 #define	PARANOIA_CB_C2SECS		17	/* # of sectors with C2 errors */
46 #define	PARANOIA_CB_C2MAXERRS		18	/* Max. # of C2 errors per sector */
47 
48 /*
49  * Cdparanoia modes to be set with paranoia_modeset()
50  */
51 #define	PARANOIA_MODE_FULL		 0xFF	/* Everything except C2CHECK */
52 #define	PARANOIA_MODE_DISABLE		 0
53 
54 #define	PARANOIA_MODE_VERIFY		 1	/* Verify data integrity in overlap area */
55 #define	PARANOIA_MODE_FRAGMENT		 2	/* unsupported */
56 #define	PARANOIA_MODE_OVERLAP		 4	/* Perform overlapped reads */
57 #define	PARANOIA_MODE_SCRATCH		 8	/* unsupported */
58 #define	PARANOIA_MODE_REPAIR		16	/* unsupported */
59 #define	PARANOIA_MODE_NEVERSKIP		32	/* Do not skip failed reads (retry maxretries) */
60 #define	PARANOIA_MODE_C2CHECK		256	/* Check C2 error pointer */
61 
62 
63 #ifndef	CDP_COMPILE
64 typedef	void    cdrom_paranoia;
65 #endif
66 
67 /*
68  * The interface from libcdparanoia to the high level caller
69  *
70  * paranoia_init() is a new function that was not present in the original
71  * implementation from Monty which works only on Linux and only with gcc.
72  * It is needed to make libparanoia reentrant and useful on systems with
73  * a limited linker (e.g. Mac OS X).
74  *
75  * The first parameter "void *d" is a pointer to the I/O handle for
76  * the callback functions. This typically is "SCSI *" when using raw
77  * SCSI based I/O.
78  *
79  * The callbacks do the following:
80  *	d_read			read raw audio sectors, return # of sectors read
81  *	d_disc_firstsector	return first audio sector on disk
82  *	d_disc_lastsector	return last audio sector on disk
83  *	d_tracks		return # of audio tracks on disk
84  *	d_track_firstsector	return first audio sector for track
85  *	d_track_lastsector	return last audio sector for track
86  *	d_sector_gettrack	return track number for a sector number
87  *	d_track_audiop		return whether track is a data track
88  */
89 extern cdrom_paranoia *paranoia_init	__PR((void * d, int nsectors,
90 			long	(*d_read)	__PR((void *d, void *buffer,
91 							long beginsector,
92 							long sectors)),
93 			long	(*d_disc_firstsector)	__PR((void *d)),
94 			long	(*d_disc_lastsector)	__PR((void *d)),
95 			int	(*d_tracks)		__PR((void *d)),
96 			long	(*d_track_firstsector) __PR((void *d, int track)),
97 			long	(*d_track_lastsector)  __PR((void *d, int track)),
98 			int 	(*d_sector_gettrack) __PR((void *d, long sector)),
99 			int 	(*d_track_audiop) __PR((void *d, int track))));
100 
101 /*
102  * paranoia_dynoverlapset	set dynamic setcot overlap range
103  * paranoia_modeset		set paranoia modes from bit values above
104  * paranoia_modeget		get paranoia modes from bit values above
105  * paranoia_set_readahead	set # of sectors to be read on a bulk
106  * paranoia_get_readahead	get # of sectors to be read on a bulk
107  * paranoia_seek		seek to new sector for paranoia operations
108  * paranoia_read		read a single audio sector from seek pointer
109  * paranoia_read_limited	like paranoia_read() but with retry counter
110  * paranoia_free		free allocated data from last operation
111  * paranoia_overlapset		set static overlap (disables dynamic overlap)
112  *
113  * The callback function is called to update statistics information.
114  */
115 extern void	paranoia_dynoverlapset	__PR((cdrom_paranoia * p,
116 							int minoverlap,
117 							int maxoverlap));
118 extern void	paranoia_modeset	__PR((cdrom_paranoia * p, int mode));
119 extern int	paranoia_modeget	__PR((cdrom_paranoia * p));
120 extern void	paranoia_set_readahead	__PR((cdrom_paranoia * p,
121 							int readahead));
122 extern int	paranoia_get_readahead	__PR((cdrom_paranoia * p));
123 extern long	paranoia_seek		__PR((cdrom_paranoia * p,
124 							long seek,
125 							int mode));
126 extern Int16_t	*paranoia_read		__PR((cdrom_paranoia * p,
127 						void (*callback) (long, int)));
128 extern Int16_t	*paranoia_read_limited	__PR((cdrom_paranoia * p,
129 						void (*callback) (long, int),
130 						int maxretries));
131 extern void	paranoia_free		__PR((cdrom_paranoia * p));
132 extern void	paranoia_overlapset	__PR((cdrom_paranoia * p,
133 						long overlap));
134 
135 #ifndef	HAVE_MEMMOVE
136 #ifndef _SCHILY_SCHILY_H
137 #include <schily/schily.h>
138 #endif
139 #define	memmove(dst, src, size)		movebytes((src), (dst), (size))
140 #endif
141 
142 #endif	/* _CDROM_PARANOIA_H */
143