xref: /titanic_51/usr/src/lib/libfdisk/common/libfdisk.h (revision bb9b6b3f59b8820022416cea99b49c50fef6e391)
1*bb9b6b3fSSheshadri Vasudevan /*
2*bb9b6b3fSSheshadri Vasudevan  * CDDL HEADER START
3*bb9b6b3fSSheshadri Vasudevan  *
4*bb9b6b3fSSheshadri Vasudevan  * The contents of this file are subject to the terms of the
5*bb9b6b3fSSheshadri Vasudevan  * Common Development and Distribution License (the "License").
6*bb9b6b3fSSheshadri Vasudevan  * You may not use this file except in compliance with the License.
7*bb9b6b3fSSheshadri Vasudevan  *
8*bb9b6b3fSSheshadri Vasudevan  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*bb9b6b3fSSheshadri Vasudevan  * or http://www.opensolaris.org/os/licensing.
10*bb9b6b3fSSheshadri Vasudevan  * See the License for the specific language governing permissions
11*bb9b6b3fSSheshadri Vasudevan  * and limitations under the License.
12*bb9b6b3fSSheshadri Vasudevan  *
13*bb9b6b3fSSheshadri Vasudevan  * When distributing Covered Code, include this CDDL HEADER in each
14*bb9b6b3fSSheshadri Vasudevan  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*bb9b6b3fSSheshadri Vasudevan  * If applicable, add the following below this CDDL HEADER, with the
16*bb9b6b3fSSheshadri Vasudevan  * fields enclosed by brackets "[]" replaced with your own identifying
17*bb9b6b3fSSheshadri Vasudevan  * information: Portions Copyright [yyyy] [name of copyright owner]
18*bb9b6b3fSSheshadri Vasudevan  *
19*bb9b6b3fSSheshadri Vasudevan  * CDDL HEADER END
20*bb9b6b3fSSheshadri Vasudevan  */
21*bb9b6b3fSSheshadri Vasudevan /*
22*bb9b6b3fSSheshadri Vasudevan  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
23*bb9b6b3fSSheshadri Vasudevan  * Use is subject to license terms.
24*bb9b6b3fSSheshadri Vasudevan  */
25*bb9b6b3fSSheshadri Vasudevan 
26*bb9b6b3fSSheshadri Vasudevan 
27*bb9b6b3fSSheshadri Vasudevan #ifndef _LIBFDISK_H_
28*bb9b6b3fSSheshadri Vasudevan #define	_LIBFDISK_H_
29*bb9b6b3fSSheshadri Vasudevan 
30*bb9b6b3fSSheshadri Vasudevan #include <limits.h>
31*bb9b6b3fSSheshadri Vasudevan #include <sys/dktp/fdisk.h>
32*bb9b6b3fSSheshadri Vasudevan 
33*bb9b6b3fSSheshadri Vasudevan #ifdef	__cplusplus
34*bb9b6b3fSSheshadri Vasudevan extern "C" {
35*bb9b6b3fSSheshadri Vasudevan #endif
36*bb9b6b3fSSheshadri Vasudevan 
37*bb9b6b3fSSheshadri Vasudevan #define	MAX_LOGDRIVE_OFFSET 63
38*bb9b6b3fSSheshadri Vasudevan 
39*bb9b6b3fSSheshadri Vasudevan #define	FDISK_ERRNO		200
40*bb9b6b3fSSheshadri Vasudevan #define	FDISK_ETOOLONG		(FDISK_ERRNO + 0)
41*bb9b6b3fSSheshadri Vasudevan #define	FDISK_EOOBOUND		(FDISK_ERRNO + 1)
42*bb9b6b3fSSheshadri Vasudevan #define	FDISK_EZERO		(FDISK_ERRNO + 2)
43*bb9b6b3fSSheshadri Vasudevan #define	FDISK_EOVERLAP		(FDISK_ERRNO + 3)
44*bb9b6b3fSSheshadri Vasudevan #define	FDISK_ENOVGEOM		(FDISK_ERRNO + 4)
45*bb9b6b3fSSheshadri Vasudevan #define	FDISK_ENOPGEOM		(FDISK_ERRNO + 5)
46*bb9b6b3fSSheshadri Vasudevan #define	FDISK_ENOLGEOM		(FDISK_ERRNO + 6)
47*bb9b6b3fSSheshadri Vasudevan #define	FDISK_ENOLOGDRIVE	(FDISK_ERRNO + 7)
48*bb9b6b3fSSheshadri Vasudevan #define	FDISK_EBADLOGDRIVE	(FDISK_ERRNO + 8)
49*bb9b6b3fSSheshadri Vasudevan #define	FDISK_ENOEXTPART	(FDISK_ERRNO + 9)
50*bb9b6b3fSSheshadri Vasudevan #define	FDISK_EBADMAGIC		(FDISK_ERRNO + 10)
51*bb9b6b3fSSheshadri Vasudevan #define	FDISK_EMOUNTED		(FDISK_ERRNO + 11)
52*bb9b6b3fSSheshadri Vasudevan 
53*bb9b6b3fSSheshadri Vasudevan #define	FDISK_SUCCESS 0
54*bb9b6b3fSSheshadri Vasudevan 
55*bb9b6b3fSSheshadri Vasudevan #define	FDISK_READ_DISK		0x00000001
56*bb9b6b3fSSheshadri Vasudevan 
57*bb9b6b3fSSheshadri Vasudevan #define	LINUX_SWAP_MAGIC_LENGTH	10
58*bb9b6b3fSSheshadri Vasudevan enum {
59*bb9b6b3fSSheshadri Vasudevan 	PHYSGEOM = 0,
60*bb9b6b3fSSheshadri Vasudevan 	VIRTGEOM,
61*bb9b6b3fSSheshadri Vasudevan 	NCYL,
62*bb9b6b3fSSheshadri Vasudevan 	NHEADS,
63*bb9b6b3fSSheshadri Vasudevan 	NSECTPT,
64*bb9b6b3fSSheshadri Vasudevan 	SSIZE,
65*bb9b6b3fSSheshadri Vasudevan 	ACYL
66*bb9b6b3fSSheshadri Vasudevan };
67*bb9b6b3fSSheshadri Vasudevan 
68*bb9b6b3fSSheshadri Vasudevan enum {
69*bb9b6b3fSSheshadri Vasudevan 	FDISK_MINOR_WRITE = 1,
70*bb9b6b3fSSheshadri Vasudevan 	FDISK_MAJOR_WRITE
71*bb9b6b3fSSheshadri Vasudevan };
72*bb9b6b3fSSheshadri Vasudevan 
73*bb9b6b3fSSheshadri Vasudevan #define	FDISK_SECTS_PER_CYL(epp) \
74*bb9b6b3fSSheshadri Vasudevan 	(epp->disk_geom.phys_heads * epp->disk_geom.phys_sec)
75*bb9b6b3fSSheshadri Vasudevan #define	FDISK_SECT_TO_CYL(epp, x)	((x) / (FDISK_SECTS_PER_CYL(epp)))
76*bb9b6b3fSSheshadri Vasudevan #define	FDISK_CYL_TO_SECT(epp, x)	((x) * (FDISK_SECTS_PER_CYL(epp)))
77*bb9b6b3fSSheshadri Vasudevan #define	FDISK_ABS_CYL_NUM(epp, x)	(FDISK_SECT_TO_CYL(x) +\
78*bb9b6b3fSSheshadri Vasudevan     epp->ext_beg_cyl)
79*bb9b6b3fSSheshadri Vasudevan 
80*bb9b6b3fSSheshadri Vasudevan #define	FDISK_CYL_BNDRY_ALIGN(epp, x)	(((x) % (FDISK_SECTS_PER_CYL(epp))) ? \
81*bb9b6b3fSSheshadri Vasudevan 	(((x)/(FDISK_SECTS_PER_CYL(epp))) + 1) :\
82*bb9b6b3fSSheshadri Vasudevan 	((x)/(FDISK_SECTS_PER_CYL(epp))))
83*bb9b6b3fSSheshadri Vasudevan 
84*bb9b6b3fSSheshadri Vasudevan /*
85*bb9b6b3fSSheshadri Vasudevan  * Extended partition structure :
86*bb9b6b3fSSheshadri Vasudevan  *  +--------------+
87*bb9b6b3fSSheshadri Vasudevan  *  |+--+          |
88*bb9b6b3fSSheshadri Vasudevan  *  ||  |----------+---> structure at the beginning of the extended partition
89*bb9b6b3fSSheshadri Vasudevan  *  ||--|          |     ( Lets call it the EBR - Extended Boot Record )
90*bb9b6b3fSSheshadri Vasudevan  *  ||  |      +---+--->
91*bb9b6b3fSSheshadri Vasudevan  *  |+--+      |   |     Logical drive within the extended partition
92*bb9b6b3fSSheshadri Vasudevan  *  |+---------+--+|     ( We will plainly call this a logical drive )
93*bb9b6b3fSSheshadri Vasudevan  *  ||            ||
94*bb9b6b3fSSheshadri Vasudevan  *  ||            ||
95*bb9b6b3fSSheshadri Vasudevan  *  ||            ||
96*bb9b6b3fSSheshadri Vasudevan  *  |+------------+|
97*bb9b6b3fSSheshadri Vasudevan  *  +--------------+
98*bb9b6b3fSSheshadri Vasudevan  *
99*bb9b6b3fSSheshadri Vasudevan  *
100*bb9b6b3fSSheshadri Vasudevan  * EBR is effectively "struct ipart parts[2]".
101*bb9b6b3fSSheshadri Vasudevan  * The picture below shows what the EBR contains. The EBR has
102*bb9b6b3fSSheshadri Vasudevan  * two important pieces of information. The first is the offset and the size
103*bb9b6b3fSSheshadri Vasudevan  * of the logical drive in this extended partition. The second is the offset
104*bb9b6b3fSSheshadri Vasudevan  * and size of the next extended partition. The offsets are relative to
105*bb9b6b3fSSheshadri Vasudevan  * beginning of the first extended partition. These extended partitions are
106*bb9b6b3fSSheshadri Vasudevan  * arranged like a linked list.
107*bb9b6b3fSSheshadri Vasudevan  * Note that (currently) only one extended partition can exist in the MBR.
108*bb9b6b3fSSheshadri Vasudevan  * The system ID of a logical drive within the extended partition cannot be
109*bb9b6b3fSSheshadri Vasudevan  * that of an extended partition.
110*bb9b6b3fSSheshadri Vasudevan  *
111*bb9b6b3fSSheshadri Vasudevan  *                   +------+
112*bb9b6b3fSSheshadri Vasudevan  *                   |      |
113*bb9b6b3fSSheshadri Vasudevan  *  +--------------+ |    +-v------------+
114*bb9b6b3fSSheshadri Vasudevan  *  |+--+          | |    |+--+          |
115*bb9b6b3fSSheshadri Vasudevan  *  ||  |---+      | |    ||  |          |
116*bb9b6b3fSSheshadri Vasudevan  *  ||--|   |      | |    ||--|          |
117*bb9b6b3fSSheshadri Vasudevan  *  ||  |---|------+-+    ||  |          |
118*bb9b6b3fSSheshadri Vasudevan  *  |+--+   |      |      |+--+          |
119*bb9b6b3fSSheshadri Vasudevan  *  |+------v-----+|      |+------------+|
120*bb9b6b3fSSheshadri Vasudevan  *  ||            ||      ||            ||
121*bb9b6b3fSSheshadri Vasudevan  *  ||            ||      ||            ||
122*bb9b6b3fSSheshadri Vasudevan  *  ||            ||      ||            ||
123*bb9b6b3fSSheshadri Vasudevan  *  |+------------+|      |+------------+|
124*bb9b6b3fSSheshadri Vasudevan  *  +--------------+      +--------------+
125*bb9b6b3fSSheshadri Vasudevan  *
126*bb9b6b3fSSheshadri Vasudevan  */
127*bb9b6b3fSSheshadri Vasudevan 
128*bb9b6b3fSSheshadri Vasudevan /*
129*bb9b6b3fSSheshadri Vasudevan  * Main structure used to record changes to the partitions made.
130*bb9b6b3fSSheshadri Vasudevan  * Changes are not written to disk everytime, but maintained in this structure.
131*bb9b6b3fSSheshadri Vasudevan  * This information is used when the user chooses to commit the changes.
132*bb9b6b3fSSheshadri Vasudevan  * A linked list of this structure represents the ondisk partitions.
133*bb9b6b3fSSheshadri Vasudevan  */
134*bb9b6b3fSSheshadri Vasudevan typedef struct logical_drive {
135*bb9b6b3fSSheshadri Vasudevan 
136*bb9b6b3fSSheshadri Vasudevan 	/* structure holding the EBR data */
137*bb9b6b3fSSheshadri Vasudevan 	struct ipart parts[2];
138*bb9b6b3fSSheshadri Vasudevan 
139*bb9b6b3fSSheshadri Vasudevan 	/*
140*bb9b6b3fSSheshadri Vasudevan 	 * Absolute beginning sector of the extended partition, and hence an
141*bb9b6b3fSSheshadri Vasudevan 	 * indicator of where the EBR for this logical drive would go on disk.
142*bb9b6b3fSSheshadri Vasudevan 	 * NOTE : In case the first logical drive in this extended partition is
143*bb9b6b3fSSheshadri Vasudevan 	 * out of (disk) order, this indicates the beginning of the logical
144*bb9b6b3fSSheshadri Vasudevan 	 * drive. The EBR will anyway be at the first sector of the extended
145*bb9b6b3fSSheshadri Vasudevan 	 * partition, for the first logical drive.
146*bb9b6b3fSSheshadri Vasudevan 	 */
147*bb9b6b3fSSheshadri Vasudevan 	uint32_t abs_secnum;
148*bb9b6b3fSSheshadri Vasudevan 
149*bb9b6b3fSSheshadri Vasudevan 	/*
150*bb9b6b3fSSheshadri Vasudevan 	 * Offset of the logical drive from the beginning of its extended
151*bb9b6b3fSSheshadri Vasudevan 	 * partition
152*bb9b6b3fSSheshadri Vasudevan 	 */
153*bb9b6b3fSSheshadri Vasudevan 	uint32_t logdrive_offset;
154*bb9b6b3fSSheshadri Vasudevan 
155*bb9b6b3fSSheshadri Vasudevan 	/* Size of the logical drive in sectors */
156*bb9b6b3fSSheshadri Vasudevan 	uint32_t numsect;
157*bb9b6b3fSSheshadri Vasudevan 
158*bb9b6b3fSSheshadri Vasudevan 	/* Beginning and ending cylinders of the extended partition */
159*bb9b6b3fSSheshadri Vasudevan 	uint32_t begcyl, endcyl;
160*bb9b6b3fSSheshadri Vasudevan 
161*bb9b6b3fSSheshadri Vasudevan 	/*
162*bb9b6b3fSSheshadri Vasudevan 	 * Flag to indicate if this record is to be sync'ed to disk.
163*bb9b6b3fSSheshadri Vasudevan 	 * It takes two values : FDISK_MAJOR_WRITE and FDISK_MINOR_WRITE
164*bb9b6b3fSSheshadri Vasudevan 	 * If it is a minor write, there is no need to update the information
165*bb9b6b3fSSheshadri Vasudevan 	 * in the kernel structures. Example of a minor write is correction of
166*bb9b6b3fSSheshadri Vasudevan 	 * a corrupt boot signature.
167*bb9b6b3fSSheshadri Vasudevan 	 */
168*bb9b6b3fSSheshadri Vasudevan 	int modified;
169*bb9b6b3fSSheshadri Vasudevan 
170*bb9b6b3fSSheshadri Vasudevan 	/*
171*bb9b6b3fSSheshadri Vasudevan 	 * This pointer points to the next extended partition in the order
172*bb9b6b3fSSheshadri Vasudevan 	 * found on disk.
173*bb9b6b3fSSheshadri Vasudevan 	 */
174*bb9b6b3fSSheshadri Vasudevan 	struct logical_drive *next;
175*bb9b6b3fSSheshadri Vasudevan 
176*bb9b6b3fSSheshadri Vasudevan 	/*
177*bb9b6b3fSSheshadri Vasudevan 	 * This pointer points to the next extended partition in a sorted list
178*bb9b6b3fSSheshadri Vasudevan 	 * sorted in the ascending order of their beginning cylinders.
179*bb9b6b3fSSheshadri Vasudevan 	 */
180*bb9b6b3fSSheshadri Vasudevan 	struct logical_drive *sorted_next;
181*bb9b6b3fSSheshadri Vasudevan 
182*bb9b6b3fSSheshadri Vasudevan } logical_drive_t;
183*bb9b6b3fSSheshadri Vasudevan 
184*bb9b6b3fSSheshadri Vasudevan typedef struct fdisk_disk_geom {
185*bb9b6b3fSSheshadri Vasudevan 	ushort_t phys_cyl;
186*bb9b6b3fSSheshadri Vasudevan 	ushort_t phys_sec;
187*bb9b6b3fSSheshadri Vasudevan 	ushort_t phys_heads;
188*bb9b6b3fSSheshadri Vasudevan 	ushort_t alt_cyl;
189*bb9b6b3fSSheshadri Vasudevan 	ushort_t virt_cyl;
190*bb9b6b3fSSheshadri Vasudevan 	ushort_t virt_sec;
191*bb9b6b3fSSheshadri Vasudevan 	ushort_t virt_heads;
192*bb9b6b3fSSheshadri Vasudevan 	ushort_t sectsize;
193*bb9b6b3fSSheshadri Vasudevan } fdisk_disk_geom_t;
194*bb9b6b3fSSheshadri Vasudevan 
195*bb9b6b3fSSheshadri Vasudevan typedef struct ext_part
196*bb9b6b3fSSheshadri Vasudevan {
197*bb9b6b3fSSheshadri Vasudevan 	/* Structure holding geometry information about the device */
198*bb9b6b3fSSheshadri Vasudevan 	fdisk_disk_geom_t disk_geom;
199*bb9b6b3fSSheshadri Vasudevan 
200*bb9b6b3fSSheshadri Vasudevan 	struct ipart *mtable;
201*bb9b6b3fSSheshadri Vasudevan 
202*bb9b6b3fSSheshadri Vasudevan 	char device_name[PATH_MAX];
203*bb9b6b3fSSheshadri Vasudevan 
204*bb9b6b3fSSheshadri Vasudevan 	int dev_fd;
205*bb9b6b3fSSheshadri Vasudevan 
206*bb9b6b3fSSheshadri Vasudevan 	int op_flag;
207*bb9b6b3fSSheshadri Vasudevan 
208*bb9b6b3fSSheshadri Vasudevan 	/*
209*bb9b6b3fSSheshadri Vasudevan 	 * Head of the in memory structure (singly linked list) of extended
210*bb9b6b3fSSheshadri Vasudevan 	 * partition information.
211*bb9b6b3fSSheshadri Vasudevan 	 */
212*bb9b6b3fSSheshadri Vasudevan 	logical_drive_t *ld_head;
213*bb9b6b3fSSheshadri Vasudevan 	logical_drive_t *sorted_ld_head;
214*bb9b6b3fSSheshadri Vasudevan 
215*bb9b6b3fSSheshadri Vasudevan 	/* Beginning cylinder of the extended partition */
216*bb9b6b3fSSheshadri Vasudevan 	uint32_t ext_beg_cyl;
217*bb9b6b3fSSheshadri Vasudevan 
218*bb9b6b3fSSheshadri Vasudevan 	/* Ending cylinder of the extended partition */
219*bb9b6b3fSSheshadri Vasudevan 	uint32_t ext_end_cyl;
220*bb9b6b3fSSheshadri Vasudevan 
221*bb9b6b3fSSheshadri Vasudevan 	/* Beginning sector of the extended partition */
222*bb9b6b3fSSheshadri Vasudevan 	uint32_t ext_beg_sec;
223*bb9b6b3fSSheshadri Vasudevan 
224*bb9b6b3fSSheshadri Vasudevan 	/* Ending sector of the extended partition */
225*bb9b6b3fSSheshadri Vasudevan 	uint32_t ext_end_sec;
226*bb9b6b3fSSheshadri Vasudevan 
227*bb9b6b3fSSheshadri Vasudevan 	/* Count of the number of logical drives in the extended partition */
228*bb9b6b3fSSheshadri Vasudevan 	int logical_drive_count;
229*bb9b6b3fSSheshadri Vasudevan 
230*bb9b6b3fSSheshadri Vasudevan 	/*
231*bb9b6b3fSSheshadri Vasudevan 	 * Flag to keep track of the update to be made to the Extended Boot
232*bb9b6b3fSSheshadri Vasudevan 	 * Record (EBR) when all logical drives are deleted. The EBR is filled
233*bb9b6b3fSSheshadri Vasudevan 	 * with zeroes in such a case.
234*bb9b6b3fSSheshadri Vasudevan 	 */
235*bb9b6b3fSSheshadri Vasudevan 	int first_ebr_is_null;
236*bb9b6b3fSSheshadri Vasudevan 
237*bb9b6b3fSSheshadri Vasudevan 	/*
238*bb9b6b3fSSheshadri Vasudevan 	 * Flag to indicate corrupt logical drives. Can happen when a partition
239*bb9b6b3fSSheshadri Vasudevan 	 * manager creates an extended partition and does not null the first EBR
240*bb9b6b3fSSheshadri Vasudevan 	 * or when important ondisk structures are overwritten by a bad program
241*bb9b6b3fSSheshadri Vasudevan 	 */
242*bb9b6b3fSSheshadri Vasudevan 	int corrupt_logical_drives;
243*bb9b6b3fSSheshadri Vasudevan 
244*bb9b6b3fSSheshadri Vasudevan 	/*
245*bb9b6b3fSSheshadri Vasudevan 	 * The boot block signature 0xAA55 might not be found on some of the
246*bb9b6b3fSSheshadri Vasudevan 	 * EBRs. ( Even though the rest of the data might be good )
247*bb9b6b3fSSheshadri Vasudevan 	 * The following array is used to store the list of such logical drive
248*bb9b6b3fSSheshadri Vasudevan 	 * numbers.
249*bb9b6b3fSSheshadri Vasudevan 	 */
250*bb9b6b3fSSheshadri Vasudevan 	uchar_t invalid_bb_sig[MAX_EXT_PARTS];
251*bb9b6b3fSSheshadri Vasudevan 
252*bb9b6b3fSSheshadri Vasudevan 	/*
253*bb9b6b3fSSheshadri Vasudevan 	 * Can add  a "next" pointer here in case support for multiple
254*bb9b6b3fSSheshadri Vasudevan 	 * extended partitions becomes the standard someday.
255*bb9b6b3fSSheshadri Vasudevan 	 *
256*bb9b6b3fSSheshadri Vasudevan 	 * struct ext_part *next;
257*bb9b6b3fSSheshadri Vasudevan 	 */
258*bb9b6b3fSSheshadri Vasudevan } ext_part_t;
259*bb9b6b3fSSheshadri Vasudevan 
260*bb9b6b3fSSheshadri Vasudevan #define	fdisk_get_logical_drive_count(epp) ((epp)->logical_drive_count)
261*bb9b6b3fSSheshadri Vasudevan #define	fdisk_corrupt_logical_drives(epp) ((epp)->corrupt_logical_drives)
262*bb9b6b3fSSheshadri Vasudevan #define	fdisk_get_ext_beg_cyl(epp) ((epp)->ext_beg_cyl)
263*bb9b6b3fSSheshadri Vasudevan #define	fdisk_get_ext_end_cyl(epp) ((epp)->ext_end_cyl)
264*bb9b6b3fSSheshadri Vasudevan #define	fdisk_get_ext_beg_sec(epp) ((epp)->ext_beg_sec)
265*bb9b6b3fSSheshadri Vasudevan #define	fdisk_get_ext_end_sec(epp) ((epp)->ext_end_sec)
266*bb9b6b3fSSheshadri Vasudevan #define	fdisk_get_ld_head(epp) ((epp)->ld_head)
267*bb9b6b3fSSheshadri Vasudevan #define	fdisk_is_solaris_part(id) (((id) == SUNIXOS) || ((id) == SUNIXOS2))
268*bb9b6b3fSSheshadri Vasudevan #define	fdisk_is_dos_extended(id) (((id) == EXTDOS) || ((id) == FDISK_EXTLBA))
269*bb9b6b3fSSheshadri Vasudevan 
270*bb9b6b3fSSheshadri Vasudevan extern int fdisk_is_linux_swap(ext_part_t *epp, uint32_t part_start,
271*bb9b6b3fSSheshadri Vasudevan     uint64_t *lsm_offset);
272*bb9b6b3fSSheshadri Vasudevan extern int libfdisk_init(ext_part_t **epp, char *devstr, struct ipart *parttab,
273*bb9b6b3fSSheshadri Vasudevan     int opflag);
274*bb9b6b3fSSheshadri Vasudevan extern int libfdisk_reset(ext_part_t *epp);
275*bb9b6b3fSSheshadri Vasudevan extern void libfdisk_fini(ext_part_t **epp);
276*bb9b6b3fSSheshadri Vasudevan extern int fdisk_ext_find_first_free_sec(ext_part_t *epp,
277*bb9b6b3fSSheshadri Vasudevan     uint32_t *first_free_sec);
278*bb9b6b3fSSheshadri Vasudevan extern uint32_t fdisk_ext_find_last_free_sec(ext_part_t *epp, uint32_t begsec);
279*bb9b6b3fSSheshadri Vasudevan extern int fdisk_ext_part_exists(ext_part_t *epp);
280*bb9b6b3fSSheshadri Vasudevan extern int fdisk_validate_logical_drive(ext_part_t *epp, uint32_t begsec,
281*bb9b6b3fSSheshadri Vasudevan     uint32_t offset, uint32_t numsec);
282*bb9b6b3fSSheshadri Vasudevan extern int fdisk_ext_validate_part_start(ext_part_t *epp, uint32_t begcyl,
283*bb9b6b3fSSheshadri Vasudevan     uint32_t *begsec);
284*bb9b6b3fSSheshadri Vasudevan extern int fdisk_get_solaris_part(ext_part_t *epp, int *pnum, uint32_t *begsec,
285*bb9b6b3fSSheshadri Vasudevan     uint32_t *numsec);
286*bb9b6b3fSSheshadri Vasudevan extern int fdisk_get_part_info(ext_part_t *epp, int pnum, uchar_t *sysid,
287*bb9b6b3fSSheshadri Vasudevan     uint32_t *begsec, uint32_t *numsec);
288*bb9b6b3fSSheshadri Vasudevan extern int fdisk_commit_ext_part(ext_part_t *epp);
289*bb9b6b3fSSheshadri Vasudevan extern void fdisk_change_logical_drive_id(ext_part_t *epp, int pno,
290*bb9b6b3fSSheshadri Vasudevan     uchar_t partid);
291*bb9b6b3fSSheshadri Vasudevan extern void fdisk_add_logical_drive(ext_part_t *epp, uint32_t begsec,
292*bb9b6b3fSSheshadri Vasudevan     uint32_t endsec, uchar_t partid);
293*bb9b6b3fSSheshadri Vasudevan extern void fdisk_delete_logical_drive(ext_part_t *epp, int pno);
294*bb9b6b3fSSheshadri Vasudevan extern int fdisk_init_ext_part(ext_part_t *epp, uint32_t rsect, uint32_t nsect);
295*bb9b6b3fSSheshadri Vasudevan extern int fdisk_delete_ext_part(ext_part_t *epp);
296*bb9b6b3fSSheshadri Vasudevan extern int fdisk_get_disk_geom(ext_part_t *epp, int type, int what);
297*bb9b6b3fSSheshadri Vasudevan extern int fdisk_invalid_bb_sig(ext_part_t *epp, uchar_t **bbsig_arr);
298*bb9b6b3fSSheshadri Vasudevan extern int fdisk_mounted_logical_drives(ext_part_t *epp);
299*bb9b6b3fSSheshadri Vasudevan 
300*bb9b6b3fSSheshadri Vasudevan #ifdef	__cplusplus
301*bb9b6b3fSSheshadri Vasudevan }
302*bb9b6b3fSSheshadri Vasudevan #endif
303*bb9b6b3fSSheshadri Vasudevan 
304*bb9b6b3fSSheshadri Vasudevan #endif /* _LIBFDISK_H_ */
305