summaryrefslogtreecommitdiff
path: root/sys/dev/isa
diff options
context:
space:
mode:
authorchristos <christos@NetBSD.org>2014-12-31 19:52:04 +0000
committerchristos <christos@NetBSD.org>2014-12-31 19:52:04 +0000
commit4a331aac448bc6ebd006fa2ea80af68f57c666eb (patch)
treea61e69370e02aa55f74db2134eb4c32a0ce55868 /sys/dev/isa
parent7e0dbe4aff861a57f08f15f13b40808d8bd26a6f (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.c56
-rw-r--r--sys/dev/isa/mcd.c26
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