From 38b5c3b216e0023e016ddfa981d514019dda415e Mon Sep 17 00:00:00 2001 From: lukem Date: Wed, 3 Apr 2002 04:05:05 +0000 Subject: [PATCH] - Add alpha boot block info, derived from sys/arch/alpha/include/disklabel.h, adding "alpha_" / "ALPHA_" prefix to items as appropriate. Rename CHECKSUM_BOOT_BLOCK() -> ALPHA_BOOT_BLOCK_CKSUM(). Add cgd's copyright from disklabel.h. - Clean up a couple of comments. --- sys/dev/dec/dec_boot.h | 87 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 75 insertions(+), 12 deletions(-) diff --git a/sys/dev/dec/dec_boot.h b/sys/dev/dec/dec_boot.h index aba49293f29f..24c57b9da86f 100644 --- a/sys/dev/dec/dec_boot.h +++ b/sys/dev/dec/dec_boot.h @@ -1,4 +1,4 @@ -/* $NetBSD: dec_boot.h,v 1.3 2000/06/21 14:57:21 matt Exp $ */ +/* $NetBSD: dec_boot.h,v 1.4 2002/04/03 04:05:05 lukem Exp $ */ /* * Copyright (c) 1992, 1993 @@ -37,18 +37,41 @@ * * @(#)dec_boot.h 8.1 (Berkeley) 6/10/93 * - * devDiskLabel.h -- - * - * This defines the disk label that Sun writes on the 0'th sector of - * the 0'th cylinder of its SMD disks. The disk label contains some - * geometry information and also the division of the disk into a - * number of partitions. Each partition is identified to the drive - * by a different unit number. - * * from: Header: /sprite/src/kernel/dev/RCS/devDiskLabel.h, * v 9.4 90/03/01 12:22:36 jhh Exp SPRITE (Berkeley) */ +/* + * Copyright (c) 1994, 1999 Christopher G. Demetriou + * 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 Christopher G. Demetriou + * for the NetBSD Project. + * 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 _DEV_DEC_DEC_BOOT_H_ #define _DEV_DEC_DEC_BOOT_H_ @@ -60,8 +83,47 @@ * after the boot information expected by the PROM boot loader. */ -/* PMAX (DECstation / MIPS) boot block information +/* + * Alpha (disk, but also tape) Boot Block. + * + * See Section (III) 3.6.1 of the Alpha Architecture Reference Manual. */ + +struct alpha_boot_block { + u_int64_t bb_data[63]; /* data (disklabel, also as below) */ + u_int64_t bb_cksum; /* checksum of the boot block, + * taken as u_int64_t's + */ +}; +#define bb_secsize bb_data[60] /* secondary size (blocks) */ +#define bb_secstart bb_data[61] /* secondary start (blocks) */ +#define bb_flags bb_data[62] /* unknown flags (set to zero) */ + +#define ALPHA_BOOT_BLOCK_OFFSET 0 /* offset of boot block. */ +#define ALPHA_BOOT_BLOCK_BLOCKSIZE 512 /* block size for sector + * size/start, and for boot + * block itself. + */ + +#define ALPHA_BOOT_BLOCK_CKSUM(bb,cksum) \ + do { \ + const struct alpha_boot_block *_bb = (bb); \ + u_int64_t _cksum; \ + int _i; \ + \ + _cksum = 0; \ + for (_i = 0; \ + _i < (sizeof _bb->bb_data / sizeof _bb->bb_data[0]); \ + _i++) \ + _cksum += _bb->bb_data[_i]; \ + *(cksum) = _cksum; \ + } while (0) + + +/* + * PMAX (DECstation / MIPS) boot block information + */ + /* * If mode is 0, there is just one sequence of blocks and one Dec_BootMap * is used. If mode is 1, there are multiple sequences of blocks @@ -94,8 +156,9 @@ struct pmax_boot_block { #define PMAX_BOOT_BLOCK_OFFSET 0 #define PMAX_BOOT_BLOCK_BLOCKSIZE 512 -/* VAX boot block information - * + +/* + * VAX boot block information */ struct vax_boot_block { /* Note that these don't overlap any of the pmax boot block