1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
|
/* $OpenBSD: rdb.h,v 1.1 2003/11/13 23:00:54 drahn Exp $ */
/* $NetBSD: disklabel.h,v 1.6 1996/04/21 21:13:19 veego Exp $ */
/*
* Copyright (c) 1994 Christian E. Hopps
* 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 Christian E. Hopps.
* 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 _ADOS_RDB_H
#define _ADOS_RDB_H
/*
* describes ados Rigid Disk Blocks
* which are used to partition a drive
*/
#define RDBNULL ((u_long)0xffffffff)
#define RDB_MAXBLOCKS 16
/*
* Dos types for identifying file systems
* bsd file systems will be 'N','B',x,y where y is the fstype found in
* disklabel.h (for DOST_DOS it will be the version number)
*/
#define DOST_XXXBSD 0x42534400 /* Old type back compat*/
#define DOST_NBR 0x4e425200 /* 'NBRx' Netbsd root partition */
#define DOST_NBS 0x4e425300 /* 'NBS0' Netbsd swap partition */
#define DOST_NBU 0x4e425500 /* 'NBUx' Netbsd user partition */
#define DOST_DOS 0x444f5300 /* 'DOSx' AmigaDos partition */
#define DOST_AMIX 0x554e4900 /* 'UNIx' AmigaDos partition */
#define DOST_MUFS 0x6d754600 /* 'muFx' AmigaDos partition (muFS) */
#define DOST_EXT2 0x4c4e5800 /* 'LNX0' Linux fs partition (ext2fs) */
#define DOST_LNXSWP 0x53575000 /* 'LNX0' Linux swap partition */
#define DOST_OBSD 0x4f425344 /* 'OBSD' OpenBSD partition table */
struct adostype {
u_char archtype; /* see ADT_xxx below */
u_char fstype; /* byte 3 from amiga dostype */
};
/* archtypes */
#define ADT_UNKNOWN 0
#define ADT_AMIGADOS 1
#define ADT_NETBSDROOT 2
#define ADT_NETBSDSWAP 3
#define ADT_NETBSDUSER 4
#define ADT_AMIX 5
#define ADT_EXT2 6
#define ISFSARCH_NETBSD(adt) \
((adt).archtype >= ADT_NETBSDROOT && (adt).archtype <= ADT_NETBSDUSER)
/*
* you will find rdblock somewhere in [0, RDBMAXBLOCKS)
*/
#define RDB_MAXBLOCKS 16
struct rdblock {
u_long id; /* 'RDSK' */
u_long nsumlong; /* number of longs in check sum */
u_long chksum; /* simple additive with wrap checksum */
u_long hostid; /* scsi target of host */
u_long nbytes; /* size of disk blocks */
u_long flags;
u_long badbhead; /* linked list of badblocks */
u_long partbhead; /* linked list of partblocks */
u_long fsbhead; /* " " of fsblocks */
u_long driveinit;
u_long resv1[6]; /* RDBNULL */
u_long ncylinders; /* number of cylinders on drive */
u_long nsectors; /* number of sectors per track */
u_long nheads; /* number of tracks per cylinder */
u_long interleave;
u_long park; /* only used with st506 i.e. not */
u_long resv2[3];
u_long wprecomp; /* start cyl for write precomp */
u_long reducedwrite; /* start cyl for reduced write current */
u_long steprate; /* driver step rate in ?s */
u_long resv3[5];
u_long rdblowb; /* lowblock of range for rdb's */
u_long rdbhighb; /* high block of range for rdb's */
u_long lowcyl; /* low cylinder of partition area */
u_long highcyl; /* upper cylinder of partition area */
u_long secpercyl; /* number of sectors per cylinder */
u_long parkseconds; /* zero if no park needed */
u_long resv4[2];
char diskvendor[8]; /* inquiry stuff */
char diskproduct[16]; /* inquiry stuff */
char diskrevision[4]; /* inquiry stuff */
char contvendor[8]; /* inquiry stuff */
char contproduct[16]; /* inquiry stuff */
char contrevision[4]; /* inquiry stuff */
#if never_use_secsize
u_long resv5[0];
#endif
};
#define RDBF_LAST 0x1 /* last drive available */
#define RDBF_LASTLUN 0x2 /* last LUN available */
#define RDBF_LASTUNIT 0x4 /* last target available */
#define RDBF_NORESELECT 0x8 /* do not use reselect */
#define RDBF_DISKID 0x10 /* disk id is valid ?? */
#define RDBF_CTRLID 0x20 /* ctrl id is valid ?? */
#define RDBF_SYNC 0x40 /* drive supports SCSI synchronous mode */
struct ados_environ {
u_long tabsize; /* 0: environ table size */
u_long sizeblock; /* 1: n long words in a block */
u_long secorg; /* 2: not used must be zero */
u_long numheads; /* 3: number of surfaces */
u_long secperblk; /* 4: must be 1 */
u_long secpertrk; /* 5: blocks per track */
u_long resvblocks; /* 6: reserved blocks at start */
u_long prefac; /* 7: must be 0 */
u_long interleave; /* 8: normally 1 */
u_long lowcyl; /* 9: low cylinder of partition */
u_long highcyl; /* 10: upper cylinder of partition */
u_long numbufs; /* 11: ados: number of buffers */
u_long membuftype; /* 12: ados: type of bufmem */
u_long maxtrans; /* 13: maxtrans the ctrlr supports */
u_long mask; /* 14: mask for valid address */
u_long bootpri; /* 15: boot priority for autoboot */
u_long dostype; /* 16: filesystem type */
u_long baud; /* 17: serial handler baud rate */
u_long control; /* 18: control word for fs */
u_long bootblocks; /* 19: blocks containing boot code */
u_long fsize; /* 20: file system block size */
u_long frag; /* 21: allowable frags per block */
u_long cpg; /* 22: cylinders per group */
};
struct partblock {
u_long id; /* 'PART' */
u_long nsumlong; /* number of longs in check sum */
u_long chksum; /* simple additive with wrap checksum */
u_long hostid; /* scsi target of host */
u_long next; /* next in chain */
u_long flags; /* see below */
u_long resv1[3];
u_char partname[32]; /* (BCPL) part name (may not be unique) */
u_long resv2[15];
struct ados_environ e;
#if never_use_secsize
u_long extra[9]; /* 8 for extra added to environ */
#endif
};
#define PBF_BOOTABLE 0x1 /* partition is bootable */
#define PBF_NOMOUNT 0x2 /* partition should be mounted */
struct badblock {
u_long id; /* 'BADB' */
u_long nsumlong; /* number of longs in check sum */
u_long chksum; /* simple additive with wrap checksum */
u_long hostid; /* scsi target of host */
u_long next; /* next in chain */
u_long resv;
struct badblockent {
u_long badblock;
u_long goodblock;
} badtab[0]; /* 61 for secsize == 512 */
};
struct fsblock {
u_long id; /* 'FSHD' */
u_long nsumlong; /* number of longs in check sum */
u_long chksum; /* simple additive with wrap checksum */
u_long hostid; /* scsi target of host */
u_long next; /* next in chain */
u_long flags;
u_long resv1[2];
u_long dostype; /* this is a file system for this type */
u_long version; /* version of this fs */
u_long patchflags; /* describes which functions to replace */
u_long type; /* zero */
u_long task; /* zero */
u_long lock; /* zero */
u_long handler; /* zero */
u_long stacksize; /* to use when loading handler */
u_long priority; /* to run the fs at. */
u_long startup; /* zero */
u_long lsegblocks; /* linked list of lsegblocks of fs code */
u_long globalvec; /* bcpl vector not used mostly */
#if never_use_secsize
u_long resv2[44];
#endif
};
struct lsegblock {
u_long id; /* 'LSEG' */
u_long nsumlong; /* number of longs in check sum */
u_long chksum; /* simple additive with wrap checksum */
u_long hostid; /* scsi target of host */
u_long next; /* next in chain */
u_long loaddata[0]; /* load segment data, 123 for secsize == 512 */
};
#define RDBLOCK_ID 0x5244534b /* 'RDSK' */
#define PARTBLOCK_ID 0x50415254 /* 'PART' */
#define BADBLOCK_ID 0x42414442 /* 'BADB' */
#define FSBLOCK_ID 0x46534844 /* 'FSHD' */
#define LSEGBLOCK_ID 0x4c534547 /* 'LSEG' */
#endif /* _ADOS_RDB_H */
|