Fix UTIME_OMIT handling
[dragonfly.git] / sys / sys / diskmbr.h
blob8d3e4761e5300db34e5e04e030bc5898337469fe
1 /*
2 * Copyright (c) 1987, 1988, 1993
3 * The Regents of the University of California. All rights reserved.
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. Neither the name of the University nor the names of its contributors
14 * may be used to endorse or promote products derived from this software
15 * without specific prior written permission.
17 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
29 * @(#)disklabel.h 8.2 (Berkeley) 7/10/94
32 #ifndef _SYS_DISKMBR_H_
33 #define _SYS_DISKMBR_H_
35 #include <sys/types.h>
37 #define DOSBBSECTOR 0 /* DOS boot block relative sector number */
38 #define DOSPARTOFF 446
39 #define DOSPARTSIZE 16
40 #define NDOSPART 4
41 #define NEXTDOSPART 32
42 #define DOSMAGICOFF 510
43 #define DOSMAGIC 0xAA55
46 * NOTE: DragonFly BSD had been using 0xA5 forever but after many years
47 * we're finally shifting to our own as A5 causes conflicts in grub.
49 #define DOSPTYP_DFLYBSD 0x6c /* DragonFly BSD partition type */
50 #define DOSPTYP_386BSD 0xa5 /* 386BSD partition type */
51 #define DOSPTYP_OPENBSD 0xa6 /* OpenBSD partition type */
52 #define DOSPTYP_NETBSD 0xa9 /* NetBSD partition type */
53 #define DOSPTYP_LINSWP 0x82 /* Linux swap partition */
54 #define DOSPTYP_LINUX 0x83 /* Linux partition */
55 #define DOSPTYP_PMBR 0xee /* GPT Protective MBR */
56 #define DOSPTYP_EFI 0xef /* EFI system partition */
57 #define DOSPTYP_EXT 0x05 /* DOS extended partition */
58 #define DOSPTYP_EXTLBA 0x0f /* DOS extended partition */
60 #ifndef _STANDALONE
61 static const struct dos_ptype
63 unsigned char type;
64 const char *name;
65 } dos_ptypes[] = {
66 { 0x00, "unused" },
67 { 0x01, "Primary DOS with 12 bit FAT" },
68 { 0x02, "XENIX / filesystem" },
69 { 0x03, "XENIX /usr filesystem" },
70 { 0x04, "Primary DOS with 16 bit FAT (<= 32MB)" },
71 { DOSPTYP_EXT, "Extended DOS" },
72 { 0x06, "Primary 'big' DOS (> 32MB)" },
73 { 0x07, "OS/2 HPFS, NTFS, QNX-2 (16 bit) or Advanced UNIX" },
74 { 0x08, "AIX filesystem" },
75 { 0x09, "AIX boot partition or Coherent" },
76 { 0x0A, "OS/2 Boot Manager or OPUS" },
77 { 0x0B, "DOS or Windows 95 with 32 bit FAT" },
78 { 0x0C, "DOS or Windows 95 with 32 bit FAT, LBA" },
79 { 0x0E, "Primary 'big' DOS (> 32MB, LBA)" },
80 { DOSPTYP_EXTLBA, "Extended DOS, LBA" },
81 { 0x10, "OPUS" },
82 { 0x11, "OS/2 BM: hidden DOS with 12-bit FAT" },
83 { 0x12, "Compaq diagnostics" },
84 { 0x14, "OS/2 BM: hidden DOS with 16-bit FAT (< 32MB)" },
85 { 0x16, "OS/2 BM: hidden DOS with 16-bit FAT (>= 32MB)" },
86 { 0x17, "OS/2 BM: hidden IFS (e.g. HPFS)" },
87 { 0x18, "AST Windows swapfile" },
88 { 0x24, "NEC DOS" },
89 { 0x39, "plan9" },
90 { 0x3C, "PartitionMagic recovery" },
91 { 0x40, "VENIX 286" },
92 { 0x41, "Linux/MINIX (sharing disk with DRDOS)" },
93 { 0x42, "SFS or Linux swap (sharing disk with DRDOS)" },
94 { 0x43, "Linux native (sharing disk with DRDOS)" },
95 { 0x4D, "QNX 4.2 Primary" },
96 { 0x4E, "QNX 4.2 Secondary" },
97 { 0x4F, "QNX 4.2 Tertiary" },
98 { 0x50, "DM" },
99 { 0x51, "DM" },
100 { 0x52, "CP/M or Microport SysV/AT" },
101 { 0x53, "DM6 Aux3" },
102 { 0x54, "DM6" },
103 { 0x55, "EZ-Drive (disk manager)" },
104 { 0x56, "GB" },
105 { 0x5C, "Priam Edisk (disk manager)" }, /* according to S. Widlake */
106 { 0x61, "Speed" },
107 { 0x63, "ISC UNIX, other System V/386, GNU HURD or Mach" },
108 { 0x64, "Novell Netware 2.xx" },
109 { 0x65, "Novell Netware 3.xx" },
110 { DOSPTYP_DFLYBSD, "DragonFly BSD" },
111 { 0x70, "DiskSecure Multi-Boot" },
112 { 0x75, "PCIX" },
113 { 0x77, "QNX4.x" },
114 { 0x78, "QNX4.x 2nd part" },
115 { 0x79, "QNX4.x 3rd part" },
116 { 0x80, "Minix 1.1 ... 1.4a" },
117 { 0x81, "Minix 1.4b ... 1.5.10" },
118 { DOSPTYP_LINSWP, "Linux swap or Solaris x86" },
119 { DOSPTYP_LINUX, "Linux filesystem" },
120 { 0x84, "OS/2 hidden C: drive" },
121 { 0x85, "Linux extended" },
122 { 0x86, "NTFS volume set??" },
123 { 0x87, "NTFS volume set??" },
124 { 0x93, "Amoeba filesystem" },
125 { 0x94, "Amoeba bad block table" },
126 { 0x9F, "BSD/OS" },
127 { 0xA0, "Suspend to Disk" },
128 { DOSPTYP_386BSD, "DragonFly/FreeBSD/NetBSD/386BSD" },
129 { DOSPTYP_OPENBSD, "OpenBSD" },
130 { 0xA7, "NEXTSTEP" },
131 { DOSPTYP_NETBSD, "NetBSD" },
132 { 0xAC, "IBM JFS" },
133 { 0xB7, "BSDI BSD/386 filesystem" },
134 { 0xB8, "BSDI BSD/386 swap" },
135 { 0xBE, "Solaris x86 boot" },
136 { 0xC1, "DRDOS/sec with 12-bit FAT" },
137 { 0xC4, "DRDOS/sec with 16-bit FAT (< 32MB)" },
138 { 0xC6, "DRDOS/sec with 16-bit FAT (>= 32MB)" },
139 { 0xC7, "Syrinx" },
140 { 0xDB, "Concurrent CPM or C.DOS or CTOS" },
141 { 0xE1, "Speed" },
142 { 0xE3, "Speed" },
143 { 0xE4, "Speed" },
144 { 0xEB, "BeOS file system" },
145 { DOSPTYP_PMBR, "EFI GPT" },
146 { DOSPTYP_EFI, "EFI System Partition" },
147 { 0xF1, "Speed" },
148 { 0xF2, "DOS 3.3+ Secondary" },
149 { 0xF4, "Speed" },
150 { 0xFE, "SpeedStor >1024 cyl. or LANstep" },
151 { 0xFF, "BBT (Bad Blocks Table)" }
153 #endif /* !_STANDALONE */
156 * Note that sector numbers in a legacy MBR DOS partition start at 1 instead
157 * of 0, so the first sector of the disk would be cyl 0, head 0, sector 1
158 * and translate to block 0 in the actual disk I/O.
160 struct dos_partition {
161 unsigned char dp_flag; /* bootstrap flags */
162 unsigned char dp_shd; /* starting head */
163 unsigned char dp_ssect; /* starting sector */
164 unsigned char dp_scyl; /* starting cylinder */
165 unsigned char dp_typ; /* partition type */
166 unsigned char dp_ehd; /* end head */
167 unsigned char dp_esect; /* end sector */
168 unsigned char dp_ecyl; /* end cylinder */
169 uint32_t dp_start; /* absolute starting sector number */
170 uint32_t dp_size; /* partition size in sectors */
173 #ifndef CTASSERT
174 #define CTASSERT(x) _CTASSERT(x, __LINE__)
175 #define _CTASSERT(x, y) __CTASSERT(x, y)
176 #define __CTASSERT(x, y) typedef char __assert_ ## y [(x) ? 1 : -1]
177 #endif
179 CTASSERT(sizeof (struct dos_partition) == DOSPARTSIZE);
181 #define DPSECT(s) ((s) & 0x3f) /* isolate relevant bits of sector */
182 #define DPCYL(c, s) ((c) + (((s) & 0xc0)<<2)) /* and those that are cylinder */
184 #endif /* !_SYS_DISKMBR_H_ */