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