make.sh: Introduce DEFAULT_PARALLELISM
[ipfire-2.x.git] / src / installer / hw.h
CommitLineData
f0fa1795
MT
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
25fcce25 26#define DESTINATION_MOUNT_PATH "/harddisk"
fb76fc51
MT
27#define SOURCE_MOUNT_PATH "/cdrom"
28#define SOURCE_TEST_FILE SOURCE_MOUNT_PATH "/" DISTRO_SNAME "-" DISTRO_VERSION ".media"
f0fa1795 29
d7dd283b
MT
30#define HW_MAX_DISKS 32
31#define STRING_SIZE 1024
32#define DEV_SIZE 128
33
25fcce25 34#define HW_PATH_BOOT "/boot"
92e78233 35#define HW_PATH_BOOT_EFI "/boot/efi"
25fcce25
MT
36#define HW_PATH_DATA "/var"
37
d7dd283b
MT
38#define HW_PART_TYPE_NORMAL 0
39#define HW_PART_TYPE_RAID1 1
40
25fcce25
MT
41#define HW_PART_TABLE_MSDOS 0
42#define HW_PART_TABLE_GPT 1
43
44#define HW_FS_SWAP 0
45#define HW_FS_REISERFS 1
46#define HW_FS_EXT4 2
47#define HW_FS_EXT4_WO_JOURNAL 3
70a44b52 48#define HW_FS_XFS 4
92e78233 49#define HW_FS_FAT32 5
25fcce25
MT
50
51#define HW_FS_DEFAULT HW_FS_EXT4
52
7b4790d3
MT
53#define RAID_METADATA "1.0"
54
9dd16c6d
MT
55#define SERIAL_BAUDRATE 115200
56
25fcce25
MT
57#define BYTES2MB(x) ((x) / 1024 / 1024)
58#define MB2BYTES(x) ((unsigned long long)(x) * 1024 * 1024)
59
f0fa1795
MT
60struct hw {
61 struct udev *udev;
92e78233 62 char arch[STRING_SIZE];
8fbadfc7
MT
63
64 // Enabled if we should install in EFI mode
5fb499f1 65 int efi;
f0fa1795
MT
66};
67
d7dd283b
MT
68struct hw_disk {
69 char path[DEV_SIZE];
70 unsigned long long size;
71
72 char description[STRING_SIZE];
73 char vendor[STRING_SIZE];
74 char model[STRING_SIZE];
75
76 // Reference counter
77 int ref;
78};
79
80struct hw_destination {
81 char path[DEV_SIZE];
d7dd283b
MT
82
83 int is_raid;
4a0d9bef 84 int raid_level;
d7dd283b
MT
85 const struct hw_disk* disk1;
86 const struct hw_disk* disk2;
87
25fcce25 88 int part_table;
48d6a112 89 char part_bootldr[DEV_SIZE];
d7dd283b 90 char part_boot[DEV_SIZE];
92e78233 91 char part_boot_efi[DEV_SIZE];
d7dd283b
MT
92 char part_swap[DEV_SIZE];
93 char part_root[DEV_SIZE];
25fcce25 94 int part_boot_idx;
92e78233 95 int part_boot_efi_idx;
25fcce25
MT
96
97 int filesystem;
98
99 unsigned long long size;
48d6a112 100 unsigned long long size_bootldr;
25fcce25 101 unsigned long long size_boot;
92e78233 102 unsigned long long size_boot_efi;
25fcce25
MT
103 unsigned long long size_swap;
104 unsigned long long size_root;
d7dd283b
MT
105};
106
f0fa1795
MT
107struct hw* hw_init();
108void hw_free(struct hw* hw);
109
25fcce25 110int hw_mount(const char* source, const char* target, const char* fs, int flags);
f0fa1795
MT
111int hw_umount(const char* target);
112
113char* hw_find_source_medium(struct hw* hw);
114
ee00d203 115struct hw_disk** hw_find_disks(struct hw* hw, const char* sourcedrive);
d7dd283b 116void hw_free_disks(struct hw_disk** disks);
335c5bd1 117unsigned int hw_count_disks(const struct hw_disk** disks);
d7dd283b 118struct hw_disk** hw_select_disks(struct hw_disk** disks, int* selection);
a3e135c8 119struct hw_disk** hw_select_first_disk(const struct hw_disk** disks);
d7dd283b 120
92e78233 121struct hw_destination* hw_make_destination(struct hw* hw, int part_type, struct hw_disk** disks,
a8fca245 122 int disable_swap);
25fcce25 123
c4e96674
MT
124unsigned long long hw_memory();
125
46b56e20
MT
126int hw_create_partitions(struct hw_destination* dest, const char* output);
127int hw_create_filesystems(struct hw_destination* dest, const char* output);
25fcce25
MT
128
129int hw_mount_filesystems(struct hw_destination* dest, const char* prefix);
130int hw_umount_filesystems(struct hw_destination* dest, const char* prefix);
131
d78fffa0 132int hw_destroy_raid_superblocks(const struct hw_destination* dest, const char* output);
46b56e20
MT
133int hw_setup_raid(struct hw_destination* dest, const char* output);
134int hw_stop_all_raid_arrays(const char* output);
4a0d9bef 135
92e78233 136int hw_install_bootloader(struct hw* hw, struct hw_destination* dest, const char* output);
7f69d8a4 137int hw_write_fstab(struct hw_destination* dest);
f5007e9c 138
38c6822d
MT
139char* hw_find_backup_file(const char* output, const char* search_path);
140int hw_restore_backup(const char* output, const char* backup_path, const char* destination);
141
335c5bd1
MT
142int hw_start_networking(const char* output);
143
282ec35e
MT
144void hw_sync();
145
f0fa1795 146#endif /* HEADER_HW_H */