update from netbsd
authorderaadt <deraadt@openbsd.org>
Thu, 18 Jan 1996 01:44:38 +0000 (01:44 +0000)
committerderaadt <deraadt@openbsd.org>
Thu, 18 Jan 1996 01:44:38 +0000 (01:44 +0000)
sys/arch/atari/stand/tostools/aptck/Makefile
sys/arch/atari/stand/tostools/aptck/ahdilbl.h [new file with mode: 0644]
sys/arch/atari/stand/tostools/aptck/diskio.c
sys/arch/atari/stand/tostools/aptck/disklabel.c [deleted file]
sys/arch/atari/stand/tostools/aptck/disklabel.h [deleted file]
sys/arch/atari/stand/tostools/aptck/disklbl.c [new file with mode: 0644]
sys/arch/atari/stand/tostools/aptck/disklbl.h [new file with mode: 0644]
sys/arch/atari/stand/tostools/aptck/setrev.awk [new file with mode: 0644]
sys/arch/atari/stand/tostools/aptck/setversion [deleted file]

index baf781f..63dac91 100644 (file)
@@ -1,17 +1,17 @@
-#      $NetBSD: Makefile,v 1.1.1.1 1996/01/07 21:54:16 leo Exp $
+#      $NetBSD: Makefile,v 1.2 1996/01/16 15:14:53 leo Exp $
 
 PROG   = aptck.ttp
 
-OBJS   = aptck.o biosrw.o diskio.o disklabel.o
-HEADERS        = aptck.h disklabel.h
+OBJS   = aptck.o biosrw.o diskio.o disklbl.o
+HEADERS        = aptck.h ahdilbl.h disklbl.h
 
 LIBS   = -lxhdi
 CLEAN  = aptck.c
 
 include ../Makefile.inc
 
-aptck.c: aptck.in biosrw.s diskio.c disklabel.c
-       ${AWK} -f ./setversion $^ > aptck.c
+aptck.c: aptck.in biosrw.s diskio.c disklbl.c
+       ${AWK} -f ./setrev.awk $^ > aptck.c
 
 ${PROG}: ${OBJS} ${LDADD}
        ${CC} ${LDFLAGS} -o $@ ${OBJS} ${LDADD} ${LIBS}
diff --git a/sys/arch/atari/stand/tostools/aptck/ahdilbl.h b/sys/arch/atari/stand/tostools/aptck/ahdilbl.h
new file mode 100644 (file)
index 0000000..dc9c134
--- /dev/null
@@ -0,0 +1,116 @@
+/*     $NetBSD: ahdilbl.h,v 1.1 1996/01/16 15:15:06 leo Exp $  */
+
+/*
+ * Copyright (c) 1995 Leo Weppelman.
+ * 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 Leo Weppelman.
+ * 4. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+ */
+
+#ifndef AHDILABEL_H
+#define AHDILABEL_H
+
+/***** from src/sys/arch/atari/include/disklabel.h *************************/
+
+/*
+ * On a volume, exclusively used by NetBSD, the boot block starts at
+ * sector 0. To allow shared use of a volume between two or more OS's
+ * the vendor specific AHDI format is supported. In this case the boot
+ * block is located at the start of an AHDI partition. In any case the
+ * size of the boot block must be at least 8KB.
+ */
+#define        BBMINSIZE       8192            /* minimum size of boot block      */
+#define        LABELSECTOR     0               /* `natural' start of boot block   */
+#define        LABELOFFSET     512             /* offset of disk label in bytes,
+                                          relative to start of boot block */
+#define        LABELMAXSIZE    1024            /* maximum size of disk label      */
+
+#define        MAXPARTITIONS   16              /* max. # of NetBSD partitions     */
+#define        RAW_PART        2               /* xx?c is raw partition           */
+
+#define        NO_BOOT_BLOCK   ((u_int)-1)
+#define        MAXAUXROOTS     29              /* max. # of auxilary root sectors */
+
+struct bootblock {
+       u_int8_t        bb_xxboot[LABELOFFSET]; /* first-stage boot loader */
+       u_int8_t        bb_dlabel[LABELMAXSIZE];/* disk pack label         */
+       u_int8_t        bb_bootxx[BBMINSIZE - (LABELOFFSET + LABELMAXSIZE)];
+                                               /* second-stage boot loader*/
+};
+
+#define        BBGETLABEL(bb, dl)      *(dl) = *((struct disklabel *)(bb)->bb_dlabel)
+#define        BBSETLABEL(bb, dl)      *((struct disklabel *)(bb)->bb_dlabel) = *(dl)
+
+/***** from src/sys/arch/atari/include/ahdilabel.h *************************/
+
+#define        AHDI_BSIZE      512             /* AHDI blocksize               */
+#define        AHDI_BBLOCK     0               /* AHDI bootblock (root sector) */
+#define        AHDI_MAXROOTS   (MAXAUXROOTS)   /* max. # of AHDI rootsectors   */
+#define        AHDI_MAXPARTS   (AHDI_MAXROOTS+3) /* max. # of AHDI partitions  */
+
+/*
+ * Various `well known' AHDI partition identifiers.
+ */
+#define        AHDI_MKPID(x,y,z)       (   ((u_int32_t)(x) << 16)      \
+                                 | ((u_int32_t)(y) << 8)       \
+                                 | ((u_int32_t)(z))            \
+                               )
+#define        AHDI_PID_XGM    AHDI_MKPID('X','G','M')
+#define        AHDI_PID_GEM    AHDI_MKPID('G','E','M')
+#define        AHDI_PID_BGM    AHDI_MKPID('B','G','M')
+#define        AHDI_PID_RAW    AHDI_MKPID('R','A','W')
+#define        AHDI_PID_SWP    AHDI_MKPID('S','W','P')
+#define        AHDI_PID_NBD    AHDI_MKPID('N','B','D')
+#define        AHDI_PID_NBR    AHDI_MKPID('N','B','R')
+#define        AHDI_PID_NBS    AHDI_MKPID('N','B','S')
+#define        AHDI_PID_NBU    AHDI_MKPID('N','B','U')
+
+/*
+ * Format of AHDI boot block.
+ */
+#define        AHDI_MAXRPD     4               /* max. # of partition descriptors */
+                                       /* in the AHDI bootblock (aka root)*/
+#define        AHDI_MAXARPD    2               /* max. # of partition descriptors */
+                                       /* in an AHDI auxilary root sector */
+
+struct ahdi_part {
+       u_int8_t        ap_flg;         /* bit 0 is in-use flag            */
+       u_int8_t        ap_id[3];       /* id: GEM, BGM, XGM, UNX, MIX     */
+       u_int32_t       ap_offs;        /* block where partition starts    */
+       u_int32_t       ap_size;        /* partition size in blocks        */
+#define        ap_end  ap_size /* in the in-core copy, store end instead of size  */
+};
+
+struct ahdi_root {
+       u_int8_t         ar_fill[0x1c2];/* filler, can be boot code        */
+       u_int32_t        ar_hdsize;     /* size of entire volume in blocks */
+       struct ahdi_part ar_parts[AHDI_MAXRPD]; /* root partition table    */
+       u_int32_t        ar_bslst;      /* start of bad-sector list        */
+       u_int32_t        ar_bslsize;    /* # of blocks in bad-sector list  */
+       u_int16_t        ar_cksum;
+};
+
+#endif /* AHDILABEL_H */
index db7397c..17038b2 100644 (file)
@@ -1,4 +1,4 @@
-/*     $NetBSD: diskio.c,v 1.1.1.1 1996/01/07 21:54:16 leo Exp $       */
+/*     $NetBSD: diskio.c,v 1.2 1996/01/16 15:15:16 leo Exp $   */
 
 /*
  * Copyright (c) 1995 Waldi Ravens.
@@ -38,7 +38,7 @@
 #include <xhdi.h>
 #include "libtos.h"
 #include "aptck.h"
-#include "disklabel.h"
+#include "ahdilbl.h"
 #include <osbind.h>
 
 struct pun_info {
diff --git a/sys/arch/atari/stand/tostools/aptck/disklabel.c b/sys/arch/atari/stand/tostools/aptck/disklabel.c
deleted file mode 100644 (file)
index e30b49b..0000000
+++ /dev/null
@@ -1,343 +0,0 @@
-/*     $NetBSD: disklabel.c,v 1.1.1.1 1996/01/07 21:54:16 leo Exp $    */
-
-/*
- * Copyright (c) 1995 Waldi Ravens.
- * 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 Waldi Ravens.
- * 4. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
- */
-
-#include <sys/types.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include "libtos.h"
-#include "aptck.h"
-#include "disklabel.h"
-
-static int     dkcksum    PROTO((struct disklabel *));
-static int     bsd_label  PROTO((disk_t *, u_int));
-static int     ahdi_label PROTO((disk_t *));
-static int     ahdi_display PROTO((disk_t *));
-static u_int   ahdi_getparts PROTO((disk_t *, u_int, u_int));
-
-int
-readdisklabel(dd)
-       disk_t  *dd;
-{
-       int     e;
-
-       printf("Device     : %s (%s) [%s]\n", dd->sname, dd->fname, dd->product);
-       printf("Medium size: %lu sectors\n", (u_long)dd->msize);
-       printf("Sector size: %lu bytes\n\n", (u_long)dd->bsize);
-
-       e = bsd_label(dd, LABELSECTOR);
-       if (e < 0) {
-               printf("Device I/O error (hardware problem?)\n\n");
-               return(-1);
-       }
-       if (!e) {
-               printf("NetBSD/Atari format, boot block: "
-                      "sector %u labeloffset %u\n\n",
-                      dd->bblock, dd->lblofs);
-               return(0);
-       }
-
-       e = ahdi_label(dd);
-       if (e < 0) {
-               printf("Device I/O error (hardware problem?)\n\n");
-               return(-1);
-       }
-       if (!e) {
-               printf("AHDI format, NetBSD boot block: ");
-               if (dd->bblock != NO_BOOT_BLOCK)
-                       printf("sector %u labeloffset %u\n\n",
-                              dd->bblock, dd->lblofs);
-               else printf("none\n\n");
-               return(0);
-       }
-
-       printf("Unknown label format.\n\n");
-       return(-1);
-}
-
-static int
-bsd_label(dd, offset)
-       disk_t          *dd;
-       u_int           offset;
-{
-       u_char          *bblk;
-       u_int           nsec;
-       int             rv;
-
-       nsec = (BBSIZE + (dd->bsize - 1)) / dd->bsize;
-       bblk = disk_read(dd, offset, nsec);
-       if (bblk) {
-               u_short *end, *p;
-               
-               end = (u_short *)&bblk[BBSIZE - sizeof(struct disklabel)];
-               rv = 1;
-               for (p = (u_short *)bblk; p < end; ++p) {
-                       struct disklabel *dl = (struct disklabel *)p;
-                       if (dl->d_magic == DISKMAGIC && dl->d_magic2 == DISKMAGIC
-                           && dl->d_npartitions <= MAXPARTITIONS && !dkcksum(dl)) {
-                               dd->lblofs = (u_char *)p - bblk;
-                               dd->bblock = offset;
-                               rv = 0;
-                               break;
-                       }
-               }
-               free(bblk);
-       }
-       else rv = -1;
-
-       return(rv);
-}
-
-static int
-dkcksum(dl)
-       struct disklabel *dl;
-{
-       u_short *start, *end, sum = 0;
-
-       start = (u_short *)dl;
-       end   = (u_short *)&dl->d_partitions[dl->d_npartitions];
-       while (start < end)
-               sum ^= *start++;
-       return(sum);
-}
-
-int
-ahdi_label(dd)
-       disk_t  *dd;
-{
-       u_int   i;
-       int     e;
-
-       /*
-        * The AHDI format requires a specific block size.
-        */
-       if (dd->bsize != AHDI_BSIZE)
-               return(1);
-
-       /*
-        * Fetch the AHDI partition descriptors.
-        */
-       i = ahdi_getparts(dd, AHDI_BBLOCK, AHDI_BBLOCK);
-       if (i) {
-               if (i < dd->msize)
-                       return(-1);     /* disk read error              */
-               else return(1);         /* reading past end of medium   */
-       }
-
-       /*
-        * Display and perform sanity checks.
-        */
-       i = ahdi_display(dd);
-       if (i)
-               return(i);
-
-       /*
-        * Search for a NetBSD disk label
-        */
-       dd->bblock = NO_BOOT_BLOCK;
-       for (i = 0; i < dd->nparts; ++i) {
-               part_t  *pd = &dd->parts[i];
-               u_int   id  = *((u_int32_t *)&pd->id) >> 8;
-               if (id == AHDI_PID_NBD || id == AHDI_PID_RAW) {
-                       u_int   offs = pd->start;
-                       if ((e = bsd_label(dd, offs)) < 0) {
-                               return(e);              /* I/O error */
-                       }
-                       if (!e) {
-                               dd->bblock = offs;      /* got it */
-                               return(0);
-                       }
-                       if (id == AHDI_PID_NBD && dd->bblock == NO_BOOT_BLOCK)
-                               dd->bblock = offs;
-               }
-       }
-       return(0);
-}
-
-static int
-root_cmp(x1, x2)
-       const void      *x1, *x2;
-{
-       const u_int     *r1 = x1,
-                       *r2 = x2;
-
-       if (*r1 < *r2)
-               return(-1);
-       if (*r1 > *r2)
-               return(1);
-       return(0);
-}
-
-static int
-part_cmp(x1, x2)
-       const void      *x1, *x2;
-{
-       const part_t    *p1 = x1,
-                       *p2 = x2;
-
-       if (p1->start < p2->start)
-               return(-1);
-       if (p1->start > p2->start)
-               return(1);
-       if (p1->end < p2->end)
-               return(-1);
-       if (p1->end > p2->end)
-               return(1);
-       if (p1->rsec < p2->rsec)
-               return(-1);
-       if (p1->rsec > p2->rsec)
-               return(1);
-       if (p1->rent < p2->rent)
-               return(-1);
-       if (p1->rent > p2->rent)
-               return(1);
-       return(0);
-}
-
-static int
-ahdi_display(dd)
-       disk_t  *dd;
-{
-       int     i, j, rv = 0;
-
-       printf("Start of bad sector list : %u\n", dd->bslst);
-       if (dd->bslst == 0) {
-               printf("* Illegal value (zero) *\n"); rv = 1;
-       }
-       printf("End of bad sector list   : %u\n", dd->bslend);
-       if (dd->bslend == 0) {
-               printf("* Illegal value (zero) *\n"); rv = 1;
-       }
-       printf("Medium size (in root sec): %u\n", dd->hdsize);
-       if (dd->hdsize == 0) {
-               printf("* Illegal value (zero) *\n"); rv = 1;
-       }
-
-       qsort(dd->roots, dd->nroots, sizeof *dd->roots, root_cmp);
-       qsort(dd->parts, dd->nparts, sizeof *dd->parts, part_cmp);
-       printf("\n    root  desc   id     start       end    MBs\n");
-
-       for (i = 0; i < dd->nparts; ++i) {
-               part_t  *p1 = &dd->parts[i];
-               u_int   megs = p1->end - p1->start + 1,
-                       blpm = (1024 * 1024) / dd->bsize;
-               megs = (megs + (blpm >> 1)) / blpm;
-               printf("%8u  %4u  %s  %8u  %8u  (%3u)\n",
-                       p1->rsec, p1->rent, p1->id,
-                       p1->start, p1->end, megs);
-               for (j = 0; j < dd->nroots; ++j) {
-                       u_int   aux = dd->roots[j];
-                       if (aux >= p1->start && aux <= p1->end) {
-                               printf("FATAL: auxilary root at %u\n", aux); rv = 1;
-                       }
-               }
-               for (j = i; j--;) {
-                       part_t  *p2 = &dd->parts[j];
-                       if (p1->start >= p2->start && p1->start <= p2->end) {
-                               printf("FATAL: clash with %u/%u\n", p2->rsec, p2->rent); rv = 1;
-                       }
-                       if (p2->start >= p1->start && p2->start <= p1->end) {
-                               printf("FATAL: clash with %u/%u\n", p2->rsec, p2->rent); rv = 1;
-                       }
-               }
-               if (p1->start >= dd->bslst && p1->start <= dd->bslend) {
-                       printf("FATAL: partition overlaps with bad sector list\n"); rv = 1;
-               }
-               if (dd->bslst >= p1->start && dd->bslst <= p1->end) {
-                       printf("FATAL: partition overlaps with bad sector list\n"); rv = 1;
-               }
-       }
-
-       printf("\nTotal number of auxilary roots: %u\n", dd->nroots);
-       printf("Total number of partitions    : %u\n", dd->nparts);
-       if (dd->nparts == 0) {
-               printf("* Weird # of partitions (zero) *\n"); rv = 1;
-       }
-       if (dd->nparts > AHDI_MAXPARTS) {
-               printf("* Too many AHDI partitions for NetBSD *\n");
-               printf("  Increase MAXAUXROOTS in machine/disklabel.h,\n");
-               printf("  then recompile the NetBSD kernel.\n");
-               rv = -1;
-       }
-       return(rv);
-}
-
-static u_int
-ahdi_getparts(dd, rsec, esec)
-       disk_t                  *dd;
-       u_int                   rsec,
-                               esec;
-{
-       struct ahdi_part        *part, *end;
-       struct ahdi_root        *root;
-       u_int                   rv;
-
-       root = disk_read(dd, rsec, 1);
-       if (!root) {
-               rv = rsec + (rsec == 0);
-               goto done;
-       }
-
-       if (rsec == AHDI_BBLOCK)
-               end = &root->ar_parts[AHDI_MAXRPD];
-       else end = &root->ar_parts[AHDI_MAXARPD];
-       for (part = root->ar_parts; part < end; ++part) {
-               u_int   id = *((u_int32_t *)&part->ap_flg);
-               if (!(id & 0x01000000))
-                       continue;
-               if ((id &= 0x00ffffff) == AHDI_PID_XGM) {
-                       u_int   offs = part->ap_offs + esec;
-                       u_int   i = ++dd->nroots;
-                       dd->roots = xrealloc(dd->roots, i * sizeof *dd->roots);
-                       dd->roots[--i] = offs;
-                       rv = ahdi_getparts(dd, offs, esec == AHDI_BBLOCK ? offs : esec);
-                       if (rv)
-                               goto done;
-               } else {
-                       part_t  *p;
-                       u_int   i = ++dd->nparts;
-                       dd->parts = xrealloc(dd->parts, i * sizeof *dd->parts);
-                       p = &dd->parts[--i];
-                       *((u_int32_t *)&p->id) = id << 8;
-                       p->start = part->ap_offs + rsec;
-                       p->end   = p->start + part->ap_size - 1;
-                       p->rsec  = rsec;
-                       p->rent  = part - root->ar_parts;
-               }
-       }
-       dd->hdsize = root->ar_hdsize;
-       dd->bslst  = root->ar_bslst;
-       dd->bslend = root->ar_bslst + root->ar_bslsize - 1;
-       rv = 0;
-done:
-       free(root);
-       return(rv);
-}
diff --git a/sys/arch/atari/stand/tostools/aptck/disklabel.h b/sys/arch/atari/stand/tostools/aptck/disklabel.h
deleted file mode 100644 (file)
index 6b3c004..0000000
+++ /dev/null
@@ -1,203 +0,0 @@
-/*     $NetBSD: disklabel.h,v 1.1.1.1 1996/01/07 21:54:16 leo Exp $    */
-
-/*
- * Copyright (c) 1995 Leo Weppelman.
- * 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 Leo Weppelman.
- * 4. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
- */
-
-#ifndef DISKLABEL_H
-#define DISKLABEL_H
-
-/*
- * On a volume, exclusively used by NetBSD, the boot block starts at
- * sector 0. To allow shared use of a volume between two or more OS's
- * the vendor specific AHDI format is supported. In this case the boot
- * block is located at the start of an AHDI partition. In any case the
- * size of the boot block is 8KB, the disk label is at offset 7KB.
- */
-#define LABELSECTOR    0               /* `natural' start of boot block   */
-#define LABELOFFSET    (7 * 1024)      /* offset of disk label in bytes,
-                                          relative to start of boot block */
-#define        BBSIZE          (8 * 1024)      /* size of boot block in bytes     */
-#define MAXPARTITIONS  16              /* max. # of NetBSD partitions     */
-#define RAW_PART       2               /* xx?c is raw partition           */
-
-#define NO_BOOT_BLOCK  ((u_int) -1)
-#define MAXAUXROOTS    60              /* max. # of auxilary root sectors */
-
-/***************************************************************************/
-
-#define        AHDI_BSIZE      512             /* AHDI blocksize               */
-#define        AHDI_BBLOCK     0               /* AHDI bootblock (root sector) */
-#define AHDI_MAXROOTS  (MAXAUXROOTS)   /* max. # of AHDI rootsectors   */
-#define        AHDI_MAXPARTS   (AHDI_MAXROOTS+3) /* max. # of AHDI partitions  */
-
-/*
- * Various `well known' AHDI partition identifiers.
- */
-#define AHDI_MKPID(x,y,z)      (   ((u_int32_t)(x) << 16)      \
-                                 | ((u_int32_t)(y) << 8)       \
-                                 | ((u_int32_t)(z))            \
-                               )
-#define        AHDI_PID_XGM    AHDI_MKPID('X','G','M')
-#define        AHDI_PID_GEM    AHDI_MKPID('G','E','M')
-#define        AHDI_PID_BGM    AHDI_MKPID('B','G','M')
-#define        AHDI_PID_RAW    AHDI_MKPID('R','A','W')
-#define        AHDI_PID_SWP    AHDI_MKPID('S','W','P')
-#define        AHDI_PID_NBD    AHDI_MKPID('N','B','D')
-#define        AHDI_PID_NBR    AHDI_MKPID('N','B','R')
-#define        AHDI_PID_NBS    AHDI_MKPID('N','B','S')
-#define        AHDI_PID_NBU    AHDI_MKPID('N','B','U')
-
-/*
- * Format of AHDI boot block.
- */
-#define        AHDI_MAXRPD     4               /* max. # of partition descriptors */
-                                       /* in the AHDI bootblock (aka root)*/
-#define        AHDI_MAXARPD    2               /* max. # of partition descriptors */
-                                       /* in an AHDI auxilary root sector */
-
-struct ahdi_part {
-       u_int8_t        ap_flg;         /* bit 0 is in-use flag            */
-       u_int8_t        ap_id[3];       /* id: GEM, BGM, XGM, UNX, MIX     */
-       u_int32_t       ap_offs;        /* block where partition starts    */
-       u_int32_t       ap_size;        /* partition size in blocks        */
-#define        ap_end  ap_size /* in the in-core copy, store end instead of size  */
-};
-
-struct ahdi_root {
-       u_int8_t         ar_fill[0x1c2];/* filler, can be boot code        */
-       u_int32_t        ar_hdsize;     /* size of entire volume in blocks */
-       struct ahdi_part ar_parts[AHDI_MAXRPD]; /* root partition table    */
-       u_int32_t        ar_bslst;      /* start of bad-sector list        */
-       u_int32_t        ar_bslsize;    /* # of blocks in bad-sector list  */
-       u_int16_t        ar_cksum;
-};
-
-/***************************************************************************/
-
-#define DISKMAGIC      ((u_int32_t)0x82564557) /* The disk magic number */
-
-struct disklabel {
-       u_int32_t d_magic;              /* the magic number */
-       u_int16_t d_type;               /* drive type */
-       u_int16_t d_subtype;            /* controller/d_type specific */
-       char      d_typename[16];       /* type name, e.g. "eagle" */
-
-       /* 
-        * d_packname contains the pack identifier and is returned when
-        * the disklabel is read off the disk or in-core copy.
-        * d_boot0 and d_boot1 are the (optional) names of the
-        * primary (block 0) and secondary (block 1-15) bootstraps
-        * as found in /usr/mdec.  These are returned when using
-        * getdiskbyname(3) to retrieve the values from /etc/disktab.
-        */
-       union {
-               char    un_d_packname[16];      /* pack identifier */ 
-               struct {
-                       char *un_d_boot0;       /* primary bootstrap name */
-                       char *un_d_boot1;       /* secondary bootstrap name */
-               } un_b; 
-       } d_un; 
-#define d_packname     d_un.un_d_packname
-#define d_boot0                d_un.un_b.un_d_boot0
-#define d_boot1                d_un.un_b.un_d_boot1
-
-                       /* disk geometry: */
-       u_int32_t d_secsize;            /* # of bytes per sector */
-       u_int32_t d_nsectors;           /* # of data sectors per track */
-       u_int32_t d_ntracks;            /* # of tracks per cylinder */
-       u_int32_t d_ncylinders;         /* # of data cylinders per unit */
-       u_int32_t d_secpercyl;          /* # of data sectors per cylinder */
-       u_int32_t d_secperunit;         /* # of data sectors per unit */
-
-       /*
-        * Spares (bad sector replacements) below are not counted in
-        * d_nsectors or d_secpercyl.  Spare sectors are assumed to
-        * be physical sectors which occupy space at the end of each
-        * track and/or cylinder.
-        */
-       u_int16_t d_sparespertrack;     /* # of spare sectors per track */
-       u_int16_t d_sparespercyl;       /* # of spare sectors per cylinder */
-       /*
-        * Alternate cylinders include maintenance, replacement, configuration
-        * description areas, etc.
-        */
-       u_int32_t d_acylinders;         /* # of alt. cylinders per unit */
-
-                       /* hardware characteristics: */
-       /*
-        * d_interleave, d_trackskew and d_cylskew describe perturbations
-        * in the media format used to compensate for a slow controller.
-        * Interleave is physical sector interleave, set up by the
-        * formatter or controller when formatting.  When interleaving is
-        * in use, logically adjacent sectors are not physically
-        * contiguous, but instead are separated by some number of
-        * sectors.  It is specified as the ratio of physical sectors
-        * traversed per logical sector.  Thus an interleave of 1:1
-        * implies contiguous layout, while 2:1 implies that logical
-        * sector 0 is separated by one sector from logical sector 1.
-        * d_trackskew is the offset of sector 0 on track N relative to
-        * sector 0 on track N-1 on the same cylinder.  Finally, d_cylskew
-        * is the offset of sector 0 on cylinder N relative to sector 0
-        * on cylinder N-1.
-        */
-       u_int16_t d_rpm;                /* rotational speed */
-       u_int16_t d_interleave;         /* hardware sector interleave */
-       u_int16_t d_trackskew;          /* sector 0 skew, per track */
-       u_int16_t d_cylskew;            /* sector 0 skew, per cylinder */
-       u_int32_t d_headswitch;         /* head switch time, usec */
-       u_int32_t d_trkseek;            /* track-to-track seek, usec */
-       u_int32_t d_flags;              /* generic flags */
-#define NDDATA 5
-       u_int32_t d_drivedata[NDDATA];  /* drive-type specific information */
-#define NSPARE 5
-       u_int32_t d_spare[NSPARE];      /* reserved for future use */
-       u_int32_t d_magic2;             /* the magic number (again) */
-       u_int16_t d_checksum;           /* xor of data incl. partitions */
-
-                       /* filesystem and partition information: */
-       u_int16_t d_npartitions;        /* number of partitions in following */
-       u_int32_t d_bbsize;             /* size of boot area at sn0, bytes */
-       u_int32_t d_sbsize;             /* max size of fs superblock, bytes */
-       struct  partition {             /* the partition table */
-               u_int32_t p_size;       /* number of sectors in partition */
-               u_int32_t p_offset;     /* starting sector */
-               u_int32_t p_fsize;      /* filesystem basic fragment size */
-               u_int8_t p_fstype;      /* filesystem type, see below */
-               u_int8_t p_frag;        /* filesystem fragments per block */
-               union {
-                       u_int16_t cpg;  /* UFS: FS cylinders per group */
-                       u_int16_t sgs;  /* LFS: FS segment shift */
-               } __partition_u1;
-#define        p_cpg   __partition_u1.cpg
-#define        p_sgs   __partition_u1.sgs
-       } d_partitions[MAXPARTITIONS];  /* actually may be more */
-};
-
-#endif /* DISKLABEL_H */
diff --git a/sys/arch/atari/stand/tostools/aptck/disklbl.c b/sys/arch/atari/stand/tostools/aptck/disklbl.c
new file mode 100644 (file)
index 0000000..ec88579
--- /dev/null
@@ -0,0 +1,345 @@
+/*     $NetBSD: disklbl.c,v 1.1 1996/01/16 15:15:48 leo Exp $  */
+
+/*
+ * Copyright (c) 1995 Waldi Ravens.
+ * 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 Waldi Ravens.
+ * 4. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+ */
+
+#include <sys/types.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include "libtos.h"
+#include "aptck.h"
+#include "ahdilbl.h"
+#include "disklbl.h"
+
+static int     dkcksum    PROTO((struct disklabel *));
+static int     bsd_label  PROTO((disk_t *, u_int));
+static int     ahdi_label PROTO((disk_t *));
+static int     ahdi_display PROTO((disk_t *));
+static u_int   ahdi_getparts PROTO((disk_t *, u_int, u_int));
+
+int
+readdisklabel(dd)
+       disk_t  *dd;
+{
+       int     e;
+
+       printf("Device     : %s (%s) [%s]\n", dd->sname, dd->fname, dd->product);
+       printf("Medium size: %lu sectors\n", (u_long)dd->msize);
+       printf("Sector size: %lu bytes\n\n", (u_long)dd->bsize);
+
+       e = bsd_label(dd, LABELSECTOR);
+       if (e < 0) {
+               printf("Device I/O error (hardware problem?)\n\n");
+               return(-1);
+       }
+       if (!e) {
+               printf("NetBSD/Atari format, boot block: "
+                      "sector %u labeloffset %u\n\n",
+                      dd->bblock, dd->lblofs);
+               return(0);
+       }
+
+       e = ahdi_label(dd);
+       if (e < 0) {
+               printf("Device I/O error (hardware problem?)\n\n");
+               return(-1);
+       }
+       if (!e) {
+               printf("AHDI format, NetBSD boot block: ");
+               if (dd->bblock != NO_BOOT_BLOCK)
+                       printf("sector %u labeloffset %u\n\n",
+                              dd->bblock, dd->lblofs);
+               else printf("none\n\n");
+               return(0);
+       }
+
+       printf("Unknown label format.\n\n");
+       return(-1);
+}
+
+static int
+bsd_label(dd, offset)
+       disk_t          *dd;
+       u_int           offset;
+{
+       u_char          *bblk;
+       u_int           nsec;
+       int             rv;
+
+       nsec = (BBSIZE + (dd->bsize - 1)) / dd->bsize;
+       bblk = disk_read(dd, offset, nsec);
+       if (bblk) {
+               u_short *end, *p;
+               
+               end = (u_short *)&bblk[BBSIZE - sizeof(struct disklabel)];
+               rv = 1;
+               for (p = (u_short *)bblk; p < end; ++p) {
+                       struct disklabel *dl = (struct disklabel *)p;
+                       if (dl->d_magic == DISKMAGIC && dl->d_magic2 == DISKMAGIC
+                           && dl->d_npartitions <= MAXPARTITIONS && !dkcksum(dl)) {
+                               dd->lblofs = (u_char *)p - bblk;
+                               dd->bblock = offset;
+                               rv = 0;
+                               break;
+                       }
+               }
+               free(bblk);
+       }
+       else rv = -1;
+
+       return(rv);
+}
+
+static int
+dkcksum(dl)
+       struct disklabel *dl;
+{
+       u_short *start, *end, sum = 0;
+
+       start = (u_short *)dl;
+       end   = (u_short *)&dl->d_partitions[dl->d_npartitions];
+       while (start < end)
+               sum ^= *start++;
+       return(sum);
+}
+
+int
+ahdi_label(dd)
+       disk_t  *dd;
+{
+       u_int   i;
+       int     e;
+
+       /*
+        * The AHDI format requires a specific block size.
+        */
+       if (dd->bsize != AHDI_BSIZE)
+               return(1);
+
+       /*
+        * Fetch the AHDI partition descriptors.
+        */
+       i = ahdi_getparts(dd, AHDI_BBLOCK, AHDI_BBLOCK);
+       if (i) {
+               if (i < dd->msize)
+                       return(-1);     /* disk read error              */
+               else return(1);         /* reading past end of medium   */
+       }
+
+       /*
+        * Display and perform sanity checks.
+        */
+       i = ahdi_display(dd);
+       if (i)
+               return(i);
+
+       /*
+        * Search for a NetBSD disk label
+        */
+       dd->bblock = NO_BOOT_BLOCK;
+       for (i = 0; i < dd->nparts; ++i) {
+               part_t  *pd = &dd->parts[i];
+               u_int   id  = *((u_int32_t *)&pd->id) >> 8;
+               if (id == AHDI_PID_NBD || id == AHDI_PID_RAW) {
+                       u_int   offs = pd->start;
+                       if ((e = bsd_label(dd, offs)) < 0) {
+                               return(e);              /* I/O error */
+                       }
+                       if (!e) {
+                               dd->bblock = offs;      /* got it */
+                               return(0);
+                       }
+                       if (id == AHDI_PID_NBD && dd->bblock == NO_BOOT_BLOCK)
+                               dd->bblock = offs;
+               }
+       }
+       return(0);
+}
+
+static int
+root_cmp(x1, x2)
+       const void      *x1, *x2;
+{
+       const u_int     *r1 = x1,
+                       *r2 = x2;
+
+       if (*r1 < *r2)
+               return(-1);
+       if (*r1 > *r2)
+               return(1);
+       return(0);
+}
+
+static int
+part_cmp(x1, x2)
+       const void      *x1, *x2;
+{
+       const part_t    *p1 = x1,
+                       *p2 = x2;
+
+       if (p1->start < p2->start)
+               return(-1);
+       if (p1->start > p2->start)
+               return(1);
+       if (p1->end < p2->end)
+               return(-1);
+       if (p1->end > p2->end)
+               return(1);
+       if (p1->rsec < p2->rsec)
+               return(-1);
+       if (p1->rsec > p2->rsec)
+               return(1);
+       if (p1->rent < p2->rent)
+               return(-1);
+       if (p1->rent > p2->rent)
+               return(1);
+       return(0);
+}
+
+static int
+ahdi_display(dd)
+       disk_t  *dd;
+{
+       int     i, j, rv = 0;
+
+       printf("Start of bad sector list : %u\n", dd->bslst);
+       if (dd->bslst == 0) {
+               printf("* Illegal value (zero) *\n"); rv = 1;
+       }
+       printf("End of bad sector list   : %u\n", dd->bslend);
+       if (dd->bslend == 0) {
+               printf("* Illegal value (zero) *\n"); rv = 1;
+       }
+       printf("Medium size (in root sec): %u\n", dd->hdsize);
+       if (dd->hdsize == 0) {
+               printf("* Illegal value (zero) *\n"); rv = 1;
+       }
+
+       qsort(dd->roots, dd->nroots, sizeof *dd->roots, root_cmp);
+       qsort(dd->parts, dd->nparts, sizeof *dd->parts, part_cmp);
+       printf("\n    root  desc   id     start       end    MBs\n");
+
+       for (i = 0; i < dd->nparts; ++i) {
+               part_t  *p1 = &dd->parts[i];
+               u_int   megs = p1->end - p1->start + 1,
+                       blpm = (1024 * 1024) / dd->bsize;
+               megs = (megs + (blpm >> 1)) / blpm;
+               printf("%8u  %4u  %s  %8u  %8u  (%3u)\n",
+                       p1->rsec, p1->rent, p1->id,
+                       p1->start, p1->end, megs);
+               for (j = 0; j < dd->nroots; ++j) {
+                       u_int   aux = dd->roots[j];
+                       if (aux >= p1->start && aux <= p1->end) {
+                               printf("FATAL: auxilary root at %u\n", aux); rv = 1;
+                       }
+               }
+               for (j = i; j--;) {
+                       part_t  *p2 = &dd->parts[j];
+                       if (p1->start >= p2->start && p1->start <= p2->end) {
+                               printf("FATAL: clash with %u/%u\n", p2->rsec, p2->rent); rv = 1;
+                       }
+                       if (p2->start >= p1->start && p2->start <= p1->end) {
+                               printf("FATAL: clash with %u/%u\n", p2->rsec, p2->rent); rv = 1;
+                       }
+               }
+               if (p1->start >= dd->bslst && p1->start <= dd->bslend) {
+                       printf("FATAL: partition overlaps with bad sector list\n"); rv = 1;
+               }
+               if (dd->bslst >= p1->start && dd->bslst <= p1->end) {
+                       printf("FATAL: partition overlaps with bad sector list\n"); rv = 1;
+               }
+       }
+
+       printf("\nTotal number of auxilary roots: %u\n", dd->nroots);
+       printf("Total number of partitions    : %u\n", dd->nparts);
+       if (dd->nparts == 0) {
+               printf("* Weird # of partitions (zero) *\n"); rv = 1;
+       }
+       if (dd->nparts > AHDI_MAXPARTS) {
+               printf("* Too many AHDI partitions for the default NetBSD "
+                       "kernel *\n  Increase MAXAUXROOTS in src/sys/arch/"
+                       "atari/include/disklabel.h\n  to at least %u, and "
+                       "recompile the NetBSD kernel.\n", dd->nroots);
+               rv = -1;
+       }
+       return(rv);
+}
+
+static u_int
+ahdi_getparts(dd, rsec, esec)
+       disk_t                  *dd;
+       u_int                   rsec,
+                               esec;
+{
+       struct ahdi_part        *part, *end;
+       struct ahdi_root        *root;
+       u_int                   rv;
+
+       root = disk_read(dd, rsec, 1);
+       if (!root) {
+               rv = rsec + (rsec == 0);
+               goto done;
+       }
+
+       if (rsec == AHDI_BBLOCK)
+               end = &root->ar_parts[AHDI_MAXRPD];
+       else end = &root->ar_parts[AHDI_MAXARPD];
+       for (part = root->ar_parts; part < end; ++part) {
+               u_int   id = *((u_int32_t *)&part->ap_flg);
+               if (!(id & 0x01000000))
+                       continue;
+               if ((id &= 0x00ffffff) == AHDI_PID_XGM) {
+                       u_int   offs = part->ap_offs + esec;
+                       u_int   i = ++dd->nroots;
+                       dd->roots = xrealloc(dd->roots, i * sizeof *dd->roots);
+                       dd->roots[--i] = offs;
+                       rv = ahdi_getparts(dd, offs, esec == AHDI_BBLOCK ? offs : esec);
+                       if (rv)
+                               goto done;
+               } else {
+                       part_t  *p;
+                       u_int   i = ++dd->nparts;
+                       dd->parts = xrealloc(dd->parts, i * sizeof *dd->parts);
+                       p = &dd->parts[--i];
+                       *((u_int32_t *)&p->id) = id << 8;
+                       p->start = part->ap_offs + rsec;
+                       p->end   = p->start + part->ap_size - 1;
+                       p->rsec  = rsec;
+                       p->rent  = part - root->ar_parts;
+               }
+       }
+       dd->hdsize = root->ar_hdsize;
+       dd->bslst  = root->ar_bslst;
+       dd->bslend = root->ar_bslst + root->ar_bslsize - 1;
+       rv = 0;
+done:
+       free(root);
+       return(rv);
+}
diff --git a/sys/arch/atari/stand/tostools/aptck/disklbl.h b/sys/arch/atari/stand/tostools/aptck/disklbl.h
new file mode 100644 (file)
index 0000000..cfb5c90
--- /dev/null
@@ -0,0 +1,140 @@
+/*     $NetBSD: disklbl.h,v 1.1 1996/01/16 15:15:52 leo Exp $  */
+
+/*
+ * Copyright (c) 1987, 1988, 1993
+ *     The 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.
+ *
+ *     @(#)disklabel.h 8.2 (Berkeley) 7/10/94
+ */
+
+#ifndef DISKLABEL_H
+#define DISKLABEL_H
+
+#define        DISKMAGIC       ((u_int32_t)0x82564557) /* The disk magic number */
+
+struct disklabel {
+       u_int32_t d_magic;              /* the magic number */
+       u_int16_t d_type;               /* drive type */
+       u_int16_t d_subtype;            /* controller/d_type specific */
+       char      d_typename[16];       /* type name, e.g. "eagle" */
+
+       /* 
+        * d_packname contains the pack identifier and is returned when
+        * the disklabel is read off the disk or in-core copy.
+        * d_boot0 and d_boot1 are the (optional) names of the
+        * primary (block 0) and secondary (block 1-15) bootstraps
+        * as found in /usr/mdec.  These are returned when using
+        * getdiskbyname(3) to retrieve the values from /etc/disktab.
+        */
+       union {
+               char    un_d_packname[16];      /* pack identifier */ 
+               struct {
+                       char *un_d_boot0;       /* primary bootstrap name */
+                       char *un_d_boot1;       /* secondary bootstrap name */
+               } un_b; 
+       } d_un; 
+#define        d_packname      d_un.un_d_packname
+#define        d_boot0         d_un.un_b.un_d_boot0
+#define        d_boot1         d_un.un_b.un_d_boot1
+
+                       /* disk geometry: */
+       u_int32_t d_secsize;            /* # of bytes per sector */
+       u_int32_t d_nsectors;           /* # of data sectors per track */
+       u_int32_t d_ntracks;            /* # of tracks per cylinder */
+       u_int32_t d_ncylinders;         /* # of data cylinders per unit */
+       u_int32_t d_secpercyl;          /* # of data sectors per cylinder */
+       u_int32_t d_secperunit;         /* # of data sectors per unit */
+
+       /*
+        * Spares (bad sector replacements) below are not counted in
+        * d_nsectors or d_secpercyl.  Spare sectors are assumed to
+        * be physical sectors which occupy space at the end of each
+        * track and/or cylinder.
+        */
+       u_int16_t d_sparespertrack;     /* # of spare sectors per track */
+       u_int16_t d_sparespercyl;       /* # of spare sectors per cylinder */
+       /*
+        * Alternate cylinders include maintenance, replacement, configuration
+        * description areas, etc.
+        */
+       u_int32_t d_acylinders;         /* # of alt. cylinders per unit */
+
+                       /* hardware characteristics: */
+       /*
+        * d_interleave, d_trackskew and d_cylskew describe perturbations
+        * in the media format used to compensate for a slow controller.
+        * Interleave is physical sector interleave, set up by the
+        * formatter or controller when formatting.  When interleaving is
+        * in use, logically adjacent sectors are not physically
+        * contiguous, but instead are separated by some number of
+        * sectors.  It is specified as the ratio of physical sectors
+        * traversed per logical sector.  Thus an interleave of 1:1
+        * implies contiguous layout, while 2:1 implies that logical
+        * sector 0 is separated by one sector from logical sector 1.
+        * d_trackskew is the offset of sector 0 on track N relative to
+        * sector 0 on track N-1 on the same cylinder.  Finally, d_cylskew
+        * is the offset of sector 0 on cylinder N relative to sector 0
+        * on cylinder N-1.
+        */
+       u_int16_t d_rpm;                /* rotational speed */
+       u_int16_t d_interleave;         /* hardware sector interleave */
+       u_int16_t d_trackskew;          /* sector 0 skew, per track */
+       u_int16_t d_cylskew;            /* sector 0 skew, per cylinder */
+       u_int32_t d_headswitch;         /* head switch time, usec */
+       u_int32_t d_trkseek;            /* track-to-track seek, usec */
+       u_int32_t d_flags;              /* generic flags */
+#define        NDDATA 5
+       u_int32_t d_drivedata[NDDATA];  /* drive-type specific information */
+#define        NSPARE 5
+       u_int32_t d_spare[NSPARE];      /* reserved for future use */
+       u_int32_t d_magic2;             /* the magic number (again) */
+       u_int16_t d_checksum;           /* xor of data incl. partitions */
+
+                       /* filesystem and partition information: */
+       u_int16_t d_npartitions;        /* number of partitions in following */
+       u_int32_t d_bbsize;             /* size of boot area at sn0, bytes */
+       u_int32_t d_sbsize;             /* max size of fs superblock, bytes */
+       struct  partition {             /* the partition table */
+               u_int32_t p_size;       /* number of sectors in partition */
+               u_int32_t p_offset;     /* starting sector */
+               u_int32_t p_fsize;      /* filesystem basic fragment size */
+               u_int8_t p_fstype;      /* filesystem type, see below */
+               u_int8_t p_frag;        /* filesystem fragments per block */
+               union {
+                       u_int16_t cpg;  /* UFS: FS cylinders per group */
+                       u_int16_t sgs;  /* LFS: FS segment shift */
+               } __partition_u1;
+#define        p_cpg   __partition_u1.cpg
+#define        p_sgs   __partition_u1.sgs
+       } d_partitions[MAXPARTITIONS];  /* actually may be more */
+};
+
+#endif /* DISKLABEL_H */
diff --git a/sys/arch/atari/stand/tostools/aptck/setrev.awk b/sys/arch/atari/stand/tostools/aptck/setrev.awk
new file mode 100644 (file)
index 0000000..0e545c2
--- /dev/null
@@ -0,0 +1,39 @@
+#!/usr/bin/awk -f
+#
+# $NetBSD: setrev.awk,v 1.1 1996/01/16 15:15:55 leo Exp $
+#
+function revcmp(r1, r2,    n1, n2, a1, a2, n, i) {
+       n1 = split(r1, a1, "\.")
+       n2 = split(r2, a2, "\.")
+       n = (n1 < n2) ? n1 : n2
+
+       for (i = 1; i <= n; ++i) {
+               if (a1[i] != a2[i])
+                       return(a1[i] - a2[i])
+       }
+       if (n1 != n2)
+               return(n1 - n2)
+       return(0)
+}
+
+BEGIN {
+       destfile = ARGV[1]
+       rev = "0.0"
+}
+
+{
+       if (revcmp($4, rev) > 0)
+               rev = $4
+       next file
+}
+
+END {
+       while ((e = getline <destfile) > 0) {
+               if (/"\$Revision.*\$"/)
+                       sub("\\\$Revision.*\\\$", "Revision " rev)
+               print
+       }
+       if (e)
+               exit(1)
+       exit(0)
+}
diff --git a/sys/arch/atari/stand/tostools/aptck/setversion b/sys/arch/atari/stand/tostools/aptck/setversion
deleted file mode 100644 (file)
index acfcc8c..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/usr/bin/awk -f
-#
-# $NetBSD: setversion,v 1.1.1.1 1996/01/07 21:54:17 leo Exp $
-#
-function revcmp(r1, r2,    n1, n2, a1, a2, n, i) {
-       n1 = split(r1, a1, "\.")
-       n2 = split(r2, a2, "\.")
-       n = (n1 < n2) ? n1 : n2
-
-       for (i = 1; i <= n; ++i) {
-               if (a1[i] != a2[i])
-                       return(a1[i] - a2[i])
-       }
-       if (n1 != n2)
-               return(n1 - n2)
-       return(0)
-}
-
-BEGIN {
-       destfile = ARGV[1]
-       rev = "0.0"
-}
-
-{
-       if (revcmp($4, rev) > 0)
-               rev = $4
-       next file
-}
-
-END {
-       while ((e = getline <destfile) > 0) {
-               if (/"\$Revision.*\$"/)
-                       sub("\\\$Revision.*\\\$", "Revision " rev)
-               print
-       }
-       if (e)
-               exit(1)
-       exit(0)
-}