cdrecord.h
上传用户:xiejiait
上传日期:2007-01-06
资源大小:881k
文件大小:23k
源码类别:

SCSI/ASPI

开发平台:

MultiPlatform

  1. /* @(#)cdrecord.h 1.55 00/01/28 Copyright 1995 J. Schilling */
  2. /*
  3.  * Definitions for cdrecord
  4.  *
  5.  * Copyright (c) 1995 J. Schilling
  6.  */
  7. /*
  8.  * This program is free software; you can redistribute it and/or modify
  9.  * it under the terms of the GNU General Public License as published by
  10.  * the Free Software Foundation; either version 2, or (at your option)
  11.  * any later version.
  12.  *
  13.  * This program is distributed in the hope that it will be useful,
  14.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.  * GNU General Public License for more details.
  17.  *
  18.  * You should have received a copy of the GNU General Public License
  19.  * along with this program; see the file COPYING.  If not, write to
  20.  * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  21.  */
  22. /*
  23.  * Defines for option flags
  24.  */
  25. #define F_DUMMY 0x000001L /* Do dummy writes */
  26. #define F_TOC 0x000002L /* Get TOC */
  27. #define F_EJECT 0x000004L /* Eject disk after doing the work */
  28. #define F_LOAD 0x000008L /* Load disk only */
  29. #define F_MULTI 0x000010L /* Create linkable TOC/multi-session */
  30. #define F_MSINFO 0x000020L /* Get multi-session info */
  31. #define F_FIX 0x000040L /* Fixate disk only */
  32. #define F_NOFIX 0x000080L /* Do not fixate disk */
  33. #define F_VERSION 0x000100L /* Print version info */
  34. #define F_CHECKDRIVE 0x000200L /* Check for driver */
  35. #define F_INQUIRY 0x000400L /* Do inquiry */
  36. #define F_PRCAP 0x000800L /* Print capabilities */
  37. #define F_SCANBUS 0x001000L /* Scan SCSI Bus */
  38. #define F_RESET 0x002000L /* Reset SCSI Bus */
  39. #define F_BLANK 0x004000L /* Blank CD-RW */
  40. #define F_PRATIP 0x008000L /* Print ATIP info */
  41. #define F_PRDINFO 0x010000L /* Print disk info */
  42. #define F_IGNSIZE 0x020000L /* Ignore disk size */
  43. #define F_SAO 0x040000L /* Session at once */
  44. #define F_WRITE 0x080000L /* Disk is going to be written */
  45. #define F_FORCE 0x100000L /* Force things (e.g. blank on dead disk)  */
  46. #ifdef min
  47. #undef min
  48. #endif
  49. #define min(a, b) ((a)<(b)?(a):(b))
  50. #ifdef max
  51. #undef max
  52. #endif
  53. #define max(a, b) ((a)<(b)?(b):(a))
  54. #undef roundup
  55. #define roundup(x, y) ((((x)+((y)-1))/(y))*(y))
  56. #define DATA_SEC_SIZE 2048
  57. #define AUDIO_SEC_SIZE 2352
  58. #define MAX_TRACK 99 /* Red Book track limit */
  59. #define PAD_SECS 15 /* NOTE: pad must be less than BUF_SIZE */
  60. #define PAD_SIZE (PAD_SECS * DATA_SEC_SIZE)
  61. #define DEFAULT_FIFOSIZE (4*1024*1024)
  62. #ifdef nono
  63. typedef struct tindex {
  64. int dummy; /* Not yet implemented */
  65. } tindex_t;
  66. #endif
  67. typedef struct track {
  68. int f; /* Open file for this track */
  69. char *filename; /* File name for this track */
  70. long trackstart; /* Start of this track */
  71. long tracksize; /* Size of this track (-1 == until EOF) */
  72. long padsize; /* Pad size for this track (0 == none) */
  73. long pregapsize; /* Pre-gap size for this track */
  74. int secsize; /* Sector size for this track */
  75. int secspt; /* # of sectors to copy for one transfer*/
  76. int pktsize; /* # of blocks per write packet */
  77. char trackno; /* Track number for this track */
  78. char sectype; /* Sector type */
  79. char tracktype; /* Track type (toc type) */
  80. char dbtype; /* Data block type for this track */
  81. int flags; /* Flags (see below) */
  82. int nindex; /* Number of indices for track */
  83. long *tindex; /* Track index descriptor */
  84. char *isrc; /* ISRC code for this track / disk MCN */
  85. } track_t;
  86. /*
  87.  * Defines for flags
  88.  */
  89. #define TI_AUDIO 0x0001 /* File is an audio track */
  90. #define TI_PREEMP 0x0002 /* Audio track recorded w/preemphasis */
  91. #define TI_MIX 0x0004 /* This is a mixed mode track */
  92. #define TI_RAW 0x0008 /* Write this track in raw mode */
  93. #define TI_PAD 0x0010 /* Pad data track */
  94. #define TI_SWAB 0x0020 /* Swab audio data */
  95. #define TI_ISOSIZE 0x0040 /* Use iso size for track */
  96. #define TI_NOAUHDR 0x0080 /* Don't look for audio header */
  97. #define TI_FIRST 0x0100 /* This is the first track */
  98. #define TI_LAST 0x0200 /* This is the last track */
  99. #define TI_PACKET 0x0400 /* Fixed- or variable-packet track */
  100. #define TI_NOCLOSE 0x0800 /* Don't close the track after writing */
  101. #define TI_TAO 0x1000 /* This track is written in TAO mode */
  102. #define TI_PREGAP 0x2000 /* Prev. track incl. pregap of this tr. */
  103. #define TI_SCMS 0x4000 /* Force to follow the SCMS rules */
  104. #define TI_COPY 0x8000 /* Allow digital copy */
  105. #define is_audio(tp) (((tp)->flags & TI_AUDIO) != 0)
  106. #define is_preemp(tp) (((tp)->flags & TI_PREEMP) != 0)
  107. #define is_pad(tp) (((tp)->flags & TI_PAD) != 0)
  108. #define is_swab(tp) (((tp)->flags & TI_SWAB) != 0)
  109. #define is_first(tp) (((tp)->flags & TI_FIRST) != 0)
  110. #define is_last(tp) (((tp)->flags & TI_LAST) != 0)
  111. #define is_packet(tp) (((tp)->flags & TI_PACKET) != 0)
  112. #define is_noclose(tp) (((tp)->flags & TI_NOCLOSE) != 0)
  113. #define is_tao(tp) (((tp)->flags & TI_TAO) != 0)
  114. #define is_pregap(tp) (((tp)->flags & TI_PREGAP) != 0)
  115. #define is_scms(tp) (((tp)->flags & TI_SCMS) != 0)
  116. #define is_copy(tp) (((tp)->flags & TI_COPY) != 0)
  117. /*
  118.  * Defines for toc type / track type
  119.  */
  120. #define TOC_DA 0 /* CD-DA */
  121. #define TOC_ROM 1 /* CD-ROM */
  122. #define TOC_XA1 2 /* CD_ROM XA with first track in mode 1 */
  123. #define TOC_XA2 3 /* CD_ROM XA with first track in mode 2 */
  124. #define TOC_CDI 4 /* CDI */
  125. #define TOC_MASK 7 /* Mask needed for toctname[] */
  126. extern char *toc2name[]; /* Convert toc type to name */
  127. extern int toc2sess[]; /* Convert toc type to session format */
  128. /*
  129.  * Defines for sector type
  130.  *
  131.  * Mode is 2 bits
  132.  * Aud  is 1 bit
  133.  *
  134.  * Sector is: aud << 2 | mode 
  135.  */
  136. #define ST_ROM_MODE1 1 /* CD-ROM in mode 1 (vanilla cdrom) */
  137. #define ST_ROM_MODE2 2 /* CD-ROM in mode 2 */
  138. #define ST_AUDIO_NOPRE 4 /* CD-DA stereo without preemphasis */
  139. #define ST_AUDIO_PRE 5 /* CD-DA stereo with preemphasis */
  140. #define ST_AUDIOMASK 0x04 /* Mask for audio bit */
  141. #define ST_MODEMASK 0x03 /* Mask for mode bits in sector type */
  142. #define ST_MASK 0x07 /* Mask needed for sectname[] */
  143. extern char *st2name[]; /* Convert sector type to name */
  144. extern int st2mode[]; /* Convert sector type to control nibble*/
  145. /*
  146.  * Control nibble bits:
  147.  *
  148.  * 0 with preemphasis (audio) / incremental (data)
  149.  * 1 digital copy permitted
  150.  * 2 data (not audio) track
  151.  * 3 4 channels (not 2)
  152.  */
  153. #define TM_PREEM 0x1 /* Audio track with preemphasis */ 
  154. #define TM_INCREMENTAL 0x1 /* Incremental data track */ 
  155. #define TM_ALLOW_COPY 0x2 /* Digital copy permitted */
  156. #define TM_DATA 0x4 /* This is a data track */
  157. #define TM_QUADRO 0x8 /* Four channel audio */
  158. /*
  159.  * Adr nibble:
  160.  */
  161. #define ADR_NONE 0 /* Sub-Q mode info not supplied */
  162. #define ADR_POS 1 /* Sub-Q encodes position data */
  163. #define ADR_MCN 2 /* Sub-Q encodes Media Catalog Number */
  164. #define ADR_ISRC 3 /* Sub-Q encodes ISRC */
  165. /*
  166.  * Defines for write type (from SCSI-3/mmc)
  167.  */
  168. #define WT_PACKET 0x0 /* Packet writing */
  169. #define WT_TAO 0x1 /* Track at once */
  170. #define WT_SAO 0x2 /* Session at once */
  171. #define WT_RAW 0x3 /* Raw */
  172. #define WT_RES_4 0x4 /* Reserved */
  173. #define WT_RES_5 0x5 /* Reserved */
  174. #define WT_RES_6 0x6 /* Reserved */
  175. #define WT_RES_7 0x7 /* Reserved */
  176. #define WT_RES_8 0x8 /* Reserved */
  177. #define WT_RES_9 0x9 /* Reserved */
  178. #define WT_RES_A 0xA /* Reserved */
  179. #define WT_RES_B 0xB /* Reserved */
  180. #define WT_RES_C 0xC /* Reserved */
  181. #define WT_RES_D 0xD /* Reserved */
  182. #define WT_RES_E 0xE /* Reserved */
  183. #define WT_RES_F 0xF /* Reserved */
  184. /*
  185.  * Defines for data block type (from SCSI-3/mmc)
  186.  */
  187. #define DB_RAW 0 /* 2352 bytes of raw data   */
  188. #define DB_RAW_PQ 1 /* 2368 bytes (raw data + P/Q Subchannel) */
  189. #define DB_RAW_PW 2 /* 2448 bytes (raw data + P-W Subchannel) */
  190. #define DB_RAW_PW_R 3 /* 2448 bytes (raw data + P-W raw Subchannel)*/
  191. #define DB_RES_4 4 /* - Reserved   */
  192. #define DB_RES_5 5 /* - Reserved   */
  193. #define DB_RES_6 6 /* - Reserved   */
  194. #define DB_VU_7 7 /* - Vendor specific   */
  195. #define DB_ROM_MODE1 8 /* 2048 bytes Mode 1 (ISO/IEC 10149)   */
  196. #define DB_ROM_MODE2 9 /* 2336 bytes Mode 2 (ISO/IEC 10149)   */
  197. #define DB_XA_MODE1 10 /* 2048 bytes Mode 1? (CD-ROM XA form 1)  */
  198. #define DB_XA_MODE2 10 /* 2048 bytes Mode 2! (CD-ROM XA form 1)  */
  199. #define DB_XA_MODE2_F1 11 /* 2056 bytes Mode 2 (CD-ROM XA form 1)   */
  200. #define DB_XA_MODE2_F2 12 /* 2324 bytes Mode 2 (CD-ROM XA form 2)   */
  201. #define DB_XA_MODE2_MIX 13 /* 2332 bytes Mode 2 (CD-ROM XA 1/2+subhdr) */
  202. #define DB_RES_14 14 /* - Reserved   */
  203. #define DB_VU_15 15 /* - Vendor specific   */
  204. extern char *db2name[]; /* Convert data block type to name   */
  205. /*
  206.  * Defines for multi session type (from SCSI-3/mmc)
  207.  */
  208. #define MS_NONE 0 /* No B0 pointer. Next session not allowed*/
  209. #define MS_FINAL 1 /* B0 = FF:FF:FF. Next session not allowed*/
  210. #define MS_RES 2 /* Reserved   */
  211. #define MS_MULTI 3 /* B0 = Next PA.  Next session allowed   */
  212. /*
  213.  * Defines for session format (from SCSI-3/mmc)
  214.  */
  215. #define SES_DA_ROM 0x00 /* CD-DA or CD-ROM disk   */
  216. #define SES_CDI 0x10 /* CD-I disk   */
  217. #define SES_XA 0x20 /* CD-ROM XA disk   */
  218. #define SES_UNDEF 0xFF /* Undefined disk type (read disk info)   */
  219. /*
  220.  * Defines for blanking of CD-RW discs (from SCSI-3/mmc)
  221.  */
  222. #define BLANK_DISC      0x00    /* Erase the entire disc                  */
  223. #define BLANK_MINIMAL   0x01    /* Erase the PMA, 1st session TOC, pregap */
  224. #define BLANK_TRACK     0x02    /* Erase an incomplete track              */
  225. #define BLANK_UNRESERVE 0x03    /* Unreserve a track                      */
  226. #define BLANK_TAIL      0x04    /* Erase the tail of a track              */
  227. #define BLANK_UNCLOSE   0x05    /* Unclose the last session               */
  228. #define BLANK_SESSION   0x06    /* Erase the last session                 */
  229. /*
  230.  * Useful definitions for audio tracks
  231.  */
  232. #define sample (44100 * 2) /* one 16bit audio sample */
  233. #define ssample (sample * 2) /* one stereo sample */
  234. #define samples(v) ((v) / ssample) /* # of stereo samples */
  235. #define hsamples(v) ((v) / (ssample/100)) /* 100* # of stereo samples/s*/
  236. #define fsamples(v) ((v) / (ssample/75)) /* 75* # of stereo samples/s */
  237. #define minutes(v) ((int)(samples(v) / 60))
  238. #define seconds(v) ((int)(samples(v) % 60))
  239. #define hseconds(v) ((int)(hsamples(v) % 100))
  240. #define frames(v) ((int)(fsamples(v) % 75))
  241. typedef struct msf {
  242. char msf_min;
  243. char msf_sec;
  244. char msf_frame;
  245. } msf_t;
  246. /*
  247.  * Definitions for read TOC/PMA/ATIP command
  248.  */
  249. #define FMT_TOC 0
  250. #define FMT_SINFO 1
  251. #define FMT_FULLTOC 2
  252. #define FMT_PMA 3
  253. #define FMT_ATIP 4
  254. #define FMT_CDTEXT 5
  255. /*
  256.  * Definitions for read disk information "recording flags"
  257.  */
  258. #define RF_WRITE 0x0001 /* Disk is going to be written */
  259. /*
  260.  * Definitions for read disk information "disk status"
  261.  */
  262. #define DS_EMPTY 0 /* Empty disk */
  263. #define DS_APPENDABLE 1 /* Incomplete disk (appendable) */
  264. #define DS_COMPLETE 2 /* Complete disk (closed/no B0 pointer) */
  265. #define DS_RESERVED 3 /* Reserved */
  266. /*
  267.  * Definitions for read disk information "session status"
  268.  */
  269. #define SS_EMPTY 0 /* Empty session */
  270. #define SS_APPENDABLE 1 /* Incomplete session */
  271. #define SS_RESERVED 2 /* Reserved */
  272. #define SS_COMPLETE 3 /* Complete session (needs DS_COMPLETE) */
  273. /*
  274.  * Definitions for disk_status flags
  275.  */
  276. #define DSF_DID_V 0x0001 /* Disk id valid */
  277. #define DSF_DBC_V 0x0002 /* Disk bar code valid */
  278. #define DSF_URU 0x0004 /* Disk is for unrestricted use */
  279. #define DSF_ERA 0x0008 /* Disk is erasable */
  280. typedef struct disk_status dstat_t;
  281. struct disk_status {
  282. long ds_cdrflags; /* Recording flags from cdrecord*/
  283. long ds_diskid; /* Disk identification */
  284. int ds_flags; /* Disk_status flags */
  285. int ds_type; /* Abstract disk type */
  286. Uchar ds_disktype; /* Disk type (from TOC/PMA) */
  287. Uchar ds_diskstat; /* Disk status (MMC) */
  288. Uchar ds_sessstat; /* Status of last sesion (MMC) */
  289. Uchar ds_trfirst; /* first track # */
  290. Uchar ds_trlast; /* last track # */
  291. Uchar ds_trfirst_ls; /* first track # in last session*/
  292. Uchar ds_barcode[8]; /* Disk bar code */
  293. long ds_first_leadin; /* Start of first lead in (ATIP)*/
  294. long ds_last_leadout; /* Start of last lead out (ATIP)*/
  295. long ds_curr_leadin; /* Start of next lead in */
  296. long ds_curr_leadout; /* Start of next lead out */
  297. long ds_maxblocks; /* # of official blocks on disk */
  298. long ds_maxrblocks; /* # real blocks on disk */
  299. long ds_fwa; /* first writable addr */
  300. };
  301. /*
  302.  * First approach of a CDR device abstraction layer.
  303.  * This interface will change as long as I did not find the
  304.  * optimum that fits for all devices.
  305.  */
  306. /*--------------------------------------------------------------------------*/
  307. typedef struct cdr_cmd cdr_t;
  308. #ifdef _SCSITRANSP_H
  309. struct cdr_cmd {
  310. int cdr_dev;
  311. int cdr_flags;
  312. char *cdr_drname; /* Driver ID string */
  313. char *cdr_drtext; /* Driver ID text */
  314. struct cd_mode_page_2A *cdr_cdcap;
  315. /* dstat_t *cdr_dstat;*/
  316. #ifdef _SCSIREG_H
  317. cdr_t *(*cdr_identify) __PR((SCSI *scgp, cdr_t *, struct scsi_inquiry *)); /* identify drive */
  318. #else
  319. cdr_t *(*cdr_identify) __PR((SCSI *scgp, cdr_t *, void *)); /* identify drive */
  320. #endif
  321. int (*cdr_attach) __PR((SCSI *scgp, cdr_t *)); /* init error decoding etc*/
  322. int (*cdr_getdisktype) __PR((SCSI *scgp, cdr_t *, dstat_t *)); /* get disk type */
  323. int (*cdr_load) __PR((SCSI *scgp)); /* load disk */
  324. int (*cdr_unload) __PR((SCSI *scgp)); /* unload disk */
  325. int (*cdr_buffer_cap) __PR((SCSI *scgp, long *sizep, long *freep)); /* read buffer capacity */
  326. int (*cdr_check_recovery) __PR((SCSI *scgp)); /* check if recover is needed */
  327. int (*cdr_recover) __PR((SCSI *scgp, int track)); /* do recover */
  328. int (*cdr_set_speed_dummy) __PR((SCSI *scgp, int *speedp, int dummy)); /* set recording speed & dummy write */
  329. int (*cdr_set_secsize) __PR((SCSI *scgp, int secsize)); /* set sector size */
  330. int (*cdr_next_wr_address) __PR((SCSI *scgp, int track, track_t *trackp, long *ap)); /* get next writable addr. */
  331. int (*cdr_reserve_track) __PR((SCSI *scgp, unsigned long len)); /* reserve a track for future use */
  332. int (*cdr_write_trackdata) __PR((SCSI *scgp, caddr_t buf, long daddr, long bytecnt, int seccnt, BOOL islast));
  333. int (*cdr_send_cue) __PR((SCSI *scgp, int track, track_t *trackp)); /* send cue sheet */
  334. int (*cdr_open_track) __PR((SCSI *scgp, cdr_t *, int track, track_t *trackp)); /* open new track */
  335. int (*cdr_close_track) __PR((SCSI *scgp, int track, track_t *trackp)); /* close written track */
  336. int (*cdr_open_session) __PR((SCSI *scgp, int tracks, track_t *trackp, int toctype, int multi)); /* open new session */
  337. int (*cdr_close_session) __PR((SCSI *scgp)); /* really needed ??? */
  338. int (*cdr_session_offset) __PR((SCSI *scgp, long *soff)); /* read session offset*/
  339. int (*cdr_fixate) __PR((SCSI *scgp, int onp, int dummy, int toctype, int tracks, track_t *trackp)); /* write toc on disk */
  340. int (*cdr_blank) __PR((SCSI *scgp, long addr, int blanktype)); /* blank something */
  341. };
  342. #endif
  343. /*
  344.  * Definitions for cdr_flags
  345.  */
  346. #define CDR_TAO 0x01 /* Drive supports Track at once */
  347. #define CDR_DAO 0x02 /* Drive supports Disk at once */
  348. #define CDR_PACKET 0x04 /* Drive supports packet writing*/
  349. #define CDR_SWABAUDIO 0x08 /* Drive swabs audio data */
  350. #define CDR_ISREADER 0x10 /* Drive is s CD-ROM reader */
  351. #define CDR_TRAYLOAD 0x20 /* Drive loads CD with tray */
  352. #define CDR_CADDYLOAD 0x40 /* Drive loads CD with caddy */
  353. #define CDR_NO_LOLIMIT 0x80 /* Drive ignores lead-out limit */
  354. #define CDR_DVD 0x100 /* Drive is a DVD drive */
  355. #define CDR_ALLOC 0x1000 /* structure is allocated */
  356. /*
  357.  * cdrecord.c
  358.  */
  359. extern int read_buf __PR((int f, char *bp, int size));
  360. extern int get_buf __PR((int f, char **bpp, int size));
  361. #ifdef _SCSITRANSP_H
  362. extern int pad_track __PR((SCSI *scgp, cdr_t *dp, int track, track_t *trackp,
  363.      long startsec, long amt,
  364.      BOOL dolast, long *bytesp));
  365. extern void load_media __PR((SCSI *scgp, cdr_t *, BOOL));
  366. extern void unload_media __PR((SCSI *scgp, cdr_t *, int));
  367. #endif
  368. extern void raisepri __PR((int));
  369. extern int getnum __PR((char* arg, long* valp));
  370. /*
  371.  * defaults.c
  372.  */
  373. extern void cdr_defaults __PR((char **devp, int *speedp, long *fsp));
  374. /*
  375.  * cd_misc.c
  376.  */
  377. extern int from_bcd __PR((int b));
  378. extern int to_bcd __PR((int i));
  379. extern long msf_to_lba __PR((int m, int s, int f));
  380. extern BOOL lba_to_msf __PR((long lba, msf_t *mp));
  381. extern void print_min_atip __PR((long li, long lo));
  382. /*
  383.  * fifo.c
  384.  */
  385. extern void init_fifo __PR((long));
  386. extern BOOL init_faio __PR((int tracks, track_t *track, int));
  387. extern BOOL await_faio __PR((void));
  388. extern void kill_faio __PR((void));
  389. extern int wait_faio __PR((void));
  390. extern int faio_read_buf __PR((int f, char *bp, int size));
  391. extern int faio_get_buf __PR((int f, char **bpp, int size));
  392. extern void fifo_stats __PR((void));
  393. extern int fifo_percent __PR((BOOL addone));
  394. /*
  395.  * wm_session.c
  396.  */
  397. extern int write_session_data __PR((cdr_t *dp, int track, track_t *trackp));
  398. /*
  399.  * wm_track.c
  400.  */
  401. /*extern int write_track_data __PR((cdr_t *dp, int track, track_t *trackp));*/
  402. /*
  403.  * wm_packet.c
  404.  */
  405. #ifdef _SCSITRANSP_H
  406. extern int write_packet_data __PR((SCSI *scgp, cdr_t *dp, int track, track_t *trackp));
  407. #endif
  408. /*
  409.  * modes.c
  410.  */
  411. #ifdef _SCSITRANSP_H
  412. extern BOOL get_mode_params __PR((SCSI *scgp, int page, char *pagename,
  413. Uchar *modep, Uchar *cmodep,
  414. Uchar *dmodep, Uchar *smodep,
  415. int *lenp));
  416. extern BOOL set_mode_params __PR((SCSI *scgp, char *pagename, Uchar *modep,
  417. int len, int save, int secsize));
  418. #endif
  419. /*
  420.  * misc.c
  421.  */
  422. #ifdef timerclear
  423. extern void timevaldiff __PR((struct timeval *start, struct timeval *stop));
  424. #endif
  425. /*
  426.  * scsi_cdr.c
  427.  */
  428. #ifdef _SCSITRANSP_H
  429. extern BOOL unit_ready __PR((SCSI *scgp));
  430. extern BOOL wait_unit_ready __PR((SCSI *scgp, int secs));
  431. extern int test_unit_ready __PR((SCSI *scgp));
  432. extern int rezero_unit __PR((SCSI *scgp));
  433. extern int request_sense __PR((SCSI *scgp));
  434. extern int inquiry __PR((SCSI *scgp, caddr_t, int));
  435. extern int read_capacity __PR((SCSI *scgp));
  436. extern int scsi_load_unload __PR((SCSI *scgp, int));
  437. extern int scsi_prevent_removal __PR((SCSI *scgp, int));
  438. extern int scsi_start_stop_unit __PR((SCSI *scgp, int, int));
  439. extern int scsi_set_speed __PR((SCSI *scgp, int readspeed, int writespeed));
  440. extern int scsi_get_speed __PR((SCSI *scgp, int *readspeedp, int *writespeedp));
  441. extern int qic02 __PR((SCSI *scgp, int));
  442. extern int write_xg0 __PR((SCSI *scgp, caddr_t, long, long, int));
  443. extern int write_xg1 __PR((SCSI *scgp, caddr_t, long, long, int));
  444. extern int write_xg5 __PR((SCSI *scgp, caddr_t, long, long, int));
  445. extern int scsi_flush_cache __PR((SCSI *scgp));
  446. extern int read_buffer __PR((SCSI *scgp, caddr_t bp, int cnt, int mode));
  447. extern int read_subchannel __PR((SCSI *scgp, caddr_t bp, int track,
  448. int cnt,int msf, int subq, int fmt));
  449. extern int read_toc __PR((SCSI *scgp, caddr_t, int, int, int, int));
  450. extern int read_toc_philips __PR((SCSI *scgp, caddr_t, int, int, int, int));
  451. extern int read_header __PR((SCSI *scgp, caddr_t, long, int, int));
  452. extern int read_disk_info __PR((SCSI *scgp, caddr_t, int));
  453. extern int read_track_info __PR((SCSI *scgp, caddr_t, int, int));
  454. extern int scsi_close_tr_session __PR((SCSI *scgp, int type, int track));
  455. extern int read_master_cue __PR((SCSI *scgp, caddr_t bp, int sheet, int cnt));
  456. extern int send_cue_sheet __PR((SCSI *scgp, caddr_t bp, long size));
  457. extern int read_buff_cap __PR((SCSI *scgp, long *, long *));
  458. extern int scsi_blank __PR((SCSI *scgp, long addr, int blanktype));
  459. extern BOOL allow_atapi __PR((SCSI *scgp, BOOL new));
  460. extern int mode_select __PR((SCSI *scgp, Uchar *, int, int, int));
  461. extern int mode_sense __PR((SCSI *scgp, Uchar *dp, int cnt, int page, int pcf));
  462. extern int mode_select_sg0 __PR((SCSI *scgp, Uchar *, int, int, int));
  463. extern int mode_sense_sg0 __PR((SCSI *scgp, Uchar *dp, int cnt, int page, int pcf));
  464. extern int mode_select_g0 __PR((SCSI *scgp, Uchar *, int, int, int));
  465. extern int mode_select_g1 __PR((SCSI *scgp, Uchar *, int, int, int));
  466. extern int mode_sense_g0 __PR((SCSI *scgp, Uchar *dp, int cnt, int page, int pcf));
  467. extern int mode_sense_g1 __PR((SCSI *scgp, Uchar *dp, int cnt, int page, int pcf));
  468. extern int read_tochdr __PR((SCSI *scgp, cdr_t *, int *, int *));
  469. extern int read_cdtext __PR((SCSI *scgp));
  470. extern int read_trackinfo __PR((SCSI *scgp, int, long *, struct msf *, int *, int *, int *));
  471. extern int read_B0 __PR((SCSI *scgp, BOOL isbcd, long *b0p, long *lop));
  472. extern int read_session_offset __PR((SCSI *scgp, long *));
  473. extern int read_session_offset_philips __PR((SCSI *scgp, long *));
  474. extern int sense_secsize __PR((SCSI *scgp, int current));
  475. extern int select_secsize __PR((SCSI *scgp, int));
  476. extern BOOL is_cddrive __PR((SCSI *scgp));
  477. extern BOOL is_unknown_dev __PR((SCSI *scgp));
  478. extern int read_scsi __PR((SCSI *scgp, caddr_t, long, int));
  479. extern int read_g0 __PR((SCSI *scgp, caddr_t, long, int));
  480. extern int read_g1 __PR((SCSI *scgp, caddr_t, long, int));
  481. extern BOOL getdev __PR((SCSI *scgp, BOOL));
  482. extern void printdev __PR((SCSI *scgp));
  483. extern BOOL do_inquiry __PR((SCSI *scgp, BOOL));
  484. extern BOOL recovery_needed __PR((SCSI *scgp));
  485. extern int scsi_load __PR((SCSI *scgp));
  486. extern int scsi_unload __PR((SCSI *scgp));
  487. extern int scsi_cdr_write __PR((SCSI *scgp, caddr_t bp, long sectaddr, long size, int blocks, BOOL islast));
  488. extern struct cd_mode_page_2A * mmc_cap __PR((SCSI *scgp, Uchar *modep));
  489. extern void mmc_getval __PR((struct cd_mode_page_2A *mp,
  490. BOOL *cdrrp, BOOL *cdwrp,
  491. BOOL *cdrrwp, BOOL *cdwrwp,
  492. BOOL *dvdp));
  493. extern BOOL is_mmc __PR((SCSI *scgp, BOOL *dvdp));
  494. extern BOOL mmc_check __PR((SCSI *scgp, BOOL *cdrrp, BOOL *cdwrp,
  495. BOOL *cdrrwp, BOOL *cdwrwp,
  496. BOOL *dvdp));
  497. extern void print_capabilities __PR((SCSI *scgp));
  498. #endif
  499. /*
  500.  * cdr_drv.c
  501.  */
  502. #ifdef _SCSITRANSP_H
  503. #ifdef _SCSIREG_H
  504. extern cdr_t *drive_identify __PR((SCSI *scgp, cdr_t *, struct scsi_inquiry *ip));
  505. #else
  506. extern cdr_t *drive_identify __PR((SCSI *scgp,cdr_t *, void *ip));
  507. #endif
  508. extern int drive_attach __PR((SCSI *scgp, cdr_t *));
  509. #endif
  510. extern int attach_unknown __PR((void));
  511. #ifdef _SCSITRANSP_H
  512. extern int blank_dummy __PR((SCSI *scgp, long addr, int blanktype));
  513. extern int drive_getdisktype __PR((SCSI *scgp, cdr_t *dp, dstat_t *dsp));
  514. extern int cmd_ill __PR((SCSI *scgp));
  515. extern int cmd_dummy __PR((SCSI *scgp));
  516. extern int no_sendcue __PR((SCSI *scgp, int tracks, track_t *trackp));
  517. extern int buf_dummy __PR((SCSI *scgp, long *sp, long *fp));
  518. #endif
  519. extern BOOL set_cdrcmds __PR((char *name, cdr_t **dpp));
  520. #ifdef _SCSITRANSP_H
  521. extern cdr_t *get_cdrcmds __PR((SCSI *scgp));
  522. #endif
  523. /*
  524.  * isosize.c
  525.  */
  526. extern long isosize __PR((int f));
  527. /*
  528.  * audiosize.c
  529.  */
  530. extern BOOL is_auname __PR((const char *name));
  531. extern long ausize __PR((int f));
  532. extern BOOL is_wavname __PR((const char *name));
  533. extern long wavsize __PR((int f));
  534. /*
  535.  * auinfo.c
  536.  */
  537. extern void auinfo __PR((char *name, int track, track_t *trackp));
  538. extern void setmcn __PR((char *mcn, track_t *trackp));
  539. extern void setisrc __PR((char *isrc, track_t *trackp));
  540. extern void setindex __PR((char *tindex, track_t *trackp));
  541. /*
  542.  * diskid.c
  543.  */
  544. extern void pr_manufacturer __PR((msf_t *mp, BOOL rw, BOOL audio));
  545. extern int manufacturer_id __PR((msf_t *mp));
  546. extern long disk_rcap __PR((msf_t *mp, long maxblock, BOOL rw, BOOL audio));
  547. /*--------------------------------------------------------------------------*/
  548. /* Test only     */
  549. /*--------------------------------------------------------------------------*/
  550. /*extern int do_cue __PR((int tracks, track_t *trackp, struct mmc_cue **cuep));*/
  551. #ifdef _SCSITRANSP_H
  552. extern int send_cue __PR((SCSI *scgp, int tracks, track_t *trackp));
  553. #endif