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