The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/sys/disklabel.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*      $OpenBSD: disklabel.h,v 1.86 2022/11/07 10:33:22 krw Exp $      */
    2 /*      $NetBSD: disklabel.h,v 1.41 1996/05/10 23:07:37 mark Exp $      */
    3 
    4 /*
    5  * Copyright (c) 1987, 1988, 1993
    6  *      The Regents of the University of California.  All rights reserved.
    7  *
    8  * Redistribution and use in source and binary forms, with or without
    9  * modification, are permitted provided that the following conditions
   10  * are met:
   11  * 1. Redistributions of source code must retain the above copyright
   12  *    notice, this list of conditions and the following disclaimer.
   13  * 2. Redistributions in binary form must reproduce the above copyright
   14  *    notice, this list of conditions and the following disclaimer in the
   15  *    documentation and/or other materials provided with the distribution.
   16  * 3. Neither the name of the University nor the names of its contributors
   17  *    may be used to endorse or promote products derived from this software
   18  *    without specific prior written permission.
   19  *
   20  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   21  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   22  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   23  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   24  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   25  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   26  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   27  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   28  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   29  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   30  * SUCH DAMAGE.
   31  *
   32  *      @(#)disklabel.h 8.2 (Berkeley) 7/10/94
   33  */
   34 
   35 /*
   36  * Disk description table, see disktab(5)
   37  */
   38 #define _PATH_DISKTAB   "/etc/disktab"
   39 #define DISKTAB         "/etc/disktab"          /* deprecated */
   40 
   41 /*
   42  * Each disk has a label which includes information about the hardware
   43  * disk geometry, filesystem partitions, and drive specific information.
   44  * The location of the label, as well as the number of partitions the
   45  * label can describe and the number of the "whole disk" (raw)
   46  * partition are machine dependent.
   47  */
   48 #include <machine/disklabel.h>
   49 
   50 #include <sys/uuid.h>
   51 
   52 /*
   53  * The absolute maximum number of disk partitions allowed.
   54  * This is the maximum value of MAXPARTITIONS for which 'struct disklabel'
   55  * is <= DEV_BSIZE bytes long.  If MAXPARTITIONS is greater than this, beware.
   56  */
   57 #define MAXMAXPARTITIONS        22
   58 #if MAXPARTITIONS > MAXMAXPARTITIONS
   59 #warn beware: MAXPARTITIONS bigger than MAXMAXPARTITIONS
   60 #endif
   61 
   62 /*
   63  * Translate between device numbers and major/disk unit/disk partition.
   64  */
   65 #define DISKUNIT(dev)   (minor(dev) / MAXPARTITIONS)
   66 #define DISKPART(dev)   (minor(dev) % MAXPARTITIONS)
   67 #define RAW_PART        2       /* 'c' partition */
   68 #define DISKMINOR(unit, part) \
   69     (((unit) * MAXPARTITIONS) + (part))
   70 #define MAKEDISKDEV(maj, unit, part) \
   71     (makedev((maj), DISKMINOR((unit), (part))))
   72 #define DISKLABELDEV(dev) \
   73     (MAKEDISKDEV(major(dev), DISKUNIT(dev), RAW_PART))
   74 
   75 #define DISKMAGIC       ((u_int32_t)0x82564557) /* The disk magic number */
   76 
   77 #define MAXDISKSIZE     0x7fffffffffffLL        /* 47 bits of reach */
   78 
   79 #ifndef _LOCORE
   80 struct disklabel {
   81         u_int32_t d_magic;              /* the magic number */
   82         u_int16_t d_type;               /* drive type */
   83         u_int16_t d_subtype;            /* controller/d_type specific */
   84         char      d_typename[16];       /* type name, e.g. "eagle" */
   85         char      d_packname[16];       /* pack identifier */
   86 
   87                         /* disk geometry: */
   88         u_int32_t d_secsize;            /* # of bytes per sector */
   89         u_int32_t d_nsectors;           /* # of data sectors per track */
   90         u_int32_t d_ntracks;            /* # of tracks per cylinder */
   91         u_int32_t d_ncylinders;         /* # of data cylinders per unit */
   92         u_int32_t d_secpercyl;          /* # of data sectors per cylinder */
   93         u_int32_t d_secperunit;         /* # of data sectors (low part) */
   94 
   95         u_char  d_uid[8];               /* Unique label identifier. */
   96 
   97         /*
   98          * Alternate cylinders include maintenance, replacement, configuration
   99          * description areas, etc.
  100          */
  101         u_int32_t d_acylinders;         /* # of alt. cylinders per unit */
  102 
  103                         /* hardware characteristics: */
  104         u_int16_t d_bstarth;            /* start of useable region (high part) */
  105         u_int16_t d_bendh;              /* size of useable region (high part) */
  106         u_int32_t d_bstart;             /* start of useable region */
  107         u_int32_t d_bend;               /* end of useable region */
  108         u_int32_t d_flags;              /* generic flags */
  109 #define NDDATA 5
  110         u_int32_t d_spare4[NDDATA];
  111         u_int16_t d_secperunith;        /* # of data sectors (high part) */
  112         u_int16_t d_version;            /* version # (1=48 bit addressing) */
  113 #define NSPARE 4
  114         u_int32_t d_spare[NSPARE];      /* reserved for future use */
  115         u_int32_t d_magic2;             /* the magic number (again) */
  116         u_int16_t d_checksum;           /* xor of data incl. partitions */
  117 
  118                         /* filesystem and partition information: */
  119         u_int16_t d_npartitions;        /* number of partitions in following */
  120         u_int32_t d_spare2;
  121         u_int32_t d_spare3;
  122         struct  partition {             /* the partition table */
  123                 u_int32_t p_size;       /* number of sectors (low part) */
  124                 u_int32_t p_offset;     /* starting sector (low part) */
  125                 u_int16_t p_offseth;    /* starting sector (high part) */
  126                 u_int16_t p_sizeh;      /* number of sectors (high part) */
  127                 u_int8_t p_fstype;      /* filesystem type, see below */
  128                 u_int8_t p_fragblock;   /* encoded filesystem frag/block */
  129                 u_int16_t p_cpg;        /* UFS: FS cylinders per group */
  130         } d_partitions[MAXPARTITIONS];  /* actually may be more */
  131 };
  132 
  133 
  134 struct  __partitionv0 {         /* old (v0) partition table entry */
  135         u_int32_t p_size;       /* number of sectors in partition */
  136         u_int32_t p_offset;     /* starting sector */
  137         u_int32_t p_fsize;      /* filesystem basic fragment size */
  138         u_int8_t p_fstype;      /* filesystem type, see below */
  139         u_int8_t p_frag;        /* filesystem fragments per block */
  140         union {
  141                 u_int16_t cpg;  /* UFS: FS cylinders per group */
  142                 u_int16_t sgs;  /* LFS: FS segment shift */
  143         } __partitionv0_u1;
  144 };
  145 #endif /* _LOCORE */
  146 
  147 
  148 #define DISKLABELV1_FFS_FRAGBLOCK(fsize, frag)                  \
  149         ((fsize) * (frag) == 0 ? 0 :                            \
  150         (((ffs((fsize) * (frag)) - 13) << 3) | (ffs(frag))))
  151 
  152 #define DISKLABELV1_FFS_BSIZE(i) ((i) == 0 ? 0 : (1 << (((i) >> 3) + 12)))
  153 #define DISKLABELV1_FFS_FRAG(i) ((i) == 0 ? 0 : (1 << (((i) & 0x07) - 1)))
  154 #define DISKLABELV1_FFS_FSIZE(i) (DISKLABELV1_FFS_FRAG(i) == 0 ? 0 : \
  155         (DISKLABELV1_FFS_BSIZE(i) / DISKLABELV1_FFS_FRAG(i)))
  156 
  157 #define DL_GETPSIZE(p)          (((u_int64_t)(p)->p_sizeh << 32) + (p)->p_size)
  158 #define DL_SETPSIZE(p, n)       do { \
  159                                         u_int64_t __x = (n); \
  160                                         (p)->p_sizeh = __x >> 32; \
  161                                         (p)->p_size = __x; \
  162                                 } while (0)
  163 #define DL_GETPOFFSET(p)        (((u_int64_t)(p)->p_offseth << 32) + (p)->p_offset)
  164 #define DL_SETPOFFSET(p, n)     do { \
  165                                         u_int64_t __x = (n); \
  166                                         (p)->p_offseth = __x >> 32; \
  167                                         (p)->p_offset = __x; \
  168                                 } while (0)
  169 
  170 #define DL_GETDSIZE(d)          (((u_int64_t)(d)->d_secperunith << 32) + \
  171                                     (d)->d_secperunit)
  172 #define DL_SETDSIZE(d, n)       do { \
  173                                         u_int64_t __x = (n); \
  174                                         (d)->d_secperunith = __x >> 32; \
  175                                         (d)->d_secperunit = __x; \
  176                                 } while (0)
  177 #define DL_GETBSTART(d)         (((u_int64_t)(d)->d_bstarth << 32) + \
  178                                     (d)->d_bstart)
  179 #define DL_SETBSTART(d, n)      do { \
  180                                         u_int64_t __x = (n); \
  181                                         (d)->d_bstarth = __x >> 32; \
  182                                         (d)->d_bstart = __x; \
  183                                 } while (0)
  184 #define DL_GETBEND(d)           (((u_int64_t)(d)->d_bendh << 32) + \
  185                                     (d)->d_bend)
  186 #define DL_SETBEND(d, n)        do { \
  187                                         u_int64_t __x = (n); \
  188                                         (d)->d_bendh = __x >> 32; \
  189                                         (d)->d_bend = __x; \
  190                                 } while (0)
  191 
  192 #define DL_BLKSPERSEC(d)        ((d)->d_secsize / DEV_BSIZE)
  193 #define DL_SECTOBLK(d, n)       ((n) * DL_BLKSPERSEC(d))
  194 #define DL_BLKTOSEC(d, n)       ((n) / DL_BLKSPERSEC(d))
  195 #define DL_BLKOFFSET(d, n)      (((n) % DL_BLKSPERSEC(d)) * DEV_BSIZE)
  196 
  197 /* d_type values: */
  198 #define DTYPE_SMD               1               /* SMD, XSMD; VAX hp/up */
  199 #define DTYPE_MSCP              2               /* MSCP */
  200 #define DTYPE_DEC               3               /* other DEC (rk, rl) */
  201 #define DTYPE_SCSI              4               /* SCSI */
  202 #define DTYPE_ESDI              5               /* ESDI interface */
  203 #define DTYPE_ST506             6               /* ST506 etc. */
  204 #define DTYPE_HPIB              7               /* CS/80 on HP-IB */
  205 #define DTYPE_HPFL              8               /* HP Fiber-link */
  206 #define DTYPE_FLOPPY            10              /* floppy */
  207 #define DTYPE_CCD               11              /* was: concatenated disk device */
  208 #define DTYPE_VND               12              /* vnode pseudo-disk */
  209 #define DTYPE_ATAPI             13              /* ATAPI */
  210 #define DTYPE_RAID              14              /* was: RAIDframe */
  211 #define DTYPE_RDROOT            15              /* ram disk root */
  212 
  213 #ifdef DKTYPENAMES
  214 static const char * const dktypenames[] = {
  215         "unknown",
  216         "SMD",
  217         "MSCP",
  218         "old DEC",
  219         "SCSI",
  220         "ESDI",
  221         "ST506",
  222         "HP-IB",
  223         "HP-FL",
  224         "type 9",
  225         "floppy",
  226         "ccd",                  /* deprecated */
  227         "vnd",
  228         "ATAPI",
  229         "RAID",
  230         "rdroot",
  231         NULL
  232 };
  233 #define DKMAXTYPES      (sizeof(dktypenames) / sizeof(dktypenames[0]) - 1)
  234 #endif
  235 
  236 /*
  237  * Filesystem type and version.
  238  * Used to interpret other filesystem-specific
  239  * per-partition information.
  240  */
  241 #define FS_UNUSED       0               /* unused */
  242 #define FS_SWAP         1               /* swap */
  243 #define FS_V6           2               /* Sixth Edition */
  244 #define FS_V7           3               /* Seventh Edition */
  245 #define FS_SYSV         4               /* System V */
  246 #define FS_V71K         5               /* V7 with 1K blocks (4.1, 2.9) */
  247 #define FS_V8           6               /* Eighth Edition, 4K blocks */
  248 #define FS_BSDFFS       7               /* 4.2BSD fast file system */
  249 #define FS_MSDOS        8               /* MSDOS file system */
  250 #define FS_BSDLFS       9               /* 4.4BSD log-structured file system */
  251 #define FS_OTHER        10              /* in use, but unknown/unsupported */
  252 #define FS_HPFS         11              /* OS/2 high-performance file system */
  253 #define FS_ISO9660      12              /* ISO 9660, normally CD-ROM */
  254 #define FS_BOOT         13              /* partition contains bootstrap */
  255 #define FS_ADOS         14              /* AmigaDOS fast file system */
  256 #define FS_HFS          15              /* Macintosh HFS */
  257 #define FS_ADFS         16              /* Acorn Disk Filing System */
  258 #define FS_EXT2FS       17              /* ext2fs */
  259 #define FS_CCD          18              /* ccd component */
  260 #define FS_RAID         19              /* RAIDframe or softraid */
  261 #define FS_NTFS         20              /* Windows/NT file system */
  262 #define FS_UDF          21              /* UDF (DVD) filesystem */
  263 
  264 #ifdef DKTYPENAMES
  265 static const char * const fstypenames[] = {
  266         "unused",
  267         "swap",
  268         "Version6",
  269         "Version7",
  270         "SystemV",
  271         "4.1BSD",
  272         "Eighth-Edition",
  273         "4.2BSD",
  274         "MSDOS",
  275         "4.4LFS",
  276         "unknown",
  277         "HPFS",
  278         "ISO9660",
  279         "boot",
  280         "ADOS",
  281         "HFS",
  282         "ADFS",
  283         "ext2fs",
  284         "ccd",
  285         "RAID",
  286         "NTFS",
  287         "UDF",
  288         NULL
  289 };
  290 
  291 /* Similar to the above, but used for things like the mount command. */
  292 static char *fstypesnames[] = {
  293         "",             /* 0 */
  294         "",             /* 1 */
  295         "",             /* 2 */
  296         "",             /* 3 */
  297         "",             /* 4 */
  298         "",             /* 5 */
  299         "",             /* 6 */
  300         "ffs",          /* 7 */
  301         "msdos",        /* 8 */
  302         "lfs",          /* 9 */
  303         "",             /* 10 */
  304         "",             /* 11 */
  305         "cd9660",       /* 12 */
  306         "",             /* 13 */
  307         "ados",         /* 14 */
  308         "",             /* 15 */
  309         "",             /* 16 */
  310         "ext2fs",       /* 17 */
  311         "",             /* 18 */
  312         "",             /* 19 */
  313         "ntfs",         /* 20 */
  314         "udf",          /* 21 */
  315         NULL
  316 };
  317 
  318 #define FSMAXTYPES      (sizeof(fstypenames) / sizeof(fstypenames[0]) - 1)
  319 #endif
  320 
  321 /*
  322  * flags shared by various drives:
  323  */
  324 #define         D_VENDOR        0x08            /* vendor disklabel */
  325 
  326 #ifndef _LOCORE
  327 /*
  328  * Structure used internally to retrieve information about a partition
  329  * on a disk.
  330  */
  331 struct partinfo {
  332         struct disklabel *disklab;
  333         struct partition *part;
  334 };
  335 
  336 /* GUID partition table -- located at sector 1 of some disks. */
  337 #define GPTSECTOR               1       /* DOS boot block relative sector # */
  338 #define GPTSIGNATURE            0x5452415020494645LL
  339                                 /* ASCII string "EFI PART" encoded as 64-bit */
  340 #define GPTREVISION             0x10000         /* GPT header version 1.0 */
  341 #define NGPTPARTITIONS          128
  342 #define GPTPARTATTR_REQUIRED            (1ULL << 0)
  343 #define GPTPARTATTR_IGNORE              (1ULL << 1)
  344 #define GPTPARTATTR_BOOTABLE            (1ULL << 2)
  345 #define GPTPARTATTR_MS_READONLY         (1ULL << 60)
  346 #define GPTPARTATTR_MS_SHADOW           (1ULL << 61)
  347 #define GPTPARTATTR_MS_HIDDEN           (1ULL << 62)
  348 #define GPTPARTATTR_MS_NOAUTOMOUNT      (1ULL << 63)
  349 
  350 #define GPTMINHDRSIZE           92
  351 #define GPTMINPARTSIZE          128
  352 #define GPTPARTNAMESIZE         36
  353 
  354 /* all values in the GPT need to be little endian as per UEFI specification */
  355 struct gpt_header {
  356         u_int64_t gh_sig;       /* "EFI PART" */
  357         u_int32_t gh_rev;       /* GPT Version 1.0: 0x00000100 */
  358         u_int32_t gh_size;      /* Little-Endian */
  359         u_int32_t gh_csum;      /* CRC32: with this field as 0 */
  360         u_int32_t gh_rsvd;      /* always zero */
  361         u_int64_t gh_lba_self;  /* LBA of this header */
  362         u_int64_t gh_lba_alt;   /* LBA of alternate header */
  363         u_int64_t gh_lba_start; /* first usable LBA */
  364         u_int64_t gh_lba_end;   /* last usable LBA */
  365         struct uuid gh_guid;    /* disk GUID used to identify the disk */
  366         u_int64_t gh_part_lba;  /* starting LBA of GPT partition entries */
  367         u_int32_t gh_part_num;  /* # of partition entries */
  368         u_int32_t gh_part_size; /* size per entry, shall be 128*(2**n)
  369                                    with n >= 0 */
  370         u_int32_t gh_part_csum; /* CRC32 checksum of all partition entries:
  371                                  * starts at gh_part_lba and is computed over
  372                                  * a byte length of gh_part_num*gh_part_size */
  373         /* the rest of the block is reserved by UEFI and must be zero */
  374 };
  375 
  376 struct gpt_partition {
  377         struct uuid gp_type;    /* partition type GUID */
  378         struct uuid gp_guid;    /* unique partition GUID */
  379         u_int64_t gp_lba_start; /* starting LBA of this partition */
  380         u_int64_t gp_lba_end;   /* ending LBA of this partition, inclusive,
  381                                    usually odd */
  382         u_int64_t gp_attrs;     /* attribute flags */
  383         u_int16_t gp_name[GPTPARTNAMESIZE]; /* partition name, utf-16le */
  384         /* the rest of the GPT partition entry, if any, is reserved by UEFI
  385            and must be zero */
  386 };
  387 
  388 #define GPT_UUID_UNUSED \
  389     { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
  390       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
  391 #define GPT_UUID_MSDOS \
  392     { 0xeb, 0xd0, 0xa0, 0xa2, 0xb9, 0xe5, 0x44, 0x33, \
  393       0x87, 0xc0, 0x68, 0xb6, 0xb7, 0x26, 0x99, 0xc7 }
  394 #define GPT_UUID_EFI_SYSTEM \
  395     { 0xc1, 0x2a, 0x73, 0x28, 0xf8, 0x1f, 0x11, 0xd2, \
  396       0xba, 0x4b, 0x00, 0xa0, 0xc9, 0x3e, 0xc9, 0x3b }
  397 #define GPT_UUID_LEGACY_MBR \
  398     { 0x02, 0x4d, 0xee, 0x41, 0x33, 0x37, 0x11, 0xd3, \
  399       0x9d, 0x69, 0x00, 0x08, 0xc7, 0x81, 0xf3, 0x9f }
  400 #define GPT_UUID_OPENBSD \
  401     { 0x82, 0x4c, 0xc7, 0xa0, 0x36, 0xa8, 0x11, 0xe3, \
  402       0x89, 0x0a, 0x95, 0x25, 0x19, 0xad, 0x3f, 0x61 }
  403 #define GPT_UUID_CHROMEROOTFS \
  404     { 0x3c, 0xb8, 0xe2, 0x02, 0x3b, 0x7e, 0x47, 0xdd, \
  405       0x8a, 0x3c, 0x7f, 0xf2, 0xa1, 0x3c, 0xfc, 0xec }
  406 #define GPT_UUID_LINUX \
  407     { 0x0f, 0xc6, 0x3d, 0xaf, 0x84, 0x83, 0x47, 0x72, \
  408       0x8e, 0x79, 0x3d, 0x69, 0xd8, 0x47, 0x7d, 0xe4 }
  409 #define GPT_UUID_LINUX_HOME \
  410     { 0x93, 0x3a, 0xc7, 0xe1, 0x2e, 0xb4, 0x4f, 0x13, \
  411       0xb8, 0x44, 0x0e, 0x14, 0xe2, 0xae, 0xf9, 0x15 }
  412 #define GPT_UUID_LINUX_SRV \
  413     { 0x3b, 0x8f, 0x84, 0x25, 0x20, 0xe0, 0x4f, 0x3b, \
  414       0x90, 0x7f, 0x1a, 0x25, 0xa7, 0x6f, 0x98, 0xe8 }
  415 #define GPT_UUID_FBSD_DATA \
  416     { 0x51, 0x6e, 0x7c, 0xb4, 0x6e, 0xcf, 0x11, 0xd6, \
  417       0x8f, 0xf8, 0x00, 0x02, 0x2d, 0x09, 0x71, 0x2b }
  418 #define GPT_UUID_FBSD_UFS \
  419     { 0x51, 0x6e, 0x7c, 0xb6, 0x6e, 0xcf, 0x11, 0xd6, \
  420       0x8f, 0xf8, 0x00, 0x02, 0x2d, 0x09, 0x71, 0x2b }
  421 #define GPT_UUID_NBSD_UFS \
  422     { 0x49, 0xf4, 0x8d, 0x5a, 0xb1, 0x0e, 0x11, 0xdc, \
  423       0xb9, 0x9b, 0x00, 0x19, 0xd1, 0x87, 0x96, 0x48 }
  424 #define GPT_UUID_APPLE_HFS \
  425     { 0x48, 0x46, 0x53, 0x00, 0x00, 0x00, 0x11, 0xaa, \
  426       0xaa, 0x11, 0x00, 0x30, 0x65, 0x43, 0xec, 0xac }
  427 #define GPT_UUID_APPLE_UFS \
  428     { 0x55, 0x46, 0x53, 0x00, 0x00, 0x00, 0x11, 0xaa, \
  429       0xaa, 0x11, 0x00, 0x30, 0x65, 0x43, 0xec, 0xac }
  430 #define GPT_UUID_BIOS_BOOT \
  431     { 0x21, 0x68, 0x61, 0x48, 0x64, 0x49, 0x6e, 0x6f, \
  432       0x74, 0x4e, 0x65, 0x65, 0x64, 0x45, 0x46, 0x49 }
  433 
  434 /* DOS partition table -- located at start of some disks. */
  435 #define DOS_LABELSECTOR 1
  436 #define DOSBBSECTOR     0               /* DOS boot block relative sector # */
  437 #define DOSPARTOFF      446
  438 #define DOSDISKOFF      444
  439 #define NDOSPART        4
  440 #define DOSACTIVE       0x80            /* active partition */
  441 
  442 #define DOSMBR_SIGNATURE        (0xaa55)
  443 #define DOSMBR_SIGNATURE_OFF    (0x1fe)
  444 
  445 /* Maximum number of Extended Boot Records (EBRs) to traverse. */
  446 #define DOS_MAXEBR      256
  447 
  448 struct dos_partition {
  449         u_int8_t        dp_flag;        /* bootstrap flags */
  450         u_int8_t        dp_shd;         /* starting head */
  451         u_int8_t        dp_ssect;       /* starting sector */
  452         u_int8_t        dp_scyl;        /* starting cylinder */
  453         u_int8_t        dp_typ;         /* partition type (see below) */
  454         u_int8_t        dp_ehd;         /* end head */
  455         u_int8_t        dp_esect;       /* end sector */
  456         u_int8_t        dp_ecyl;        /* end cylinder */
  457         u_int32_t       dp_start;       /* absolute starting sector number */
  458         u_int32_t       dp_size;        /* partition size in sectors */
  459 };
  460 
  461 /* Isolate the relevant bits to get sector and cylinder. */
  462 #define DPSECT(s)       ((s) & 0x3f)
  463 #define DPCYL(c, s)     ((c) + (((s) & 0xc0) << 2))
  464 
  465 /* Known DOS partition types. */
  466 #define DOSPTYP_UNUSED  0x00            /* Unused partition */
  467 #define DOSPTYP_FAT12   0x01            /* 12-bit FAT */
  468 #define DOSPTYP_FAT16S  0x04            /* 16-bit FAT, less than 32M */
  469 #define DOSPTYP_EXTEND  0x05            /* Extended; contains sub-partitions */
  470 #define DOSPTYP_FAT16B  0x06            /* 16-bit FAT, more than 32M */
  471 #define DOSPTYP_NTFS    0x07            /* NTFS */
  472 #define DOSPTYP_FAT32   0x0b            /* 32-bit FAT */
  473 #define DOSPTYP_FAT32L  0x0c            /* 32-bit FAT, LBA-mapped */
  474 #define DOSPTYP_FAT16L  0x0e            /* 16-bit FAT, LBA-mapped */
  475 #define DOSPTYP_EXTENDL 0x0f            /* Extended, LBA-mapped; (sub-partitions) */
  476 #define DOSPTYP_ONTRACK 0x54
  477 #define DOSPTYP_LINUX   0x83            /* That other thing */
  478 #define DOSPTYP_FREEBSD 0xa5            /* FreeBSD partition type */
  479 #define DOSPTYP_OPENBSD 0xa6            /* OpenBSD partition type */
  480 #define DOSPTYP_NETBSD  0xa9            /* NetBSD partition type */
  481 #define DOSPTYP_EFI     0xee            /* EFI Protective Partition */
  482 #define DOSPTYP_EFISYS  0xef            /* EFI System Partition */
  483 
  484 struct dos_mbr {
  485         u_int8_t                dmbr_boot[DOSPARTOFF];
  486         struct dos_partition    dmbr_parts[NDOSPART];
  487         u_int16_t               dmbr_sign;
  488 } __packed;
  489 
  490 #ifdef _KERNEL
  491 void     diskerr(struct buf *, char *, char *, int, int, struct disklabel *);
  492 u_int    dkcksum(struct disklabel *);
  493 int      initdisklabel(struct disklabel *);
  494 int      checkdisklabel(dev_t, void *, struct disklabel *, u_int64_t, u_int64_t);
  495 int      setdisklabel(struct disklabel *, struct disklabel *, u_int);
  496 int      readdisklabel(dev_t, void (*)(struct buf *), struct disklabel *, int);
  497 int      writedisklabel(dev_t, void (*)(struct buf *), struct disklabel *);
  498 int      bounds_check_with_label(struct buf *, struct disklabel *);
  499 int      readdisksector(struct buf *, void (*)(struct buf *),
  500             struct disklabel *, u_int64_t);
  501 int      readdoslabel(struct buf *, void (*)(struct buf *),
  502             struct disklabel *, daddr_t *, int);
  503 #ifdef CD9660
  504 int iso_disklabelspoof(dev_t dev, void (*strat)(struct buf *),
  505         struct disklabel *lp);
  506 #endif
  507 #ifdef UDF
  508 int udf_disklabelspoof(dev_t dev, void (*strat)(struct buf *),
  509         struct disklabel *lp);
  510 #endif
  511 #endif
  512 #endif /* _LOCORE */
  513 
  514 #if !defined(_KERNEL) && !defined(_LOCORE)
  515 
  516 #include <sys/cdefs.h>
  517 
  518 __BEGIN_DECLS
  519 struct disklabel *getdiskbyname(const char *);
  520 __END_DECLS
  521 
  522 #endif

Cache object: 3a884990b4bae24e73369aa257f1a25d


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.