]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blob - src/install+setup/install/hw.h
5cd4fe02602cd2411310c8f97598518098d33815
[people/pmueller/ipfire-2.x.git] / src / install+setup / install / hw.h
1 /*#############################################################################
2 # #
3 # IPFire - An Open Source Firewall Distribution #
4 # Copyright (C) 2014 IPFire development team #
5 # #
6 # This program is free software: you can redistribute it and/or modify #
7 # it under the terms of the GNU General Public License as published by #
8 # the Free Software Foundation, either version 3 of the License, or #
9 # (at your option) any later version. #
10 # #
11 # This program is distributed in the hope that it will be useful, #
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of #
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
14 # GNU General Public License for more details. #
15 # #
16 # You should have received a copy of the GNU General Public License #
17 # along with this program. If not, see <http://www.gnu.org/licenses/>. #
18 # #
19 #############################################################################*/
20
21 #ifndef HEADER_HW_H
22 #define HEADER_HW_H
23
24 #include <libudev.h>
25
26 #define DESTINATION_MOUNT_PATH "/harddisk"
27 #define SOURCE_MOUNT_PATH "/cdrom"
28 #define SOURCE_TEST_FILE SOURCE_MOUNT_PATH "/" VERSION ".media"
29
30 #define HW_MAX_DISKS 32
31 #define STRING_SIZE 1024
32 #define DEV_SIZE 128
33
34 #define HW_PATH_BOOT "/boot"
35 #define HW_PATH_DATA "/var"
36
37 #define HW_PART_TYPE_NORMAL 0
38 #define HW_PART_TYPE_RAID1 1
39
40 #define HW_PART_TABLE_MSDOS 0
41 #define HW_PART_TABLE_GPT 1
42
43 #define HW_FS_SWAP 0
44 #define HW_FS_REISERFS 1
45 #define HW_FS_EXT4 2
46 #define HW_FS_EXT4_WO_JOURNAL 3
47
48 #define HW_FS_DEFAULT HW_FS_EXT4
49
50 #define BYTES2MB(x) ((x) / 1024 / 1024)
51 #define MB2BYTES(x) ((unsigned long long)(x) * 1024 * 1024)
52
53 struct hw {
54 struct udev *udev;
55 };
56
57 struct hw_disk {
58 char path[DEV_SIZE];
59 unsigned long long size;
60
61 char description[STRING_SIZE];
62 char vendor[STRING_SIZE];
63 char model[STRING_SIZE];
64
65 // Reference counter
66 int ref;
67 };
68
69 struct hw_destination {
70 char path[DEV_SIZE];
71
72 int is_raid;
73 int raid_level;
74 const struct hw_disk* disk1;
75 const struct hw_disk* disk2;
76
77 int part_table;
78 char part_boot[DEV_SIZE];
79 char part_swap[DEV_SIZE];
80 char part_root[DEV_SIZE];
81 char part_data[DEV_SIZE];
82 int part_boot_idx;
83
84 int filesystem;
85
86 unsigned long long size;
87 unsigned long long size_boot;
88 unsigned long long size_swap;
89 unsigned long long size_root;
90 unsigned long long size_data;
91 };
92
93 struct hw* hw_init();
94 void hw_free(struct hw* hw);
95
96 int hw_mount(const char* source, const char* target, const char* fs, int flags);
97 int hw_umount(const char* target);
98
99 char* hw_find_source_medium(struct hw* hw);
100
101 struct hw_disk** hw_find_disks(struct hw* hw);
102 void hw_free_disks(struct hw_disk** disks);
103 unsigned int hw_count_disks(struct hw_disk** disks);
104 struct hw_disk** hw_select_disks(struct hw_disk** disks, int* selection);
105
106 struct hw_destination* hw_make_destination(int part_type, struct hw_disk** disks);
107
108 unsigned long long hw_memory();
109
110 int hw_create_partitions(struct hw_destination* dest);
111 int hw_create_filesystems(struct hw_destination* dest);
112
113 int hw_mount_filesystems(struct hw_destination* dest, const char* prefix);
114 int hw_umount_filesystems(struct hw_destination* dest, const char* prefix);
115
116 int hw_setup_raid(struct hw_destination* dest);
117 int hw_stop_all_raid_arrays();
118
119 int hw_install_bootloader(struct hw_destination* dest);
120
121 #endif /* HEADER_HW_H */