mcd.c (4389) | mcd.c (4390) |
---|---|
1/* 2 * Copyright 1993 by Holger Veit (data part) 3 * Copyright 1993 by Brian Moore (audio part) 4 * Changes Copyright 1993 by Gary Clark II | 1/* 2 * Copyright 1993 by Holger Veit (data part) 3 * Copyright 1993 by Brian Moore (audio part) 4 * Changes Copyright 1993 by Gary Clark II |
5 * Changes Copyright (C) 1994 by Andrew A. Chernov |
|
5 * 6 * Rewrote probe routine to work on newer Mitsumi drives. 7 * Additional changes (C) 1994 by Jordan K. Hubbard 8 * 9 * All rights reserved. 10 * 11 * Redistribution and use in source and binary forms, with or without 12 * modification, are permitted provided that the following conditions --- 21 unchanged lines hidden (view full) --- 34 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, 35 * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 36 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 37 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 38 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 39 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 40 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 41 * | 6 * 7 * Rewrote probe routine to work on newer Mitsumi drives. 8 * Additional changes (C) 1994 by Jordan K. Hubbard 9 * 10 * All rights reserved. 11 * 12 * Redistribution and use in source and binary forms, with or without 13 * modification, are permitted provided that the following conditions --- 21 unchanged lines hidden (view full) --- 35 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, 36 * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 37 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 38 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 39 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 40 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 41 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 42 * |
42 * $Id: mcd.c,v 1.27 1994/10/27 20:44:50 jkh Exp $ | 43 * $Id: mcd.c,v 1.28 1994/11/12 13:26:11 ache Exp $ |
43 */ 44static char COPYRIGHT[] = "mcd-driver (C)1993 by H.Veit & B.Moore"; 45 46#include "mcd.h" 47#if NMCD > 0 48#include <sys/types.h> 49#include <sys/param.h> 50#include <sys/systm.h> --- 1242 unchanged lines hidden (view full) --- 1293{ 1294 struct mcd_data *cd = mcd_data + unit; 1295 1296 if (mcd_send(unit, MCD_CMDGETQCHN, MCD_RETRYS) < 0) 1297 return -1; 1298 if (mcd_get(unit, (char *) q, sizeof(struct mcd_qchninfo)) < 0) 1299 return -1; 1300 if (cd->debug) { | 44 */ 45static char COPYRIGHT[] = "mcd-driver (C)1993 by H.Veit & B.Moore"; 46 47#include "mcd.h" 48#if NMCD > 0 49#include <sys/types.h> 50#include <sys/param.h> 51#include <sys/systm.h> --- 1242 unchanged lines hidden (view full) --- 1294{ 1295 struct mcd_data *cd = mcd_data + unit; 1296 1297 if (mcd_send(unit, MCD_CMDGETQCHN, MCD_RETRYS) < 0) 1298 return -1; 1299 if (mcd_get(unit, (char *) q, sizeof(struct mcd_qchninfo)) < 0) 1300 return -1; 1301 if (cd->debug) { |
1301 printf("mcd%d: qchannel ctl=%d trk=%d ind=%d pos=%d:%d.%d\n", | 1302 printf("mcd%d: getqchan ctl=%d trk=%d ind=%d ttm=%d:%d.%d dtm=%d:%d.%d\n", |
1302 unit, 1303 q->ctrl_adr, bcd2bin(q->trk_no), bcd2bin(q->idx_no), | 1303 unit, 1304 q->ctrl_adr, bcd2bin(q->trk_no), bcd2bin(q->idx_no), |
1305 bcd2bin(q->trk_size_msf[0]), bcd2bin(q->trk_size_msf[1]), 1306 bcd2bin(q->trk_size_msf[2]), |
|
1304 bcd2bin(q->hd_pos_msf[0]), bcd2bin(q->hd_pos_msf[1]), 1305 bcd2bin(q->hd_pos_msf[2])); 1306 } 1307 return 0; 1308} 1309 1310static int 1311mcd_subchan(int unit, struct ioc_read_subchannel *sc) --- 17 unchanged lines hidden (view full) --- 1329 return EIO; 1330 1331 if (mcd_getqchan(unit, &q) < 0) 1332 return EIO; 1333 1334 data.header.audio_status = cd->audio_status; 1335 data.what.position.data_format = CD_MSF_FORMAT; 1336 data.what.position.track_number = bcd2bin(q.trk_no); | 1307 bcd2bin(q->hd_pos_msf[0]), bcd2bin(q->hd_pos_msf[1]), 1308 bcd2bin(q->hd_pos_msf[2])); 1309 } 1310 return 0; 1311} 1312 1313static int 1314mcd_subchan(int unit, struct ioc_read_subchannel *sc) --- 17 unchanged lines hidden (view full) --- 1332 return EIO; 1333 1334 if (mcd_getqchan(unit, &q) < 0) 1335 return EIO; 1336 1337 data.header.audio_status = cd->audio_status; 1338 data.what.position.data_format = CD_MSF_FORMAT; 1339 data.what.position.track_number = bcd2bin(q.trk_no); |
1340 data.what.position.reladdr.msf.unused = 0; 1341 data.what.position.reladdr.msf.minute = bcd2bin(q.trk_size_msf[0]); 1342 data.what.position.reladdr.msf.second = bcd2bin(q.trk_size_msf[1]); 1343 data.what.position.reladdr.msf.frame = bcd2bin(q.trk_size_msf[2]); 1344 data.what.position.absaddr.msf.unused = 0; 1345 data.what.position.absaddr.msf.minute = bcd2bin(q.hd_pos_msf[0]); 1346 data.what.position.absaddr.msf.second = bcd2bin(q.hd_pos_msf[1]); 1347 data.what.position.absaddr.msf.frame = bcd2bin(q.hd_pos_msf[2]); |
|
1337 | 1348 |
1338 if (copyout(&data, sc->data, sizeof(struct cd_sub_channel_info))!=0) | 1349 if (copyout(&data, sc->data, min(sizeof(struct cd_sub_channel_info), sc->data_len))!=0) |
1339 return EFAULT; 1340 return 0; 1341} 1342 1343static int 1344mcd_playmsf(int unit, struct ioc_play_msf *pt) 1345{ 1346 struct mcd_read2 pb; --- 13 unchanged lines hidden (view full) --- 1360 1361static int 1362mcd_playtracks(int unit, struct ioc_play_track *pt) 1363{ 1364 struct mcd_data *cd = mcd_data + unit; 1365 struct mcd_read2 pb; 1366 int a = pt->start_track; 1367 int z = pt->end_track; | 1350 return EFAULT; 1351 return 0; 1352} 1353 1354static int 1355mcd_playmsf(int unit, struct ioc_play_msf *pt) 1356{ 1357 struct mcd_read2 pb; --- 13 unchanged lines hidden (view full) --- 1371 1372static int 1373mcd_playtracks(int unit, struct ioc_play_track *pt) 1374{ 1375 struct mcd_data *cd = mcd_data + unit; 1376 struct mcd_read2 pb; 1377 int a = pt->start_track; 1378 int z = pt->end_track; |
1368 int rc; | 1379 int rc, i; |
1369 1370 if ((rc = mcd_read_toc(unit)) != 0) 1371 return rc; 1372 1373 if (cd->debug) 1374 printf("mcd%d: playtracks from %d:%d to %d:%d\n", unit, 1375 a, pt->start_index, z, pt->end_index); 1376 1377 if ( a < bcd2bin(cd->volinfo.trk_low) 1378 || a > bcd2bin(cd->volinfo.trk_high) 1379 || a > z 1380 || z < bcd2bin(cd->volinfo.trk_low) 1381 || z > bcd2bin(cd->volinfo.trk_high)) 1382 return EINVAL; 1383 | 1380 1381 if ((rc = mcd_read_toc(unit)) != 0) 1382 return rc; 1383 1384 if (cd->debug) 1385 printf("mcd%d: playtracks from %d:%d to %d:%d\n", unit, 1386 a, pt->start_index, z, pt->end_index); 1387 1388 if ( a < bcd2bin(cd->volinfo.trk_low) 1389 || a > bcd2bin(cd->volinfo.trk_high) 1390 || a > z 1391 || z < bcd2bin(cd->volinfo.trk_low) 1392 || z > bcd2bin(cd->volinfo.trk_high)) 1393 return EINVAL; 1394 |
1384 pb.start_msf[0] = cd->toc[a].hd_pos_msf[0]; 1385 pb.start_msf[1] = cd->toc[a].hd_pos_msf[1]; 1386 pb.start_msf[2] = cd->toc[a].hd_pos_msf[2]; 1387 pb.end_msf[0] = cd->toc[z+1].hd_pos_msf[0]; 1388 pb.end_msf[1] = cd->toc[z+1].hd_pos_msf[1]; 1389 pb.end_msf[2] = cd->toc[z+1].hd_pos_msf[2]; | 1395 for (i = 0; i < 3; i++) { 1396 pb.start_msf[i] = cd->toc[a].hd_pos_msf[i]; 1397 pb.end_msf[i] = cd->toc[z+1].hd_pos_msf[i]; 1398 } |
1390 1391 return mcd_play(unit, &pb); 1392} 1393 1394static int 1395mcd_play(int unit, struct mcd_read2 *pb) 1396{ 1397 struct mcd_data *cd = mcd_data + unit; --- 78 unchanged lines hidden --- | 1399 1400 return mcd_play(unit, &pb); 1401} 1402 1403static int 1404mcd_play(int unit, struct mcd_read2 *pb) 1405{ 1406 struct mcd_data *cd = mcd_data + unit; --- 78 unchanged lines hidden --- |