Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/usr.sbin/bsdinstall/partedit/partedit_powerpc.c
103499 views
1
/*-
2
* SPDX-License-Identifier: BSD-2-Clause
3
*
4
* Copyright (c) 2011 Nathan Whitehorn
5
* All rights reserved.
6
*
7
* Redistribution and use in source and binary forms, with or without
8
* modification, are permitted provided that the following conditions
9
* are met:
10
* 1. Redistributions of source code must retain the above copyright
11
* notice, this list of conditions and the following disclaimer.
12
* 2. Redistributions in binary form must reproduce the above copyright
13
* notice, this list of conditions and the following disclaimer in the
14
* documentation and/or other materials provided with the distribution.
15
*
16
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26
* SUCH DAMAGE.
27
*/
28
29
#include <sys/types.h>
30
#include <sys/sysctl.h>
31
#include <string.h>
32
33
#include "partedit.h"
34
35
static char platform[255] = "";
36
37
const char *
38
default_scheme(void) {
39
size_t platlen = sizeof(platform);
40
if (strlen(platform) == 0)
41
sysctlbyname("hw.platform", platform, &platlen, NULL, -1);
42
43
if (strcmp(platform, "powermac") == 0)
44
return ("APM");
45
if (strcmp(platform, "chrp") == 0 || strcmp(platform, "ps3") == 0 ||
46
strcmp(platform, "mpc85xx") == 0)
47
return ("MBR");
48
49
/* Pick GPT as a generic default */
50
return ("GPT");
51
}
52
53
int
54
is_scheme_bootable(const char *part_type) {
55
size_t platlen = sizeof(platform);
56
if (strlen(platform) == 0)
57
sysctlbyname("hw.platform", platform, &platlen, NULL, -1);
58
59
if (strcmp(platform, "powermac") == 0 && strcmp(part_type, "APM") == 0)
60
return (1);
61
if (strcmp(platform, "powernv") == 0 && strcmp(part_type, "GPT") == 0)
62
return (1);
63
if ((strcmp(platform, "chrp") == 0 || strcmp(platform, "ps3") == 0) &&
64
(strcmp(part_type, "MBR") == 0 || strcmp(part_type, "BSD") == 0 ||
65
strcmp(part_type, "GPT") == 0))
66
return (1);
67
if (strcmp(platform, "mpc85xx") == 0 && strcmp(part_type, "MBR") == 0)
68
return (1);
69
70
return (0);
71
}
72
73
int
74
is_fs_bootable(const char *part_type, const char *fs)
75
{
76
if (strcmp(fs, "freebsd-ufs") == 0)
77
return (1);
78
79
return (0);
80
}
81
82
size_t
83
bootpart_size(const char *part_type)
84
{
85
size_t platlen = sizeof(platform);
86
if (strlen(platform) == 0)
87
sysctlbyname("hw.platform", platform, &platlen, NULL, -1);
88
89
if (strcmp(part_type, "APM") == 0)
90
return (800*1024);
91
if (strcmp(part_type, "BSD") == 0) /* Nothing for nested */
92
return (0);
93
if (strcmp(platform, "chrp") == 0)
94
return (800*1024);
95
if (strcmp(platform, "ps3") == 0 || strcmp(platform, "powernv") == 0)
96
return (512*1024*1024);
97
if (strcmp(platform, "mpc85xx") == 0)
98
return (16*1024*1024);
99
return (0);
100
}
101
102
const char *
103
bootpart_type(const char *scheme, const char **mountpoint)
104
{
105
size_t platlen = sizeof(platform);
106
if (strlen(platform) == 0)
107
sysctlbyname("hw.platform", platform, &platlen, NULL, -1);
108
109
if (strcmp(platform, "chrp") == 0)
110
return ("prep-boot");
111
if (strcmp(platform, "powermac") == 0)
112
return ("apple-boot");
113
if (strcmp(platform, "powernv") == 0 || strcmp(platform, "ps3") == 0) {
114
*mountpoint = "/boot";
115
if (strcmp(scheme, "GPT") == 0)
116
return ("ms-basic-data");
117
else if (strcmp(scheme, "MBR") == 0)
118
return ("fat32");
119
}
120
if (strcmp(platform, "mpc85xx") == 0) {
121
*mountpoint = "/boot/uboot";
122
return ("fat16");
123
}
124
125
return ("freebsd-boot");
126
}
127
128
const char *
129
bootcode_path(const char *part_type) {
130
return (NULL);
131
}
132
133
const char *
134
partcode_path(const char *part_type, const char *fs_type) {
135
size_t platlen = sizeof(platform);
136
if (strlen(platform) == 0)
137
sysctlbyname("hw.platform", platform, &platlen, NULL, -1);
138
139
if (strcmp(part_type, "APM") == 0)
140
return ("/boot/boot1.hfs");
141
if (strcmp(platform, "chrp") == 0)
142
return ("/boot/boot1.elf");
143
return (NULL);
144
}
145
146
147