1*22028508SToomas Soome /* 2*22028508SToomas Soome * Copyright (c) 2012 Andrey V. Elsukov <ae@FreeBSD.org> 3*22028508SToomas Soome * All rights reserved. 4*22028508SToomas Soome * 5*22028508SToomas Soome * Redistribution and use in source and binary forms, with or without 6*22028508SToomas Soome * modification, are permitted provided that the following conditions 7*22028508SToomas Soome * are met: 8*22028508SToomas Soome * 1. Redistributions of source code must retain the above copyright 9*22028508SToomas Soome * notice, this list of conditions and the following disclaimer. 10*22028508SToomas Soome * 2. Redistributions in binary form must reproduce the above copyright 11*22028508SToomas Soome * notice, this list of conditions and the following disclaimer in the 12*22028508SToomas Soome * documentation and/or other materials provided with the distribution. 13*22028508SToomas Soome * 14*22028508SToomas Soome * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND 15*22028508SToomas Soome * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16*22028508SToomas Soome * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17*22028508SToomas Soome * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE 18*22028508SToomas Soome * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19*22028508SToomas Soome * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20*22028508SToomas Soome * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21*22028508SToomas Soome * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22*22028508SToomas Soome * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23*22028508SToomas Soome * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24*22028508SToomas Soome * SUCH DAMAGE. 25*22028508SToomas Soome */ 26*22028508SToomas Soome 27*22028508SToomas Soome #ifndef _PART_H_ 28*22028508SToomas Soome #define _PART_H_ 29*22028508SToomas Soome 30*22028508SToomas Soome struct ptable; 31*22028508SToomas Soome 32*22028508SToomas Soome enum ptable_type { 33*22028508SToomas Soome PTABLE_NONE, 34*22028508SToomas Soome PTABLE_BSD, 35*22028508SToomas Soome PTABLE_MBR, 36*22028508SToomas Soome PTABLE_GPT, 37*22028508SToomas Soome PTABLE_VTOC8, 38*22028508SToomas Soome PTABLE_VTOC, 39*22028508SToomas Soome PTABLE_ISO9660 40*22028508SToomas Soome }; 41*22028508SToomas Soome 42*22028508SToomas Soome enum partition_type { 43*22028508SToomas Soome PART_UNKNOWN, 44*22028508SToomas Soome PART_EFI, 45*22028508SToomas Soome PART_FREEBSD, 46*22028508SToomas Soome PART_FREEBSD_BOOT, 47*22028508SToomas Soome PART_FREEBSD_UFS, 48*22028508SToomas Soome PART_FREEBSD_ZFS, 49*22028508SToomas Soome PART_FREEBSD_SWAP, 50*22028508SToomas Soome PART_FREEBSD_VINUM, 51*22028508SToomas Soome PART_LINUX, 52*22028508SToomas Soome PART_LINUX_SWAP, 53*22028508SToomas Soome PART_DOS, 54*22028508SToomas Soome PART_ISO9660, 55*22028508SToomas Soome PART_SOLARIS2, 56*22028508SToomas Soome PART_ILLUMOS_UFS, 57*22028508SToomas Soome PART_ILLUMOS_ZFS, 58*22028508SToomas Soome PART_RESERVED, 59*22028508SToomas Soome PART_VTOC_BOOT, 60*22028508SToomas Soome PART_VTOC_ROOT, 61*22028508SToomas Soome PART_VTOC_SWAP, 62*22028508SToomas Soome PART_VTOC_USR, 63*22028508SToomas Soome PART_VTOC_BACKUP, 64*22028508SToomas Soome PART_VTOC_STAND, 65*22028508SToomas Soome PART_VTOC_VAR, 66*22028508SToomas Soome PART_VTOC_HOME, 67*22028508SToomas Soome PART_APFS 68*22028508SToomas Soome }; 69*22028508SToomas Soome 70*22028508SToomas Soome struct ptable_entry { 71*22028508SToomas Soome uint64_t start; 72*22028508SToomas Soome uint64_t end; 73*22028508SToomas Soome int index; 74*22028508SToomas Soome enum partition_type type; 75*22028508SToomas Soome }; 76*22028508SToomas Soome 77*22028508SToomas Soome /* The offset and size are in sectors */ 78*22028508SToomas Soome typedef int (diskread_t)(void *arg, void *buf, size_t blocks, uint64_t offset); 79*22028508SToomas Soome typedef int (ptable_iterate_t)(void *arg, const char *partname, 80*22028508SToomas Soome const struct ptable_entry *part); 81*22028508SToomas Soome 82*22028508SToomas Soome struct ptable *ptable_open(void *dev, uint64_t sectors, uint16_t sectorsize, 83*22028508SToomas Soome diskread_t *dread); 84*22028508SToomas Soome void ptable_close(struct ptable *table); 85*22028508SToomas Soome enum ptable_type ptable_gettype(const struct ptable *table); 86*22028508SToomas Soome int ptable_getsize(const struct ptable *table, uint64_t *sizep); 87*22028508SToomas Soome 88*22028508SToomas Soome int ptable_getpart(const struct ptable *table, struct ptable_entry *part, 89*22028508SToomas Soome int index); 90*22028508SToomas Soome int ptable_getbestpart(const struct ptable *table, struct ptable_entry *part); 91*22028508SToomas Soome 92*22028508SToomas Soome int ptable_iterate(const struct ptable *table, void *arg, 93*22028508SToomas Soome ptable_iterate_t *iter); 94*22028508SToomas Soome const char *parttype2str(enum partition_type type); 95*22028508SToomas Soome 96*22028508SToomas Soome #endif /* !_PART_H_ */ 97