<!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>