disklabel.h revision 1.6
1/* $NetBSD: disklabel.h,v 1.6 2000/03/13 23:52:26 soren Exp $ */
2
3/*
4 * Copyright (c) 1994, 1999 Christopher G. Demetriou
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 *    notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 *    notice, this list of conditions and the following disclaimer in the
14 *    documentation and/or other materials provided with the distribution.
15 * 3. All advertising materials mentioning features or use of this software
16 *    must display the following acknowledgement:
17 *      This product includes software developed by Christopher G. Demetriou
18 *      for the NetBSD Project.
19 * 4. The name of the author may not be used to endorse or promote products
20 *    derived from this software without specific prior written permission
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
23 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
24 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
25 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
26 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
27 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
31 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 */
33
34#ifndef _MACHINE_DISKLABEL_H_
35#define _MACHINE_DISKLABEL_H_
36
37#define	LABELSECTOR	0			/* sector containing label */
38#define	LABELOFFSET	64			/* offset of label in sector */
39#define	MAXPARTITIONS	8			/* number of partitions */
40#define	RAW_PART	2			/* raw partition: xx?c */
41
42#include <sys/dkbad.h>
43
44/* Just a dummy */
45struct cpu_disklabel {
46	struct dkbad bad;			/* bad-sector information */
47};
48
49/*
50 * Alpha (disk, but also tape) Boot Block.  See Section (III) 3.6.1 of the
51 * Alpha Architecture Reference Manual.
52 */
53
54struct boot_block {
55	u_int64_t bb_data[63];		/* data (disklabel, also as below) */
56	u_int64_t bb_cksum;		/* checksum of the boot block,
57					 * taken as u_int64_t's
58					 */
59};
60#define	bb_secsize	bb_data[60]	/* secondary size (blocks) */
61#define	bb_secstart	bb_data[61]	/* secondary start (blocks) */
62#define	bb_flags	bb_data[62]	/* unknown flags (set to zero) */
63
64#define	BOOT_BLOCK_OFFSET	0	/* offset of boot block. */
65#define	BOOT_BLOCK_BLOCKSIZE	512	/* block size for sec. size/start,
66					 * and for boot block itself
67					 */
68
69#define	CHECKSUM_BOOT_BLOCK(bb,cksum)					\
70	do {								\
71		const struct boot_block *_bb = (bb);			\
72		u_int64_t _cksum;					\
73		int _i;							\
74									\
75		_cksum = 0;						\
76		for (_i = 0;						\
77		    _i < (sizeof _bb->bb_data / sizeof _bb->bb_data[0]); \
78		    _i++)						\
79			_cksum += _bb->bb_data[_i];			\
80		*(cksum) = _cksum;					\
81	} while (0)
82
83#endif /* _MACHINE_DISKLABEL_H_ */
84