121c1c48aSSascha Wildner /* 221c1c48aSSascha Wildner * Copyright (c)2004 The DragonFly Project. All rights reserved. 321c1c48aSSascha Wildner * 421c1c48aSSascha Wildner * Redistribution and use in source and binary forms, with or without 521c1c48aSSascha Wildner * modification, are permitted provided that the following conditions 621c1c48aSSascha Wildner * are met: 721c1c48aSSascha Wildner * 821c1c48aSSascha Wildner * Redistributions of source code must retain the above copyright 921c1c48aSSascha Wildner * notice, this list of conditions and the following disclaimer. 1021c1c48aSSascha Wildner * 1121c1c48aSSascha Wildner * Redistributions in binary form must reproduce the above copyright 1221c1c48aSSascha Wildner * notice, this list of conditions and the following disclaimer in 1321c1c48aSSascha Wildner * the documentation and/or other materials provided with the 1421c1c48aSSascha Wildner * distribution. 1521c1c48aSSascha Wildner * 1621c1c48aSSascha Wildner * Neither the name of the DragonFly Project nor the names of its 1721c1c48aSSascha Wildner * contributors may be used to endorse or promote products derived 1821c1c48aSSascha Wildner * from this software without specific prior written permission. 1921c1c48aSSascha Wildner * 2021c1c48aSSascha Wildner * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 2121c1c48aSSascha Wildner * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2221c1c48aSSascha Wildner * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 2321c1c48aSSascha Wildner * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 2421c1c48aSSascha Wildner * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 2521c1c48aSSascha Wildner * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 2621c1c48aSSascha Wildner * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 2721c1c48aSSascha Wildner * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2821c1c48aSSascha Wildner * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 2921c1c48aSSascha Wildner * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 3021c1c48aSSascha Wildner * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 3121c1c48aSSascha Wildner * OF THE POSSIBILITY OF SUCH DAMAGE. 3221c1c48aSSascha Wildner */ 3321c1c48aSSascha Wildner 3421c1c48aSSascha Wildner /* 3521c1c48aSSascha Wildner * diskutil.h 3621c1c48aSSascha Wildner * $Id: diskutil.h,v 1.14 2005/02/07 06:41:42 cpressey Exp $ 3721c1c48aSSascha Wildner */ 3821c1c48aSSascha Wildner 3921c1c48aSSascha Wildner #include <stdio.h> 4021c1c48aSSascha Wildner 4121c1c48aSSascha Wildner #ifndef __DISKUTIL_H_ 4221c1c48aSSascha Wildner #define __DISKUTIL_H_ 4321c1c48aSSascha Wildner 4421c1c48aSSascha Wildner #include "functions.h" 4521c1c48aSSascha Wildner 4621c1c48aSSascha Wildner /*** TYPES ***/ 4721c1c48aSSascha Wildner 4821c1c48aSSascha Wildner struct storage; 4921c1c48aSSascha Wildner struct disk; 5021c1c48aSSascha Wildner struct slice; 5121c1c48aSSascha Wildner struct subpartition; 5221c1c48aSSascha Wildner 53e90c1ebbSMatthew Dillon #define FS_UFS 0 54e90c1ebbSMatthew Dillon #define FS_HAMMER 1 55e90c1ebbSMatthew Dillon #define FS_HAMMER2 2 5621c1c48aSSascha Wildner 5721c1c48aSSascha Wildner #ifdef NEEDS_DISKUTIL_STRUCTURE_DEFINITIONS 5821c1c48aSSascha Wildner 5921c1c48aSSascha Wildner struct storage { 6021c1c48aSSascha Wildner struct disk *disk_head; 6121c1c48aSSascha Wildner struct disk *disk_tail; 6221c1c48aSSascha Wildner struct disk *selected_disk; 6321c1c48aSSascha Wildner struct slice *selected_slice; 64a9879eb2SSascha Wildner long ram; /* amount of physical memory in MB */ 6521c1c48aSSascha Wildner }; 6621c1c48aSSascha Wildner 6721c1c48aSSascha Wildner struct disk { 6821c1c48aSSascha Wildner struct disk *next; 6921c1c48aSSascha Wildner struct disk *prev; 7021c1c48aSSascha Wildner struct slice *slice_head; 7121c1c48aSSascha Wildner struct slice *slice_tail; 72*88ed2a5cSSascha Wildner char *desc; /* from wherever we get the best */ 73f59b7dfaSSascha Wildner int number; /* Position in kern.disks */ 7421c1c48aSSascha Wildner char *device; /* `ad0', `da1', and such */ 75f59b7dfaSSascha Wildner char *serno; /* serial number */ 7621c1c48aSSascha Wildner int cylinders; /* geometry information */ 7721c1c48aSSascha Wildner int heads; 7821c1c48aSSascha Wildner int sectors; /* (sectors per track) */ 7921c1c48aSSascha Wildner long capacity; /* capacity in megabytes */ 8021c1c48aSSascha Wildner int we_formatted; /* did we format it ourselves? */ 8121c1c48aSSascha Wildner }; 8221c1c48aSSascha Wildner 8321c1c48aSSascha Wildner struct slice { 8421c1c48aSSascha Wildner struct disk *parent; 8521c1c48aSSascha Wildner struct slice *next; 8621c1c48aSSascha Wildner struct slice *prev; 8721c1c48aSSascha Wildner struct subpartition *subpartition_head; 8821c1c48aSSascha Wildner struct subpartition *subpartition_tail; 8921c1c48aSSascha Wildner char *desc; /* description (w/sysid string) */ 9021c1c48aSSascha Wildner int number; /* 1 - 4 (or more?) (from fdisk) */ 9121c1c48aSSascha Wildner unsigned long start; /* start sector (from fdisk) */ 9221c1c48aSSascha Wildner unsigned long size; /* size in sectors (from fdisk) */ 9321c1c48aSSascha Wildner int type; /* sysid of slice (from fdisk) */ 9421c1c48aSSascha Wildner int flags; /* flags (from fdisk) */ 9521c1c48aSSascha Wildner unsigned long capacity; /* capacity in megabytes */ 9621c1c48aSSascha Wildner }; 9721c1c48aSSascha Wildner 9821c1c48aSSascha Wildner struct subpartition { 9921c1c48aSSascha Wildner struct slice *parent; 10021c1c48aSSascha Wildner struct subpartition *next; 10121c1c48aSSascha Wildner struct subpartition *prev; 10221c1c48aSSascha Wildner char letter; /* 'a' = root partition */ 10321c1c48aSSascha Wildner char *mountpoint; /* includes leading slash */ 10421c1c48aSSascha Wildner long capacity; /* in megabytes, -1 = "rest of disk" */ 10588cfb1f7SSascha Wildner int encrypted; 10621c1c48aSSascha Wildner int softupdates; 10721c1c48aSSascha Wildner long fsize; /* fragment size */ 10821c1c48aSSascha Wildner long bsize; /* block size */ 10921c1c48aSSascha Wildner int is_swap; 110761cad2fSSascha Wildner int tmpfsbacked; /* TMPFS Backed */ 11121c1c48aSSascha Wildner int type; /* FS type (UFS, HAMMER) */ 11221c1c48aSSascha Wildner int pfs; /* HAMMER pseudo file system */ 11321c1c48aSSascha Wildner }; 11421c1c48aSSascha Wildner 11521c1c48aSSascha Wildner #endif /* NEEDS_DISKUTIL_STRUCTURE_DEFINITIONS */ 11621c1c48aSSascha Wildner 11721c1c48aSSascha Wildner /*** PROTOTYPES ***/ 11821c1c48aSSascha Wildner 11921c1c48aSSascha Wildner struct storage *storage_new(void); 12021c1c48aSSascha Wildner void storage_free(struct storage *); 12121c1c48aSSascha Wildner void storage_set_memsize(struct storage *, unsigned long); 122a9879eb2SSascha Wildner long storage_get_memsize(const struct storage *); 12321c1c48aSSascha Wildner struct disk *storage_disk_first(const struct storage *); 12421c1c48aSSascha Wildner void storage_set_selected_disk(struct storage *, struct disk *); 12521c1c48aSSascha Wildner struct disk *storage_get_selected_disk(const struct storage *); 12621c1c48aSSascha Wildner void storage_set_selected_slice(struct storage *, struct slice *); 12721c1c48aSSascha Wildner struct slice *storage_get_selected_slice(const struct storage *); 128761cad2fSSascha Wildner int storage_get_tmpfs_status(const char *, struct storage *); 12921c1c48aSSascha Wildner 13021c1c48aSSascha Wildner struct disk *disk_new(struct storage *, const char *); 13121c1c48aSSascha Wildner struct disk *disk_find(const struct storage *, const char *); 13221c1c48aSSascha Wildner struct disk *disk_next(const struct disk *); 13321c1c48aSSascha Wildner void disks_free(struct storage *); 134a07abcb9SMatthew Dillon unsigned long disk_get_capacity(const struct disk *); 135f59b7dfaSSascha Wildner void disk_set_number(struct disk *, const int); 13621c1c48aSSascha Wildner void disk_set_desc(struct disk *, const char *); 137f59b7dfaSSascha Wildner void disk_set_serno(struct disk *, const char *); 138f59b7dfaSSascha Wildner int disk_get_number(const struct disk *); 13921c1c48aSSascha Wildner const char *disk_get_desc(const struct disk *); 14021c1c48aSSascha Wildner const char *disk_get_device_name(const struct disk *); 141f59b7dfaSSascha Wildner const char *disk_get_serno(const struct disk *); 14221c1c48aSSascha Wildner struct slice *disk_slice_first(const struct disk *); 14321c1c48aSSascha Wildner void disk_set_formatted(struct disk *, int); 14421c1c48aSSascha Wildner int disk_get_formatted(const struct disk *); 14521c1c48aSSascha Wildner void disk_set_geometry(struct disk *, int, int, int); 14621c1c48aSSascha Wildner void disk_get_geometry(const struct disk *, int *, int *, int *); 14721c1c48aSSascha Wildner 14821c1c48aSSascha Wildner struct slice *slice_new(struct disk *, int, int, int, 14921c1c48aSSascha Wildner unsigned long, unsigned long); 15021c1c48aSSascha Wildner struct slice *slice_find(const struct disk *, int); 15121c1c48aSSascha Wildner struct slice *slice_next(const struct slice *); 15221c1c48aSSascha Wildner int slice_get_number(const struct slice *); 15321c1c48aSSascha Wildner const char *slice_get_desc(const struct slice *); 15421c1c48aSSascha Wildner const char *slice_get_device_name(const struct slice *); 15521c1c48aSSascha Wildner unsigned long slice_get_capacity(const struct slice *); 15621c1c48aSSascha Wildner unsigned long slice_get_start(const struct slice *); 15721c1c48aSSascha Wildner unsigned long slice_get_size(const struct slice *); 15821c1c48aSSascha Wildner int slice_get_type(const struct slice *); 15921c1c48aSSascha Wildner int slice_get_flags(const struct slice *); 16021c1c48aSSascha Wildner void slices_free(struct slice *); 16121c1c48aSSascha Wildner struct subpartition *slice_subpartition_first(const struct slice *); 16221c1c48aSSascha Wildner 16388cfb1f7SSascha Wildner struct subpartition *subpartition_new_hammer(struct slice *, const char *, 16488cfb1f7SSascha Wildner long, int); 165e90c1ebbSMatthew Dillon struct subpartition *subpartition_new_hammer2(struct slice *, const char *, 166e90c1ebbSMatthew Dillon long, int); 16788cfb1f7SSascha Wildner struct subpartition *subpartition_new_ufs(struct slice *, const char *, 16888cfb1f7SSascha Wildner long, int, int, long, long, int); 16921c1c48aSSascha Wildner int subpartition_count(const struct slice *); 17059b733d3SSascha Wildner struct subpartition *subpartition_find(const struct slice *, const char *, ...) 17159b733d3SSascha Wildner __printflike(2, 3); 17259b733d3SSascha Wildner struct subpartition *subpartition_of(const struct slice *, const char *, ...) 17359b733d3SSascha Wildner __printflike(2, 3); 17421c1c48aSSascha Wildner struct subpartition *subpartition_find_capacity(const struct slice *, long); 17521c1c48aSSascha Wildner void subpartitions_free(struct slice *); 17621c1c48aSSascha Wildner struct subpartition *subpartition_next(const struct subpartition *); 17721c1c48aSSascha Wildner int subpartition_get_pfs(const struct subpartition *); 17821c1c48aSSascha Wildner const char *subpartition_get_mountpoint(const struct subpartition *); 17921c1c48aSSascha Wildner const char *subpartition_get_device_name(const struct subpartition *); 1800c941bc8SSascha Wildner const char *subpartition_get_mapper_name(const struct subpartition *, int); 18121c1c48aSSascha Wildner char subpartition_get_letter(const struct subpartition *); 18221c1c48aSSascha Wildner unsigned long subpartition_get_fsize(const struct subpartition *); 18321c1c48aSSascha Wildner unsigned long subpartition_get_bsize(const struct subpartition *); 184a9879eb2SSascha Wildner long subpartition_get_capacity(const struct subpartition *); 185b8d2998cSSascha Wildner void subpartition_clr_encrypted(struct subpartition *); 18688cfb1f7SSascha Wildner int subpartition_is_encrypted(const struct subpartition *); 18721c1c48aSSascha Wildner int subpartition_is_swap(const struct subpartition *); 18821c1c48aSSascha Wildner int subpartition_is_softupdated(const struct subpartition *); 189761cad2fSSascha Wildner int subpartition_is_tmpfsbacked(const struct subpartition *); 19021c1c48aSSascha Wildner 19121c1c48aSSascha Wildner long measure_activated_swap(const struct i_fn_args *); 19221c1c48aSSascha Wildner long measure_activated_swap_from_slice(const struct i_fn_args *, 19321c1c48aSSascha Wildner const struct disk *, const struct slice *); 19421c1c48aSSascha Wildner long measure_activated_swap_from_disk(const struct i_fn_args *, 19521c1c48aSSascha Wildner const struct disk *); 1969687cd27SSascha Wildner void *swapoff_all(const struct i_fn_args *); 197fa419eaeSSascha Wildner void *remove_all_mappings(const struct i_fn_args *); 19821c1c48aSSascha Wildner 19921c1c48aSSascha Wildner int survey_storage(struct i_fn_args *); 20021c1c48aSSascha Wildner 20121c1c48aSSascha Wildner #endif /* !__DISKUTIL_H_ */ 202