mcd.c (13874) | mcd.c (13886) |
---|---|
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.68 1996/02/02 22:08:28 ache Exp $ | 43 * $Id: mcd.c,v 1.69 1996/02/03 00:06:49 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> --- 1519 unchanged lines hidden (view full) --- 1571 printf("mcd%d: subchan af=%d, df=%d\n", unit, 1572 sc->address_format, 1573 sc->data_format); 1574 1575 if (sc->address_format != CD_MSF_FORMAT && 1576 sc->address_format != CD_LBA_FORMAT) 1577 return EINVAL; 1578 | 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> --- 1519 unchanged lines hidden (view full) --- 1571 printf("mcd%d: subchan af=%d, df=%d\n", unit, 1572 sc->address_format, 1573 sc->data_format); 1574 1575 if (sc->address_format != CD_MSF_FORMAT && 1576 sc->address_format != CD_LBA_FORMAT) 1577 return EINVAL; 1578 |
1579 if (sc->data_format != CD_CURRENT_POSITION) | 1579 if (sc->data_format != CD_CURRENT_POSITION && 1580 sc->data_format != CD_MEDIA_CATALOG) |
1580 return EINVAL; 1581 1582 if (mcd_setmode(unit, MCD_MD_COOKED) != 0) 1583 return EIO; 1584 1585 if (mcd_getqchan(unit, &q) < 0) 1586 return EIO; 1587 1588 data.header.audio_status = cd->audio_status; 1589 data.what.position.data_format = sc->data_format; | 1581 return EINVAL; 1582 1583 if (mcd_setmode(unit, MCD_MD_COOKED) != 0) 1584 return EIO; 1585 1586 if (mcd_getqchan(unit, &q) < 0) 1587 return EIO; 1588 1589 data.header.audio_status = cd->audio_status; 1590 data.what.position.data_format = sc->data_format; |
1590 data.what.position.control = q.control; 1591 data.what.position.addr_type = q.addr_type; 1592 data.what.position.track_number = bcd2bin(q.trk_no); 1593 data.what.position.index_number = bcd2bin(q.idx_no); 1594 switch (sc->address_format) { 1595 case CD_MSF_FORMAT: 1596 data.what.position.reladdr.msf.unused = 0; 1597 data.what.position.reladdr.msf.minute = bcd2bin(q.trk_size_msf[0]); 1598 data.what.position.reladdr.msf.second = bcd2bin(q.trk_size_msf[1]); 1599 data.what.position.reladdr.msf.frame = bcd2bin(q.trk_size_msf[2]); 1600 data.what.position.absaddr.msf.unused = 0; 1601 data.what.position.absaddr.msf.minute = bcd2bin(q.hd_pos_msf[0]); 1602 data.what.position.absaddr.msf.second = bcd2bin(q.hd_pos_msf[1]); 1603 data.what.position.absaddr.msf.frame = bcd2bin(q.hd_pos_msf[2]); | 1591 1592 switch (sc->data_format) { 1593 case CD_MEDIA_CATALOG: 1594 data.what.media_catalog.mc_valid = 1; 1595 data.what.media_catalog.mc_number[0] = '\0'; |
1604 break; | 1596 break; |
1605 case CD_LBA_FORMAT: 1606 lba = msf2hsg(q.trk_size_msf, 1); 1607 /* 1608 * Pre-gap has index number of 0, and decreasing MSF 1609 * address. Must be converted to negative LBA, per 1610 * SCSI spec. 1611 */ 1612 if (data.what.position.index_number == 0) 1613 lba = -lba; 1614 data.what.position.reladdr.lba = htonl(lba); 1615 data.what.position.absaddr.lba = htonl(msf2hsg(q.hd_pos_msf, 0)); | 1597 1598 case CD_CURRENT_POSITION: 1599 data.what.position.control = q.control; 1600 data.what.position.addr_type = q.addr_type; 1601 data.what.position.track_number = bcd2bin(q.trk_no); 1602 data.what.position.index_number = bcd2bin(q.idx_no); 1603 switch (sc->address_format) { 1604 case CD_MSF_FORMAT: 1605 data.what.position.reladdr.msf.unused = 0; 1606 data.what.position.reladdr.msf.minute = bcd2bin(q.trk_size_msf[0]); 1607 data.what.position.reladdr.msf.second = bcd2bin(q.trk_size_msf[1]); 1608 data.what.position.reladdr.msf.frame = bcd2bin(q.trk_size_msf[2]); 1609 data.what.position.absaddr.msf.unused = 0; 1610 data.what.position.absaddr.msf.minute = bcd2bin(q.hd_pos_msf[0]); 1611 data.what.position.absaddr.msf.second = bcd2bin(q.hd_pos_msf[1]); 1612 data.what.position.absaddr.msf.frame = bcd2bin(q.hd_pos_msf[2]); 1613 break; 1614 case CD_LBA_FORMAT: 1615 lba = msf2hsg(q.trk_size_msf, 1); 1616 /* 1617 * Pre-gap has index number of 0, and decreasing MSF 1618 * address. Must be converted to negative LBA, per 1619 * SCSI spec. 1620 */ 1621 if (data.what.position.index_number == 0) 1622 lba = -lba; 1623 data.what.position.reladdr.lba = htonl(lba); 1624 data.what.position.absaddr.lba = htonl(msf2hsg(q.hd_pos_msf, 0)); 1625 break; 1626 } |
1616 break; 1617 } 1618 1619 return copyout(&data, sc->data, min(sizeof(struct cd_sub_channel_info), sc->data_len)); 1620} 1621 1622static int 1623mcd_playmsf(int unit, struct ioc_play_msf *p) --- 193 unchanged lines hidden --- | 1627 break; 1628 } 1629 1630 return copyout(&data, sc->data, min(sizeof(struct cd_sub_channel_info), sc->data_len)); 1631} 1632 1633static int 1634mcd_playmsf(int unit, struct ioc_play_msf *p) --- 193 unchanged lines hidden --- |