svn commit: r216884 - user/nwhitehorn/bsdinstall/partedit
Nathan Whitehorn
nwhitehorn at FreeBSD.org
Sun Jan 2 03:16:48 UTC 2011
Author: nwhitehorn
Date: Sun Jan 2 03:16:47 2011
New Revision: 216884
URL: http://svn.freebsd.org/changeset/base/216884
Log:
Add support for installations on sparc64 [tested] and pc98 [speculative].
Added:
user/nwhitehorn/bsdinstall/partedit/partedit_pc98.c
user/nwhitehorn/bsdinstall/partedit/partedit_sparc64.c
Modified:
user/nwhitehorn/bsdinstall/partedit/Makefile
user/nwhitehorn/bsdinstall/partedit/gpart_ops.c
user/nwhitehorn/bsdinstall/partedit/partedit.h
user/nwhitehorn/bsdinstall/partedit/partedit_powerpc.c
user/nwhitehorn/bsdinstall/partedit/partedit_x86.c
Modified: user/nwhitehorn/bsdinstall/partedit/Makefile
==============================================================================
--- user/nwhitehorn/bsdinstall/partedit/Makefile Sun Jan 2 03:16:07 2011 (r216883)
+++ user/nwhitehorn/bsdinstall/partedit/Makefile Sun Jan 2 03:16:47 2011 (r216884)
@@ -8,6 +8,9 @@ PARTEDIT_ARCH= ${MACHINE}
.if ${MACHINE} == "i386" || ${MACHINE} == "amd64"
PARTEDIT_ARCH= x86
.endif
+.if ${MACHINE} == "sun4v"
+PARTEDIT_ARCH= sparc64
+.endif
.if !exists(partedit_${PARTEDIT_ARCH}.c)
PARTEDIT_ARCH= generic
.endif
Modified: user/nwhitehorn/bsdinstall/partedit/gpart_ops.c
==============================================================================
--- user/nwhitehorn/bsdinstall/partedit/gpart_ops.c Sun Jan 2 03:16:07 2011 (r216883)
+++ user/nwhitehorn/bsdinstall/partedit/gpart_ops.c Sun Jan 2 03:16:47 2011 (r216884)
@@ -11,8 +11,8 @@
#define GPART_FLAGS "x" /* Do not commit changes by default */
-static void set_part_metadata(const char *name, const char *type,
- const char *mountpoint, int newfs);
+static void set_part_metadata(const char *name, const char *scheme,
+ const char *type, const char *mountpoint, int newfs);
static void
gpart_show_error(const char *title, const char *explanation, const char *errstr)
@@ -223,6 +223,10 @@ gpart_partcode(struct gprovider *pp)
}
}
+ /* Make sure this partition scheme needs partcode on this platform */
+ if (partcode_path(scheme) == NULL)
+ return;
+
LIST_FOREACH(gc, &pp->lg_config, lg_config) {
if (strcmp(gc->lg_name, "index") == 0) {
indexstr = gc->lg_val;
@@ -248,7 +252,7 @@ gpart_edit(struct gprovider *pp)
struct gconsumer *cp;
struct gprovider *spp;
struct ggeom *geom;
- const char *errstr, *oldtype;
+ const char *errstr, *oldtype, *scheme;
struct partition_metadata *md;
char sizestr[32];
intmax_t index;
@@ -330,6 +334,13 @@ gpart_edit(struct gprovider *pp)
return;
}
+ LIST_FOREACH(gc, &geom->lg_config, lg_config) {
+ if (strcmp(gc->lg_name, "scheme") == 0) {
+ scheme = gc->lg_val;
+ break;
+ }
+ }
+
/* Edit editable parameters of a partition */
hadlabel = 0;
LIST_FOREACH(gc, &pp->lg_config, lg_config) {
@@ -391,7 +402,7 @@ editpart:
}
gctl_free(r);
- set_part_metadata(pp->lg_name, items[0].text, items[3].text,
+ set_part_metadata(pp->lg_name, scheme, items[0].text, items[3].text,
strcmp(oldtype, items[0].text) != 0);
for (i = 0; i < (sizeof(items) / sizeof(items[0])); i++)
@@ -400,8 +411,8 @@ editpart:
}
static void
-set_part_metadata(const char *name, const char *type, const char *mountpoint,
- int newfs)
+set_part_metadata(const char *name, const char *scheme, const char *type,
+ const char *mountpoint, int newfs)
{
struct partition_metadata *md;
@@ -424,6 +435,10 @@ set_part_metadata(const char *name, cons
mountpoint = "none";
if (strcmp(type, "freebsd-boot") == 0)
md->bootcode = 1;
+
+ /* VTOC8 needs partcode in UFS partitions */
+ if (strcmp(scheme, "VTOC8") == 0 && strcmp(type, "freebsd-ufs") == 0)
+ md->bootcode = 1;
if (mountpoint != NULL && mountpoint[0] != '\0') {
if (md->fstab == NULL) {
@@ -571,7 +586,7 @@ gpart_create(struct gprovider *pp)
items[1].text = sizestr;
/* Special-case the MBR default type for nested partitions */
- if (strcmp(scheme, "MBR") == 0)
+ if (strcmp(scheme, "MBR") == 0 || strcmp(scheme, "PC98") == 0)
items[0].text = "freebsd";
addpartform:
@@ -602,8 +617,11 @@ addpartform:
goto addpartform;
}
- /* If this is the root partition, and we need partcode, ask the user */
- if (strcmp(items[3].text, "/") == 0 && partcode_size(scheme) > 0) {
+ /*
+ * If this is the root partition, and we need a boot partition, ask
+ * the user to add one.
+ */
+ if (strcmp(items[3].text, "/") == 0 && bootpart_size(scheme) > 0) {
choice = dialog_yesno("Boot Partition", "This partition scheme "
"requires a boot partition for the disk to be bootable. "
"Would you like to make one now?", 0, 0);
@@ -616,7 +634,7 @@ addpartform:
gctl_ro_param(r, "verb", -1, "add");
gctl_ro_param(r, "type", -1, "freebsd-boot");
snprintf(sizestr, sizeof(sizestr), "%jd",
- partcode_size(scheme) / sector);
+ bootpart_size(scheme) / sector);
gctl_ro_param(r, "size", -1, sizestr);
snprintf(startstr, sizeof(startstr), "%jd", firstfree);
gctl_ro_param(r, "start", -1, startstr);
@@ -629,7 +647,7 @@ addpartform:
get_part_metadata(strtok(output, " "), 1)->bootcode = 1;
/* Now adjust the part we are really adding forward */
- firstfree += partcode_size(scheme) / sector;
+ firstfree += bootpart_size(scheme) / sector;
if (stripe > 0 && (firstfree*sector % stripe) != 0)
firstfree += (stripe - ((firstfree*sector) %
stripe)) / sector;
@@ -663,7 +681,7 @@ addpartform:
else if (strcmp(items[0].text, "freebsd") == 0)
gpart_partition(strtok(output, " "), "BSD");
else
- set_part_metadata(strtok(output, " "), items[0].text,
+ set_part_metadata(strtok(output, " "), scheme, items[0].text,
items[3].text, 1);
for (i = 0; i < (sizeof(items) / sizeof(items[0])); i++)
Modified: user/nwhitehorn/bsdinstall/partedit/partedit.h
==============================================================================
--- user/nwhitehorn/bsdinstall/partedit/partedit.h Sun Jan 2 03:16:07 2011 (r216883)
+++ user/nwhitehorn/bsdinstall/partedit/partedit.h Sun Jan 2 03:16:47 2011 (r216884)
@@ -31,6 +31,6 @@ void gpart_commit(struct gmesh *mesh);
/* machine-dependent bootability checks */
int is_scheme_bootable(const char *part_type);
-size_t partcode_size(const char *part_type);
+size_t bootpart_size(const char *part_type);
const char *bootcode_path(const char *part_type);
const char *partcode_path(const char *part_type);
Added: user/nwhitehorn/bsdinstall/partedit/partedit_pc98.c
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ user/nwhitehorn/bsdinstall/partedit/partedit_pc98.c Sun Jan 2 03:16:47 2011 (r216884)
@@ -0,0 +1,34 @@
+#include <string.h>
+
+#include "partedit.h"
+
+int
+is_scheme_bootable(const char *part_type) {
+ if (strcmp(part_type, "PC98") == 0)
+ return (1);
+ if (strcmp(part_type, "BSD") == 0)
+ return (1);
+
+ return (0);
+}
+
+size_t
+bootpart_size(const char *part_type) {
+ /* No boot partition */
+ return (0);
+}
+
+const char *
+bootcode_path(const char *part_type) {
+ if (strcmp(part_type, "BSD") == 0)
+ return ("/boot/boot");
+
+ return (NULL);
+}
+
+const char *
+partcode_path(const char *part_type) {
+ /* No partcode */
+ return (NULL);
+}
+
Modified: user/nwhitehorn/bsdinstall/partedit/partedit_powerpc.c
==============================================================================
--- user/nwhitehorn/bsdinstall/partedit/partedit_powerpc.c Sun Jan 2 03:16:07 2011 (r216883)
+++ user/nwhitehorn/bsdinstall/partedit/partedit_powerpc.c Sun Jan 2 03:16:47 2011 (r216884)
@@ -10,7 +10,7 @@ is_scheme_bootable(const char *part_type
}
size_t
-partcode_size(const char *part_type) {
+bootpart_size(const char *part_type) {
if (strcmp(part_type, "APM") == 0)
return (800*1024);
return (0);
Added: user/nwhitehorn/bsdinstall/partedit/partedit_sparc64.c
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ user/nwhitehorn/bsdinstall/partedit/partedit_sparc64.c Sun Jan 2 03:16:47 2011 (r216884)
@@ -0,0 +1,30 @@
+#include <string.h>
+
+#include "partedit.h"
+
+int
+is_scheme_bootable(const char *part_type) {
+ if (strcmp(part_type, "VTOC8") == 0)
+ return (1);
+ return (0);
+}
+
+size_t
+bootpart_size(const char *part_type) {
+ /* No standalone boot partition */
+
+ return (0);
+}
+
+const char *
+bootcode_path(const char *part_type) {
+ return (NULL);
+}
+
+const char *
+partcode_path(const char *part_type) {
+ if (strcmp(part_type, "VTOC8") == 0)
+ return ("/boot/boot1");
+ return (NULL);
+}
+
Modified: user/nwhitehorn/bsdinstall/partedit/partedit_x86.c
==============================================================================
--- user/nwhitehorn/bsdinstall/partedit/partedit_x86.c Sun Jan 2 03:16:07 2011 (r216883)
+++ user/nwhitehorn/bsdinstall/partedit/partedit_x86.c Sun Jan 2 03:16:47 2011 (r216884)
@@ -15,7 +15,7 @@ is_scheme_bootable(const char *part_type
}
size_t
-partcode_size(const char *part_type) {
+bootpart_size(const char *part_type) {
if (strcmp(part_type, "GPT") == 0)
return (64*1024);
More information about the svn-src-user
mailing list