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