summaryrefslogtreecommitdiff
path: root/sys
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
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')
-rw-r--r--sys/arch/amiga/dev/fd.c16
-rw-r--r--sys/arch/atari/dev/fd.c16
-rw-r--r--sys/arch/atari/dev/hdfd.c19
-rw-r--r--sys/arch/emips/ebus/ace_ebus.c15
-rw-r--r--sys/arch/emips/ebus/flash_ebus.c15
-rw-r--r--sys/arch/hp300/dev/rd.c18
-rw-r--r--sys/arch/mac68k/obio/iwm_fd.c24
-rw-r--r--sys/arch/sun3/dev/xd.c22
-rw-r--r--sys/arch/sun3/dev/xy.c22
-rw-r--r--sys/arch/vax/mba/hp.c18
-rw-r--r--sys/arch/vax/vsa/hdc9224.c21
-rw-r--r--sys/arch/x68k/dev/bmd.c13
-rw-r--r--sys/arch/x68k/dev/fd.c35
-rw-r--r--sys/dev/ata/wd.c30
-rw-r--r--sys/dev/ccd.c25
-rw-r--r--sys/dev/cgd.c6
-rw-r--r--sys/dev/dksubr.c25
-rw-r--r--sys/dev/dkwedge/dk.c10
-rw-r--r--sys/dev/gpib/rd.c18
-rw-r--r--sys/dev/isa/fd.c56
-rw-r--r--sys/dev/isa/mcd.c26
-rw-r--r--sys/dev/ld.c28
-rw-r--r--sys/dev/mca/ed_mca.c16
-rw-r--r--sys/dev/md.c20
-rw-r--r--sys/dev/mscp/mscp_disk.c39
-rw-r--r--sys/dev/ofw/ofdisk.c24
-rw-r--r--sys/dev/qbus/rf.c19
-rw-r--r--sys/dev/qbus/rl.c27
-rw-r--r--sys/dev/raidframe/rf_netbsdkintf.c24
-rw-r--r--sys/dev/scsipi/cd.c29
-rw-r--r--sys/dev/scsipi/sd.c30
-rw-r--r--sys/dev/vme/xd.c26
-rw-r--r--sys/dev/vme/xy.c26
-rw-r--r--sys/dev/vnd.c32
-rw-r--r--sys/kern/subr_disk.c36
-rw-r--r--sys/sys/param.h4
36 files changed, 229 insertions, 601 deletions
diff --git a/sys/arch/amiga/dev/fd.c b/sys/arch/amiga/dev/fd.c
index 6ef2c4b5753..f318a8ce9b6 100644
--- a/sys/arch/amiga/dev/fd.c
+++ b/sys/arch/amiga/dev/fd.c
@@ -1,4 +1,4 @@
-/* $NetBSD: fd.c,v 1.92 2014/08/08 21:13:52 joerg Exp $ */
+/* $NetBSD: fd.c,v 1.93 2014/12/31 19:52:04 christos Exp $ */
/*
* Copyright (c) 1994 Christian E. Hopps
@@ -33,7 +33,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fd.c,v 1.92 2014/08/08 21:13:52 joerg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fd.c,v 1.93 2014/12/31 19:52:04 christos Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -573,6 +573,10 @@ fdioctl(dev_t dev, u_long cmd, void *addr, int flag, struct lwp *l)
if ((sc->flags & FDF_HAVELABEL) == 0)
return(EBADF);
+ error = disk_ioctl(&sk->dkdev, dev, cmd, addr, flag, l);
+ if (error != EPASSTHROUGH)
+ return error;
+
switch (cmd) {
case DIOCSBAD:
return(EINVAL);
@@ -586,14 +590,6 @@ fdioctl(dev_t dev, u_long cmd, void *addr, int flag, struct lwp *l)
return(EINVAL);
sc->dkdev.dk_label->d_trkseek = sc->stepdelay = *(int *)addr;
return(0);
- case DIOCGDINFO:
- *(struct disklabel *)addr = *(sc->dkdev.dk_label);
- return(0);
- case DIOCGPART:
- ((struct partinfo *)addr)->disklab = sc->dkdev.dk_label;
- ((struct partinfo *)addr)->part =
- &sc->dkdev.dk_label->d_partitions[FDPART(dev)];
- return(0);
case DIOCSDINFO:
if ((flag & FWRITE) == 0)
return(EBADF);
diff --git a/sys/arch/atari/dev/fd.c b/sys/arch/atari/dev/fd.c
index 02e2a060163..a694010cdaa 100644
--- a/sys/arch/atari/dev/fd.c
+++ b/sys/arch/atari/dev/fd.c
@@ -1,4 +1,4 @@
-/* $NetBSD: fd.c,v 1.80 2014/10/18 08:33:25 snj Exp $ */
+/* $NetBSD: fd.c,v 1.81 2014/12/31 19:52:04 christos Exp $ */
/*
* Copyright (c) 1995 Leo Weppelman.
@@ -44,7 +44,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fd.c,v 1.80 2014/10/18 08:33:25 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fd.c,v 1.81 2014/12/31 19:52:04 christos Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -432,17 +432,13 @@ fdioctl(dev_t dev, u_long cmd, void * addr, int flag, struct lwp *l)
if ((sc->flags & FLPF_HAVELAB) == 0)
return EBADF;
+ error = disk_ioctl(&sc->dkdev, RAW_PART, cmd, addr, flag, l);
+ if (error != EPASSTHROUGH)
+ return error;
+
switch (cmd) {
case DIOCSBAD:
return EINVAL;
- case DIOCGDINFO:
- *(struct disklabel *)addr = *(sc->dkdev.dk_label);
- return 0;
- case DIOCGPART:
- ((struct partinfo *)addr)->disklab = sc->dkdev.dk_label;
- ((struct partinfo *)addr)->part =
- &sc->dkdev.dk_label->d_partitions[RAW_PART];
- return 0;
#ifdef notyet /* XXX LWP */
case DIOCSRETRIES:
case DIOCSSTEP:
diff --git a/sys/arch/atari/dev/hdfd.c b/sys/arch/atari/dev/hdfd.c
index 6c2fb17732b..01bdf99d490 100644
--- a/sys/arch/atari/dev/hdfd.c
+++ b/sys/arch/atari/dev/hdfd.c
@@ -1,4 +1,4 @@
-/* $NetBSD: hdfd.c,v 1.78 2014/07/25 08:10:32 dholland Exp $ */
+/* $NetBSD: hdfd.c,v 1.79 2014/12/31 19:52:04 christos Exp $ */
/*-
* Copyright (c) 1996 Leo Weppelman
@@ -91,7 +91,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: hdfd.c,v 1.78 2014/07/25 08:10:32 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hdfd.c,v 1.79 2014/12/31 19:52:04 christos Exp $");
#include "opt_ddb.h"
@@ -1304,17 +1304,16 @@ fdioctl(dev_t dev, u_long cmd, void *addr, int flag, struct lwp *l)
switch (cmd) {
case DIOCGDINFO:
- fdgetdisklabel(fd, dev);
- *(struct disklabel *)addr = *(fd->sc_dk.dk_label);
- return 0;
-
case DIOCGPART:
fdgetdisklabel(fd, dev);
- ((struct partinfo *)addr)->disklab = fd->sc_dk.dk_label;
- ((struct partinfo *)addr)->part =
- &fd->sc_dk.dk_label->d_partitions[RAW_PART];
- return 0;
+ break;
+ }
+
+ error = disk_ioctl(&fd->sc_dk, RAW_PART, cmd, addr, flag, l);
+ if (error != EPASSTHROUGH)
+ return error;
+ switch (cmd) {
case DIOCWLABEL:
if ((flag & FWRITE) == 0)
return EBADF;
diff --git a/sys/arch/emips/ebus/ace_ebus.c b/sys/arch/emips/ebus/ace_ebus.c
index 1a431b4da59..0c47a948f58 100644
--- a/sys/arch/emips/ebus/ace_ebus.c
+++ b/sys/arch/emips/ebus/ace_ebus.c
@@ -1,4 +1,4 @@
-/* $NetBSD: ace_ebus.c,v 1.15 2014/12/31 17:06:48 christos Exp $ */
+/* $NetBSD: ace_ebus.c,v 1.16 2014/12/31 19:52:04 christos Exp $ */
/*-
* Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ace_ebus.c,v 1.15 2014/12/31 17:06:48 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ace_ebus.c,v 1.16 2014/12/31 19:52:04 christos Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -2172,7 +2172,7 @@ aceioctl(dev_t dev, u_long xfer, void *addr, int flag, struct lwp *l)
if ((ace->sc_flags & ACEF_LOADED) == 0)
return EIO;
- error = disk_ioctl(&ace->sc_dk, xfer, addr, flag, l);
+ error = disk_ioctl(&ace->sc_dk, dev, xfer, addr, flag, l);
if (error != EPASSTHROUGH)
return error;
@@ -2186,15 +2186,6 @@ aceioctl(dev_t dev, u_long xfer, void *addr, int flag, struct lwp *l)
bad144intern(ace);
return 0;
#endif
- case DIOCGDINFO:
- *(struct disklabel *)addr = *(ace->sc_dk.dk_label);
- return 0;
-
- case DIOCGPART:
- ((struct partinfo *)addr)->disklab = ace->sc_dk.dk_label;
- ((struct partinfo *)addr)->part =
- &ace->sc_dk.dk_label->d_partitions[ACEPART(dev)];
- return 0;
case DIOCWDINFO:
case DIOCSDINFO:
diff --git a/sys/arch/emips/ebus/flash_ebus.c b/sys/arch/emips/ebus/flash_ebus.c
index 275e1469ab0..8aba1439251 100644
--- a/sys/arch/emips/ebus/flash_ebus.c
+++ b/sys/arch/emips/ebus/flash_ebus.c
@@ -1,4 +1,4 @@
-/* $NetBSD: flash_ebus.c,v 1.13 2014/12/31 17:06:48 christos Exp $ */
+/* $NetBSD: flash_ebus.c,v 1.14 2014/12/31 19:52:04 christos Exp $ */
/*-
* Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
-__KERNEL_RCSID(0, "$NetBSD: flash_ebus.c,v 1.13 2014/12/31 17:06:48 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: flash_ebus.c,v 1.14 2014/12/31 19:52:04 christos Exp $");
/* Driver for the Intel 28F320/640/128 (J3A150) StrataFlash memory device
* Extended to include the Intel JS28F256P30T95.
@@ -2089,7 +2089,7 @@ eflashioctl(dev_t dev, u_long xfer, void *addr, int flag, struct lwp *l)
if ((sc->sc_flags & EFLASHF_LOADED) == 0)
return EIO;
- error = disk_ioctl(&sc->sc_dk, xfer, addr, flag, l);
+ error = disk_ioctl(&sc->sc_dk, dev, xfer, addr, flag, l);
if (error != EPASSTHROUGH)
return (error);
@@ -2103,15 +2103,6 @@ eflashioctl(dev_t dev, u_long xfer, void *addr, int flag, struct lwp *l)
bad144intern(sc);
return 0;
#endif
- case DIOCGDINFO:
- *(struct disklabel *)addr = *(sc->sc_dk.dk_label);
- return 0;
-
- case DIOCGPART:
- ((struct partinfo *)addr)->disklab = sc->sc_dk.dk_label;
- ((struct partinfo *)addr)->part =
- &sc->sc_dk.dk_label->d_partitions[EFLASHPART(dev)];
- return 0;
case DIOCWDINFO:
case DIOCSDINFO:
diff --git a/sys/arch/hp300/dev/rd.c b/sys/arch/hp300/dev/rd.c
index 419e033f9bd..81bd644d247 100644
--- a/sys/arch/hp300/dev/rd.c
+++ b/sys/arch/hp300/dev/rd.c
@@ -1,4 +1,4 @@
-/* $NetBSD: rd.c,v 1.98 2014/08/10 16:44:34 tls Exp $ */
+/* $NetBSD: rd.c,v 1.99 2014/12/31 19:52:05 christos Exp $ */
/*-
* Copyright (c) 1996, 1997 The NetBSD Foundation, Inc.
@@ -72,7 +72,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rd.c,v 1.98 2014/08/10 16:44:34 tls Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rd.c,v 1.99 2014/12/31 19:52:05 christos Exp $");
#include "opt_useleds.h"
@@ -1116,17 +1116,11 @@ rdioctl(dev_t dev, u_long cmd, void *data, int flag, struct lwp *l)
struct disklabel *lp = sc->sc_dkdev.dk_label;
int error, flags;
- switch (cmd) {
- case DIOCGDINFO:
- *(struct disklabel *)data = *lp;
- return 0;
-
- case DIOCGPART:
- ((struct partinfo *)data)->disklab = lp;
- ((struct partinfo *)data)->part =
- &lp->d_partitions[rdpart(dev)];
- return 0;
+ error = disk_ioctl(&sc->sc_dkdev, rdpart(dev), cmd, data, flag, l);
+ if (error != EPASSTHROUGH)
+ return error;
+ switch (cmd) {
case DIOCWLABEL:
if ((flag & FWRITE) == 0)
return EBADF;
diff --git a/sys/arch/mac68k/obio/iwm_fd.c b/sys/arch/mac68k/obio/iwm_fd.c
index d190c191c3a..2b81daf0ed8 100644
--- a/sys/arch/mac68k/obio/iwm_fd.c
+++ b/sys/arch/mac68k/obio/iwm_fd.c
@@ -1,4 +1,4 @@
-/* $NetBSD: iwm_fd.c,v 1.50 2014/07/25 08:10:34 dholland Exp $ */
+/* $NetBSD: iwm_fd.c,v 1.51 2014/12/31 19:52:05 christos Exp $ */
/*
* Copyright (c) 1997, 1998 Hauke Fath. All rights reserved.
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: iwm_fd.c,v 1.50 2014/07/25 08:10:34 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: iwm_fd.c,v 1.51 2014/12/31 19:52:05 christos Exp $");
#include "locators.h"
@@ -720,14 +720,11 @@ fdioctl(dev_t dev, u_long cmd, void *data, int flags, struct lwp *l)
fd = iwm->fd[fdUnit];
result = 0;
- switch (cmd) {
- case DIOCGDINFO:
- if (TRACE_IOCTL)
- printf(" DIOCGDINFO: Get in-core disklabel.\n");
- *(struct disklabel *) data = *(fd->diskInfo.dk_label);
- result = 0;
- break;
+ error = disk_ioctl(&fd->diskIndfo, fdType, cmd, data, flag, l);
+ if (error != EPASSTHROUGH)
+ return error;
+ switch (cmd) {
case DIOCSDINFO:
if (TRACE_IOCTL)
printf(" DIOCSDINFO: Set in-core disklabel.\n");
@@ -754,15 +751,6 @@ fdioctl(dev_t dev, u_long cmd, void *data, int flags, struct lwp *l)
fd->diskInfo.dk_cpulabel);
break;
- case DIOCGPART:
- if (TRACE_IOCTL)
- printf(" DIOCGPART: Get disklabel & partition table.\n");
- ((struct partinfo *)data)->disklab = fd->diskInfo.dk_label;
- ((struct partinfo *)data)->part =
- &fd->diskInfo.dk_label->d_partitions[fdType];
- result = 0;
- break;
-
case DIOCRFORMAT:
case DIOCWFORMAT:
if (TRACE_IOCTL)
diff --git a/sys/arch/sun3/dev/xd.c b/sys/arch/sun3/dev/xd.c
index b2745fb8ae4..4100a96213e 100644
--- a/sys/arch/sun3/dev/xd.c
+++ b/sys/arch/sun3/dev/xd.c
@@ -1,4 +1,4 @@
-/* $NetBSD: xd.c,v 1.71 2014/07/25 08:10:35 dholland Exp $ */
+/* $NetBSD: xd.c,v 1.72 2014/12/31 19:52:05 christos Exp $ */
/*
* Copyright (c) 1995 Charles D. Cranor
@@ -46,7 +46,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xd.c,v 1.71 2014/07/25 08:10:35 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xd.c,v 1.72 2014/12/31 19:52:05 christos Exp $");
#undef XDC_DEBUG /* full debug */
#define XDC_DIAG /* extra sanity checks */
@@ -853,7 +853,7 @@ xd_getkauthreq(u_char cmd)
* xdioctl: ioctls on XD drives. based on ioctl's of other netbsd disks.
*/
int
-xdioctl(dev_t dev, u_long command, void *addr, int flag, struct lwp *l)
+xdioctl(dev_t dev, u_long cmd, void *addr, int flag, struct lwp *l)
{
struct xd_softc *xd;
struct xd_iocmd *xio;
@@ -865,9 +865,13 @@ xdioctl(dev_t dev, u_long command, void *addr, int flag, struct lwp *l)
if (xd == NULL)
return (ENXIO);
+ error = disk_ioctl(&xd->sc_dk, dev, cmd, addr, flag, l);
+ if (error != EPASSTHROUGH)
+ return error;
+
/* switch on ioctl type */
- switch (command) {
+ switch (cmd) {
case DIOCSBAD: /* set bad144 info */
if ((flag & FWRITE) == 0)
return EBADF;
@@ -876,16 +880,6 @@ xdioctl(dev_t dev, u_long command, void *addr, int flag, struct lwp *l)
splx(s);
return 0;
- case DIOCGDINFO: /* get disk label */
- memcpy(addr, xd->sc_dk.dk_label, sizeof(struct disklabel));
- return 0;
-
- case DIOCGPART: /* get partition info */
- ((struct partinfo *)addr)->disklab = xd->sc_dk.dk_label;
- ((struct partinfo *)addr)->part =
- &xd->sc_dk.dk_label->d_partitions[DISKPART(dev)];
- return 0;
-
case DIOCSDINFO: /* set disk label */
if ((flag & FWRITE) == 0)
return EBADF;
diff --git a/sys/arch/sun3/dev/xy.c b/sys/arch/sun3/dev/xy.c
index 6732ae9cd4b..f7ddd785681 100644
--- a/sys/arch/sun3/dev/xy.c
+++ b/sys/arch/sun3/dev/xy.c
@@ -1,4 +1,4 @@
-/* $NetBSD: xy.c,v 1.76 2014/07/25 08:10:35 dholland Exp $ */
+/* $NetBSD: xy.c,v 1.77 2014/12/31 19:52:05 christos Exp $ */
/*
* Copyright (c) 1995 Charles D. Cranor
@@ -46,7 +46,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xy.c,v 1.76 2014/07/25 08:10:35 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xy.c,v 1.77 2014/12/31 19:52:05 christos Exp $");
#undef XYC_DEBUG /* full debug */
#undef XYC_DIAG /* extra sanity checks */
@@ -806,7 +806,7 @@ xy_getkauthreq(u_char cmd)
* xyioctl: ioctls on XY drives. based on ioctl's of other netbsd disks.
*/
int
-xyioctl(dev_t dev, u_long command, void *addr, int flag, struct lwp *l)
+xyioctl(dev_t dev, u_long cmd, void *addr, int flag, struct lwp *l)
{
struct xy_softc *xy;
struct xd_iocmd *xio;
@@ -818,9 +818,13 @@ xyioctl(dev_t dev, u_long command, void *addr, int flag, struct lwp *l)
if (xy == NULL)
return ENXIO;
+ error = disk_ioctl(&xy->sc_dk, dev, cmd, addr, flag, l);
+ if (error != EPASSTHROUGH)
+ return error;
+
/* switch on ioctl type */
- switch (command) {
+ switch (cmd) {
case DIOCSBAD: /* set bad144 info */
if ((flag & FWRITE) == 0)
return EBADF;
@@ -829,16 +833,6 @@ xyioctl(dev_t dev, u_long command, void *addr, int flag, struct lwp *l)
splx(s);
return 0;
- case DIOCGDINFO: /* get disk label */
- memcpy(addr, xy->sc_dk.dk_label, sizeof(struct disklabel));
- return 0;
-
- case DIOCGPART: /* get partition info */
- ((struct partinfo *)addr)->disklab = xy->sc_dk.dk_label;
- ((struct partinfo *)addr)->part =
- &xy->sc_dk.dk_label->d_partitions[DISKPART(dev)];
- return 0;
-
case DIOCSDINFO: /* set disk label */
if ((flag & FWRITE) == 0)
return EBADF;
diff --git a/sys/arch/vax/mba/hp.c b/sys/arch/vax/mba/hp.c
index 6b5d267fd1c..251767048f1 100644
--- a/sys/arch/vax/mba/hp.c
+++ b/sys/arch/vax/mba/hp.c
@@ -1,4 +1,4 @@
-/* $NetBSD: hp.c,v 1.50 2014/07/25 08:10:35 dholland Exp $ */
+/* $NetBSD: hp.c,v 1.51 2014/12/31 19:52:05 christos Exp $ */
/*
* Copyright (c) 1996 Ludd, University of Lule}, Sweden.
* All rights reserved.
@@ -42,7 +42,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: hp.c,v 1.50 2014/07/25 08:10:35 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hp.c,v 1.51 2014/12/31 19:52:05 christos Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -324,17 +324,11 @@ hpioctl(dev_t dev, u_long cmd, void *addr, int flag, struct lwp *l)
struct disklabel * const lp = sc->sc_disk.dk_label;
int error;
- switch (cmd) {
- case DIOCGDINFO:
- *(struct disklabel *)addr = *lp;
- return 0;
-
- case DIOCGPART:
- ((struct partinfo *)addr)->disklab = lp;
- ((struct partinfo *)addr)->part =
- &lp->d_partitions[DISKPART(dev)];
- break;
+ error = disk_ioctl(&sc->sc_disk, dev, cmd, addr, flag, l);
+ if (error != EPASSTHROUGH)
+ goto out;
+ switch (cmd) {
case DIOCSDINFO:
if ((flag & FWRITE) == 0)
return EBADF;
diff --git a/sys/arch/vax/vsa/hdc9224.c b/sys/arch/vax/vsa/hdc9224.c
index d80e7cf3ce1..909561ff694 100644
--- a/sys/arch/vax/vsa/hdc9224.c
+++ b/sys/arch/vax/vsa/hdc9224.c
@@ -1,4 +1,4 @@
-/* $NetBSD: hdc9224.c,v 1.54 2014/07/25 08:10:35 dholland Exp $ */
+/* $NetBSD: hdc9224.c,v 1.55 2014/12/31 19:52:05 christos Exp $ */
/*
* Copyright (c) 1996 Ludd, University of Lule}, Sweden.
* All rights reserved.
@@ -51,7 +51,7 @@
#undef RDDEBUG
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: hdc9224.c,v 1.54 2014/07/25 08:10:35 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hdc9224.c,v 1.55 2014/12/31 19:52:05 christos Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -688,19 +688,14 @@ rdioctl(dev_t dev, u_long cmd, void *addr, int flag, struct lwp *l)
{
struct rdsoftc * const rd = device_lookup_private(&rd_cd, DISKUNIT(dev));
struct disklabel * const lp = rd->sc_disk.dk_label;
- int error = 0;
- switch (cmd) {
- case DIOCGDINFO:
- *(struct disklabel *)addr = *lp;
- break;
-
- case DIOCGPART:
- ((struct partinfo *)addr)->disklab = lp;
- ((struct partinfo *)addr)->part =
- &lp->d_partitions[DISKPART(dev)];
- break;
+ error = disk_ioctl(&rd->sc_disk, dev, cmd, addr, flag, l);
+ if (error != EPASSTHROUGH)
+ return error;
+ else
+ error = 0;
+ switch (cmd) {
case DIOCWDINFO:
case DIOCSDINFO:
if ((flag & FWRITE) == 0)
diff --git a/sys/arch/x68k/dev/bmd.c b/sys/arch/x68k/dev/bmd.c
index 13ad440a26b..449d56639cc 100644
--- a/sys/arch/x68k/dev/bmd.c
+++ b/sys/arch/x68k/dev/bmd.c
@@ -1,4 +1,4 @@
-/* $NetBSD: bmd.c,v 1.21 2014/07/25 08:10:35 dholland Exp $ */
+/* $NetBSD: bmd.c,v 1.22 2014/12/31 19:52:05 christos Exp $ */
/*
* Copyright (c) 2002 Tetsuya Isaki. All rights reserved.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: bmd.c,v 1.21 2014/07/25 08:10:35 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bmd.c,v 1.22 2014/12/31 19:52:05 christos Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -350,14 +350,15 @@ bmdioctl(dev_t dev, u_long cmd, void *data, int flag, struct lwp *l)
DPRINTF(("%s%d %ld\n", __func__, BMD_UNIT(dev), cmd));
sc = device_lookup_private(&bmd_cd, BMD_UNIT(dev));
+
if (sc == NULL)
return ENXIO;
- switch (cmd) {
- case DIOCGDINFO:
- *(struct disklabel *)data = *(sc->sc_dkdev.dk_label);
- break;
+ error = disk_ioctl(&sc->sc_dkdev, dev, cmd, data, flag, l);
+ if (error != EPASSTHROUGH)
+ return error;
+ switch (cmd) {
case DIOCWDINFO:
if ((flag & FWRITE) == 0)
return EBADF;
diff --git a/sys/arch/x68k/dev/fd.c b/sys/arch/x68k/dev/fd.c
index 5228fddaf4e..69f856e73bf 100644
--- a/sys/arch/x68k/dev/fd.c
+++ b/sys/arch/x68k/dev/fd.c
@@ -1,4 +1,4 @@
-/* $NetBSD: fd.c,v 1.111 2014/08/10 16:44:34 tls Exp $ */
+/* $NetBSD: fd.c,v 1.112 2014/12/31 19:52:05 christos Exp $ */
/*-
* Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -64,7 +64,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fd.c,v 1.111 2014/08/10 16:44:34 tls Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fd.c,v 1.112 2014/12/31 19:52:05 christos Exp $");
#include "opt_ddb.h"
#include "opt_m68k_arch.h"
@@ -1608,41 +1608,18 @@ 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;
- int part = DISKPART(dev);
struct disklabel buffer;
int error;
unsigned int scratch;
int il[FD_MAX_NSEC + 1];
int i, j;
+ error = disk_ioctl(&fd->sc_dk, dev, cmd, addr, flag, l);
+ if (error != EPASSTHROUGH)
+ return error;
+
DPRINTF(("fdioctl:"));
switch (cmd) {
- case DIOCGDINFO:
- DPRINTF(("DIOCGDINFO\n"));
-#if 1
- *(struct disklabel *)addr = *fd->sc_dk.dk_label;
- return 0;
-#else
- memset(&buffer, 0, sizeof(buffer));
-
- buffer.d_secpercyl = fd->sc_type->seccyl;
- buffer.d_type = DTYPE_FLOPPY;
- buffer.d_secsize = 128 << fd->sc_type->secsize;
-
- if (readdisklabel(dev, fdstrategy, &buffer, NULL) != NULL)
- return EINVAL;
-
- *(struct disklabel *)addr = buffer;
- return 0;
-#endif
-
- case DIOCGPART:
- DPRINTF(("DIOCGPART\n"));
- ((struct partinfo *)addr)->disklab = fd->sc_dk.dk_label;
- ((struct partinfo *)addr)->part =
- &fd->sc_dk.dk_label->d_partitions[part];
- return 0;
-
case DIOCWLABEL:
DPRINTF(("DIOCWLABEL\n"));
if ((flag & FWRITE) == 0)
diff --git a/sys/dev/ata/wd.c b/sys/dev/ata/wd.c
index 34c9da0821e..62c0633189a 100644
--- a/sys/dev/ata/wd.c
+++ b/sys/dev/ata/wd.c
@@ -1,4 +1,4 @@
-/* $NetBSD: wd.c,v 1.416 2014/12/31 17:06:48 christos Exp $ */
+/* $NetBSD: wd.c,v 1.417 2014/12/31 19:52:05 christos Exp $ */
/*
* Copyright (c) 1998, 2001 Manuel Bouyer. All rights reserved.
@@ -54,7 +54,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: wd.c,v 1.416 2014/12/31 17:06:48 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: wd.c,v 1.417 2014/12/31 19:52:05 christos Exp $");
#include "opt_ata.h"
@@ -1202,9 +1202,9 @@ wdioctl(dev_t dev, u_long xfer, void *addr, int flag, struct lwp *l)
if ((wd->sc_flags & WDF_LOADED) == 0)
return EIO;
- error = disk_ioctl(&wd->sc_dk, xfer, addr, flag, l);
+ error = disk_ioctl(&wd->sc_dk, dev, xfer, addr, flag, l);
if (error != EPASSTHROUGH)
- return (error);
+ return error;
error = 0;
switch (xfer) {
@@ -1272,28 +1272,6 @@ wdioctl(dev_t dev, u_long xfer, void *addr, int flag, struct lwp *l)
wd->sc_bscount = 0;
return 0;
#endif
- case DIOCGDINFO:
- *(struct disklabel *)addr = *(wd->sc_dk.dk_label);
- return 0;
-#ifdef __HAVE_OLD_DISKLABEL
- case ODIOCGDINFO:
- newlabel = malloc(sizeof *newlabel, M_TEMP, M_WAITOK);
- if (newlabel == NULL)
- return EIO;
- *newlabel = *(wd->sc_dk.dk_label);
- if (newlabel->d_npartitions <= OLDMAXPARTITIONS)
- memcpy(addr, newlabel, sizeof (struct olddisklabel));
- else
- error = ENOTTY;
- free(newlabel, M_TEMP);
- return error;
-#endif
-
- case DIOCGPART:
- ((struct partinfo *)addr)->disklab = wd->sc_dk.dk_label;
- ((struct partinfo *)addr)->part =
- &wd->sc_dk.dk_label->d_partitions[WDPART(dev)];
- return 0;
case DIOCWDINFO:
case DIOCSDINFO:
diff --git a/sys/dev/ccd.c b/sys/dev/ccd.c
index 9e138398448..fe26f8b81af 100644
--- a/sys/dev/ccd.c
+++ b/sys/dev/ccd.c
@@ -1,4 +1,4 @@
-/* $NetBSD: ccd.c,v 1.160 2014/12/31 17:06:48 christos Exp $ */
+/* $NetBSD: ccd.c,v 1.161 2014/12/31 19:52:05 christos Exp $ */
/*-
* Copyright (c) 1996, 1997, 1998, 1999, 2007, 2009 The NetBSD Foundation, Inc.
@@ -88,7 +88,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ccd.c,v 1.160 2014/12/31 17:06:48 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ccd.c,v 1.161 2014/12/31 19:52:05 christos Exp $");
#if defined(_KERNEL_OPT)
#include "opt_compat_netbsd.h"
@@ -1196,7 +1196,7 @@ ccdioctl(dev_t dev, u_long cmd, void *data, int flag, struct lwp *l)
}
}
- error = disk_ioctl(&cs->sc_dkdev, cmd, data, flag, l);
+ error = disk_ioctl(&cs->sc_dkdev, dev, cmd, data, flag, l);
if (error != EPASSTHROUGH)
goto out;
@@ -1383,25 +1383,6 @@ ccdioctl(dev_t dev, u_long cmd, void *data, int flag, struct lwp *l)
/* Don't break, otherwise cs is read again. */
return 0;
- case DIOCGDINFO:
- *(struct disklabel *)data = *(cs->sc_dkdev.dk_label);
- break;
-
-#ifdef __HAVE_OLD_DISKLABEL
- case ODIOCGDINFO:
- newlabel = *(cs->sc_dkdev.dk_label);
- if (newlabel.d_npartitions > OLDMAXPARTITIONS)
- return ENOTTY;
- memcpy(data, &newlabel, sizeof (struct olddisklabel));
- break;
-#endif
-
- case DIOCGPART:
- ((struct partinfo *)data)->disklab = cs->sc_dkdev.dk_label;
- ((struct partinfo *)data)->part =
- &cs->sc_dkdev.dk_label->d_partitions[DISKPART(dev)];
- break;
-
case DIOCCACHESYNC:
/*
* We pass this call down to all components and report
diff --git a/sys/dev/cgd.c b/sys/dev/cgd.c
index dcae7bc6a00..66c7bb156eb 100644
--- a/sys/dev/cgd.c
+++ b/sys/dev/cgd.c
@@ -1,4 +1,4 @@
-/* $NetBSD: cgd.c,v 1.93 2014/12/30 20:18:44 christos Exp $ */
+/* $NetBSD: cgd.c,v 1.94 2014/12/31 19:52:05 christos Exp $ */
/*-
* Copyright (c) 2002 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cgd.c,v 1.93 2014/12/30 20:18:44 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cgd.c,v 1.94 2014/12/31 19:52:05 christos Exp $");
#include <sys/types.h>
#include <sys/param.h>
@@ -567,7 +567,7 @@ cgdioctl(dev_t dev, u_long cmd, void *data, int flag, struct lwp *l)
break;
}
- error = disk_ioctl(&dksc->sc_dkdev, cmd, data, flag, l);
+ error = disk_ioctl(&dksc->sc_dkdev, dev, cmd, data, flag, l);
if (error != EPASSTHROUGH)
return (error);
diff --git a/sys/dev/dksubr.c b/sys/dev/dksubr.c
index 7857e8af922..644dc578230 100644
--- a/sys/dev/dksubr.c
+++ b/sys/dev/dksubr.c
@@ -1,4 +1,4 @@
-/* $NetBSD: dksubr.c,v 1.57 2014/12/31 17:06:48 christos Exp $ */
+/* $NetBSD: dksubr.c,v 1.58 2014/12/31 19:52:05 christos Exp $ */
/*-
* Copyright (c) 1996, 1997, 1998, 1999, 2002, 2008 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dksubr.c,v 1.57 2014/12/31 17:06:48 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dksubr.c,v 1.58 2014/12/31 19:52:05 christos Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -332,32 +332,13 @@ dk_ioctl(struct dk_intf *di, struct dk_softc *dksc, dev_t dev,
return ENXIO;
}
- error = disk_ioctl(dk, cmd, data, flag, l);
+ error = disk_ioctl(dk, dev, cmd, data, flag, l);
if (error != EPASSTHROUGH)
return error;
else
error = 0;
switch (cmd) {
- case DIOCGDINFO:
- *(struct disklabel *)data = *(dksc->sc_dkdev.dk_label);
- break;
-
-#ifdef __HAVE_OLD_DISKLABEL
- case ODIOCGDINFO:
- newlabel = *(dksc->sc_dkdev.dk_label);
- if (newlabel.d_npartitions > OLDMAXPARTITIONS)
- return ENOTTY;
- memcpy(data, &newlabel, sizeof (struct olddisklabel));
- break;
-#endif
-
- case DIOCGPART:
- ((struct partinfo *)data)->disklab = dksc->sc_dkdev.dk_label;
- ((struct partinfo *)data)->part =
- &dksc->sc_dkdev.dk_label->d_partitions[DISKPART(dev)];
- break;
-
case DIOCWDINFO:
case DIOCSDINFO:
#ifdef __HAVE_OLD_DISKLABEL
diff --git a/sys/dev/dkwedge/dk.c b/sys/dev/dkwedge/dk.c
index 30908654b14..33bccfe8e29 100644
--- a/sys/dev/dkwedge/dk.c
+++ b/sys/dev/dkwedge/dk.c
@@ -1,4 +1,4 @@
-/* $NetBSD: dk.c,v 1.77 2014/12/31 08:24:50 mlelstv Exp $ */
+/* $NetBSD: dk.c,v 1.78 2014/12/31 19:52:05 christos Exp $ */
/*-
* Copyright (c) 2004, 2005, 2006, 2007 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dk.c,v 1.77 2014/12/31 08:24:50 mlelstv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dk.c,v 1.78 2014/12/31 19:52:05 christos Exp $");
#ifdef _KERNEL_OPT
#include "opt_dkwedge.h"
@@ -1358,7 +1358,11 @@ dkioctl(dev_t dev, u_long cmd, void *data, int flag, struct lwp *l)
if (sc->sc_parent->dk_rawvp == NULL)
return (ENXIO);
- error = disk_ioctl(&sc->sc_dk, cmd, data, flag, l);
+ /*
+ * We pass 0 instead of our device to indicate we don't
+ * want to handle disklabel ioctls
+ */
+ error = disk_ioctl(&sc->sc_dk, 0, cmd, data, flag, l);
if (error != EPASSTHROUGH)
return (error);
diff --git a/sys/dev/gpib/rd.c b/sys/dev/gpib/rd.c
index 1bb60358e59..af51ae6b162 100644
--- a/sys/dev/gpib/rd.c
+++ b/sys/dev/gpib/rd.c
@@ -1,4 +1,4 @@
-/* $NetBSD: rd.c,v 1.36 2014/08/10 16:44:35 tls Exp $ */
+/* $NetBSD: rd.c,v 1.37 2014/12/31 19:52:05 christos Exp $ */
/*-
* Copyright (c) 1996-2003 The NetBSD Foundation, Inc.
@@ -72,7 +72,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rd.c,v 1.36 2014/08/10 16:44:35 tls Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rd.c,v 1.37 2014/12/31 19:52:05 christos Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -972,17 +972,11 @@ rdioctl(dev_t dev, u_long cmd, void *data, int flag, struct lwp *l)
DPRINTF(RDB_FOLLOW, ("rdioctl: sc=%p\n", sc));
- switch (cmd) {
- case DIOCGDINFO:
- *(struct disklabel *)data = *lp;
- return (0);
-
- case DIOCGPART:
- ((struct partinfo *)data)->disklab = lp;
- ((struct partinfo *)data)->part =
- &lp->d_partitions[RDPART(dev)];
- return (0);
+ error = disk_ioctl(&sk->sc_dk, dev, cmd, data, flag, l);
+ if (error != EPASSTHROUGH)
+ return error;
+ switch (cmd) {
case DIOCWLABEL:
if ((flag & FWRITE) == 0)
return (EBADF);
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
diff --git a/sys/dev/ld.c b/sys/dev/ld.c
index 19a7d21b074..f3081fb6e15 100644
--- a/sys/dev/ld.c
+++ b/sys/dev/ld.c
@@ -1,4 +1,4 @@
-/* $NetBSD: ld.c,v 1.79 2014/12/31 17:06:48 christos Exp $ */
+/* $NetBSD: ld.c,v 1.80 2014/12/31 19:52:05 christos Exp $ */
/*-
* Copyright (c) 1998, 2000 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ld.c,v 1.79 2014/12/31 17:06:48 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ld.c,v 1.80 2014/12/31 19:52:05 christos Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -407,41 +407,21 @@ static int
ldioctl(dev_t dev, u_long cmd, void *addr, int32_t flag, struct lwp *l)
{
struct ld_softc *sc;
- int part, unit, error;
+ int unit, error;
#ifdef __HAVE_OLD_DISKLABEL
struct disklabel newlabel;
#endif
struct disklabel *lp;
unit = DISKUNIT(dev);
- part = DISKPART(dev);
sc = device_lookup_private(&ld_cd, unit);
- error = disk_ioctl(&sc->sc_dk, cmd, addr, flag, l);
+ error = disk_ioctl(&sc->sc_dk, dev, cmd, addr, flag, l);
if (error != EPASSTHROUGH)
return (error);
error = 0;
switch (cmd) {
- case DIOCGDINFO:
- memcpy(addr, sc->sc_dk.dk_label, sizeof(struct disklabel));
- 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];
- break;
-
case DIOCWDINFO:
case DIOCSDINFO:
#ifdef __HAVE_OLD_DISKLABEL
diff --git a/sys/dev/mca/ed_mca.c b/sys/dev/mca/ed_mca.c
index 3aecb2bf506..65bd1deafab 100644
--- a/sys/dev/mca/ed_mca.c
+++ b/sys/dev/mca/ed_mca.c
@@ -1,4 +1,4 @@
-/* $NetBSD: ed_mca.c,v 1.60 2014/12/31 17:06:48 christos Exp $ */
+/* $NetBSD: ed_mca.c,v 1.61 2014/12/31 19:52:05 christos Exp $ */
/*
* Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ed_mca.c,v 1.60 2014/12/31 17:06:48 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ed_mca.c,v 1.61 2014/12/31 19:52:05 christos Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -478,21 +478,11 @@ edmcaioctl(dev_t dev, u_long xfer, void *addr, int flag, struct lwp *l)
if ((ed->sc_flags & WDF_LOADED) == 0)
return EIO;
- error = disk_ioctl(&ed->sc_dk, xfer, addr, flag, l);
+ error = disk_ioctl(&ed->sc_dk, dev, xfer, addr, flag, l);
if (error != EPASSTHROUGH)
return error;
switch (xfer) {
- case DIOCGDINFO:
- *(struct disklabel *)addr = *(ed->sc_dk.dk_label);
- return 0;
-
- case DIOCGPART:
- ((struct partinfo *)addr)->disklab = ed->sc_dk.dk_label;
- ((struct partinfo *)addr)->part =
- &ed->sc_dk.dk_label->d_partitions[DISKPART(dev)];
- return 0;
-
case DIOCWDINFO:
case DIOCSDINFO:
{
diff --git a/sys/dev/md.c b/sys/dev/md.c
index 218753a4f4b..deb9de4a061 100644
--- a/sys/dev/md.c
+++ b/sys/dev/md.c
@@ -1,4 +1,4 @@
-/* $NetBSD: md.c,v 1.71 2014/07/25 08:10:35 dholland Exp $ */
+/* $NetBSD: md.c,v 1.72 2014/12/31 19:52:05 christos Exp $ */
/*
* Copyright (c) 1995 Gordon W. Ross, Leo Weppelman.
@@ -40,7 +40,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: md.c,v 1.71 2014/07/25 08:10:35 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: md.c,v 1.72 2014/12/31 19:52:05 christos Exp $");
#ifdef _KERNEL_OPT
#include "opt_md.h"
@@ -474,8 +474,6 @@ mdioctl(dev_t dev, u_long cmd, void *data, int flag, struct lwp *l)
{
struct md_softc *sc;
struct md_conf *umd;
- struct disklabel *lp;
- struct partinfo *pp;
int error;
if ((sc = device_lookup_private(&md_cd, MD_UNIT(dev))) == NULL)
@@ -483,18 +481,8 @@ mdioctl(dev_t dev, u_long cmd, void *data, int flag, struct lwp *l)
mutex_enter(&sc->sc_lock);
if (sc->sc_type != MD_UNCONFIGURED) {
- switch (cmd) {
- case DIOCGDINFO:
- lp = (struct disklabel *)data;
- *lp = *sc->sc_dkdev.dk_label;
- mutex_exit(&sc->sc_lock);
- return 0;
-
- case DIOCGPART:
- pp = (struct partinfo *)data;
- pp->disklab = sc->sc_dkdev.dk_label;
- pp->part =
- &sc->sc_dkdev.dk_label->d_partitions[DISKPART(dev)];
+ error = disk_ioctl(&sc->sc_dkdev, dev, cmd, data, flag, l);
+ if (error != EPASSTHROUGH) {
mutex_exit(&sc->sc_lock);
return 0;
}
diff --git a/sys/dev/mscp/mscp_disk.c b/sys/dev/mscp/mscp_disk.c
index 88c8456e12e..038c42cee25 100644
--- a/sys/dev/mscp/mscp_disk.c
+++ b/sys/dev/mscp/mscp_disk.c
@@ -1,4 +1,4 @@
-/* $NetBSD: mscp_disk.c,v 1.83 2014/12/31 17:06:48 christos Exp $ */
+/* $NetBSD: mscp_disk.c,v 1.84 2014/12/31 19:52:05 christos Exp $ */
/*
* Copyright (c) 1988 Regents of the University of California.
* All rights reserved.
@@ -82,7 +82,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mscp_disk.c,v 1.83 2014/12/31 17:06:48 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mscp_disk.c,v 1.84 2014/12/31 19:52:05 christos Exp $");
#include <sys/param.h>
#include <sys/buf.h>
@@ -412,32 +412,13 @@ raioctl(dev_t dev, u_long cmd, void *data, int flag, struct lwp *l)
lp = ra->ra_disk.dk_label;
- error = disk_ioctl(&ra->ra_disk, cmd, data, flag, l);
+ error = disk_ioctl(&ra->ra_disk, dev, cmd, data, flag, l);
if (error != EPASSTHROUGH)
return error;
else
error = 0;
switch (cmd) {
-
- case DIOCGDINFO:
- memcpy(data, lp, sizeof (struct disklabel));
- break;
-#ifdef __HAVE_OLD_DISKLABEL
- case ODIOCGDINFO:
- memcpy(&newlabel, lp, sizeof newlabel);
- if (newlabel.d_npartitions > OLDMAXPARTITIONS)
- return ENOTTY;
- memcpy(data, &newlabel, sizeof (struct olddisklabel));
- break;
-#endif
-
- case DIOCGPART:
- ((struct partinfo *)data)->disklab = lp;
- ((struct partinfo *)data)->part =
- &lp->d_partitions[DISKPART(dev)];
- break;
-
case DIOCWDINFO:
case DIOCSDINFO:
#ifdef __HAVE_OLD_DISKLABEL
@@ -877,25 +858,13 @@ rxioctl(dev_t dev, u_long cmd, void *data, int flag, struct lwp *l)
lp = rx->ra_disk.dk_label;
- error = disk_ioctl(&rx->ra_disk, cmd, data, flag, l);
+ error = disk_ioctl(&rx->ra_disk, dev, cmd, data, flag, l);
if (error != EPASSTHROUGH)
return error;
else
error = 0;
switch (cmd) {
-
- case DIOCGDINFO:
- memcpy(data, lp, sizeof (struct disklabel));
- break;
-
- case DIOCGPART:
- ((struct partinfo *)data)->disklab = lp;
- ((struct partinfo *)data)->part =
- &lp->d_partitions[DISKPART(dev)];
- break;
-
-
case DIOCWDINFO:
case DIOCSDINFO:
case DIOCWLABEL:
diff --git a/sys/dev/ofw/ofdisk.c b/sys/dev/ofw/ofdisk.c
index 4eb2e4bf28a..a14ab2a01e8 100644
--- a/sys/dev/ofw/ofdisk.c
+++ b/sys/dev/ofw/ofdisk.c
@@ -1,4 +1,4 @@
-/* $NetBSD: ofdisk.c,v 1.49 2014/12/31 17:06:48 christos Exp $ */
+/* $NetBSD: ofdisk.c,v 1.50 2014/12/31 19:52:06 christos Exp $ */
/*
* Copyright (C) 1995, 1996 Wolfgang Solfrank.
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ofdisk.c,v 1.49 2014/12/31 17:06:48 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ofdisk.c,v 1.50 2014/12/31 19:52:06 christos Exp $");
#include <sys/param.h>
#include <sys/buf.h>
@@ -369,29 +369,11 @@ ofdisk_ioctl(dev_t dev, u_long cmd, void *data, int flag, struct lwp *l)
return ENOTTY;
}
- error = disk_ioctl(&of->sc_dk, cmd, data, flag, l);
+ error = disk_ioctl(&of->sc_dk, dev, cmd, data, flag, l);
if (error != EPASSTHROUGH)
return error;
switch (cmd) {
- case DIOCGDINFO:
- *(struct disklabel *)data = *of->sc_dk.dk_label;
- return 0;
-#ifdef __HAVE_OLD_DISKLABEL
- case ODIOCGDINFO:
- newlabel = *of->sc_dk.dk_label;
- if (newlabel.d_npartitions > OLDMAXPARTITIONS)
- return ENOTTY;
- memcpy(data, &newlabel, sizeof (struct olddisklabel));
- return 0;
-#endif
-
- case DIOCGPART:
- ((struct partinfo *)data)->disklab = of->sc_dk.dk_label;
- ((struct partinfo *)data)->part =
- &of->sc_dk.dk_label->d_partitions[DISKPART(dev)];
- return 0;
-
case DIOCWDINFO:
case DIOCSDINFO:
#ifdef __HAVE_OLD_DISKLABEL
diff --git a/sys/dev/qbus/rf.c b/sys/dev/qbus/rf.c
index 290a0a307f4..dbb46a82666 100644
--- a/sys/dev/qbus/rf.c
+++ b/sys/dev/qbus/rf.c
@@ -1,4 +1,4 @@
-/* $NetBSD: rf.c,v 1.29 2014/08/04 14:20:33 ryoon Exp $ */
+/* $NetBSD: rf.c,v 1.30 2014/12/31 19:52:06 christos Exp $ */
/*
* Copyright (c) 2002 Jochen Kunz.
* All rights reserved.
@@ -36,7 +36,7 @@ TODO:
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rf.c,v 1.29 2014/08/04 14:20:33 ryoon Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rf.c,v 1.30 2014/12/31 19:52:06 christos Exp $");
/* autoconfig stuff */
#include <sys/param.h>
@@ -1090,27 +1090,22 @@ int
rfioctl(dev_t dev, u_long cmd, void *data, int fflag, struct lwp *l)
{
struct rf_softc *rf_sc = device_lookup_private(&rf_cd, DISKUNIT(dev));
+ int error;
/* We are going to operate on a non-open dev? PANIC! */
if ((rf_sc->sc_state & 1 << (DISKPART(dev) + RFS_OPEN_SHIFT)) == 0)
panic("rfioctl: can not operate on non-open drive %s "
"partition %"PRIu32, device_xname(rf_sc->sc_dev), DISKPART(dev));
+ error = disk_ioctl(&rf_sc->sc_disk, dev, cmd, data, fflag, l);
+ if (error != EPASSTHROUGH)
+ return error;
+
switch (cmd) {
/* get and set disklabel; DIOCGPART used internally */
- case DIOCGDINFO: /* get */
- memcpy(data, rf_sc->sc_disk.dk_label,
- sizeof(struct disklabel));
- return(0);
case DIOCSDINFO: /* set */
return(0);
case DIOCWDINFO: /* set, update disk */
return(0);
- case DIOCGPART: /* get partition */
- ((struct partinfo *)data)->disklab = rf_sc->sc_disk.dk_label;
- ((struct partinfo *)data)->part =
- &rf_sc->sc_disk.dk_label->d_partitions[DISKPART(dev)];
- return(0);
-
/* do format operation, read or write */
case DIOCRFORMAT:
break;
diff --git a/sys/dev/qbus/rl.c b/sys/dev/qbus/rl.c
index c5571401af1..414099f74d6 100644
--- a/sys/dev/qbus/rl.c
+++ b/sys/dev/qbus/rl.c
@@ -1,4 +1,4 @@
-/* $NetBSD: rl.c,v 1.47 2014/12/31 17:06:48 christos Exp $ */
+/* $NetBSD: rl.c,v 1.48 2014/12/31 19:52:06 christos Exp $ */
/*
* Copyright (c) 2000 Ludd, University of Lule}, Sweden. All rights reserved.
@@ -43,7 +43,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rl.c,v 1.47 2014/12/31 17:06:48 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rl.c,v 1.48 2014/12/31 19:52:06 christos Exp $");
#include <sys/param.h>
#include <sys/device.h>
@@ -445,35 +445,16 @@ rlioctl(dev_t dev, u_long cmd, void *addr, int flag, struct lwp *l)
struct disklabel *lp = rc->rc_disk.dk_label;
int error;
#ifdef __HAVE_OLD_DISKLABEL
- struct diklabel newlabel;
+ struct disklabel newlabel;
#endif
- error = disk_ioctl(&rc->rc_disk, xfer, addr, flag, l);
+ error = disk_ioctl(&rc->rc_disk, dev, cmd, addr, flag, l);
if (error != EPASSTHROUGH)
return error;
else
error = 0;
switch (cmd) {
- case DIOCGDINFO:
- memcpy(addr, lp, sizeof (struct disklabel));
- break;
-
-#ifdef __HAVE_OLD_DISKLABEL
- case ODIOCGDINFO:
- newlabel = *lp;
- if (newlabel.d_npartitions > OLDMAXPARTITIONS)
- return ENOTTY;
- memcpy(addr, &newlabel, sizeof (struct olddisklabel));
- break;
-#endif
-
- case DIOCGPART:
- ((struct partinfo *)addr)->disklab = lp;
- ((struct partinfo *)addr)->part =
- &lp->d_partitions[DISKPART(dev)];
- break;
-
case DIOCSDINFO:
case DIOCWDINFO:
#ifdef __HAVE_OLD_DISKLABEL
diff --git a/sys/dev/raidframe/rf_netbsdkintf.c b/sys/dev/raidframe/rf_netbsdkintf.c
index 49f4f0ab0ff..ccfea146bf0 100644
--- a/sys/dev/raidframe/rf_netbsdkintf.c
+++ b/sys/dev/raidframe/rf_netbsdkintf.c
@@ -1,4 +1,4 @@
-/* $NetBSD: rf_netbsdkintf.c,v 1.319 2014/12/31 17:06:48 christos Exp $ */
+/* $NetBSD: rf_netbsdkintf.c,v 1.320 2014/12/31 19:52:06 christos Exp $ */
/*-
* Copyright (c) 1996, 1997, 1998, 2008-2011 The NetBSD Foundation, Inc.
@@ -101,7 +101,7 @@
***********************************************************/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rf_netbsdkintf.c,v 1.319 2014/12/31 17:06:48 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rf_netbsdkintf.c,v 1.320 2014/12/31 19:52:06 christos Exp $");
#ifdef _KERNEL_OPT
#include "opt_compat_netbsd.h"
@@ -1826,29 +1826,11 @@ raidioctl(dev_t dev, u_long cmd, void *data, int flag, struct lwp *l)
* Add support for "regular" device ioctls here.
*/
- error = disk_ioctl(&rs->sc_dkdev, cmd, data, flag, l);
+ error = disk_ioctl(&rs->sc_dkdev, dev, cmd, data, flag, l);
if (error != EPASSTHROUGH)
return (error);
switch (cmd) {
- case DIOCGDINFO:
- *(struct disklabel *) data = *(rs->sc_dkdev.dk_label);
- break;
-#ifdef __HAVE_OLD_DISKLABEL
- case ODIOCGDINFO:
- newlabel = *(rs->sc_dkdev.dk_label);
- if (newlabel.d_npartitions > OLDMAXPARTITIONS)
- return ENOTTY;
- memcpy(data, &newlabel, sizeof (struct olddisklabel));
- break;
-#endif
-
- case DIOCGPART:
- ((struct partinfo *) data)->disklab = rs->sc_dkdev.dk_label;
- ((struct partinfo *) data)->part =
- &rs->sc_dkdev.dk_label->d_partitions[DISKPART(dev)];
- break;
-
case DIOCWDINFO:
case DIOCSDINFO:
#ifdef __HAVE_OLD_DISKLABEL
diff --git a/sys/dev/scsipi/cd.c b/sys/dev/scsipi/cd.c
index 00eb59176f4..a82b7d92b70 100644
--- a/sys/dev/scsipi/cd.c
+++ b/sys/dev/scsipi/cd.c
@@ -1,4 +1,4 @@
-/* $NetBSD: cd.c,v 1.326 2014/12/31 19:37:35 mlelstv Exp $ */
+/* $NetBSD: cd.c,v 1.327 2014/12/31 19:52:06 christos Exp $ */
/*-
* Copyright (c) 1998, 2001, 2003, 2004, 2005, 2008 The NetBSD Foundation,
@@ -50,7 +50,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cd.c,v 1.326 2014/12/31 19:37:35 mlelstv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cd.c,v 1.327 2014/12/31 19:52:06 christos Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -1321,35 +1321,12 @@ cdioctl(dev_t dev, u_long cmd, void *addr, int flag, struct lwp *l)
}
}
- error = disk_ioctl(&cd->sc_dk, cmd, addr, flag, l);
+ error = disk_ioctl(&cd->sc_dk, dev, cmd, addr, flag, l);
if (error != EPASSTHROUGH)
return (error);
error = 0;
switch (cmd) {
- case DIOCGDINFO:
- *(struct disklabel *)addr = *(cd->sc_dk.dk_label);
- return (0);
-#ifdef __HAVE_OLD_DISKLABEL
- case ODIOCGDINFO:
- newlabel = malloc(sizeof (*newlabel), M_TEMP, M_WAITOK);
- if (newlabel == NULL)
- return (EIO);
- memcpy(newlabel, cd->sc_dk.dk_label, sizeof (*newlabel));
- if (newlabel->d_npartitions > OLDMAXPARTITIONS)
- error = ENOTTY;
- else
- memcpy(addr, newlabel, sizeof (struct olddisklabel));
- free(newlabel, M_TEMP);
- return error;
-#endif
-
- case DIOCGPART:
- ((struct partinfo *)addr)->disklab = cd->sc_dk.dk_label;
- ((struct partinfo *)addr)->part =
- &cd->sc_dk.dk_label->d_partitions[part];
- return (0);
-
case DIOCWDINFO:
case DIOCSDINFO:
#ifdef __HAVE_OLD_DISKLABEL
diff --git a/sys/dev/scsipi/sd.c b/sys/dev/scsipi/sd.c
index 05d38a4d0a5..4740f9be1ab 100644
--- a/sys/dev/scsipi/sd.c
+++ b/sys/dev/scsipi/sd.c
@@ -1,4 +1,4 @@
-/* $NetBSD: sd.c,v 1.312 2014/12/31 17:06:48 christos Exp $ */
+/* $NetBSD: sd.c,v 1.313 2014/12/31 19:52:06 christos Exp $ */
/*-
* Copyright (c) 1998, 2003, 2004 The NetBSD Foundation, Inc.
@@ -47,7 +47,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sd.c,v 1.312 2014/12/31 17:06:48 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sd.c,v 1.313 2014/12/31 19:52:06 christos Exp $");
#include "opt_scsi.h"
@@ -1053,36 +1053,12 @@ sdioctl(dev_t dev, u_long cmd, void *addr, int flag, struct lwp *l)
}
}
- error = disk_ioctl(&sd->sc_dk, cmd, addr, flag, l);
+ error = disk_ioctl(&sd->sc_dk, dev, cmd, addr, flag, l);
if (error != EPASSTHROUGH)
return (error);
error = 0;
switch (cmd) {
- case DIOCGDINFO:
- *(struct disklabel *)addr = *(sd->sc_dk.dk_label);
- return (0);
-
-#ifdef __HAVE_OLD_DISKLABEL
- case ODIOCGDINFO:
- newlabel = malloc(sizeof *newlabel, M_TEMP, M_WAITOK);
- if (newlabel == NULL)
- return EIO;
- memcpy(newlabel, sd->sc_dk.dk_label, sizeof (*newlabel));
- if (newlabel->d_npartitions <= OLDMAXPARTITIONS)
- memcpy(addr, newlabel, sizeof (struct olddisklabel));
- else
- error = ENOTTY;
- free(newlabel, M_TEMP);
- return error;
-#endif
-
- case DIOCGPART:
- ((struct partinfo *)addr)->disklab = sd->sc_dk.dk_label;
- ((struct partinfo *)addr)->part =
- &sd->sc_dk.dk_label->d_partitions[part];
- return (0);
-
case DIOCWDINFO:
case DIOCSDINFO:
#ifdef __HAVE_OLD_DISKLABEL
diff --git a/sys/dev/vme/xd.c b/sys/dev/vme/xd.c
index b2a346a151d..2cf83111ad9 100644
--- a/sys/dev/vme/xd.c
+++ b/sys/dev/vme/xd.c
@@ -1,4 +1,4 @@
-/* $NetBSD: xd.c,v 1.93 2014/07/25 08:10:39 dholland Exp $ */
+/* $NetBSD: xd.c,v 1.94 2014/12/31 19:52:06 christos Exp $ */
/*
* Copyright (c) 1995 Charles D. Cranor
@@ -45,7 +45,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xd.c,v 1.93 2014/07/25 08:10:39 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xd.c,v 1.94 2014/12/31 19:52:06 christos Exp $");
#undef XDC_DEBUG /* full debug */
#define XDC_DIAG /* extra sanity checks */
@@ -1034,6 +1034,10 @@ xdioctl(dev_t dev, u_long command, void *addr, int flag, struct lwp *l)
if ((xd = device_lookup_private(&xd_cd, unit)) == NULL)
return (ENXIO);
+ error = disk_ioctl(&xd->sc_dk, dev, command, addr, flag, l);
+ if (error != EPASSTHROUGH)
+ return error;
+
/* switch on ioctl type */
switch (command) {
@@ -1045,24 +1049,6 @@ xdioctl(dev_t dev, u_long command, void *addr, int flag, struct lwp *l)
splx(s);
return 0;
- case DIOCGDINFO: /* get disk label */
- memcpy(addr, xd->sc_dk.dk_label, sizeof(struct disklabel));
- return 0;
-#ifdef __HAVE_OLD_DISKLABEL
- case ODIOCGDINFO:
- newlabel = *(xd->sc_dk.dk_label);
- if (newlabel.d_npartitions > OLDMAXPARTITIONS)
- return ENOTTY;
- memcpy(addr, &newlabel, sizeof (struct olddisklabel));
- return 0;
-#endif
-
- case DIOCGPART: /* get partition info */
- ((struct partinfo *) addr)->disklab = xd->sc_dk.dk_label;
- ((struct partinfo *) addr)->part =
- &xd->sc_dk.dk_label->d_partitions[DISKPART(dev)];
- return 0;
-
case DIOCSDINFO: /* set disk label */
#ifdef __HAVE_OLD_DISKLABEL
case ODIOCSDINFO:
diff --git a/sys/dev/vme/xy.c b/sys/dev/vme/xy.c
index c98100fe8ee..67682ed0a3d 100644
--- a/sys/dev/vme/xy.c
+++ b/sys/dev/vme/xy.c
@@ -1,4 +1,4 @@
-/* $NetBSD: xy.c,v 1.97 2014/07/25 08:10:39 dholland Exp $ */
+/* $NetBSD: xy.c,v 1.98 2014/12/31 19:52:06 christos Exp $ */
/*
* Copyright (c) 1995 Charles D. Cranor
@@ -45,7 +45,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xy.c,v 1.97 2014/07/25 08:10:39 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xy.c,v 1.98 2014/12/31 19:52:06 christos Exp $");
#undef XYC_DEBUG /* full debug */
#undef XYC_DIAG /* extra sanity checks */
@@ -953,6 +953,10 @@ xyioctl(dev_t dev, u_long command, void *addr, int flag, struct lwp *l)
if ((xy = device_lookup_private(&xy_cd, unit)) == NULL)
return (ENXIO);
+ error = disk_ioctl(&xy->sc_dk, dev, command, addr, flag, l);
+ if (error != EPASSTHROUGH)
+ return error;
+
/* switch on ioctl type */
switch (command) {
@@ -964,24 +968,6 @@ xyioctl(dev_t dev, u_long command, void *addr, int flag, struct lwp *l)
splx(s);
return 0;
- case DIOCGDINFO: /* get disk label */
- memcpy(addr, xy->sc_dk.dk_label, sizeof(struct disklabel));
- return 0;
-#ifdef __HAVE_OLD_DISKLABEL
- case ODIOCGDINFO:
- newlabel = *(xy->sc_dk.dk_label);
- if (newlabel.d_npartitions > OLDMAXPARTITIONS)
- return ENOTTY;
- memcpy(addr, &newlabel, sizeof (struct olddisklabel));
- return 0;
-#endif
-
- case DIOCGPART: /* get partition info */
- ((struct partinfo *) addr)->disklab = xy->sc_dk.dk_label;
- ((struct partinfo *) addr)->part =
- &xy->sc_dk.dk_label->d_partitions[DISKPART(dev)];
- return 0;
-
case DIOCSDINFO: /* set disk label */
#ifdef __HAVE_OLD_DISKLABEL
case ODIOCSDINFO:
diff --git a/sys/dev/vnd.c b/sys/dev/vnd.c
index 09bf4262e20..3abb2388b4a 100644
--- a/sys/dev/vnd.c
+++ b/sys/dev/vnd.c
@@ -1,4 +1,4 @@
-/* $NetBSD: vnd.c,v 1.237 2014/12/31 17:06:48 christos Exp $ */
+/* $NetBSD: vnd.c,v 1.238 2014/12/31 19:52:05 christos Exp $ */
/*-
* Copyright (c) 1996, 1997, 1998, 2008 The NetBSD Foundation, Inc.
@@ -91,7 +91,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vnd.c,v 1.237 2014/12/31 17:06:48 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vnd.c,v 1.238 2014/12/31 19:52:05 christos Exp $");
#if defined(_KERNEL_OPT)
#include "opt_vnd.h"
@@ -1059,10 +1059,6 @@ vndioctl(dev_t dev, u_long cmd, void *data, int flag, struct lwp *l)
return ENXIO;
vio = (struct vnd_ioctl *)data;
- error = disk_ioctl(&vnd->sc_dkdev, cmd, data, flag, l);
- if (error != EPASSTHROUGH)
- return (error);
-
/* Must be open for writes for these commands... */
switch (cmd) {
case VNDIOCSET:
@@ -1107,6 +1103,11 @@ vndioctl(dev_t dev, u_long cmd, void *data, int flag, struct lwp *l)
return ENXIO;
}
+ error = disk_ioctl(&vnd->sc_dkdev, dev, cmd, data, flag, l);
+ if (error != EPASSTHROUGH)
+ return error;
+
+
switch (cmd) {
#ifdef VNDIOCSET50
case VNDIOCSET50:
@@ -1464,25 +1465,6 @@ unlock_and_exit:
break;
}
- case DIOCGDINFO:
- *(struct disklabel *)data = *(vnd->sc_dkdev.dk_label);
- break;
-
-#ifdef __HAVE_OLD_DISKLABEL
- case ODIOCGDINFO:
- newlabel = *(vnd->sc_dkdev.dk_label);
- if (newlabel.d_npartitions > OLDMAXPARTITIONS)
- return ENOTTY;
- memcpy(data, &newlabel, sizeof (struct olddisklabel));
- break;
-#endif
-
- case DIOCGPART:
- ((struct partinfo *)data)->disklab = vnd->sc_dkdev.dk_label;
- ((struct partinfo *)data)->part =
- &vnd->sc_dkdev.dk_label->d_partitions[DISKPART(dev)];
- break;
-
case DIOCWDINFO:
case DIOCSDINFO:
#ifdef __HAVE_OLD_DISKLABEL
diff --git a/sys/kern/subr_disk.c b/sys/kern/subr_disk.c
index 95d0ef4b90b..7238e8182b4 100644
--- a/sys/kern/subr_disk.c
+++ b/sys/kern/subr_disk.c
@@ -1,4 +1,4 @@
-/* $NetBSD: subr_disk.c,v 1.107 2014/12/31 17:06:49 christos Exp $ */
+/* $NetBSD: subr_disk.c,v 1.108 2014/12/31 19:52:06 christos Exp $ */
/*-
* Copyright (c) 1996, 1997, 1999, 2000, 2009 The NetBSD Foundation, Inc.
@@ -67,7 +67,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: subr_disk.c,v 1.107 2014/12/31 17:06:49 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: subr_disk.c,v 1.108 2014/12/31 19:52:06 christos Exp $");
#include <sys/param.h>
#include <sys/kernel.h>
@@ -488,11 +488,41 @@ convertdisklabel(struct disklabel *lp, void (*strat)(struct buf *),
* Generic disk ioctl handling.
*/
int
-disk_ioctl(struct disk *dk, u_long cmd, void *data, int flag, struct lwp *l)
+disk_ioctl(struct disk *dk, dev_t dev, u_long cmd, void *data, int flag,
+ struct lwp *l)
{
struct dkwedge_info *dkw;
+ struct partinfo *pt;
+#ifdef __HAVE_OLD_DISKLABEL
+ struct disklabel newlabel;
+#endif
switch (cmd) {
+ case DIOCGDINFO:
+ if (dev == 0)
+ return EPASSTHROUGH;
+ memcpy(data, dk->dk_label, sizeof (*dk->dk_label));
+ return 0;
+
+#ifdef __HAVE_OLD_DISKLABEL
+ case ODIOCGDINFO:
+ if (dev == 0)
+ return EPASSTHROUGH;
+ memcpy(&newlabel, dk->dk_label, sizeof(newlabel));
+ if (newlabel.d_npartitions > OLDMAXPARTITIONS)
+ return ENOTTY;
+ memcpy(data, &newlabel, sizeof(struct olddisklabel));
+ return 0;
+#endif
+
+ case DIOCGPART:
+ if (dev == 0)
+ return EPASSTHROUGH;
+ pt = data;
+ pt->disklab = dk->dk_label;
+ pt->part = &dk->dk_label->d_partitions[DISKPART(dev)];
+ return 0;
+
case DIOCAWEDGE:
if ((flag & FWRITE) == 0)
return EBADF;
diff --git a/sys/sys/param.h b/sys/sys/param.h
index 2c3081c9d18..a109f1047e5 100644
--- a/sys/sys/param.h
+++ b/sys/sys/param.h
@@ -1,4 +1,4 @@
-/* $NetBSD: param.h,v 1.463 2014/12/14 23:49:45 chs Exp $ */
+/* $NetBSD: param.h,v 1.464 2014/12/31 19:52:06 christos Exp $ */
/*-
* Copyright (c) 1982, 1986, 1989, 1993
@@ -63,7 +63,7 @@
* 2.99.9 (299000900)
*/
-#define __NetBSD_Version__ 799000300 /* NetBSD 7.99.3 */
+#define __NetBSD_Version__ 799000400 /* NetBSD 7.99.4 */
#define __NetBSD_Prereq__(M,m,p) (((((M) * 100000000) + \
(m) * 1000000) + (p) * 100) <= __NetBSD_Version__)