|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1987, 1988 Regents of the University of California. ! 3: * All rights reserved. ! 4: * ! 5: * Redistribution and use in source and binary forms, with or without ! 6: * modification, are permitted provided that the following conditions ! 7: * are met: ! 8: * 1. Redistributions of source code must retain the above copyright ! 9: * notice, this list of conditions and the following disclaimer. ! 10: * 2. Redistributions in binary form must reproduce the above copyright ! 11: * notice, this list of conditions and the following disclaimer in the ! 12: * documentation and/or other materials provided with the distribution. ! 13: * 3. All advertising materials mentioning features or use of this software ! 14: * must display the following acknowledgement: ! 15: * This product includes software developed by the University of ! 16: * California, Berkeley and its contributors. ! 17: * 4. Neither the name of the University nor the names of its contributors ! 18: * may be used to endorse or promote products derived from this software ! 19: * without specific prior written permission. ! 20: * ! 21: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ! 22: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ! 23: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ! 24: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE ! 25: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ! 26: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS ! 27: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ! 28: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ! 29: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY ! 30: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ! 31: * SUCH DAMAGE. ! 32: * ! 33: * @(#)disklabel.h 7.19 (Berkeley) 5/7/91 ! 34: */ ! 35: ! 36: /* ! 37: * Disk description table, see disktab(5) ! 38: */ ! 39: #define _PATH_DISKTAB "/etc/disktab" ! 40: #define DISKTAB "/etc/disktab" /* deprecated */ ! 41: ! 42: /* ! 43: * Each disk has a label which includes information about the hardware ! 44: * disk geometry, filesystem partitions, and drive specific information. ! 45: * The label is in block 0 or 1, possibly offset from the beginning ! 46: * to leave room for a bootstrap, etc. ! 47: */ ! 48: ! 49: /* XXX these should be defined per controller (or drive) elsewhere, not here! */ ! 50: #ifdef i386 ! 51: #define LABELSECTOR 1 /* sector containing label */ ! 52: #define LABELOFFSET 0 /* offset of label in sector */ ! 53: #endif ! 54: ! 55: #ifndef LABELSECTOR ! 56: #define LABELSECTOR 0 /* sector containing label */ ! 57: #endif ! 58: ! 59: #ifndef LABELOFFSET ! 60: #define LABELOFFSET 64 /* offset of label in sector */ ! 61: #endif ! 62: ! 63: #define DISKMAGIC ((u_long) 0x82564557) /* The disk magic number */ ! 64: #ifndef MAXPARTITIONS ! 65: #define MAXPARTITIONS 8 ! 66: #endif ! 67: ! 68: ! 69: #ifndef LOCORE ! 70: struct disklabel { ! 71: u_long d_magic; /* the magic number */ ! 72: short d_type; /* drive type */ ! 73: short d_subtype; /* controller/d_type specific */ ! 74: char d_typename[16]; /* type name, e.g. "eagle" */ ! 75: /* ! 76: * d_packname contains the pack identifier and is returned when ! 77: * the disklabel is read off the disk or in-core copy. ! 78: * d_boot0 and d_boot1 are the (optional) names of the ! 79: * primary (block 0) and secondary (block 1-15) bootstraps ! 80: * as found in /usr/mdec. These are returned when using ! 81: * getdiskbyname(3) to retrieve the values from /etc/disktab. ! 82: */ ! 83: #if defined(KERNEL) || defined(STANDALONE) ! 84: char d_packname[16]; /* pack identifier */ ! 85: #else ! 86: union { ! 87: char un_d_packname[16]; /* pack identifier */ ! 88: struct { ! 89: char *un_d_boot0; /* primary bootstrap name */ ! 90: char *un_d_boot1; /* secondary bootstrap name */ ! 91: } un_b; ! 92: } d_un; ! 93: #define d_packname d_un.un_d_packname ! 94: #define d_boot0 d_un.un_b.un_d_boot0 ! 95: #define d_boot1 d_un.un_b.un_d_boot1 ! 96: #endif /* ! KERNEL or STANDALONE */ ! 97: /* disk geometry: */ ! 98: u_long d_secsize; /* # of bytes per sector */ ! 99: u_long d_nsectors; /* # of data sectors per track */ ! 100: u_long d_ntracks; /* # of tracks per cylinder */ ! 101: u_long d_ncylinders; /* # of data cylinders per unit */ ! 102: u_long d_secpercyl; /* # of data sectors per cylinder */ ! 103: u_long d_secperunit; /* # of data sectors per unit */ ! 104: /* ! 105: * Spares (bad sector replacements) below ! 106: * are not counted in d_nsectors or d_secpercyl. ! 107: * Spare sectors are assumed to be physical sectors ! 108: * which occupy space at the end of each track and/or cylinder. ! 109: */ ! 110: u_short d_sparespertrack; /* # of spare sectors per track */ ! 111: u_short d_sparespercyl; /* # of spare sectors per cylinder */ ! 112: /* ! 113: * Alternate cylinders include maintenance, replacement, ! 114: * configuration description areas, etc. ! 115: */ ! 116: u_long d_acylinders; /* # of alt. cylinders per unit */ ! 117: ! 118: /* hardware characteristics: */ ! 119: /* ! 120: * d_interleave, d_trackskew and d_cylskew describe perturbations ! 121: * in the media format used to compensate for a slow controller. ! 122: * Interleave is physical sector interleave, set up by the formatter ! 123: * or controller when formatting. When interleaving is in use, ! 124: * logically adjacent sectors are not physically contiguous, ! 125: * but instead are separated by some number of sectors. ! 126: * It is specified as the ratio of physical sectors traversed ! 127: * per logical sector. Thus an interleave of 1:1 implies contiguous ! 128: * layout, while 2:1 implies that logical sector 0 is separated ! 129: * by one sector from logical sector 1. ! 130: * d_trackskew is the offset of sector 0 on track N ! 131: * relative to sector 0 on track N-1 on the same cylinder. ! 132: * Finally, d_cylskew is the offset of sector 0 on cylinder N ! 133: * relative to sector 0 on cylinder N-1. ! 134: */ ! 135: u_short d_rpm; /* rotational speed */ ! 136: u_short d_interleave; /* hardware sector interleave */ ! 137: u_short d_trackskew; /* sector 0 skew, per track */ ! 138: u_short d_cylskew; /* sector 0 skew, per cylinder */ ! 139: u_long d_headswitch; /* head switch time, usec */ ! 140: u_long d_trkseek; /* track-to-track seek, usec */ ! 141: u_long d_flags; /* generic flags */ ! 142: #define NDDATA 5 ! 143: u_long d_drivedata[NDDATA]; /* drive-type specific information */ ! 144: #define NSPARE 5 ! 145: u_long d_spare[NSPARE]; /* reserved for future use */ ! 146: u_long d_magic2; /* the magic number (again) */ ! 147: u_short d_checksum; /* xor of data incl. partitions */ ! 148: ! 149: /* filesystem and partition information: */ ! 150: u_short d_npartitions; /* number of partitions in following */ ! 151: u_long d_bbsize; /* size of boot area at sn0, bytes */ ! 152: u_long d_sbsize; /* max size of fs superblock, bytes */ ! 153: struct partition { /* the partition table */ ! 154: u_long p_size; /* number of sectors in partition */ ! 155: u_long p_offset; /* starting sector */ ! 156: u_long p_fsize; /* filesystem basic fragment size */ ! 157: u_char p_fstype; /* filesystem type, see below */ ! 158: u_char p_frag; /* filesystem fragments per block */ ! 159: u_short p_cpg; /* filesystem cylinders per group */ ! 160: } d_partitions[MAXPARTITIONS]; /* actually may be more */ ! 161: }; ! 162: #else LOCORE ! 163: /* ! 164: * offsets for asm boot files. ! 165: */ ! 166: .set d_secsize,40 ! 167: .set d_nsectors,44 ! 168: .set d_ntracks,48 ! 169: .set d_ncylinders,52 ! 170: .set d_secpercyl,56 ! 171: .set d_secperunit,60 ! 172: .set d_end_,276 /* size of disk label */ ! 173: #endif LOCORE ! 174: ! 175: /* d_type values: */ ! 176: #define DTYPE_SMD 1 /* SMD, XSMD; VAX hp/up */ ! 177: #define DTYPE_MSCP 2 /* MSCP */ ! 178: #define DTYPE_DEC 3 /* other DEC (rk, rl) */ ! 179: #define DTYPE_SCSI 4 /* SCSI */ ! 180: #define DTYPE_ESDI 5 /* ESDI interface */ ! 181: #define DTYPE_ST506 6 /* ST506 etc. */ ! 182: #define DTYPE_FLOPPY 10 /* floppy */ ! 183: ! 184: #ifdef DKTYPENAMES ! 185: static char *dktypenames[] = { ! 186: "unknown", ! 187: "SMD", ! 188: "MSCP", ! 189: "old DEC", ! 190: "SCSI", ! 191: "ESDI", ! 192: "ST506", ! 193: "type 7", ! 194: "type 8", ! 195: "type 9", ! 196: "floppy", ! 197: 0 ! 198: }; ! 199: #define DKMAXTYPES (sizeof(dktypenames) / sizeof(dktypenames[0]) - 1) ! 200: #endif ! 201: ! 202: /* ! 203: * Filesystem type and version. ! 204: * Used to interpret other filesystem-specific ! 205: * per-partition information. ! 206: */ ! 207: #define FS_UNUSED 0 /* unused */ ! 208: #define FS_SWAP 1 /* swap */ ! 209: #define FS_V6 2 /* Sixth Edition */ ! 210: #define FS_V7 3 /* Seventh Edition */ ! 211: #define FS_SYSV 4 /* System V */ ! 212: #define FS_V71K 5 /* V7 with 1K blocks (4.1, 2.9) */ ! 213: #define FS_V8 6 /* Eighth Edition, 4K blocks */ ! 214: #define FS_BSDFFS 7 /* 4.2BSD fast file system */ ! 215: #define FS_MSDOS 8 /* MSDOS file system */ ! 216: ! 217: #ifdef DKTYPENAMES ! 218: static char *fstypenames[] = { ! 219: "unused", ! 220: "swap", ! 221: "Version 6", ! 222: "Version 7", ! 223: "System V", ! 224: "4.1BSD", ! 225: "Eighth Edition", ! 226: "4.2BSD", ! 227: "MSDOS", ! 228: 0 ! 229: }; ! 230: #define FSMAXTYPES (sizeof(fstypenames) / sizeof(fstypenames[0]) - 1) ! 231: #endif ! 232: ! 233: /* ! 234: * flags shared by various drives: ! 235: */ ! 236: #define D_REMOVABLE 0x01 /* removable media */ ! 237: #define D_ECC 0x02 /* supports ECC */ ! 238: #define D_BADSECT 0x04 /* supports bad sector forw. */ ! 239: #define D_RAMDISK 0x08 /* disk emulator */ ! 240: #define D_CHAIN 0x10 /* can do back-back transfers */ ! 241: ! 242: /* ! 243: * Drive data for SMD. ! 244: */ ! 245: #define d_smdflags d_drivedata[0] ! 246: #define D_SSE 0x1 /* supports skip sectoring */ ! 247: #define d_mindist d_drivedata[1] ! 248: #define d_maxdist d_drivedata[2] ! 249: #define d_sdist d_drivedata[3] ! 250: ! 251: /* ! 252: * Drive data for ST506. ! 253: */ ! 254: #define d_precompcyl d_drivedata[0] ! 255: #define d_gap3 d_drivedata[1] /* used only when formatting */ ! 256: ! 257: /* ! 258: * Drive data for SCSI. ! 259: */ ! 260: #define d_blind d_drivedata[0] ! 261: ! 262: #ifndef LOCORE ! 263: /* ! 264: * Structure used to perform a format ! 265: * or other raw operation, returning data ! 266: * and/or register values. ! 267: * Register identification and format ! 268: * are device- and driver-dependent. ! 269: */ ! 270: struct format_op { ! 271: char *df_buf; ! 272: int df_count; /* value-result */ ! 273: daddr_t df_startblk; ! 274: int df_reg[8]; /* result */ ! 275: }; ! 276: ! 277: /* ! 278: * Structure used internally to retrieve ! 279: * information about a partition on a disk. ! 280: */ ! 281: struct partinfo { ! 282: struct disklabel *disklab; ! 283: struct partition *part; ! 284: }; ! 285: ! 286: /* ! 287: * Disk-specific ioctls. ! 288: */ ! 289: /* get and set disklabel; DIOCGPART used internally */ ! 290: #define DIOCGDINFO _IOR('d', 101, struct disklabel)/* get */ ! 291: #define DIOCSDINFO _IOW('d', 102, struct disklabel)/* set */ ! 292: #define DIOCWDINFO _IOW('d', 103, struct disklabel)/* set, update disk */ ! 293: #define DIOCGPART _IOW('d', 104, struct partinfo) /* get partition */ ! 294: ! 295: /* do format operation, read or write */ ! 296: #define DIOCRFORMAT _IOWR('d', 105, struct format_op) ! 297: #define DIOCWFORMAT _IOWR('d', 106, struct format_op) ! 298: ! 299: #define DIOCSSTEP _IOW('d', 107, int) /* set step rate */ ! 300: #define DIOCSRETRIES _IOW('d', 108, int) /* set # of retries */ ! 301: #define DIOCWLABEL _IOW('d', 109, int) /* write en/disable label */ ! 302: ! 303: #define DIOCSBAD _IOW('d', 110, struct dkbad) /* set kernel dkbad */ ! 304: ! 305: #endif LOCORE ! 306: ! 307: #if !defined(KERNEL) && !defined(LOCORE) ! 308: ! 309: #include <sys/cdefs.h> ! 310: ! 311: __BEGIN_DECLS ! 312: struct disklabel *getdiskbyname __P((const char *)); ! 313: __END_DECLS ! 314: ! 315: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.