Prevent: warning: dereferencing type-punned pointer will break strict-aliasing rules
[reactos.git] / include / ntos / cdrom.h
1 /* $Id$
2  *
3  * COPYRIGHT:    See COPYING in the top level directory
4  * PROJECT:      ReactOS kernel
5  * FILE:         include/ntos/cdrom.h
6  * PURPOSE:      CD-ROM related definitions used by all the parts of the system
7  * PROGRAMMER:   Eric Kohl <ekohl@rz-online.de>
8  * UPDATE HISTORY:
9  *               10/04/2002: Created
10  */
11
12 #ifndef __INCLUDE_NTOS_CDROM_H
13 #define __INCLUDE_NTOS_CDROM_H
14
15
16 #define IOCTL_CDROM_BASE                FILE_DEVICE_CD_ROM
17
18 #define IOCTL_CDROM_READ_TOC            CTL_CODE(IOCTL_CDROM_BASE, 0x0000, METHOD_BUFFERED, FILE_READ_ACCESS)
19 #define IOCTL_CDROM_GET_LAST_SESSION    CTL_CODE(IOCTL_CDROM_BASE, 0x000E, METHOD_BUFFERED, FILE_READ_ACCESS)
20 #define IOCTL_CDROM_GET_DRIVE_GEOMETRY  CTL_CODE(IOCTL_CDROM_BASE, 0x0013, METHOD_BUFFERED, FILE_READ_ACCESS)
21
22 #define IOCTL_CDROM_CHECK_VERIFY        CTL_CODE(IOCTL_CDROM_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
23 #define IOCTL_CDROM_MEDIA_REMOVAL       CTL_CODE(IOCTL_CDROM_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS)
24 #define IOCTL_CDROM_EJECT_MEDIA         CTL_CODE(IOCTL_CDROM_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)
25 #define IOCTL_CDROM_LOAD_MEDIA          CTL_CODE(IOCTL_CDROM_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS)
26 #define IOCTL_CDROM_RESERVE             CTL_CODE(IOCTL_CDROM_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS)
27 #define IOCTL_CDROM_RELEASE             CTL_CODE(IOCTL_CDROM_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS)
28 #define IOCTL_CDROM_FIND_NEW_DEVICES    CTL_CODE(IOCTL_CDROM_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
29
30
31 #define MAXIMUM_NUMBER_TRACKS           100
32 #define MAXIMUM_CDROM_SIZE              804
33
34 #define TOC_DATA_TRACK  0x04    /* TRACK_DATA.Control */
35 #define TOC_LAST_TRACK  0xAA    /* TRACK_DATA.TrackNumber */
36
37 typedef struct _TRACK_DATA
38 {
39   UCHAR  Reserved;
40   UCHAR  Control : 4;   /* bitfield; 0 || TOC_DATA_TRACK */
41   UCHAR  Adr : 4;       /* Q-subchannel info */
42   UCHAR  TrackNumber;   /* CDROM_TOC.FirstTrack or TOC_LAST_TRACK behind last track CDROM_TOC.TrackData[CDROM_TOC.LastTrack] */
43   UCHAR  Reserved1;
44   UCHAR  Address[4];    /* big-endian LBA address for TOC_DATA_TRACK; MSF (sometimes BCD-MSF) for audio */
45 } TRACK_DATA, *PTRACK_DATA;
46
47 typedef struct _CDROM_TOC
48 {
49   /* >='sizeof(CDROM_TOC with (LastTrack-FirstTrack+1)+1{TOC_LAST_TRACK track} tracks)-2'
50    * <='sizeof(CDROM_TOC)-2';
51    * It does not count 'Length' field itself (==minus 2 bytes).
52    * Little-endian format.
53    */
54   UCHAR  Length[2];
55   UCHAR  FirstTrack;    /* based anywhere */
56   UCHAR  LastTrack;     /* 'LastTrack-FirstTrack+1' is the real-tracks count; TOC_LAST_TRACK is one track behind */
57   TRACK_DATA  TrackData[MAXIMUM_NUMBER_TRACKS];
58 } CDROM_TOC, *PCDROM_TOC;
59
60 #define CDROM_TOC_SIZE sizeof(CDROM_TOC)
61
62 #endif /* __INCLUDE_NTOS_CDROM_H */
63
64 /* EOF */