mcd.c (6612) | mcd.c (6665) |
---|---|
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-1995 by Andrey A. Chernov, Moscow, Russia 6 * 7 * Rewrote probe routine to work on newer Mitsumi drives. 8 * Additional changes (C) 1994 by Jordan K. Hubbard --- 26 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 * | 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-1995 by Andrey A. Chernov, Moscow, Russia 6 * 7 * Rewrote probe routine to work on newer Mitsumi drives. 8 * Additional changes (C) 1994 by Jordan K. Hubbard --- 26 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 * |
43 * $Id: mcd.c,v 1.37 1995/02/22 01:11:36 ache Exp $ | 43 * $Id: mcd.c,v 1.38 1995/02/22 02:12:10 ache Exp $ |
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> --- 153 unchanged lines hidden (view full) --- 205#define WAIT_FRAC 4 206 207/* several delays */ 208#define RDELAY_WAITSTAT 300 209#define RDELAY_WAITMODE 300 210#define RDELAY_WAITREAD 800 211 212#define MIN_DELAY 15 | 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> --- 153 unchanged lines hidden (view full) --- 205#define WAIT_FRAC 4 206 207/* several delays */ 208#define RDELAY_WAITSTAT 300 209#define RDELAY_WAITMODE 300 210#define RDELAY_WAITREAD 800 211 212#define MIN_DELAY 15 |
213#define DELAY_GETREPLY 1400000 | 213#define DELAY_GETREPLY 1500000 |
214 215static struct kern_devconf kdc_mcd[NMCD] = { { 216 0, 0, 0, /* filled in by dev_attach */ 217 "mcd", 0, { MDDT_ISA, 0, "bio" }, 218 isa_generic_externalize, 0, 0, ISA_EXTERNALLEN, 219 &kdc_isa0, /* parent */ 220 0, /* parentdata */ 221 DC_IDLE, /* status */ --- 1094 unchanged lines hidden (view full) --- 1316 return 0; 1317 1318 if (cd->debug) 1319 printf("mcd%d: reading toc header\n", unit); 1320 1321 if ((rc = mcd_toc_header(unit, &th)) != 0) 1322 return rc; 1323 | 214 215static struct kern_devconf kdc_mcd[NMCD] = { { 216 0, 0, 0, /* filled in by dev_attach */ 217 "mcd", 0, { MDDT_ISA, 0, "bio" }, 218 isa_generic_externalize, 0, 0, ISA_EXTERNALLEN, 219 &kdc_isa0, /* parent */ 220 0, /* parentdata */ 221 DC_IDLE, /* status */ --- 1094 unchanged lines hidden (view full) --- 1316 return 0; 1317 1318 if (cd->debug) 1319 printf("mcd%d: reading toc header\n", unit); 1320 1321 if ((rc = mcd_toc_header(unit, &th)) != 0) 1322 return rc; 1323 |
1324 if (mcd_send(unit, MCD_CMDSTOPAUDIO, MCD_RETRYS) < 0) 1325 return EIO; 1326 |
|
1324 if (mcd_setmode(unit, MCD_MD_TOC) != 0) 1325 return EIO; 1326 1327 if (cd->debug) 1328 printf("mcd%d: get_toc reading qchannel info\n",unit); 1329 1330 for(trk=th.starting_track; trk<=th.ending_track; trk++) 1331 cd->toc[trk].idx_no = 0; --- 122 unchanged lines hidden (view full) --- 1454{ 1455 struct mcd_data *cd = mcd_data + unit; 1456 1457 if (mcd_send(unit, MCD_CMDGETQCHN, MCD_RETRYS) < 0) 1458 return -1; 1459 if (mcd_get(unit, (char *) q, sizeof(struct mcd_qchninfo)) < 0) 1460 return -1; 1461 if (cd->debug) { | 1327 if (mcd_setmode(unit, MCD_MD_TOC) != 0) 1328 return EIO; 1329 1330 if (cd->debug) 1331 printf("mcd%d: get_toc reading qchannel info\n",unit); 1332 1333 for(trk=th.starting_track; trk<=th.ending_track; trk++) 1334 cd->toc[trk].idx_no = 0; --- 122 unchanged lines hidden (view full) --- 1457{ 1458 struct mcd_data *cd = mcd_data + unit; 1459 1460 if (mcd_send(unit, MCD_CMDGETQCHN, MCD_RETRYS) < 0) 1461 return -1; 1462 if (mcd_get(unit, (char *) q, sizeof(struct mcd_qchninfo)) < 0) 1463 return -1; 1464 if (cd->debug) { |
1462 printf("mcd%d: getqchan ctl=%d trk=%d ind=%d ttm=%d:%d.%d dtm=%d:%d.%d\n", | 1465 printf("mcd%d: getqchan ctrl_adr=0x%x trk=%d ind=%d ttm=%d:%d.%d dtm=%d:%d.%d\n", |
1463 unit, 1464 q->ctrl_adr, bcd2bin(q->trk_no), bcd2bin(q->idx_no), 1465 bcd2bin(q->trk_size_msf[0]), bcd2bin(q->trk_size_msf[1]), 1466 bcd2bin(q->trk_size_msf[2]), 1467 bcd2bin(q->hd_pos_msf[0]), bcd2bin(q->hd_pos_msf[1]), 1468 bcd2bin(q->hd_pos_msf[2])); 1469 } 1470 return 0; --- 6 unchanged lines hidden (view full) --- 1477 struct mcd_qchninfo q; 1478 struct cd_sub_channel_info data; 1479 1480 if (cd->debug) 1481 printf("mcd%d: subchan af=%d, df=%d\n", unit, 1482 sc->address_format, 1483 sc->data_format); 1484 | 1466 unit, 1467 q->ctrl_adr, bcd2bin(q->trk_no), bcd2bin(q->idx_no), 1468 bcd2bin(q->trk_size_msf[0]), bcd2bin(q->trk_size_msf[1]), 1469 bcd2bin(q->trk_size_msf[2]), 1470 bcd2bin(q->hd_pos_msf[0]), bcd2bin(q->hd_pos_msf[1]), 1471 bcd2bin(q->hd_pos_msf[2])); 1472 } 1473 return 0; --- 6 unchanged lines hidden (view full) --- 1480 struct mcd_qchninfo q; 1481 struct cd_sub_channel_info data; 1482 1483 if (cd->debug) 1484 printf("mcd%d: subchan af=%d, df=%d\n", unit, 1485 sc->address_format, 1486 sc->data_format); 1487 |
1485 if (sc->address_format != CD_MSF_FORMAT) | 1488 if (sc->address_format != CD_MSF_FORMAT && 1489 sc->address_format != CD_LBA_FORMAT) |
1486 return EINVAL; 1487 1488 if (sc->data_format != CD_CURRENT_POSITION) 1489 return EINVAL; 1490 1491 if (mcd_setmode(unit, MCD_MD_COOKED) != 0) 1492 return EIO; 1493 1494 if (mcd_getqchan(unit, &q) < 0) 1495 return EIO; 1496 1497 data.header.audio_status = cd->audio_status; | 1490 return EINVAL; 1491 1492 if (sc->data_format != CD_CURRENT_POSITION) 1493 return EINVAL; 1494 1495 if (mcd_setmode(unit, MCD_MD_COOKED) != 0) 1496 return EIO; 1497 1498 if (mcd_getqchan(unit, &q) < 0) 1499 return EIO; 1500 1501 data.header.audio_status = cd->audio_status; |
1498 data.what.position.data_format = CD_MSF_FORMAT; | 1502 data.what.position.data_format = CD_CURRENT_POSITION; 1503 data.what.position.addr_type = q.ctrl_adr; 1504 data.what.position.control = q.ctrl_adr >> 4; |
1499 data.what.position.track_number = bcd2bin(q.trk_no); | 1505 data.what.position.track_number = bcd2bin(q.trk_no); |
1500 data.what.position.reladdr.msf.unused = 0; 1501 data.what.position.reladdr.msf.minute = bcd2bin(q.trk_size_msf[0]); 1502 data.what.position.reladdr.msf.second = bcd2bin(q.trk_size_msf[1]); 1503 data.what.position.reladdr.msf.frame = bcd2bin(q.trk_size_msf[2]); 1504 data.what.position.absaddr.msf.unused = 0; 1505 data.what.position.absaddr.msf.minute = bcd2bin(q.hd_pos_msf[0]); 1506 data.what.position.absaddr.msf.second = bcd2bin(q.hd_pos_msf[1]); 1507 data.what.position.absaddr.msf.frame = bcd2bin(q.hd_pos_msf[2]); | 1506 data.what.position.index_number = bcd2bin(q.idx_no); 1507 if (sc->address_format == CD_MSF_FORMAT) { 1508 data.what.position.reladdr.msf.unused = 0; 1509 data.what.position.reladdr.msf.minute = bcd2bin(q.trk_size_msf[0]); 1510 data.what.position.reladdr.msf.second = bcd2bin(q.trk_size_msf[1]); 1511 data.what.position.reladdr.msf.frame = bcd2bin(q.trk_size_msf[2]); 1512 data.what.position.absaddr.msf.unused = 0; 1513 data.what.position.absaddr.msf.minute = bcd2bin(q.hd_pos_msf[0]); 1514 data.what.position.absaddr.msf.second = bcd2bin(q.hd_pos_msf[1]); 1515 data.what.position.absaddr.msf.frame = bcd2bin(q.hd_pos_msf[2]); 1516 } else if (sc->address_format == CD_LBA_FORMAT) { 1517 data.what.position.reladdr.lba = msf2hsg(q.trk_size_msf); 1518 data.what.position.absaddr.lba = msf2hsg(q.hd_pos_msf); 1519 } |
1508 1509 if (copyout(&data, sc->data, min(sizeof(struct cd_sub_channel_info), sc->data_len))!=0) 1510 return EFAULT; 1511 return 0; 1512} 1513 1514static int 1515mcd_playmsf(int unit, struct ioc_play_msf *pt) --- 129 unchanged lines hidden --- | 1520 1521 if (copyout(&data, sc->data, min(sizeof(struct cd_sub_channel_info), sc->data_len))!=0) 1522 return EFAULT; 1523 return 0; 1524} 1525 1526static int 1527mcd_playmsf(int unit, struct ioc_play_msf *pt) --- 129 unchanged lines hidden --- |