Deleted Added
full compact
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 ---