Source-Changes-HG archive

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

[src/trunk]: src/sys/arch/sh5 Pick up sh3's disksubr.c instead of maintaining...



details:   https://anonhg.NetBSD.org/src/rev/493e35bc2003
branches:  trunk
changeset: 537730:493e35bc2003
user:      scw <scw%NetBSD.org@localhost>
date:      Sat Oct 05 09:51:17 2002 +0000

description:
Pick up sh3's disksubr.c instead of maintaining an identical copy locally.
This allows the two architectures to share disklabels.

diffstat:

 sys/arch/sh5/conf/files.sh5 |    8 +-
 sys/arch/sh5/sh5/disksubr.c |  603 --------------------------------------------
 2 files changed, 5 insertions(+), 606 deletions(-)

diffs (truncated from 641 to 300 lines):

diff -r 4a8f6886cb43 -r 493e35bc2003 sys/arch/sh5/conf/files.sh5
--- a/sys/arch/sh5/conf/files.sh5       Sat Oct 05 08:23:32 2002 +0000
+++ b/sys/arch/sh5/conf/files.sh5       Sat Oct 05 09:51:17 2002 +0000
@@ -1,4 +1,4 @@
-#      $NetBSD: files.sh5,v 1.7 2002/09/28 13:08:22 scw Exp $
+#      $NetBSD: files.sh5,v 1.8 2002/10/05 09:51:17 scw Exp $
 
 
 #
@@ -121,12 +121,12 @@
 file   arch/sh5/sh5/db_interface.c             ddb
 file   arch/sh5/sh5/db_memrw.c                 ddb
 file   arch/sh5/sh5/db_trace.c                 ddb
-file   arch/sh5/sh5/disksubr.c
 file   arch/sh5/sh5/dtf_comms.c                dtfcons
 file   arch/sh5/sh5/interrupt.c
 file   arch/sh5/sh5/mem.c
 file   arch/sh5/sh5/pmap.c
 file   arch/sh5/sh5/process_machdep.c
+file   arch/sh5/sh5/procfs_machdep.c           procfs
 file   arch/sh5/sh5/sh5_clock.c
 file   arch/sh5/sh5/sh5_machdep.c
 file   arch/sh5/sh5/sig_machdep.c
@@ -138,7 +138,9 @@
 file   dev/cons.c
 file   dev/cninit.c
 
-file   arch/sh5/sh5/procfs_machdep.c           procfs
+# Use SH3's disklabel code, so disks are interchangeable between
+# the two architectures.
+file   arch/sh3/sh3/disksubr.c
 
 file   arch/sh5/sh5/in_cksum.c                 inet
 file   netinet/in4_cksum.c                     inet
diff -r 4a8f6886cb43 -r 493e35bc2003 sys/arch/sh5/sh5/disksubr.c
--- a/sys/arch/sh5/sh5/disksubr.c       Sat Oct 05 08:23:32 2002 +0000
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,603 +0,0 @@
-/*     $NetBSD: disksubr.c,v 1.1 2002/07/05 13:32:04 scw Exp $ */
-
-/*
- * Copyright (c) 1982, 1986, 1988 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *     @(#)ufs_disksubr.c      7.16 (Berkeley) 5/4/91
- */
-
-/*
- * This is the same disksubr.c as found on the sh3 port so disks
- * should be interchangeable between the two ports.
- */
-
-#include "opt_mbr.h"
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/buf.h>
-#include <sys/disklabel.h>
-#include <sys/syslog.h>
-
-#include <machine/bswap.h>
-
-static int fat_types[] = { MBR_PTYPE_FAT12, MBR_PTYPE_FAT16S,
-                          MBR_PTYPE_FAT16B, MBR_PTYPE_FAT32,
-                          MBR_PTYPE_FAT32L, MBR_PTYPE_FAT16L,
-                          -1 };
-
-#define        NO_MBR_SIGNATURE ((struct mbr_partition *) -1)
-
-static void change_endian_disk_label(struct disklabel *);
-static u_int sh5_dkcksum(struct disklabel *);
-static struct mbr_partition *mbr_findslice(struct mbr_partition *,
-    struct buf *);
-
-static void
-change_endian_disk_label(struct disklabel *lp)
-{
-       int i;
-       u_int16_t d;
-       /* u_int8_t t; */
-#define        SW16(X) lp->X = bswap16(lp->X)
-#define        SW32(X) lp->X = bswap32(lp->X)
-
-       SW32(d_magic);
-       SW16(d_type);
-       SW16(d_subtype);
-
-       for (i = 0; i < sizeof(lp->d_typename); i += 2) {
-               d = *(u_int16_t *)&lp->d_typename[i];
-               *(u_int16_t *)&lp->d_typename[i] = bswap16(d);
-       }
-
-       for (i = 0; i < sizeof(lp->d_un); i += 2) {
-               d = *(u_int16_t *)&lp->d_un.un_d_packname[i];
-               *(u_int16_t *)&lp->d_un.un_d_packname[i] = bswap16(d);
-       }
-
-       SW32(d_secsize);
-       SW32(d_nsectors);
-       SW32(d_ntracks);
-       SW32(d_ncylinders);
-       SW32(d_secpercyl);
-       SW32(d_secperunit);
-
-       SW16(d_sparespertrack);
-       SW16(d_sparespercyl);
-
-       SW32(d_acylinders);
-
-       SW16(d_rpm);
-       SW16(d_interleave);
-       SW16(d_trackskew);              /* sector 0 skew, per track */
-       SW16(d_cylskew);                /* sector 0 skew, per cylinder */
-       SW32(d_headswitch);             /* head switch time, usec */
-       SW32(d_trkseek);                /* track-to-track seek, usec */
-       SW32(d_flags);                  /* generic flags */
-
-       for (i = 0; i < NDDATA; i++)
-               SW32(d_drivedata[i]);   /* drive-type specific information */
-
-       for (i = 0; i < NSPARE; i++)
-               SW32 (d_spare[i]);      /* reserved for future use */
-
-       SW32(d_magic2);                 /* the magic number (again) */
-       SW16(d_checksum);               /* xor of data incl. partitions */
-
-       /* filesystem and partition information: */
-       SW16(d_npartitions);    /* number of partitions in following */
-       SW32(d_bbsize);         /* size of boot area at sn0, bytes */
-       SW32(d_sbsize);         /* max size of fs superblock, bytes */
-
-       for (i = 0; i < MAXPARTITIONS; i++) {
-               SW32(d_partitions[i].p_size);
-               SW32(d_partitions[i].p_offset);
-               SW32(d_partitions[i].p_fsize);
-#if 0
-               t = lp->d_partitions[i].p_fstype;
-               lp->d_partitions[i].p_fstype =
-                   lp->d_partitions[i].p_frag;
-               lp->d_partitions[i].p_frag = t;
-#endif
-               SW16(d_partitions[i].__partition_u1.cpg);
-#if 0
-               printf("size,offset,fsize,fstype,frag=[%x,%x,%x,%x,%x]\n",
-                   lp->d_partitions[i].p_size,
-                   lp->d_partitions[i].p_offset,
-                   lp->d_partitions[i].p_fsize,
-                   lp->d_partitions[i].p_fstype,
-                   lp->d_partitions[i].p_frag);
-#endif
-       }
-};
-
-
-/*
- * Scan MBR for  NetBSD partittion.  Return NO_MBR_SIGNATURE if no MBR found
- * Otherwise, copy valid MBR partition-table into dp, and if a NetBSD
- * partition is found, return a pointer to it; else return  NULL.
- */
-static struct mbr_partition *
-mbr_findslice(struct mbr_partition *dp, struct buf *bp)
-{
-       struct mbr_partition *ourdp = NULL;
-       u_int16_t *mbrmagicp;
-       int i;
-
-       /* Note: Magic number is little-endian. */
-       mbrmagicp = (u_int16_t *)(bp->b_data + MBR_MAGICOFF);
-       if (*mbrmagicp != MBR_MAGIC)
-               return (NO_MBR_SIGNATURE);
-
-       /* XXX how do we check veracity/bounds of this? */
-       memcpy(dp, bp->b_data + MBR_PARTOFF, NMBRPART * sizeof(*dp));
-
-       /* look for NetBSD partition */
-       for (i = 0; i < NMBRPART; i++) {
-               if (dp[i].mbrp_typ == MBR_PTYPE_NETBSD) {
-                       ourdp = &dp[i];
-                       break;
-               }
-       }
-
-       return (ourdp);
-}
-
-
-/*
- * Attempt to read a disk label from a device
- * using the indicated strategy routine.
- * The label must be partly set up before this:
- * secpercyl, secsize and anything required for a block i/o read
- * operation in the driver's strategy/start routines
- * must be filled in before calling us.
- *
- * If dos partition table requested, attempt to load it and
- * find disklabel inside a DOS partition. Also, if bad block
- * table needed, attempt to extract it as well. Return buffer
- * for use in signalling errors if requested.
- *
- * Returns null on success and an error string on failure.
- */
-char *
-readdisklabel(dev_t dev, void (*strat)(struct buf *), struct disklabel *lp,
-    struct cpu_disklabel *osdep)
-{
-       struct mbr_partition *dp;
-       struct partition *pp;
-       struct dkbad *bdp;
-       struct buf *bp;
-       struct disklabel *dlp;
-       char *msg = NULL;
-       int dospartoff, cyl, i, *ip;
-       static struct disklabel dls;
-
-       /* minimal requirements for archtypal disk label */
-       if (lp->d_secsize == 0)
-               lp->d_secsize = DEV_BSIZE;
-       if (lp->d_secperunit == 0)
-               lp->d_secperunit = 0x1fffffff;
-#if 0
-       if (lp->d_ncylinders == 16383) {
-               printf("disklabel: Disk > 8G ... readjusting chs %d/%d/%d to ",
-                   lp->d_ncylinders, lp->d_ntracks, lp->d_nsectors);
-               lp->d_ncylinders = lp->d_secperunit /  lp->d_ntracks / lp->d_nsectors;
-               printf("%d/%d/%d\n",
-                   lp->d_ncylinders, lp->d_ntracks, lp->d_nsectors);
-       }
-#endif
-       lp->d_npartitions = RAW_PART + 1;
-       for (i = 0; i < RAW_PART; i++) {
-               lp->d_partitions[i].p_size = 0;
-               lp->d_partitions[i].p_offset = 0;
-       }
-       if (lp->d_partitions[i].p_size == 0)
-               lp->d_partitions[i].p_size = 0x1fffffff;
-       lp->d_partitions[i].p_offset = 0;
-
-       /* get a buffer and initialize it */
-       bp = geteblk((int)lp->d_secsize);
-       bp->b_dev = dev;
-
-       /* do dos partitions in the process of getting disklabel? */
-       dospartoff = 0;
-       cyl = LABELSECTOR / lp->d_secpercyl;
-       if (!osdep)
-               goto nombrpart;
-       dp = osdep->dosparts;
-
-       /* read master boot record */
-       bp->b_blkno = MBR_BBSECTOR;
-       bp->b_bcount = lp->d_secsize;
-       bp->b_flags |= B_READ;
-       bp->b_cylinder = MBR_BBSECTOR / lp->d_secpercyl;
-       (*strat)(bp);
-
-       /* if successful, wander through dos partition table */
-       if (biowait(bp)) {
-               msg = "dos partition I/O error";
-               goto done;
-       } else {
-               struct mbr_partition *ourdp = NULL;
-
-               ourdp = mbr_findslice(dp, bp);
-               if (ourdp ==  NO_MBR_SIGNATURE)
-                       goto nombrpart;
-
-               for (i = 0; i < NMBRPART; i++, dp++) {
-                       /* Install in partition e, f, g, or h. */
-                       pp = &lp->d_partitions[RAW_PART + 1 + i];
-                       pp->p_offset = dp->mbrp_start;
-                       pp->p_size = dp->mbrp_size;
-                       for (ip = fat_types; *ip != -1; ip++) {



Home | Main Index | Thread Index | Old Index