mcd.c (106719) | mcd.c (111731) |
---|---|
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 106719 2002-11-10 03:45:49Z mdodd $ | 43 * $FreeBSD: head/sys/dev/mcd/mcd.c 111731 2003-03-02 14:30:54Z phk $ |
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> --- 94 unchanged lines hidden (view full) --- 146static int mcd_playtracks(struct mcd_softc *, struct ioc_play_track *pt); 147static int mcd_play(struct mcd_softc *, struct mcd_read2 *pb); 148static int mcd_playmsf(struct mcd_softc *, struct ioc_play_msf *pt); 149static int mcd_playblocks(struct mcd_softc *, struct ioc_play_blocks *); 150static int mcd_pause(struct mcd_softc *); 151static int mcd_resume(struct mcd_softc *); 152static int mcd_lock_door(struct mcd_softc *, int lock); 153static int mcd_close_tray(struct mcd_softc *); | 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> --- 94 unchanged lines hidden (view full) --- 146static int mcd_playtracks(struct mcd_softc *, struct ioc_play_track *pt); 147static int mcd_play(struct mcd_softc *, struct mcd_read2 *pb); 148static int mcd_playmsf(struct mcd_softc *, struct ioc_play_msf *pt); 149static int mcd_playblocks(struct mcd_softc *, struct ioc_play_blocks *); 150static int mcd_pause(struct mcd_softc *); 151static int mcd_resume(struct mcd_softc *); 152static int mcd_lock_door(struct mcd_softc *, int lock); 153static int mcd_close_tray(struct mcd_softc *); |
154static int mcd_size(dev_t dev); |
|
154 155static d_open_t mcdopen; 156static d_close_t mcdclose; 157static d_ioctl_t mcdioctl; | 155 156static d_open_t mcdopen; 157static d_close_t mcdclose; 158static d_ioctl_t mcdioctl; |
158static d_psize_t mcdsize; | |
159static d_strategy_t mcdstrategy; 160 161#define CDEV_MAJOR 29 162 163static struct cdevsw mcd_cdevsw = { 164 /* open */ mcdopen, 165 /* close */ mcdclose, 166 /* read */ physread, --- 85 unchanged lines hidden (view full) --- 252 device_printf(sc->dev, "no CD inside\n"); 253 return (ENXIO); 254 } 255 if (sc->data.status & MCDDSKCHNG) { 256 device_printf(sc->dev, "CD not sensed\n"); 257 return (ENXIO); 258 } 259 | 159static d_strategy_t mcdstrategy; 160 161#define CDEV_MAJOR 29 162 163static struct cdevsw mcd_cdevsw = { 164 /* open */ mcdopen, 165 /* close */ mcdclose, 166 /* read */ physread, --- 85 unchanged lines hidden (view full) --- 252 device_printf(sc->dev, "no CD inside\n"); 253 return (ENXIO); 254 } 255 if (sc->data.status & MCDDSKCHNG) { 256 device_printf(sc->dev, "CD not sensed\n"); 257 return (ENXIO); 258 } 259 |
260 if (mcdsize(dev) < 0) { | 260 if (mcd_size(dev) < 0) { |
261 device_printf(sc->dev, "failed to get disk size\n"); 262 return (ENXIO); 263 } 264 265 dev->si_bsize_phys = sc->data.blksize; 266 267 sc->data.openflags = 1; 268 sc->data.partflags |= MCDREADRAW; --- 163 unchanged lines hidden (view full) --- 432 (void) tsleep((caddr_t)sc, PSOCK | PCATCH, "mcdsn2", hz/WAIT_FRAC); 433 if ((r = mcd_getstat(sc, 1)) == -1) 434 return (EIO); 435 if (r != -2) 436 break; 437 } 438 if ( (sc->data.status & (MCDDOOROPEN|MCDDSKCHNG)) 439 || !(sc->data.status & MCDDSKIN) | 261 device_printf(sc->dev, "failed to get disk size\n"); 262 return (ENXIO); 263 } 264 265 dev->si_bsize_phys = sc->data.blksize; 266 267 sc->data.openflags = 1; 268 sc->data.partflags |= MCDREADRAW; --- 163 unchanged lines hidden (view full) --- 432 (void) tsleep((caddr_t)sc, PSOCK | PCATCH, "mcdsn2", hz/WAIT_FRAC); 433 if ((r = mcd_getstat(sc, 1)) == -1) 434 return (EIO); 435 if (r != -2) 436 break; 437 } 438 if ( (sc->data.status & (MCDDOOROPEN|MCDDSKCHNG)) 439 || !(sc->data.status & MCDDSKIN) |
440 || mcdsize(dev) < 0 | 440 || mcd_size(dev) < 0 |
441 ) 442 return (ENXIO); 443 sc->data.flags |= MCDVALID; 444 sc->data.partflags |= MCDREADRAW; 445 (void) mcd_lock_door(sc, MCD_LK_LOCK); 446 if (!(sc->data.flags & MCDVALID)) 447 return (ENXIO); 448 } --- 32 unchanged lines hidden (view full) --- 481 return mcd_stop(sc); 482 default: 483 return (ENOTTY); 484 } 485 /*NOTREACHED*/ 486} 487 488static int | 441 ) 442 return (ENXIO); 443 sc->data.flags |= MCDVALID; 444 sc->data.partflags |= MCDREADRAW; 445 (void) mcd_lock_door(sc, MCD_LK_LOCK); 446 if (!(sc->data.flags & MCDVALID)) 447 return (ENXIO); 448 } --- 32 unchanged lines hidden (view full) --- 481 return mcd_stop(sc); 482 default: 483 return (ENOTTY); 484 } 485 /*NOTREACHED*/ 486} 487 488static int |
489mcdsize(dev_t dev) | 489mcd_size(dev_t dev) |
490{ 491 struct mcd_softc *sc; 492 int size; 493 494 sc = (struct mcd_softc *)dev->si_drv1; 495 496 if (mcd_volinfo(sc) == 0) { 497 sc->data.blksize = MCDBLK; --- 1125 unchanged lines hidden --- | 490{ 491 struct mcd_softc *sc; 492 int size; 493 494 sc = (struct mcd_softc *)dev->si_drv1; 495 496 if (mcd_volinfo(sc) == 0) { 497 sc->data.blksize = MCDBLK; --- 1125 unchanged lines hidden --- |