Newer
Older
ubixos-old / doc / doxygen / html / disklabel_8h-source.html
@CloudNine CloudNine on 28 Apr 2004 40 KB doxygen documentation added
<!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 &lt;sys/types.h&gt;</span>
00042 <span class="preprocessor">#endif</span>
00043 <span class="preprocessor"></span><span class="preprocessor">#include &lt;sys/ioccom.h&gt;</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 *)&amp;lp-&gt;d_partitions[lp-&gt;d_npartitions];
00194         <span class="keywordflow">while</span> (start &lt; 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) &amp;&amp; !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) &amp;&amp; !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) &amp; 0x3f)          </span><span class="comment">/* isolate relevant bits of sector */</span>
00398 <span class="preprocessor">#define DPCYL(c, s) ((c) + (((s) &amp; 0xc0)&lt;&lt;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 &lt;sys/reboot.h&gt; 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 &gt;= 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) &lt;&lt; 16) | (((unit) &amp; 0x1e0) &lt;&lt; 16) | \</span>
00439 <span class="preprocessor">                                (((unit) &amp; 0x1f) &lt;&lt; 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) &amp; ~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) &amp; ~0x1f0000) | (slice &lt;&lt; 16)));
00450 }
00451 
00452 <span class="preprocessor">#define dkpart(dev)             (minor(dev) &amp; 7)</span>
00453 <span class="preprocessor"></span><span class="preprocessor">#define dkslice(dev)            ((minor(dev) &gt;&gt; 16) &amp; 0x1f)</span>
00454 <span class="preprocessor"></span><span class="preprocessor">#define dktype(dev)             ((minor(dev) &gt;&gt; 25) &amp; 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) &gt;&gt; 16) &amp; 0x1e0) | ((minor(dev) &gt;&gt; 3) &amp; 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>