diff options
| author | christos <christos@NetBSD.org> | 2014-12-31 19:52:04 +0000 |
|---|---|---|
| committer | christos <christos@NetBSD.org> | 2014-12-31 19:52:04 +0000 |
| commit | 4a331aac448bc6ebd006fa2ea80af68f57c666eb (patch) | |
| tree | a61e69370e02aa55f74db2134eb4c32a0ce55868 /sys/dev/isa | |
| parent | 7e0dbe4aff861a57f08f15f13b40808d8bd26a6f (diff) | |
make more drivers use disk_ioctl, and add a dev parameter to it so that
we can merge the "easy" disklabel ioctls to it. Ultimately all this will
go do dk_ioctl once all the drivers have been converted.
Diffstat (limited to 'sys/dev/isa')
| -rw-r--r-- | sys/dev/isa/fd.c | 56 | ||||
| -rw-r--r-- | sys/dev/isa/mcd.c | 26 |
2 files changed, 29 insertions, 53 deletions
diff --git a/sys/dev/isa/fd.c b/sys/dev/isa/fd.c index 72451862ba5..fdc247cc02a 100644 --- a/sys/dev/isa/fd.c +++ b/sys/dev/isa/fd.c @@ -1,4 +1,4 @@ -/* $NetBSD: fd.c,v 1.105 2014/08/10 16:44:35 tls Exp $ */ +/* $NetBSD: fd.c,v 1.106 2014/12/31 19:52:05 christos Exp $ */ /*- * Copyright (c) 1998, 2003, 2008 The NetBSD Foundation, Inc. @@ -81,7 +81,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: fd.c,v 1.105 2014/08/10 16:44:35 tls Exp $"); +__KERNEL_RCSID(0, "$NetBSD: fd.c,v 1.106 2014/12/31 19:52:05 christos Exp $"); #include "opt_ddb.h" @@ -1398,7 +1398,7 @@ fdioctl(dev_t dev, u_long cmd, void *addr, int flag, struct lwp *l) struct fdformat_parms *form_parms; struct fdformat_cmd *form_cmd; struct ne7_fd_formb *fd_formb; - struct disklabel buffer; + struct disklabel *lp = fd->sc_dk.dk_label; int error; unsigned int scratch; int il[FD_MAX_NSEC + 1]; @@ -1407,38 +1407,32 @@ fdioctl(dev_t dev, u_long cmd, void *addr, int flag, struct lwp *l) struct disklabel newlabel; #endif - error = disk_ioctl(&fd->sc_dk, cmd, addr, flag, l); - if (error != EPASSTHROUGH) - return (error); - switch (cmd) { + case DIOCGPART: case DIOCGDINFO: #ifdef __HAVE_OLD_DISKLABEL case ODIOCGDINFO: #endif - memset(&buffer, 0, sizeof(buffer)); + memset(lp, 0, sizeof(*lp)); - buffer.d_type = DTYPE_FLOPPY; - buffer.d_secsize = FDC_BSIZE; - buffer.d_nsectors = fd->sc_type->sectrac; - buffer.d_ntracks = fd->sc_type->heads; - buffer.d_ncylinders = fd->sc_type->cyls; - buffer.d_secpercyl = fd->sc_type->seccyl; - buffer.d_secperunit = fd->sc_type->size; + lp->d_type = DTYPE_FLOPPY; + lp->d_secsize = FDC_BSIZE; + lp->d_nsectors = fd->sc_type->sectrac; + lp->d_ntracks = fd->sc_type->heads; + lp->d_ncylinders = fd->sc_type->cyls; + lp->d_secpercyl = fd->sc_type->seccyl; + lp->d_secperunit = fd->sc_type->size; - if (readdisklabel(dev, fdstrategy, &buffer, NULL) != NULL) + if (readdisklabel(dev, fdstrategy, lp, NULL) != NULL) return EINVAL; + break; + } -#ifdef __HAVE_OLD_DISKLABEL - if (cmd == ODIOCGDINFO) { - if (buffer.d_npartitions > OLDMAXPARTITIONS) - return ENOTTY; - memcpy(addr, &buffer, sizeof (struct olddisklabel)); - } else -#endif - *(struct disklabel *)addr = buffer; - return 0; + error = disk_ioctl(&fd->sc_dk, dev, cmd, addr, flag, l); + if (error != EPASSTHROUGH) + return error; + switch (cmd) { case DIOCWLABEL: if ((flag & FWRITE) == 0) return EBADF; @@ -1450,24 +1444,20 @@ fdioctl(dev_t dev, u_long cmd, void *addr, int flag, struct lwp *l) case ODIOCWDINFO: #endif { - struct disklabel *lp; - if ((flag & FWRITE) == 0) return EBADF; #ifdef __HAVE_OLD_DISKLABEL if (cmd == ODIOCWDINFO) { memset(&newlabel, 0, sizeof newlabel); memcpy(&newlabel, addr, sizeof (struct olddisklabel)); - lp = &newlabel; - } else + addr = &newlabel; + } #endif - lp = (struct disklabel *)addr; - - error = setdisklabel(&buffer, lp, 0, NULL); + error = setdisklabel(lp, addr, 0, NULL); if (error) return error; - error = writedisklabel(dev, fdstrategy, &buffer, NULL); + error = writedisklabel(dev, fdstrategy, lp, NULL); return error; } diff --git a/sys/dev/isa/mcd.c b/sys/dev/isa/mcd.c index 3ff61eaedf7..2a66c293961 100644 --- a/sys/dev/isa/mcd.c +++ b/sys/dev/isa/mcd.c @@ -1,4 +1,4 @@ -/* $NetBSD: mcd.c,v 1.113 2014/07/25 08:10:37 dholland Exp $ */ +/* $NetBSD: mcd.c,v 1.114 2014/12/31 19:52:05 christos Exp $ */ /* * Copyright (c) 1993, 1994, 1995 Charles M. Hannum. All rights reserved. @@ -56,7 +56,7 @@ /*static char COPYRIGHT[] = "mcd-driver (C)1993 by H.Veit & B.Moore";*/ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: mcd.c,v 1.113 2014/07/25 08:10:37 dholland Exp $"); +__KERNEL_RCSID(0, "$NetBSD: mcd.c,v 1.114 2014/12/31 19:52:05 christos Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -579,26 +579,12 @@ mcdioctl(dev_t dev, u_long cmd, void *addr, int flag, struct lwp *l) if ((sc->flags & MCDF_LOADED) == 0) return EIO; + error = disk_ioctl(&sc->sc_dk, dev, cmd, addr, flag, l); + if (error != EPASSTHROUGH) + return error; + part = MCDPART(dev); switch (cmd) { - case DIOCGDINFO: - *(struct disklabel *)addr = *(sc->sc_dk.dk_label); - return 0; -#ifdef __HAVE_OLD_DISKLABEL - case ODIOCGDINFO: - newlabel = *(sc->sc_dk.dk_label); - if (newlabel.d_npartitions > OLDMAXPARTITIONS) - return ENOTTY; - memcpy(addr, &newlabel, sizeof (struct olddisklabel)); - return 0; -#endif - - case DIOCGPART: - ((struct partinfo *)addr)->disklab = sc->sc_dk.dk_label; - ((struct partinfo *)addr)->part = - &sc->sc_dk.dk_label->d_partitions[part]; - return 0; - case DIOCWDINFO: case DIOCSDINFO: #ifdef __HAVE_OLD_DISKLABEL |
