mcd.c (106490) | mcd.c (106719) |
---|---|
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 * $FreeBSD: head/sys/dev/mcd/mcd.c 106490 2002-11-06 08:08:55Z mdodd $ | 43 * $FreeBSD: head/sys/dev/mcd/mcd.c 106719 2002-11-10 03:45:49Z mdodd $ |
44 */ 45static const char COPYRIGHT[] = "mcd-driver (C)1993 by H.Veit & B.Moore"; 46 47#include <sys/param.h> 48#include <sys/systm.h> 49#include <sys/kernel.h> 50#include <sys/conf.h> 51#include <sys/fcntl.h> --- 852 unchanged lines hidden (view full) --- 904 905 MCD_TRACE("mcd_doread: read blknum=%d for bp=%p\n", 906 blknum, bp); 907 908 /* build parameter block */ 909 hsg2msf(blknum,rbuf.start_msf); 910retry_read: 911 /* send the read command */ | 44 */ 45static const char COPYRIGHT[] = "mcd-driver (C)1993 by H.Veit & B.Moore"; 46 47#include <sys/param.h> 48#include <sys/systm.h> 49#include <sys/kernel.h> 50#include <sys/conf.h> 51#include <sys/fcntl.h> --- 852 unchanged lines hidden (view full) --- 904 905 MCD_TRACE("mcd_doread: read blknum=%d for bp=%p\n", 906 blknum, bp); 907 908 /* build parameter block */ 909 hsg2msf(blknum,rbuf.start_msf); 910retry_read: 911 /* send the read command */ |
912 disable_intr(); | 912 critical_enter(); |
913 MCD_WRITE(sc, MCD_REG_COMMAND, sc->data.read_command); 914 MCD_WRITE(sc, MCD_REG_COMMAND, rbuf.start_msf[0]); 915 MCD_WRITE(sc, MCD_REG_COMMAND, rbuf.start_msf[1]); 916 MCD_WRITE(sc, MCD_REG_COMMAND, rbuf.start_msf[2]); 917 MCD_WRITE(sc, MCD_REG_COMMAND, 0); 918 MCD_WRITE(sc, MCD_REG_COMMAND, 0); 919 MCD_WRITE(sc, MCD_REG_COMMAND, 1); | 913 MCD_WRITE(sc, MCD_REG_COMMAND, sc->data.read_command); 914 MCD_WRITE(sc, MCD_REG_COMMAND, rbuf.start_msf[0]); 915 MCD_WRITE(sc, MCD_REG_COMMAND, rbuf.start_msf[1]); 916 MCD_WRITE(sc, MCD_REG_COMMAND, rbuf.start_msf[2]); 917 MCD_WRITE(sc, MCD_REG_COMMAND, 0); 918 MCD_WRITE(sc, MCD_REG_COMMAND, 0); 919 MCD_WRITE(sc, MCD_REG_COMMAND, 1); |
920 enable_intr(); | 920 critical_exit(); |
921 922 /* Spin briefly (<= 2ms) to avoid missing next block */ 923 for (i = 0; i < 20; i++) { 924 k = MCD_READ(sc, MCD_FLAGS); 925 if (!(k & MFL_DATA_NOT_AVAIL)) 926 goto got_it; 927 DELAY(100); 928 } --- 613 unchanged lines hidden (view full) --- 1542static int 1543mcd_play(struct mcd_softc *sc, struct mcd_read2 *pb) 1544{ 1545 int retry, st = -1, status; 1546 1547 sc->data.lastpb = *pb; 1548 for(retry=0; retry<MCD_RETRYS; retry++) { 1549 | 921 922 /* Spin briefly (<= 2ms) to avoid missing next block */ 923 for (i = 0; i < 20; i++) { 924 k = MCD_READ(sc, MCD_FLAGS); 925 if (!(k & MFL_DATA_NOT_AVAIL)) 926 goto got_it; 927 DELAY(100); 928 } --- 613 unchanged lines hidden (view full) --- 1542static int 1543mcd_play(struct mcd_softc *sc, struct mcd_read2 *pb) 1544{ 1545 int retry, st = -1, status; 1546 1547 sc->data.lastpb = *pb; 1548 for(retry=0; retry<MCD_RETRYS; retry++) { 1549 |
1550 disable_intr(); | 1550 critical_enter(); |
1551 MCD_WRITE(sc, MCD_REG_COMMAND, MCD_CMDSINGLESPEEDREAD); 1552 MCD_WRITE(sc, MCD_REG_COMMAND, pb->start_msf[0]); 1553 MCD_WRITE(sc, MCD_REG_COMMAND, pb->start_msf[1]); 1554 MCD_WRITE(sc, MCD_REG_COMMAND, pb->start_msf[2]); 1555 MCD_WRITE(sc, MCD_REG_COMMAND, pb->end_msf[0]); 1556 MCD_WRITE(sc, MCD_REG_COMMAND, pb->end_msf[1]); 1557 MCD_WRITE(sc, MCD_REG_COMMAND, pb->end_msf[2]); | 1551 MCD_WRITE(sc, MCD_REG_COMMAND, MCD_CMDSINGLESPEEDREAD); 1552 MCD_WRITE(sc, MCD_REG_COMMAND, pb->start_msf[0]); 1553 MCD_WRITE(sc, MCD_REG_COMMAND, pb->start_msf[1]); 1554 MCD_WRITE(sc, MCD_REG_COMMAND, pb->start_msf[2]); 1555 MCD_WRITE(sc, MCD_REG_COMMAND, pb->end_msf[0]); 1556 MCD_WRITE(sc, MCD_REG_COMMAND, pb->end_msf[1]); 1557 MCD_WRITE(sc, MCD_REG_COMMAND, pb->end_msf[2]); |
1558 enable_intr(); | 1558 critical_exit(); |
1559 1560 status=mcd_getstat(sc, 0); 1561 if (status == -1) 1562 continue; 1563 else if (status != -2) 1564 st = 0; 1565 break; 1566 } --- 56 unchanged lines hidden --- | 1559 1560 status=mcd_getstat(sc, 0); 1561 if (status == -1) 1562 continue; 1563 else if (status != -2) 1564 st = 0; 1565 break; 1566 } --- 56 unchanged lines hidden --- |