Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/dev Adapt all disk devices in MI directories to handle O...



details:   https://anonhg.NetBSD.org/src/rev/f988e6eb0a1f
branches:  trunk
changeset: 501798:f988e6eb0a1f
user:      fvdl <fvdl%NetBSD.org@localhost>
date:      Sun Jan 07 18:09:01 2001 +0000

description:
Adapt all disk devices in MI directories to handle ODIOC* calls
for ports that have bumped MAXPARTITIONS (and thus define
__HAVE_OLD_DISKLABEL).

diffstat:

 sys/dev/ata/wd.c                   |  48 ++++++++++++++++++++++++++++--
 sys/dev/ccd.c                      |  56 ++++++++++++++++++++++++++++++++++-
 sys/dev/isa/fd.c                   |  32 +++++++++++++++++++-
 sys/dev/isa/mcd.c                  |  41 +++++++++++++++++++++++++-
 sys/dev/ld.c                       |  43 +++++++++++++++++++++++++-
 sys/dev/mscp/mscp_disk.c           |  49 ++++++++++++++++++++++++++++--
 sys/dev/ofw/ofdisk.c               |  46 +++++++++++++++++++++++++++-
 sys/dev/qbus/rl.c                  |  39 +++++++++++++++++++++++-
 sys/dev/raidframe/rf_netbsdkintf.c |  59 ++++++++++++++++++++++++++++++++++---
 sys/dev/scsipi/cd.c                |  41 +++++++++++++++++++++++++-
 sys/dev/scsipi/sd.c                |  48 ++++++++++++++++++++++++++++-
 sys/dev/vme/xd.c                   |  40 +++++++++++++++++++++++--
 sys/dev/vme/xy.c                   |  38 +++++++++++++++++++++--
 sys/dev/vnd.c                      |  58 +++++++++++++++++++++++++++++++++++-
 14 files changed, 593 insertions(+), 45 deletions(-)

diffs (truncated from 1318 to 300 lines):

diff -r 121ef6295bf5 -r f988e6eb0a1f sys/dev/ata/wd.c
--- a/sys/dev/ata/wd.c  Sun Jan 07 17:55:40 2001 +0000
+++ b/sys/dev/ata/wd.c  Sun Jan 07 18:09:01 2001 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: wd.c,v 1.210 2000/12/14 23:56:18 lukem Exp $ */
+/*     $NetBSD: wd.c,v 1.211 2001/01/07 18:09:01 fvdl Exp $ */
 
 /*
  * Copyright (c) 1998 Manuel Bouyer.  All rights reserved.
@@ -923,6 +923,9 @@
 {
        struct wd_softc *wd = device_lookup(&wd_cd, WDUNIT(dev));
        int error;
+#ifdef __HAVE_OLD_DISKLABEL
+       struct disklabel newlabel;
+#endif
 
        WDCDEBUG_PRINT(("wdioctl\n"), DEBUG_FUNCS);
 
@@ -943,7 +946,15 @@
        case DIOCGDINFO:
                *(struct disklabel *)addr = *(wd->sc_dk.dk_label);
                return 0;
-       
+#ifdef __HAVE_OLD_DISKLABEL
+       case ODIOCGDINFO:
+               newlabel = *(wd->sc_dk.dk_label);
+               if (newlabel.d_npartitions > OLDMAXPARTITIONS)
+                       newlabel.d_npartitions = OLDMAXPARTITIONS;
+               memcpy(addr, &newlabel, sizeof (struct olddisklabel));
+               return 0;
+#endif
+
        case DIOCGPART:
                ((struct partinfo *)addr)->disklab = wd->sc_dk.dk_label;
                ((struct partinfo *)addr)->part =
@@ -952,6 +963,22 @@
        
        case DIOCWDINFO:
        case DIOCSDINFO:
+#ifdef __HAVE_OLD_DISKLABEL
+       case ODIOCWDINFO:
+       case ODIOCSDINFO:
+#endif
+       {
+               struct disklabel *lp;
+
+#ifdef __HAVE_OLD_DISKLABEL
+               if (xfer == ODIOCSDINFO || xfer == ODIOCWDINFO) {
+                       memset(&newlabel, 0, sizeof newlabel);
+                       memcpy(&newlabel, addr, sizeof (struct olddisklabel));
+                       lp = &newlabel;
+               } else
+#endif
+               lp = (struct disklabel *)addr;
+
                if ((flag & FWRITE) == 0)
                        return EBADF;
 
@@ -960,12 +987,16 @@
                wd->sc_flags |= WDF_LABELLING;
 
                error = setdisklabel(wd->sc_dk.dk_label,
-                   (struct disklabel *)addr, /*wd->sc_dk.dk_openmask : */0,
+                   lp, /*wd->sc_dk.dk_openmask : */0,
                    wd->sc_dk.dk_cpulabel);
                if (error == 0) {
                        if (wd->drvp->state > RECAL)
                                wd->drvp->drive_flags |= DRIVE_RESET;
-                       if (xfer == DIOCWDINFO)
+                       if (xfer == DIOCWDINFO
+#ifdef __HAVE_OLD_DISKLABEL
+                           || xfer == ODIOCWDINFO
+#endif
+                           )
                                error = writedisklabel(WDLABELDEV(dev),
                                    wdstrategy, wd->sc_dk.dk_label,
                                    wd->sc_dk.dk_cpulabel);
@@ -974,6 +1005,7 @@
                wd->sc_flags &= ~WDF_LABELLING;
                wdunlock(wd);
                return error;
+       }
 
        case DIOCKLABEL:
                if (*(int *)addr)
@@ -994,6 +1026,14 @@
        case DIOCGDEFLABEL:
                wdgetdefaultlabel(wd, (struct disklabel *)addr);
                return 0;
+#ifdef __HAVE_OLD_DISKLABEL
+       case ODIOCGDEFLABEL:
+               wdgetdefaultlabel(wd, &newlabel);
+               if (newlabel.d_npartitions > OLDMAXPARTITIONS)
+                       newlabel.d_npartitions = OLDMAXPARTITIONS;
+               memcpy(addr, &newlabel, sizeof (struct olddisklabel));
+               return 0;
+#endif
 
 #ifdef notyet
        case DIOCWFORMAT:
diff -r 121ef6295bf5 -r f988e6eb0a1f sys/dev/ccd.c
--- a/sys/dev/ccd.c     Sun Jan 07 17:55:40 2001 +0000
+++ b/sys/dev/ccd.c     Sun Jan 07 18:09:01 2001 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: ccd.c,v 1.69 2000/04/05 04:03:20 enami Exp $   */
+/*     $NetBSD: ccd.c,v 1.70 2001/01/07 18:09:01 fvdl Exp $    */
 
 /*-
  * Copyright (c) 1996, 1997, 1998, 1999 The NetBSD Foundation, Inc.
@@ -957,6 +957,9 @@
        struct ccd_ioctl *ccio = (struct ccd_ioctl *)data;
        char **cpp;
        struct vnode **vpp;
+#ifdef __HAVE_OLD_DISKLABEL
+       struct disklabel newlabel;
+#endif
 
        if (unit >= numccd)
                return (ENXIO);
@@ -968,6 +971,10 @@
        case CCDIOCCLR:
        case DIOCSDINFO:
        case DIOCWDINFO:
+#ifdef __HAVE_OLD_DISKLABEL
+       case ODIOCSDINFO:
+       case ODIOCWDINFO:
+#endif
        case DIOCWLABEL:
                if ((flag & FWRITE) == 0)
                        return (EBADF);
@@ -985,6 +992,12 @@
        case DIOCGPART:
        case DIOCWLABEL:
        case DIOCGDEFLABEL:
+#ifdef __HAVE_OLD_DISKLABEL
+       case ODIOCGDINFO:
+       case ODIOCSDINFO:
+       case ODIOCWDINFO:
+       case ODIOCGDEFLABEL:
+#endif
                if ((cs->sc_flags & CCDF_INITED) == 0) {
                        error = ENXIO;
                        goto out;
@@ -1134,6 +1147,14 @@
        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)
+                       newlabel.d_npartitions = OLDMAXPARTITIONS;
+               memcpy(data, &newlabel, sizeof (struct olddisklabel));
+               break;
+#endif
 
        case DIOCGPART:
                ((struct partinfo *)data)->disklab = cs->sc_dkdev.dk_label;
@@ -1143,12 +1164,31 @@
 
        case DIOCWDINFO:
        case DIOCSDINFO:
+#ifdef __HAVE_OLD_DISKLABEL
+       case ODIOCWDINFO:
+       case ODIOCSDINFO:
+#endif
+       {
+               struct disklabel *lp;
+#ifdef __HAVE_OLD_DISKLABEL
+               if (cmd == ODIOCSDINFO || cmd == ODIOCWDINFO) {
+                       memset(&newlabel, 0, sizeof newlabel);
+                       memcpy(&newlabel, data, sizeof (struct olddisklabel));
+                       lp = &newlabel;
+               } else
+#endif
+               lp = (struct disklabel *)data;
+
                cs->sc_flags |= CCDF_LABELLING;
 
                error = setdisklabel(cs->sc_dkdev.dk_label,
-                   (struct disklabel *)data, 0, cs->sc_dkdev.dk_cpulabel);
+                   lp, 0, cs->sc_dkdev.dk_cpulabel);
                if (error == 0) {
-                       if (cmd == DIOCWDINFO)
+                       if (cmd == DIOCWDINFO
+#ifdef __HAVE_OLD_DISKLABEL
+                           || cmd == ODIOCWDINFO
+#endif
+                          )
                                error = writedisklabel(CCDLABELDEV(dev),
                                    ccdstrategy, cs->sc_dkdev.dk_label,
                                    cs->sc_dkdev.dk_cpulabel);
@@ -1156,6 +1196,7 @@
 
                cs->sc_flags &= ~CCDF_LABELLING;
                break;
+       }
 
        case DIOCWLABEL:
                if (*(int *)data != 0)
@@ -1168,6 +1209,15 @@
                ccdgetdefaultlabel(cs, (struct disklabel *)data);
                break;
 
+#ifdef __HAVE_OLD_DISKLABEL
+       case ODIOCGDEFLABEL:
+               ccdgetdefaultlabel(cs, &newlabel);
+               if (newlabel.d_npartitions > OLDMAXPARTITIONS)
+                       newlabel.d_npartitions = OLDMAXPARTITIONS;
+               memcpy(data, &newlabel, sizeof (struct olddisklabel));
+               break;
+#endif
+
        default:
                error = ENOTTY;
        }
diff -r 121ef6295bf5 -r f988e6eb0a1f sys/dev/isa/fd.c
--- a/sys/dev/isa/fd.c  Sun Jan 07 17:55:40 2001 +0000
+++ b/sys/dev/isa/fd.c  Sun Jan 07 18:09:01 2001 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: fd.c,v 1.10 2000/12/17 07:37:31 jmc Exp $      */
+/*     $NetBSD: fd.c,v 1.11 2001/01/07 18:09:02 fvdl Exp $     */
 
 /*-
  * Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -1300,9 +1300,15 @@
        unsigned int scratch;
        int il[FD_MAX_NSEC + 1];
        register int i, j;
+#ifdef __HAVE_OLD_DISKLABEL
+       struct disklabel newlabel;
+#endif
 
        switch (cmd) {
        case DIOCGDINFO:
+#ifdef __HAVE_OLD_DISKLABEL
+       case ODIOCGDINFO:
+#endif
                memset(&buffer, 0, sizeof(buffer));
 
                buffer.d_secpercyl = fd->sc_type->seccyl;
@@ -1312,6 +1318,13 @@
                if (readdisklabel(dev, fdstrategy, &buffer, NULL) != NULL)
                        return EINVAL;
 
+#ifdef __HAVE_OLD_DISKLABEL
+               if (cmd == ODIOCGDINFO) {
+                       if (buffer.d_npartitions > OLDMAXPARTITIONS)
+                               buffer.d_npartitions = OLDMAXPARTITIONS;
+                       memcpy(addr, &buffer, sizeof (struct olddisklabel));
+               } else
+#endif
                *(struct disklabel *)addr = buffer;
                return 0;
 
@@ -1322,15 +1335,30 @@
                return 0;
 
        case DIOCWDINFO:
+#ifdef __HAVE_OLD_DISKLABEL
+       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
+#endif
+               lp = (struct disklabel *)addr;
 
-               error = setdisklabel(&buffer, (struct disklabel *)addr, 0, NULL);
+               error = setdisklabel(&buffer, lp, 0, NULL);
                if (error)
                        return error;
 
                error = writedisklabel(dev, fdstrategy, &buffer, NULL);
                return error;
+       }
 
        case FDIOCGETFORMAT:
                form_parms = (struct fdformat_parms *)addr;
diff -r 121ef6295bf5 -r f988e6eb0a1f sys/dev/isa/mcd.c
--- a/sys/dev/isa/mcd.c Sun Jan 07 17:55:40 2001 +0000
+++ b/sys/dev/isa/mcd.c Sun Jan 07 18:09:01 2001 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: mcd.c,v 1.67 2000/07/06 02:02:48 thorpej Exp $ */
+/*     $NetBSD: mcd.c,v 1.68 2001/01/07 18:09:01 fvdl Exp $    */
 
 /*
  * Copyright (c) 1993, 1994, 1995 Charles M. Hannum.  All rights reserved.
@@ -600,6 +600,9 @@
        struct mcd_softc *sc = device_lookup(&mcd_cd, MCDUNIT(dev));
        int error;



Home | Main Index | Thread Index | Old Index