]>
Commit | Line | Data |
---|---|---|
faeb1b64 KZ |
1 | /* |
2 | * No copyright is claimed. This code is in the public domain; do with | |
3 | * it what you wish. | |
4 | */ | |
cc3d127e KZ |
5 | #ifndef UTIL_LINUX_PT_BSD_H |
6 | #define UTIL_LINUX_PT_BSD_H | |
7 | ||
8 | #define BSD_MAXPARTITIONS 16 | |
9 | #define BSD_FS_UNUSED 0 | |
10 | ||
11 | #ifndef BSD_DISKMAGIC | |
12 | # define BSD_DISKMAGIC ((uint32_t) 0x82564557) | |
13 | #endif | |
14 | ||
15 | #define BSD_LINUX_BOOTDIR "/usr/ucb/mdec" | |
16 | ||
17 | #if defined (__alpha__) || defined (__powerpc__) || \ | |
18 | defined (__ia64__) || defined (__hppa__) | |
19 | # define BSD_LABELSECTOR 0 | |
20 | # define BSD_LABELOFFSET 64 | |
cc3d127e KZ |
21 | #else |
22 | # define BSD_LABELSECTOR 1 | |
23 | # define BSD_LABELOFFSET 0 | |
24 | #endif | |
25 | ||
26 | #define BSD_BBSIZE 8192 /* size of boot area, with label */ | |
27 | #define BSD_SBSIZE 8192 /* max size of fs superblock */ | |
28 | ||
29 | struct bsd_disklabel { | |
30 | uint32_t d_magic; /* the magic number */ | |
31 | int16_t d_type; /* drive type */ | |
32 | int16_t d_subtype; /* controller/d_type specific */ | |
33 | char d_typename[16]; /* type name, e.g. "eagle" */ | |
34 | char d_packname[16]; /* pack identifier */ | |
35 | ||
36 | /* disk geometry: */ | |
37 | uint32_t d_secsize; /* # of bytes per sector */ | |
38 | uint32_t d_nsectors; /* # of data sectors per track */ | |
39 | uint32_t d_ntracks; /* # of tracks per cylinder */ | |
40 | uint32_t d_ncylinders; /* # of data cylinders per unit */ | |
41 | uint32_t d_secpercyl; /* # of data sectors per cylinder */ | |
42 | uint32_t d_secperunit; /* # of data sectors per unit */ | |
43 | ||
44 | /* | |
45 | * Spares (bad sector replacements) below | |
46 | * are not counted in d_nsectors or d_secpercyl. | |
47 | * Spare sectors are assumed to be physical sectors | |
48 | * which occupy space at the end of each track and/or cylinder. | |
49 | */ | |
50 | uint16_t d_sparespertrack; /* # of spare sectors per track */ | |
51 | uint16_t d_sparespercyl; /* # of spare sectors per cylinder */ | |
52 | ||
53 | /* | |
54 | * Alternate cylinders include maintenance, replacement, | |
55 | * configuration description areas, etc. | |
56 | */ | |
57 | uint32_t d_acylinders; /* # of alt. cylinders per unit */ | |
58 | ||
59 | /* hardware characteristics: */ | |
60 | /* | |
61 | * d_interleave, d_trackskew and d_cylskew describe perturbations | |
62 | * in the media format used to compensate for a slow controller. | |
63 | * Interleave is physical sector interleave, set up by the formatter | |
64 | * or controller when formatting. When interleaving is in use, | |
65 | * logically adjacent sectors are not physically contiguous, | |
66 | * but instead are separated by some number of sectors. | |
67 | * It is specified as the ratio of physical sectors traversed | |
68 | * per logical sector. Thus an interleave of 1:1 implies contiguous | |
69 | * layout, while 2:1 implies that logical sector 0 is separated | |
70 | * by one sector from logical sector 1. | |
71 | * d_trackskew is the offset of sector 0 on track N | |
72 | * relative to sector 0 on track N-1 on the same cylinder. | |
73 | * Finally, d_cylskew is the offset of sector 0 on cylinder N | |
74 | * relative to sector 0 on cylinder N-1. | |
75 | */ | |
76 | uint16_t d_rpm; /* rotational speed */ | |
77 | uint16_t d_interleave; /* hardware sector interleave */ | |
78 | uint16_t d_trackskew; /* sector 0 skew, per track */ | |
79 | uint16_t d_cylskew; /* sector 0 skew, per cylinder */ | |
80 | uint32_t d_headswitch; /* head switch time, usec */ | |
81 | uint32_t d_trkseek; /* track-to-track seek, usec */ | |
82 | uint32_t d_flags; /* generic flags */ | |
83 | uint32_t d_drivedata[5]; /* drive-type specific information */ | |
84 | uint32_t d_spare[5]; /* reserved for future use */ | |
85 | uint32_t d_magic2; /* the magic number (again) */ | |
86 | uint16_t d_checksum; /* xor of data incl. partitions */ | |
87 | ||
88 | /* filesystem and partition information: */ | |
89 | uint16_t d_npartitions; /* number of partitions in following */ | |
90 | uint32_t d_bbsize; /* size of boot area at sn0, bytes */ | |
91 | uint32_t d_sbsize; /* max size of fs superblock, bytes */ | |
92 | ||
93 | struct bsd_partition { /* the partition table */ | |
94 | uint32_t p_size; /* number of sectors in partition */ | |
95 | uint32_t p_offset; /* starting sector */ | |
96 | uint32_t p_fsize; /* filesystem basic fragment size */ | |
97 | uint8_t p_fstype; /* filesystem type, see below */ | |
98 | uint8_t p_frag; /* filesystem fragments per block */ | |
99 | uint16_t p_cpg; /* filesystem cylinders per group */ | |
100 | } __attribute__((packed)) d_partitions[BSD_MAXPARTITIONS]; /* actually may be more */ | |
101 | } __attribute__((packed)); | |
102 | ||
103 | ||
104 | /* d_type values: */ | |
105 | #define BSD_DTYPE_SMD 1 /* SMD, XSMD; VAX hp/up */ | |
106 | #define BSD_DTYPE_MSCP 2 /* MSCP */ | |
107 | #define BSD_DTYPE_DEC 3 /* other DEC (rk, rl) */ | |
108 | #define BSD_DTYPE_SCSI 4 /* SCSI */ | |
109 | #define BSD_DTYPE_ESDI 5 /* ESDI interface */ | |
110 | #define BSD_DTYPE_ST506 6 /* ST506 etc. */ | |
111 | #define BSD_DTYPE_HPIB 7 /* CS/80 on HP-IB */ | |
112 | #define BSD_DTYPE_HPFL 8 /* HP Fiber-link */ | |
113 | #define BSD_DTYPE_FLOPPY 10 /* floppy */ | |
114 | ||
115 | /* d_subtype values: */ | |
116 | #define BSD_DSTYPE_INDOSPART 0x8 /* is inside dos partition */ | |
117 | #define BSD_DSTYPE_DOSPART(s) ((s) & 3) /* dos partition number */ | |
118 | #define BSD_DSTYPE_GEOMETRY 0x10 /* drive params in label */ | |
119 | ||
120 | /* | |
121 | * Filesystem type and version. | |
122 | * Used to interpret other filesystem-specific | |
123 | * per-partition information. | |
124 | */ | |
125 | #define BSD_FS_UNUSED 0 /* unused */ | |
126 | #define BSD_FS_SWAP 1 /* swap */ | |
127 | #define BSD_FS_V6 2 /* Sixth Edition */ | |
128 | #define BSD_FS_V7 3 /* Seventh Edition */ | |
129 | #define BSD_FS_SYSV 4 /* System V */ | |
130 | #define BSD_FS_V71K 5 /* V7 with 1K blocks (4.1, 2.9) */ | |
131 | #define BSD_FS_V8 6 /* Eighth Edition, 4K blocks */ | |
132 | #define BSD_FS_BSDFFS 7 /* 4.2BSD fast file system */ | |
133 | #define BSD_FS_BSDLFS 9 /* 4.4BSD log-structured file system */ | |
134 | #define BSD_FS_OTHER 10 /* in use, but unknown/unsupported */ | |
135 | #define BSD_FS_HPFS 11 /* OS/2 high-performance file system */ | |
136 | #define BSD_FS_ISO9660 12 /* ISO-9660 filesystem (cdrom) */ | |
137 | #define BSD_FS_ISOFS BSD_FS_ISO9660 | |
138 | #define BSD_FS_BOOT 13 /* partition contains bootstrap */ | |
139 | #define BSD_FS_ADOS 14 /* AmigaDOS fast file system */ | |
140 | #define BSD_FS_HFS 15 /* Macintosh HFS */ | |
141 | #define BSD_FS_ADVFS 16 /* Digital Unix AdvFS */ | |
142 | ||
143 | /* this is annoying, but it's also the way it is :-( */ | |
144 | #ifdef __alpha__ | |
145 | #define BSD_FS_EXT2 8 /* ext2 file system */ | |
146 | #else | |
147 | #define BSD_FS_MSDOS 8 /* MS-DOS file system */ | |
148 | #endif | |
149 | ||
150 | /* | |
151 | * flags shared by various drives: | |
152 | */ | |
153 | #define BSD_D_REMOVABLE 0x01 /* removable media */ | |
154 | #define BSD_D_ECC 0x02 /* supports ECC */ | |
155 | #define BSD_D_BADSECT 0x04 /* supports bad sector forw. */ | |
156 | #define BSD_D_RAMDISK 0x08 /* disk emulator */ | |
157 | #define BSD_D_CHAIN 0x10 /* can do back-back transfers */ | |
158 | #define BSD_D_DOSPART 0x20 /* within MSDOS partition */ | |
159 | ||
160 | #endif /* UTIL_LINUX_PT_BSD_H */ |