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