1 /*
2 * Copyright (C) 2016 Cavium Inc.
3 * All rights reserved.
4 *
5 * Developed by Semihalf.
6 * Based on work by Nathan Whitehorn.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 */
29
30 #include <sys/types.h>
31 #include <string.h>
32
33 #include "partedit.h"
34
35 /*
36 * partedit implementation for platforms on which the installer only offers
37 * UEFI-based boot. Currently, this includes arm64 and RISC-V.
38 */
39
40 /* EFI partition size in bytes */
41 #define EFI_BOOTPART_SIZE (260 * 1024 * 1024)
42
43 const char *
default_scheme(void)44 default_scheme(void)
45 {
46
47 return ("GPT");
48 }
49
50 int
is_scheme_bootable(const char * part_type)51 is_scheme_bootable(const char *part_type)
52 {
53
54 if (strcmp(part_type, "GPT") == 0)
55 return (1);
56
57 return (0);
58 }
59
60 int
is_fs_bootable(const char * part_type,const char * fs)61 is_fs_bootable(const char *part_type, const char *fs)
62 {
63
64 if (strcmp(fs, "freebsd-ufs") == 0)
65 return (1);
66
67 return (0);
68 }
69
70 size_t
bootpart_size(const char * scheme)71 bootpart_size(const char *scheme)
72 {
73
74 /* We only support GPT with EFI */
75 if (strcmp(scheme, "GPT") != 0)
76 return (0);
77
78 return (EFI_BOOTPART_SIZE);
79 }
80
81 const char *
bootpart_type(const char * scheme,const char ** mountpoint)82 bootpart_type(const char *scheme, const char **mountpoint)
83 {
84
85 /* Only EFI is supported as boot partition */
86 *mountpoint = "/boot/efi";
87 return ("efi");
88 }
89
90 const char *
bootcode_path(const char * part_type)91 bootcode_path(const char *part_type)
92 {
93
94 return (NULL);
95 }
96
97 const char *
partcode_path(const char * part_type,const char * fs_type)98 partcode_path(const char *part_type, const char *fs_type)
99 {
100
101 /* No boot partition data. */
102 return (NULL);
103 }
104
105