<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> <title>Ubixos: disklabel.h Source File</title> <link href="doxygen.css" rel="stylesheet" type="text/css"> </head><body> <!-- Generated by Doxygen 1.3.3 --> <h1>disklabel.h</h1><div class="fragment"><pre>00001 <span class="comment">/*</span> 00002 <span class="comment"> * Copyright (c) 1987, 1988, 1993</span> 00003 <span class="comment"> * The Regents of the University of California. All rights reserved.</span> 00004 <span class="comment"> *</span> 00005 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span> 00006 <span class="comment"> * modification, are permitted provided that the following conditions</span> 00007 <span class="comment"> * are met:</span> 00008 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span> 00009 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span> 00010 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span> 00011 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span> 00012 <span class="comment"> * documentation and/or other materials provided with the distribution.</span> 00013 <span class="comment"> * 3. All advertising materials mentioning features or use of this software</span> 00014 <span class="comment"> * must display the following acknowledgement:</span> 00015 <span class="comment"> * This product includes software developed by the University of</span> 00016 <span class="comment"> * California, Berkeley and its contributors.</span> 00017 <span class="comment"> * 4. Neither the name of the University nor the names of its contributors</span> 00018 <span class="comment"> * may be used to endorse or promote products derived from this software</span> 00019 <span class="comment"> * without specific prior written permission.</span> 00020 <span class="comment"> *</span> 00021 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND</span> 00022 <span class="comment"> * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span> 00023 <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span> 00024 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE</span> 00025 <span class="comment"> * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span> 00026 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS</span> 00027 <span class="comment"> * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</span> 00028 <span class="comment"> * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT</span> 00029 <span class="comment"> * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY</span> 00030 <span class="comment"> * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF</span> 00031 <span class="comment"> * SUCH DAMAGE.</span> 00032 <span class="comment"> *</span> 00033 <span class="comment"> * @(#)disklabel.h 8.2 (Berkeley) 7/10/94</span> 00034 <span class="comment"> * $FreeBSD: src/sys/sys/disklabel.h,v 1.49.2.7 2001/05/27 05:58:26 jkh Exp $</span> 00035 <span class="comment"> */</span> 00036 00037 <span class="preprocessor">#ifndef _SYS_DISKLABEL_H_</span> 00038 <span class="preprocessor"></span><span class="preprocessor">#define _SYS_DISKLABEL_H_</span> 00039 <span class="preprocessor"></span> 00040 <span class="preprocessor">#ifndef _KERNEL</span> 00041 <span class="preprocessor"></span><span class="preprocessor">#include <sys/types.h></span> 00042 <span class="preprocessor">#endif</span> 00043 <span class="preprocessor"></span><span class="preprocessor">#include <sys/ioccom.h></span> 00044 00045 <span class="comment">/*</span> 00046 <span class="comment"> * Disk description table, see disktab(5)</span> 00047 <span class="comment"> */</span> 00048 <span class="preprocessor">#define _PATH_DISKTAB "/etc/disktab"</span> 00049 <span class="preprocessor"></span><span class="preprocessor">#define DISKTAB "/etc/disktab" </span><span class="comment">/* deprecated */</span> 00050 00051 <span class="comment">/*</span> 00052 <span class="comment"> * Each disk has a label which includes information about the hardware</span> 00053 <span class="comment"> * disk geometry, filesystem partitions, and drive specific information.</span> 00054 <span class="comment"> * The label is in block 0 or 1, possibly offset from the beginning</span> 00055 <span class="comment"> * to leave room for a bootstrap, etc.</span> 00056 <span class="comment"> */</span> 00057 00058 <span class="comment">/* XXX these should be defined per controller (or drive) elsewhere, not here! */</span> 00059 <span class="preprocessor">#ifdef __i386__</span> 00060 <span class="preprocessor"></span><span class="preprocessor">#define LABELSECTOR 1 </span><span class="comment">/* sector containing label */</span> 00061 <span class="preprocessor">#define LABELOFFSET 0 </span><span class="comment">/* offset of label in sector */</span> 00062 <span class="preprocessor">#endif</span> 00063 <span class="preprocessor"></span> 00064 <span class="preprocessor">#ifdef __alpha__</span> 00065 <span class="preprocessor"></span><span class="preprocessor">#define LABELSECTOR 0</span> 00066 <span class="preprocessor"></span><span class="preprocessor">#define LABELOFFSET 64</span> 00067 <span class="preprocessor"></span><span class="preprocessor">#endif</span> 00068 <span class="preprocessor"></span> 00069 <span class="preprocessor">#ifndef LABELSECTOR</span> 00070 <span class="preprocessor"></span><span class="preprocessor">#define LABELSECTOR 0 </span><span class="comment">/* sector containing label */</span> 00071 <span class="preprocessor">#endif</span> 00072 <span class="preprocessor"></span> 00073 <span class="preprocessor">#ifndef LABELOFFSET</span> 00074 <span class="preprocessor"></span><span class="preprocessor">#define LABELOFFSET 64 </span><span class="comment">/* offset of label in sector */</span> 00075 <span class="preprocessor">#endif</span> 00076 <span class="preprocessor"></span> 00077 <span class="preprocessor">#define DISKMAGIC ((u_int32_t)0x82564557) </span><span class="comment">/* The disk magic number */</span> 00078 <span class="preprocessor">#ifndef MAXPARTITIONS</span> 00079 <span class="preprocessor"></span><span class="preprocessor">#define MAXPARTITIONS 8</span> 00080 <span class="preprocessor"></span><span class="preprocessor">#endif</span> 00081 <span class="preprocessor"></span> 00082 <span class="preprocessor">#define LABEL_PART 2 </span><span class="comment">/* partition containing label */</span> 00083 <span class="preprocessor">#define RAW_PART 2 </span><span class="comment">/* partition containing whole disk */</span> 00084 <span class="preprocessor">#define SWAP_PART 1 </span><span class="comment">/* partition normally containing swap */</span> 00085 00086 <span class="preprocessor">#ifndef LOCORE</span> 00087 <span class="preprocessor"></span><span class="keyword">struct </span>disklabel { 00088 u_int32_t d_magic; <span class="comment">/* the magic number */</span> 00089 u_int16_t d_type; <span class="comment">/* drive type */</span> 00090 u_int16_t d_subtype; <span class="comment">/* controller/d_type specific */</span> 00091 <span class="keywordtype">char</span> d_typename[16]; <span class="comment">/* type name, e.g. "eagle" */</span> 00092 00093 <span class="comment">/* </span> 00094 <span class="comment"> * d_packname contains the pack identifier and is returned when</span> 00095 <span class="comment"> * the disklabel is read off the disk or in-core copy.</span> 00096 <span class="comment"> * d_boot0 and d_boot1 are the (optional) names of the</span> 00097 <span class="comment"> * primary (block 0) and secondary (block 1-15) bootstraps</span> 00098 <span class="comment"> * as found in /boot. These are returned when using</span> 00099 <span class="comment"> * getdiskbyname(3) to retrieve the values from /etc/disktab.</span> 00100 <span class="comment"> */</span> 00101 <span class="keyword">union </span>{ 00102 <span class="keywordtype">char</span> un_d_packname[16]; <span class="comment">/* pack identifier */</span> 00103 <span class="keyword">struct </span>{ 00104 <span class="keywordtype">char</span> *un_d_boot0; <span class="comment">/* primary bootstrap name */</span> 00105 <span class="keywordtype">char</span> *un_d_boot1; <span class="comment">/* secondary bootstrap name */</span> 00106 } un_b; 00107 } d_un; 00108 <span class="preprocessor">#define d_packname d_un.un_d_packname</span> 00109 <span class="preprocessor"></span><span class="preprocessor">#define d_boot0 d_un.un_b.un_d_boot0</span> 00110 <span class="preprocessor"></span><span class="preprocessor">#define d_boot1 d_un.un_b.un_d_boot1</span> 00111 <span class="preprocessor"></span> 00112 <span class="comment">/* disk geometry: */</span> 00113 u_int32_t d_secsize; <span class="comment">/* # of bytes per sector */</span> 00114 u_int32_t d_nsectors; <span class="comment">/* # of data sectors per track */</span> 00115 u_int32_t d_ntracks; <span class="comment">/* # of tracks per cylinder */</span> 00116 u_int32_t d_ncylinders; <span class="comment">/* # of data cylinders per unit */</span> 00117 u_int32_t d_secpercyl; <span class="comment">/* # of data sectors per cylinder */</span> 00118 u_int32_t d_secperunit; <span class="comment">/* # of data sectors per unit */</span> 00119 00120 <span class="comment">/*</span> 00121 <span class="comment"> * Spares (bad sector replacements) below are not counted in</span> 00122 <span class="comment"> * d_nsectors or d_secpercyl. Spare sectors are assumed to</span> 00123 <span class="comment"> * be physical sectors which occupy space at the end of each</span> 00124 <span class="comment"> * track and/or cylinder.</span> 00125 <span class="comment"> */</span> 00126 u_int16_t d_sparespertrack; <span class="comment">/* # of spare sectors per track */</span> 00127 u_int16_t d_sparespercyl; <span class="comment">/* # of spare sectors per cylinder */</span> 00128 <span class="comment">/*</span> 00129 <span class="comment"> * Alternate cylinders include maintenance, replacement, configuration</span> 00130 <span class="comment"> * description areas, etc.</span> 00131 <span class="comment"> */</span> 00132 u_int32_t d_acylinders; <span class="comment">/* # of alt. cylinders per unit */</span> 00133 00134 <span class="comment">/* hardware characteristics: */</span> 00135 <span class="comment">/*</span> 00136 <span class="comment"> * d_interleave, d_trackskew and d_cylskew describe perturbations</span> 00137 <span class="comment"> * in the media format used to compensate for a slow controller.</span> 00138 <span class="comment"> * Interleave is physical sector interleave, set up by the</span> 00139 <span class="comment"> * formatter or controller when formatting. When interleaving is</span> 00140 <span class="comment"> * in use, logically adjacent sectors are not physically</span> 00141 <span class="comment"> * contiguous, but instead are separated by some number of</span> 00142 <span class="comment"> * sectors. It is specified as the ratio of physical sectors</span> 00143 <span class="comment"> * traversed per logical sector. Thus an interleave of 1:1</span> 00144 <span class="comment"> * implies contiguous layout, while 2:1 implies that logical</span> 00145 <span class="comment"> * sector 0 is separated by one sector from logical sector 1.</span> 00146 <span class="comment"> * d_trackskew is the offset of sector 0 on track N relative to</span> 00147 <span class="comment"> * sector 0 on track N-1 on the same cylinder. Finally, d_cylskew</span> 00148 <span class="comment"> * is the offset of sector 0 on cylinder N relative to sector 0</span> 00149 <span class="comment"> * on cylinder N-1.</span> 00150 <span class="comment"> */</span> 00151 u_int16_t d_rpm; <span class="comment">/* rotational speed */</span> 00152 u_int16_t d_interleave; <span class="comment">/* hardware sector interleave */</span> 00153 u_int16_t d_trackskew; <span class="comment">/* sector 0 skew, per track */</span> 00154 u_int16_t d_cylskew; <span class="comment">/* sector 0 skew, per cylinder */</span> 00155 u_int32_t d_headswitch; <span class="comment">/* head switch time, usec */</span> 00156 u_int32_t d_trkseek; <span class="comment">/* track-to-track seek, usec */</span> 00157 u_int32_t d_flags; <span class="comment">/* generic flags */</span> 00158 <span class="preprocessor">#define NDDATA 5</span> 00159 <span class="preprocessor"></span> u_int32_t d_drivedata[NDDATA]; <span class="comment">/* drive-type specific information */</span> 00160 <span class="preprocessor">#define NSPARE 5</span> 00161 <span class="preprocessor"></span> u_int32_t d_spare[NSPARE]; <span class="comment">/* reserved for future use */</span> 00162 u_int32_t d_magic2; <span class="comment">/* the magic number (again) */</span> 00163 u_int16_t d_checksum; <span class="comment">/* xor of data incl. partitions */</span> 00164 00165 <span class="comment">/* filesystem and partition information: */</span> 00166 u_int16_t d_npartitions; <span class="comment">/* number of partitions in following */</span> 00167 u_int32_t d_bbsize; <span class="comment">/* size of boot area at sn0, bytes */</span> 00168 u_int32_t d_sbsize; <span class="comment">/* max size of fs superblock, bytes */</span> 00169 <span class="keyword">struct </span>partition { <span class="comment">/* the partition table */</span> 00170 u_int32_t p_size; <span class="comment">/* number of sectors in partition */</span> 00171 u_int32_t p_offset; <span class="comment">/* starting sector */</span> 00172 u_int32_t p_fsize; <span class="comment">/* filesystem basic fragment size */</span> 00173 u_int8_t p_fstype; <span class="comment">/* filesystem type, see below */</span> 00174 u_int8_t p_frag; <span class="comment">/* filesystem fragments per block */</span> 00175 <span class="keyword">union </span>{ 00176 u_int16_t cpg; <span class="comment">/* UFS: FS cylinders per group */</span> 00177 u_int16_t sgs; <span class="comment">/* LFS: FS segment shift */</span> 00178 } __partition_u1; 00179 <span class="preprocessor">#define p_cpg __partition_u1.cpg</span> 00180 <span class="preprocessor"></span><span class="preprocessor">#define p_sgs __partition_u1.sgs</span> 00181 <span class="preprocessor"></span> } d_partitions[MAXPARTITIONS]; <span class="comment">/* actually may be more */</span> 00182 }; 00183 00184 <span class="keyword">static</span> u_int16_t dkcksum(<span class="keyword">struct</span> disklabel *lp); 00185 00186 <span class="keyword">static</span> __inline u_int16_t 00187 dkcksum(<span class="keyword">struct</span> disklabel *lp) 00188 { 00189 u_int16_t *start, *end; 00190 u_int16_t sum = 0; 00191 00192 start = (u_int16_t *)lp; 00193 end = (u_int16_t *)&lp->d_partitions[lp->d_npartitions]; 00194 <span class="keywordflow">while</span> (start < end) 00195 sum ^= *start++; 00196 <span class="keywordflow">return</span> (sum); 00197 } 00198 00199 <span class="preprocessor">#else </span><span class="comment">/* LOCORE */</span> 00200 <span class="comment">/*</span> 00201 <span class="comment"> * offsets for asm boot files.</span> 00202 <span class="comment"> */</span> 00203 .set d_secsize,40 00204 .set d_nsectors,44 00205 .set d_ntracks,48 00206 .set d_ncylinders,52 00207 .set d_secpercyl,56 00208 .set d_secperunit,60 00209 .set d_end_,276 <span class="comment">/* size of disk label */</span> 00210 <span class="preprocessor">#endif </span><span class="comment">/* LOCORE */</span> 00211 00212 <span class="comment">/* d_type values: */</span> 00213 <span class="preprocessor">#define DTYPE_SMD 1 </span><span class="comment">/* SMD, XSMD; VAX hp/up */</span> 00214 <span class="preprocessor">#define DTYPE_MSCP 2 </span><span class="comment">/* MSCP */</span> 00215 <span class="preprocessor">#define DTYPE_DEC 3 </span><span class="comment">/* other DEC (rk, rl) */</span> 00216 <span class="preprocessor">#define DTYPE_SCSI 4 </span><span class="comment">/* SCSI */</span> 00217 <span class="preprocessor">#define DTYPE_ESDI 5 </span><span class="comment">/* ESDI interface */</span> 00218 <span class="preprocessor">#define DTYPE_ST506 6 </span><span class="comment">/* ST506 etc. */</span> 00219 <span class="preprocessor">#define DTYPE_HPIB 7 </span><span class="comment">/* CS/80 on HP-IB */</span> 00220 <span class="preprocessor">#define DTYPE_HPFL 8 </span><span class="comment">/* HP Fiber-link */</span> 00221 <span class="preprocessor">#define DTYPE_FLOPPY 10 </span><span class="comment">/* floppy */</span> 00222 <span class="preprocessor">#define DTYPE_CCD 11 </span><span class="comment">/* concatenated disk */</span> 00223 <span class="preprocessor">#define DTYPE_VINUM 12 </span><span class="comment">/* vinum volume */</span> 00224 <span class="preprocessor">#define DTYPE_DOC2K 13 </span><span class="comment">/* Msys DiskOnChip */</span> 00225 00226 <span class="preprocessor">#if defined(PC98) && !defined(PC98_ATCOMPAT)</span> 00227 <span class="preprocessor"></span><span class="preprocessor">#define DSTYPE_SEC256 0x80 </span><span class="comment">/* physical sector size=256 */</span> 00228 <span class="preprocessor">#endif</span> 00229 <span class="preprocessor"></span> 00230 <span class="preprocessor">#ifdef DKTYPENAMES</span> 00231 <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">char</span> *dktypenames[] = { 00232 <span class="stringliteral">"unknown"</span>, 00233 <span class="stringliteral">"SMD"</span>, 00234 <span class="stringliteral">"MSCP"</span>, 00235 <span class="stringliteral">"old DEC"</span>, 00236 <span class="stringliteral">"SCSI"</span>, 00237 <span class="stringliteral">"ESDI"</span>, 00238 <span class="stringliteral">"ST506"</span>, 00239 <span class="stringliteral">"HP-IB"</span>, 00240 <span class="stringliteral">"HP-FL"</span>, 00241 <span class="stringliteral">"type 9"</span>, 00242 <span class="stringliteral">"floppy"</span>, 00243 <span class="stringliteral">"CCD"</span>, 00244 <span class="stringliteral">"Vinum"</span>, 00245 <span class="stringliteral">"DOC2K"</span>, 00246 NULL 00247 }; 00248 <span class="preprocessor">#define DKMAXTYPES (sizeof(dktypenames) / sizeof(dktypenames[0]) - 1)</span> 00249 <span class="preprocessor"></span><span class="preprocessor">#endif</span> 00250 <span class="preprocessor"></span> 00251 <span class="comment">/*</span> 00252 <span class="comment"> * Filesystem type and version.</span> 00253 <span class="comment"> * Used to interpret other filesystem-specific</span> 00254 <span class="comment"> * per-partition information.</span> 00255 <span class="comment"> */</span> 00256 <span class="preprocessor">#define FS_UNUSED 0 </span><span class="comment">/* unused */</span> 00257 <span class="preprocessor">#define FS_SWAP 1 </span><span class="comment">/* swap */</span> 00258 <span class="preprocessor">#define FS_V6 2 </span><span class="comment">/* Sixth Edition */</span> 00259 <span class="preprocessor">#define FS_V7 3 </span><span class="comment">/* Seventh Edition */</span> 00260 <span class="preprocessor">#define FS_SYSV 4 </span><span class="comment">/* System V */</span> 00261 <span class="preprocessor">#define FS_V71K 5 </span><span class="comment">/* V7 with 1K blocks (4.1, 2.9) */</span> 00262 <span class="preprocessor">#define FS_V8 6 </span><span class="comment">/* Eighth Edition, 4K blocks */</span> 00263 <span class="preprocessor">#define FS_BSDFFS 7 </span><span class="comment">/* 4.2BSD fast file system */</span> 00264 <span class="preprocessor">#define FS_MSDOS 8 </span><span class="comment">/* MSDOS file system */</span> 00265 <span class="preprocessor">#define FS_BSDLFS 9 </span><span class="comment">/* 4.4BSD log-structured file system */</span> 00266 <span class="preprocessor">#define FS_OTHER 10 </span><span class="comment">/* in use, but unknown/unsupported */</span> 00267 <span class="preprocessor">#define FS_HPFS 11 </span><span class="comment">/* OS/2 high-performance file system */</span> 00268 <span class="preprocessor">#define FS_ISO9660 12 </span><span class="comment">/* ISO 9660, normally CD-ROM */</span> 00269 <span class="preprocessor">#define FS_BOOT 13 </span><span class="comment">/* partition contains bootstrap */</span> 00270 <span class="preprocessor">#define FS_VINUM 14 </span><span class="comment">/* Vinum drive */</span> 00271 00272 <span class="preprocessor">#ifdef DKTYPENAMES</span> 00273 <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">char</span> *fstypenames[] = { 00274 <span class="stringliteral">"unused"</span>, 00275 <span class="stringliteral">"swap"</span>, 00276 <span class="stringliteral">"Version 6"</span>, 00277 <span class="stringliteral">"Version 7"</span>, 00278 <span class="stringliteral">"System V"</span>, 00279 <span class="stringliteral">"4.1BSD"</span>, 00280 <span class="stringliteral">"Eighth Edition"</span>, 00281 <span class="stringliteral">"4.2BSD"</span>, 00282 <span class="stringliteral">"MSDOS"</span>, 00283 <span class="stringliteral">"4.4LFS"</span>, 00284 <span class="stringliteral">"unknown"</span>, 00285 <span class="stringliteral">"HPFS"</span>, 00286 <span class="stringliteral">"ISO9660"</span>, 00287 <span class="stringliteral">"boot"</span>, 00288 <span class="stringliteral">"vinum"</span>, 00289 NULL 00290 }; 00291 <span class="preprocessor">#define FSMAXTYPES (sizeof(fstypenames) / sizeof(fstypenames[0]) - 1)</span> 00292 <span class="preprocessor"></span><span class="preprocessor">#endif</span> 00293 <span class="preprocessor"></span> 00294 <span class="comment">/*</span> 00295 <span class="comment"> * flags shared by various drives:</span> 00296 <span class="comment"> */</span> 00297 <span class="preprocessor">#define D_REMOVABLE 0x01 </span><span class="comment">/* removable media */</span> 00298 <span class="preprocessor">#define D_ECC 0x02 </span><span class="comment">/* supports ECC */</span> 00299 <span class="preprocessor">#define D_BADSECT 0x04 </span><span class="comment">/* supports bad sector forw. */</span> 00300 <span class="preprocessor">#define D_RAMDISK 0x08 </span><span class="comment">/* disk emulator */</span> 00301 <span class="preprocessor">#define D_CHAIN 0x10 </span><span class="comment">/* can do back-back transfers */</span> 00302 00303 <span class="comment">/*</span> 00304 <span class="comment"> * Drive data for SMD.</span> 00305 <span class="comment"> */</span> 00306 <span class="preprocessor">#define d_smdflags d_drivedata[0]</span> 00307 <span class="preprocessor"></span><span class="preprocessor">#define D_SSE 0x1 </span><span class="comment">/* supports skip sectoring */</span> 00308 <span class="preprocessor">#define d_mindist d_drivedata[1]</span> 00309 <span class="preprocessor"></span><span class="preprocessor">#define d_maxdist d_drivedata[2]</span> 00310 <span class="preprocessor"></span><span class="preprocessor">#define d_sdist d_drivedata[3]</span> 00311 <span class="preprocessor"></span> 00312 <span class="comment">/*</span> 00313 <span class="comment"> * Drive data for ST506.</span> 00314 <span class="comment"> */</span> 00315 <span class="preprocessor">#define d_precompcyl d_drivedata[0]</span> 00316 <span class="preprocessor"></span><span class="preprocessor">#define d_gap3 d_drivedata[1] </span><span class="comment">/* used only when formatting */</span> 00317 00318 <span class="comment">/*</span> 00319 <span class="comment"> * Drive data for SCSI.</span> 00320 <span class="comment"> */</span> 00321 <span class="preprocessor">#define d_blind d_drivedata[0]</span> 00322 <span class="preprocessor"></span> 00323 <span class="preprocessor">#ifndef LOCORE</span> 00324 <span class="preprocessor"></span><span class="comment">/*</span> 00325 <span class="comment"> * Structure used to perform a format or other raw operation, returning</span> 00326 <span class="comment"> * data and/or register values. Register identification and format</span> 00327 <span class="comment"> * are device- and driver-dependent.</span> 00328 <span class="comment"> */</span> 00329 <span class="keyword">struct </span>format_op { 00330 <span class="keywordtype">char</span> *df_buf; 00331 <span class="keywordtype">int</span> df_count; <span class="comment">/* value-result */</span> 00332 daddr_t df_startblk; 00333 <span class="keywordtype">int</span> df_reg[8]; <span class="comment">/* result */</span> 00334 }; 00335 00336 <span class="comment">/*</span> 00337 <span class="comment"> * Structure used internally to retrieve information about a partition</span> 00338 <span class="comment"> * on a disk.</span> 00339 <span class="comment"> */</span> 00340 <span class="keyword">struct </span>partinfo { 00341 <span class="keyword">struct </span>disklabel *disklab; 00342 <span class="keyword">struct </span>partition *part; 00343 }; 00344 00345 <span class="comment">/* DOS partition table -- located in boot block */</span> 00346 00347 <span class="preprocessor">#if defined(PC98) && !defined(PC98_ATCOMPAT)</span> 00348 <span class="preprocessor"></span><span class="preprocessor">#define DOSBBSECTOR 0 </span><span class="comment">/* DOS boot block relative sector number */</span> 00349 <span class="preprocessor">#define DOSLABELSECTOR 1 </span><span class="comment">/* 0: 256b/s, 1: 512b/s */</span> 00350 <span class="preprocessor">#define DOSPARTOFF 0</span> 00351 <span class="preprocessor"></span><span class="preprocessor">#define NDOSPART 16</span> 00352 <span class="preprocessor"></span><span class="preprocessor">#define DOSPTYP_386BSD 0x94 </span><span class="comment">/* 386BSD partition type */</span> 00353 <span class="preprocessor">#define MBR_PTYPE_FreeBSD 0x94 </span><span class="comment">/* FreeBSD partition type */</span> 00354 00355 <span class="keyword">struct </span>dos_partition { 00356 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> dp_mid; 00357 <span class="preprocessor">#define DOSMID_386BSD (0x14|0x80) </span><span class="comment">/* 386bsd|bootable */</span> 00358 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> dp_sid; 00359 <span class="preprocessor">#define DOSSID_386BSD (0x44|0x80) </span><span class="comment">/* 386bsd|active */</span> 00360 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> dp_dum1; 00361 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> dp_dum2; 00362 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> dp_ipl_sct; 00363 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> dp_ipl_head; 00364 <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> dp_ipl_cyl; 00365 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> dp_ssect; <span class="comment">/* starting sector */</span> 00366 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> dp_shd; <span class="comment">/* starting head */</span> 00367 <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> dp_scyl; <span class="comment">/* starting cylinder */</span> 00368 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> dp_esect; <span class="comment">/* end sector */</span> 00369 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> dp_ehd; <span class="comment">/* end head */</span> 00370 <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> dp_ecyl; <span class="comment">/* end cylinder */</span> 00371 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> dp_name[16]; 00372 }; 00373 00374 <span class="preprocessor">#else </span><span class="comment">/* IBMPC */</span> 00375 <span class="preprocessor">#define DOSBBSECTOR 0 </span><span class="comment">/* DOS boot block relative sector number */</span> 00376 <span class="preprocessor">#define DOSPARTOFF 446</span> 00377 <span class="preprocessor"></span><span class="preprocessor">#define NDOSPART 4</span> 00378 <span class="preprocessor"></span><span class="preprocessor">#define DOSPTYP_386BSD 0xa5 </span><span class="comment">/* 386BSD partition type */</span> 00379 <span class="preprocessor">#define DOSPTYP_LINSWP 0x82 </span><span class="comment">/* Linux swap partition */</span> 00380 <span class="preprocessor">#define DOSPTYP_LINUX 0x83 </span><span class="comment">/* Linux partition */</span> 00381 <span class="preprocessor">#define DOSPTYP_EXT 5 </span><span class="comment">/* DOS extended partition */</span> 00382 00383 <span class="keyword">struct </span>dos_partition { 00384 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> dp_flag; <span class="comment">/* bootstrap flags */</span> 00385 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> dp_shd; <span class="comment">/* starting head */</span> 00386 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> dp_ssect; <span class="comment">/* starting sector */</span> 00387 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> dp_scyl; <span class="comment">/* starting cylinder */</span> 00388 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> dp_typ; <span class="comment">/* partition type */</span> 00389 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> dp_ehd; <span class="comment">/* end head */</span> 00390 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> dp_esect; <span class="comment">/* end sector */</span> 00391 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> dp_ecyl; <span class="comment">/* end cylinder */</span> 00392 u_int32_t dp_start; <span class="comment">/* absolute starting sector number */</span> 00393 u_int32_t dp_size; <span class="comment">/* partition size in sectors */</span> 00394 }; 00395 <span class="preprocessor">#endif</span> 00396 <span class="preprocessor"></span> 00397 <span class="preprocessor">#define DPSECT(s) ((s) & 0x3f) </span><span class="comment">/* isolate relevant bits of sector */</span> 00398 <span class="preprocessor">#define DPCYL(c, s) ((c) + (((s) & 0xc0)<<2)) </span><span class="comment">/* and those that are cylinder */</span> 00399 00400 <span class="comment">/*</span> 00401 <span class="comment"> * Disk-specific ioctls.</span> 00402 <span class="comment"> */</span> 00403 <span class="comment">/* get and set disklabel; DIOCGPART used internally */</span> 00404 <span class="preprocessor">#define DIOCGDINFO _IOR('d', 101, struct disklabel)</span><span class="comment">/* get */</span> 00405 <span class="preprocessor">#define DIOCSDINFO _IOW('d', 102, struct disklabel)</span><span class="comment">/* set */</span> 00406 <span class="preprocessor">#define DIOCWDINFO _IOW('d', 103, struct disklabel)</span><span class="comment">/* set, update disk */</span> 00407 <span class="preprocessor">#define DIOCGPART _IOW('d', 104, struct partinfo) </span><span class="comment">/* get partition */</span> 00408 <span class="preprocessor">#define DIOCGDVIRGIN _IOR('d', 105, struct disklabel) </span><span class="comment">/* get virgin label */</span> 00409 00410 <span class="preprocessor">#define DIOCWLABEL _IOW('d', 109, int) </span><span class="comment">/* write en/disable label */</span> 00411 00412 <span class="preprocessor">#ifdef _KERNEL</span> 00413 <span class="preprocessor"></span> 00414 <span class="comment">/*</span> 00415 <span class="comment"> * XXX encoding of disk minor numbers, should be elsewhere.</span> 00416 <span class="comment"> *</span> 00417 <span class="comment"> * See <sys/reboot.h> for a possibly better encoding.</span> 00418 <span class="comment"> *</span> 00419 <span class="comment"> * "cpio -H newc" can be used to back up device files with large minor</span> 00420 <span class="comment"> * numbers (but not ones >= 2^31). Old cpio formats and all tar formats</span> 00421 <span class="comment"> * don't have enough bits, and cpio and tar don't notice the lossage.</span> 00422 <span class="comment"> * There are also some sign extension bugs.</span> 00423 <span class="comment"> */</span> 00424 00425 <span class="comment">/*</span> 00426 <span class="comment"> 3 2 1 0</span> 00427 <span class="comment"> 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0</span> 00428 <span class="comment"> _________________________________________________________________</span> 00429 <span class="comment"> | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |</span> 00430 <span class="comment"> -----------------------------------------------------------------</span> 00431 <span class="comment"> | TYPE |UNIT_2 | SLICE | MAJOR? | UNIT |PART |</span> 00432 <span class="comment"> -----------------------------------------------------------------</span> 00433 <span class="comment">*/</span> 00434 00435 <span class="preprocessor">#define DKMAXUNIT 0x1ff </span><span class="comment">/* Highest disk unit number */</span> 00436 00437 <span class="preprocessor">#define dkmakeminor(unit, slice, part) \</span> 00438 <span class="preprocessor"> (((slice) << 16) | (((unit) & 0x1e0) << 16) | \</span> 00439 <span class="preprocessor"> (((unit) & 0x1f) << 3) | (part))</span> 00440 <span class="preprocessor"></span><span class="keyword">static</span> __inline dev_t 00441 dkmodpart(dev_t dev, <span class="keywordtype">int</span> part) 00442 { 00443 <span class="keywordflow">return</span> (makedev(major(dev), (minor(dev) & ~7) | part)); 00444 } 00445 00446 <span class="keyword">static</span> __inline dev_t 00447 dkmodslice(dev_t dev, <span class="keywordtype">int</span> slice) 00448 { 00449 <span class="keywordflow">return</span> (makedev(major(dev), (minor(dev) & ~0x1f0000) | (slice << 16))); 00450 } 00451 00452 <span class="preprocessor">#define dkpart(dev) (minor(dev) & 7)</span> 00453 <span class="preprocessor"></span><span class="preprocessor">#define dkslice(dev) ((minor(dev) >> 16) & 0x1f)</span> 00454 <span class="preprocessor"></span><span class="preprocessor">#define dktype(dev) ((minor(dev) >> 25) & 0x7f)</span> 00455 <span class="preprocessor"></span> 00456 <span class="keyword">static</span> __inline u_int 00457 dkunit(dev_t dev) 00458 { 00459 <span class="keywordflow">return</span> (((minor(dev) >> 16) & 0x1e0) | ((minor(dev) >> 3) & 0x1f)); 00460 } 00461 00462 <span class="keyword">struct </span>buf; 00463 <span class="keyword">struct </span>buf_queue_head; 00464 00465 <span class="keywordtype">int</span> bounds_check_with_label __P((<span class="keyword">struct</span> buf *bp, <span class="keyword">struct</span> disklabel *lp, 00466 <span class="keywordtype">int</span> wlabel)); 00467 <span class="keywordtype">void</span> diskerr __P((<span class="keyword">struct</span> buf *bp, <span class="keywordtype">char</span> *what, <span class="keywordtype">int</span> pri, <span class="keywordtype">int</span> blkdone, 00468 <span class="keyword">struct</span> disklabel *lp)); 00469 <span class="keywordtype">void</span> disksort __P((<span class="keyword">struct</span> buf *ap, <span class="keyword">struct</span> buf *bp)); 00470 <span class="keywordtype">char</span> *readdisklabel __P((dev_t dev, <span class="keyword">struct</span> disklabel *lp)); 00471 <span class="keywordtype">void</span> bufqdisksort __P((<span class="keyword">struct</span> buf_queue_head *ap, <span class="keyword">struct</span> buf *bp)); 00472 <span class="keywordtype">int</span> setdisklabel __P((<span class="keyword">struct</span> disklabel *olp, <span class="keyword">struct</span> disklabel *nlp, 00473 u_long openmask)); 00474 <span class="keywordtype">int</span> writedisklabel __P((dev_t dev, <span class="keyword">struct</span> disklabel *lp)); 00475 <span class="preprocessor">#ifdef __alpha__</span> 00476 <span class="preprocessor"></span><span class="keywordtype">void</span> alpha_fix_srm_checksum __P((<span class="keyword">struct</span> buf *bp)); 00477 <span class="preprocessor">#endif</span> 00478 <span class="preprocessor"></span> 00479 <span class="preprocessor">#endif </span><span class="comment">/* _KERNEL */</span> 00480 00481 <span class="preprocessor">#endif </span><span class="comment">/* LOCORE */</span> 00482 00483 <span class="preprocessor">#ifndef _KERNEL</span> 00484 <span class="preprocessor"></span>__BEGIN_DECLS 00485 <span class="keyword">struct </span>disklabel *getdiskbyname __P((<span class="keyword">const</span> <span class="keywordtype">char</span> *)); 00486 __END_DECLS 00487 <span class="preprocessor">#endif</span> 00488 <span class="preprocessor"></span> 00489 <span class="preprocessor">#endif </span><span class="comment">/* !_SYS_DISKLABEL_H_ */</span> </pre></div><hr size="1"><address style="align: right;"><small>Generated on Wed Apr 28 17:49:33 2004 for Ubixos by <a href="http://www.doxygen.org/index.html"> <img src="doxygen.png" alt="doxygen" align="middle" border=0 > </a>1.3.3 </small></address> </body> </html>