xref: /dflybsd-src/usr.sbin/installer/libinstaller/diskutil.h (revision 21c1c48a7e64668a06720f9c83e65819a98cccee)
1*21c1c48aSSascha Wildner /*
2*21c1c48aSSascha Wildner  * Copyright (c)2004 The DragonFly Project.  All rights reserved.
3*21c1c48aSSascha Wildner  *
4*21c1c48aSSascha Wildner  * Redistribution and use in source and binary forms, with or without
5*21c1c48aSSascha Wildner  * modification, are permitted provided that the following conditions
6*21c1c48aSSascha Wildner  * are met:
7*21c1c48aSSascha Wildner  *
8*21c1c48aSSascha Wildner  *   Redistributions of source code must retain the above copyright
9*21c1c48aSSascha Wildner  *   notice, this list of conditions and the following disclaimer.
10*21c1c48aSSascha Wildner  *
11*21c1c48aSSascha Wildner  *   Redistributions in binary form must reproduce the above copyright
12*21c1c48aSSascha Wildner  *   notice, this list of conditions and the following disclaimer in
13*21c1c48aSSascha Wildner  *   the documentation and/or other materials provided with the
14*21c1c48aSSascha Wildner  *   distribution.
15*21c1c48aSSascha Wildner  *
16*21c1c48aSSascha Wildner  *   Neither the name of the DragonFly Project nor the names of its
17*21c1c48aSSascha Wildner  *   contributors may be used to endorse or promote products derived
18*21c1c48aSSascha Wildner  *   from this software without specific prior written permission.
19*21c1c48aSSascha Wildner  *
20*21c1c48aSSascha Wildner  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21*21c1c48aSSascha Wildner  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22*21c1c48aSSascha Wildner  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23*21c1c48aSSascha Wildner  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24*21c1c48aSSascha Wildner  * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
25*21c1c48aSSascha Wildner  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26*21c1c48aSSascha Wildner  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27*21c1c48aSSascha Wildner  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28*21c1c48aSSascha Wildner  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
29*21c1c48aSSascha Wildner  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30*21c1c48aSSascha Wildner  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
31*21c1c48aSSascha Wildner  * OF THE POSSIBILITY OF SUCH DAMAGE.
32*21c1c48aSSascha Wildner  */
33*21c1c48aSSascha Wildner 
34*21c1c48aSSascha Wildner /*
35*21c1c48aSSascha Wildner  * diskutil.h
36*21c1c48aSSascha Wildner  * $Id: diskutil.h,v 1.14 2005/02/07 06:41:42 cpressey Exp $
37*21c1c48aSSascha Wildner  */
38*21c1c48aSSascha Wildner 
39*21c1c48aSSascha Wildner #include <stdio.h>
40*21c1c48aSSascha Wildner 
41*21c1c48aSSascha Wildner #ifndef __DISKUTIL_H_
42*21c1c48aSSascha Wildner #define __DISKUTIL_H_
43*21c1c48aSSascha Wildner 
44*21c1c48aSSascha Wildner #include "functions.h"
45*21c1c48aSSascha Wildner 
46*21c1c48aSSascha Wildner /*** TYPES ***/
47*21c1c48aSSascha Wildner 
48*21c1c48aSSascha Wildner struct storage;
49*21c1c48aSSascha Wildner struct disk;
50*21c1c48aSSascha Wildner struct slice;
51*21c1c48aSSascha Wildner struct subpartition;
52*21c1c48aSSascha Wildner 
53*21c1c48aSSascha Wildner #define FS_HAMMER	0
54*21c1c48aSSascha Wildner #define FS_UFS		1
55*21c1c48aSSascha Wildner 
56*21c1c48aSSascha Wildner #ifdef NEEDS_DISKUTIL_STRUCTURE_DEFINITIONS
57*21c1c48aSSascha Wildner 
58*21c1c48aSSascha Wildner struct storage {
59*21c1c48aSSascha Wildner 	struct disk *disk_head;
60*21c1c48aSSascha Wildner 	struct disk *disk_tail;
61*21c1c48aSSascha Wildner 	struct disk *selected_disk;
62*21c1c48aSSascha Wildner 	struct slice *selected_slice;
63*21c1c48aSSascha Wildner 	unsigned long ram;			/* amount of physical memory in MB */
64*21c1c48aSSascha Wildner };
65*21c1c48aSSascha Wildner 
66*21c1c48aSSascha Wildner struct disk {
67*21c1c48aSSascha Wildner 	struct disk *next;
68*21c1c48aSSascha Wildner 	struct disk *prev;
69*21c1c48aSSascha Wildner 	struct slice *slice_head;
70*21c1c48aSSascha Wildner 	struct slice *slice_tail;
71*21c1c48aSSascha Wildner 	char *desc;			/* from whereever we get the best */
72*21c1c48aSSascha Wildner 	char *device;			/* `ad0', `da1', and such */
73*21c1c48aSSascha Wildner 	int cylinders;			/* geometry information */
74*21c1c48aSSascha Wildner 	int heads;
75*21c1c48aSSascha Wildner 	int sectors;			/* (sectors per track) */
76*21c1c48aSSascha Wildner 	long capacity;			/* capacity in megabytes */
77*21c1c48aSSascha Wildner 	int we_formatted;		/* did we format it ourselves? */
78*21c1c48aSSascha Wildner };
79*21c1c48aSSascha Wildner 
80*21c1c48aSSascha Wildner struct slice {
81*21c1c48aSSascha Wildner 	struct disk *parent;
82*21c1c48aSSascha Wildner 	struct slice *next;
83*21c1c48aSSascha Wildner 	struct slice *prev;
84*21c1c48aSSascha Wildner 	struct subpartition *subpartition_head;
85*21c1c48aSSascha Wildner 	struct subpartition *subpartition_tail;
86*21c1c48aSSascha Wildner 	char *desc;			/* description (w/sysid string) */
87*21c1c48aSSascha Wildner 	int number;			/* 1 - 4 (or more?) (from fdisk) */
88*21c1c48aSSascha Wildner 	unsigned long start;		/* start sector (from fdisk) */
89*21c1c48aSSascha Wildner 	unsigned long size;		/* size in sectors (from fdisk) */
90*21c1c48aSSascha Wildner 	int type;			/* sysid of slice (from fdisk) */
91*21c1c48aSSascha Wildner 	int flags;			/* flags (from fdisk) */
92*21c1c48aSSascha Wildner 	unsigned long capacity;		/* capacity in megabytes */
93*21c1c48aSSascha Wildner };
94*21c1c48aSSascha Wildner 
95*21c1c48aSSascha Wildner struct subpartition {
96*21c1c48aSSascha Wildner 	struct slice *parent;
97*21c1c48aSSascha Wildner 	struct subpartition *next;
98*21c1c48aSSascha Wildner 	struct subpartition *prev;
99*21c1c48aSSascha Wildner 	char letter;			/* 'a' = root partition */
100*21c1c48aSSascha Wildner 	char *mountpoint;		/* includes leading slash */
101*21c1c48aSSascha Wildner 	long capacity;			/* in megabytes, -1 = "rest of disk" */
102*21c1c48aSSascha Wildner 	int softupdates;
103*21c1c48aSSascha Wildner 	long fsize;			/* fragment size */
104*21c1c48aSSascha Wildner 	long bsize;			/* block size */
105*21c1c48aSSascha Wildner 	int is_swap;
106*21c1c48aSSascha Wildner 	int mfsbacked;			/* Memory File System Backed */
107*21c1c48aSSascha Wildner 	int type;			/* FS type (UFS, HAMMER) */
108*21c1c48aSSascha Wildner 	int pfs;			/* HAMMER pseudo file system */
109*21c1c48aSSascha Wildner };
110*21c1c48aSSascha Wildner 
111*21c1c48aSSascha Wildner #endif /* NEEDS_DISKUTIL_STRUCTURE_DEFINITIONS */
112*21c1c48aSSascha Wildner 
113*21c1c48aSSascha Wildner /*** PROTOTYPES ***/
114*21c1c48aSSascha Wildner 
115*21c1c48aSSascha Wildner struct storage		*storage_new(void);
116*21c1c48aSSascha Wildner void			 storage_free(struct storage *);
117*21c1c48aSSascha Wildner void			 storage_set_memsize(struct storage *, unsigned long);
118*21c1c48aSSascha Wildner unsigned long		 storage_get_memsize(const struct storage *);
119*21c1c48aSSascha Wildner struct disk		*storage_disk_first(const struct storage *);
120*21c1c48aSSascha Wildner void			 storage_set_selected_disk(struct storage *, struct disk *);
121*21c1c48aSSascha Wildner struct disk		*storage_get_selected_disk(const struct storage *);
122*21c1c48aSSascha Wildner void			 storage_set_selected_slice(struct storage *, struct slice *);
123*21c1c48aSSascha Wildner struct slice		*storage_get_selected_slice(const struct storage *);
124*21c1c48aSSascha Wildner int			 storage_get_mfs_status(const char *, struct storage *);
125*21c1c48aSSascha Wildner 
126*21c1c48aSSascha Wildner struct disk		*disk_new(struct storage *, const char *);
127*21c1c48aSSascha Wildner struct disk		*disk_find(const struct storage *, const char *);
128*21c1c48aSSascha Wildner struct disk		*disk_next(const struct disk *);
129*21c1c48aSSascha Wildner void			 disks_free(struct storage *);
130*21c1c48aSSascha Wildner void			 disk_set_desc(struct disk *, const char *);
131*21c1c48aSSascha Wildner const char		*disk_get_desc(const struct disk *);
132*21c1c48aSSascha Wildner const char		*disk_get_device_name(const struct disk *);
133*21c1c48aSSascha Wildner const char		*disk_get_raw_device_name(const struct disk *);
134*21c1c48aSSascha Wildner struct slice		*disk_slice_first(const struct disk *);
135*21c1c48aSSascha Wildner void			 disk_set_formatted(struct disk *, int);
136*21c1c48aSSascha Wildner int			 disk_get_formatted(const struct disk *);
137*21c1c48aSSascha Wildner void			 disk_set_geometry(struct disk *, int, int, int);
138*21c1c48aSSascha Wildner void			 disk_get_geometry(const struct disk *, int *, int *, int *);
139*21c1c48aSSascha Wildner 
140*21c1c48aSSascha Wildner struct slice		*slice_new(struct disk *, int, int, int,
141*21c1c48aSSascha Wildner 				   unsigned long, unsigned long);
142*21c1c48aSSascha Wildner struct slice		*slice_find(const struct disk *, int);
143*21c1c48aSSascha Wildner struct slice		*slice_next(const struct slice *);
144*21c1c48aSSascha Wildner int			 slice_get_number(const struct slice *);
145*21c1c48aSSascha Wildner const char		*slice_get_desc(const struct slice *);
146*21c1c48aSSascha Wildner const char		*slice_get_device_name(const struct slice *);
147*21c1c48aSSascha Wildner const char		*slice_get_raw_device_name(const struct slice *);
148*21c1c48aSSascha Wildner unsigned long		 slice_get_capacity(const struct slice *);
149*21c1c48aSSascha Wildner unsigned long		 slice_get_start(const struct slice *);
150*21c1c48aSSascha Wildner unsigned long		 slice_get_size(const struct slice *);
151*21c1c48aSSascha Wildner int			 slice_get_type(const struct slice *);
152*21c1c48aSSascha Wildner int			 slice_get_flags(const struct slice *);
153*21c1c48aSSascha Wildner void			 slices_free(struct slice *);
154*21c1c48aSSascha Wildner struct subpartition	*slice_subpartition_first(const struct slice *);
155*21c1c48aSSascha Wildner 
156*21c1c48aSSascha Wildner struct subpartition	*subpartition_new(struct slice *, const char *, long,
157*21c1c48aSSascha Wildner 					  int, long, long, int);
158*21c1c48aSSascha Wildner struct subpartition	*subpartition_new_hammer(struct slice *, const char *, long);
159*21c1c48aSSascha Wildner int			 subpartition_count(const struct slice *);
160*21c1c48aSSascha Wildner struct subpartition	*subpartition_find(const struct slice *, const char *, ...);
161*21c1c48aSSascha Wildner struct subpartition	*subpartition_of(const struct slice *, const char *, ...);
162*21c1c48aSSascha Wildner struct subpartition	*subpartition_find_capacity(const struct slice *, long);
163*21c1c48aSSascha Wildner void		 	 subpartitions_free(struct slice *);
164*21c1c48aSSascha Wildner struct subpartition	*subpartition_next(const struct subpartition *);
165*21c1c48aSSascha Wildner int 			 subpartition_get_pfs(const struct subpartition *);
166*21c1c48aSSascha Wildner const char		*subpartition_get_mountpoint(const struct subpartition *);
167*21c1c48aSSascha Wildner const char		*subpartition_get_device_name(const struct subpartition *);
168*21c1c48aSSascha Wildner const char		*subpartition_get_raw_device_name(const struct subpartition *);
169*21c1c48aSSascha Wildner char			 subpartition_get_letter(const struct subpartition *);
170*21c1c48aSSascha Wildner unsigned long		 subpartition_get_fsize(const struct subpartition *);
171*21c1c48aSSascha Wildner unsigned long		 subpartition_get_bsize(const struct subpartition *);
172*21c1c48aSSascha Wildner unsigned long		 subpartition_get_capacity(const struct subpartition *);
173*21c1c48aSSascha Wildner int			 subpartition_is_swap(const struct subpartition *);
174*21c1c48aSSascha Wildner int			 subpartition_is_softupdated(const struct subpartition *);
175*21c1c48aSSascha Wildner int			 subpartition_is_mfsbacked(const struct subpartition *);
176*21c1c48aSSascha Wildner 
177*21c1c48aSSascha Wildner long			 measure_activated_swap(const struct i_fn_args *);
178*21c1c48aSSascha Wildner long			 measure_activated_swap_from_slice(const struct i_fn_args *,
179*21c1c48aSSascha Wildner 				const struct disk *, const struct slice *);
180*21c1c48aSSascha Wildner long			 measure_activated_swap_from_disk(const struct i_fn_args *,
181*21c1c48aSSascha Wildner 				const struct disk *);
182*21c1c48aSSascha Wildner 
183*21c1c48aSSascha Wildner int			 survey_storage(struct i_fn_args *);
184*21c1c48aSSascha Wildner 
185*21c1c48aSSascha Wildner #endif /* !__DISKUTIL_H_ */
186