cdio_mmc_structs.h revision 1.2
11.2Sriastrad/* $NetBSD: cdio_mmc_structs.h,v 1.2 2022/04/09 10:05:35 riastradh Exp $ */ 21.1Sreinoud 31.1Sreinoud/* 41.1Sreinoud * Copyright (c) 2006, 2008, 2013 Reinoud Zandijk 51.1Sreinoud * All rights reserved. 61.2Sriastrad * 71.1Sreinoud * Redistribution and use in source and binary forms, with or without 81.1Sreinoud * modification, are permitted provided that the following conditions 91.1Sreinoud * are met: 101.1Sreinoud * 1. Redistributions of source code must retain the above copyright 111.1Sreinoud * notice, this list of conditions and the following disclaimer. 121.1Sreinoud * 2. Redistributions in binary form must reproduce the above copyright 131.1Sreinoud * notice, this list of conditions and the following disclaimer in the 141.1Sreinoud * documentation and/or other materials provided with the distribution. 151.2Sriastrad * 161.1Sreinoud * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 171.1Sreinoud * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 181.1Sreinoud * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 191.1Sreinoud * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 201.1Sreinoud * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 211.1Sreinoud * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 221.1Sreinoud * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 231.1Sreinoud * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 241.1Sreinoud * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 251.1Sreinoud * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 261.2Sriastrad * 271.1Sreinoud */ 281.1Sreinoud 291.1Sreinoud#ifndef _CDIO_MMC_EMU_H_ 301.1Sreinoud#define _CDIO_MMC_EMU_H_ 311.1Sreinoud 321.1Sreinoud#include <sys/types.h> 331.1Sreinoud 341.1Sreinoud/* 351.1Sreinoud * MMC device abstraction interface. 361.1Sreinoud * 371.1Sreinoud * It gathers information from GET_CONFIGURATION, READ_DISCINFO, 381.1Sreinoud * READ_TRACKINFO, READ_TOC2, READ_CD_CAPACITY and GET_CONFIGURATION 391.1Sreinoud * SCSI/ATAPI calls regardless if its a legacy CD-ROM/DVD-ROM device or a MMC 401.1Sreinoud * standard recordable device. 411.1Sreinoud */ 421.1Sreinoudstruct mmc_discinfo { 431.1Sreinoud uint16_t mmc_profile; 441.1Sreinoud uint16_t mmc_class; 451.1Sreinoud 461.1Sreinoud uint8_t disc_state; 471.1Sreinoud uint8_t last_session_state; 481.1Sreinoud uint8_t bg_format_state; 491.1Sreinoud uint8_t link_block_penalty; /* in sectors */ 501.1Sreinoud 511.1Sreinoud uint64_t mmc_cur; /* current MMC_CAPs */ 521.1Sreinoud uint64_t mmc_cap; /* possible MMC_CAPs */ 531.1Sreinoud 541.1Sreinoud uint32_t disc_flags; /* misc flags */ 551.1Sreinoud 561.1Sreinoud uint32_t disc_id; 571.1Sreinoud uint64_t disc_barcode; 581.1Sreinoud uint8_t application_code; /* 8 bit really */ 591.1Sreinoud 601.1Sreinoud uint8_t unused1[3]; /* padding */ 611.1Sreinoud 621.1Sreinoud uint32_t last_possible_lba; /* last leadout start adr. */ 631.1Sreinoud uint32_t sector_size; 641.1Sreinoud 651.1Sreinoud uint16_t num_sessions; 661.1Sreinoud uint16_t num_tracks; /* derived */ 671.1Sreinoud 681.1Sreinoud uint16_t first_track; 691.1Sreinoud uint16_t first_track_last_session; 701.1Sreinoud uint16_t last_track_last_session; 711.1Sreinoud 721.1Sreinoud uint16_t unused2; /* padding/misc info resv. */ 731.1Sreinoud 741.1Sreinoud uint16_t reserved1[4]; /* MMC-5 track resources */ 751.1Sreinoud uint32_t reserved2[3]; /* MMC-5 POW resources */ 761.1Sreinoud 771.1Sreinoud uint32_t reserved3[8]; /* MMC-5+ */ 781.1Sreinoud}; 791.1Sreinoud#define MMCGETDISCINFO _IOR('c', 28, struct mmc_discinfo) 801.1Sreinoud 811.1Sreinoud#define MMC_CLASS_UNKN 0 821.1Sreinoud#define MMC_CLASS_DISC 1 831.1Sreinoud#define MMC_CLASS_CD 2 841.1Sreinoud#define MMC_CLASS_DVD 3 851.1Sreinoud#define MMC_CLASS_MO 4 861.1Sreinoud#define MMC_CLASS_BD 5 871.1Sreinoud#define MMC_CLASS_FILE 0xffff /* emulation mode */ 881.1Sreinoud 891.1Sreinoud#define MMC_DFLAGS_BARCODEVALID (1 << 0) /* barcode is present and valid */ 901.1Sreinoud#define MMC_DFLAGS_DISCIDVALID (1 << 1) /* discid is present and valid */ 911.1Sreinoud#define MMC_DFLAGS_APPCODEVALID (1 << 2) /* application code valid */ 921.1Sreinoud#define MMC_DFLAGS_UNRESTRICTED (1 << 3) /* restricted, then set app. code */ 931.1Sreinoud 941.1Sreinoud#define MMC_DFLAGS_FLAGBITS \ 951.1Sreinoud "\10\1BARCODEVALID\2DISCIDVALID\3APPCODEVALID\4UNRESTRICTED" 961.1Sreinoud 971.1Sreinoud#define MMC_CAP_SEQUENTIAL (1 << 0) /* sequential writable only */ 981.1Sreinoud#define MMC_CAP_RECORDABLE (1 << 1) /* record-able; i.e. not static */ 991.1Sreinoud#define MMC_CAP_ERASABLE (1 << 2) /* drive can erase sectors */ 1001.1Sreinoud#define MMC_CAP_BLANKABLE (1 << 3) /* media can be blanked */ 1011.1Sreinoud#define MMC_CAP_FORMATTABLE (1 << 4) /* media can be formatted */ 1021.1Sreinoud#define MMC_CAP_REWRITABLE (1 << 5) /* media can be rewritten */ 1031.1Sreinoud#define MMC_CAP_MRW (1 << 6) /* Mount Rainier formatted */ 1041.1Sreinoud#define MMC_CAP_PACKET (1 << 7) /* using packet recording */ 1051.1Sreinoud#define MMC_CAP_STRICTOVERWRITE (1 << 8) /* only writes a packet at a time */ 1061.1Sreinoud#define MMC_CAP_PSEUDOOVERWRITE (1 << 9) /* overwrite through replacement */ 1071.1Sreinoud#define MMC_CAP_ZEROLINKBLK (1 << 10) /* zero link block length capable */ 1081.1Sreinoud#define MMC_CAP_HW_DEFECTFREE (1 << 11) /* hardware defect management */ 1091.1Sreinoud 1101.1Sreinoud#define MMC_CAP_FLAGBITS \ 1111.1Sreinoud "\10\1SEQUENTIAL\2RECORDABLE\3ERASABLE\4BLANKABLE\5FORMATTABLE" \ 1121.1Sreinoud "\6REWRITABLE\7MRW\10PACKET\11STRICTOVERWRITE\12PSEUDOOVERWRITE" \ 1131.1Sreinoud "\13ZEROLINKBLK\14HW_DEFECTFREE" 1141.1Sreinoud 1151.1Sreinoud#define MMC_STATE_EMPTY 0 1161.1Sreinoud#define MMC_STATE_INCOMPLETE 1 1171.1Sreinoud#define MMC_STATE_FULL 2 1181.1Sreinoud#define MMC_STATE_CLOSED 3 1191.1Sreinoud 1201.1Sreinoud#define MMC_BGFSTATE_UNFORM 0 1211.1Sreinoud#define MMC_BGFSTATE_STOPPED 1 1221.1Sreinoud#define MMC_BGFSTATE_RUNNING 2 1231.1Sreinoud#define MMC_BGFSTATE_COMPLETED 3 1241.1Sreinoud 1251.1Sreinoud 1261.1Sreinoudstruct mmc_trackinfo { 1271.1Sreinoud uint16_t tracknr; /* IN/OUT */ 1281.1Sreinoud uint16_t sessionnr; 1291.1Sreinoud 1301.1Sreinoud uint8_t track_mode; 1311.1Sreinoud uint8_t data_mode; 1321.1Sreinoud 1331.1Sreinoud uint16_t flags; 1341.1Sreinoud 1351.1Sreinoud uint32_t track_start; 1361.1Sreinoud uint32_t next_writable; 1371.1Sreinoud uint32_t free_blocks; 1381.1Sreinoud uint32_t packet_size; 1391.1Sreinoud uint32_t track_size; 1401.1Sreinoud uint32_t last_recorded; 1411.1Sreinoud}; 1421.1Sreinoud#define MMCGETTRACKINFO _IOWR('c', 29, struct mmc_trackinfo) 1431.1Sreinoud 1441.1Sreinoud#define MMC_TRACKINFO_COPY (1 << 0) 1451.1Sreinoud#define MMC_TRACKINFO_DAMAGED (1 << 1) 1461.1Sreinoud#define MMC_TRACKINFO_FIXED_PACKET (1 << 2) 1471.1Sreinoud#define MMC_TRACKINFO_INCREMENTAL (1 << 3) 1481.1Sreinoud#define MMC_TRACKINFO_BLANK (1 << 4) 1491.1Sreinoud#define MMC_TRACKINFO_RESERVED (1 << 5) 1501.1Sreinoud#define MMC_TRACKINFO_NWA_VALID (1 << 6) 1511.1Sreinoud#define MMC_TRACKINFO_LRA_VALID (1 << 7) 1521.1Sreinoud#define MMC_TRACKINFO_DATA (1 << 8) 1531.1Sreinoud#define MMC_TRACKINFO_AUDIO (1 << 9) 1541.1Sreinoud#define MMC_TRACKINFO_AUDIO_4CHAN (1 << 10) 1551.1Sreinoud#define MMC_TRACKINFO_PRE_EMPH (1 << 11) 1561.1Sreinoud 1571.1Sreinoud#define MMC_TRACKINFO_FLAGBITS \ 1581.1Sreinoud "\10\1COPY\2DAMAGED\3FIXEDPACKET\4INCREMENTAL\5BLANK" \ 1591.1Sreinoud "\6RESERVED\7NWA_VALID\10LRA_VALID\11DATA\12AUDIO" \ 1601.1Sreinoud "\13AUDIO_4CHAN\14PRE_EMPH" 1611.1Sreinoud 1621.1Sreinoud#endif /* _CDIO_MMC_EMU_H_ */ 1631.1Sreinoud 164