summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authortsubai <tsubai@NetBSD.org>1999-08-03 07:08:36 +0000
committertsubai <tsubai@NetBSD.org>1999-08-03 07:08:36 +0000
commit4eb4de3592a61d1028bb486ca0e8a5270fec486b (patch)
treec7df4d48b349a0a27fff5b0b6f59d923d1deeb0c /sys
parent9eb133fc08bdaa414b327cf14c8b271447b386e7 (diff)
Make ``boot kernelname'' work on OF-3.x too.
Diffstat (limited to 'sys')
-rw-r--r--sys/arch/macppc/stand/ofwboot/boot.c39
1 files changed, 34 insertions, 5 deletions
diff --git a/sys/arch/macppc/stand/ofwboot/boot.c b/sys/arch/macppc/stand/ofwboot/boot.c
index 0f8fadf68f4..b7d954a06c9 100644
--- a/sys/arch/macppc/stand/ofwboot/boot.c
+++ b/sys/arch/macppc/stand/ofwboot/boot.c
@@ -1,4 +1,4 @@
-/* $NetBSD: boot.c,v 1.6 1999/04/29 03:16:21 tsubai Exp $ */
+/* $NetBSD: boot.c,v 1.7 1999/08/03 07:08:36 tsubai Exp $ */
/*-
* Copyright (c) 1997 The NetBSD Foundation, Inc.
@@ -100,17 +100,28 @@ char bootfile[128];
int boothowto;
int debug;
+static ofw_version = 0;
+
static void
prom2boot(dev)
char *dev;
{
char *cp;
- for (cp = dev; *cp != '\0'; cp++)
+ cp = dev + strlen(dev) - 1;
+ for (; *cp; cp--) {
if (*cp == ':') {
- *cp = '\0';
- return;
+ if (ofw_version < 3) {
+ /* sd@0:0 -> sd@0 */
+ *cp = 0;
+ break;
+ } else {
+ /* disk@0:5,boot -> disk@0:0 */
+ strcpy(cp, ":0");
+ break;
+ }
}
+ }
}
static void
@@ -196,7 +207,7 @@ main()
{
extern char bootprog_name[], bootprog_rev[],
bootprog_maker[], bootprog_date[];
- int chosen, options;
+ int chosen, options, openprom;
char bootline[512]; /* Should check size? */
char *cp;
u_long marks[MARK_MAX];
@@ -208,6 +219,24 @@ main()
printf(">> (%s, %s)\n", bootprog_maker, bootprog_date);
/*
+ * Figure out what version of Open Firmware...
+ */
+ if ((openprom = OF_finddevice("/openprom")) != -1) {
+ char model[32];
+
+ bzero(model, sizeof model);
+ OF_getprop(openprom, "model", model, sizeof model);
+ for (cp = model; *cp; cp++)
+ if (*cp >= '0' && *cp <= '9') {
+ ofw_version = *cp - '0';
+ break;
+ }
+#if 0
+ printf(">> Open Firmware version %d.x\n", ofw_version);
+#endif
+ }
+
+ /*
* Get the boot arguments from Openfirmware
*/
if ((chosen = OF_finddevice("/chosen")) == -1 ||