libparted 3.6
Loading...
Searching...
No Matches
dvh.h
Go to the documentation of this file.
1/*
2 Copyright (C) 1985 MIPS Computer Systems, Inc.
3 Copyright (C) 2000 Silicon Graphics Computer Systems, Inc.
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 3 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17*/
18
19#ifndef _SYS_DVH_H
20#define _SYS_DVH_H
21
22/*
23 * Format for volume header information
24 *
25 * The volume header is a block located at the beginning of all disk
26 * media (sector 0). It contains information pertaining to physical
27 * device parameters and logical partition information.
28 *
29 * The volume header is manipulated by disk formatters/verifiers,
30 * partition builders (e.g. fx, dvhtool, and mkfs), and disk drivers.
31 *
32 * Previous versions of IRIX wrote a copy of the volume header is
33 * located at sector 0 of each track of cylinder 0. These copies were
34 * never used, and reduced the capacity of the volume header to hold large
35 * files, so this practice was discontinued.
36 * The volume header is constrained to be less than or equal to 512
37 * bytes long. A particular copy is assumed valid if no drive errors
38 * are detected, the magic number is correct, and the 32 bit 2's complement
39 * of the volume header is correct. The checksum is calculated by initially
40 * zeroing vh_csum, summing the entire structure and then storing the
41 * 2's complement of the sum. Thus a checksum to verify the volume header
42 * should be 0.
43 *
44 * The error summary table, bad sector replacement table, and boot blocks are
45 * located by searching the volume directory within the volume header.
46 *
47 * Tables are sized simply by the integral number of table records that
48 * will fit in the space indicated by the directory entry.
49 *
50 * The amount of space allocated to the volume header, replacement blocks,
51 * and other tables is user defined when the device is formatted.
52 */
53
54/*
55 * device parameters are in the volume header to determine mapping
56 * from logical block numbers to physical device addresses
57 *
58 * Linux doesn't care ...
59 */
61 unsigned char dp_skew; /* spiral addressing skew */
62 unsigned char dp_gap1; /* words of 0 before header */
63 unsigned char dp_gap2; /* words of 0 between hdr and data */
64 unsigned char dp_spares_cyl; /* This is for drives (such as SCSI
65 that support zone oriented sparing, where the zone is larger
66 than one track. It gets subracteded from the cylinder size
67 ( dp_trks0 * dp_sec) when doing partition size calculations */
68 unsigned short dp_cyls; /* number of usable cylinders (i.e.,
69 doesn't include cylinders reserved by the drive for badblocks,
70 etc.). For drives with variable geometry, this number may be
71 decreased so that:
72 dp_cyls * ((dp_heads * dp_trks0) - dp_spares_cyl) <= actualcapacity
73 This happens on SCSI drives such as the Wren IV and Toshiba 156
74 Also see dp_cylshi below */
75 unsigned short dp_shd0; /* starting head vol 0 */
76 unsigned short dp_trks0; /* number of tracks / cylinder vol 0*/
77 unsigned char dp_ctq_depth; /* Depth of CTQ queue */
78 unsigned char dp_cylshi; /* high byte of 24 bits of cylinder count */
79 unsigned short dp_unused; /* not used */
80 unsigned short dp_secs; /* number of sectors/track */
81 unsigned short dp_secbytes; /* length of sector in bytes */
82 unsigned short dp_interleave; /* sector interleave */
83 int dp_flags; /* controller characteristics */
84 int dp_datarate; /* bytes/sec for kernel stats */
85 int dp_nretries; /* max num retries on data error */
86 int dp_mspw; /* ms per word to xfer, for iostat */
87 unsigned short dp_xgap1; /* Gap 1 for xylogics controllers */
88 unsigned short dp_xsync; /* sync delay for xylogics controllers */
89 unsigned short dp_xrdly; /* read delay for xylogics controllers */
90 unsigned short dp_xgap2; /* gap 2 for xylogics controllers */
91 unsigned short dp_xrgate; /* read gate for xylogics controllers */
92 unsigned short dp_xwcont; /* write continuation for xylogics */
93};
94
95/*
96 * Device characterization flags
97 * (dp_flags)
98 */
99#define DP_SECTSLIP 0x00000001 /* sector slip to spare sector */
100#define DP_SECTFWD 0x00000002 /* forward to replacement sector */
101#define DP_TRKFWD 0x00000004 /* forward to replacement track */
102#define DP_MULTIVOL 0x00000008 /* multiple volumes per spindle */
103#define DP_IGNOREERRORS 0x00000010 /* transfer data regardless of errors */
104#define DP_RESEEK 0x00000020 /* recalibrate as last resort */
105#define DP_CTQ_EN 0x00000040 /* enable command tag queueing */
106
107/*
108 * Boot blocks, bad sector tables, and the error summary table, are located
109 * via the volume_directory.
110 */
111#define VDNAMESIZE 8
112
114 char vd_name[VDNAMESIZE]; /* name */
115 unsigned int vd_lbn; /* logical block number */
116 unsigned int vd_nbytes; /* file length in bytes */
117};
118
119/*
120 * partition table describes logical device partitions
121 * (device drivers examine this to determine mapping from logical units
122 * to cylinder groups, device formatters/verifiers examine this to determine
123 * location of replacement tracks/sectors, etc)
124 *
125 * NOTE: pt_firstlbn SHOULD BE CYLINDER ALIGNED
126 */
127struct partition_table { /* one per logical partition */
128 unsigned int pt_nblks; /* # of logical blks in partition */
129 unsigned int pt_firstlbn; /* first lbn of partition */
130 int pt_type; /* use of partition */
131};
132
133#define PTYPE_VOLHDR 0 /* partition is volume header */
134#define PTYPE_TRKREPL 1 /* partition is used for repl trks */
135#define PTYPE_SECREPL 2 /* partition is used for repl secs */
136#define PTYPE_RAW 3 /* partition is used for data */
137#define PTYPE_BSD42 4 /* partition is 4.2BSD file system */
138#define PTYPE_BSD 4 /* partition is 4.2BSD file system */
139#define PTYPE_SYSV 5 /* partition is SysV file system */
140#define PTYPE_VOLUME 6 /* partition is entire volume */
141#define PTYPE_EFS 7 /* partition is sgi EFS */
142#define PTYPE_LVOL 8 /* partition is part of a logical vol */
143#define PTYPE_RLVOL 9 /* part of a "raw" logical vol */
144#define PTYPE_XFS 10 /* partition is sgi XFS */
145#define PTYPE_XFSLOG 11 /* partition is sgi XFS log */
146#define PTYPE_XLV 12 /* partition is part of an XLV vol */
147#define PTYPE_XVM 13 /* partition is sgi XVM */
148#define NPTYPES 16
149
150#define VHMAGIC 0xbe5a941 /* randomly chosen value */
151#define NPARTAB 16 /* 16 unix partitions */
152#define NVDIR 15 /* max of 15 directory entries */
153#define BFNAMESIZE 16 /* max 16 chars in boot file name */
154
155/* Partition types for ARCS */
156#define NOT_USED 0 /* Not used */
157#define FAT_SHORT 1 /* FAT file system, 12-bit FAT entries */
158#define FAT_LONG 4 /* FAT file system, 16-bit FAT entries */
159#define EXTENDED 5 /* extended partition */
160#define HUGE 6 /* huge partition- MS/DOS 4.0 and later */
161
162/* Active flags for ARCS */
163#define BOOTABLE 0x00;
164#define NOT_BOOTABLE 0x80;
165
167 int vh_magic; /* identifies volume header */
168 short vh_rootpt; /* root partition number */
169 short vh_swappt; /* swap partition number */
170 char vh_bootfile[BFNAMESIZE]; /* name of file to boot */
171 struct device_parameters vh_dp; /* device parameters */
172 struct volume_directory vh_vd[NVDIR]; /* other vol hdr contents */
173 struct partition_table vh_pt[NPARTAB]; /* device partition layout */
174 int vh_csum; /* volume header checksum */
175 int vh_fill; /* fill out to 512 bytes */
176};
177
178#endif /* _SYS_DVH_H */
#define BFNAMESIZE
Definition: dvh.h:153
#define NVDIR
Definition: dvh.h:152
#define VDNAMESIZE
Definition: dvh.h:111
#define NPARTAB
Definition: dvh.h:151
Definition: dvh.h:60
unsigned char dp_gap1
Definition: dvh.h:62
unsigned short dp_secs
Definition: dvh.h:80
int dp_flags
Definition: dvh.h:83
int dp_datarate
Definition: dvh.h:84
unsigned short dp_shd0
Definition: dvh.h:75
unsigned char dp_ctq_depth
Definition: dvh.h:77
unsigned short dp_unused
Definition: dvh.h:79
unsigned short dp_xgap1
Definition: dvh.h:87
unsigned short dp_xgap2
Definition: dvh.h:90
unsigned short dp_xrgate
Definition: dvh.h:91
int dp_mspw
Definition: dvh.h:86
unsigned short dp_secbytes
Definition: dvh.h:81
unsigned char dp_skew
Definition: dvh.h:61
unsigned short dp_trks0
Definition: dvh.h:76
unsigned short dp_xwcont
Definition: dvh.h:92
unsigned short dp_cyls
Definition: dvh.h:68
unsigned short dp_xrdly
Definition: dvh.h:89
unsigned char dp_gap2
Definition: dvh.h:63
unsigned short dp_interleave
Definition: dvh.h:82
unsigned char dp_spares_cyl
Definition: dvh.h:64
unsigned short dp_xsync
Definition: dvh.h:88
int dp_nretries
Definition: dvh.h:85
unsigned char dp_cylshi
Definition: dvh.h:78
Definition: dvh.h:127
unsigned int pt_nblks
Definition: dvh.h:128
unsigned int pt_firstlbn
Definition: dvh.h:129
int pt_type
Definition: dvh.h:130
Definition: dvh.h:113
unsigned int vd_lbn
Definition: dvh.h:115
unsigned int vd_nbytes
Definition: dvh.h:116
char vd_name[VDNAMESIZE]
Definition: dvh.h:114
Definition: dvh.h:166
int vh_csum
Definition: dvh.h:174
int vh_fill
Definition: dvh.h:175
short vh_swappt
Definition: dvh.h:169
int vh_magic
Definition: dvh.h:167
struct device_parameters vh_dp
Definition: dvh.h:171
struct partition_table vh_pt[NPARTAB]
Definition: dvh.h:173
short vh_rootpt
Definition: dvh.h:168
struct volume_directory vh_vd[NVDIR]
Definition: dvh.h:172
char vh_bootfile[BFNAMESIZE]
Definition: dvh.h:170