| @@ -1,439 +1,439 @@ | | | @@ -1,439 +1,439 @@ |
1 | .\" $NetBSD: disklabel.5,v 1.28 2016/09/11 01:59:10 sevan Exp $ | | 1 | .\" $NetBSD: disklabel.5,v 1.29 2016/10/15 06:23:28 snj Exp $ |
2 | .\" | | 2 | .\" |
3 | .\" Copyright (c) 1987, 1991, 1993 | | 3 | .\" Copyright (c) 1987, 1991, 1993 |
4 | .\" The Regents of the University of California. All rights reserved. | | 4 | .\" The Regents of the University of California. All rights reserved. |
5 | .\" | | 5 | .\" |
6 | .\" This code is derived from software contributed to Berkeley by | | 6 | .\" This code is derived from software contributed to Berkeley by |
7 | .\" Symmetric Computer Systems. | | 7 | .\" Symmetric Computer Systems. |
8 | .\" | | 8 | .\" |
9 | .\" Redistribution and use in source and binary forms, with or without | | 9 | .\" Redistribution and use in source and binary forms, with or without |
10 | .\" modification, are permitted provided that the following conditions | | 10 | .\" modification, are permitted provided that the following conditions |
11 | .\" are met: | | 11 | .\" are met: |
12 | .\" 1. Redistributions of source code must retain the above copyright | | 12 | .\" 1. Redistributions of source code must retain the above copyright |
13 | .\" notice, this list of conditions and the following disclaimer. | | 13 | .\" notice, this list of conditions and the following disclaimer. |
14 | .\" 2. Redistributions in binary form must reproduce the above copyright | | 14 | .\" 2. Redistributions in binary form must reproduce the above copyright |
15 | .\" notice, this list of conditions and the following disclaimer in the | | 15 | .\" notice, this list of conditions and the following disclaimer in the |
16 | .\" documentation and/or other materials provided with the distribution. | | 16 | .\" documentation and/or other materials provided with the distribution. |
17 | .\" 3. Neither the name of the University nor the names of its contributors | | 17 | .\" 3. Neither the name of the University nor the names of its contributors |
18 | .\" may be used to endorse or promote products derived from this software | | 18 | .\" may be used to endorse or promote products derived from this software |
19 | .\" without specific prior written permission. | | 19 | .\" without specific prior written permission. |
20 | .\" | | 20 | .\" |
21 | .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | | 21 | .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
22 | .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | | 22 | .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
23 | .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | | 23 | .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
24 | .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | | 24 | .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
25 | .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | | 25 | .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
26 | .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | | 26 | .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
27 | .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | | 27 | .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
28 | .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | | 28 | .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
29 | .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | | 29 | .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
30 | .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | | 30 | .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
31 | .\" SUCH DAMAGE. | | 31 | .\" SUCH DAMAGE. |
32 | .\" | | 32 | .\" |
33 | .\" @(#)disklabel.5.5 8.1 (Berkeley) 6/5/93 | | 33 | .\" @(#)disklabel.5.5 8.1 (Berkeley) 6/5/93 |
34 | .\" | | 34 | .\" |
35 | .Dd September 11, 2016 | | 35 | .Dd September 11, 2016 |
36 | .Dt DISKLABEL 5 | | 36 | .Dt DISKLABEL 5 |
37 | .Os | | 37 | .Os |
38 | .Sh NAME | | 38 | .Sh NAME |
39 | .Nm disklabel | | 39 | .Nm disklabel |
40 | .Nd disk pack label | | 40 | .Nd disk pack label |
41 | .Sh SYNOPSIS | | 41 | .Sh SYNOPSIS |
42 | .In sys/disklabel.h | | 42 | .In sys/disklabel.h |
43 | .Sh DESCRIPTION | | 43 | .Sh DESCRIPTION |
44 | Each disk or disk pack on a system may contain a disk label | | 44 | Each disk or disk pack on a system may contain a disk label |
45 | which provides detailed information | | 45 | which provides detailed information |
46 | about the geometry of the disk and the partitions into which the disk | | 46 | about the geometry of the disk and the partitions into which the disk |
47 | is divided. | | 47 | is divided. |
48 | It should be initialized when the disk is formatted, | | 48 | It should be initialized when the disk is formatted, |
49 | and may be changed later with the | | 49 | and may be changed later with the |
50 | .Xr disklabel 8 | | 50 | .Xr disklabel 8 |
51 | program. | | 51 | program. |
52 | This information is used by the system disk driver and by the bootstrap | | 52 | This information is used by the system disk driver and by the bootstrap |
53 | program to determine how to program the drive | | 53 | program to determine how to program the drive |
54 | and where to find the file systems on the disk partitions. | | 54 | and where to find the file systems on the disk partitions. |
55 | Additional information is used by the file system in order | | 55 | Additional information is used by the file system in order |
56 | to use the disk most efficiently and to locate important file system information. | | 56 | to use the disk most efficiently and to locate important file system information. |
57 | The description of each partition contains an identifier for the partition | | 57 | The description of each partition contains an identifier for the partition |
58 | type (standard file system, swap area, etc.). | | 58 | type (standard file system, swap area, etc.). |
59 | The file system updates the in-core copy of the label if it contains | | 59 | The file system updates the in-core copy of the label if it contains |
60 | incomplete information about the file system. | | 60 | incomplete information about the file system. |
61 | .Pp | | 61 | .Pp |
62 | The label is located in the sector number returned by the | | 62 | The label is located in the sector number returned by the |
63 | .Xr getlabelsector 3 | | 63 | .Xr getlabelsector 3 |
64 | function, usually sector 0 where it may be found | | 64 | function, usually sector 0 where it may be found |
65 | without any information about the disk geometry. | | 65 | without any information about the disk geometry. |
66 | It is at an offset (specified by the | | 66 | It is at an offset (specified by the |
67 | .Xr getlabeloffset 3 | | 67 | .Xr getlabeloffset 3 |
68 | function) | | 68 | function) |
69 | from the beginning of the sector, to allow room for the initial bootstrap. | | 69 | from the beginning of the sector, to allow room for the initial bootstrap. |
70 | The disk sector containing the label is normally made read-only | | 70 | The disk sector containing the label is normally made read-only |
71 | so that it is not accidentally overwritten by pack-to-pack copies | | 71 | so that it is not accidentally overwritten by pack-to-pack copies |
72 | or swap operations; | | 72 | or swap operations; |
73 | the | | 73 | the |
74 | .Dv DIOCWLABEL | | 74 | .Dv DIOCWLABEL |
75 | .Xr ioctl 2 , | | 75 | .Xr ioctl 2 , |
76 | which is done as needed by the | | 76 | which is done as needed by the |
77 | .Xr disklabel 8 | | 77 | .Xr disklabel 8 |
78 | program. | | 78 | program. |
79 | .Pp | | 79 | .Pp |
80 | A copy of the in-core label for a disk can be obtained with the | | 80 | A copy of the in-core label for a disk can be obtained with the |
81 | .Dv DIOCGDINFO | | 81 | .Dv DIOCGDINFO |
82 | .Xr ioctl 2 ; | | 82 | .Xr ioctl 2 ; |
83 | this works with a file descriptor for a block or character (``raw'') device | | 83 | this works with a file descriptor for a block or character (``raw'') device |
84 | for any partition of the disk. | | 84 | for any partition of the disk. |
85 | The in-core copy of the label is set by the | | 85 | The in-core copy of the label is set by the |
86 | .Dv DIOCSDINFO | | 86 | .Dv DIOCSDINFO |
87 | .Xr ioctl 2 . | | 87 | .Xr ioctl 2 . |
88 | The offset of a partition cannot generally be changed while it is open, | | 88 | The offset of a partition cannot generally be changed while it is open, |
89 | nor can it be made smaller while it is open. | | 89 | nor can it be made smaller while it is open. |
90 | One exception is that any change is allowed if no label was found | | 90 | One exception is that any change is allowed if no label was found |
91 | on the disk, and the driver was able to construct only a skeletal label | | 91 | on the disk, and the driver was able to construct only a skeletal label |
92 | without partition information. | | 92 | without partition information. |
93 | Finally, the | | 93 | Finally, the |
94 | .Dv DIOCWDINFO | | 94 | .Dv DIOCWDINFO |
95 | .Xr ioctl 2 | | 95 | .Xr ioctl 2 |
96 | operation sets the in-core label and then updates the on-disk label; | | 96 | operation sets the in-core label and then updates the on-disk label; |
97 | there must be an existing label on the disk for this operation to succeed. | | 97 | there must be an existing label on the disk for this operation to succeed. |
98 | Thus, the initial label for a disk or disk pack must be installed | | 98 | Thus, the initial label for a disk or disk pack must be installed |
99 | by writing to the raw disk. | | 99 | by writing to the raw disk. |
100 | All of these operations are normally done using | | 100 | All of these operations are normally done using |
101 | .Xr disklabel 8 . | | 101 | .Xr disklabel 8 . |
102 | .Pp | | 102 | .Pp |
103 | The format of the disk label, as specified in | | 103 | The format of the disk label, as specified in |
104 | .Pa sys/disklabel.h , | | 104 | .Pa sys/disklabel.h , |
105 | is | | 105 | is |
106 | .Bd -literal | | 106 | .Bd -literal |
107 | /* | | 107 | /* |
108 | * Disk description table, see disktab(5) | | 108 | * Disk description table, see disktab(5) |
109 | */ | | 109 | */ |
110 | #define _PATH_DISKTAB "/etc/disktab" | | 110 | #define _PATH_DISKTAB "/etc/disktab" |
111 | | | 111 | |
112 | /* | | 112 | /* |
113 | * Each disk has a label which includes information about the hardware | | 113 | * Each disk has a label which includes information about the hardware |
114 | * disk geometry, file system partitions, and drive specific information. | | 114 | * disk geometry, file system partitions, and drive specific information. |
115 | * The location of the label, as well as the number of partitions the | | 115 | * The location of the label, as well as the number of partitions the |
116 | * label can describe and the number of the "whole disk" (raw) | | 116 | * label can describe and the number of the "whole disk" (raw) |
117 | * partition are machine dependent. | | 117 | * partition are machine dependent. |
118 | */ | | 118 | */ |
119 | #include \*[Lt]machine/disklabel.h\*[Gt] | | 119 | #include \*[Lt]machine/disklabel.h\*[Gt] |
120 | | | 120 | |
121 | /* | | 121 | /* |
122 | * The absolute maximum number of disk partitions allowed. | | 122 | * The absolute maximum number of disk partitions allowed. |
123 | * This is the maximum value of MAXPARTITIONS for which 'struct disklabel' | | 123 | * This is the maximum value of MAXPARTITIONS for which 'struct disklabel' |
124 | * is \*[Le] DEV_BSIZE bytes long. If MAXPARTITIONS is greater than this, beware. | | 124 | * is \*[Le] DEV_BSIZE bytes long. If MAXPARTITIONS is greater than this, beware. |
125 | */ | | 125 | */ |
126 | #define MAXMAXPARTITIONS 22 | | 126 | #define MAXMAXPARTITIONS 22 |
127 | #if MAXPARTITIONS \*[Gt] MAXMAXPARTITIONS | | 127 | #if MAXPARTITIONS \*[Gt] MAXMAXPARTITIONS |
128 | #warning beware: MAXPARTITIONS bigger than MAXMAXPARTITIONS | | 128 | #warning beware: MAXPARTITIONS bigger than MAXMAXPARTITIONS |
129 | #endif | | 129 | #endif |
130 | | | 130 | |
131 | | | 131 | |
132 | #define DISKMAGIC ((u_int32_t)0x82564557) /* The disk magic number */ | | 132 | #define DISKMAGIC ((u_int32_t)0x82564557) /* The disk magic number */ |
133 | | | 133 | |
134 | #ifndef _LOCORE | | 134 | #ifndef _LOCORE |
135 | struct disklabel { | | 135 | struct disklabel { |
136 | u_int32_t d_magic; /* the magic number */ | | 136 | u_int32_t d_magic; /* the magic number */ |
137 | u_int16_t d_type; /* drive type */ | | 137 | u_int16_t d_type; /* drive type */ |
138 | u_int16_t d_subtype; /* controller/d_type specific */ | | 138 | u_int16_t d_subtype; /* controller/d_type specific */ |
139 | char d_typename[16]; /* type name, e.g "eagle" */ | | 139 | char d_typename[16]; /* type name, e.g. "eagle" */ |
140 | | | 140 | |
141 | /* | | 141 | /* |
142 | * d_packname contains the pack identifier and is returned when | | 142 | * d_packname contains the pack identifier and is returned when |
143 | * the disklabel is read off the disk or in-core copy. | | 143 | * the disklabel is read off the disk or in-core copy. |
144 | * d_boot0 and d_boot1 are the (optional) names of the | | 144 | * d_boot0 and d_boot1 are the (optional) names of the |
145 | * primary (block 0) and secondary (block 1-15) bootstraps | | 145 | * primary (block 0) and secondary (block 1-15) bootstraps |
146 | * as found in /usr/mdec. These are returned when using | | 146 | * as found in /usr/mdec. These are returned when using |
147 | * getdiskbyname(3) to retrieve the values from /etc/disktab. | | 147 | * getdiskbyname(3) to retrieve the values from /etc/disktab. |
148 | */ | | 148 | */ |
149 | union { | | 149 | union { |
150 | char un_d_packname[16]; /* pack identifier */ | | 150 | char un_d_packname[16]; /* pack identifier */ |
151 | struct { | | 151 | struct { |
152 | char *un_d_boot0; /* primary bootstrap name */ | | 152 | char *un_d_boot0; /* primary bootstrap name */ |
153 | char *un_d_boot1; /* secondary bootstrap name */ | | 153 | char *un_d_boot1; /* secondary bootstrap name */ |
154 | } un_b; | | 154 | } un_b; |
155 | } d_un; | | 155 | } d_un; |
156 | #define d_packname d_un.un_d_packname | | 156 | #define d_packname d_un.un_d_packname |
157 | #define d_boot0 d_un.un_b.un_d_boot0 | | 157 | #define d_boot0 d_un.un_b.un_d_boot0 |
158 | #define d_boot1 d_un.un_b.un_d_boot1 | | 158 | #define d_boot1 d_un.un_b.un_d_boot1 |
159 | | | 159 | |
160 | /* disk geometry: */ | | 160 | /* disk geometry: */ |
161 | u_int32_t d_secsize; /* # of bytes per sector */ | | 161 | u_int32_t d_secsize; /* # of bytes per sector */ |
162 | u_int32_t d_nsectors; /* # of data sectors per track */ | | 162 | u_int32_t d_nsectors; /* # of data sectors per track */ |
163 | u_int32_t d_ntracks; /* # of tracks per cylinder */ | | 163 | u_int32_t d_ntracks; /* # of tracks per cylinder */ |
164 | u_int32_t d_ncylinders; /* # of data cylinders per unit */ | | 164 | u_int32_t d_ncylinders; /* # of data cylinders per unit */ |
165 | u_int32_t d_secpercyl; /* # of data sectors per cylinder */ | | 165 | u_int32_t d_secpercyl; /* # of data sectors per cylinder */ |
166 | u_int32_t d_secperunit; /* # of data sectors per unit */ | | 166 | u_int32_t d_secperunit; /* # of data sectors per unit */ |
167 | | | 167 | |
168 | /* | | 168 | /* |
169 | * Spares (bad sector replacements) below are not counted in | | 169 | * Spares (bad sector replacements) below are not counted in |
170 | * d_nsectors or d_secpercyl. Spare sectors are assumed to | | 170 | * d_nsectors or d_secpercyl. Spare sectors are assumed to |
171 | * be physical sectors which occupy space at the end of each | | 171 | * be physical sectors which occupy space at the end of each |
172 | * track and/or cylinder. | | 172 | * track and/or cylinder. |
173 | */ | | 173 | */ |
174 | u_int16_t d_sparespertrack; /* # of spare sectors per track */ | | 174 | u_int16_t d_sparespertrack; /* # of spare sectors per track */ |
175 | u_int16_t d_sparespercyl; /* # of spare sectors per cylinder */ | | 175 | u_int16_t d_sparespercyl; /* # of spare sectors per cylinder */ |
176 | /* | | 176 | /* |
177 | * Alternative cylinders include maintenance, replacement, | | 177 | * Alternative cylinders include maintenance, replacement, |
178 | * configuration description areas, etc. | | 178 | * configuration description areas, etc. |
179 | */ | | 179 | */ |
180 | u_int32_t d_acylinders; /* # of alt. cylinders per unit */ | | 180 | u_int32_t d_acylinders; /* # of alt. cylinders per unit */ |
181 | | | 181 | |
182 | /* hardware characteristics: */ | | 182 | /* hardware characteristics: */ |
183 | /* | | 183 | /* |
184 | * d_interleave, d_trackskew and d_cylskew describe perturbations | | 184 | * d_interleave, d_trackskew and d_cylskew describe perturbations |
185 | * in the media format used to compensate for a slow controller. | | 185 | * in the media format used to compensate for a slow controller. |
186 | * Interleave is physical sector interleave, set up by the | | 186 | * Interleave is physical sector interleave, set up by the |
187 | * formatter or controller when formatting. When interleaving is | | 187 | * formatter or controller when formatting. When interleaving is |
188 | * in use, logically adjacent sectors are not physically | | 188 | * in use, logically adjacent sectors are not physically |
189 | * contiguous, but instead are separated by some number of | | 189 | * contiguous, but instead are separated by some number of |
190 | * sectors. It is specified as the ratio of physical sectors | | 190 | * sectors. It is specified as the ratio of physical sectors |
191 | * traversed per logical sector. Thus an interleave of 1:1 | | 191 | * traversed per logical sector. Thus an interleave of 1:1 |
192 | * implies contiguous layout, while 2:1 implies that logical | | 192 | * implies contiguous layout, while 2:1 implies that logical |
193 | * sector 0 is separated by one sector from logical sector 1. | | 193 | * sector 0 is separated by one sector from logical sector 1. |
194 | * d_trackskew is the offset of sector 0 on track N relative to | | 194 | * d_trackskew is the offset of sector 0 on track N relative to |
195 | * sector 0 on track N-1 on the same cylinder. Finally, d_cylskew | | 195 | * sector 0 on track N-1 on the same cylinder. Finally, d_cylskew |
196 | * is the offset of sector 0 on cylinder N relative to sector 0 | | 196 | * is the offset of sector 0 on cylinder N relative to sector 0 |
197 | * on cylinder N-1. | | 197 | * on cylinder N-1. |
198 | */ | | 198 | */ |
199 | u_int16_t d_rpm; /* rotational speed */ | | 199 | u_int16_t d_rpm; /* rotational speed */ |
200 | u_int16_t d_interleave; /* hardware sector interleave */ | | 200 | u_int16_t d_interleave; /* hardware sector interleave */ |
201 | u_int16_t d_trackskew; /* sector 0 skew, per track */ | | 201 | u_int16_t d_trackskew; /* sector 0 skew, per track */ |
202 | u_int16_t d_cylskew; /* sector 0 skew, per cylinder */ | | 202 | u_int16_t d_cylskew; /* sector 0 skew, per cylinder */ |
203 | u_int32_t d_headswitch; /* head switch time, usec */ | | 203 | u_int32_t d_headswitch; /* head switch time, usec */ |
204 | u_int32_t d_trkseek; /* track-to-track seek, usec */ | | 204 | u_int32_t d_trkseek; /* track-to-track seek, usec */ |
205 | u_int32_t d_flags; /* generic flags */ | | 205 | u_int32_t d_flags; /* generic flags */ |
206 | #define NDDATA 5 | | 206 | #define NDDATA 5 |
207 | u_int32_t d_drivedata[NDDATA]; /* drive-type specific information */ | | 207 | u_int32_t d_drivedata[NDDATA]; /* drive-type specific information */ |
208 | #define NSPARE 5 | | 208 | #define NSPARE 5 |
209 | u_int32_t d_spare[NSPARE]; /* reserved for future use */ | | 209 | u_int32_t d_spare[NSPARE]; /* reserved for future use */ |
210 | u_int32_t d_magic2; /* the magic number (again) */ | | 210 | u_int32_t d_magic2; /* the magic number (again) */ |
211 | u_int16_t d_checksum; /* xor of data incl. partitions */ | | 211 | u_int16_t d_checksum; /* xor of data incl. partitions */ |
212 | | | 212 | |
213 | /* file system and partition information: */ | | 213 | /* file system and partition information: */ |
214 | u_int16_t d_npartitions; /* number of partitions in following */ | | 214 | u_int16_t d_npartitions; /* number of partitions in following */ |
215 | u_int32_t d_bbsize; /* size of boot area at sn0, bytes */ | | 215 | u_int32_t d_bbsize; /* size of boot area at sn0, bytes */ |
216 | u_int32_t d_sbsize; /* max size of fs superblock, bytes */ | | 216 | u_int32_t d_sbsize; /* max size of fs superblock, bytes */ |
217 | struct partition { /* the partition table */ | | 217 | struct partition { /* the partition table */ |
218 | u_int32_t p_size; /* number of sectors in partition */ | | 218 | u_int32_t p_size; /* number of sectors in partition */ |
219 | u_int32_t p_offset; /* starting sector */ | | 219 | u_int32_t p_offset; /* starting sector */ |
220 | u_int32_t p_fsize; /* file system basic fragment size */ | | 220 | u_int32_t p_fsize; /* file system basic fragment size */ |
221 | u_int8_t p_fstype; /* file system type, see below */ | | 221 | u_int8_t p_fstype; /* file system type, see below */ |
222 | u_int8_t p_frag; /* file system fragments per block */ | | 222 | u_int8_t p_frag; /* file system fragments per block */ |
223 | union { | | 223 | union { |
224 | u_int16_t cpg; /* UFS: FS cylinders per group */ | | 224 | u_int16_t cpg; /* UFS: FS cylinders per group */ |
225 | u_int16_t sgs; /* LFS: FS segment shift */ | | 225 | u_int16_t sgs; /* LFS: FS segment shift */ |
226 | } __partition_u1; | | 226 | } __partition_u1; |
227 | #define p_cpg __partition_u1.cpg | | 227 | #define p_cpg __partition_u1.cpg |
228 | #define p_sgs __partition_u1.sgs | | 228 | #define p_sgs __partition_u1.sgs |
229 | } d_partitions[MAXPARTITIONS]; /* actually may be more */ | | 229 | } d_partitions[MAXPARTITIONS]; /* actually may be more */ |
230 | }; | | 230 | }; |
231 | #else /* _LOCORE */ | | 231 | #else /* _LOCORE */ |
232 | /* | | 232 | /* |
233 | * offsets for asm boot files. | | 233 | * offsets for asm boot files. |
234 | */ | | 234 | */ |
235 | .set d_secsize,40 | | 235 | .set d_secsize,40 |
236 | .set d_nsectors,44 | | 236 | .set d_nsectors,44 |
237 | .set d_ntracks,48 | | 237 | .set d_ntracks,48 |
238 | .set d_ncylinders,52 | | 238 | .set d_ncylinders,52 |
239 | .set d_secpercyl,56 | | 239 | .set d_secpercyl,56 |
240 | .set d_secperunit,60 | | 240 | .set d_secperunit,60 |
241 | .set d_end_,276 /* size of disk label */ | | 241 | .set d_end_,276 /* size of disk label */ |
242 | #endif /* _LOCORE */ | | 242 | #endif /* _LOCORE */ |
243 | | | 243 | |
244 | /* d_type values: */ | | 244 | /* d_type values: */ |
245 | #define DTYPE_SMD 1 /* SMD, XSMD; VAX hp/up */ | | 245 | #define DTYPE_SMD 1 /* SMD, XSMD; VAX hp/up */ |
246 | #define DTYPE_MSCP 2 /* MSCP */ | | 246 | #define DTYPE_MSCP 2 /* MSCP */ |
247 | #define DTYPE_DEC 3 /* other DEC (rk, rl) */ | | 247 | #define DTYPE_DEC 3 /* other DEC (rk, rl) */ |
248 | #define DTYPE_SCSI 4 /* SCSI */ | | 248 | #define DTYPE_SCSI 4 /* SCSI */ |
249 | #define DTYPE_ESDI 5 /* ESDI interface */ | | 249 | #define DTYPE_ESDI 5 /* ESDI interface */ |
250 | #define DTYPE_ST506 6 /* ST506 etc. */ | | 250 | #define DTYPE_ST506 6 /* ST506 etc. */ |
251 | #define DTYPE_HPIB 7 /* CS/80 on HP-IB */ | | 251 | #define DTYPE_HPIB 7 /* CS/80 on HP-IB */ |
252 | #define DTYPE_HPFL 8 /* HP Fiber-link */ | | 252 | #define DTYPE_HPFL 8 /* HP Fiber-link */ |
253 | #define DTYPE_FLOPPY 10 /* floppy */ | | 253 | #define DTYPE_FLOPPY 10 /* floppy */ |
254 | #define DTYPE_CCD 11 /* concatenated disk device */ | | 254 | #define DTYPE_CCD 11 /* concatenated disk device */ |
255 | #define DTYPE_VND 12 /* vnode pseudo-disk */ | | 255 | #define DTYPE_VND 12 /* vnode pseudo-disk */ |
256 | #define DTYPE_ATAPI 13 /* ATAPI */ | | 256 | #define DTYPE_ATAPI 13 /* ATAPI */ |
257 | #define DTYPE_RAID 14 /* RAIDframe */ | | 257 | #define DTYPE_RAID 14 /* RAIDframe */ |
258 | #define DTYPE_LD 15 /* logical disk */ | | 258 | #define DTYPE_LD 15 /* logical disk */ |
259 | #define DTYPE_JFS2 16 /* IBM JFS2 */ | | 259 | #define DTYPE_JFS2 16 /* IBM JFS2 */ |
260 | #define DTYPE_CGD 17 /* cryptographic pseudo-disk */ | | 260 | #define DTYPE_CGD 17 /* cryptographic pseudo-disk */ |
261 | #define DTYPE_VINUM 18 /* vinum volume obsolete */ | | 261 | #define DTYPE_VINUM 18 /* vinum volume obsolete */ |
262 | #define DTYPE_FLASH 19 /* flash memory device */ | | 262 | #define DTYPE_FLASH 19 /* flash memory device */ |
263 | | | 263 | |
264 | #ifdef DKTYPENAMES | | 264 | #ifdef DKTYPENAMES |
265 | static const char *const dktypenames[] = { | | 265 | static const char *const dktypenames[] = { |
266 | "unknown", | | 266 | "unknown", |
267 | "SMD", | | 267 | "SMD", |
268 | "MSCP", | | 268 | "MSCP", |
269 | "old DEC", | | 269 | "old DEC", |
270 | "SCSI", | | 270 | "SCSI", |
271 | "ESDI", | | 271 | "ESDI", |
272 | "ST506", | | 272 | "ST506", |
273 | "HP-IB", | | 273 | "HP-IB", |
274 | "HP-FL", | | 274 | "HP-FL", |
275 | "type 9", | | 275 | "type 9", |
276 | "floppy", | | 276 | "floppy", |
277 | "ccd", | | 277 | "ccd", |
278 | "vnd", | | 278 | "vnd", |
279 | "ATAPI", | | 279 | "ATAPI", |
280 | "RAID", | | 280 | "RAID", |
281 | "ld", | | 281 | "ld", |
282 | "jfs", | | 282 | "jfs", |
283 | "cgd", | | 283 | "cgd", |
284 | "obsolete vinum", | | 284 | "obsolete vinum", |
285 | "flash", | | 285 | "flash", |
286 | NULL | | 286 | NULL |
287 | }; | | 287 | }; |
288 | #define DKMAXTYPES (sizeof(dktypenames) / sizeof(dktypenames[0]) - 1) | | 288 | #define DKMAXTYPES (sizeof(dktypenames) / sizeof(dktypenames[0]) - 1) |
289 | #endif | | 289 | #endif |
290 | | | 290 | |
291 | /* | | 291 | /* |
292 | * Filesystem type and version. | | 292 | * Filesystem type and version. |
293 | * Used to interpret other file system-specific | | 293 | * Used to interpret other file system-specific |
294 | * per-partition information. | | 294 | * per-partition information. |
295 | */ | | 295 | */ |
296 | #define FS_UNUSED 0 /* unused */ | | 296 | #define FS_UNUSED 0 /* unused */ |
297 | #define FS_SWAP 1 /* swap */ | | 297 | #define FS_SWAP 1 /* swap */ |
298 | #define FS_V6 2 /* Sixth Edition */ | | 298 | #define FS_V6 2 /* Sixth Edition */ |
299 | #define FS_V7 3 /* Seventh Edition */ | | 299 | #define FS_V7 3 /* Seventh Edition */ |
300 | #define FS_SYSV 4 /* System V */ | | 300 | #define FS_SYSV 4 /* System V */ |
301 | #define FS_V71K 5 /* V7 with 1K blocks (4.1, 2.9) */ | | 301 | #define FS_V71K 5 /* V7 with 1K blocks (4.1, 2.9) */ |
302 | #define FS_V8 6 /* Eighth Edition, 4K blocks */ | | 302 | #define FS_V8 6 /* Eighth Edition, 4K blocks */ |
303 | #define FS_BSDFFS 7 /* 4.2BSD fast file system */ | | 303 | #define FS_BSDFFS 7 /* 4.2BSD fast file system */ |
304 | #define FS_MSDOS 8 /* MSDOS file system */ | | 304 | #define FS_MSDOS 8 /* MSDOS file system */ |
305 | #define FS_BSDLFS 9 /* 4.4BSD log-structured file system */ | | 305 | #define FS_BSDLFS 9 /* 4.4BSD log-structured file system */ |
306 | #define FS_OTHER 10 /* in use, but unknown/unsupported */ | | 306 | #define FS_OTHER 10 /* in use, but unknown/unsupported */ |
307 | #define FS_HPFS 11 /* OS/2 high-performance file system */ | | 307 | #define FS_HPFS 11 /* OS/2 high-performance file system */ |
308 | #define FS_ISO9660 12 /* ISO 9660, normally CD-ROM */ | | 308 | #define FS_ISO9660 12 /* ISO 9660, normally CD-ROM */ |
309 | #define FS_BOOT 13 /* partition contains bootstrap */ | | 309 | #define FS_BOOT 13 /* partition contains bootstrap */ |
310 | #define FS_ADOS 14 /* AmigaDOS fast file system */ | | 310 | #define FS_ADOS 14 /* AmigaDOS fast file system */ |
311 | #define FS_HFS 15 /* Macintosh HFS */ | | 311 | #define FS_HFS 15 /* Macintosh HFS */ |
312 | #define FS_FILECORE 16 /* Acorn Filecore Filing System */ | | 312 | #define FS_FILECORE 16 /* Acorn Filecore Filing System */ |
313 | #define FS_EX2FS 17 /* Linux Extended 2 file system */ | | 313 | #define FS_EX2FS 17 /* Linux Extended 2 file system */ |
314 | #define FS_NTFS 18 /* Windows/NT file system */ | | 314 | #define FS_NTFS 18 /* Windows/NT file system */ |
315 | #define FS_RAID 19 /* RAIDframe component */ | | 315 | #define FS_RAID 19 /* RAIDframe component */ |
316 | #define FS_CCD 20 /* concatenated disk component */ | | 316 | #define FS_CCD 20 /* concatenated disk component */ |
317 | #define FS_JFS2 21 /* IBM JFS2 */ | | 317 | #define FS_JFS2 21 /* IBM JFS2 */ |
318 | #define FS_APPLEUFS 22 /* Apple UFS */ | | 318 | #define FS_APPLEUFS 22 /* Apple UFS */ |
319 | #define FS_VINUM 23 /* Vinum */ | | 319 | #define FS_VINUM 23 /* Vinum */ |
320 | | | 320 | |
321 | #ifdef FSTYPENAMES | | 321 | #ifdef FSTYPENAMES |
322 | static const char *const fstypenames[] = { | | 322 | static const char *const fstypenames[] = { |
323 | "unused", | | 323 | "unused", |
324 | "swap", | | 324 | "swap", |
325 | "Version 6", | | 325 | "Version 6", |
326 | "Version 7", | | 326 | "Version 7", |
327 | "System V", | | 327 | "System V", |
328 | "4.1BSD", | | 328 | "4.1BSD", |
329 | "Eighth Edition", | | 329 | "Eighth Edition", |
330 | "4.2BSD", | | 330 | "4.2BSD", |
331 | "MSDOS", | | 331 | "MSDOS", |
332 | "4.4LFS", | | 332 | "4.4LFS", |
333 | "unknown", | | 333 | "unknown", |
334 | "HPFS", | | 334 | "HPFS", |
335 | "ISO9660", | | 335 | "ISO9660", |
336 | "boot", | | 336 | "boot", |
337 | "ADOS", | | 337 | "ADOS", |
338 | "HFS", | | 338 | "HFS", |
339 | "FILECORE", | | 339 | "FILECORE", |
340 | "Linux Ext2", | | 340 | "Linux Ext2", |
341 | "NTFS", | | 341 | "NTFS", |
342 | "RAID", | | 342 | "RAID", |
343 | "ccd", | | 343 | "ccd", |
344 | "jfs", | | 344 | "jfs", |
345 | "Apple UFS", | | 345 | "Apple UFS", |
346 | "obsolete vinum", | | 346 | "obsolete vinum", |
347 | NULL | | 347 | NULL |
348 | }; | | 348 | }; |
349 | #define FSMAXTYPES (sizeof(fstypenames) / sizeof(fstypenames[0]) - 1) | | 349 | #define FSMAXTYPES (sizeof(fstypenames) / sizeof(fstypenames[0]) - 1) |
350 | #endif | | 350 | #endif |
351 | | | 351 | |
352 | /* | | 352 | /* |
353 | * flags shared by various drives: | | 353 | * flags shared by various drives: |
354 | */ | | 354 | */ |
355 | #define D_REMOVABLE 0x01 /* removable media */ | | 355 | #define D_REMOVABLE 0x01 /* removable media */ |
356 | #define D_ECC 0x02 /* supports ECC */ | | 356 | #define D_ECC 0x02 /* supports ECC */ |
357 | #define D_BADSECT 0x04 /* supports bad sector forw. */ | | 357 | #define D_BADSECT 0x04 /* supports bad sector forw. */ |
358 | #define D_RAMDISK 0x08 /* disk emulator */ | | 358 | #define D_RAMDISK 0x08 /* disk emulator */ |
359 | #define D_CHAIN 0x10 /* can do back-back transfers */ | | 359 | #define D_CHAIN 0x10 /* can do back-back transfers */ |
360 | | | 360 | |
361 | /* | | 361 | /* |
362 | * Drive data for SMD. | | 362 | * Drive data for SMD. |
363 | */ | | 363 | */ |
364 | | | 364 | |
365 | #define d_smdflags d_drivedata[0] | | 365 | #define d_smdflags d_drivedata[0] |
366 | #define D_SSE 0x1 /* supports skip sectoring */ | | 366 | #define D_SSE 0x1 /* supports skip sectoring */ |
367 | #define d_mindist d_drivedata[1] | | 367 | #define d_mindist d_drivedata[1] |
368 | #define d_maxdist d_drivedata[2] | | 368 | #define d_maxdist d_drivedata[2] |
369 | #define d_sdist d_drivedata[3] | | 369 | #define d_sdist d_drivedata[3] |
370 | | | 370 | |
371 | /* | | 371 | /* |
372 | * Drive data for ST506. | | 372 | * Drive data for ST506. |
373 | */ | | 373 | */ |
374 | #define d_precompcyl d_drivedata[0] | | 374 | #define d_precompcyl d_drivedata[0] |
375 | #define d_gap3 d_drivedata[1] /* used only when formatting */ | | 375 | #define d_gap3 d_drivedata[1] /* used only when formatting */ |
376 | | | 376 | |
377 | /* | | 377 | /* |
378 | * Drive data for SCSI. | | 378 | * Drive data for SCSI. |
379 | */ | | 379 | */ |
380 | #define d_blind d_drivedata[0] | | 380 | #define d_blind d_drivedata[0] |
381 | | | 381 | |
382 | #ifndef _LOCORE | | 382 | #ifndef _LOCORE |
383 | /* | | 383 | /* |
384 | * Structure used to perform a format or other raw operation, | | 384 | * Structure used to perform a format or other raw operation, |
385 | * returning data and/or register values. Register identification | | 385 | * returning data and/or register values. Register identification |
386 | * and format are device- and driver-dependent. | | 386 | * and format are device- and driver-dependent. |
387 | */ | | 387 | */ |
388 | struct format_op { | | 388 | struct format_op { |
389 | char *df_buf; | | 389 | char *df_buf; |
390 | int df_count; /* value-result */ | | 390 | int df_count; /* value-result */ |
391 | daddr_t df_startblk; | | 391 | daddr_t df_startblk; |
392 | int df_reg[8]; /* result */ | | 392 | int df_reg[8]; /* result */ |
393 | }; | | 393 | }; |
394 | | | 394 | |
395 | /* | | 395 | /* |
396 | * Structure used internally to retrieve information about a partition | | 396 | * Structure used internally to retrieve information about a partition |
397 | * on a disk. | | 397 | * on a disk. |
398 | */ | | 398 | */ |
399 | struct partinfo { | | 399 | struct partinfo { |
400 | struct disklabel *disklab; | | 400 | struct disklabel *disklab; |
401 | struct partition *part; | | 401 | struct partition *part; |
402 | }; | | 402 | }; |
403 | .Ed | | 403 | .Ed |
404 | .Pp | | 404 | .Pp |
405 | Disk specific ioctls are defined in | | 405 | Disk specific ioctls are defined in |
406 | .Pa sys/dkio.h . | | 406 | .Pa sys/dkio.h . |
407 | .Bd -literal | | 407 | .Bd -literal |
408 | .Pp | | 408 | .Pp |
409 | /* | | 409 | /* |
410 | * Disk-specific ioctls. | | 410 | * Disk-specific ioctls. |
411 | */ | | 411 | */ |
412 | /* get and set disklabel; DIOCGPART used internally */ | | 412 | /* get and set disklabel; DIOCGPART used internally */ |
413 | #define DIOCGDINFO _IOR('d', 101, struct disklabel) /* get */ | | 413 | #define DIOCGDINFO _IOR('d', 101, struct disklabel) /* get */ |
414 | #define DIOCSDINFO _IOW('d', 102, struct disklabel) /* set */ | | 414 | #define DIOCSDINFO _IOW('d', 102, struct disklabel) /* set */ |
415 | #define DIOCWDINFO _IOW('d', 103, struct disklabel) /* set, update disk */ | | 415 | #define DIOCWDINFO _IOW('d', 103, struct disklabel) /* set, update disk */ |
416 | #define DIOCGPART _IOW('d', 104, struct partinfo) /* get partition */ | | 416 | #define DIOCGPART _IOW('d', 104, struct partinfo) /* get partition */ |
417 | | | 417 | |
418 | /* do format operation, read or write */ | | 418 | /* do format operation, read or write */ |
419 | #define DIOCRFORMAT _IOWR('d', 105, struct format_op) | | 419 | #define DIOCRFORMAT _IOWR('d', 105, struct format_op) |
420 | #define DIOCWFORMAT _IOWR('d', 106, struct format_op) | | 420 | #define DIOCWFORMAT _IOWR('d', 106, struct format_op) |
421 | | | 421 | |
422 | #define DIOCSSTEP _IOW('d', 107, int) /* set step rate */ | | 422 | #define DIOCSSTEP _IOW('d', 107, int) /* set step rate */ |
423 | #define DIOCSRETRIES _IOW('d', 108, int) /* set # of retries */ | | 423 | #define DIOCSRETRIES _IOW('d', 108, int) /* set # of retries */ |
424 | #define DIOCKLABEL _IOW('d', 119, int) /* keep/drop label on close? */ | | 424 | #define DIOCKLABEL _IOW('d', 119, int) /* keep/drop label on close? */ |
425 | #define DIOCWLABEL _IOW('d', 109, int) /* write en/disable label */ | | 425 | #define DIOCWLABEL _IOW('d', 109, int) /* write en/disable label */ |
426 | | | 426 | |
427 | #define DIOCSBAD _IOW('d', 110, struct dkbad) /* set kernel dkbad */ | | 427 | #define DIOCSBAD _IOW('d', 110, struct dkbad) /* set kernel dkbad */ |
428 | #define DIOCEJECT _IOW('d', 112, int) /* eject removable disk */ | | 428 | #define DIOCEJECT _IOW('d', 112, int) /* eject removable disk */ |
429 | #define DIOCLOCK _IOW('d', 113, int) /* lock/unlock pack */ | | 429 | #define DIOCLOCK _IOW('d', 113, int) /* lock/unlock pack */ |
430 | | | 430 | |
431 | /* get default label, clear label */ | | 431 | /* get default label, clear label */ |
432 | #define DIOCGDEFLABEL _IOR('d', 114, struct disklabel) | | 432 | #define DIOCGDEFLABEL _IOR('d', 114, struct disklabel) |
433 | #define DIOCCLRLABEL _IO('d', 115) | | 433 | #define DIOCCLRLABEL _IO('d', 115) |
434 | .Ed | | 434 | .Ed |
435 | .Sh SEE ALSO | | 435 | .Sh SEE ALSO |
436 | .Xr disktab 5 , | | 436 | .Xr disktab 5 , |
437 | .Xr disklabel 8 , | | 437 | .Xr disklabel 8 , |
438 | .Xr dkctl 8 | | 438 | .Xr dkctl 8 |
439 | .\" .Sh HISTORY | | 439 | .\" .Sh HISTORY |