1 /*        $NetBSD: ahdilabel.h,v 1.4 2009/10/20 19:10:11 snj Exp $    */
2 
3 /*
4  * Copyright (c) 1995 Leo Weppelman.
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  *
16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27 
28 #ifndef _MACHINE_AHDILABEL_H_
29 #define _MACHINE_AHDILABEL_H_
30 
31 #define   AHDI_BSIZE          512                 /* AHDI blocksize             */
32 #define   AHDI_BBLOCK         0                   /* AHDI bootblock (root sector)         */
33 #define AHDI_MAXROOTS         (MAXAUXROOTS)       /* max. # of AHDI rootsectors */
34 #define   AHDI_MAXPARTS       (AHDI_MAXROOTS+3) /* max. # of AHDI partitions    */
35 
36 /*
37  * Various `well known' AHDI partition identifiers.
38  */
39 #define AHDI_MKPID(x,y,z)     (   ((u_int32_t)(x) << 16)    \
40                                           | ((u_int32_t)(y) << 8)     \
41                                           | ((u_int32_t)(z))                    \
42                                         )
43 #define   AHDI_PID_XGM        AHDI_MKPID('X','G','M')
44 #define   AHDI_PID_GEM        AHDI_MKPID('G','E','M')
45 #define   AHDI_PID_BGM        AHDI_MKPID('B','G','M')
46 #define   AHDI_PID_RAW        AHDI_MKPID('R','A','W')
47 #define   AHDI_PID_SWP        AHDI_MKPID('S','W','P')
48 #define   AHDI_PID_NBD        AHDI_MKPID('N','B','D')
49 #define   AHDI_PID_NBR        AHDI_MKPID('N','B','R')
50 #define   AHDI_PID_NBS        AHDI_MKPID('N','B','S')
51 #define   AHDI_PID_NBU        AHDI_MKPID('N','B','U')
52 
53 /*
54  * Format of AHDI boot block.
55  */
56 #define   AHDI_MAXRPD         4                   /* max. # of partition descriptors */
57                                                   /* in an AHDI bootblock (aka root) */
58 #define   AHDI_MAXARPD        2                   /* max. # of partition descriptors */
59                                                   /* in an AHDI auxiliary root sector */
60 struct ahdi_part {
61           u_int8_t  ap_flg;             /* bit 0 is in-use flag            */
62           u_int8_t  ap_id[3]; /* id: GEM, BGM, XGM, UNX, MIX     */
63           u_int32_t ap_st;              /* block where partition starts    */
64           u_int32_t ap_size;  /* partition size in blocks        */
65 } __attribute__((__packed__));
66 #define   ap_end    ap_size /* in the in-core copy, store end instead of size  */
67 
68 struct ahdi_root {
69           u_int8_t   ar_fill[0x1c2];/* filler, can be boot code        */
70           u_int32_t  ar_hdsize;         /* size of entire volume in blocks */
71           struct ahdi_part ar_parts[AHDI_MAXRPD]; /* root partition table    */
72           u_int32_t  ar_bslst;          /* start of bad-sector list        */
73           u_int32_t  ar_bslsize;        /* # of blocks in bad-sector list  */
74           u_int16_t  ar_checksum;
75 } __attribute__((__packed__));
76 
77 /*
78  * AHDI partition table.
79  */
80 #ifdef _KERNEL
81 struct ahdi_ptbl {
82           struct cpu_disklabel          *at_cdl;
83           u_int                         at_hdsize;   /* size of volume in blocks   */
84           u_int                         at_nroots;   /* # of auxiliary root sectors */
85           u_int                         at_nparts;   /* # of AHDI partitions       */
86           struct ahdi_part    at_parts[AHDI_MAXPARTS];
87 };
88 #define at_bblock   at_cdl->cd_bblock
89 #define at_label    at_cdl->cd_label
90 #define at_bslst    at_cdl->cd_bslst
91 #define at_bslend   at_cdl->cd_bslend
92 #define at_roots    at_cdl->cd_roots
93 #endif /* _KERNEL */
94 
95 #endif /* _MACHINE_AHDILABEL_H_ */
96