git subrepo pull --force deps/lightrec
[pcsx_rearmed.git] / deps / libretro-common / include / libchdr / cdrom.h
1 /* license:BSD-3-Clause
2  * copyright-holders:Aaron Giles
3 ***************************************************************************
4
5     cdrom.h
6
7     Generic MAME cd-rom implementation
8
9 ***************************************************************************/
10
11 #pragma once
12
13 #ifndef __CDROM_H__
14 #define __CDROM_H__
15
16 #include <stdint.h>
17
18 /***************************************************************************
19     CONSTANTS
20 ***************************************************************************/
21
22 /* tracks are padded to a multiple of this many frames */
23 #define CD_TRACK_PADDING        (4)
24
25 #define CD_MAX_TRACKS           (99)    /* AFAIK the theoretical limit */
26 #define CD_MAX_SECTOR_DATA      (2352)
27 #define CD_MAX_SUBCODE_DATA     (96)
28
29 #define CD_FRAME_SIZE           (CD_MAX_SECTOR_DATA + CD_MAX_SUBCODE_DATA)
30 #define CD_FRAMES_PER_HUNK      (8)
31
32 #define CD_METADATA_WORDS       (1+(CD_MAX_TRACKS * 6))
33
34 enum
35 {
36         CD_TRACK_MODE1 = 0,         /* mode 1 2048 bytes/sector */
37         CD_TRACK_MODE1_RAW,         /* mode 1 2352 bytes/sector */
38         CD_TRACK_MODE2,             /* mode 2 2336 bytes/sector */
39         CD_TRACK_MODE2_FORM1,       /* mode 2 2048 bytes/sector */
40         CD_TRACK_MODE2_FORM2,       /* mode 2 2324 bytes/sector */
41         CD_TRACK_MODE2_FORM_MIX,    /* mode 2 2336 bytes/sector */
42         CD_TRACK_MODE2_RAW,         /* mode 2 2352 bytes / sector */
43         CD_TRACK_AUDIO,         /* redbook audio track 2352 bytes/sector (588 samples) */
44
45         CD_TRACK_RAW_DONTCARE       /* special flag for cdrom_read_data: just return me whatever is there */
46 };
47
48 enum
49 {
50         CD_SUB_NORMAL = 0,          /* "cooked" 96 bytes per sector */
51         CD_SUB_RAW,                 /* raw uninterleaved 96 bytes per sector */
52         CD_SUB_NONE                 /* no subcode data stored */
53 };
54
55 #define CD_FLAG_GDROM   0x00000001  /* disc is a GD-ROM, all tracks should be stored with GD-ROM metadata */
56 #define CD_FLAG_GDROMLE 0x00000002  /* legacy GD-ROM, with little-endian CDDA data */
57
58 /***************************************************************************
59     FUNCTION PROTOTYPES
60 ***************************************************************************/
61
62 #ifdef WANT_RAW_DATA_SECTOR
63 /* ECC utilities */
64 int ecc_verify(const uint8_t *sector);
65 void ecc_generate(uint8_t *sector);
66 void ecc_clear(uint8_t *sector);
67 #endif
68
69 #endif  /* __CDROM_H__ */