1 /* $OpenBSD: extern.h,v 1.15 2010/03/01 02:09:44 krw Exp $ */ 2 /* 3 * Copyright (c) 2002 Marc Espie. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY THE OPENBSD PROJECT AND CONTRIBUTORS 15 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 16 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 17 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBSD 18 * PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 19 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 20 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 */ 26 27 #include <sys/queue.h> 28 29 struct cd_toc_entry; 30 struct track_info { 31 off_t sz; 32 off_t off; 33 u_int blklen; 34 int fd; 35 char *file; 36 SLIST_ENTRY(track_info) track_list; 37 char type; 38 int speed; 39 }; 40 SLIST_HEAD(track_head, track_info) tracks; 41 42 /* Read/Write speed */ 43 #define DRIVE_SPEED_MAX 0xfffe 44 #define DRIVE_SPEED_OPTIMAL 0xffff /* automatically adjusted by drive */ 45 46 /* Convert writing speed into Kbytes/sec (1x - 75 frames per second) */ 47 #define CD_SPEED_TO_KBPS(x, blksz) ((x) * 75 * (blksz) / 1024) 48 49 /* 50 * It's maximum possible speed for CD (audio track). 51 * Data tracks theoretically can be written at 436x but in practice I 52 * believe, 380x will be never reached. 53 * NOTE: this value must never be changed to a bigger value, it can cause 54 * DRIVE_SPEED_MAX overrun. 55 */ 56 #define CD_MAX_SPEED 380 57 58 /* MMC feature codes */ 59 #define MMC_FEATURE_CDRW_CAV 0x27 /* Constant Angular Velocity */ 60 #define MMC_FEATURE_CD_TAO 0x2d /* Track-At-Once writing mode */ 61 #define MMC_FEATURE_CDRW_WRITE 0x37 /* media is CD-RW and can be written */ 62 63 #define MMC_FEATURE_MAX 0x0110 64 65 /* Media types */ 66 #define MEDIATYPE_UNKNOWN 0 67 #define MEDIATYPE_CDR 1 68 #define MEDIATYPE_CDRW 2 69 70 extern unsigned long entry2time(struct cd_toc_entry *); 71 extern unsigned long entry2frames(struct cd_toc_entry *); 72 extern int open_cd(char *, int); 73 extern char ** cddb(const char *, int, struct cd_toc_entry *, char *); 74 extern unsigned long cddb_discid(int, struct cd_toc_entry *); 75 extern void free_names(char **); 76 extern int get_media_type(void); 77 extern int get_media_capabilities(u_int8_t *, int); 78 extern int blank(void); 79 extern int unit_ready(void); 80 extern int synchronize_cache(void); 81 extern int close_session(void); 82 extern int get_disc_size(off_t *); 83 extern int get_nwa(int *); 84 extern int writetao(struct track_head *); 85 extern int writetrack(struct track_info *, int); 86 extern int mode_sense_write(unsigned char []); 87 extern int mode_select_write(unsigned char []); 88 extern int cdrip(char *); 89 extern int cdplay(char *); 90 91 #define VERSION "2.1" 92 #define WAVHDRLEN 44 93