Source-Changes-HG archive

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

[src/trunk]: src/distrib/utils/sysinst/arch/shark Garbage-collect the Filecor...



details:   https://anonhg.NetBSD.org/src/rev/3ab105e51bcc
branches:  trunk
changeset: 524936:3ab105e51bcc
user:      thorpej <thorpej%NetBSD.org@localhost>
date:      Tue Apr 02 17:46:20 2002 +0000

description:
Garbage-collect the Filecore stuff, and make /usr the "d" partition
(RAW_PART == "c").

diffstat:

 distrib/utils/sysinst/arch/shark/md.c |  247 ++++-----------------------------
 1 files changed, 35 insertions(+), 212 deletions(-)

diffs (truncated from 347 to 300 lines):

diff -r fa7fc1d4216c -r 3ab105e51bcc distrib/utils/sysinst/arch/shark/md.c
--- a/distrib/utils/sysinst/arch/shark/md.c     Tue Apr 02 17:46:06 2002 +0000
+++ b/distrib/utils/sysinst/arch/shark/md.c     Tue Apr 02 17:46:20 2002 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: md.c,v 1.2 2002/04/02 17:02:54 thorpej Exp $   */
+/*     $NetBSD: md.c,v 1.3 2002/04/02 17:46:20 thorpej Exp $   */
 
 /*
  * Copyright 1997 Piermont Information Systems Inc.
@@ -37,7 +37,7 @@
  *
  */
 
-/* md.c -- arm32 machine specific routines */
+/* md.c -- shark machine specific routines */
 
 #include <stdio.h>
 #include <curses.h>
@@ -52,88 +52,13 @@
 #include "md.h"
 #include "msg_defs.h"
 #include "menu_defs.h"
-void backtowin(void);
 
-static int
-filecore_checksum(u_char *bootblock);
-
-/*
- * static int filecore_checksum(u_char *bootblock)
- *
- * Calculates the filecore boot block checksum. This is used to validate
- * a filecore boot block on the disk.  If a boot block is validated then
- * it is used to locate the partition table. If the boot block is not
- * validated, it is assumed that the whole disk is NetBSD.
- *
- * The basic algorithm is:
- *
- *     for (each byte in block, excluding checksum) {
- *             sum += byte;
- *             if (sum > 255)
- *                     sum -= 255;
- *     }
- *
- * That's equivalent to summing all of the bytes in the block
- * (excluding the checksum byte, of course), then calculating the
- * checksum as "cksum = sum - ((sum - 1) / 255) * 255)".  That
- * expression may or may not yield a faster checksum function,
- * but it's easier to reason about.
- *
- * Note that if you have a block filled with bytes of a single
- * value "X" (regardless of that value!) and calculate the cksum
- * of the block (excluding the checksum byte), you will _always_
- * end up with a checksum of X.  (Do the math; that can be derived
- * from the checksum calculation function!)  That means that
- * blocks which contain bytes which all have the same value will
- * always checksum properly.  That's a _very_ unlikely occurence
- * (probably impossible, actually) for a valid filecore boot block,
- * so we treat such blocks as invalid.
- */
-
-static int
-filecore_checksum(bootblock)
-       u_char *bootblock;
-{  
-       u_char byte0, accum_diff;
-       u_int sum;
-       int i;
- 
-       sum = 0;
-       accum_diff = 0;
-       byte0 = bootblock[0];
- 
-       /*
-        * Sum the contents of the block, keeping track of whether
-        * or not all bytes are the same.  If 'accum_diff' ends up
-        * being zero, all of the bytes are, in fact, the same.
-        */
-       for (i = 0; i < 511; ++i) {
-               sum += bootblock[i];
-               accum_diff |= bootblock[i] ^ byte0;
-       }
-
-       /*
-        * Check to see if the checksum byte is the same as the
-        * rest of the bytes, too.  (Note that if all of the bytes
-        * are the same except the checksum, a checksum compare
-        * won't succeed, but that's not our problem.)
-        */
-       accum_diff |= bootblock[i] ^ byte0;
-
-       /* All bytes in block are the same; call it invalid. */
-       if (accum_diff == 0)
-               return (-1);
-
-       return (sum - ((sum - 1) / 255) * 255);
-}
-
-int    md_get_info (void)
-{      struct disklabel disklabel;
+int
+md_get_info(void)
+{
+       struct disklabel disklabel;
        int fd;
        char devname[100];
-       static char bb[DEV_BSIZE];
-       struct filecore_bootblock *fcbb = (struct filecore_bootblock *)bb;
-       int offset = 0;
 
        if (strncmp(disk->dd_name, "wd", 2) == 0)
                disktype = "ST506";
@@ -154,83 +79,6 @@
                close(fd);
                exit(1);
        }
-
-       if (lseek(fd, (off_t)FILECORE_BOOT_SECTOR * DEV_BSIZE, SEEK_SET) < 0
-           || read(fd, bb, sizeof(bb)) < sizeof(bb)) {
-               endwin();
-               fprintf(stderr, msg_string(MSG_badreadbb));
-               close(fd);
-               exit(1);
-       }
-
-       /* Check if table is valid. */
-       if (filecore_checksum(bb) == fcbb->checksum) {
-               /*
-                * Check for NetBSD/arm32 (RiscBSD) partition marker.
-                * If found the NetBSD disklabel location is easy.
-                */
-
-               offset = (fcbb->partition_cyl_low +
-                   (fcbb->partition_cyl_high << 8)) *
-                   fcbb->heads * fcbb->secspertrack;
-
-               if (fcbb->partition_type == PARTITION_FORMAT_RISCBSD)
-                       ;
-               else if (fcbb->partition_type == PARTITION_FORMAT_RISCIX) {
-                       /*
-                        * Ok we need to read the RISCiX partition table and
-                        * search for a partition named RiscBSD, NetBSD or
-                        * Empty:
-                        */
-
-                       struct riscix_partition_table *riscix_part =
-                           (struct riscix_partition_table *)bb;
-                       struct riscix_partition *part;
-                       int loop;
-
-                       if (lseek(fd, (off_t)offset * DEV_BSIZE, SEEK_SET) < 0
-                           || read(fd, bb, sizeof(bb)) < sizeof(bb)) {
-                               endwin();
-                               fprintf(stderr, msg_string(MSG_badreadriscix));
-                               close(fd);
-                               exit(1);
-                       }
-
-                       /* Break out as soon as we find a suitable partition */
-                       for (loop = 0; loop < NRISCIX_PARTITIONS; ++loop) {
-                               part = &riscix_part->partitions[loop];
-                               if (strcmp(part->rp_name, "RiscBSD") == 0
-                                   || strcmp(part->rp_name, "NetBSD") == 0
-                                   || strcmp(part->rp_name, "Empty:") == 0) {
-                                       offset = part->rp_start;
-                                       break;
-                               }
-                       }
-                       if (loop == NRISCIX_PARTITIONS) {
-                               /*
-                                * Valid filecore boot block, RISCiX partition
-                                * table but no NetBSD partition. We should
-                                * leave this disc alone.
-                                */
-                               endwin();
-                               fprintf(stderr, msg_string(MSG_notnetbsdriscix));
-                               close(fd);
-                               exit(1);
-                       }
-               } else {
-                       /*
-                        * Valid filecore boot block and no non-ADFS partition.
-                        * This means that the whole disc is allocated for ADFS 
-                        * so do not trash ! If the user really wants to put a
-                        * NetBSD disklabel on the disc then they should remove
-                        * the filecore boot block first with dd.
-                        */
-                       endwin();
-                       fprintf(stderr, msg_string(MSG_notnetbsd));
-                       close(fd);
-                       exit(1);
-               }
-       }
        close(fd);
  
        dlcyl = disklabel.d_ncylinders;
@@ -252,49 +100,35 @@
        /* Compute minimum NetBSD partition sizes (in sectors). */
        minfsdmb = (80 + 4*rammb) * (MEG / sectorsize);
 
-       ptstart = offset;
-/*     endwin();
-       printf("dlcyl=%d\n", dlcyl);
-       printf("dlhead=%d\n", dlhead);
-       printf("dlsec=%d\n", dlsec);
-       printf("secsz=%d\n", sectorsize);
-       printf("cylsz=%d\n", dlcylsize);
-       printf("dlsz=%d\n", dlsize);
-       printf("pstart=%d\n", ptstart);
-       printf("pstart=%d\n", partsize);
-       printf("secpun=%d\n", disklabel.d_secperunit);
-       backtowin();*/
-
        return 1;
 }
 
-int    md_pre_disklabel (void)
+int
+md_pre_disklabel(void)
+{
+       return 0;
+}
+
+int
+md_post_disklabel(void)
 {
        return 0;
 }
 
-int    md_post_disklabel (void)
+int
+md_post_newfs(void)
 {
        return 0;
 }
 
-int    md_post_newfs (void)
-{
-#if 0
-       /* XXX boot blocks ... */
-       printf(msg_string(MSG_dobootblks), diskdev);
-       run_prog(RUN_DISPLAY, NULL, "/sbin/disklabel -B %s /dev/r%sc",
-           "-b /usr/mdec/rzboot -s /usr/mdec/bootrz", diskdev);
-#endif
-       return 0;
-}
-
-int    md_copy_filesystem (void)
+int
+md_copy_filesystem(void)
 {
        return 0;
 }
 
-int md_make_bsd_partitions (void)
+int
+md_make_bsd_partitions(void)
 {
        int i, part;
        int remain;
@@ -310,14 +144,6 @@
        fsptsize = dlsize - ptstart;    /* netbsd partition -- same as above */
        fsdmb = fsdsize / MEG;
 
-/*     endwin();
-       printf("ptsize=%d\n", ptsize);
-       printf("fsdsize=%d\n", fsdsize);
-       printf("fsptsize=%d\n", fsptsize);
-       printf("fsdmb=%d\n", fsdmb);
-       backtowin();*/
-
-/*editlab:*/
        /* Ask for layout type -- standard or special */
        msg_display (MSG_layout,
                        (1.0*fsptsize*sectorsize)/MEG,
@@ -344,21 +170,17 @@
        /* Standard fstypes */
        bsdlabel[A].pi_fstype = FS_BSDFFS;
        bsdlabel[B].pi_fstype = FS_SWAP;
-       /* Conventionally, C is whole disk and D in the non NetBSD bit */
-       bsdlabel[D].pi_fstype = FS_UNUSED;
-       bsdlabel[D].pi_offset = 0;
-       bsdlabel[D].pi_size   = ptstart;
-/*     if (ptstart > 0)
-               bsdlabel[D].pi_fstype = T_FILECORE;*/
-       bsdlabel[E].pi_fstype = FS_UNUSED;      /* fill out below */
+       /* Conventionally, C is whole disk */
+       bsdlabel[D].pi_fstype = FS_UNUSED;      /* fill out below */
+       bsdlabel[E].pi_fstype = FS_UNUSED;
        bsdlabel[F].pi_fstype = FS_UNUSED;
        bsdlabel[G].pi_fstype = FS_UNUSED;
        bsdlabel[H].pi_fstype = FS_UNUSED;
 
 
        switch (layoutkind) {
-       case 1: /* standard: a root, b swap, c/d "unused", e /usr */
-       case 2: /* standard X: a root, b swap (big), c/d "unused", e /usr */
+       case 1: /* standard: a root, b swap, c "unused", d /usr */
+       case 2: /* standard X: a root, b swap (big), c "unused", d /usr */
                partstart = ptstart;
 



Home | Main Index | Thread Index | Old Index