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