Blame include/cdio/dvd.h

Packit dd8086
/*
Packit dd8086
    Copyright (C) 2004, 2010 Rocky Bernstein <rocky@gnu.org>
Packit dd8086
    Modeled after GNU/Linux definitions in linux/cdrom.h
Packit dd8086
Packit dd8086
    This program is free software: you can redistribute it and/or modify
Packit dd8086
    it under the terms of the GNU General Public License as published by
Packit dd8086
    the Free Software Foundation, either version 3 of the License, or
Packit dd8086
    (at your option) any later version.
Packit dd8086
Packit dd8086
    This program is distributed in the hope that it will be useful,
Packit dd8086
    but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit dd8086
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit dd8086
    GNU General Public License for more details.
Packit dd8086
Packit dd8086
    You should have received a copy of the GNU General Public License
Packit dd8086
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit dd8086
*/
Packit dd8086
Packit dd8086
/**
Packit dd8086
   \file dvd.h 
Packit dd8086
   \brief Definitions for DVD access.
Packit dd8086
Packit dd8086
   The documents we make use of are described Multi-Media Commands
Packit dd8086
   (MMC). This document generally has a numeric level number
Packit dd8086
   appended. For example MMC-5 refers to ``Multi-Media Commands - 5'
Packit dd8086
   which is the current version in 2010.
Packit dd8086
Packit dd8086
*/
Packit dd8086
Packit dd8086
#ifndef CDIO_DVD_H_
Packit dd8086
#define CDIO_DVD_H_
Packit dd8086
Packit dd8086
#include <cdio/types.h>
Packit dd8086
Packit dd8086
/**
Packit dd8086
   Values used in a READ DVD STRUCTURE
Packit dd8086
 */
Packit dd8086
typedef enum cdio_dvd_structure
Packit dd8086
{
Packit dd8086
	CDIO_DVD_STRUCT_PHYSICAL	= 0x00,
Packit dd8086
	CDIO_DVD_STRUCT_COPYRIGHT	= 0x01,
Packit dd8086
	CDIO_DVD_STRUCT_DISCKEY	        = 0x02,
Packit dd8086
	CDIO_DVD_STRUCT_BCA		= 0x03,
Packit dd8086
	CDIO_DVD_STRUCT_MANUFACT	= 0x04
Packit dd8086
} cdio_dvd_structure;
Packit dd8086
Packit dd8086
/**
Packit dd8086
    Media definitions for "DVD Book" from MMC-5 Table 400, page 419.
Packit dd8086
*/
Packit dd8086
typedef enum cdio_dvd_book
Packit dd8086
{
Packit dd8086
	CDIO_DVD_BOOK_DVD_ROM    = 0x0, /**< DVD-ROM */
Packit dd8086
	CDIO_DVD_BOOK_DVD_RAM    = 0x1, /**< DVD-RAM */
Packit dd8086
	CDIO_DVD_BOOK_DVD_R      = 0x2, /**< DVD-R */
Packit dd8086
	CDIO_DVD_BOOK_DVD_RW     = 0x3, /**< DVD-RW */
Packit dd8086
	CDIO_DVD_BOOK_HD_DVD_ROM = 0x4, /**< HD DVD-ROM */
Packit dd8086
	CDIO_DVD_BOOK_HD_DVD_RAM = 0x5, /**< HD DVD-RAM */
Packit dd8086
	CDIO_DVD_BOOK_HD_DVD_R   = 0x6, /**< HD DVD-R */
Packit dd8086
	CDIO_DVD_BOOK_DVD_PRW    = 0x9, /**< DVD+RW */
Packit dd8086
	CDIO_DVD_BOOK_DVD_PR     = 0xa, /**< DVD+R  */
Packit dd8086
	CDIO_DVD_BOOK_DVD_PRW_DL = 0xd, /**< DVD+RW DL  */
Packit dd8086
	CDIO_DVD_BOOK_DVD_PR_DL  = 0xe  /**< DVD+R DL  */
Packit dd8086
} cdio_dvd_book;
Packit dd8086
Packit dd8086
typedef struct cdio_dvd_layer {
Packit dd8086
  unsigned int book_version	: 4;
Packit dd8086
  unsigned int book_type	: 4;
Packit dd8086
  unsigned int min_rate	        : 4;
Packit dd8086
  unsigned int disc_size	: 4;
Packit dd8086
  unsigned int layer_type	: 4;
Packit dd8086
  unsigned int track_path	: 1;
Packit dd8086
  unsigned int nlayers	        : 2;
Packit dd8086
  unsigned int track_density	: 4;
Packit dd8086
  unsigned int linear_density   : 4;
Packit dd8086
  unsigned int bca		: 1;
Packit dd8086
  uint32_t start_sector;
Packit dd8086
  uint32_t end_sector;
Packit dd8086
  uint32_t end_sector_l0;
Packit dd8086
} cdio_dvd_layer_t;
Packit dd8086
Packit dd8086
/**
Packit dd8086
    Maximum number of layers in a DVD.  
Packit dd8086
 */
Packit dd8086
#define CDIO_DVD_MAX_LAYERS	4
Packit dd8086
Packit dd8086
typedef struct cdio_dvd_physical {
Packit dd8086
  uint8_t type;
Packit dd8086
  uint8_t layer_num;
Packit dd8086
  cdio_dvd_layer_t layer[CDIO_DVD_MAX_LAYERS];
Packit dd8086
} cdio_dvd_physical_t;
Packit dd8086
Packit dd8086
typedef struct cdio_dvd_copyright {
Packit dd8086
  uint8_t type;
Packit dd8086
  
Packit dd8086
  uint8_t layer_num;
Packit dd8086
  uint8_t cpst;
Packit dd8086
  uint8_t rmi;
Packit dd8086
} cdio_dvd_copyright_t;
Packit dd8086
Packit dd8086
typedef struct cdio_dvd_disckey {
Packit dd8086
  uint8_t type;
Packit dd8086
  
Packit dd8086
  unsigned agid	: 2;
Packit dd8086
  uint8_t value[2048];
Packit dd8086
} cdio_dvd_disckey_t;
Packit dd8086
Packit dd8086
typedef struct cdio_dvd_bca {
Packit dd8086
  uint8_t type;
Packit dd8086
  
Packit dd8086
  int len;
Packit dd8086
  uint8_t value[188];
Packit dd8086
} cdio_dvd_bca_t;
Packit dd8086
Packit dd8086
typedef struct cdio_dvd_manufact {
Packit dd8086
  uint8_t type;
Packit dd8086
  
Packit dd8086
  uint8_t layer_num;
Packit dd8086
  int len;
Packit dd8086
  uint8_t value[2048];
Packit dd8086
} cdio_dvd_manufact_t;
Packit dd8086
Packit dd8086
typedef union {
Packit dd8086
  uint8_t type;
Packit dd8086
  
Packit dd8086
  cdio_dvd_physical_t	physical;
Packit dd8086
  cdio_dvd_copyright_t	copyright;
Packit dd8086
  cdio_dvd_disckey_t	disckey;
Packit dd8086
  cdio_dvd_bca_t	bca;
Packit dd8086
  cdio_dvd_manufact_t	manufact;
Packit dd8086
} cdio_dvd_struct_t;
Packit dd8086
Packit dd8086
#endif /* CDIO_DVD_H_ */